1#ifndef ANDROID_DVR_HARDWARE_COMPOSER_CLIENT_H 2#define ANDROID_DVR_HARDWARE_COMPOSER_CLIENT_H 3 4#include <dvr/dvr_hardware_composer_defs.h> 5#include <stdbool.h> 6 7#ifdef __cplusplus 8extern "C" { 9#endif 10 11typedef struct AHardwareBuffer AHardwareBuffer; 12typedef struct DvrHwcClient DvrHwcClient; 13typedef struct DvrHwcFrame DvrHwcFrame; 14 15// Called when a new frame has arrived. 16// 17// @param client_state Pointer to client state passed in |dvrHwcCreateClient()|. 18// @param frame New frame. Owned by the client. 19// @return fence FD for the release of the last frame. 20typedef int(*DvrHwcOnFrameCallback)(void* client_state, DvrHwcFrame* frame); 21 22// @param callback Called when a new frame is available. 23// @param client_state Pointer to client state passed back in the callback. 24DvrHwcClient* dvrHwcClientCreate(DvrHwcOnFrameCallback callback, 25 void* client_state); 26 27void dvrHwcClientDestroy(DvrHwcClient* client); 28 29// Called to free the frame information. 30void dvrHwcFrameDestroy(DvrHwcFrame* frame); 31 32DvrHwcDisplay dvrHwcFrameGetDisplayId(DvrHwcFrame* frame); 33 34int32_t dvrHwcFrameGetDisplayWidth(DvrHwcFrame* frame); 35 36int32_t dvrHwcFrameGetDisplayHeight(DvrHwcFrame* frame); 37 38// @return True if the display has been removed. In this case the current frame 39// does not contain any valid layers to display. It is a signal to clean up any 40// display related state. 41bool dvrHwcFrameGetDisplayRemoved(DvrHwcFrame* frame); 42 43// @return Number of layers in the frame. 44size_t dvrHwcFrameGetLayerCount(DvrHwcFrame* frame); 45 46uint32_t dvrHwcFrameGetActiveConfig(DvrHwcFrame* frame); 47uint32_t dvrHwcFrameGetColorMode(DvrHwcFrame* frame); 48void dvrHwcFrameGetColorTransform(DvrHwcFrame* frame, float* out_matrix, 49 int32_t* out_hint); 50uint32_t dvrHwcFrameGetPowerMode(DvrHwcFrame* frame); 51uint32_t dvrHwcFrameGetVsyncEnabled(DvrHwcFrame* frame); 52 53DvrHwcLayer dvrHwcFrameGetLayerId(DvrHwcFrame* frame, size_t layer_index); 54 55// Return the graphic buffer associated with the layer at |layer_index| in 56// |frame|. 57// 58// @return Graphic buffer. Caller owns the buffer and is responsible for freeing 59// it. (see AHardwareBuffer_release()) 60AHardwareBuffer* dvrHwcFrameGetLayerBuffer(DvrHwcFrame* frame, 61 size_t layer_index); 62 63// Returns the fence FD for the layer at index |layer_index| in |frame|. 64// 65// @return Fence FD. Caller owns the FD and is responsible for closing it. 66int dvrHwcFrameGetLayerFence(DvrHwcFrame* frame, size_t layer_index); 67 68DvrHwcRecti dvrHwcFrameGetLayerDisplayFrame(DvrHwcFrame* frame, 69 size_t layer_index); 70 71DvrHwcRectf dvrHwcFrameGetLayerCrop(DvrHwcFrame* frame, size_t layer_index); 72 73DvrHwcBlendMode dvrHwcFrameGetLayerBlendMode(DvrHwcFrame* frame, 74 size_t layer_index); 75 76float dvrHwcFrameGetLayerAlpha(DvrHwcFrame* frame, size_t layer_index); 77 78uint32_t dvrHwcFrameGetLayerType(DvrHwcFrame* frame, size_t layer_index); 79 80uint32_t dvrHwcFrameGetLayerApplicationId(DvrHwcFrame* frame, 81 size_t layer_index); 82 83uint32_t dvrHwcFrameGetLayerZOrder(DvrHwcFrame* frame, size_t layer_index); 84 85void dvrHwcFrameGetLayerCursor(DvrHwcFrame* frame, size_t layer_index, 86 int32_t* out_x, int32_t* out_y); 87 88uint32_t dvrHwcFrameGetLayerTransform(DvrHwcFrame* frame, size_t layer_index); 89 90uint32_t dvrHwcFrameGetLayerDataspace(DvrHwcFrame* frame, size_t layer_index); 91 92uint32_t dvrHwcFrameGetLayerColor(DvrHwcFrame* frame, size_t layer_index); 93 94uint32_t dvrHwcFrameGetLayerNumVisibleRegions(DvrHwcFrame* frame, 95 size_t layer_index); 96DvrHwcRecti dvrHwcFrameGetLayerVisibleRegion(DvrHwcFrame* frame, 97 size_t layer_index, size_t index); 98 99uint32_t dvrHwcFrameGetLayerNumDamagedRegions(DvrHwcFrame* frame, 100 size_t layer_index); 101DvrHwcRecti dvrHwcFrameGetLayerDamagedRegion(DvrHwcFrame* frame, 102 size_t layer_index, size_t index); 103#ifdef __cplusplus 104} // extern "C" 105#endif 106 107#endif // ANDROID_DVR_HARDWARE_COMPOSER_CLIENT_H 108