buffer_hub_queue_producer.h revision 1601bcfa9cdc07cea8f5980349608e1526690db5
1#ifndef ANDROID_DVR_BUFFER_HUB_QUEUE_PRODUCER_H_
2#define ANDROID_DVR_BUFFER_HUB_QUEUE_PRODUCER_H_
3
4#include <private/dvr/buffer_hub_queue_core.h>
5
6#include <gui/IGraphicBufferProducer.h>
7
8namespace android {
9namespace dvr {
10
11class BufferHubQueueProducer : public IGraphicBufferProducer {
12 public:
13  BufferHubQueueProducer(const std::shared_ptr<BufferHubQueueCore>& core);
14
15  // See |IGraphicBufferProducer::requestBuffer|
16  status_t requestBuffer(int slot, sp<GraphicBuffer>* buf) override;
17
18  // For the BufferHub based implementation. All buffers in the queue are
19  // allowed to be dequeued from the consumer side. It call always returns
20  // 0 for |NATIVE_WINDOW_MIN_UNDEQUEUED_BUFFERS| query. Thus setting
21  // |max_dequeued_buffers| here can be considered the same as setting queue
22  // capacity.
23  //
24  // See |IGraphicBufferProducer::setMaxDequeuedBufferCount| for more info
25  status_t setMaxDequeuedBufferCount(int max_dequeued_buffers) override;
26
27  // See |IGraphicBufferProducer::setAsyncMode|
28  status_t setAsyncMode(bool async) override;
29
30  // See |IGraphicBufferProducer::dequeueBuffer|
31  status_t dequeueBuffer(int* out_slot, sp<Fence>* out_fence, uint32_t width,
32                         uint32_t height, PixelFormat format,
33                         uint32_t usage,
34                         FrameEventHistoryDelta* outTimestamps) override;
35
36  // See |IGraphicBufferProducer::detachBuffer|
37  status_t detachBuffer(int slot) override;
38
39  // See |IGraphicBufferProducer::detachNextBuffer|
40  status_t detachNextBuffer(sp<GraphicBuffer>* out_buffer,
41                            sp<Fence>* out_fence) override;
42
43  // See |IGraphicBufferProducer::attachBuffer|
44  status_t attachBuffer(int* out_slot, const sp<GraphicBuffer>& buffer) override;
45
46  // See |IGraphicBufferProducer::queueBuffer|
47  status_t queueBuffer(int slot, const QueueBufferInput& input,
48                       QueueBufferOutput* output) override;
49
50  // See |IGraphicBufferProducer::cancelBuffer|
51  status_t cancelBuffer(int slot, const sp<Fence>& fence) override;
52
53  // See |IGraphicBufferProducer::query|
54  status_t query(int what, int* out_value) override;
55
56  // See |IGraphicBufferProducer::connect|
57  status_t connect(const sp<IProducerListener>& listener, int api,
58                   bool producer_controlled_by_app,
59                   QueueBufferOutput* output) override;
60
61  // See |IGraphicBufferProducer::disconnect|
62  status_t disconnect(int api, DisconnectMode mode = DisconnectMode::Api) override;
63
64  // See |IGraphicBufferProducer::setSidebandStream|
65  status_t setSidebandStream(const sp<NativeHandle>& stream) override;
66
67  // See |IGraphicBufferProducer::allocateBuffers|
68  void allocateBuffers(uint32_t width, uint32_t height, PixelFormat format,
69                       uint32_t usage) override;
70
71  // See |IGraphicBufferProducer::allowAllocation|
72  status_t allowAllocation(bool allow) override;
73
74  // See |IGraphicBufferProducer::setGenerationNumber|
75  status_t setGenerationNumber(uint32_t generation_number) override;
76
77  // See |IGraphicBufferProducer::getConsumerName|
78  String8 getConsumerName() const override;
79
80  // See |IGraphicBufferProducer::setSharedBufferMode|
81  status_t setSharedBufferMode(bool shared_buffer_mode) override;
82
83  // See |IGraphicBufferProducer::setAutoRefresh|
84  status_t setAutoRefresh(bool auto_refresh) override;
85
86  // See |IGraphicBufferProducer::setDequeueTimeout|
87  status_t setDequeueTimeout(nsecs_t timeout) override;
88
89  // See |IGraphicBufferProducer::getLastQueuedBuffer|
90  status_t getLastQueuedBuffer(sp<GraphicBuffer>* out_buffer,
91                               sp<Fence>* out_fence,
92                               float out_transform_matrix[16]) override;
93
94  // See |IGraphicBufferProducer::getFrameTimestamps|
95  void getFrameTimestamps(FrameEventHistoryDelta* /*outDelta*/) override;
96
97  // See |IGraphicBufferProducer::getUniqueId|
98  status_t getUniqueId(uint64_t* out_id) const override;
99
100 protected:
101  IBinder* onAsBinder() override;
102
103 private:
104  using LocalHandle = pdx::LocalHandle;
105
106  // |core_| holds the actually buffer slots.
107  std::shared_ptr<BufferHubQueueCore> core_;
108
109  // |max_buffer_count_| sets the capacity of the underlying buffer queue.
110  int32_t max_buffer_count_{BufferHubQueue::kMaxQueueCapacity};
111
112  // |max_dequeued_buffer_count_| set the maximum number of buffers that can
113  // be dequeued at the same momment.
114  int32_t max_dequeued_buffer_count_{1};
115};
116
117}  // namespace dvr
118}  // namespace android
119
120#endif  // ANDROID_DVR_BUFFER_HUB_QUEUE_PRODUCER_H_
121