blob: a4fef190d509b25ecc2338ef3ca92520dfec9b23 [file] [log] [blame]
#ifndef ANDROID_DVR_API_H_
#define ANDROID_DVR_API_H_
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include <dvr/dvr_hardware_composer_defs.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef struct ANativeWindow ANativeWindow;
typedef struct DvrPoseAsync DvrPoseAsync;
typedef struct DvrDisplayManagerClient DvrDisplayManagerClient;
typedef struct DvrDisplayManagerClientSurfaceList
DvrDisplayManagerClientSurfaceList;
typedef struct DvrDisplayManagerClientSurfaceBuffers
DvrDisplayManagerClientSurfaceBuffers;
typedef struct DvrPose DvrPose;
typedef struct dvr_vsync_client dvr_vsync_client;
typedef struct DvrVirtualTouchpad DvrVirtualTouchpad;
typedef DvrDisplayManagerClient* (*DvrDisplayManagerClientCreatePtr)(void);
typedef void (*DvrDisplayManagerClientDestroyPtr)(
DvrDisplayManagerClient* client);
typedef struct DvrWriteBuffer DvrWriteBuffer;
typedef struct DvrReadBuffer DvrReadBuffer;
typedef struct AHardwareBuffer AHardwareBuffer;
typedef struct DvrWriteBufferQueue DvrWriteBufferQueue;
typedef struct DvrReadBufferQueue DvrReadBufferQueue;
typedef struct DvrSurface DvrSurface;
// display_manager_client.h
typedef int (*DvrDisplayManagerClientGetSurfaceListPtr)(
DvrDisplayManagerClient* client,
DvrDisplayManagerClientSurfaceList** surface_list);
typedef void (*DvrDisplayManagerClientSurfaceListDestroyPtr)(
DvrDisplayManagerClientSurfaceList* surface_list);
typedef DvrWriteBuffer* (*DvrDisplayManagerSetupPoseBufferPtr)(
DvrDisplayManagerClient* client, size_t extended_region_size,
uint64_t usage0, uint64_t usage1);
typedef size_t (*DvrDisplayManagerClientSurfaceListGetSizePtr)(
DvrDisplayManagerClientSurfaceList* surface_list);
typedef int (*DvrDisplayManagerClientSurfaceListGetSurfaceIdPtr)(
DvrDisplayManagerClientSurfaceList* surface_list, size_t index);
typedef int (*DvrDisplayManagerClientGetSurfaceBufferListPtr)(
DvrDisplayManagerClient* client, int surface_id,
DvrDisplayManagerClientSurfaceBuffers** surface_buffers);
typedef void (*DvrDisplayManagerClientSurfaceBufferListDestroyPtr)(
DvrDisplayManagerClientSurfaceBuffers* surface_buffers);
typedef size_t (*DvrDisplayManagerClientSurfaceBufferListGetSizePtr)(
DvrDisplayManagerClientSurfaceBuffers* surface_buffers);
typedef int (*DvrDisplayManagerClientSurfaceBufferListGetFdPtr)(
DvrDisplayManagerClientSurfaceBuffers* surface_buffers, size_t index);
// dvr_buffer.h
typedef void (*DvrWriteBufferDestroyPtr)(DvrWriteBuffer* client);
typedef void (*DvrWriteBufferGetBlobFdsPtr)(DvrWriteBuffer* client, int* fds,
size_t* fds_count,
size_t max_fds_count);
typedef int (*DvrWriteBufferGetAHardwareBufferPtr)(
DvrWriteBuffer* client, AHardwareBuffer** hardware_buffer);
typedef int (*DvrWriteBufferPostPtr)(DvrWriteBuffer* client, int ready_fence_fd,
const void* meta, size_t meta_size_bytes);
typedef int (*DvrWriteBufferGainPtr)(DvrWriteBuffer* client,
int* release_fence_fd);
typedef int (*DvrWriteBufferGainAsyncPtr)(DvrWriteBuffer* client);
typedef void (*DvrReadBufferDestroyPtr)(DvrReadBuffer* client);
typedef void (*DvrReadBufferGetBlobFdsPtr)(DvrReadBuffer* client, int* fds,
size_t* fds_count,
size_t max_fds_count);
typedef int (*DvrReadBufferGetAHardwareBufferPtr)(
DvrReadBuffer* client, AHardwareBuffer** hardware_buffer);
typedef int (*DvrReadBufferAcquirePtr)(DvrReadBuffer* client,
int* ready_fence_fd, void* meta,
size_t meta_size_bytes);
typedef int (*DvrReadBufferReleasePtr)(DvrReadBuffer* client,
int release_fence_fd);
typedef int (*DvrReadBufferReleaseAsyncPtr)(DvrReadBuffer* client);
// dvr_buffer_queue.h
typedef void (*DvrWriteBufferQueueDestroyPtr)(DvrWriteBufferQueue* write_queue);
typedef size_t (*DvrWriteBufferQueueGetCapacityPtr)(
DvrWriteBufferQueue* write_queue);
typedef int (*DvrWriteBufferQueueGetExternalSurfacePtr)(
DvrWriteBufferQueue* write_queue, ANativeWindow** out_window);
typedef int (*DvrWriteBufferQueueCreateReadQueuePtr)(
DvrWriteBufferQueue* write_queue, DvrReadBufferQueue** out_read_queue);
typedef int (*DvrWriteBufferQueueDequeuePtr)(DvrWriteBufferQueue* write_queue,
int timeout,
DvrWriteBuffer** out_buffer,
int* out_fence_fd);
typedef void (*DvrReadBufferQueueDestroyPtr)(DvrReadBufferQueue* read_queue);
typedef size_t (*DvrReadBufferQueueGetCapacityPtr)(
DvrReadBufferQueue* read_queue);
typedef int (*DvrReadBufferQueueCreateReadQueuePtr)(
DvrReadBufferQueue* read_queue, DvrReadBufferQueue** out_read_queue);
typedef int (*DvrReadBufferQueueDequeuePtr)(DvrReadBufferQueue* read_queue,
int timeout,
DvrReadBuffer** out_buffer,
int* out_fence_fd, void* out_meta,
size_t meta_size_bytes);
// dvr_surface.h
typedef int (*DvrGetPoseBufferPtr)(DvrReadBuffer** pose_buffer);
typedef int (*DvrSurfaceCreatePtr)(int width, int height, int format,
uint64_t usage0, uint64_t usage1, int flags,
DvrSurface** out_surface);
typedef int (*DvrSurfaceGetWriteBufferQueuePtr)(
DvrSurface* surface, DvrWriteBufferQueue** out_writer);
// vsync_client_api.h
typedef dvr_vsync_client* (*DvrVSyncClientCreatePtr)();
typedef void (*DvrVSyncClientDestroyPtr)(dvr_vsync_client* client);
typedef int (*DvrVSyncClientGetSchedInfoPtr)(dvr_vsync_client* client,
int64_t* vsync_period_ns,
int64_t* next_timestamp_ns,
uint32_t* next_vsync_count);
// pose_client.h
typedef DvrPose* (*DvrPoseClientCreatePtr)(void);
typedef void (*DvrPoseClientDestroyPtr)(DvrPose* client);
typedef int (*DvrPoseGetPtr)(DvrPose* client, uint32_t vsync_count,
DvrPoseAsync* out_pose);
typedef uint32_t (*DvrPoseGetVsyncCountPtr)(DvrPose* client);
typedef int (*DvrPoseGetControllerPtr)(DvrPose* client, int32_t controller_id,
uint32_t vsync_count,
DvrPoseAsync* out_pose);
// virtual_touchpad_client.h
typedef DvrVirtualTouchpad* (*DvrVirtualTouchpadCreatePtr)(void);
typedef void (*DvrVirtualTouchpadDestroyPtr)(DvrVirtualTouchpad* client);
typedef int (*DvrVirtualTouchpadAttachPtr)(DvrVirtualTouchpad* client);
typedef int (*DvrVirtualTouchpadDetachPtr)(DvrVirtualTouchpad* client);
typedef int (*DvrVirtualTouchpadTouchPtr)(DvrVirtualTouchpad* client,
int touchpad, float x, float y,
float pressure);
typedef int (*DvrVirtualTouchpadButtonStatePtr)(DvrVirtualTouchpad* client,
int touchpad, int buttons);
// dvr_hardware_composer_client.h
typedef struct DvrHwcClient DvrHwcClient;
typedef struct DvrHwcFrame DvrHwcFrame;
typedef int(*DvrHwcOnFrameCallback)(void* client_state, DvrHwcFrame* frame);
typedef DvrHwcClient* (*DvrHwcClientCreatePtr)(DvrHwcOnFrameCallback callback,
void* client_state);
typedef void (*DvrHwcClientDestroyPtr)(DvrHwcClient* client);
typedef void (*DvrHwcFrameDestroyPtr)(DvrHwcFrame* frame);
typedef Display (*DvrHwcFrameGetDisplayIdPtr)(DvrHwcFrame* frame);
typedef int32_t (*DvrHwcFrameGetDisplayWidthPtr)(DvrHwcFrame* frame);
typedef int32_t (*DvrHwcFrameGetDisplayHeightPtr)(DvrHwcFrame* frame);
typedef bool (*DvrHwcFrameGetDisplayRemovedPtr)(DvrHwcFrame* frame);
typedef size_t (*DvrHwcFrameGetLayerCountPtr)(DvrHwcFrame* frame);
typedef Layer (*DvrHwcFrameGetLayerIdPtr)(DvrHwcFrame* frame, size_t layer_index);
typedef AHardwareBuffer* (*DvrHwcFrameGetLayerBufferPtr)(DvrHwcFrame* frame,
size_t layer_index);
typedef int (*DvrHwcFrameGetLayerFencePtr)(DvrHwcFrame* frame,
size_t layer_index);
typedef Recti (*DvrHwcFrameGetLayerDisplayFramePtr)(DvrHwcFrame* frame,
size_t layer_index);
typedef Rectf (*DvrHwcFrameGetLayerCropPtr)(DvrHwcFrame* frame,
size_t layer_index);
typedef BlendMode (*DvrHwcFrameGetLayerBlendModePtr)(DvrHwcFrame* frame,
size_t layer_index);
typedef float (*DvrHwcFrameGetLayerAlphaPtr)(DvrHwcFrame* frame,
size_t layer_index);
typedef uint32_t (*DvrHwcFrameGetLayerTypePtr)(DvrHwcFrame* frame,
size_t layer_index);
typedef uint32_t (*DvrHwcFrameGetLayerApplicationIdPtr)(DvrHwcFrame* frame,
size_t layer_index);
struct DvrApi_v1 {
// Display manager client
DvrDisplayManagerClientCreatePtr display_manager_client_create;
DvrDisplayManagerClientDestroyPtr display_manager_client_destroy;
DvrDisplayManagerClientGetSurfaceListPtr
display_manager_client_get_surface_list;
DvrDisplayManagerClientSurfaceListDestroyPtr
display_manager_client_surface_list_destroy;
DvrDisplayManagerSetupPoseBufferPtr display_manager_setup_pose_buffer;
DvrDisplayManagerClientSurfaceListGetSizePtr
display_manager_client_surface_list_get_size;
DvrDisplayManagerClientSurfaceListGetSurfaceIdPtr
display_manager_client_surface_list_get_surface_id;
DvrDisplayManagerClientGetSurfaceBufferListPtr
display_manager_client_get_surface_buffer_list;
DvrDisplayManagerClientSurfaceBufferListDestroyPtr
display_manager_client_surface_buffer_list_destroy;
DvrDisplayManagerClientSurfaceBufferListGetSizePtr
display_manager_client_surface_buffer_list_get_size;
DvrDisplayManagerClientSurfaceBufferListGetFdPtr
display_manager_client_surface_buffer_list_get_fd;
// Write buffer
DvrWriteBufferDestroyPtr write_buffer_destroy;
DvrWriteBufferGetBlobFdsPtr write_buffer_get_blob_fds;
DvrWriteBufferGetAHardwareBufferPtr write_buffer_get_ahardwarebuffer;
DvrWriteBufferPostPtr write_buffer_post;
DvrWriteBufferGainPtr write_buffer_gain;
DvrWriteBufferGainAsyncPtr write_buffer_gain_async;
// Read buffer
DvrReadBufferDestroyPtr read_buffer_destroy;
DvrReadBufferGetBlobFdsPtr read_buffer_get_blob_fds;
DvrReadBufferGetAHardwareBufferPtr read_buffer_get_ahardwarebuffer;
DvrReadBufferAcquirePtr read_buffer_acquire;
DvrReadBufferReleasePtr read_buffer_release;
DvrReadBufferReleaseAsyncPtr read_buffer_release_async;
// Write buffer queue
DvrWriteBufferQueueDestroyPtr write_buffer_queue_destroy;
DvrWriteBufferQueueGetCapacityPtr write_buffer_queue_get_capacity;
DvrWriteBufferQueueGetExternalSurfacePtr
write_buffer_queue_get_external_surface;
DvrWriteBufferQueueCreateReadQueuePtr write_buffer_queue_create_read_queue;
DvrWriteBufferQueueDequeuePtr write_buffer_queue_dequeue;
// Read buffer queue
DvrReadBufferQueueDestroyPtr read_buffer_queue_destroy;
DvrReadBufferQueueGetCapacityPtr read_buffer_queue_get_capacity;
DvrReadBufferQueueCreateReadQueuePtr read_buffer_queue_create_read_queue;
DvrReadBufferQueueDequeuePtr read_buffer_queue_dequeue;
// V-Sync client
DvrVSyncClientCreatePtr vsync_client_create;
DvrVSyncClientDestroyPtr vsync_client_destroy;
DvrVSyncClientGetSchedInfoPtr vsync_client_get_sched_info;
// Display surface
DvrGetPoseBufferPtr get_pose_buffer;
DvrSurfaceCreatePtr surface_create;
DvrSurfaceGetWriteBufferQueuePtr surface_get_write_buffer_queue;
// Pose client
DvrPoseClientCreatePtr pose_client_create;
DvrPoseClientDestroyPtr pose_client_destroy;
DvrPoseGetPtr pose_get;
DvrPoseGetVsyncCountPtr pose_get_vsync_count;
DvrPoseGetControllerPtr pose_get_controller;
// Virtual touchpad client
DvrVirtualTouchpadCreatePtr virtual_touchpad_create;
DvrVirtualTouchpadDestroyPtr virtual_touchpad_destroy;
DvrVirtualTouchpadAttachPtr virtual_touchpad_attach;
DvrVirtualTouchpadDetachPtr virtual_touchpad_detach;
DvrVirtualTouchpadTouchPtr virtual_touchpad_touch;
DvrVirtualTouchpadButtonStatePtr virtual_touchpad_button_state;
// VR HWComposer client
DvrHwcClientCreatePtr hwc_client_create;
DvrHwcClientDestroyPtr hwc_client_destroy;
DvrHwcFrameDestroyPtr hwc_frame_destroy;
DvrHwcFrameGetDisplayIdPtr hwc_frame_get_display_id;
DvrHwcFrameGetDisplayWidthPtr hwc_frame_get_display_width;
DvrHwcFrameGetDisplayHeightPtr hwc_frame_get_display_height;
DvrHwcFrameGetDisplayRemovedPtr hwc_frame_get_display_removed;
DvrHwcFrameGetLayerCountPtr hwc_frame_get_layer_count;
DvrHwcFrameGetLayerIdPtr hwc_frame_get_layer_id;
DvrHwcFrameGetLayerBufferPtr hwc_frame_get_layer_buffer;
DvrHwcFrameGetLayerFencePtr hwc_frame_get_layer_fence;
DvrHwcFrameGetLayerDisplayFramePtr hwc_frame_get_layer_display_frame;
DvrHwcFrameGetLayerCropPtr hwc_frame_get_layer_crop;
DvrHwcFrameGetLayerBlendModePtr hwc_frame_get_layer_blend_mode;
DvrHwcFrameGetLayerAlphaPtr hwc_frame_get_layer_alpha;
DvrHwcFrameGetLayerTypePtr hwc_frame_get_layer_type;
DvrHwcFrameGetLayerApplicationIdPtr hwc_frame_get_layer_application_id;
};
int dvrGetApi(void* api, size_t struct_size, int version);
#ifdef __cplusplus
} // extern "C"
#endif
#endif // ANDROID_DVR_API_H_