1 #ifndef ANDROID_DVR_API_H_
2 #define ANDROID_DVR_API_H_
10 #include <dvr/dvr_display_types.h>
11 #include <dvr/dvr_hardware_composer_types.h>
12 #include <dvr/dvr_pose.h>
18 typedef struct ANativeWindow ANativeWindow;
20 typedef struct DvrPoseAsync DvrPoseAsync;
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;
29 typedef struct DvrBuffer DvrBuffer;
30 typedef struct DvrWriteBuffer DvrWriteBuffer;
31 typedef struct DvrReadBuffer DvrReadBuffer;
32 typedef struct AHardwareBuffer AHardwareBuffer;
34 typedef struct DvrReadBufferQueue DvrReadBufferQueue;
35 typedef struct DvrWriteBufferQueue DvrWriteBufferQueue;
37 typedef struct DvrSurface DvrSurface;
38 typedef uint64_t DvrSurfaceAttributeType;
39 typedef int32_t DvrSurfaceAttributeKey;
40 typedef int32_t DvrGlobalBufferKey;
42 typedef struct DvrSurfaceAttributeValue DvrSurfaceAttributeValue;
43 typedef struct DvrSurfaceAttribute DvrSurfaceAttribute;
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
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;
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.
65 // Device metrics data type enums.
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,
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,
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,
93 typedef int (*DvrSurfaceStateGetUpdateFlagsPtr)(
94 DvrSurfaceState* surface_state, size_t surface_index,
95 DvrSurfaceUpdateFlags* flags_out);
96 typedef int (*DvrSurfaceStateGetSurfaceIdPtr)(DvrSurfaceState* surface_state,
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,
105 typedef ssize_t (*DvrSurfaceStateGetQueueIdsPtr)(DvrSurfaceState* surface_state,
106 size_t surface_index,
109 typedef int (*DvrSurfaceStateGetZOrderPtr)(DvrSurfaceState* surface_state,
110 size_t surface_index,
112 typedef int (*DvrSurfaceStateGetVisiblePtr)(DvrSurfaceState* surface_state,
113 size_t surface_index,
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);
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);
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);
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)(
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,
172 DvrWriteBuffer* out_buffer,
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,
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,
194 typedef int (*DvrReadBufferQueueSetBufferRemovedCallbackPtr)(
195 DvrReadBufferQueue* read_queue,
196 DvrReadBufferQueueBufferRemovedCallback callback, void* context);
197 typedef int (*DvrReadBufferQueueHandleEventsPtr)(
198 DvrReadBufferQueue* read_queue);
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);
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);
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,
242 // services/vr/virtual_touchpad/include/dvr/virtual_touchpad_client.h
244 // Touchpad IDs for *Touch*() and *ButtonState*() calls.
246 DVR_VIRTUAL_TOUCHPAD_PRIMARY = 0,
247 DVR_VIRTUAL_TOUCHPAD_VIRTUAL = 1,
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,
256 typedef int (*DvrVirtualTouchpadButtonStatePtr)(DvrVirtualTouchpad* client,
257 int touchpad, int buttons);
258 typedef int (*DvrVirtualTouchpadScrollPtr)(DvrVirtualTouchpad* client,
259 int touchpad, float x, float y);
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,
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,
276 typedef uint32_t (*DvrHwcFrameGetActiveConfigPtr)(DvrHwcFrame* frame);
277 typedef uint32_t (*DvrHwcFrameGetColorModePtr)(DvrHwcFrame* frame);
278 typedef void (*DvrHwcFrameGetColorTransformPtr)(DvrHwcFrame* frame,
281 typedef uint32_t (*DvrHwcFrameGetPowerModePtr)(DvrHwcFrame* frame);
282 typedef uint32_t (*DvrHwcFrameGetVsyncEnabledPtr)(DvrHwcFrame* frame);
283 typedef AHardwareBuffer* (*DvrHwcFrameGetLayerBufferPtr)(DvrHwcFrame* frame,
285 typedef int (*DvrHwcFrameGetLayerFencePtr)(DvrHwcFrame* frame,
287 typedef DvrHwcRecti (*DvrHwcFrameGetLayerDisplayFramePtr)(DvrHwcFrame* frame,
289 typedef DvrHwcRectf (*DvrHwcFrameGetLayerCropPtr)(DvrHwcFrame* frame,
291 typedef DvrHwcBlendMode (*DvrHwcFrameGetLayerBlendModePtr)(DvrHwcFrame* frame,
293 typedef float (*DvrHwcFrameGetLayerAlphaPtr)(DvrHwcFrame* frame,
295 typedef uint32_t (*DvrHwcFrameGetLayerTypePtr)(DvrHwcFrame* frame,
297 typedef uint32_t (*DvrHwcFrameGetLayerApplicationIdPtr)(DvrHwcFrame* frame,
299 typedef uint32_t (*DvrHwcFrameGetLayerZOrderPtr)(DvrHwcFrame* frame,
302 typedef void (*DvrHwcFrameGetLayerCursorPtr)(DvrHwcFrame* frame,
303 size_t layer_index, int32_t* out_x,
306 typedef uint32_t (*DvrHwcFrameGetLayerTransformPtr)(DvrHwcFrame* frame,
309 typedef uint32_t (*DvrHwcFrameGetLayerDataspacePtr)(DvrHwcFrame* frame,
312 typedef uint32_t (*DvrHwcFrameGetLayerColorPtr)(DvrHwcFrame* frame,
315 typedef uint32_t (*DvrHwcFrameGetLayerNumVisibleRegionsPtr)(DvrHwcFrame* frame,
317 typedef DvrHwcRecti (*DvrHwcFrameGetLayerVisibleRegionPtr)(DvrHwcFrame* frame,
321 typedef uint32_t (*DvrHwcFrameGetLayerNumDamagedRegionsPtr)(DvrHwcFrame* frame,
323 typedef DvrHwcRecti (*DvrHwcFrameGetLayerDamagedRegionPtr)(DvrHwcFrame* frame,
328 typedef int (*DvrPerformanceSetSchedulerPolicyPtr)(
329 pid_t task_id, const char* scheduler_policy);
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
337 struct DvrNativeBufferMetadata {
338 // Timestamp of the frame.
341 // Whether the buffer is using auto timestamp.
342 int32_t is_auto_timestamp;
344 // Must be one of the HAL_DATASPACE_XXX value defined in system/graphics.h
347 // Crop extracted from an ACrop or android::Crop object.
353 // Must be one of the NATIVE_WINDOW_SCALING_MODE_XXX value defined in
355 int32_t scaling_mode;
357 // Must be one of the ANATIVEWINDOW_TRANSFORM_XXX value defined in
358 // android/native_window.h
361 // Reserved bytes for so that the struct is forward compatible.
362 int32_t reserved[16];
366 // Defines an API entry for V1 (no version suffix).
367 #define DVR_V1_API_ENTRY(name) Dvr##name##Ptr name
369 #include "dvr_api_entries.h"
371 // Undefine macro definitions to play nice with Google3 style rules.
372 #undef DVR_V1_API_ENTRY
375 int dvrGetApi(void* api, size_t struct_size, int version);
381 #endif // ANDROID_DVR_API_H_