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 14typedef struct ANativeWindow ANativeWindow; 15 16typedef struct DvrPoseAsync DvrPoseAsync; 17 18typedef uint64_t DvrSurfaceUpdateFlags; 19typedef struct DvrDisplayManager DvrDisplayManager; 20typedef struct DvrSurfaceState DvrSurfaceState; 21typedef struct DvrPose DvrPose; 22typedef struct DvrVSyncClient DvrVSyncClient; 23typedef struct DvrVirtualTouchpad DvrVirtualTouchpad; 24 25typedef struct DvrBuffer DvrBuffer; 26typedef struct DvrWriteBuffer DvrWriteBuffer; 27typedef struct DvrReadBuffer DvrReadBuffer; 28typedef struct AHardwareBuffer AHardwareBuffer; 29 30typedef struct DvrReadBufferQueue DvrReadBufferQueue; 31typedef struct DvrWriteBufferQueue DvrWriteBufferQueue; 32 33typedef struct DvrSurface DvrSurface; 34typedef uint64_t DvrSurfaceAttributeType; 35typedef int32_t DvrSurfaceAttributeKey; 36 37typedef struct DvrSurfaceAttributeValue DvrSurfaceAttributeValue; 38typedef struct DvrSurfaceAttribute DvrSurfaceAttribute; 39 40struct native_handle; 41 42// dvr_display_manager.h 43typedef int (*DvrDisplayManagerCreatePtr)(DvrDisplayManager** client_out); 44typedef void (*DvrDisplayManagerDestroyPtr)(DvrDisplayManager* client); 45typedef int (*DvrDisplayManagerSetupNamedBufferPtr)(DvrDisplayManager* client, 46 const char* name, 47 size_t size, uint64_t usage, 48 DvrBuffer** buffer_out); 49typedef int (*DvrDisplayManagerGetEventFdPtr)(DvrDisplayManager* client); 50typedef int (*DvrDisplayManagerTranslateEpollEventMaskPtr)( 51 DvrDisplayManager* client, int in_events, int* out_events); 52typedef int (*DvrDisplayManagerGetSurfaceStatePtr)( 53 DvrDisplayManager* client, DvrSurfaceState* surface_state); 54typedef int (*DvrDisplayManagerGetReadBufferQueuePtr)( 55 DvrDisplayManager* client, int surface_id, int queue_id, 56 DvrReadBufferQueue** queue_out); 57typedef int (*DvrSurfaceStateCreatePtr)(DvrSurfaceState** surface_state); 58typedef void (*DvrSurfaceStateDestroyPtr)(DvrSurfaceState* surface_state); 59typedef int (*DvrSurfaceStateGetSurfaceCountPtr)(DvrSurfaceState* surface_state, 60 size_t* count_out); 61typedef int (*DvrSurfaceStateGetUpdateFlagsPtr)( 62 DvrSurfaceState* surface_state, size_t surface_index, 63 DvrSurfaceUpdateFlags* flags_out); 64typedef int (*DvrSurfaceStateGetSurfaceIdPtr)(DvrSurfaceState* surface_state, 65 size_t surface_index, 66 int* surface_id_out); 67typedef int (*DvrSurfaceStateGetProcessIdPtr)(DvrSurfaceState* surface_state, 68 size_t surface_index, 69 int* process_id_out); 70typedef int (*DvrSurfaceStateGetQueueCountPtr)(DvrSurfaceState* surface_state, 71 size_t surface_index, 72 size_t* count_out); 73typedef ssize_t (*DvrSurfaceStateGetQueueIdsPtr)(DvrSurfaceState* surface_state, 74 size_t surface_index, 75 int* queue_ids, 76 size_t max_count); 77typedef int (*DvrSurfaceStateGetZOrderPtr)(DvrSurfaceState* surface_state, 78 size_t surface_index, 79 int* z_order_out); 80typedef int (*DvrSurfaceStateGetVisiblePtr)(DvrSurfaceState* surface_state, 81 size_t surface_index, 82 bool* visible_out); 83typedef int (*DvrSurfaceStateGetAttributeCountPtr)( 84 DvrSurfaceState* surface_state, size_t surface_index, size_t* count_out); 85typedef ssize_t (*DvrSurfaceStateGetAttributesPtr)( 86 DvrSurfaceState* surface_state, size_t surface_index, 87 DvrSurfaceAttribute* attributes, size_t max_attribute_count); 88 89// dvr_buffer.h 90typedef void (*DvrWriteBufferCreateEmptyPtr)(DvrWriteBuffer** write_buffer_out); 91typedef void (*DvrWriteBufferDestroyPtr)(DvrWriteBuffer* write_buffer); 92typedef int (*DvrWriteBufferIsValidPtr)(DvrWriteBuffer* write_buffer); 93typedef int (*DvrWriteBufferClearPtr)(DvrWriteBuffer* write_buffer); 94typedef int (*DvrWriteBufferGetIdPtr)(DvrWriteBuffer* write_buffer); 95typedef int (*DvrWriteBufferGetAHardwareBufferPtr)( 96 DvrWriteBuffer* write_buffer, AHardwareBuffer** hardware_buffer); 97typedef int (*DvrWriteBufferPostPtr)(DvrWriteBuffer* write_buffer, 98 int ready_fence_fd, const void* meta, 99 size_t meta_size_bytes); 100typedef int (*DvrWriteBufferGainPtr)(DvrWriteBuffer* write_buffer, 101 int* release_fence_fd); 102typedef int (*DvrWriteBufferGainAsyncPtr)(DvrWriteBuffer* write_buffer); 103typedef const struct native_handle* (*DvrWriteBufferGetNativeHandlePtr)( 104 DvrWriteBuffer* write_buffer); 105 106typedef void (*DvrReadBufferCreateEmptyPtr)(DvrReadBuffer** read_buffer_out); 107typedef void (*DvrReadBufferDestroyPtr)(DvrReadBuffer* read_buffer); 108typedef int (*DvrReadBufferIsValidPtr)(DvrReadBuffer* read_buffer); 109typedef int (*DvrReadBufferClearPtr)(DvrReadBuffer* read_buffer); 110typedef int (*DvrReadBufferGetIdPtr)(DvrReadBuffer* read_buffer); 111typedef int (*DvrReadBufferGetAHardwareBufferPtr)( 112 DvrReadBuffer* read_buffer, AHardwareBuffer** hardware_buffer); 113typedef int (*DvrReadBufferAcquirePtr)(DvrReadBuffer* read_buffer, 114 int* ready_fence_fd, void* meta, 115 size_t meta_size_bytes); 116typedef int (*DvrReadBufferReleasePtr)(DvrReadBuffer* read_buffer, 117 int release_fence_fd); 118typedef int (*DvrReadBufferReleaseAsyncPtr)(DvrReadBuffer* read_buffer); 119typedef const struct native_handle* (*DvrReadBufferGetNativeHandlePtr)( 120 DvrReadBuffer* read_buffer); 121 122typedef void (*DvrBufferDestroyPtr)(DvrBuffer* buffer); 123typedef int (*DvrBufferGetAHardwareBufferPtr)( 124 DvrBuffer* buffer, AHardwareBuffer** hardware_buffer); 125typedef const struct native_handle* (*DvrBufferGetNativeHandlePtr)( 126 DvrBuffer* buffer); 127 128// dvr_buffer_queue.h 129typedef void (*DvrWriteBufferQueueDestroyPtr)(DvrWriteBufferQueue* write_queue); 130typedef ssize_t (*DvrWriteBufferQueueGetCapacityPtr)( 131 DvrWriteBufferQueue* write_queue); 132typedef int (*DvrWriteBufferQueueGetIdPtr)(DvrWriteBufferQueue* write_queue); 133typedef int (*DvrWriteBufferQueueGetExternalSurfacePtr)( 134 DvrWriteBufferQueue* write_queue, ANativeWindow** out_window); 135typedef int (*DvrWriteBufferQueueCreateReadQueuePtr)( 136 DvrWriteBufferQueue* write_queue, DvrReadBufferQueue** out_read_queue); 137typedef int (*DvrWriteBufferQueueDequeuePtr)(DvrWriteBufferQueue* write_queue, 138 int timeout, 139 DvrWriteBuffer* out_buffer, 140 int* out_fence_fd); 141typedef void (*DvrReadBufferQueueDestroyPtr)(DvrReadBufferQueue* read_queue); 142typedef ssize_t (*DvrReadBufferQueueGetCapacityPtr)( 143 DvrReadBufferQueue* read_queue); 144typedef int (*DvrReadBufferQueueGetIdPtr)(DvrReadBufferQueue* read_queue); 145typedef int (*DvrReadBufferQueueCreateReadQueuePtr)( 146 DvrReadBufferQueue* read_queue, DvrReadBufferQueue** out_read_queue); 147typedef 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 154typedef int (*DvrGetNamedBufferPtr)(const char* name, DvrBuffer** out_buffer); 155typedef int (*DvrSurfaceCreatePtr)(const DvrSurfaceAttribute* attributes, 156 size_t attribute_count, 157 DvrSurface** surface_out); 158typedef void (*DvrSurfaceDestroyPtr)(DvrSurface* surface); 159typedef int (*DvrSurfaceGetIdPtr)(DvrSurface* surface); 160typedef int (*DvrSurfaceSetAttributesPtr)(DvrSurface* surface, 161 const DvrSurfaceAttribute* attributes, 162 size_t attribute_count); 163typedef 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 169typedef int (*DvrVSyncClientCreatePtr)(DvrVSyncClient** client_out); 170typedef void (*DvrVSyncClientDestroyPtr)(DvrVSyncClient* client); 171typedef 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 177typedef DvrPose* (*DvrPoseCreatePtr)(void); 178typedef void (*DvrPoseDestroyPtr)(DvrPose* client); 179typedef int (*DvrPoseGetPtr)(DvrPose* client, uint32_t vsync_count, 180 DvrPoseAsync* out_pose); 181typedef uint32_t (*DvrPoseGetVsyncCountPtr)(DvrPose* client); 182typedef int (*DvrPoseGetControllerPtr)(DvrPose* client, int32_t controller_id, 183 uint32_t vsync_count, 184 DvrPoseAsync* out_pose); 185 186// virtual_touchpad_client.h 187typedef DvrVirtualTouchpad* (*DvrVirtualTouchpadCreatePtr)(void); 188typedef void (*DvrVirtualTouchpadDestroyPtr)(DvrVirtualTouchpad* client); 189typedef int (*DvrVirtualTouchpadAttachPtr)(DvrVirtualTouchpad* client); 190typedef int (*DvrVirtualTouchpadDetachPtr)(DvrVirtualTouchpad* client); 191typedef int (*DvrVirtualTouchpadTouchPtr)(DvrVirtualTouchpad* client, 192 int touchpad, float x, float y, 193 float pressure); 194typedef int (*DvrVirtualTouchpadButtonStatePtr)(DvrVirtualTouchpad* client, 195 int touchpad, int buttons); 196 197// dvr_hardware_composer_client.h 198typedef struct DvrHwcClient DvrHwcClient; 199typedef struct DvrHwcFrame DvrHwcFrame; 200typedef int (*DvrHwcOnFrameCallback)(void* client_state, DvrHwcFrame* frame); 201typedef DvrHwcClient* (*DvrHwcClientCreatePtr)(DvrHwcOnFrameCallback callback, 202 void* client_state); 203typedef void (*DvrHwcClientDestroyPtr)(DvrHwcClient* client); 204typedef void (*DvrHwcFrameDestroyPtr)(DvrHwcFrame* frame); 205typedef DvrHwcDisplay (*DvrHwcFrameGetDisplayIdPtr)(DvrHwcFrame* frame); 206typedef int32_t (*DvrHwcFrameGetDisplayWidthPtr)(DvrHwcFrame* frame); 207typedef int32_t (*DvrHwcFrameGetDisplayHeightPtr)(DvrHwcFrame* frame); 208typedef bool (*DvrHwcFrameGetDisplayRemovedPtr)(DvrHwcFrame* frame); 209typedef size_t (*DvrHwcFrameGetLayerCountPtr)(DvrHwcFrame* frame); 210typedef DvrHwcLayer (*DvrHwcFrameGetLayerIdPtr)(DvrHwcFrame* frame, 211 size_t layer_index); 212typedef uint32_t (*DvrHwcFrameGetActiveConfigPtr)(DvrHwcFrame* frame); 213typedef uint32_t (*DvrHwcFrameGetColorModePtr)(DvrHwcFrame* frame); 214typedef void (*DvrHwcFrameGetColorTransformPtr)(DvrHwcFrame* frame, 215 float* out_matrix, 216 int32_t* out_hint); 217typedef uint32_t (*DvrHwcFrameGetPowerModePtr)(DvrHwcFrame* frame); 218typedef uint32_t (*DvrHwcFrameGetVsyncEnabledPtr)(DvrHwcFrame* frame); 219typedef AHardwareBuffer* (*DvrHwcFrameGetLayerBufferPtr)(DvrHwcFrame* frame, 220 size_t layer_index); 221typedef int (*DvrHwcFrameGetLayerFencePtr)(DvrHwcFrame* frame, 222 size_t layer_index); 223typedef DvrHwcRecti (*DvrHwcFrameGetLayerDisplayFramePtr)(DvrHwcFrame* frame, 224 size_t layer_index); 225typedef DvrHwcRectf (*DvrHwcFrameGetLayerCropPtr)(DvrHwcFrame* frame, 226 size_t layer_index); 227typedef DvrHwcBlendMode (*DvrHwcFrameGetLayerBlendModePtr)(DvrHwcFrame* frame, 228 size_t layer_index); 229typedef float (*DvrHwcFrameGetLayerAlphaPtr)(DvrHwcFrame* frame, 230 size_t layer_index); 231typedef uint32_t (*DvrHwcFrameGetLayerTypePtr)(DvrHwcFrame* frame, 232 size_t layer_index); 233typedef uint32_t (*DvrHwcFrameGetLayerApplicationIdPtr)(DvrHwcFrame* frame, 234 size_t layer_index); 235typedef uint32_t (*DvrHwcFrameGetLayerZOrderPtr)(DvrHwcFrame* frame, 236 size_t layer_index); 237 238typedef void (*DvrHwcFrameGetLayerCursorPtr)(DvrHwcFrame* frame, 239 size_t layer_index, int32_t* out_x, 240 int32_t* out_y); 241 242typedef uint32_t (*DvrHwcFrameGetLayerTransformPtr)(DvrHwcFrame* frame, 243 size_t layer_index); 244 245typedef uint32_t (*DvrHwcFrameGetLayerDataspacePtr)(DvrHwcFrame* frame, 246 size_t layer_index); 247 248typedef uint32_t (*DvrHwcFrameGetLayerColorPtr)(DvrHwcFrame* frame, 249 size_t layer_index); 250 251typedef uint32_t (*DvrHwcFrameGetLayerNumVisibleRegionsPtr)(DvrHwcFrame* frame, 252 size_t layer_index); 253typedef DvrHwcRecti (*DvrHwcFrameGetLayerVisibleRegionPtr)(DvrHwcFrame* frame, 254 size_t layer_index, 255 size_t index); 256 257typedef uint32_t (*DvrHwcFrameGetLayerNumDamagedRegionsPtr)(DvrHwcFrame* frame, 258 size_t layer_index); 259typedef 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. 269struct 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 297struct 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 308int dvrGetApi(void* api, size_t struct_size, int version); 309 310__END_DECLS 311 312#endif // ANDROID_DVR_API_H_ 313