blob: 935a7b2b8a743357ac3fb1e201844426b94f8956 [file] [log] [blame]
#ifndef ANDROID_DVR_BUFFER_H_
#define ANDROID_DVR_BUFFER_H_
#include <stdbool.h>
#include <stdint.h>
#include <sys/cdefs.h>
#include <memory>
__BEGIN_DECLS
typedef struct DvrWriteBuffer DvrWriteBuffer;
typedef struct DvrReadBuffer DvrReadBuffer;
typedef struct DvrBuffer DvrBuffer;
typedef struct AHardwareBuffer AHardwareBuffer;
struct native_handle;
// Creates an empty write buffer that may be filled with an acutal buffer by
// other functions.
void dvrWriteBufferCreateEmpty(DvrWriteBuffer** write_buffer);
// Destroys the write buffer.
void dvrWriteBufferDestroy(DvrWriteBuffer* write_buffer);
// Returns 1 if the given write buffer object contains a buffer, 0 otherwise.
int dvrWriteBufferIsValid(DvrWriteBuffer* write_buffer);
// Clears the contents of the buffer object. After a call to this function
// dvrWriteBufferIsValid on the same buffer object returns 0.
int dvrWriteBufferClear(DvrWriteBuffer* write_buffer);
// Returns the global BufferHub id of this buffer.
int dvrWriteBufferGetId(DvrWriteBuffer* write_buffer);
// Returns an AHardwareBuffer for the underlying buffer.
// Caller must call AHardwareBuffer_release on hardware_buffer.
int dvrWriteBufferGetAHardwareBuffer(DvrWriteBuffer* write_buffer,
AHardwareBuffer** hardware_buffer);
// Posts the buffer, notifying any connected read buffers. Takes ownership of
// |ready_fence_fd|.
int dvrWriteBufferPost(DvrWriteBuffer* write_buffer, int ready_fence_fd,
const void* meta, size_t meta_size_bytes);
// Gains a buffer that has been released by all connected read buffers.
int dvrWriteBufferGain(DvrWriteBuffer* write_buffer, int* release_fence_fd);
int dvrWriteBufferGainAsync(DvrWriteBuffer* write_buffer);
// TODO(eieio): Switch to return int and take an out parameter for the native
// handle.
const struct native_handle* dvrWriteBufferGetNativeHandle(
DvrWriteBuffer* write_buffer);
// Creates an empty read buffer that may be filled with and actual buffer by
// other functions.
void dvrReadBufferCreateEmpty(DvrReadBuffer** read_buffer);
// Destroys the read buffer.
void dvrReadBufferDestroy(DvrReadBuffer* read_buffer);
// Returns 1 if the given write buffer object contains a buffer, 0 otherwise.
int dvrReadBufferIsValid(DvrReadBuffer* read_buffer);
// Clears the contents of the buffer object. After a call to this function
// dvrReadBufferIsValid on the same buffer object returns 0.
int dvrReadBufferClear(DvrReadBuffer* read_buffer);
// Returns the global BufferHub id of this buffer.
int dvrReadBufferGetId(DvrReadBuffer* read_buffer);
// Returns an AHardwareBuffer for the underlying buffer.
// Caller must call AHardwareBuffer_release on hardware_buffer.
int dvrReadBufferGetAHardwareBuffer(DvrReadBuffer* read_buffer,
AHardwareBuffer** hardware_buffer);
// Acquires the read buffer after it has been posted by the write buffer it is
// connected to.
int dvrReadBufferAcquire(DvrReadBuffer* read_buffer, int* ready_fence_fd,
void* meta, size_t meta_size_bytes);
// Releases the read buffer, notifying the write buffer it is connected to.
// Takes ownership of |release_fence_fd|.
int dvrReadBufferRelease(DvrReadBuffer* read_buffer, int release_fence_fd);
int dvrReadBufferReleaseAsync(DvrReadBuffer* read_buffer);
// TODO(eieio): Switch to return int and take an out parameter for the native
// handle.
const struct native_handle* dvrReadBufferGetNativeHandle(
DvrReadBuffer* read_buffer);
// Destroys the buffer.
void dvrBufferDestroy(DvrBuffer* buffer);
// Gets an AHardwareBuffer from the buffer.
// Caller must call AHardwareBuffer_release on hardware_buffer.
int dvrBufferGetAHardwareBuffer(DvrBuffer* buffer,
AHardwareBuffer** hardware_buffer);
// Retrieve the shared buffer layout version defined in dvr_shared_buffers.h.
int dvrBufferGlobalLayoutVersionGet();
// TODO(eieio): Switch to return int and take an out parameter for the native
// handle.
const struct native_handle* dvrBufferGetNativeHandle(DvrBuffer* buffer);
__END_DECLS
#endif // ANDROID_DVR_BUFFER_H_