1 #ifndef ANDROID_DVR_BUFFER_H_ 2 #define ANDROID_DVR_BUFFER_H_ 3 4 #include <stdbool.h> 5 #include <stdint.h> 6 #include <sys/cdefs.h> 7 #include <memory> 8 9 __BEGIN_DECLS 10 11 typedef struct DvrWriteBuffer DvrWriteBuffer; 12 typedef struct DvrReadBuffer DvrReadBuffer; 13 typedef struct DvrBuffer DvrBuffer; 14 typedef struct AHardwareBuffer AHardwareBuffer; 15 struct native_handle; 16 17 // Creates an empty write buffer that may be filled with an acutal buffer by 18 // other functions. 19 void dvrWriteBufferCreateEmpty(DvrWriteBuffer** write_buffer); 20 21 // Destroys the write buffer. 22 void dvrWriteBufferDestroy(DvrWriteBuffer* write_buffer); 23 24 // Returns 1 if the given write buffer object contains a buffer, 0 otherwise. 25 int dvrWriteBufferIsValid(DvrWriteBuffer* write_buffer); 26 27 // Clears the contents of the buffer object. After a call to this function 28 // dvrWriteBufferIsValid on the same buffer object returns 0. 29 int dvrWriteBufferClear(DvrWriteBuffer* write_buffer); 30 31 // Returns the global BufferHub id of this buffer. 32 int dvrWriteBufferGetId(DvrWriteBuffer* write_buffer); 33 34 // Returns an AHardwareBuffer for the underlying buffer. 35 // Caller must call AHardwareBuffer_release on hardware_buffer. 36 int dvrWriteBufferGetAHardwareBuffer(DvrWriteBuffer* write_buffer, 37 AHardwareBuffer** hardware_buffer); 38 39 // Posts the buffer, notifying any connected read buffers. Takes ownership of 40 // |ready_fence_fd|. 41 int dvrWriteBufferPost(DvrWriteBuffer* write_buffer, int ready_fence_fd, 42 const void* meta, size_t meta_size_bytes); 43 44 // Gains a buffer that has been released by all connected read buffers. 45 int dvrWriteBufferGain(DvrWriteBuffer* write_buffer, int* release_fence_fd); 46 int dvrWriteBufferGainAsync(DvrWriteBuffer* write_buffer); 47 48 // TODO(eieio): Switch to return int and take an out parameter for the native 49 // handle. 50 const struct native_handle* dvrWriteBufferGetNativeHandle( 51 DvrWriteBuffer* write_buffer); 52 53 // Creates an empty read buffer that may be filled with and actual buffer by 54 // other functions. 55 void dvrReadBufferCreateEmpty(DvrReadBuffer** read_buffer); 56 57 // Destroys the read buffer. 58 void dvrReadBufferDestroy(DvrReadBuffer* read_buffer); 59 60 // Returns 1 if the given write buffer object contains a buffer, 0 otherwise. 61 int dvrReadBufferIsValid(DvrReadBuffer* read_buffer); 62 63 // Clears the contents of the buffer object. After a call to this function 64 // dvrReadBufferIsValid on the same buffer object returns 0. 65 int dvrReadBufferClear(DvrReadBuffer* read_buffer); 66 67 // Returns the global BufferHub id of this buffer. 68 int dvrReadBufferGetId(DvrReadBuffer* read_buffer); 69 70 // Returns an AHardwareBuffer for the underlying buffer. 71 // Caller must call AHardwareBuffer_release on hardware_buffer. 72 int dvrReadBufferGetAHardwareBuffer(DvrReadBuffer* read_buffer, 73 AHardwareBuffer** hardware_buffer); 74 75 // Acquires the read buffer after it has been posted by the write buffer it is 76 // connected to. 77 int dvrReadBufferAcquire(DvrReadBuffer* read_buffer, int* ready_fence_fd, 78 void* meta, size_t meta_size_bytes); 79 80 // Releases the read buffer, notifying the write buffer it is connected to. 81 // Takes ownership of |release_fence_fd|. 82 int dvrReadBufferRelease(DvrReadBuffer* read_buffer, int release_fence_fd); 83 int dvrReadBufferReleaseAsync(DvrReadBuffer* read_buffer); 84 85 // TODO(eieio): Switch to return int and take an out parameter for the native 86 // handle. 87 const struct native_handle* dvrReadBufferGetNativeHandle( 88 DvrReadBuffer* read_buffer); 89 90 // Destroys the buffer. 91 void dvrBufferDestroy(DvrBuffer* buffer); 92 93 // Gets an AHardwareBuffer from the buffer. 94 // Caller must call AHardwareBuffer_release on hardware_buffer. 95 int dvrBufferGetAHardwareBuffer(DvrBuffer* buffer, 96 AHardwareBuffer** hardware_buffer); 97 98 // TODO(eieio): Switch to return int and take an out parameter for the native 99 // handle. 100 const struct native_handle* dvrBufferGetNativeHandle(DvrBuffer* buffer); 101 102 __END_DECLS 103 104 #endif // ANDROID_DVR_BUFFER_H_ 105