blob: a4fef190d509b25ecc2338ef3ca92520dfec9b23 [file] [log] [blame]
Jiwen 'Steve' Caibdcee792017-03-22 16:59:53 -07001#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
Daniel Nicoara37cdc8d2017-03-27 16:56:05 -04008#include <dvr/dvr_hardware_composer_defs.h>
Jiwen 'Steve' Cai2d82ceb2017-03-22 17:26:00 -07009
Jiwen 'Steve' Caibdcee792017-03-22 16:59:53 -070010#ifdef __cplusplus
11extern "C" {
12#endif
13
Jiwen 'Steve' Cai960bcff2017-04-04 15:02:04 -070014typedef struct ANativeWindow ANativeWindow;
15
Jiwen 'Steve' Caibdcee792017-03-22 16:59:53 -070016typedef 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
Hendrik Wagenaar84d90f32017-03-29 10:50:25 -070027typedef DvrDisplayManagerClient* (*DvrDisplayManagerClientCreatePtr)(void);
28typedef void (*DvrDisplayManagerClientDestroyPtr)(
29 DvrDisplayManagerClient* client);
Jiwen 'Steve' Caibdcee792017-03-22 16:59:53 -070030
31typedef struct DvrWriteBuffer DvrWriteBuffer;
32typedef struct DvrReadBuffer DvrReadBuffer;
33typedef struct AHardwareBuffer AHardwareBuffer;
34
Jiwen 'Steve' Cai2d82ceb2017-03-22 17:26:00 -070035typedef struct DvrWriteBufferQueue DvrWriteBufferQueue;
36typedef struct DvrReadBufferQueue DvrReadBufferQueue;
37
Jiwen 'Steve' Cai74cf0842017-03-23 18:53:16 -070038typedef struct DvrSurface DvrSurface;
39
Jiwen 'Steve' Caibdcee792017-03-22 16:59:53 -070040// display_manager_client.h
Hendrik Wagenaar84d90f32017-03-29 10:50:25 -070041typedef int (*DvrDisplayManagerClientGetSurfaceListPtr)(
Jiwen 'Steve' Caibdcee792017-03-22 16:59:53 -070042 DvrDisplayManagerClient* client,
43 DvrDisplayManagerClientSurfaceList** surface_list);
Hendrik Wagenaar84d90f32017-03-29 10:50:25 -070044typedef void (*DvrDisplayManagerClientSurfaceListDestroyPtr)(
Jiwen 'Steve' Caibdcee792017-03-22 16:59:53 -070045 DvrDisplayManagerClientSurfaceList* surface_list);
Hendrik Wagenaar84d90f32017-03-29 10:50:25 -070046typedef DvrWriteBuffer* (*DvrDisplayManagerSetupPoseBufferPtr)(
Jiwen 'Steve' Caibdcee792017-03-22 16:59:53 -070047 DvrDisplayManagerClient* client, size_t extended_region_size,
48 uint64_t usage0, uint64_t usage1);
Hendrik Wagenaar84d90f32017-03-29 10:50:25 -070049typedef size_t (*DvrDisplayManagerClientSurfaceListGetSizePtr)(
Jiwen 'Steve' Caibdcee792017-03-22 16:59:53 -070050 DvrDisplayManagerClientSurfaceList* surface_list);
Hendrik Wagenaar84d90f32017-03-29 10:50:25 -070051typedef int (*DvrDisplayManagerClientSurfaceListGetSurfaceIdPtr)(
Jiwen 'Steve' Caibdcee792017-03-22 16:59:53 -070052 DvrDisplayManagerClientSurfaceList* surface_list, size_t index);
Hendrik Wagenaar84d90f32017-03-29 10:50:25 -070053typedef int (*DvrDisplayManagerClientGetSurfaceBufferListPtr)(
Jiwen 'Steve' Caibdcee792017-03-22 16:59:53 -070054 DvrDisplayManagerClient* client, int surface_id,
55 DvrDisplayManagerClientSurfaceBuffers** surface_buffers);
Hendrik Wagenaar84d90f32017-03-29 10:50:25 -070056typedef void (*DvrDisplayManagerClientSurfaceBufferListDestroyPtr)(
Jiwen 'Steve' Caibdcee792017-03-22 16:59:53 -070057 DvrDisplayManagerClientSurfaceBuffers* surface_buffers);
Hendrik Wagenaar84d90f32017-03-29 10:50:25 -070058typedef size_t (*DvrDisplayManagerClientSurfaceBufferListGetSizePtr)(
Jiwen 'Steve' Caibdcee792017-03-22 16:59:53 -070059 DvrDisplayManagerClientSurfaceBuffers* surface_buffers);
Hendrik Wagenaar84d90f32017-03-29 10:50:25 -070060typedef int (*DvrDisplayManagerClientSurfaceBufferListGetFdPtr)(
Jiwen 'Steve' Caibdcee792017-03-22 16:59:53 -070061 DvrDisplayManagerClientSurfaceBuffers* surface_buffers, size_t index);
62
63// dvr_buffer.h
64typedef void (*DvrWriteBufferDestroyPtr)(DvrWriteBuffer* client);
65typedef void (*DvrWriteBufferGetBlobFdsPtr)(DvrWriteBuffer* client, int* fds,
66 size_t* fds_count,
67 size_t max_fds_count);
68typedef int (*DvrWriteBufferGetAHardwareBufferPtr)(
69 DvrWriteBuffer* client, AHardwareBuffer** hardware_buffer);
70typedef int (*DvrWriteBufferPostPtr)(DvrWriteBuffer* client, int ready_fence_fd,
71 const void* meta, size_t meta_size_bytes);
72typedef int (*DvrWriteBufferGainPtr)(DvrWriteBuffer* client,
73 int* release_fence_fd);
74typedef int (*DvrWriteBufferGainAsyncPtr)(DvrWriteBuffer* client);
75
Jiwen 'Steve' Cai2d82ceb2017-03-22 17:26:00 -070076typedef void (*DvrReadBufferDestroyPtr)(DvrReadBuffer* client);
Jiwen 'Steve' Caibdcee792017-03-22 16:59:53 -070077typedef void (*DvrReadBufferGetBlobFdsPtr)(DvrReadBuffer* client, int* fds,
78 size_t* fds_count,
79 size_t max_fds_count);
80typedef int (*DvrReadBufferGetAHardwareBufferPtr)(
81 DvrReadBuffer* client, AHardwareBuffer** hardware_buffer);
82typedef int (*DvrReadBufferAcquirePtr)(DvrReadBuffer* client,
83 int* ready_fence_fd, void* meta,
84 size_t meta_size_bytes);
85typedef int (*DvrReadBufferReleasePtr)(DvrReadBuffer* client,
86 int release_fence_fd);
87typedef int (*DvrReadBufferReleaseAsyncPtr)(DvrReadBuffer* client);
88
Jiwen 'Steve' Cai2d82ceb2017-03-22 17:26:00 -070089// dvr_buffer_queue.h
90typedef void (*DvrWriteBufferQueueDestroyPtr)(DvrWriteBufferQueue* write_queue);
91typedef size_t (*DvrWriteBufferQueueGetCapacityPtr)(
92 DvrWriteBufferQueue* write_queue);
Jiwen 'Steve' Cai960bcff2017-04-04 15:02:04 -070093typedef int (*DvrWriteBufferQueueGetExternalSurfacePtr)(
94 DvrWriteBufferQueue* write_queue, ANativeWindow** out_window);
Jiwen 'Steve' Cai2d82ceb2017-03-22 17:26:00 -070095typedef int (*DvrWriteBufferQueueCreateReadQueuePtr)(
96 DvrWriteBufferQueue* write_queue, DvrReadBufferQueue** out_read_queue);
97typedef int (*DvrWriteBufferQueueDequeuePtr)(DvrWriteBufferQueue* write_queue,
98 int timeout,
99 DvrWriteBuffer** out_buffer,
100 int* out_fence_fd);
101typedef void (*DvrReadBufferQueueDestroyPtr)(DvrReadBufferQueue* read_queue);
102typedef size_t (*DvrReadBufferQueueGetCapacityPtr)(
103 DvrReadBufferQueue* read_queue);
104typedef int (*DvrReadBufferQueueCreateReadQueuePtr)(
105 DvrReadBufferQueue* read_queue, DvrReadBufferQueue** out_read_queue);
106typedef int (*DvrReadBufferQueueDequeuePtr)(DvrReadBufferQueue* read_queue,
107 int timeout,
108 DvrReadBuffer** out_buffer,
109 int* out_fence_fd, void* out_meta,
110 size_t meta_size_bytes);
111
Jiwen 'Steve' Caibdcee792017-03-22 16:59:53 -0700112// dvr_surface.h
113typedef int (*DvrGetPoseBufferPtr)(DvrReadBuffer** pose_buffer);
Jiwen 'Steve' Cai74cf0842017-03-23 18:53:16 -0700114typedef int (*DvrSurfaceCreatePtr)(int width, int height, int format,
115 uint64_t usage0, uint64_t usage1, int flags,
116 DvrSurface** out_surface);
117typedef int (*DvrSurfaceGetWriteBufferQueuePtr)(
118 DvrSurface* surface, DvrWriteBufferQueue** out_writer);
Jiwen 'Steve' Caibdcee792017-03-22 16:59:53 -0700119
120// vsync_client_api.h
Hendrik Wagenaar84d90f32017-03-29 10:50:25 -0700121typedef dvr_vsync_client* (*DvrVSyncClientCreatePtr)();
122typedef void (*DvrVSyncClientDestroyPtr)(dvr_vsync_client* client);
123typedef int (*DvrVSyncClientGetSchedInfoPtr)(dvr_vsync_client* client,
124 int64_t* vsync_period_ns,
125 int64_t* next_timestamp_ns,
126 uint32_t* next_vsync_count);
Jiwen 'Steve' Caibdcee792017-03-22 16:59:53 -0700127
128// pose_client.h
Hendrik Wagenaar84d90f32017-03-29 10:50:25 -0700129typedef DvrPose* (*DvrPoseClientCreatePtr)(void);
130typedef void (*DvrPoseClientDestroyPtr)(DvrPose* client);
131typedef int (*DvrPoseGetPtr)(DvrPose* client, uint32_t vsync_count,
132 DvrPoseAsync* out_pose);
133typedef uint32_t (*DvrPoseGetVsyncCountPtr)(DvrPose* client);
134typedef int (*DvrPoseGetControllerPtr)(DvrPose* client, int32_t controller_id,
135 uint32_t vsync_count,
136 DvrPoseAsync* out_pose);
Jiwen 'Steve' Caibdcee792017-03-22 16:59:53 -0700137
138// virtual_touchpad_client.h
Hendrik Wagenaar84d90f32017-03-29 10:50:25 -0700139typedef DvrVirtualTouchpad* (*DvrVirtualTouchpadCreatePtr)(void);
140typedef void (*DvrVirtualTouchpadDestroyPtr)(DvrVirtualTouchpad* client);
141typedef int (*DvrVirtualTouchpadAttachPtr)(DvrVirtualTouchpad* client);
142typedef int (*DvrVirtualTouchpadDetachPtr)(DvrVirtualTouchpad* client);
143typedef int (*DvrVirtualTouchpadTouchPtr)(DvrVirtualTouchpad* client,
144 int touchpad, float x, float y,
145 float pressure);
146typedef int (*DvrVirtualTouchpadButtonStatePtr)(DvrVirtualTouchpad* client,
147 int touchpad, int buttons);
Jiwen 'Steve' Caibdcee792017-03-22 16:59:53 -0700148
Daniel Nicoara37cdc8d2017-03-27 16:56:05 -0400149// dvr_hardware_composer_client.h
150typedef struct DvrHwcClient DvrHwcClient;
151typedef struct DvrHwcFrame DvrHwcFrame;
152typedef int(*DvrHwcOnFrameCallback)(void* client_state, DvrHwcFrame* frame);
153typedef DvrHwcClient* (*DvrHwcClientCreatePtr)(DvrHwcOnFrameCallback callback,
154 void* client_state);
155typedef void (*DvrHwcClientDestroyPtr)(DvrHwcClient* client);
156typedef void (*DvrHwcFrameDestroyPtr)(DvrHwcFrame* frame);
157typedef Display (*DvrHwcFrameGetDisplayIdPtr)(DvrHwcFrame* frame);
158typedef int32_t (*DvrHwcFrameGetDisplayWidthPtr)(DvrHwcFrame* frame);
159typedef int32_t (*DvrHwcFrameGetDisplayHeightPtr)(DvrHwcFrame* frame);
160typedef bool (*DvrHwcFrameGetDisplayRemovedPtr)(DvrHwcFrame* frame);
161typedef size_t (*DvrHwcFrameGetLayerCountPtr)(DvrHwcFrame* frame);
162typedef Layer (*DvrHwcFrameGetLayerIdPtr)(DvrHwcFrame* frame, size_t layer_index);
163typedef AHardwareBuffer* (*DvrHwcFrameGetLayerBufferPtr)(DvrHwcFrame* frame,
164 size_t layer_index);
165typedef int (*DvrHwcFrameGetLayerFencePtr)(DvrHwcFrame* frame,
166 size_t layer_index);
167typedef Recti (*DvrHwcFrameGetLayerDisplayFramePtr)(DvrHwcFrame* frame,
168 size_t layer_index);
169typedef Rectf (*DvrHwcFrameGetLayerCropPtr)(DvrHwcFrame* frame,
170 size_t layer_index);
171typedef BlendMode (*DvrHwcFrameGetLayerBlendModePtr)(DvrHwcFrame* frame,
172 size_t layer_index);
173typedef float (*DvrHwcFrameGetLayerAlphaPtr)(DvrHwcFrame* frame,
174 size_t layer_index);
175typedef uint32_t (*DvrHwcFrameGetLayerTypePtr)(DvrHwcFrame* frame,
176 size_t layer_index);
177typedef uint32_t (*DvrHwcFrameGetLayerApplicationIdPtr)(DvrHwcFrame* frame,
178 size_t layer_index);
179
Jiwen 'Steve' Caibdcee792017-03-22 16:59:53 -0700180struct DvrApi_v1 {
181 // Display manager client
Hendrik Wagenaar9255e3e2017-03-30 11:53:32 -0700182 DvrDisplayManagerClientCreatePtr display_manager_client_create;
183 DvrDisplayManagerClientDestroyPtr display_manager_client_destroy;
Hendrik Wagenaar84d90f32017-03-29 10:50:25 -0700184 DvrDisplayManagerClientGetSurfaceListPtr
Hendrik Wagenaar9255e3e2017-03-30 11:53:32 -0700185 display_manager_client_get_surface_list;
Hendrik Wagenaar84d90f32017-03-29 10:50:25 -0700186 DvrDisplayManagerClientSurfaceListDestroyPtr
Hendrik Wagenaar9255e3e2017-03-30 11:53:32 -0700187 display_manager_client_surface_list_destroy;
188 DvrDisplayManagerSetupPoseBufferPtr display_manager_setup_pose_buffer;
Hendrik Wagenaar84d90f32017-03-29 10:50:25 -0700189 DvrDisplayManagerClientSurfaceListGetSizePtr
Hendrik Wagenaar9255e3e2017-03-30 11:53:32 -0700190 display_manager_client_surface_list_get_size;
Hendrik Wagenaar84d90f32017-03-29 10:50:25 -0700191 DvrDisplayManagerClientSurfaceListGetSurfaceIdPtr
Hendrik Wagenaar9255e3e2017-03-30 11:53:32 -0700192 display_manager_client_surface_list_get_surface_id;
Hendrik Wagenaar84d90f32017-03-29 10:50:25 -0700193 DvrDisplayManagerClientGetSurfaceBufferListPtr
Hendrik Wagenaar9255e3e2017-03-30 11:53:32 -0700194 display_manager_client_get_surface_buffer_list;
Hendrik Wagenaar84d90f32017-03-29 10:50:25 -0700195 DvrDisplayManagerClientSurfaceBufferListDestroyPtr
Hendrik Wagenaar9255e3e2017-03-30 11:53:32 -0700196 display_manager_client_surface_buffer_list_destroy;
Hendrik Wagenaar84d90f32017-03-29 10:50:25 -0700197 DvrDisplayManagerClientSurfaceBufferListGetSizePtr
Hendrik Wagenaar9255e3e2017-03-30 11:53:32 -0700198 display_manager_client_surface_buffer_list_get_size;
Hendrik Wagenaar84d90f32017-03-29 10:50:25 -0700199 DvrDisplayManagerClientSurfaceBufferListGetFdPtr
Hendrik Wagenaar9255e3e2017-03-30 11:53:32 -0700200 display_manager_client_surface_buffer_list_get_fd;
Jiwen 'Steve' Caibdcee792017-03-22 16:59:53 -0700201
202 // Write buffer
Hendrik Wagenaar9255e3e2017-03-30 11:53:32 -0700203 DvrWriteBufferDestroyPtr write_buffer_destroy;
204 DvrWriteBufferGetBlobFdsPtr write_buffer_get_blob_fds;
205 DvrWriteBufferGetAHardwareBufferPtr write_buffer_get_ahardwarebuffer;
206 DvrWriteBufferPostPtr write_buffer_post;
207 DvrWriteBufferGainPtr write_buffer_gain;
208 DvrWriteBufferGainAsyncPtr write_buffer_gain_async;
Jiwen 'Steve' Caibdcee792017-03-22 16:59:53 -0700209
210 // Read buffer
Hendrik Wagenaar9255e3e2017-03-30 11:53:32 -0700211 DvrReadBufferDestroyPtr read_buffer_destroy;
212 DvrReadBufferGetBlobFdsPtr read_buffer_get_blob_fds;
213 DvrReadBufferGetAHardwareBufferPtr read_buffer_get_ahardwarebuffer;
214 DvrReadBufferAcquirePtr read_buffer_acquire;
215 DvrReadBufferReleasePtr read_buffer_release;
216 DvrReadBufferReleaseAsyncPtr read_buffer_release_async;
Jiwen 'Steve' Caibdcee792017-03-22 16:59:53 -0700217
Jiwen 'Steve' Cai2d82ceb2017-03-22 17:26:00 -0700218 // Write buffer queue
Hendrik Wagenaar9255e3e2017-03-30 11:53:32 -0700219 DvrWriteBufferQueueDestroyPtr write_buffer_queue_destroy;
220 DvrWriteBufferQueueGetCapacityPtr write_buffer_queue_get_capacity;
Jiwen 'Steve' Cai2d82ceb2017-03-22 17:26:00 -0700221 DvrWriteBufferQueueGetExternalSurfacePtr
Hendrik Wagenaar9255e3e2017-03-30 11:53:32 -0700222 write_buffer_queue_get_external_surface;
223 DvrWriteBufferQueueCreateReadQueuePtr write_buffer_queue_create_read_queue;
224 DvrWriteBufferQueueDequeuePtr write_buffer_queue_dequeue;
Jiwen 'Steve' Cai2d82ceb2017-03-22 17:26:00 -0700225
226 // Read buffer queue
Hendrik Wagenaar9255e3e2017-03-30 11:53:32 -0700227 DvrReadBufferQueueDestroyPtr read_buffer_queue_destroy;
228 DvrReadBufferQueueGetCapacityPtr read_buffer_queue_get_capacity;
229 DvrReadBufferQueueCreateReadQueuePtr read_buffer_queue_create_read_queue;
Jiwen 'Steve' Cai2d82ceb2017-03-22 17:26:00 -0700230 DvrReadBufferQueueDequeuePtr read_buffer_queue_dequeue;
231
Jiwen 'Steve' Caibdcee792017-03-22 16:59:53 -0700232 // V-Sync client
Hendrik Wagenaar9255e3e2017-03-30 11:53:32 -0700233 DvrVSyncClientCreatePtr vsync_client_create;
234 DvrVSyncClientDestroyPtr vsync_client_destroy;
235 DvrVSyncClientGetSchedInfoPtr vsync_client_get_sched_info;
Jiwen 'Steve' Caibdcee792017-03-22 16:59:53 -0700236
237 // Display surface
Hendrik Wagenaar9255e3e2017-03-30 11:53:32 -0700238 DvrGetPoseBufferPtr get_pose_buffer;
239 DvrSurfaceCreatePtr surface_create;
240 DvrSurfaceGetWriteBufferQueuePtr surface_get_write_buffer_queue;
Jiwen 'Steve' Caibdcee792017-03-22 16:59:53 -0700241
242 // Pose client
Hendrik Wagenaar9255e3e2017-03-30 11:53:32 -0700243 DvrPoseClientCreatePtr pose_client_create;
244 DvrPoseClientDestroyPtr pose_client_destroy;
245 DvrPoseGetPtr pose_get;
246 DvrPoseGetVsyncCountPtr pose_get_vsync_count;
247 DvrPoseGetControllerPtr pose_get_controller;
Jiwen 'Steve' Caibdcee792017-03-22 16:59:53 -0700248
249 // Virtual touchpad client
Hendrik Wagenaar9255e3e2017-03-30 11:53:32 -0700250 DvrVirtualTouchpadCreatePtr virtual_touchpad_create;
251 DvrVirtualTouchpadDestroyPtr virtual_touchpad_destroy;
252 DvrVirtualTouchpadAttachPtr virtual_touchpad_attach;
253 DvrVirtualTouchpadDetachPtr virtual_touchpad_detach;
254 DvrVirtualTouchpadTouchPtr virtual_touchpad_touch;
255 DvrVirtualTouchpadButtonStatePtr virtual_touchpad_button_state;
Daniel Nicoara37cdc8d2017-03-27 16:56:05 -0400256
257 // VR HWComposer client
258 DvrHwcClientCreatePtr hwc_client_create;
259 DvrHwcClientDestroyPtr hwc_client_destroy;
260 DvrHwcFrameDestroyPtr hwc_frame_destroy;
261 DvrHwcFrameGetDisplayIdPtr hwc_frame_get_display_id;
262 DvrHwcFrameGetDisplayWidthPtr hwc_frame_get_display_width;
263 DvrHwcFrameGetDisplayHeightPtr hwc_frame_get_display_height;
264 DvrHwcFrameGetDisplayRemovedPtr hwc_frame_get_display_removed;
265 DvrHwcFrameGetLayerCountPtr hwc_frame_get_layer_count;
266 DvrHwcFrameGetLayerIdPtr hwc_frame_get_layer_id;
267 DvrHwcFrameGetLayerBufferPtr hwc_frame_get_layer_buffer;
268 DvrHwcFrameGetLayerFencePtr hwc_frame_get_layer_fence;
269 DvrHwcFrameGetLayerDisplayFramePtr hwc_frame_get_layer_display_frame;
270 DvrHwcFrameGetLayerCropPtr hwc_frame_get_layer_crop;
271 DvrHwcFrameGetLayerBlendModePtr hwc_frame_get_layer_blend_mode;
272 DvrHwcFrameGetLayerAlphaPtr hwc_frame_get_layer_alpha;
273 DvrHwcFrameGetLayerTypePtr hwc_frame_get_layer_type;
274 DvrHwcFrameGetLayerApplicationIdPtr hwc_frame_get_layer_application_id;
Jiwen 'Steve' Caibdcee792017-03-22 16:59:53 -0700275};
276
277int dvrGetApi(void* api, size_t struct_size, int version);
278
279#ifdef __cplusplus
280} // extern "C"
281#endif
282
283#endif // ANDROID_DVR_API_H_