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