dvr_api.h revision 736b6058d8c91ec4ad295c0a04c7b81d8119268c
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 8#include <dvr/dvr_hardware_composer_defs.h> 9 10#ifdef __cplusplus 11extern "C" { 12#endif 13 14typedef struct ANativeWindow ANativeWindow; 15 16typedef struct DvrPoseAsync DvrPoseAsync; 17 18typedef struct DvrDisplayManagerClient DvrDisplayManagerClient; 19typedef struct DvrDisplayManagerClientSurfaceList 20 DvrDisplayManagerClientSurfaceList; 21typedef struct DvrDisplayManagerClientSurfaceBuffers 22 DvrDisplayManagerClientSurfaceBuffers; 23typedef struct DvrPose DvrPose; 24typedef struct dvr_vsync_client dvr_vsync_client; 25typedef struct DvrVirtualTouchpad DvrVirtualTouchpad; 26 27typedef DvrDisplayManagerClient* (*DvrDisplayManagerClientCreatePtr)(void); 28typedef void (*DvrDisplayManagerClientDestroyPtr)( 29 DvrDisplayManagerClient* client); 30 31typedef struct DvrWriteBuffer DvrWriteBuffer; 32typedef struct DvrReadBuffer DvrReadBuffer; 33typedef struct DvrBuffer DvrBuffer; 34typedef struct AHardwareBuffer AHardwareBuffer; 35 36typedef struct DvrWriteBufferQueue DvrWriteBufferQueue; 37typedef struct DvrReadBufferQueue DvrReadBufferQueue; 38 39typedef struct DvrSurface DvrSurface; 40 41// display_manager_client.h 42typedef int (*DvrDisplayManagerClientGetSurfaceListPtr)( 43 DvrDisplayManagerClient* client, 44 DvrDisplayManagerClientSurfaceList** surface_list); 45typedef void (*DvrDisplayManagerClientSurfaceListDestroyPtr)( 46 DvrDisplayManagerClientSurfaceList* surface_list); 47typedef DvrBuffer* (*DvrDisplayManagerSetupNamedBufferPtr)( 48 DvrDisplayManagerClient* client, const char* name, size_t size, 49 uint64_t producer_usage, uint64_t consumer_usage); 50typedef size_t (*DvrDisplayManagerClientSurfaceListGetSizePtr)( 51 DvrDisplayManagerClientSurfaceList* surface_list); 52typedef int (*DvrDisplayManagerClientSurfaceListGetSurfaceIdPtr)( 53 DvrDisplayManagerClientSurfaceList* surface_list, size_t index); 54typedef int (*DvrDisplayManagerClientGetSurfaceBufferListPtr)( 55 DvrDisplayManagerClient* client, int surface_id, 56 DvrDisplayManagerClientSurfaceBuffers** surface_buffers); 57typedef void (*DvrDisplayManagerClientSurfaceBufferListDestroyPtr)( 58 DvrDisplayManagerClientSurfaceBuffers* surface_buffers); 59typedef size_t (*DvrDisplayManagerClientSurfaceBufferListGetSizePtr)( 60 DvrDisplayManagerClientSurfaceBuffers* surface_buffers); 61typedef int (*DvrDisplayManagerClientSurfaceBufferListGetFdPtr)( 62 DvrDisplayManagerClientSurfaceBuffers* surface_buffers, size_t index); 63 64// dvr_buffer.h 65typedef void (*DvrWriteBufferDestroyPtr)(DvrWriteBuffer* client); 66typedef int (*DvrWriteBufferGetAHardwareBufferPtr)( 67 DvrWriteBuffer* client, AHardwareBuffer** hardware_buffer); 68typedef int (*DvrWriteBufferPostPtr)(DvrWriteBuffer* client, int ready_fence_fd, 69 const void* meta, size_t meta_size_bytes); 70typedef int (*DvrWriteBufferGainPtr)(DvrWriteBuffer* client, 71 int* release_fence_fd); 72typedef int (*DvrWriteBufferGainAsyncPtr)(DvrWriteBuffer* client); 73 74typedef void (*DvrReadBufferDestroyPtr)(DvrReadBuffer* client); 75typedef int (*DvrReadBufferGetAHardwareBufferPtr)( 76 DvrReadBuffer* client, AHardwareBuffer** hardware_buffer); 77typedef int (*DvrReadBufferAcquirePtr)(DvrReadBuffer* client, 78 int* ready_fence_fd, void* meta, 79 size_t meta_size_bytes); 80typedef int (*DvrReadBufferReleasePtr)(DvrReadBuffer* client, 81 int release_fence_fd); 82typedef int (*DvrReadBufferReleaseAsyncPtr)(DvrReadBuffer* client); 83typedef void (*DvrBufferDestroy)(DvrBuffer* buffer); 84typedef int (*DvrBufferGetAHardwareBuffer)(DvrBuffer* buffer, 85 AHardwareBuffer** hardware_buffer); 86 87// dvr_buffer_queue.h 88typedef void (*DvrWriteBufferQueueDestroyPtr)(DvrWriteBufferQueue* write_queue); 89typedef size_t (*DvrWriteBufferQueueGetCapacityPtr)( 90 DvrWriteBufferQueue* write_queue); 91typedef int (*DvrWriteBufferQueueGetExternalSurfacePtr)( 92 DvrWriteBufferQueue* write_queue, ANativeWindow** out_window); 93typedef int (*DvrWriteBufferQueueCreateReadQueuePtr)( 94 DvrWriteBufferQueue* write_queue, DvrReadBufferQueue** out_read_queue); 95typedef int (*DvrWriteBufferQueueDequeuePtr)(DvrWriteBufferQueue* write_queue, 96 int timeout, 97 DvrWriteBuffer** out_buffer, 98 int* out_fence_fd); 99typedef void (*DvrReadBufferQueueDestroyPtr)(DvrReadBufferQueue* read_queue); 100typedef size_t (*DvrReadBufferQueueGetCapacityPtr)( 101 DvrReadBufferQueue* read_queue); 102typedef int (*DvrReadBufferQueueCreateReadQueuePtr)( 103 DvrReadBufferQueue* read_queue, DvrReadBufferQueue** out_read_queue); 104typedef int (*DvrReadBufferQueueDequeuePtr)(DvrReadBufferQueue* read_queue, 105 int timeout, 106 DvrReadBuffer** out_buffer, 107 int* out_fence_fd, void* out_meta, 108 size_t meta_size_bytes); 109 110// dvr_surface.h 111typedef int (*DvrGetNamedBufferPtr)(const char* name, DvrBuffer** out_buffer); 112typedef int (*DvrSurfaceCreatePtr)(int width, int height, int format, 113 uint64_t usage0, uint64_t usage1, int flags, 114 DvrSurface** out_surface); 115typedef int (*DvrSurfaceGetWriteBufferQueuePtr)( 116 DvrSurface* surface, DvrWriteBufferQueue** out_writer); 117 118// vsync_client_api.h 119typedef dvr_vsync_client* (*DvrVSyncClientCreatePtr)(); 120typedef void (*DvrVSyncClientDestroyPtr)(dvr_vsync_client* client); 121typedef int (*DvrVSyncClientGetSchedInfoPtr)(dvr_vsync_client* client, 122 int64_t* vsync_period_ns, 123 int64_t* next_timestamp_ns, 124 uint32_t* next_vsync_count); 125 126// pose_client.h 127typedef DvrPose* (*DvrPoseClientCreatePtr)(void); 128typedef void (*DvrPoseClientDestroyPtr)(DvrPose* client); 129typedef int (*DvrPoseGetPtr)(DvrPose* client, uint32_t vsync_count, 130 DvrPoseAsync* out_pose); 131typedef uint32_t (*DvrPoseGetVsyncCountPtr)(DvrPose* client); 132typedef int (*DvrPoseGetControllerPtr)(DvrPose* client, int32_t controller_id, 133 uint32_t vsync_count, 134 DvrPoseAsync* out_pose); 135 136// virtual_touchpad_client.h 137typedef DvrVirtualTouchpad* (*DvrVirtualTouchpadCreatePtr)(void); 138typedef void (*DvrVirtualTouchpadDestroyPtr)(DvrVirtualTouchpad* client); 139typedef int (*DvrVirtualTouchpadAttachPtr)(DvrVirtualTouchpad* client); 140typedef int (*DvrVirtualTouchpadDetachPtr)(DvrVirtualTouchpad* client); 141typedef int (*DvrVirtualTouchpadTouchPtr)(DvrVirtualTouchpad* client, 142 int touchpad, float x, float y, 143 float pressure); 144typedef int (*DvrVirtualTouchpadButtonStatePtr)(DvrVirtualTouchpad* client, 145 int touchpad, int buttons); 146 147// dvr_hardware_composer_client.h 148typedef struct DvrHwcClient DvrHwcClient; 149typedef struct DvrHwcFrame DvrHwcFrame; 150typedef int (*DvrHwcOnFrameCallback)(void* client_state, DvrHwcFrame* frame); 151typedef DvrHwcClient* (*DvrHwcClientCreatePtr)(DvrHwcOnFrameCallback callback, 152 void* client_state); 153typedef void (*DvrHwcClientDestroyPtr)(DvrHwcClient* client); 154typedef void (*DvrHwcFrameDestroyPtr)(DvrHwcFrame* frame); 155typedef DvrHwcDisplay (*DvrHwcFrameGetDisplayIdPtr)(DvrHwcFrame* frame); 156typedef int32_t (*DvrHwcFrameGetDisplayWidthPtr)(DvrHwcFrame* frame); 157typedef int32_t (*DvrHwcFrameGetDisplayHeightPtr)(DvrHwcFrame* frame); 158typedef bool (*DvrHwcFrameGetDisplayRemovedPtr)(DvrHwcFrame* frame); 159typedef size_t (*DvrHwcFrameGetLayerCountPtr)(DvrHwcFrame* frame); 160typedef DvrHwcLayer (*DvrHwcFrameGetLayerIdPtr)(DvrHwcFrame* frame, 161 size_t layer_index); 162typedef AHardwareBuffer* (*DvrHwcFrameGetLayerBufferPtr)(DvrHwcFrame* frame, 163 size_t layer_index); 164typedef int (*DvrHwcFrameGetLayerFencePtr)(DvrHwcFrame* frame, 165 size_t layer_index); 166typedef DvrHwcRecti (*DvrHwcFrameGetLayerDisplayFramePtr)(DvrHwcFrame* frame, 167 size_t layer_index); 168typedef DvrHwcRectf (*DvrHwcFrameGetLayerCropPtr)(DvrHwcFrame* frame, 169 size_t layer_index); 170typedef DvrHwcBlendMode (*DvrHwcFrameGetLayerBlendModePtr)(DvrHwcFrame* frame, 171 size_t layer_index); 172typedef float (*DvrHwcFrameGetLayerAlphaPtr)(DvrHwcFrame* frame, 173 size_t layer_index); 174typedef uint32_t (*DvrHwcFrameGetLayerTypePtr)(DvrHwcFrame* frame, 175 size_t layer_index); 176typedef uint32_t (*DvrHwcFrameGetLayerApplicationIdPtr)(DvrHwcFrame* frame, 177 size_t layer_index); 178 179struct DvrApi_v1 { 180 // Display manager client 181 DvrDisplayManagerClientCreatePtr display_manager_client_create; 182 DvrDisplayManagerClientDestroyPtr display_manager_client_destroy; 183 DvrDisplayManagerClientGetSurfaceListPtr 184 display_manager_client_get_surface_list; 185 DvrDisplayManagerClientSurfaceListDestroyPtr 186 display_manager_client_surface_list_destroy; 187 DvrDisplayManagerSetupNamedBufferPtr display_manager_setup_named_buffer; 188 DvrDisplayManagerClientSurfaceListGetSizePtr 189 display_manager_client_surface_list_get_size; 190 DvrDisplayManagerClientSurfaceListGetSurfaceIdPtr 191 display_manager_client_surface_list_get_surface_id; 192 DvrDisplayManagerClientGetSurfaceBufferListPtr 193 display_manager_client_get_surface_buffer_list; 194 DvrDisplayManagerClientSurfaceBufferListDestroyPtr 195 display_manager_client_surface_buffer_list_destroy; 196 DvrDisplayManagerClientSurfaceBufferListGetSizePtr 197 display_manager_client_surface_buffer_list_get_size; 198 DvrDisplayManagerClientSurfaceBufferListGetFdPtr 199 display_manager_client_surface_buffer_list_get_fd; 200 201 // Write buffer 202 DvrWriteBufferDestroyPtr write_buffer_destroy; 203 DvrWriteBufferGetAHardwareBufferPtr write_buffer_get_ahardwarebuffer; 204 DvrWriteBufferPostPtr write_buffer_post; 205 DvrWriteBufferGainPtr write_buffer_gain; 206 DvrWriteBufferGainAsyncPtr write_buffer_gain_async; 207 208 // Read buffer 209 DvrReadBufferDestroyPtr read_buffer_destroy; 210 DvrReadBufferGetAHardwareBufferPtr read_buffer_get_ahardwarebuffer; 211 DvrReadBufferAcquirePtr read_buffer_acquire; 212 DvrReadBufferReleasePtr read_buffer_release; 213 DvrReadBufferReleaseAsyncPtr read_buffer_release_async; 214 DvrBufferDestroy buffer_destroy; 215 DvrBufferGetAHardwareBuffer buffer_get_ahardwarebuffer; 216 217 // Write buffer queue 218 DvrWriteBufferQueueDestroyPtr write_buffer_queue_destroy; 219 DvrWriteBufferQueueGetCapacityPtr write_buffer_queue_get_capacity; 220 DvrWriteBufferQueueGetExternalSurfacePtr 221 write_buffer_queue_get_external_surface; 222 DvrWriteBufferQueueCreateReadQueuePtr write_buffer_queue_create_read_queue; 223 DvrWriteBufferQueueDequeuePtr write_buffer_queue_dequeue; 224 225 // Read buffer queue 226 DvrReadBufferQueueDestroyPtr read_buffer_queue_destroy; 227 DvrReadBufferQueueGetCapacityPtr read_buffer_queue_get_capacity; 228 DvrReadBufferQueueCreateReadQueuePtr read_buffer_queue_create_read_queue; 229 DvrReadBufferQueueDequeuePtr read_buffer_queue_dequeue; 230 231 // V-Sync client 232 DvrVSyncClientCreatePtr vsync_client_create; 233 DvrVSyncClientDestroyPtr vsync_client_destroy; 234 DvrVSyncClientGetSchedInfoPtr vsync_client_get_sched_info; 235 236 // Display surface 237 DvrGetNamedBufferPtr get_named_buffer; 238 DvrSurfaceCreatePtr surface_create; 239 DvrSurfaceGetWriteBufferQueuePtr surface_get_write_buffer_queue; 240 241 // Pose client 242 DvrPoseClientCreatePtr pose_client_create; 243 DvrPoseClientDestroyPtr pose_client_destroy; 244 DvrPoseGetPtr pose_get; 245 DvrPoseGetVsyncCountPtr pose_get_vsync_count; 246 DvrPoseGetControllerPtr pose_get_controller; 247 248 // Virtual touchpad client 249 DvrVirtualTouchpadCreatePtr virtual_touchpad_create; 250 DvrVirtualTouchpadDestroyPtr virtual_touchpad_destroy; 251 DvrVirtualTouchpadAttachPtr virtual_touchpad_attach; 252 DvrVirtualTouchpadDetachPtr virtual_touchpad_detach; 253 DvrVirtualTouchpadTouchPtr virtual_touchpad_touch; 254 DvrVirtualTouchpadButtonStatePtr virtual_touchpad_button_state; 255 256 // VR HWComposer client 257 DvrHwcClientCreatePtr hwc_client_create; 258 DvrHwcClientDestroyPtr hwc_client_destroy; 259 DvrHwcFrameDestroyPtr hwc_frame_destroy; 260 DvrHwcFrameGetDisplayIdPtr hwc_frame_get_display_id; 261 DvrHwcFrameGetDisplayWidthPtr hwc_frame_get_display_width; 262 DvrHwcFrameGetDisplayHeightPtr hwc_frame_get_display_height; 263 DvrHwcFrameGetDisplayRemovedPtr hwc_frame_get_display_removed; 264 DvrHwcFrameGetLayerCountPtr hwc_frame_get_layer_count; 265 DvrHwcFrameGetLayerIdPtr hwc_frame_get_layer_id; 266 DvrHwcFrameGetLayerBufferPtr hwc_frame_get_layer_buffer; 267 DvrHwcFrameGetLayerFencePtr hwc_frame_get_layer_fence; 268 DvrHwcFrameGetLayerDisplayFramePtr hwc_frame_get_layer_display_frame; 269 DvrHwcFrameGetLayerCropPtr hwc_frame_get_layer_crop; 270 DvrHwcFrameGetLayerBlendModePtr hwc_frame_get_layer_blend_mode; 271 DvrHwcFrameGetLayerAlphaPtr hwc_frame_get_layer_alpha; 272 DvrHwcFrameGetLayerTypePtr hwc_frame_get_layer_type; 273 DvrHwcFrameGetLayerApplicationIdPtr hwc_frame_get_layer_application_id; 274}; 275 276int dvrGetApi(void* api, size_t struct_size, int version); 277 278#ifdef __cplusplus 279} // extern "C" 280#endif 281 282#endif // ANDROID_DVR_API_H_ 283