OSDN Git Service

DO NOT MERGE Remove window obscurement information. am: 5508ca2c19 am: 3847972ad2...
[android-x86/frameworks-native.git] / libs / vr / libdvr / include / dvr / dvr_api.h
1 #ifndef ANDROID_DVR_API_H_
2 #define ANDROID_DVR_API_H_
3
4 #include <stdbool.h>
5 #include <stddef.h>
6 #include <stdint.h>
7 #include <sys/cdefs.h>
8 #include <unistd.h>
9
10 #include <dvr/dvr_hardware_composer_defs.h>
11
12 __BEGIN_DECLS
13
14 typedef struct ANativeWindow ANativeWindow;
15
16 typedef struct DvrPoseAsync DvrPoseAsync;
17
18 typedef uint64_t DvrSurfaceUpdateFlags;
19 typedef struct DvrDisplayManager DvrDisplayManager;
20 typedef struct DvrSurfaceState DvrSurfaceState;
21 typedef struct DvrPose DvrPose;
22 typedef struct DvrVSyncClient DvrVSyncClient;
23 typedef struct DvrVirtualTouchpad DvrVirtualTouchpad;
24
25 typedef struct DvrBuffer DvrBuffer;
26 typedef struct DvrWriteBuffer DvrWriteBuffer;
27 typedef struct DvrReadBuffer DvrReadBuffer;
28 typedef struct AHardwareBuffer AHardwareBuffer;
29
30 typedef struct DvrReadBufferQueue DvrReadBufferQueue;
31 typedef struct DvrWriteBufferQueue DvrWriteBufferQueue;
32
33 typedef struct DvrSurface DvrSurface;
34 typedef uint64_t DvrSurfaceAttributeType;
35 typedef int32_t DvrSurfaceAttributeKey;
36
37 typedef struct DvrSurfaceAttributeValue DvrSurfaceAttributeValue;
38 typedef struct DvrSurfaceAttribute DvrSurfaceAttribute;
39
40 struct native_handle;
41
42 // dvr_display_manager.h
43 typedef int (*DvrDisplayManagerCreatePtr)(DvrDisplayManager** client_out);
44 typedef void (*DvrDisplayManagerDestroyPtr)(DvrDisplayManager* client);
45 typedef int (*DvrDisplayManagerSetupNamedBufferPtr)(DvrDisplayManager* client,
46                                                     const char* name,
47                                                     size_t size, uint64_t usage,
48                                                     DvrBuffer** buffer_out);
49 typedef int (*DvrDisplayManagerGetEventFdPtr)(DvrDisplayManager* client);
50 typedef int (*DvrDisplayManagerTranslateEpollEventMaskPtr)(
51     DvrDisplayManager* client, int in_events, int* out_events);
52 typedef int (*DvrDisplayManagerGetSurfaceStatePtr)(
53     DvrDisplayManager* client, DvrSurfaceState* surface_state);
54 typedef int (*DvrDisplayManagerGetReadBufferQueuePtr)(
55     DvrDisplayManager* client, int surface_id, int queue_id,
56     DvrReadBufferQueue** queue_out);
57 typedef int (*DvrSurfaceStateCreatePtr)(DvrSurfaceState** surface_state);
58 typedef void (*DvrSurfaceStateDestroyPtr)(DvrSurfaceState* surface_state);
59 typedef int (*DvrSurfaceStateGetSurfaceCountPtr)(DvrSurfaceState* surface_state,
60                                                  size_t* count_out);
61 typedef int (*DvrSurfaceStateGetUpdateFlagsPtr)(
62     DvrSurfaceState* surface_state, size_t surface_index,
63     DvrSurfaceUpdateFlags* flags_out);
64 typedef int (*DvrSurfaceStateGetSurfaceIdPtr)(DvrSurfaceState* surface_state,
65                                               size_t surface_index,
66                                               int* surface_id_out);
67 typedef int (*DvrSurfaceStateGetProcessIdPtr)(DvrSurfaceState* surface_state,
68                                               size_t surface_index,
69                                               int* process_id_out);
70 typedef int (*DvrSurfaceStateGetQueueCountPtr)(DvrSurfaceState* surface_state,
71                                                size_t surface_index,
72                                                size_t* count_out);
73 typedef ssize_t (*DvrSurfaceStateGetQueueIdsPtr)(DvrSurfaceState* surface_state,
74                                                  size_t surface_index,
75                                                  int* queue_ids,
76                                                  size_t max_count);
77 typedef int (*DvrSurfaceStateGetZOrderPtr)(DvrSurfaceState* surface_state,
78                                            size_t surface_index,
79                                            int* z_order_out);
80 typedef int (*DvrSurfaceStateGetVisiblePtr)(DvrSurfaceState* surface_state,
81                                             size_t surface_index,
82                                             bool* visible_out);
83 typedef int (*DvrSurfaceStateGetAttributeCountPtr)(
84     DvrSurfaceState* surface_state, size_t surface_index, size_t* count_out);
85 typedef ssize_t (*DvrSurfaceStateGetAttributesPtr)(
86     DvrSurfaceState* surface_state, size_t surface_index,
87     DvrSurfaceAttribute* attributes, size_t max_attribute_count);
88
89 // dvr_buffer.h
90 typedef void (*DvrWriteBufferCreateEmptyPtr)(DvrWriteBuffer** write_buffer_out);
91 typedef void (*DvrWriteBufferDestroyPtr)(DvrWriteBuffer* write_buffer);
92 typedef int (*DvrWriteBufferIsValidPtr)(DvrWriteBuffer* write_buffer);
93 typedef int (*DvrWriteBufferClearPtr)(DvrWriteBuffer* write_buffer);
94 typedef int (*DvrWriteBufferGetIdPtr)(DvrWriteBuffer* write_buffer);
95 typedef int (*DvrWriteBufferGetAHardwareBufferPtr)(
96     DvrWriteBuffer* write_buffer, AHardwareBuffer** hardware_buffer);
97 typedef int (*DvrWriteBufferPostPtr)(DvrWriteBuffer* write_buffer,
98                                      int ready_fence_fd, const void* meta,
99                                      size_t meta_size_bytes);
100 typedef int (*DvrWriteBufferGainPtr)(DvrWriteBuffer* write_buffer,
101                                      int* release_fence_fd);
102 typedef int (*DvrWriteBufferGainAsyncPtr)(DvrWriteBuffer* write_buffer);
103 typedef const struct native_handle* (*DvrWriteBufferGetNativeHandlePtr)(
104     DvrWriteBuffer* write_buffer);
105
106 typedef void (*DvrReadBufferCreateEmptyPtr)(DvrReadBuffer** read_buffer_out);
107 typedef void (*DvrReadBufferDestroyPtr)(DvrReadBuffer* read_buffer);
108 typedef int (*DvrReadBufferIsValidPtr)(DvrReadBuffer* read_buffer);
109 typedef int (*DvrReadBufferClearPtr)(DvrReadBuffer* read_buffer);
110 typedef int (*DvrReadBufferGetIdPtr)(DvrReadBuffer* read_buffer);
111 typedef int (*DvrReadBufferGetAHardwareBufferPtr)(
112     DvrReadBuffer* read_buffer, AHardwareBuffer** hardware_buffer);
113 typedef int (*DvrReadBufferAcquirePtr)(DvrReadBuffer* read_buffer,
114                                        int* ready_fence_fd, void* meta,
115                                        size_t meta_size_bytes);
116 typedef int (*DvrReadBufferReleasePtr)(DvrReadBuffer* read_buffer,
117                                        int release_fence_fd);
118 typedef int (*DvrReadBufferReleaseAsyncPtr)(DvrReadBuffer* read_buffer);
119 typedef const struct native_handle* (*DvrReadBufferGetNativeHandlePtr)(
120     DvrReadBuffer* read_buffer);
121
122 typedef void (*DvrBufferDestroyPtr)(DvrBuffer* buffer);
123 typedef int (*DvrBufferGetAHardwareBufferPtr)(
124     DvrBuffer* buffer, AHardwareBuffer** hardware_buffer);
125 typedef const struct native_handle* (*DvrBufferGetNativeHandlePtr)(
126     DvrBuffer* buffer);
127
128 // dvr_buffer_queue.h
129 typedef void (*DvrWriteBufferQueueDestroyPtr)(DvrWriteBufferQueue* write_queue);
130 typedef ssize_t (*DvrWriteBufferQueueGetCapacityPtr)(
131     DvrWriteBufferQueue* write_queue);
132 typedef int (*DvrWriteBufferQueueGetIdPtr)(DvrWriteBufferQueue* write_queue);
133 typedef int (*DvrWriteBufferQueueGetExternalSurfacePtr)(
134     DvrWriteBufferQueue* write_queue, ANativeWindow** out_window);
135 typedef int (*DvrWriteBufferQueueCreateReadQueuePtr)(
136     DvrWriteBufferQueue* write_queue, DvrReadBufferQueue** out_read_queue);
137 typedef int (*DvrWriteBufferQueueDequeuePtr)(DvrWriteBufferQueue* write_queue,
138                                              int timeout,
139                                              DvrWriteBuffer* out_buffer,
140                                              int* out_fence_fd);
141 typedef void (*DvrReadBufferQueueDestroyPtr)(DvrReadBufferQueue* read_queue);
142 typedef ssize_t (*DvrReadBufferQueueGetCapacityPtr)(
143     DvrReadBufferQueue* read_queue);
144 typedef int (*DvrReadBufferQueueGetIdPtr)(DvrReadBufferQueue* read_queue);
145 typedef int (*DvrReadBufferQueueCreateReadQueuePtr)(
146     DvrReadBufferQueue* read_queue, DvrReadBufferQueue** out_read_queue);
147 typedef int (*DvrReadBufferQueueDequeuePtr)(DvrReadBufferQueue* read_queue,
148                                             int timeout,
149                                             DvrReadBuffer* out_buffer,
150                                             int* out_fence_fd, void* out_meta,
151                                             size_t meta_size_bytes);
152
153 // dvr_surface.h
154 typedef int (*DvrGetNamedBufferPtr)(const char* name, DvrBuffer** out_buffer);
155 typedef int (*DvrSurfaceCreatePtr)(const DvrSurfaceAttribute* attributes,
156                                    size_t attribute_count,
157                                    DvrSurface** surface_out);
158 typedef void (*DvrSurfaceDestroyPtr)(DvrSurface* surface);
159 typedef int (*DvrSurfaceGetIdPtr)(DvrSurface* surface);
160 typedef int (*DvrSurfaceSetAttributesPtr)(DvrSurface* surface,
161                                           const DvrSurfaceAttribute* attributes,
162                                           size_t attribute_count);
163 typedef int (*DvrSurfaceCreateWriteBufferQueuePtr)(
164     DvrSurface* surface, uint32_t width, uint32_t height, uint32_t format,
165     uint32_t layer_count, uint64_t usage, size_t capacity,
166     DvrWriteBufferQueue** queue_out);
167
168 // vsync_client_api.h
169 typedef int (*DvrVSyncClientCreatePtr)(DvrVSyncClient** client_out);
170 typedef void (*DvrVSyncClientDestroyPtr)(DvrVSyncClient* client);
171 typedef int (*DvrVSyncClientGetSchedInfoPtr)(DvrVSyncClient* client,
172                                              int64_t* vsync_period_ns,
173                                              int64_t* next_timestamp_ns,
174                                              uint32_t* next_vsync_count);
175
176 // pose_client.h
177 typedef DvrPose* (*DvrPoseCreatePtr)(void);
178 typedef void (*DvrPoseDestroyPtr)(DvrPose* client);
179 typedef int (*DvrPoseGetPtr)(DvrPose* client, uint32_t vsync_count,
180                              DvrPoseAsync* out_pose);
181 typedef uint32_t (*DvrPoseGetVsyncCountPtr)(DvrPose* client);
182 typedef int (*DvrPoseGetControllerPtr)(DvrPose* client, int32_t controller_id,
183                                        uint32_t vsync_count,
184                                        DvrPoseAsync* out_pose);
185
186 // virtual_touchpad_client.h
187 typedef DvrVirtualTouchpad* (*DvrVirtualTouchpadCreatePtr)(void);
188 typedef void (*DvrVirtualTouchpadDestroyPtr)(DvrVirtualTouchpad* client);
189 typedef int (*DvrVirtualTouchpadAttachPtr)(DvrVirtualTouchpad* client);
190 typedef int (*DvrVirtualTouchpadDetachPtr)(DvrVirtualTouchpad* client);
191 typedef int (*DvrVirtualTouchpadTouchPtr)(DvrVirtualTouchpad* client,
192                                           int touchpad, float x, float y,
193                                           float pressure);
194 typedef int (*DvrVirtualTouchpadButtonStatePtr)(DvrVirtualTouchpad* client,
195                                                 int touchpad, int buttons);
196
197 // dvr_hardware_composer_client.h
198 typedef struct DvrHwcClient DvrHwcClient;
199 typedef struct DvrHwcFrame DvrHwcFrame;
200 typedef int (*DvrHwcOnFrameCallback)(void* client_state, DvrHwcFrame* frame);
201 typedef DvrHwcClient* (*DvrHwcClientCreatePtr)(DvrHwcOnFrameCallback callback,
202                                                void* client_state);
203 typedef void (*DvrHwcClientDestroyPtr)(DvrHwcClient* client);
204 typedef void (*DvrHwcFrameDestroyPtr)(DvrHwcFrame* frame);
205 typedef DvrHwcDisplay (*DvrHwcFrameGetDisplayIdPtr)(DvrHwcFrame* frame);
206 typedef int32_t (*DvrHwcFrameGetDisplayWidthPtr)(DvrHwcFrame* frame);
207 typedef int32_t (*DvrHwcFrameGetDisplayHeightPtr)(DvrHwcFrame* frame);
208 typedef bool (*DvrHwcFrameGetDisplayRemovedPtr)(DvrHwcFrame* frame);
209 typedef size_t (*DvrHwcFrameGetLayerCountPtr)(DvrHwcFrame* frame);
210 typedef DvrHwcLayer (*DvrHwcFrameGetLayerIdPtr)(DvrHwcFrame* frame,
211                                                 size_t layer_index);
212 typedef uint32_t (*DvrHwcFrameGetActiveConfigPtr)(DvrHwcFrame* frame);
213 typedef uint32_t (*DvrHwcFrameGetColorModePtr)(DvrHwcFrame* frame);
214 typedef void (*DvrHwcFrameGetColorTransformPtr)(DvrHwcFrame* frame,
215                                                 float* out_matrix,
216                                                 int32_t* out_hint);
217 typedef uint32_t (*DvrHwcFrameGetPowerModePtr)(DvrHwcFrame* frame);
218 typedef uint32_t (*DvrHwcFrameGetVsyncEnabledPtr)(DvrHwcFrame* frame);
219 typedef AHardwareBuffer* (*DvrHwcFrameGetLayerBufferPtr)(DvrHwcFrame* frame,
220                                                          size_t layer_index);
221 typedef int (*DvrHwcFrameGetLayerFencePtr)(DvrHwcFrame* frame,
222                                            size_t layer_index);
223 typedef DvrHwcRecti (*DvrHwcFrameGetLayerDisplayFramePtr)(DvrHwcFrame* frame,
224                                                           size_t layer_index);
225 typedef DvrHwcRectf (*DvrHwcFrameGetLayerCropPtr)(DvrHwcFrame* frame,
226                                                   size_t layer_index);
227 typedef DvrHwcBlendMode (*DvrHwcFrameGetLayerBlendModePtr)(DvrHwcFrame* frame,
228                                                            size_t layer_index);
229 typedef float (*DvrHwcFrameGetLayerAlphaPtr)(DvrHwcFrame* frame,
230                                              size_t layer_index);
231 typedef uint32_t (*DvrHwcFrameGetLayerTypePtr)(DvrHwcFrame* frame,
232                                                size_t layer_index);
233 typedef uint32_t (*DvrHwcFrameGetLayerApplicationIdPtr)(DvrHwcFrame* frame,
234                                                         size_t layer_index);
235 typedef uint32_t (*DvrHwcFrameGetLayerZOrderPtr)(DvrHwcFrame* frame,
236                                                  size_t layer_index);
237
238 typedef void (*DvrHwcFrameGetLayerCursorPtr)(DvrHwcFrame* frame,
239                                              size_t layer_index, int32_t* out_x,
240                                              int32_t* out_y);
241
242 typedef uint32_t (*DvrHwcFrameGetLayerTransformPtr)(DvrHwcFrame* frame,
243                                                     size_t layer_index);
244
245 typedef uint32_t (*DvrHwcFrameGetLayerDataspacePtr)(DvrHwcFrame* frame,
246                                                     size_t layer_index);
247
248 typedef uint32_t (*DvrHwcFrameGetLayerColorPtr)(DvrHwcFrame* frame,
249                                                 size_t layer_index);
250
251 typedef uint32_t (*DvrHwcFrameGetLayerNumVisibleRegionsPtr)(DvrHwcFrame* frame,
252                                                             size_t layer_index);
253 typedef DvrHwcRecti (*DvrHwcFrameGetLayerVisibleRegionPtr)(DvrHwcFrame* frame,
254                                                            size_t layer_index,
255                                                            size_t index);
256
257 typedef uint32_t (*DvrHwcFrameGetLayerNumDamagedRegionsPtr)(DvrHwcFrame* frame,
258                                                             size_t layer_index);
259 typedef DvrHwcRecti (*DvrHwcFrameGetLayerDamagedRegionPtr)(DvrHwcFrame* frame,
260                                                            size_t layer_index,
261                                                            size_t index);
262
263 // The buffer metadata that an Android Surface (a.k.a. ANativeWindow)
264 // will populate. A DvrWriteBufferQueue must be created with this metadata iff
265 // ANativeWindow access is needed. Please do not remove, modify, or reorder
266 // existing data members. If new fields need to be added, please take extra care
267 // to make sure that new data field is padded properly the size of the struct
268 // stays same.
269 struct DvrNativeBufferMetadata {
270   // Timestamp of the frame.
271   int64_t timestamp;
272
273   // Whether the buffer is using auto timestamp.
274   int32_t is_auto_timestamp;
275
276   // Must be one of the HAL_DATASPACE_XXX value defined in system/graphics.h
277   int32_t dataspace;
278
279   // Crop extracted from an ACrop or android::Crop object.
280   int32_t crop_left;
281   int32_t crop_top;
282   int32_t crop_right;
283   int32_t crop_bottom;
284
285   // Must be one of the NATIVE_WINDOW_SCALING_MODE_XXX value defined in
286   // system/window.h.
287   int32_t scaling_mode;
288
289   // Must be one of the ANATIVEWINDOW_TRANSFORM_XXX value defined in
290   // android/native_window.h
291   int32_t transform;
292
293   // Reserved bytes for so that the struct is forward compatible.
294   int32_t reserved[16];
295 };
296
297 struct DvrApi_v1 {
298 // Defines an API entry for V1 (no version suffix).
299 #define DVR_V1_API_ENTRY(name) Dvr##name##Ptr name
300
301 // Include file with API entries.
302 #include "dvr_api_entries.h"
303
304 // Undefine macro definitions to play nice with Google3 style rules.
305 #undef DVR_V1_API_ENTRY
306 };
307
308 int dvrGetApi(void* api, size_t struct_size, int version);
309
310 __END_DECLS
311
312 #endif  // ANDROID_DVR_API_H_