1bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai#ifndef ANDROID_DVR_API_H_
2bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai#define ANDROID_DVR_API_H_
3bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai
4bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai#include <stdbool.h>
5bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai#include <stddef.h>
6bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai#include <stdint.h>
72251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka#include <sys/cdefs.h>
82251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka#include <unistd.h>
9bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai
1037cdc8d0b9803e0c3dc17640534b74cd45fa4bd8Daniel Nicoara#include <dvr/dvr_hardware_composer_defs.h>
112d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai
122251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka__BEGIN_DECLS
13bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai
14960bcfffefa76d535c5aecd303d755be3fbc59f1Jiwen 'Steve' Caitypedef struct ANativeWindow ANativeWindow;
15960bcfffefa76d535c5aecd303d755be3fbc59f1Jiwen 'Steve' Cai
16bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Caitypedef struct DvrPoseAsync DvrPoseAsync;
17bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai
182251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef uint64_t DvrSurfaceUpdateFlags;
192251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef struct DvrDisplayManager DvrDisplayManager;
202251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef struct DvrSurfaceState DvrSurfaceState;
21bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Caitypedef struct DvrPose DvrPose;
222251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef struct DvrVSyncClient DvrVSyncClient;
23bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Caitypedef struct DvrVirtualTouchpad DvrVirtualTouchpad;
24bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai
252251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef struct DvrBuffer DvrBuffer;
26bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Caitypedef struct DvrWriteBuffer DvrWriteBuffer;
27bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Caitypedef struct DvrReadBuffer DvrReadBuffer;
28bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Caitypedef struct AHardwareBuffer AHardwareBuffer;
29bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai
302d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Caitypedef struct DvrReadBufferQueue DvrReadBufferQueue;
312251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef struct DvrWriteBufferQueue DvrWriteBufferQueue;
322d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai
3374cf084cab653537e89f46b90344b3133a94b3a3Jiwen 'Steve' Caitypedef struct DvrSurface DvrSurface;
342251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef uint64_t DvrSurfaceAttributeType;
352251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef int32_t DvrSurfaceAttributeKey;
362251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka
372251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef struct DvrSurfaceAttributeValue DvrSurfaceAttributeValue;
382251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef struct DvrSurfaceAttribute DvrSurfaceAttribute;
3974cf084cab653537e89f46b90344b3133a94b3a3Jiwen 'Steve' Cai
4028b58bfdcce253358120d1554755d71c2226f8fdJohn Batesstruct native_handle;
4128b58bfdcce253358120d1554755d71c2226f8fdJohn Bates
422251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka// dvr_display_manager.h
432251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef int (*DvrDisplayManagerCreatePtr)(DvrDisplayManager** client_out);
442251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef void (*DvrDisplayManagerDestroyPtr)(DvrDisplayManager* client);
452251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef int (*DvrDisplayManagerSetupNamedBufferPtr)(DvrDisplayManager* client,
462251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka                                                    const char* name,
472251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka                                                    size_t size, uint64_t usage,
482251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka                                                    DvrBuffer** buffer_out);
492251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef int (*DvrDisplayManagerGetEventFdPtr)(DvrDisplayManager* client);
502251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef int (*DvrDisplayManagerTranslateEpollEventMaskPtr)(
512251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka    DvrDisplayManager* client, int in_events, int* out_events);
522251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef int (*DvrDisplayManagerGetSurfaceStatePtr)(
532251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka    DvrDisplayManager* client, DvrSurfaceState* surface_state);
542251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef int (*DvrDisplayManagerGetReadBufferQueuePtr)(
552251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka    DvrDisplayManager* client, int surface_id, int queue_id,
562251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka    DvrReadBufferQueue** queue_out);
572251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef int (*DvrSurfaceStateCreatePtr)(DvrSurfaceState** surface_state);
582251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef void (*DvrSurfaceStateDestroyPtr)(DvrSurfaceState* surface_state);
592251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef int (*DvrSurfaceStateGetSurfaceCountPtr)(DvrSurfaceState* surface_state,
602251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka                                                 size_t* count_out);
612251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef int (*DvrSurfaceStateGetUpdateFlagsPtr)(
622251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka    DvrSurfaceState* surface_state, size_t surface_index,
632251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka    DvrSurfaceUpdateFlags* flags_out);
642251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef int (*DvrSurfaceStateGetSurfaceIdPtr)(DvrSurfaceState* surface_state,
652251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka                                              size_t surface_index,
662251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka                                              int* surface_id_out);
672251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef int (*DvrSurfaceStateGetProcessIdPtr)(DvrSurfaceState* surface_state,
682251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka                                              size_t surface_index,
692251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka                                              int* process_id_out);
702251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef int (*DvrSurfaceStateGetQueueCountPtr)(DvrSurfaceState* surface_state,
712251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka                                               size_t surface_index,
722251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka                                               size_t* count_out);
732251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef ssize_t (*DvrSurfaceStateGetQueueIdsPtr)(DvrSurfaceState* surface_state,
742251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka                                                 size_t surface_index,
752251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka                                                 int* queue_ids,
762251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka                                                 size_t max_count);
772251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef int (*DvrSurfaceStateGetZOrderPtr)(DvrSurfaceState* surface_state,
782251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka                                           size_t surface_index,
792251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka                                           int* z_order_out);
802251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef int (*DvrSurfaceStateGetVisiblePtr)(DvrSurfaceState* surface_state,
812251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka                                            size_t surface_index,
822251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka                                            bool* visible_out);
832251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef int (*DvrSurfaceStateGetAttributeCountPtr)(
842251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka    DvrSurfaceState* surface_state, size_t surface_index, size_t* count_out);
852251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef ssize_t (*DvrSurfaceStateGetAttributesPtr)(
862251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka    DvrSurfaceState* surface_state, size_t surface_index,
872251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka    DvrSurfaceAttribute* attributes, size_t max_attribute_count);
88bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai
89bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai// dvr_buffer.h
902251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef void (*DvrWriteBufferCreateEmptyPtr)(DvrWriteBuffer** write_buffer_out);
912251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef void (*DvrWriteBufferDestroyPtr)(DvrWriteBuffer* write_buffer);
922251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef int (*DvrWriteBufferIsValidPtr)(DvrWriteBuffer* write_buffer);
932251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef int (*DvrWriteBufferClearPtr)(DvrWriteBuffer* write_buffer);
942251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef int (*DvrWriteBufferGetIdPtr)(DvrWriteBuffer* write_buffer);
95bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Caitypedef int (*DvrWriteBufferGetAHardwareBufferPtr)(
962251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka    DvrWriteBuffer* write_buffer, AHardwareBuffer** hardware_buffer);
972251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef int (*DvrWriteBufferPostPtr)(DvrWriteBuffer* write_buffer,
982251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka                                     int ready_fence_fd, const void* meta,
992251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka                                     size_t meta_size_bytes);
1002251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef int (*DvrWriteBufferGainPtr)(DvrWriteBuffer* write_buffer,
101bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai                                     int* release_fence_fd);
1022251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef int (*DvrWriteBufferGainAsyncPtr)(DvrWriteBuffer* write_buffer);
1032251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef const struct native_handle* (*DvrWriteBufferGetNativeHandlePtr)(
10428b58bfdcce253358120d1554755d71c2226f8fdJohn Bates    DvrWriteBuffer* write_buffer);
105bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai
1062251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef void (*DvrReadBufferCreateEmptyPtr)(DvrReadBuffer** read_buffer_out);
1072251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef void (*DvrReadBufferDestroyPtr)(DvrReadBuffer* read_buffer);
1082251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef int (*DvrReadBufferIsValidPtr)(DvrReadBuffer* read_buffer);
1092251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef int (*DvrReadBufferClearPtr)(DvrReadBuffer* read_buffer);
1102251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef int (*DvrReadBufferGetIdPtr)(DvrReadBuffer* read_buffer);
111bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Caitypedef int (*DvrReadBufferGetAHardwareBufferPtr)(
1122251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka    DvrReadBuffer* read_buffer, AHardwareBuffer** hardware_buffer);
1132251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef int (*DvrReadBufferAcquirePtr)(DvrReadBuffer* read_buffer,
114bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai                                       int* ready_fence_fd, void* meta,
115bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai                                       size_t meta_size_bytes);
1162251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef int (*DvrReadBufferReleasePtr)(DvrReadBuffer* read_buffer,
117bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai                                       int release_fence_fd);
1182251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef int (*DvrReadBufferReleaseAsyncPtr)(DvrReadBuffer* read_buffer);
1192251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef const struct native_handle* (*DvrReadBufferGetNativeHandlePtr)(
12028b58bfdcce253358120d1554755d71c2226f8fdJohn Bates    DvrReadBuffer* read_buffer);
12128b58bfdcce253358120d1554755d71c2226f8fdJohn Bates
1222251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef void (*DvrBufferDestroyPtr)(DvrBuffer* buffer);
1232251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef int (*DvrBufferGetAHardwareBufferPtr)(
1242251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka    DvrBuffer* buffer, AHardwareBuffer** hardware_buffer);
1252251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef const struct native_handle* (*DvrBufferGetNativeHandlePtr)(
12628b58bfdcce253358120d1554755d71c2226f8fdJohn Bates    DvrBuffer* buffer);
127bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai
1282d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai// dvr_buffer_queue.h
1292d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Caitypedef void (*DvrWriteBufferQueueDestroyPtr)(DvrWriteBufferQueue* write_queue);
1302251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef ssize_t (*DvrWriteBufferQueueGetCapacityPtr)(
1312d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai    DvrWriteBufferQueue* write_queue);
1322251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef int (*DvrWriteBufferQueueGetIdPtr)(DvrWriteBufferQueue* write_queue);
133960bcfffefa76d535c5aecd303d755be3fbc59f1Jiwen 'Steve' Caitypedef int (*DvrWriteBufferQueueGetExternalSurfacePtr)(
134960bcfffefa76d535c5aecd303d755be3fbc59f1Jiwen 'Steve' Cai    DvrWriteBufferQueue* write_queue, ANativeWindow** out_window);
1352d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Caitypedef int (*DvrWriteBufferQueueCreateReadQueuePtr)(
1362d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai    DvrWriteBufferQueue* write_queue, DvrReadBufferQueue** out_read_queue);
1372d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Caitypedef int (*DvrWriteBufferQueueDequeuePtr)(DvrWriteBufferQueue* write_queue,
1382d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai                                             int timeout,
1392251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka                                             DvrWriteBuffer* out_buffer,
1402d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai                                             int* out_fence_fd);
1412d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Caitypedef void (*DvrReadBufferQueueDestroyPtr)(DvrReadBufferQueue* read_queue);
1422251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef ssize_t (*DvrReadBufferQueueGetCapacityPtr)(
1432d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai    DvrReadBufferQueue* read_queue);
1442251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef int (*DvrReadBufferQueueGetIdPtr)(DvrReadBufferQueue* read_queue);
1452d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Caitypedef int (*DvrReadBufferQueueCreateReadQueuePtr)(
1462d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai    DvrReadBufferQueue* read_queue, DvrReadBufferQueue** out_read_queue);
1472d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Caitypedef int (*DvrReadBufferQueueDequeuePtr)(DvrReadBufferQueue* read_queue,
1482d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai                                            int timeout,
1492251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka                                            DvrReadBuffer* out_buffer,
1502d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai                                            int* out_fence_fd, void* out_meta,
1512d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai                                            size_t meta_size_bytes);
1522d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai
153bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai// dvr_surface.h
154eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaartypedef int (*DvrGetNamedBufferPtr)(const char* name, DvrBuffer** out_buffer);
1552251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef int (*DvrSurfaceCreatePtr)(const DvrSurfaceAttribute* attributes,
1562251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka                                   size_t attribute_count,
1572251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka                                   DvrSurface** surface_out);
1582251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef void (*DvrSurfaceDestroyPtr)(DvrSurface* surface);
1592251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef int (*DvrSurfaceGetIdPtr)(DvrSurface* surface);
1602251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef int (*DvrSurfaceSetAttributesPtr)(DvrSurface* surface,
1612251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka                                          const DvrSurfaceAttribute* attributes,
1622251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka                                          size_t attribute_count);
1632251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef int (*DvrSurfaceCreateWriteBufferQueuePtr)(
1642251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka    DvrSurface* surface, uint32_t width, uint32_t height, uint32_t format,
165108e84f7e6a9117b66dba000dcf16c6d8c862e16Hendrik Wagenaar    uint32_t layer_count, uint64_t usage, size_t capacity,
166108e84f7e6a9117b66dba000dcf16c6d8c862e16Hendrik Wagenaar    DvrWriteBufferQueue** queue_out);
167bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai
168bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai// vsync_client_api.h
1692251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef int (*DvrVSyncClientCreatePtr)(DvrVSyncClient** client_out);
1702251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef void (*DvrVSyncClientDestroyPtr)(DvrVSyncClient* client);
1712251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef int (*DvrVSyncClientGetSchedInfoPtr)(DvrVSyncClient* client,
17284d90f316c01aadd1e6e0acbc94d51be24ec211fHendrik Wagenaar                                             int64_t* vsync_period_ns,
17384d90f316c01aadd1e6e0acbc94d51be24ec211fHendrik Wagenaar                                             int64_t* next_timestamp_ns,
17484d90f316c01aadd1e6e0acbc94d51be24ec211fHendrik Wagenaar                                             uint32_t* next_vsync_count);
175bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai
176bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai// pose_client.h
1772251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef DvrPose* (*DvrPoseCreatePtr)(void);
1782251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef void (*DvrPoseDestroyPtr)(DvrPose* client);
17984d90f316c01aadd1e6e0acbc94d51be24ec211fHendrik Wagenaartypedef int (*DvrPoseGetPtr)(DvrPose* client, uint32_t vsync_count,
18084d90f316c01aadd1e6e0acbc94d51be24ec211fHendrik Wagenaar                             DvrPoseAsync* out_pose);
18184d90f316c01aadd1e6e0acbc94d51be24ec211fHendrik Wagenaartypedef uint32_t (*DvrPoseGetVsyncCountPtr)(DvrPose* client);
18284d90f316c01aadd1e6e0acbc94d51be24ec211fHendrik Wagenaartypedef int (*DvrPoseGetControllerPtr)(DvrPose* client, int32_t controller_id,
18384d90f316c01aadd1e6e0acbc94d51be24ec211fHendrik Wagenaar                                       uint32_t vsync_count,
18484d90f316c01aadd1e6e0acbc94d51be24ec211fHendrik Wagenaar                                       DvrPoseAsync* out_pose);
185bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai
186bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai// virtual_touchpad_client.h
18784d90f316c01aadd1e6e0acbc94d51be24ec211fHendrik Wagenaartypedef DvrVirtualTouchpad* (*DvrVirtualTouchpadCreatePtr)(void);
18884d90f316c01aadd1e6e0acbc94d51be24ec211fHendrik Wagenaartypedef void (*DvrVirtualTouchpadDestroyPtr)(DvrVirtualTouchpad* client);
18984d90f316c01aadd1e6e0acbc94d51be24ec211fHendrik Wagenaartypedef int (*DvrVirtualTouchpadAttachPtr)(DvrVirtualTouchpad* client);
19084d90f316c01aadd1e6e0acbc94d51be24ec211fHendrik Wagenaartypedef int (*DvrVirtualTouchpadDetachPtr)(DvrVirtualTouchpad* client);
19184d90f316c01aadd1e6e0acbc94d51be24ec211fHendrik Wagenaartypedef int (*DvrVirtualTouchpadTouchPtr)(DvrVirtualTouchpad* client,
19284d90f316c01aadd1e6e0acbc94d51be24ec211fHendrik Wagenaar                                          int touchpad, float x, float y,
19384d90f316c01aadd1e6e0acbc94d51be24ec211fHendrik Wagenaar                                          float pressure);
19484d90f316c01aadd1e6e0acbc94d51be24ec211fHendrik Wagenaartypedef int (*DvrVirtualTouchpadButtonStatePtr)(DvrVirtualTouchpad* client,
19584d90f316c01aadd1e6e0acbc94d51be24ec211fHendrik Wagenaar                                                int touchpad, int buttons);
196bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai
19737cdc8d0b9803e0c3dc17640534b74cd45fa4bd8Daniel Nicoara// dvr_hardware_composer_client.h
19837cdc8d0b9803e0c3dc17640534b74cd45fa4bd8Daniel Nicoaratypedef struct DvrHwcClient DvrHwcClient;
19937cdc8d0b9803e0c3dc17640534b74cd45fa4bd8Daniel Nicoaratypedef struct DvrHwcFrame DvrHwcFrame;
200eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaartypedef int (*DvrHwcOnFrameCallback)(void* client_state, DvrHwcFrame* frame);
20137cdc8d0b9803e0c3dc17640534b74cd45fa4bd8Daniel Nicoaratypedef DvrHwcClient* (*DvrHwcClientCreatePtr)(DvrHwcOnFrameCallback callback,
20237cdc8d0b9803e0c3dc17640534b74cd45fa4bd8Daniel Nicoara                                               void* client_state);
20337cdc8d0b9803e0c3dc17640534b74cd45fa4bd8Daniel Nicoaratypedef void (*DvrHwcClientDestroyPtr)(DvrHwcClient* client);
20437cdc8d0b9803e0c3dc17640534b74cd45fa4bd8Daniel Nicoaratypedef void (*DvrHwcFrameDestroyPtr)(DvrHwcFrame* frame);
205736b6058d8c91ec4ad295c0a04c7b81d8119268cDaniel Nicoaratypedef DvrHwcDisplay (*DvrHwcFrameGetDisplayIdPtr)(DvrHwcFrame* frame);
20637cdc8d0b9803e0c3dc17640534b74cd45fa4bd8Daniel Nicoaratypedef int32_t (*DvrHwcFrameGetDisplayWidthPtr)(DvrHwcFrame* frame);
20737cdc8d0b9803e0c3dc17640534b74cd45fa4bd8Daniel Nicoaratypedef int32_t (*DvrHwcFrameGetDisplayHeightPtr)(DvrHwcFrame* frame);
20837cdc8d0b9803e0c3dc17640534b74cd45fa4bd8Daniel Nicoaratypedef bool (*DvrHwcFrameGetDisplayRemovedPtr)(DvrHwcFrame* frame);
20937cdc8d0b9803e0c3dc17640534b74cd45fa4bd8Daniel Nicoaratypedef size_t (*DvrHwcFrameGetLayerCountPtr)(DvrHwcFrame* frame);
210736b6058d8c91ec4ad295c0a04c7b81d8119268cDaniel Nicoaratypedef DvrHwcLayer (*DvrHwcFrameGetLayerIdPtr)(DvrHwcFrame* frame,
211736b6058d8c91ec4ad295c0a04c7b81d8119268cDaniel Nicoara                                                size_t layer_index);
212730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulktypedef uint32_t (*DvrHwcFrameGetActiveConfigPtr)(DvrHwcFrame* frame);
213730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulktypedef uint32_t (*DvrHwcFrameGetColorModePtr)(DvrHwcFrame* frame);
214730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulktypedef void (*DvrHwcFrameGetColorTransformPtr)(DvrHwcFrame* frame,
215730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk                                                float* out_matrix,
216730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk                                                int32_t* out_hint);
217730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulktypedef uint32_t (*DvrHwcFrameGetPowerModePtr)(DvrHwcFrame* frame);
218730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulktypedef uint32_t (*DvrHwcFrameGetVsyncEnabledPtr)(DvrHwcFrame* frame);
21937cdc8d0b9803e0c3dc17640534b74cd45fa4bd8Daniel Nicoaratypedef AHardwareBuffer* (*DvrHwcFrameGetLayerBufferPtr)(DvrHwcFrame* frame,
22037cdc8d0b9803e0c3dc17640534b74cd45fa4bd8Daniel Nicoara                                                         size_t layer_index);
22137cdc8d0b9803e0c3dc17640534b74cd45fa4bd8Daniel Nicoaratypedef int (*DvrHwcFrameGetLayerFencePtr)(DvrHwcFrame* frame,
22237cdc8d0b9803e0c3dc17640534b74cd45fa4bd8Daniel Nicoara                                           size_t layer_index);
223736b6058d8c91ec4ad295c0a04c7b81d8119268cDaniel Nicoaratypedef DvrHwcRecti (*DvrHwcFrameGetLayerDisplayFramePtr)(DvrHwcFrame* frame,
224736b6058d8c91ec4ad295c0a04c7b81d8119268cDaniel Nicoara                                                          size_t layer_index);
225736b6058d8c91ec4ad295c0a04c7b81d8119268cDaniel Nicoaratypedef DvrHwcRectf (*DvrHwcFrameGetLayerCropPtr)(DvrHwcFrame* frame,
226736b6058d8c91ec4ad295c0a04c7b81d8119268cDaniel Nicoara                                                  size_t layer_index);
227736b6058d8c91ec4ad295c0a04c7b81d8119268cDaniel Nicoaratypedef DvrHwcBlendMode (*DvrHwcFrameGetLayerBlendModePtr)(DvrHwcFrame* frame,
228736b6058d8c91ec4ad295c0a04c7b81d8119268cDaniel Nicoara                                                           size_t layer_index);
22937cdc8d0b9803e0c3dc17640534b74cd45fa4bd8Daniel Nicoaratypedef float (*DvrHwcFrameGetLayerAlphaPtr)(DvrHwcFrame* frame,
23037cdc8d0b9803e0c3dc17640534b74cd45fa4bd8Daniel Nicoara                                             size_t layer_index);
23137cdc8d0b9803e0c3dc17640534b74cd45fa4bd8Daniel Nicoaratypedef uint32_t (*DvrHwcFrameGetLayerTypePtr)(DvrHwcFrame* frame,
23237cdc8d0b9803e0c3dc17640534b74cd45fa4bd8Daniel Nicoara                                               size_t layer_index);
23337cdc8d0b9803e0c3dc17640534b74cd45fa4bd8Daniel Nicoaratypedef uint32_t (*DvrHwcFrameGetLayerApplicationIdPtr)(DvrHwcFrame* frame,
23437cdc8d0b9803e0c3dc17640534b74cd45fa4bd8Daniel Nicoara                                                        size_t layer_index);
235730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulktypedef uint32_t (*DvrHwcFrameGetLayerZOrderPtr)(DvrHwcFrame* frame,
236730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk                                                 size_t layer_index);
237730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk
238730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulktypedef void (*DvrHwcFrameGetLayerCursorPtr)(DvrHwcFrame* frame,
239730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk                                             size_t layer_index, int32_t* out_x,
240730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk                                             int32_t* out_y);
241730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk
242730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulktypedef uint32_t (*DvrHwcFrameGetLayerTransformPtr)(DvrHwcFrame* frame,
243730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk                                                    size_t layer_index);
244730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk
245730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulktypedef uint32_t (*DvrHwcFrameGetLayerDataspacePtr)(DvrHwcFrame* frame,
246730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk                                                    size_t layer_index);
247730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk
248730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulktypedef uint32_t (*DvrHwcFrameGetLayerColorPtr)(DvrHwcFrame* frame,
249730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk                                                size_t layer_index);
250730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk
251730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulktypedef uint32_t (*DvrHwcFrameGetLayerNumVisibleRegionsPtr)(DvrHwcFrame* frame,
252730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk                                                            size_t layer_index);
253730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulktypedef DvrHwcRecti (*DvrHwcFrameGetLayerVisibleRegionPtr)(DvrHwcFrame* frame,
254730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk                                                           size_t layer_index,
255730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk                                                           size_t index);
256730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk
257730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulktypedef uint32_t (*DvrHwcFrameGetLayerNumDamagedRegionsPtr)(DvrHwcFrame* frame,
258730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk                                                            size_t layer_index);
259730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulktypedef DvrHwcRecti (*DvrHwcFrameGetLayerDamagedRegionPtr)(DvrHwcFrame* frame,
260730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk                                                           size_t layer_index,
261730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk                                                           size_t index);
26237cdc8d0b9803e0c3dc17640534b74cd45fa4bd8Daniel Nicoara
263cb4751c52a5625a22b6a11b4de537ff026d9bfe3Jiwen 'Steve' Cai// The buffer metadata that an Android Surface (a.k.a. ANativeWindow)
264cb4751c52a5625a22b6a11b4de537ff026d9bfe3Jiwen 'Steve' Cai// will populate. A DvrWriteBufferQueue must be created with this metadata iff
26564177e82296a330bdd3c131a020aaffea4905df0Jiwen 'Steve' Cai// ANativeWindow access is needed. Please do not remove, modify, or reorder
26664177e82296a330bdd3c131a020aaffea4905df0Jiwen 'Steve' Cai// existing data members. If new fields need to be added, please take extra care
26764177e82296a330bdd3c131a020aaffea4905df0Jiwen 'Steve' Cai// to make sure that new data field is padded properly the size of the struct
26864177e82296a330bdd3c131a020aaffea4905df0Jiwen 'Steve' Cai// stays same.
269cb4751c52a5625a22b6a11b4de537ff026d9bfe3Jiwen 'Steve' Caistruct DvrNativeBufferMetadata {
270cb4751c52a5625a22b6a11b4de537ff026d9bfe3Jiwen 'Steve' Cai  // Timestamp of the frame.
271cb4751c52a5625a22b6a11b4de537ff026d9bfe3Jiwen 'Steve' Cai  int64_t timestamp;
272cb4751c52a5625a22b6a11b4de537ff026d9bfe3Jiwen 'Steve' Cai
273cb4751c52a5625a22b6a11b4de537ff026d9bfe3Jiwen 'Steve' Cai  // Whether the buffer is using auto timestamp.
274cb4751c52a5625a22b6a11b4de537ff026d9bfe3Jiwen 'Steve' Cai  int32_t is_auto_timestamp;
275cb4751c52a5625a22b6a11b4de537ff026d9bfe3Jiwen 'Steve' Cai
276cb4751c52a5625a22b6a11b4de537ff026d9bfe3Jiwen 'Steve' Cai  // Must be one of the HAL_DATASPACE_XXX value defined in system/graphics.h
277cb4751c52a5625a22b6a11b4de537ff026d9bfe3Jiwen 'Steve' Cai  int32_t dataspace;
278cb4751c52a5625a22b6a11b4de537ff026d9bfe3Jiwen 'Steve' Cai
279cb4751c52a5625a22b6a11b4de537ff026d9bfe3Jiwen 'Steve' Cai  // Crop extracted from an ACrop or android::Crop object.
280cb4751c52a5625a22b6a11b4de537ff026d9bfe3Jiwen 'Steve' Cai  int32_t crop_left;
281cb4751c52a5625a22b6a11b4de537ff026d9bfe3Jiwen 'Steve' Cai  int32_t crop_top;
282cb4751c52a5625a22b6a11b4de537ff026d9bfe3Jiwen 'Steve' Cai  int32_t crop_right;
283cb4751c52a5625a22b6a11b4de537ff026d9bfe3Jiwen 'Steve' Cai  int32_t crop_bottom;
284cb4751c52a5625a22b6a11b4de537ff026d9bfe3Jiwen 'Steve' Cai
285cb4751c52a5625a22b6a11b4de537ff026d9bfe3Jiwen 'Steve' Cai  // Must be one of the NATIVE_WINDOW_SCALING_MODE_XXX value defined in
286cb4751c52a5625a22b6a11b4de537ff026d9bfe3Jiwen 'Steve' Cai  // system/window.h.
287cb4751c52a5625a22b6a11b4de537ff026d9bfe3Jiwen 'Steve' Cai  int32_t scaling_mode;
288cb4751c52a5625a22b6a11b4de537ff026d9bfe3Jiwen 'Steve' Cai
289cb4751c52a5625a22b6a11b4de537ff026d9bfe3Jiwen 'Steve' Cai  // Must be one of the ANATIVEWINDOW_TRANSFORM_XXX value defined in
290cb4751c52a5625a22b6a11b4de537ff026d9bfe3Jiwen 'Steve' Cai  // android/native_window.h
291cb4751c52a5625a22b6a11b4de537ff026d9bfe3Jiwen 'Steve' Cai  int32_t transform;
292cb4751c52a5625a22b6a11b4de537ff026d9bfe3Jiwen 'Steve' Cai
293cb4751c52a5625a22b6a11b4de537ff026d9bfe3Jiwen 'Steve' Cai  // Reserved bytes for so that the struct is forward compatible.
294cb4751c52a5625a22b6a11b4de537ff026d9bfe3Jiwen 'Steve' Cai  int32_t reserved[16];
295cb4751c52a5625a22b6a11b4de537ff026d9bfe3Jiwen 'Steve' Cai};
296cb4751c52a5625a22b6a11b4de537ff026d9bfe3Jiwen 'Steve' Cai
297bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Caistruct DvrApi_v1 {
2982251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka// Defines an API entry for V1 (no version suffix).
2992251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka#define DVR_V1_API_ENTRY(name) Dvr##name##Ptr name
3002251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka
3012251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka// Include file with API entries.
3022251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka#include "dvr_api_entries.h"
3032251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka
3042251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka// Undefine macro definitions to play nice with Google3 style rules.
3052251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka#undef DVR_V1_API_ENTRY
306bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai};
307bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai
308bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Caiint dvrGetApi(void* api, size_t struct_size, int version);
309bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai
3102251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka__END_DECLS
311bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai
312bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai#endif  // ANDROID_DVR_API_H_
313