137cdc8d0b9803e0c3dc17640534b74cd45fa4bd8Daniel Nicoara#ifndef ANDROID_DVR_HARDWARE_COMPOSER_CLIENT_H 237cdc8d0b9803e0c3dc17640534b74cd45fa4bd8Daniel Nicoara#define ANDROID_DVR_HARDWARE_COMPOSER_CLIENT_H 3ba2ce39b8e81e7816cc462eb690c9b066b007ae4Daniel Nicoara 437cdc8d0b9803e0c3dc17640534b74cd45fa4bd8Daniel Nicoara#include <dvr/dvr_hardware_composer_defs.h> 537cdc8d0b9803e0c3dc17640534b74cd45fa4bd8Daniel Nicoara#include <stdbool.h> 6ba2ce39b8e81e7816cc462eb690c9b066b007ae4Daniel Nicoara 7ba2ce39b8e81e7816cc462eb690c9b066b007ae4Daniel Nicoara#ifdef __cplusplus 8ba2ce39b8e81e7816cc462eb690c9b066b007ae4Daniel Nicoaraextern "C" { 9ba2ce39b8e81e7816cc462eb690c9b066b007ae4Daniel Nicoara#endif 10ba2ce39b8e81e7816cc462eb690c9b066b007ae4Daniel Nicoara 1137cdc8d0b9803e0c3dc17640534b74cd45fa4bd8Daniel Nicoaratypedef struct AHardwareBuffer AHardwareBuffer; 12ba2ce39b8e81e7816cc462eb690c9b066b007ae4Daniel Nicoaratypedef struct DvrHwcClient DvrHwcClient; 13ba2ce39b8e81e7816cc462eb690c9b066b007ae4Daniel Nicoaratypedef struct DvrHwcFrame DvrHwcFrame; 14ba2ce39b8e81e7816cc462eb690c9b066b007ae4Daniel Nicoara 15ba2ce39b8e81e7816cc462eb690c9b066b007ae4Daniel Nicoara// Called when a new frame has arrived. 16ba2ce39b8e81e7816cc462eb690c9b066b007ae4Daniel Nicoara// 1737cdc8d0b9803e0c3dc17640534b74cd45fa4bd8Daniel Nicoara// @param client_state Pointer to client state passed in |dvrHwcCreateClient()|. 18ba2ce39b8e81e7816cc462eb690c9b066b007ae4Daniel Nicoara// @param frame New frame. Owned by the client. 19ba2ce39b8e81e7816cc462eb690c9b066b007ae4Daniel Nicoara// @return fence FD for the release of the last frame. 2037cdc8d0b9803e0c3dc17640534b74cd45fa4bd8Daniel Nicoaratypedef int(*DvrHwcOnFrameCallback)(void* client_state, DvrHwcFrame* frame); 21ba2ce39b8e81e7816cc462eb690c9b066b007ae4Daniel Nicoara 2237cdc8d0b9803e0c3dc17640534b74cd45fa4bd8Daniel Nicoara// @param callback Called when a new frame is available. 2337cdc8d0b9803e0c3dc17640534b74cd45fa4bd8Daniel Nicoara// @param client_state Pointer to client state passed back in the callback. 2437cdc8d0b9803e0c3dc17640534b74cd45fa4bd8Daniel NicoaraDvrHwcClient* dvrHwcClientCreate(DvrHwcOnFrameCallback callback, 2537cdc8d0b9803e0c3dc17640534b74cd45fa4bd8Daniel Nicoara void* client_state); 2637cdc8d0b9803e0c3dc17640534b74cd45fa4bd8Daniel Nicoara 2737cdc8d0b9803e0c3dc17640534b74cd45fa4bd8Daniel Nicoaravoid dvrHwcClientDestroy(DvrHwcClient* client); 28ba2ce39b8e81e7816cc462eb690c9b066b007ae4Daniel Nicoara 29ba2ce39b8e81e7816cc462eb690c9b066b007ae4Daniel Nicoara// Called to free the frame information. 30ba2ce39b8e81e7816cc462eb690c9b066b007ae4Daniel Nicoaravoid dvrHwcFrameDestroy(DvrHwcFrame* frame); 31ba2ce39b8e81e7816cc462eb690c9b066b007ae4Daniel Nicoara 32736b6058d8c91ec4ad295c0a04c7b81d8119268cDaniel NicoaraDvrHwcDisplay dvrHwcFrameGetDisplayId(DvrHwcFrame* frame); 33ba2ce39b8e81e7816cc462eb690c9b066b007ae4Daniel Nicoara 3437cdc8d0b9803e0c3dc17640534b74cd45fa4bd8Daniel Nicoaraint32_t dvrHwcFrameGetDisplayWidth(DvrHwcFrame* frame); 3537cdc8d0b9803e0c3dc17640534b74cd45fa4bd8Daniel Nicoara 3637cdc8d0b9803e0c3dc17640534b74cd45fa4bd8Daniel Nicoaraint32_t dvrHwcFrameGetDisplayHeight(DvrHwcFrame* frame); 3737cdc8d0b9803e0c3dc17640534b74cd45fa4bd8Daniel Nicoara 3837cdc8d0b9803e0c3dc17640534b74cd45fa4bd8Daniel Nicoara// @return True if the display has been removed. In this case the current frame 3937cdc8d0b9803e0c3dc17640534b74cd45fa4bd8Daniel Nicoara// does not contain any valid layers to display. It is a signal to clean up any 4037cdc8d0b9803e0c3dc17640534b74cd45fa4bd8Daniel Nicoara// display related state. 4137cdc8d0b9803e0c3dc17640534b74cd45fa4bd8Daniel Nicoarabool dvrHwcFrameGetDisplayRemoved(DvrHwcFrame* frame); 4237cdc8d0b9803e0c3dc17640534b74cd45fa4bd8Daniel Nicoara 43ba2ce39b8e81e7816cc462eb690c9b066b007ae4Daniel Nicoara// @return Number of layers in the frame. 44ba2ce39b8e81e7816cc462eb690c9b066b007ae4Daniel Nicoarasize_t dvrHwcFrameGetLayerCount(DvrHwcFrame* frame); 45ba2ce39b8e81e7816cc462eb690c9b066b007ae4Daniel Nicoara 46730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulkuint32_t dvrHwcFrameGetActiveConfig(DvrHwcFrame* frame); 47730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulkuint32_t dvrHwcFrameGetColorMode(DvrHwcFrame* frame); 48730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulkvoid dvrHwcFrameGetColorTransform(DvrHwcFrame* frame, float* out_matrix, 49730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk int32_t* out_hint); 50730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulkuint32_t dvrHwcFrameGetPowerMode(DvrHwcFrame* frame); 51730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulkuint32_t dvrHwcFrameGetVsyncEnabled(DvrHwcFrame* frame); 52730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk 53736b6058d8c91ec4ad295c0a04c7b81d8119268cDaniel NicoaraDvrHwcLayer dvrHwcFrameGetLayerId(DvrHwcFrame* frame, size_t layer_index); 54ba2ce39b8e81e7816cc462eb690c9b066b007ae4Daniel Nicoara 55ba2ce39b8e81e7816cc462eb690c9b066b007ae4Daniel Nicoara// Return the graphic buffer associated with the layer at |layer_index| in 56ba2ce39b8e81e7816cc462eb690c9b066b007ae4Daniel Nicoara// |frame|. 57ba2ce39b8e81e7816cc462eb690c9b066b007ae4Daniel Nicoara// 58ba2ce39b8e81e7816cc462eb690c9b066b007ae4Daniel Nicoara// @return Graphic buffer. Caller owns the buffer and is responsible for freeing 59ba2ce39b8e81e7816cc462eb690c9b066b007ae4Daniel Nicoara// it. (see AHardwareBuffer_release()) 60ba2ce39b8e81e7816cc462eb690c9b066b007ae4Daniel NicoaraAHardwareBuffer* dvrHwcFrameGetLayerBuffer(DvrHwcFrame* frame, 61ba2ce39b8e81e7816cc462eb690c9b066b007ae4Daniel Nicoara size_t layer_index); 62ba2ce39b8e81e7816cc462eb690c9b066b007ae4Daniel Nicoara 63ba2ce39b8e81e7816cc462eb690c9b066b007ae4Daniel Nicoara// Returns the fence FD for the layer at index |layer_index| in |frame|. 64ba2ce39b8e81e7816cc462eb690c9b066b007ae4Daniel Nicoara// 65ba2ce39b8e81e7816cc462eb690c9b066b007ae4Daniel Nicoara// @return Fence FD. Caller owns the FD and is responsible for closing it. 66ba2ce39b8e81e7816cc462eb690c9b066b007ae4Daniel Nicoaraint dvrHwcFrameGetLayerFence(DvrHwcFrame* frame, size_t layer_index); 67ba2ce39b8e81e7816cc462eb690c9b066b007ae4Daniel Nicoara 68736b6058d8c91ec4ad295c0a04c7b81d8119268cDaniel NicoaraDvrHwcRecti dvrHwcFrameGetLayerDisplayFrame(DvrHwcFrame* frame, 69736b6058d8c91ec4ad295c0a04c7b81d8119268cDaniel Nicoara size_t layer_index); 70ba2ce39b8e81e7816cc462eb690c9b066b007ae4Daniel Nicoara 71736b6058d8c91ec4ad295c0a04c7b81d8119268cDaniel NicoaraDvrHwcRectf dvrHwcFrameGetLayerCrop(DvrHwcFrame* frame, size_t layer_index); 72ba2ce39b8e81e7816cc462eb690c9b066b007ae4Daniel Nicoara 73736b6058d8c91ec4ad295c0a04c7b81d8119268cDaniel NicoaraDvrHwcBlendMode dvrHwcFrameGetLayerBlendMode(DvrHwcFrame* frame, 74736b6058d8c91ec4ad295c0a04c7b81d8119268cDaniel Nicoara size_t layer_index); 75ba2ce39b8e81e7816cc462eb690c9b066b007ae4Daniel Nicoara 76ba2ce39b8e81e7816cc462eb690c9b066b007ae4Daniel Nicoarafloat dvrHwcFrameGetLayerAlpha(DvrHwcFrame* frame, size_t layer_index); 77ba2ce39b8e81e7816cc462eb690c9b066b007ae4Daniel Nicoara 78ba2ce39b8e81e7816cc462eb690c9b066b007ae4Daniel Nicoarauint32_t dvrHwcFrameGetLayerType(DvrHwcFrame* frame, size_t layer_index); 79ba2ce39b8e81e7816cc462eb690c9b066b007ae4Daniel Nicoara 80ba2ce39b8e81e7816cc462eb690c9b066b007ae4Daniel Nicoarauint32_t dvrHwcFrameGetLayerApplicationId(DvrHwcFrame* frame, 81ba2ce39b8e81e7816cc462eb690c9b066b007ae4Daniel Nicoara size_t layer_index); 82ba2ce39b8e81e7816cc462eb690c9b066b007ae4Daniel Nicoara 83730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulkuint32_t dvrHwcFrameGetLayerZOrder(DvrHwcFrame* frame, size_t layer_index); 84730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk 85730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulkvoid dvrHwcFrameGetLayerCursor(DvrHwcFrame* frame, size_t layer_index, 86730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk int32_t* out_x, int32_t* out_y); 87730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk 88730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulkuint32_t dvrHwcFrameGetLayerTransform(DvrHwcFrame* frame, size_t layer_index); 89730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk 90730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulkuint32_t dvrHwcFrameGetLayerDataspace(DvrHwcFrame* frame, size_t layer_index); 91730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk 92730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulkuint32_t dvrHwcFrameGetLayerColor(DvrHwcFrame* frame, size_t layer_index); 93730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk 94730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulkuint32_t dvrHwcFrameGetLayerNumVisibleRegions(DvrHwcFrame* frame, 95730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk size_t layer_index); 96730c89a8042e277304a90bff180348fcda75d5a7Albert ChaulkDvrHwcRecti dvrHwcFrameGetLayerVisibleRegion(DvrHwcFrame* frame, 97730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk size_t layer_index, size_t index); 98730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk 99730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulkuint32_t dvrHwcFrameGetLayerNumDamagedRegions(DvrHwcFrame* frame, 100730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk size_t layer_index); 101730c89a8042e277304a90bff180348fcda75d5a7Albert ChaulkDvrHwcRecti dvrHwcFrameGetLayerDamagedRegion(DvrHwcFrame* frame, 102730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk size_t layer_index, size_t index); 103ba2ce39b8e81e7816cc462eb690c9b066b007ae4Daniel Nicoara#ifdef __cplusplus 104ba2ce39b8e81e7816cc462eb690c9b066b007ae4Daniel Nicoara} // extern "C" 105ba2ce39b8e81e7816cc462eb690c9b066b007ae4Daniel Nicoara#endif 106ba2ce39b8e81e7816cc462eb690c9b066b007ae4Daniel Nicoara 10737cdc8d0b9803e0c3dc17640534b74cd45fa4bd8Daniel Nicoara#endif // ANDROID_DVR_HARDWARE_COMPOSER_CLIENT_H 108