1 #ifndef ANDROID_DVR_INTERNAL_H_
2 #define ANDROID_DVR_INTERNAL_H_
3 
4 #include <sys/cdefs.h>
5 
6 #include <memory>
7 
8 extern "C" {
9 
10 typedef struct DvrBuffer DvrBuffer;
11 typedef struct DvrReadBuffer DvrReadBuffer;
12 typedef struct DvrWriteBuffer DvrWriteBuffer;
13 typedef struct DvrWriteBufferQueue DvrWriteBufferQueue;
14 typedef struct DvrReadBufferQueue DvrReadBufferQueue;
15 
16 }  // extern "C"
17 
18 namespace android {
19 namespace dvr {
20 
21 class BufferProducer;
22 class BufferConsumer;
23 class ConsumerQueue;
24 class IonBuffer;
25 class ProducerQueue;
26 
27 DvrBuffer* CreateDvrBufferFromIonBuffer(
28     const std::shared_ptr<IonBuffer>& ion_buffer);
29 
30 DvrReadBuffer* CreateDvrReadBufferFromBufferConsumer(
31     const std::shared_ptr<BufferConsumer>& buffer_consumer);
32 DvrWriteBuffer* CreateDvrWriteBufferFromBufferProducer(
33     const std::shared_ptr<BufferProducer>& buffer_producer);
34 
35 DvrReadBufferQueue* CreateDvrReadBufferQueueFromConsumerQueue(
36     const std::shared_ptr<ConsumerQueue>& consumer_queue);
37 DvrWriteBufferQueue* CreateDvrWriteBufferQueueFromProducerQueue(
38     const std::shared_ptr<ProducerQueue>& producer_queue);
39 ProducerQueue* GetProducerQueueFromDvrWriteBufferQueue(
40     DvrWriteBufferQueue* write_queue);
41 
42 }  // namespace dvr
43 }  // namespace android
44 
45 extern "C" {
46 
47 struct DvrWriteBuffer {
48   std::shared_ptr<android::dvr::BufferProducer> write_buffer;
49 };
50 
51 struct DvrReadBuffer {
52   std::shared_ptr<android::dvr::BufferConsumer> read_buffer;
53 };
54 
55 struct DvrBuffer {
56   std::shared_ptr<android::dvr::IonBuffer> buffer;
57 };
58 
59 struct DvrWriteBufferQueue {
60   std::shared_ptr<android::dvr::ProducerQueue> producer_queue;
61   ANativeWindow* native_window{nullptr};
62 };
63 
64 struct DvrReadBufferQueue {
65   std::shared_ptr<android::dvr::ConsumerQueue> consumer_queue;
66 };
67 
68 }  // extern "C"
69 
70 #endif  // ANDROID_DVR_INTERNAL_H_
71