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