1 #ifndef ANDROID_DVR_BUFFER_QUEUE_H_ 2 #define ANDROID_DVR_BUFFER_QUEUE_H_ 3 4 #include <sys/cdefs.h> 5 6 #include <dvr/dvr_buffer.h> 7 8 __BEGIN_DECLS 9 10 typedef struct ANativeWindow ANativeWindow; 11 12 typedef struct DvrWriteBufferQueue DvrWriteBufferQueue; 13 typedef struct DvrReadBufferQueue DvrReadBufferQueue; 14 15 // WriteBufferQueue 16 void dvrWriteBufferQueueDestroy(DvrWriteBufferQueue* write_queue); 17 ssize_t dvrWriteBufferQueueGetCapacity(DvrWriteBufferQueue* write_queue); 18 int dvrWriteBufferQueueGetId(DvrWriteBufferQueue* write_queue); 19 20 // Returns ANativeWindow. Can be casted to a Java Surface using 21 // ANativeWindow_toSurface NDK API. Note that this method does not acquire an 22 // additional reference to the ANativeWindow returned, don't call 23 // ANativeWindow_release on it. 24 int dvrWriteBufferQueueGetExternalSurface(DvrWriteBufferQueue* write_queue, 25 ANativeWindow** out_window); 26 27 int dvrWriteBufferQueueCreateReadQueue(DvrWriteBufferQueue* write_queue, 28 DvrReadBufferQueue** out_read_queue); 29 int dvrWriteBufferQueueDequeue(DvrWriteBufferQueue* write_queue, int timeout, 30 DvrWriteBuffer* out_buffer, int* out_fence_fd); 31 32 // ReadeBufferQueue 33 void dvrReadBufferQueueDestroy(DvrReadBufferQueue* read_queue); 34 ssize_t dvrReadBufferQueueGetCapacity(DvrReadBufferQueue* read_queue); 35 int dvrReadBufferQueueGetId(DvrReadBufferQueue* read_queue); 36 int dvrReadBufferQueueCreateReadQueue(DvrReadBufferQueue* read_queue, 37 DvrReadBufferQueue** out_read_queue); 38 int dvrReadBufferQueueDequeue(DvrReadBufferQueue* read_queue, int timeout, 39 DvrReadBuffer* out_buffer, int* out_fence_fd, 40 void* out_meta, size_t meta_size_bytes); 41 42 __END_DECLS 43 44 #endif // ANDROID_DVR_BUFFER_QUEUE_H_ 45