1 #ifndef ANDROID_DVR_HARDWARE_COMPOSER_CLIENT_H
2 #define ANDROID_DVR_HARDWARE_COMPOSER_CLIENT_H
3 
4 #include <dvr/dvr_hardware_composer_types.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 // Called to free the DvrHwcClient pointer.
28 void dvrHwcClientDestroy(DvrHwcClient* client);
29 
30 // Called to free the frame information.
31 // @param frame Pointer for the valid frame used for the query.
32 void dvrHwcFrameDestroy(DvrHwcFrame* frame);
33 
34 // @param frame Pointer for the valid frame used for the query.
35 // @return Identifier for the display associated by the frame.
36 DvrHwcDisplay dvrHwcFrameGetDisplayId(DvrHwcFrame* frame);
37 
38 // @param frame Pointer for the valid frame used for the query.
39 // @return width of the physical display associated with |frame|. This does not
40 // take into account any orientation changes.
41 int32_t dvrHwcFrameGetDisplayWidth(DvrHwcFrame* frame);
42 
43 // @param frame Pointer for the valid frame used for the query.
44 // @return height of the physical display associated with |frame|. This does not
45 // take into account any orientation changes.
46 int32_t dvrHwcFrameGetDisplayHeight(DvrHwcFrame* frame);
47 
48 // @param frame Pointer for the valid frame used for the query.
49 // @return True if the display has been removed. In this case the current frame
50 // does not contain any valid layers to display. It is a signal to clean up any
51 // display related state.
52 bool dvrHwcFrameGetDisplayRemoved(DvrHwcFrame* frame);
53 
54 // @param frame Pointer for the valid frame used for the query.
55 // @return Number of layers in the frame.
56 size_t dvrHwcFrameGetLayerCount(DvrHwcFrame* frame);
57 
58 // @param frame Pointer for the valid frame used for the query.
59 // @return The ID of the currently active display configuration.
60 uint32_t dvrHwcFrameGetActiveConfig(DvrHwcFrame* frame);
61 
62 // @param frame Pointer for the valid frame used for the query.
63 // @return The ID of the current color mode. See HAL_COLOR_MODE_* for valid
64 // values.
65 uint32_t dvrHwcFrameGetColorMode(DvrHwcFrame* frame);
66 
67 // @param frame Pointer for the valid frame used for the query.
68 // @param out_matrix Output parameter for a float[16] array which will be filled
69 // with the color transform matrix.
70 // @param out_hint Output parameter which will contain the color transform hint.
71 // See HAL_COLOR_TRANSFORM_* for valid values.
72 void dvrHwcFrameGetColorTransform(DvrHwcFrame* frame, float* out_matrix,
73                                   int32_t* out_hint);
74 
75 // @param frame Pointer for the valid frame used for the query.
76 // @return The current power mode for the display. See HWC2_POWER_MODE_* for
77 // valid values.
78 uint32_t dvrHwcFrameGetPowerMode(DvrHwcFrame* frame);
79 
80 // @param frame Pointer for the valid frame used for the query.
81 // @return The current state of vsync. See HWC2_VSYNC_* for valid values.
82 uint32_t dvrHwcFrameGetVsyncEnabled(DvrHwcFrame* frame);
83 
84 // @param frame Pointer for the valid frame used for the query.
85 // @param layer_index The index of the layer in the frame.
86 // @return A unique ID for the layer.
87 DvrHwcLayer dvrHwcFrameGetLayerId(DvrHwcFrame* frame, size_t layer_index);
88 
89 // Return the graphic buffer associated with the layer at |layer_index| in
90 // |frame|.
91 //
92 // @param frame Pointer for the valid frame used for the query.
93 // @param layer_index The index of the layer in the frame.
94 // @return Graphic buffer. Caller owns the buffer and is responsible for freeing
95 // it. (see AHardwareBuffer_release())
96 AHardwareBuffer* dvrHwcFrameGetLayerBuffer(DvrHwcFrame* frame,
97                                            size_t layer_index);
98 
99 // Returns the fence FD for the layer at index |layer_index| in |frame|.
100 //
101 // @param frame Pointer for the valid frame used for the query.
102 // @param layer_index The index of the layer in the frame.
103 // @return Fence FD. Caller owns the FD and is responsible for closing it.
104 int dvrHwcFrameGetLayerFence(DvrHwcFrame* frame, size_t layer_index);
105 
106 // @param frame Pointer for the valid frame used for the query.
107 // @param layer_index The index of the layer in the frame.
108 // @return describing the portion of the display covered by the layer. Will
109 // not exceed the display dimensions.
110 DvrHwcRecti dvrHwcFrameGetLayerDisplayFrame(DvrHwcFrame* frame,
111                                             size_t layer_index);
112 
113 // @param frame Pointer for the valid frame used for the query.
114 // @param layer_index The index of the layer in the frame.
115 // @return describing the portion of the layer that will fill the display
116 // frame. Will not exceed the layer dimensions.
117 DvrHwcRectf dvrHwcFrameGetLayerCrop(DvrHwcFrame* frame, size_t layer_index);
118 
119 // @param frame Pointer for the valid frame used for the query.
120 // @param layer_index The index of the layer in the frame.
121 // @return The blend mode of the layer.
122 DvrHwcBlendMode dvrHwcFrameGetLayerBlendMode(DvrHwcFrame* frame,
123                                              size_t layer_index);
124 
125 // @param frame Pointer for the valid frame used for the query.
126 // @param layer_index The index of the layer in the frame.
127 // @return The alpha value to be applied to the whole layer. Will be in the
128 // [0.0, 1.0] range.
129 float dvrHwcFrameGetLayerAlpha(DvrHwcFrame* frame, size_t layer_index);
130 
131 // @param frame Pointer for the valid frame used for the query.
132 // @param layer_index The index of the layer in the frame.
133 // @return The type of the layer assigned by the window manager.
134 uint32_t dvrHwcFrameGetLayerType(DvrHwcFrame* frame, size_t layer_index);
135 
136 // @param frame Pointer for the valid frame used for the query.
137 // @param layer_index The index of the layer in the frame.
138 // @return The application id the layer belongs to.
139 uint32_t dvrHwcFrameGetLayerApplicationId(DvrHwcFrame* frame,
140                                           size_t layer_index);
141 
142 // @param frame Pointer for the valid frame used for the query.
143 // @param layer_index The index of the layer in the frame.
144 // @return The z-order for the layer.
145 uint32_t dvrHwcFrameGetLayerZOrder(DvrHwcFrame* frame, size_t layer_index);
146 
147 // @param frame Pointer for the valid frame used for the query.
148 // @param layer_index The index of the layer in the frame.
149 // @param out_x Output parameter for the x coordinate of the cursor location.
150 // @param out_y Output parameter for the y coordinate of the cursor location.
151 void dvrHwcFrameGetLayerCursor(DvrHwcFrame* frame, size_t layer_index,
152                                int32_t* out_x, int32_t* out_y);
153 
154 // @param frame Pointer for the valid frame used for the query.
155 // @param layer_index The index of the layer in the frame.
156 // @return The transformation that needs to be applied to the layer before
157 // presenting it. See DVR_HWC_TRANSFORM_* for valid values.
158 uint32_t dvrHwcFrameGetLayerTransform(DvrHwcFrame* frame, size_t layer_index);
159 
160 // @param frame Pointer for the valid frame used for the query.
161 // @param layer_index The index of the layer in the frame.
162 // @return The dataspace which represents how the pixel values should be
163 // interpreted. See HAL_DATASPACE_* for valid values.
164 uint32_t dvrHwcFrameGetLayerDataspace(DvrHwcFrame* frame, size_t layer_index);
165 
166 // @param frame Pointer for the valid frame used for the query.
167 // @param layer_index The index of the layer in the frame.
168 // @return The color of the layer if layer composition is SOLID_COLOR.
169 uint32_t dvrHwcFrameGetLayerColor(DvrHwcFrame* frame, size_t layer_index);
170 
171 // @param frame Pointer for the valid frame used for the query.
172 // @param layer_index The index of the layer in the frame.
173 // @return The number of visible regions.
174 uint32_t dvrHwcFrameGetLayerNumVisibleRegions(DvrHwcFrame* frame,
175                                               size_t layer_index);
176 // @param frame Pointer for the valid frame used for the query.
177 // @param layer_index The index of the layer in the frame.
178 // @param index The index of the visible region for the layer.
179 // @return The rectangle describing the visible region.
180 DvrHwcRecti dvrHwcFrameGetLayerVisibleRegion(DvrHwcFrame* frame,
181                                              size_t layer_index, size_t index);
182 
183 // @param frame Pointer for the valid frame used for the query.
184 // @param layer_index The index of the layer in the frame.
185 // @return The number of damanged regions.
186 uint32_t dvrHwcFrameGetLayerNumDamagedRegions(DvrHwcFrame* frame,
187                                               size_t layer_index);
188 
189 // @param frame Pointer for the valid frame used for the query.
190 // @param layer_index The index of the layer in the frame.
191 // @param index The index of the damanged region for the layer.
192 // @return The rectangle describing the damaged region.
193 DvrHwcRecti dvrHwcFrameGetLayerDamagedRegion(DvrHwcFrame* frame,
194                                              size_t layer_index, size_t index);
195 #ifdef __cplusplus
196 }  // extern "C"
197 #endif
198 
199 #endif  // ANDROID_DVR_HARDWARE_COMPOSER_CLIENT_H
200