OSDN Git Service

Merge "Add a new keycode for TV (ALL_APPS)" into oc-dev
[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 <unistd.h>
8 #include <cstdio>
9
10 #include <dvr/dvr_display_types.h>
11 #include <dvr/dvr_hardware_composer_types.h>
12 #include <dvr/dvr_pose.h>
13
14 #ifdef __cplusplus
15 extern "C" {
16 #endif
17
18 typedef struct ANativeWindow ANativeWindow;
19
20 typedef struct DvrPoseAsync DvrPoseAsync;
21
22 typedef uint64_t DvrSurfaceUpdateFlags;
23 typedef struct DvrDisplayManager DvrDisplayManager;
24 typedef struct DvrSurfaceState DvrSurfaceState;
25 typedef struct DvrPoseClient DvrPoseClient;
26 typedef struct DvrVSyncClient DvrVSyncClient;
27 typedef struct DvrVirtualTouchpad DvrVirtualTouchpad;
28
29 typedef struct DvrBuffer DvrBuffer;
30 typedef struct DvrWriteBuffer DvrWriteBuffer;
31 typedef struct DvrReadBuffer DvrReadBuffer;
32 typedef struct AHardwareBuffer AHardwareBuffer;
33
34 typedef struct DvrReadBufferQueue DvrReadBufferQueue;
35 typedef struct DvrWriteBufferQueue DvrWriteBufferQueue;
36
37 typedef struct DvrSurface DvrSurface;
38 typedef uint64_t DvrSurfaceAttributeType;
39 typedef int32_t DvrSurfaceAttributeKey;
40 typedef int32_t DvrGlobalBufferKey;
41
42 typedef struct DvrSurfaceAttributeValue DvrSurfaceAttributeValue;
43 typedef struct DvrSurfaceAttribute DvrSurfaceAttribute;
44
45 // Note: To avoid breaking others during active development, only modify this
46 // struct by appending elements to the end.
47 // If you do feel we should to re-arrange or remove elements, please make a
48 // note of it, and wait until we're about to finalize for an API release to do
49 // so.
50 typedef struct DvrNativeDisplayMetrics {
51   uint32_t display_width;
52   uint32_t display_height;
53   uint32_t display_x_dpi;
54   uint32_t display_y_dpi;
55   uint32_t vsync_period_ns;
56 } DvrNativeDisplayMetrics;
57
58 // native_handle contains the fds for the underlying ION allocations inside
59 // the gralloc buffer. This is needed temporarily while GPU vendors work on
60 // better support for AHardwareBuffer via glBindSharedBuffer APIs. See
61 // b/37207909. For now we can declare the native_handle struct where it is
62 // used for GPU late latching. See cutils/native_handle.h for the struct layout.
63 struct native_handle;
64
65 // Device metrics data type enums.
66 enum {
67   // Request the device lens metrics protobuf. This matches cardboard protos.
68   DVR_CONFIGURATION_DATA_LENS_METRICS = 0,
69   // Request the device metrics protobuf.
70   DVR_CONFIGURATION_DATA_DEVICE_METRICS = 1,
71   // Request the per device configuration data file.
72   DVR_CONFIGURATION_DATA_DEVICE_CONFIG = 2,
73 };
74
75 // dvr_display_manager.h
76 typedef int (*DvrDisplayManagerCreatePtr)(DvrDisplayManager** client_out);
77 typedef void (*DvrDisplayManagerDestroyPtr)(DvrDisplayManager* client);
78 typedef int (*DvrDisplayManagerGetEventFdPtr)(DvrDisplayManager* client);
79 typedef int (*DvrDisplayManagerTranslateEpollEventMaskPtr)(
80     DvrDisplayManager* client, int in_events, int* out_events);
81 typedef int (*DvrDisplayManagerGetSurfaceStatePtr)(
82     DvrDisplayManager* client, DvrSurfaceState* surface_state);
83 typedef int (*DvrDisplayManagerGetReadBufferQueuePtr)(
84     DvrDisplayManager* client, int surface_id, int queue_id,
85     DvrReadBufferQueue** queue_out);
86 typedef int (*DvrConfigurationDataGetPtr)(int config_type, uint8_t** data,
87                                           size_t* data_size);
88 typedef void (*DvrConfigurationDataDestroyPtr)(uint8_t* data);
89 typedef int (*DvrSurfaceStateCreatePtr)(DvrSurfaceState** surface_state);
90 typedef void (*DvrSurfaceStateDestroyPtr)(DvrSurfaceState* surface_state);
91 typedef int (*DvrSurfaceStateGetSurfaceCountPtr)(DvrSurfaceState* surface_state,
92                                                  size_t* count_out);
93 typedef int (*DvrSurfaceStateGetUpdateFlagsPtr)(
94     DvrSurfaceState* surface_state, size_t surface_index,
95     DvrSurfaceUpdateFlags* flags_out);
96 typedef int (*DvrSurfaceStateGetSurfaceIdPtr)(DvrSurfaceState* surface_state,
97                                               size_t surface_index,
98                                               int* surface_id_out);
99 typedef int (*DvrSurfaceStateGetProcessIdPtr)(DvrSurfaceState* surface_state,
100                                               size_t surface_index,
101                                               int* process_id_out);
102 typedef int (*DvrSurfaceStateGetQueueCountPtr)(DvrSurfaceState* surface_state,
103                                                size_t surface_index,
104                                                size_t* count_out);
105 typedef ssize_t (*DvrSurfaceStateGetQueueIdsPtr)(DvrSurfaceState* surface_state,
106                                                  size_t surface_index,
107                                                  int* queue_ids,
108                                                  size_t max_count);
109 typedef int (*DvrSurfaceStateGetZOrderPtr)(DvrSurfaceState* surface_state,
110                                            size_t surface_index,
111                                            int* z_order_out);
112 typedef int (*DvrSurfaceStateGetVisiblePtr)(DvrSurfaceState* surface_state,
113                                             size_t surface_index,
114                                             bool* visible_out);
115 typedef int (*DvrSurfaceStateGetAttributeCountPtr)(
116     DvrSurfaceState* surface_state, size_t surface_index, size_t* count_out);
117 typedef ssize_t (*DvrSurfaceStateGetAttributesPtr)(
118     DvrSurfaceState* surface_state, size_t surface_index,
119     DvrSurfaceAttribute* attributes, size_t max_attribute_count);
120
121 // dvr_buffer.h
122 typedef void (*DvrWriteBufferCreateEmptyPtr)(DvrWriteBuffer** write_buffer_out);
123 typedef void (*DvrWriteBufferDestroyPtr)(DvrWriteBuffer* write_buffer);
124 typedef int (*DvrWriteBufferIsValidPtr)(DvrWriteBuffer* write_buffer);
125 typedef int (*DvrWriteBufferClearPtr)(DvrWriteBuffer* write_buffer);
126 typedef int (*DvrWriteBufferGetIdPtr)(DvrWriteBuffer* write_buffer);
127 typedef int (*DvrWriteBufferGetAHardwareBufferPtr)(
128     DvrWriteBuffer* write_buffer, AHardwareBuffer** hardware_buffer);
129 typedef int (*DvrWriteBufferPostPtr)(DvrWriteBuffer* write_buffer,
130                                      int ready_fence_fd, const void* meta,
131                                      size_t meta_size_bytes);
132 typedef int (*DvrWriteBufferGainPtr)(DvrWriteBuffer* write_buffer,
133                                      int* release_fence_fd);
134 typedef int (*DvrWriteBufferGainAsyncPtr)(DvrWriteBuffer* write_buffer);
135 typedef const struct native_handle* (*DvrWriteBufferGetNativeHandlePtr)(
136     DvrWriteBuffer* write_buffer);
137
138 typedef void (*DvrReadBufferCreateEmptyPtr)(DvrReadBuffer** read_buffer_out);
139 typedef void (*DvrReadBufferDestroyPtr)(DvrReadBuffer* read_buffer);
140 typedef int (*DvrReadBufferIsValidPtr)(DvrReadBuffer* read_buffer);
141 typedef int (*DvrReadBufferClearPtr)(DvrReadBuffer* read_buffer);
142 typedef int (*DvrReadBufferGetIdPtr)(DvrReadBuffer* read_buffer);
143 typedef int (*DvrReadBufferGetAHardwareBufferPtr)(
144     DvrReadBuffer* read_buffer, AHardwareBuffer** hardware_buffer);
145 typedef int (*DvrReadBufferAcquirePtr)(DvrReadBuffer* read_buffer,
146                                        int* ready_fence_fd, void* meta,
147                                        size_t meta_size_bytes);
148 typedef int (*DvrReadBufferReleasePtr)(DvrReadBuffer* read_buffer,
149                                        int release_fence_fd);
150 typedef int (*DvrReadBufferReleaseAsyncPtr)(DvrReadBuffer* read_buffer);
151 typedef const struct native_handle* (*DvrReadBufferGetNativeHandlePtr)(
152     DvrReadBuffer* read_buffer);
153
154 typedef void (*DvrBufferDestroyPtr)(DvrBuffer* buffer);
155 typedef int (*DvrBufferGetAHardwareBufferPtr)(
156     DvrBuffer* buffer, AHardwareBuffer** hardware_buffer);
157 typedef int (*DvrBufferGlobalLayoutVersionGetPtr)();
158 typedef const struct native_handle* (*DvrBufferGetNativeHandlePtr)(
159     DvrBuffer* buffer);
160
161 // dvr_buffer_queue.h
162 typedef void (*DvrWriteBufferQueueDestroyPtr)(DvrWriteBufferQueue* write_queue);
163 typedef ssize_t (*DvrWriteBufferQueueGetCapacityPtr)(
164     DvrWriteBufferQueue* write_queue);
165 typedef int (*DvrWriteBufferQueueGetIdPtr)(DvrWriteBufferQueue* write_queue);
166 typedef int (*DvrWriteBufferQueueGetExternalSurfacePtr)(
167     DvrWriteBufferQueue* write_queue, ANativeWindow** out_window);
168 typedef int (*DvrWriteBufferQueueCreateReadQueuePtr)(
169     DvrWriteBufferQueue* write_queue, DvrReadBufferQueue** out_read_queue);
170 typedef int (*DvrWriteBufferQueueDequeuePtr)(DvrWriteBufferQueue* write_queue,
171                                              int timeout,
172                                              DvrWriteBuffer* out_buffer,
173                                              int* out_fence_fd);
174 typedef int (*DvrWriteBufferQueueResizeBufferPtr)(
175     DvrWriteBufferQueue* write_queue, uint32_t width, uint32_t height);
176 typedef void (*DvrReadBufferQueueDestroyPtr)(DvrReadBufferQueue* read_queue);
177 typedef ssize_t (*DvrReadBufferQueueGetCapacityPtr)(
178     DvrReadBufferQueue* read_queue);
179 typedef int (*DvrReadBufferQueueGetIdPtr)(DvrReadBufferQueue* read_queue);
180 typedef int (*DvrReadBufferQueueGetEventFdPtr)(DvrReadBufferQueue* read_queue);
181 typedef int (*DvrReadBufferQueueCreateReadQueuePtr)(
182     DvrReadBufferQueue* read_queue, DvrReadBufferQueue** out_read_queue);
183 typedef int (*DvrReadBufferQueueDequeuePtr)(DvrReadBufferQueue* read_queue,
184                                             int timeout,
185                                             DvrReadBuffer* out_buffer,
186                                             int* out_fence_fd, void* out_meta,
187                                             size_t meta_size_bytes);
188 typedef void (*DvrReadBufferQueueBufferAvailableCallback)(void* context);
189 typedef int (*DvrReadBufferQueueSetBufferAvailableCallbackPtr)(
190     DvrReadBufferQueue* read_queue,
191     DvrReadBufferQueueBufferAvailableCallback callback, void* context);
192 typedef void (*DvrReadBufferQueueBufferRemovedCallback)(DvrReadBuffer* buffer,
193                                                         void* context);
194 typedef int (*DvrReadBufferQueueSetBufferRemovedCallbackPtr)(
195     DvrReadBufferQueue* read_queue,
196     DvrReadBufferQueueBufferRemovedCallback callback, void* context);
197 typedef int (*DvrReadBufferQueueHandleEventsPtr)(
198     DvrReadBufferQueue* read_queue);
199
200 // dvr_surface.h
201 typedef int (*DvrSetupGlobalBufferPtr)(DvrGlobalBufferKey key, size_t size,
202                                        uint64_t usage, DvrBuffer** buffer_out);
203 typedef int (*DvrDeleteGlobalBufferPtr)(DvrGlobalBufferKey key);
204 typedef int (*DvrGetGlobalBufferPtr)(DvrGlobalBufferKey key,
205                                      DvrBuffer** out_buffer);
206 typedef int (*DvrSurfaceCreatePtr)(const DvrSurfaceAttribute* attributes,
207                                    size_t attribute_count,
208                                    DvrSurface** surface_out);
209 typedef void (*DvrSurfaceDestroyPtr)(DvrSurface* surface);
210 typedef int (*DvrSurfaceGetIdPtr)(DvrSurface* surface);
211 typedef int (*DvrSurfaceSetAttributesPtr)(DvrSurface* surface,
212                                           const DvrSurfaceAttribute* attributes,
213                                           size_t attribute_count);
214 typedef int (*DvrSurfaceCreateWriteBufferQueuePtr)(
215     DvrSurface* surface, uint32_t width, uint32_t height, uint32_t format,
216     uint32_t layer_count, uint64_t usage, size_t capacity, size_t metadata_size,
217     DvrWriteBufferQueue** queue_out);
218 typedef int (*DvrGetNativeDisplayMetricsPtr)(size_t sizeof_metrics,
219                                              DvrNativeDisplayMetrics* metrics);
220
221 // dvr_vsync.h
222 typedef int (*DvrVSyncClientCreatePtr)(DvrVSyncClient** client_out);
223 typedef void (*DvrVSyncClientDestroyPtr)(DvrVSyncClient* client);
224 typedef int (*DvrVSyncClientGetSchedInfoPtr)(DvrVSyncClient* client,
225                                              int64_t* vsync_period_ns,
226                                              int64_t* next_timestamp_ns,
227                                              uint32_t* next_vsync_count);
228
229 // libs/vr/libvrsensor/include/dvr/pose_client.h
230 typedef DvrPoseClient* (*DvrPoseClientCreatePtr)();
231 typedef void (*DvrPoseClientDestroyPtr)(DvrPoseClient* client);
232 typedef int (*DvrPoseClientGetPtr)(DvrPoseClient* client, uint32_t vsync_count,
233                                    DvrPoseAsync* out_pose);
234 typedef uint32_t (*DvrPoseClientGetVsyncCountPtr)(DvrPoseClient* client);
235 typedef int (*DvrPoseClientGetControllerPtr)(DvrPoseClient* client,
236                                              int32_t controller_id,
237                                              uint32_t vsync_count,
238                                              DvrPoseAsync* out_pose);
239 typedef int (*DvrPoseClientSensorsEnablePtr)(DvrPoseClient* client,
240                                              bool enabled);
241
242 // services/vr/virtual_touchpad/include/dvr/virtual_touchpad_client.h
243
244 // Touchpad IDs for *Touch*() and *ButtonState*() calls.
245 enum {
246   DVR_VIRTUAL_TOUCHPAD_PRIMARY = 0,
247   DVR_VIRTUAL_TOUCHPAD_VIRTUAL = 1,
248 };
249 typedef DvrVirtualTouchpad* (*DvrVirtualTouchpadCreatePtr)();
250 typedef void (*DvrVirtualTouchpadDestroyPtr)(DvrVirtualTouchpad* client);
251 typedef int (*DvrVirtualTouchpadAttachPtr)(DvrVirtualTouchpad* client);
252 typedef int (*DvrVirtualTouchpadDetachPtr)(DvrVirtualTouchpad* client);
253 typedef int (*DvrVirtualTouchpadTouchPtr)(DvrVirtualTouchpad* client,
254                                           int touchpad, float x, float y,
255                                           float pressure);
256 typedef int (*DvrVirtualTouchpadButtonStatePtr)(DvrVirtualTouchpad* client,
257                                                 int touchpad, int buttons);
258 typedef int (*DvrVirtualTouchpadScrollPtr)(DvrVirtualTouchpad* client,
259                                            int touchpad, float x, float y);
260
261 // dvr_hardware_composer_client.h
262 typedef struct DvrHwcClient DvrHwcClient;
263 typedef struct DvrHwcFrame DvrHwcFrame;
264 typedef int (*DvrHwcOnFrameCallback)(void* client_state, DvrHwcFrame* frame);
265 typedef DvrHwcClient* (*DvrHwcClientCreatePtr)(DvrHwcOnFrameCallback callback,
266                                                void* client_state);
267 typedef void (*DvrHwcClientDestroyPtr)(DvrHwcClient* client);
268 typedef void (*DvrHwcFrameDestroyPtr)(DvrHwcFrame* frame);
269 typedef DvrHwcDisplay (*DvrHwcFrameGetDisplayIdPtr)(DvrHwcFrame* frame);
270 typedef int32_t (*DvrHwcFrameGetDisplayWidthPtr)(DvrHwcFrame* frame);
271 typedef int32_t (*DvrHwcFrameGetDisplayHeightPtr)(DvrHwcFrame* frame);
272 typedef bool (*DvrHwcFrameGetDisplayRemovedPtr)(DvrHwcFrame* frame);
273 typedef size_t (*DvrHwcFrameGetLayerCountPtr)(DvrHwcFrame* frame);
274 typedef DvrHwcLayer (*DvrHwcFrameGetLayerIdPtr)(DvrHwcFrame* frame,
275                                                 size_t layer_index);
276 typedef uint32_t (*DvrHwcFrameGetActiveConfigPtr)(DvrHwcFrame* frame);
277 typedef uint32_t (*DvrHwcFrameGetColorModePtr)(DvrHwcFrame* frame);
278 typedef void (*DvrHwcFrameGetColorTransformPtr)(DvrHwcFrame* frame,
279                                                 float* out_matrix,
280                                                 int32_t* out_hint);
281 typedef uint32_t (*DvrHwcFrameGetPowerModePtr)(DvrHwcFrame* frame);
282 typedef uint32_t (*DvrHwcFrameGetVsyncEnabledPtr)(DvrHwcFrame* frame);
283 typedef AHardwareBuffer* (*DvrHwcFrameGetLayerBufferPtr)(DvrHwcFrame* frame,
284                                                          size_t layer_index);
285 typedef int (*DvrHwcFrameGetLayerFencePtr)(DvrHwcFrame* frame,
286                                            size_t layer_index);
287 typedef DvrHwcRecti (*DvrHwcFrameGetLayerDisplayFramePtr)(DvrHwcFrame* frame,
288                                                           size_t layer_index);
289 typedef DvrHwcRectf (*DvrHwcFrameGetLayerCropPtr)(DvrHwcFrame* frame,
290                                                   size_t layer_index);
291 typedef DvrHwcBlendMode (*DvrHwcFrameGetLayerBlendModePtr)(DvrHwcFrame* frame,
292                                                            size_t layer_index);
293 typedef float (*DvrHwcFrameGetLayerAlphaPtr)(DvrHwcFrame* frame,
294                                              size_t layer_index);
295 typedef uint32_t (*DvrHwcFrameGetLayerTypePtr)(DvrHwcFrame* frame,
296                                                size_t layer_index);
297 typedef uint32_t (*DvrHwcFrameGetLayerApplicationIdPtr)(DvrHwcFrame* frame,
298                                                         size_t layer_index);
299 typedef uint32_t (*DvrHwcFrameGetLayerZOrderPtr)(DvrHwcFrame* frame,
300                                                  size_t layer_index);
301
302 typedef void (*DvrHwcFrameGetLayerCursorPtr)(DvrHwcFrame* frame,
303                                              size_t layer_index, int32_t* out_x,
304                                              int32_t* out_y);
305
306 typedef uint32_t (*DvrHwcFrameGetLayerTransformPtr)(DvrHwcFrame* frame,
307                                                     size_t layer_index);
308
309 typedef uint32_t (*DvrHwcFrameGetLayerDataspacePtr)(DvrHwcFrame* frame,
310                                                     size_t layer_index);
311
312 typedef uint32_t (*DvrHwcFrameGetLayerColorPtr)(DvrHwcFrame* frame,
313                                                 size_t layer_index);
314
315 typedef uint32_t (*DvrHwcFrameGetLayerNumVisibleRegionsPtr)(DvrHwcFrame* frame,
316                                                             size_t layer_index);
317 typedef DvrHwcRecti (*DvrHwcFrameGetLayerVisibleRegionPtr)(DvrHwcFrame* frame,
318                                                            size_t layer_index,
319                                                            size_t index);
320
321 typedef uint32_t (*DvrHwcFrameGetLayerNumDamagedRegionsPtr)(DvrHwcFrame* frame,
322                                                             size_t layer_index);
323 typedef DvrHwcRecti (*DvrHwcFrameGetLayerDamagedRegionPtr)(DvrHwcFrame* frame,
324                                                            size_t layer_index,
325                                                            size_t index);
326
327 // dvr_performance.h
328 typedef int (*DvrPerformanceSetSchedulerPolicyPtr)(
329     pid_t task_id, const char* scheduler_policy);
330
331 // The buffer metadata that an Android Surface (a.k.a. ANativeWindow)
332 // will populate. A DvrWriteBufferQueue must be created with this metadata iff
333 // ANativeWindow access is needed. Please do not remove, modify, or reorder
334 // existing data members. If new fields need to be added, please take extra care
335 // to make sure that new data field is padded properly the size of the struct
336 // stays same.
337 struct DvrNativeBufferMetadata {
338   // Timestamp of the frame.
339   int64_t timestamp;
340
341   // Whether the buffer is using auto timestamp.
342   int32_t is_auto_timestamp;
343
344   // Must be one of the HAL_DATASPACE_XXX value defined in system/graphics.h
345   int32_t dataspace;
346
347   // Crop extracted from an ACrop or android::Crop object.
348   int32_t crop_left;
349   int32_t crop_top;
350   int32_t crop_right;
351   int32_t crop_bottom;
352
353   // Must be one of the NATIVE_WINDOW_SCALING_MODE_XXX value defined in
354   // system/window.h.
355   int32_t scaling_mode;
356
357   // Must be one of the ANATIVEWINDOW_TRANSFORM_XXX value defined in
358   // android/native_window.h
359   int32_t transform;
360
361   // Reserved bytes for so that the struct is forward compatible.
362   int32_t reserved[16];
363 };
364
365 struct DvrApi_v1 {
366 // Defines an API entry for V1 (no version suffix).
367 #define DVR_V1_API_ENTRY(name) Dvr##name##Ptr name
368
369 #include "dvr_api_entries.h"
370
371 // Undefine macro definitions to play nice with Google3 style rules.
372 #undef DVR_V1_API_ENTRY
373 };
374
375 int dvrGetApi(void* api, size_t struct_size, int version);
376
377 #ifdef __cplusplus
378 }  // extern "C"
379 #endif
380
381 #endif  // ANDROID_DVR_API_H_