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 8 extern "C" { 9 #endif 10 11 typedef struct AHardwareBuffer AHardwareBuffer; 12 typedef struct DvrHwcClient DvrHwcClient; 13 typedef 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. 20 typedef 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. 24 DvrHwcClient* dvrHwcClientCreate(DvrHwcOnFrameCallback callback, 25 void* client_state); 26 27 void dvrHwcClientDestroy(DvrHwcClient* client); 28 29 // Called to free the frame information. 30 void dvrHwcFrameDestroy(DvrHwcFrame* frame); 31 32 DvrHwcDisplay dvrHwcFrameGetDisplayId(DvrHwcFrame* frame); 33 34 int32_t dvrHwcFrameGetDisplayWidth(DvrHwcFrame* frame); 35 36 int32_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. 41 bool dvrHwcFrameGetDisplayRemoved(DvrHwcFrame* frame); 42 43 // @return Number of layers in the frame. 44 size_t dvrHwcFrameGetLayerCount(DvrHwcFrame* frame); 45 46 uint32_t dvrHwcFrameGetActiveConfig(DvrHwcFrame* frame); 47 uint32_t dvrHwcFrameGetColorMode(DvrHwcFrame* frame); 48 void dvrHwcFrameGetColorTransform(DvrHwcFrame* frame, float* out_matrix, 49 int32_t* out_hint); 50 uint32_t dvrHwcFrameGetPowerMode(DvrHwcFrame* frame); 51 uint32_t dvrHwcFrameGetVsyncEnabled(DvrHwcFrame* frame); 52 53 DvrHwcLayer 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()) 60 AHardwareBuffer* 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. 66 int dvrHwcFrameGetLayerFence(DvrHwcFrame* frame, size_t layer_index); 67 68 DvrHwcRecti dvrHwcFrameGetLayerDisplayFrame(DvrHwcFrame* frame, 69 size_t layer_index); 70 71 DvrHwcRectf dvrHwcFrameGetLayerCrop(DvrHwcFrame* frame, size_t layer_index); 72 73 DvrHwcBlendMode dvrHwcFrameGetLayerBlendMode(DvrHwcFrame* frame, 74 size_t layer_index); 75 76 float dvrHwcFrameGetLayerAlpha(DvrHwcFrame* frame, size_t layer_index); 77 78 uint32_t dvrHwcFrameGetLayerType(DvrHwcFrame* frame, size_t layer_index); 79 80 uint32_t dvrHwcFrameGetLayerApplicationId(DvrHwcFrame* frame, 81 size_t layer_index); 82 83 uint32_t dvrHwcFrameGetLayerZOrder(DvrHwcFrame* frame, size_t layer_index); 84 85 void dvrHwcFrameGetLayerCursor(DvrHwcFrame* frame, size_t layer_index, 86 int32_t* out_x, int32_t* out_y); 87 88 uint32_t dvrHwcFrameGetLayerTransform(DvrHwcFrame* frame, size_t layer_index); 89 90 uint32_t dvrHwcFrameGetLayerDataspace(DvrHwcFrame* frame, size_t layer_index); 91 92 uint32_t dvrHwcFrameGetLayerColor(DvrHwcFrame* frame, size_t layer_index); 93 94 uint32_t dvrHwcFrameGetLayerNumVisibleRegions(DvrHwcFrame* frame, 95 size_t layer_index); 96 DvrHwcRecti dvrHwcFrameGetLayerVisibleRegion(DvrHwcFrame* frame, 97 size_t layer_index, size_t index); 98 99 uint32_t dvrHwcFrameGetLayerNumDamagedRegions(DvrHwcFrame* frame, 100 size_t layer_index); 101 DvrHwcRecti 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