504 lines
24 KiB
C
504 lines
24 KiB
C
#ifndef ANDROID_DVR_API_H_
|
|
#define ANDROID_DVR_API_H_
|
|
|
|
#include <stdbool.h>
|
|
#include <stddef.h>
|
|
#include <stdint.h>
|
|
#include <unistd.h>
|
|
#include <cstdio>
|
|
|
|
#include <dvr/dvr_display_types.h>
|
|
#include <dvr/dvr_hardware_composer_types.h>
|
|
#include <dvr/dvr_pose.h>
|
|
#include <dvr/dvr_tracking_types.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#ifdef __GNUC__
|
|
#define ALIGNED_DVR_STRUCT(x) __attribute__((packed, aligned(x)))
|
|
#else
|
|
#define ALIGNED_DVR_STRUCT(x)
|
|
#endif
|
|
|
|
typedef struct ANativeWindow ANativeWindow;
|
|
|
|
typedef struct DvrPoseAsync DvrPoseAsync;
|
|
|
|
typedef uint64_t DvrSurfaceUpdateFlags;
|
|
typedef struct DvrDisplayManager DvrDisplayManager;
|
|
typedef struct DvrSurfaceState DvrSurfaceState;
|
|
typedef struct DvrPoseClient DvrPoseClient;
|
|
typedef struct DvrPoseDataCaptureRequest DvrPoseDataCaptureRequest;
|
|
typedef struct DvrVSyncClient DvrVSyncClient;
|
|
typedef struct DvrVirtualTouchpad DvrVirtualTouchpad;
|
|
|
|
typedef struct DvrBuffer DvrBuffer;
|
|
typedef struct DvrWriteBuffer DvrWriteBuffer;
|
|
typedef struct DvrReadBuffer DvrReadBuffer;
|
|
typedef struct AHardwareBuffer AHardwareBuffer;
|
|
|
|
typedef struct DvrReadBufferQueue DvrReadBufferQueue;
|
|
typedef struct DvrWriteBufferQueue DvrWriteBufferQueue;
|
|
typedef struct DvrNativeBufferMetadata DvrNativeBufferMetadata;
|
|
|
|
typedef struct DvrSurface DvrSurface;
|
|
typedef uint64_t DvrSurfaceAttributeType;
|
|
typedef int32_t DvrSurfaceAttributeKey;
|
|
typedef int32_t DvrGlobalBufferKey;
|
|
|
|
typedef struct DvrSurfaceAttributeValue DvrSurfaceAttributeValue;
|
|
typedef struct DvrSurfaceAttribute DvrSurfaceAttribute;
|
|
|
|
typedef struct DvrReadBuffer DvrReadBuffer;
|
|
typedef struct DvrTrackingCamera DvrTrackingCamera;
|
|
typedef struct DvrTrackingFeatureExtractor DvrTrackingFeatureExtractor;
|
|
typedef struct DvrTrackingSensors DvrTrackingSensors;
|
|
typedef struct DvrWriteBufferQueue DvrWriteBufferQueue;
|
|
|
|
// Note: To avoid breaking others during active development, only modify this
|
|
// struct by appending elements to the end.
|
|
// If you do feel we should to re-arrange or remove elements, please make a
|
|
// note of it, and wait until we're about to finalize for an API release to do
|
|
// so.
|
|
typedef struct DvrNativeDisplayMetrics {
|
|
uint32_t display_width;
|
|
uint32_t display_height;
|
|
uint32_t display_x_dpi;
|
|
uint32_t display_y_dpi;
|
|
uint32_t vsync_period_ns;
|
|
} DvrNativeDisplayMetrics;
|
|
|
|
// native_handle contains the fds for the underlying ION allocations inside
|
|
// the gralloc buffer. This is needed temporarily while GPU vendors work on
|
|
// better support for AHardwareBuffer via glBindSharedBuffer APIs. See
|
|
// b/37207909. For now we can declare the native_handle struct where it is
|
|
// used for GPU late latching. See cutils/native_handle.h for the struct layout.
|
|
struct native_handle;
|
|
|
|
// Device metrics data type enums.
|
|
enum {
|
|
// Request the device lens metrics protobuf. This matches cardboard protos.
|
|
DVR_CONFIGURATION_DATA_LENS_METRICS = 0,
|
|
// Request the device metrics protobuf.
|
|
DVR_CONFIGURATION_DATA_DEVICE_METRICS = 1,
|
|
// Request the per device configuration data file.
|
|
DVR_CONFIGURATION_DATA_DEVICE_CONFIG = 2,
|
|
// Request the edid data for the display.
|
|
DVR_CONFIGURATION_DATA_DEVICE_EDID = 3,
|
|
};
|
|
|
|
// dvr_display_manager.h
|
|
typedef int (*DvrDisplayManagerCreatePtr)(DvrDisplayManager** client_out);
|
|
typedef void (*DvrDisplayManagerDestroyPtr)(DvrDisplayManager* client);
|
|
typedef int (*DvrDisplayManagerGetEventFdPtr)(DvrDisplayManager* client);
|
|
typedef int (*DvrDisplayManagerTranslateEpollEventMaskPtr)(
|
|
DvrDisplayManager* client, int in_events, int* out_events);
|
|
typedef int (*DvrDisplayManagerGetSurfaceStatePtr)(
|
|
DvrDisplayManager* client, DvrSurfaceState* surface_state);
|
|
typedef int (*DvrDisplayManagerGetReadBufferQueuePtr)(
|
|
DvrDisplayManager* client, int surface_id, int queue_id,
|
|
DvrReadBufferQueue** queue_out);
|
|
typedef int (*DvrConfigurationDataGetPtr)(int config_type, uint8_t** data,
|
|
size_t* data_size);
|
|
typedef void (*DvrConfigurationDataDestroyPtr)(uint8_t* data);
|
|
typedef int (*DvrSurfaceStateCreatePtr)(DvrSurfaceState** surface_state);
|
|
typedef void (*DvrSurfaceStateDestroyPtr)(DvrSurfaceState* surface_state);
|
|
typedef int (*DvrSurfaceStateGetSurfaceCountPtr)(DvrSurfaceState* surface_state,
|
|
size_t* count_out);
|
|
typedef int (*DvrSurfaceStateGetUpdateFlagsPtr)(
|
|
DvrSurfaceState* surface_state, size_t surface_index,
|
|
DvrSurfaceUpdateFlags* flags_out);
|
|
typedef int (*DvrSurfaceStateGetSurfaceIdPtr)(DvrSurfaceState* surface_state,
|
|
size_t surface_index,
|
|
int* surface_id_out);
|
|
typedef int (*DvrSurfaceStateGetProcessIdPtr)(DvrSurfaceState* surface_state,
|
|
size_t surface_index,
|
|
int* process_id_out);
|
|
typedef int (*DvrSurfaceStateGetQueueCountPtr)(DvrSurfaceState* surface_state,
|
|
size_t surface_index,
|
|
size_t* count_out);
|
|
typedef ssize_t (*DvrSurfaceStateGetQueueIdsPtr)(DvrSurfaceState* surface_state,
|
|
size_t surface_index,
|
|
int* queue_ids,
|
|
size_t max_count);
|
|
typedef int (*DvrSurfaceStateGetZOrderPtr)(DvrSurfaceState* surface_state,
|
|
size_t surface_index,
|
|
int* z_order_out);
|
|
typedef int (*DvrSurfaceStateGetVisiblePtr)(DvrSurfaceState* surface_state,
|
|
size_t surface_index,
|
|
bool* visible_out);
|
|
typedef int (*DvrSurfaceStateGetAttributeCountPtr)(
|
|
DvrSurfaceState* surface_state, size_t surface_index, size_t* count_out);
|
|
typedef ssize_t (*DvrSurfaceStateGetAttributesPtr)(
|
|
DvrSurfaceState* surface_state, size_t surface_index,
|
|
DvrSurfaceAttribute* attributes, size_t max_attribute_count);
|
|
|
|
// dvr_buffer.h
|
|
typedef void (*DvrWriteBufferCreateEmptyPtr)(DvrWriteBuffer** write_buffer_out);
|
|
typedef void (*DvrWriteBufferDestroyPtr)(DvrWriteBuffer* write_buffer);
|
|
typedef int (*DvrWriteBufferIsValidPtr)(DvrWriteBuffer* write_buffer);
|
|
typedef int (*DvrWriteBufferClearPtr)(DvrWriteBuffer* write_buffer);
|
|
typedef int (*DvrWriteBufferGetIdPtr)(DvrWriteBuffer* write_buffer);
|
|
typedef int (*DvrWriteBufferGetAHardwareBufferPtr)(
|
|
DvrWriteBuffer* write_buffer, AHardwareBuffer** hardware_buffer);
|
|
typedef int (*DvrWriteBufferPostPtr)(DvrWriteBuffer* write_buffer,
|
|
int ready_fence_fd, const void* meta,
|
|
size_t meta_size_bytes);
|
|
typedef int (*DvrWriteBufferGainPtr)(DvrWriteBuffer* write_buffer,
|
|
int* release_fence_fd);
|
|
typedef int (*DvrWriteBufferGainAsyncPtr)(DvrWriteBuffer* write_buffer);
|
|
typedef const struct native_handle* (*DvrWriteBufferGetNativeHandlePtr)(
|
|
DvrWriteBuffer* write_buffer);
|
|
|
|
typedef void (*DvrReadBufferCreateEmptyPtr)(DvrReadBuffer** read_buffer_out);
|
|
typedef void (*DvrReadBufferDestroyPtr)(DvrReadBuffer* read_buffer);
|
|
typedef int (*DvrReadBufferIsValidPtr)(DvrReadBuffer* read_buffer);
|
|
typedef int (*DvrReadBufferClearPtr)(DvrReadBuffer* read_buffer);
|
|
typedef int (*DvrReadBufferGetIdPtr)(DvrReadBuffer* read_buffer);
|
|
typedef int (*DvrReadBufferGetAHardwareBufferPtr)(
|
|
DvrReadBuffer* read_buffer, AHardwareBuffer** hardware_buffer);
|
|
typedef int (*DvrReadBufferAcquirePtr)(DvrReadBuffer* read_buffer,
|
|
int* ready_fence_fd, void* meta,
|
|
size_t meta_size_bytes);
|
|
typedef int (*DvrReadBufferReleasePtr)(DvrReadBuffer* read_buffer,
|
|
int release_fence_fd);
|
|
typedef int (*DvrReadBufferReleaseAsyncPtr)(DvrReadBuffer* read_buffer);
|
|
typedef const struct native_handle* (*DvrReadBufferGetNativeHandlePtr)(
|
|
DvrReadBuffer* read_buffer);
|
|
|
|
typedef void (*DvrBufferDestroyPtr)(DvrBuffer* buffer);
|
|
typedef int (*DvrBufferGetAHardwareBufferPtr)(
|
|
DvrBuffer* buffer, AHardwareBuffer** hardware_buffer);
|
|
typedef int (*DvrBufferGlobalLayoutVersionGetPtr)();
|
|
typedef const struct native_handle* (*DvrBufferGetNativeHandlePtr)(
|
|
DvrBuffer* buffer);
|
|
|
|
// dvr_buffer_queue.h
|
|
typedef int (*DvrWriteBufferQueueCreatePtr)(uint32_t width, uint32_t height,
|
|
uint32_t format,
|
|
uint32_t layer_count,
|
|
uint64_t usage, size_t capacity,
|
|
size_t metadata_size,
|
|
DvrWriteBufferQueue** queue_out);
|
|
typedef void (*DvrWriteBufferQueueDestroyPtr)(DvrWriteBufferQueue* write_queue);
|
|
typedef ssize_t (*DvrWriteBufferQueueGetCapacityPtr)(
|
|
DvrWriteBufferQueue* write_queue);
|
|
typedef int (*DvrWriteBufferQueueGetIdPtr)(DvrWriteBufferQueue* write_queue);
|
|
typedef int (*DvrWriteBufferQueueGetExternalSurfacePtr)(
|
|
DvrWriteBufferQueue* write_queue, ANativeWindow** out_window);
|
|
typedef int (*DvrWriteBufferQueueGetANativeWindowPtr)(
|
|
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 int (*DvrWriteBufferQueueGainBufferPtr)(
|
|
DvrWriteBufferQueue* write_queue, int timeout,
|
|
DvrWriteBuffer** out_write_buffer, DvrNativeBufferMetadata* out_meta,
|
|
int* out_fence_fd);
|
|
typedef int (*DvrWriteBufferQueuePostBufferPtr)(
|
|
DvrWriteBufferQueue* write_queue, DvrWriteBuffer* write_buffer,
|
|
const DvrNativeBufferMetadata* meta, int ready_fence_fd);
|
|
typedef int (*DvrWriteBufferQueueResizeBufferPtr)(
|
|
DvrWriteBufferQueue* write_queue, uint32_t width, uint32_t height);
|
|
typedef void (*DvrReadBufferQueueDestroyPtr)(DvrReadBufferQueue* read_queue);
|
|
typedef ssize_t (*DvrReadBufferQueueGetCapacityPtr)(
|
|
DvrReadBufferQueue* read_queue);
|
|
typedef int (*DvrReadBufferQueueGetIdPtr)(DvrReadBufferQueue* read_queue);
|
|
typedef int (*DvrReadBufferQueueGetEventFdPtr)(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);
|
|
typedef int (*DvrReadBufferQueueAcquireBufferPtr)(
|
|
DvrReadBufferQueue* read_queue, int timeout,
|
|
DvrReadBuffer** out_read_buffer, DvrNativeBufferMetadata* out_meta,
|
|
int* out_fence_fd);
|
|
typedef int (*DvrReadBufferQueueReleaseBufferPtr)(
|
|
DvrReadBufferQueue* read_queue, DvrReadBuffer* read_buffer,
|
|
const DvrNativeBufferMetadata* meta, int release_fence_fd);
|
|
typedef void (*DvrReadBufferQueueBufferAvailableCallback)(void* context);
|
|
typedef int (*DvrReadBufferQueueSetBufferAvailableCallbackPtr)(
|
|
DvrReadBufferQueue* read_queue,
|
|
DvrReadBufferQueueBufferAvailableCallback callback, void* context);
|
|
typedef void (*DvrReadBufferQueueBufferRemovedCallback)(DvrReadBuffer* buffer,
|
|
void* context);
|
|
typedef int (*DvrReadBufferQueueSetBufferRemovedCallbackPtr)(
|
|
DvrReadBufferQueue* read_queue,
|
|
DvrReadBufferQueueBufferRemovedCallback callback, void* context);
|
|
typedef int (*DvrReadBufferQueueHandleEventsPtr)(
|
|
DvrReadBufferQueue* read_queue);
|
|
|
|
// dvr_surface.h
|
|
typedef int (*DvrSetupGlobalBufferPtr)(DvrGlobalBufferKey key, size_t size,
|
|
uint64_t usage, DvrBuffer** buffer_out);
|
|
typedef int (*DvrDeleteGlobalBufferPtr)(DvrGlobalBufferKey key);
|
|
typedef int (*DvrGetGlobalBufferPtr)(DvrGlobalBufferKey key,
|
|
DvrBuffer** out_buffer);
|
|
typedef int (*DvrSurfaceCreatePtr)(const DvrSurfaceAttribute* attributes,
|
|
size_t attribute_count,
|
|
DvrSurface** surface_out);
|
|
typedef void (*DvrSurfaceDestroyPtr)(DvrSurface* surface);
|
|
typedef int (*DvrSurfaceGetIdPtr)(DvrSurface* surface);
|
|
typedef int (*DvrSurfaceSetAttributesPtr)(DvrSurface* surface,
|
|
const DvrSurfaceAttribute* attributes,
|
|
size_t attribute_count);
|
|
typedef int (*DvrSurfaceCreateWriteBufferQueuePtr)(
|
|
DvrSurface* surface, uint32_t width, uint32_t height, uint32_t format,
|
|
uint32_t layer_count, uint64_t usage, size_t capacity, size_t metadata_size,
|
|
DvrWriteBufferQueue** queue_out);
|
|
typedef int (*DvrGetNativeDisplayMetricsPtr)(size_t sizeof_metrics,
|
|
DvrNativeDisplayMetrics* metrics);
|
|
|
|
// dvr_vsync.h
|
|
typedef int (*DvrVSyncClientCreatePtr)(DvrVSyncClient** client_out);
|
|
typedef void (*DvrVSyncClientDestroyPtr)(DvrVSyncClient* client);
|
|
typedef int (*DvrVSyncClientGetSchedInfoPtr)(DvrVSyncClient* client,
|
|
int64_t* vsync_period_ns,
|
|
int64_t* next_timestamp_ns,
|
|
uint32_t* next_vsync_count);
|
|
|
|
// libs/vr/libvrsensor/include/dvr/pose_client.h
|
|
typedef DvrPoseClient* (*DvrPoseClientCreatePtr)();
|
|
typedef void (*DvrPoseClientDestroyPtr)(DvrPoseClient* client);
|
|
typedef int (*DvrPoseClientGetPtr)(DvrPoseClient* client, uint32_t vsync_count,
|
|
DvrPoseAsync* out_pose);
|
|
typedef uint32_t (*DvrPoseClientGetVsyncCountPtr)(DvrPoseClient* client);
|
|
typedef int (*DvrPoseClientGetControllerPtr)(DvrPoseClient* client,
|
|
int32_t controller_id,
|
|
uint32_t vsync_count,
|
|
DvrPoseAsync* out_pose);
|
|
typedef int (*DvrPoseClientSensorsEnablePtr)(DvrPoseClient* client,
|
|
bool enabled);
|
|
typedef int (*DvrPoseClientDataCapturePtr)(DvrPoseClient* client,
|
|
const DvrPoseDataCaptureRequest* request);
|
|
typedef int (*DvrPoseClientDataReaderDestroyPtr)(DvrPoseClient* client,
|
|
uint64_t data_type);
|
|
|
|
// dvr_pose.h
|
|
typedef int (*DvrPoseClientGetDataReaderPtr)(DvrPoseClient* client,
|
|
uint64_t data_type,
|
|
DvrReadBufferQueue** read_queue);
|
|
|
|
// services/vr/virtual_touchpad/include/dvr/virtual_touchpad_client.h
|
|
|
|
// Touchpad IDs for *Touch*() and *ButtonState*() calls.
|
|
enum {
|
|
DVR_VIRTUAL_TOUCHPAD_PRIMARY = 0,
|
|
DVR_VIRTUAL_TOUCHPAD_VIRTUAL = 1,
|
|
};
|
|
typedef DvrVirtualTouchpad* (*DvrVirtualTouchpadCreatePtr)();
|
|
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);
|
|
typedef int (*DvrVirtualTouchpadScrollPtr)(DvrVirtualTouchpad* client,
|
|
int touchpad, float x, float y);
|
|
|
|
// 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 DvrHwcDisplay (*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 DvrHwcLayer (*DvrHwcFrameGetLayerIdPtr)(DvrHwcFrame* frame,
|
|
size_t layer_index);
|
|
typedef uint32_t (*DvrHwcFrameGetActiveConfigPtr)(DvrHwcFrame* frame);
|
|
typedef uint32_t (*DvrHwcFrameGetColorModePtr)(DvrHwcFrame* frame);
|
|
typedef void (*DvrHwcFrameGetColorTransformPtr)(DvrHwcFrame* frame,
|
|
float* out_matrix,
|
|
int32_t* out_hint);
|
|
typedef uint32_t (*DvrHwcFrameGetPowerModePtr)(DvrHwcFrame* frame);
|
|
typedef uint32_t (*DvrHwcFrameGetVsyncEnabledPtr)(DvrHwcFrame* frame);
|
|
typedef AHardwareBuffer* (*DvrHwcFrameGetLayerBufferPtr)(DvrHwcFrame* frame,
|
|
size_t layer_index);
|
|
typedef int (*DvrHwcFrameGetLayerFencePtr)(DvrHwcFrame* frame,
|
|
size_t layer_index);
|
|
typedef DvrHwcRecti (*DvrHwcFrameGetLayerDisplayFramePtr)(DvrHwcFrame* frame,
|
|
size_t layer_index);
|
|
typedef DvrHwcRectf (*DvrHwcFrameGetLayerCropPtr)(DvrHwcFrame* frame,
|
|
size_t layer_index);
|
|
typedef DvrHwcBlendMode (*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);
|
|
typedef uint32_t (*DvrHwcFrameGetLayerZOrderPtr)(DvrHwcFrame* frame,
|
|
size_t layer_index);
|
|
|
|
typedef void (*DvrHwcFrameGetLayerCursorPtr)(DvrHwcFrame* frame,
|
|
size_t layer_index, int32_t* out_x,
|
|
int32_t* out_y);
|
|
|
|
typedef uint32_t (*DvrHwcFrameGetLayerTransformPtr)(DvrHwcFrame* frame,
|
|
size_t layer_index);
|
|
|
|
typedef uint32_t (*DvrHwcFrameGetLayerDataspacePtr)(DvrHwcFrame* frame,
|
|
size_t layer_index);
|
|
|
|
typedef uint32_t (*DvrHwcFrameGetLayerColorPtr)(DvrHwcFrame* frame,
|
|
size_t layer_index);
|
|
|
|
typedef uint32_t (*DvrHwcFrameGetLayerNumVisibleRegionsPtr)(DvrHwcFrame* frame,
|
|
size_t layer_index);
|
|
typedef DvrHwcRecti (*DvrHwcFrameGetLayerVisibleRegionPtr)(DvrHwcFrame* frame,
|
|
size_t layer_index,
|
|
size_t index);
|
|
|
|
typedef uint32_t (*DvrHwcFrameGetLayerNumDamagedRegionsPtr)(DvrHwcFrame* frame,
|
|
size_t layer_index);
|
|
typedef DvrHwcRecti (*DvrHwcFrameGetLayerDamagedRegionPtr)(DvrHwcFrame* frame,
|
|
size_t layer_index,
|
|
size_t index);
|
|
|
|
// dvr_performance.h
|
|
typedef int (*DvrPerformanceSetSchedulerPolicyPtr)(
|
|
pid_t task_id, const char* scheduler_policy);
|
|
|
|
// dvr_tracking.h
|
|
typedef int (*DvrTrackingCameraCreatePtr)(DvrTrackingCamera** out_camera);
|
|
typedef void (*DvrTrackingCameraDestroyPtr)(DvrTrackingCamera* camera);
|
|
typedef int (*DvrTrackingCameraStartPtr)(DvrTrackingCamera* camera,
|
|
DvrWriteBufferQueue* write_queue);
|
|
typedef int (*DvrTrackingCameraStopPtr)(DvrTrackingCamera* camera);
|
|
|
|
typedef int (*DvrTrackingFeatureExtractorCreatePtr)(
|
|
DvrTrackingFeatureExtractor** out_extractor);
|
|
typedef void (*DvrTrackingFeatureExtractorDestroyPtr)(
|
|
DvrTrackingFeatureExtractor* extractor);
|
|
typedef void (*DvrTrackingFeatureCallback)(void* context,
|
|
const DvrTrackingFeatures* event);
|
|
typedef int (*DvrTrackingFeatureExtractorStartPtr)(
|
|
DvrTrackingFeatureExtractor* extractor,
|
|
DvrTrackingFeatureCallback callback, void* context);
|
|
typedef int (*DvrTrackingFeatureExtractorStopPtr)(
|
|
DvrTrackingFeatureExtractor* extractor);
|
|
typedef int (*DvrTrackingFeatureExtractorProcessBufferPtr)(
|
|
DvrTrackingFeatureExtractor* extractor, DvrReadBuffer* buffer,
|
|
const DvrTrackingBufferMetadata* metadata, bool* out_skipped);
|
|
|
|
typedef void (*DvrTrackingSensorEventCallback)(void* context,
|
|
DvrTrackingSensorEvent* event);
|
|
typedef int (*DvrTrackingSensorsCreatePtr)(DvrTrackingSensors** out_sensors,
|
|
const char* mode);
|
|
typedef void (*DvrTrackingSensorsDestroyPtr)(DvrTrackingSensors* sensors);
|
|
typedef int (*DvrTrackingSensorsStartPtr)(
|
|
DvrTrackingSensors* sensors, DvrTrackingSensorEventCallback callback,
|
|
void* context);
|
|
typedef int (*DvrTrackingSensorsStopPtr)(DvrTrackingSensors* sensors);
|
|
|
|
// The buffer metadata that an Android Surface (a.k.a. ANativeWindow)
|
|
// will populate. A DvrWriteBufferQueue must be created with this metadata iff
|
|
// ANativeWindow access is needed. Please do not remove, modify, or reorder
|
|
// existing data members. If new fields need to be added, please take extra care
|
|
// to make sure that new data field is padded properly the size of the struct
|
|
// stays same.
|
|
// TODO(b/118893702): move the definition to libnativewindow or libui
|
|
struct ALIGNED_DVR_STRUCT(8) DvrNativeBufferMetadata {
|
|
#ifdef __cplusplus
|
|
DvrNativeBufferMetadata()
|
|
: timestamp(0),
|
|
is_auto_timestamp(0),
|
|
dataspace(0),
|
|
crop_left(0),
|
|
crop_top(0),
|
|
crop_right(0),
|
|
crop_bottom(0),
|
|
scaling_mode(0),
|
|
transform(0),
|
|
index(0),
|
|
user_metadata_size(0),
|
|
user_metadata_ptr(0),
|
|
release_fence_mask(0),
|
|
reserved{0} {}
|
|
#endif
|
|
// Timestamp of the frame.
|
|
int64_t timestamp;
|
|
|
|
// Whether the buffer is using auto timestamp.
|
|
int32_t is_auto_timestamp;
|
|
|
|
// Must be one of the HAL_DATASPACE_XXX value defined in system/graphics.h
|
|
int32_t dataspace;
|
|
|
|
// Crop extracted from an ACrop or android::Crop object.
|
|
int32_t crop_left;
|
|
int32_t crop_top;
|
|
int32_t crop_right;
|
|
int32_t crop_bottom;
|
|
|
|
// Must be one of the NATIVE_WINDOW_SCALING_MODE_XXX value defined in
|
|
// system/window.h.
|
|
int32_t scaling_mode;
|
|
|
|
// Must be one of the ANATIVEWINDOW_TRANSFORM_XXX value defined in
|
|
// android/native_window.h
|
|
int32_t transform;
|
|
|
|
// The index of the frame.
|
|
int64_t index;
|
|
|
|
// Size of additional metadata requested by user.
|
|
uint64_t user_metadata_size;
|
|
|
|
// Raw memory address of the additional user defined metadata. Only valid when
|
|
// user_metadata_size is non-zero.
|
|
uint64_t user_metadata_ptr;
|
|
|
|
// Only applicable for metadata retrieved from GainAsync. This indicates which
|
|
// consumer has pending fence that producer should epoll on.
|
|
uint32_t release_fence_mask;
|
|
|
|
// Reserved bytes for so that the struct is forward compatible and padding to
|
|
// 104 bytes so the size is a multiple of 8.
|
|
int32_t reserved[9];
|
|
};
|
|
|
|
#ifdef __cplusplus
|
|
// Warning: DvrNativeBufferMetadata is part of the DVR API and changing its size
|
|
// will cause compatiblity issues between different DVR API releases.
|
|
static_assert(sizeof(DvrNativeBufferMetadata) == 104,
|
|
"Unexpected size for DvrNativeBufferMetadata");
|
|
#endif
|
|
|
|
struct DvrApi_v1 {
|
|
// Defines an API entry for V1 (no version suffix).
|
|
#define DVR_V1_API_ENTRY(name) Dvr##name##Ptr name
|
|
#define DVR_V1_API_ENTRY_DEPRECATED(name) Dvr##name##Ptr name
|
|
|
|
#include "dvr_api_entries.h"
|
|
|
|
// Undefine macro definitions to play nice with Google3 style rules.
|
|
#undef DVR_V1_API_ENTRY
|
|
#undef DVR_V1_API_ENTRY_DEPRECATED
|
|
};
|
|
|
|
int dvrGetApi(void* api, size_t struct_size, int version);
|
|
|
|
#ifdef __cplusplus
|
|
} // extern "C"
|
|
#endif
|
|
|
|
#endif // ANDROID_DVR_API_H_
|