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