• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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