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