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