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