Loading libs/vr/libbufferhubqueue/buffer_hub_queue_client.cpp +18 −0 Original line number Diff line number Diff line Loading @@ -359,6 +359,10 @@ Status<void> BufferHubQueue::RemoveBuffer(size_t slot) { return ErrorStatus(-ret); } // Trigger OnBufferRemoved callback if registered. if (on_buffer_removed_) on_buffer_removed_(buffers_[slot]); buffers_[slot] = nullptr; capacity_--; } Loading @@ -369,6 +373,11 @@ Status<void> BufferHubQueue::RemoveBuffer(size_t slot) { Status<void> BufferHubQueue::Enqueue(Entry entry) { if (!is_full()) { available_buffers_.Append(std::move(entry)); // Trigger OnBufferAvailable callback if registered. if (on_buffer_available_) on_buffer_available_(); return {}; } else { ALOGE("BufferHubQueue::Enqueue: Buffer queue is full!"); Loading Loading @@ -399,6 +408,15 @@ Status<std::shared_ptr<BufferHubBuffer>> BufferHubQueue::Dequeue( return {std::move(buffer)}; } void BufferHubQueue::SetBufferAvailableCallback( BufferAvailableCallback callback) { on_buffer_available_ = callback; } void BufferHubQueue::SetBufferRemovedCallback(BufferRemovedCallback callback) { on_buffer_removed_ = callback; } ProducerQueue::ProducerQueue(LocalChannelHandle handle) : BASE(std::move(handle)) { auto status = ImportQueue(); Loading libs/vr/libbufferhubqueue/include/private/dvr/buffer_hub_queue_client.h +13 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,10 @@ class ConsumerQueue; // automatically re-requeued when released by the remote side. class BufferHubQueue : public pdx::Client { public: using BufferAvailableCallback = std::function<void()>; using BufferRemovedCallback = std::function<void(const std::shared_ptr<BufferHubBuffer>&)>; virtual ~BufferHubQueue() {} // Creates a new consumer queue that is attached to the producer. Returns Loading Loading @@ -84,6 +88,11 @@ class BufferHubQueue : public pdx::Client { // occurred. bool HandleQueueEvents() { return WaitForBuffers(0); } // Set buffer event callbacks, which are std::function wrappers. The caller is // responsible for ensuring the validity of these callbacks' callable targets. void SetBufferAvailableCallback(BufferAvailableCallback callback); void SetBufferRemovedCallback(BufferRemovedCallback callback); // The queue tracks at most this many buffers. static constexpr size_t kMaxQueueCapacity = android::BufferQueueDefs::NUM_BUFFER_SLOTS; Loading Loading @@ -225,6 +234,10 @@ class BufferHubQueue : public pdx::Client { // Global id for the queue that is consistent across processes. int id_{-1}; // Buffer event callbacks BufferAvailableCallback on_buffer_available_; BufferRemovedCallback on_buffer_removed_; BufferHubQueue(const BufferHubQueue&) = delete; void operator=(BufferHubQueue&) = delete; }; Loading libs/vr/libdvr/dvr_buffer_queue.cpp +59 −0 Original line number Diff line number Diff line Loading @@ -8,6 +8,8 @@ #include "dvr_buffer_queue_internal.h" using namespace android; using android::dvr::BufferConsumer; using android::dvr::BufferHubBuffer; using android::dvr::BufferHubQueueProducer; using android::dvr::BufferProducer; using android::dvr::ConsumerQueue; Loading Loading @@ -252,6 +254,36 @@ int DvrReadBufferQueue::Dequeue(int timeout, DvrReadBuffer* read_buffer, return 0; } void DvrReadBufferQueue::SetBufferAvailableCallback( DvrReadBufferQueueBufferAvailableCallback callback, void* context) { if (callback == nullptr) { consumer_queue_->SetBufferAvailableCallback(nullptr); } else { consumer_queue_->SetBufferAvailableCallback( [callback, context]() { callback(context); }); } } void DvrReadBufferQueue::SetBufferRemovedCallback( DvrReadBufferQueueBufferRemovedCallback callback, void* context) { if (callback == nullptr) { consumer_queue_->SetBufferRemovedCallback(nullptr); } else { consumer_queue_->SetBufferRemovedCallback( [callback, context](const std::shared_ptr<BufferHubBuffer>& buffer) { DvrReadBuffer read_buffer{ std::static_pointer_cast<BufferConsumer>(buffer)}; callback(&read_buffer, context); }); } } int DvrReadBufferQueue::HandleEvents() { // TODO(jwcai) Probably should change HandleQueueEvents to return Status. consumer_queue_->HandleQueueEvents(); return 0; } void dvrReadBufferQueueDestroy(DvrReadBufferQueue* read_queue) { delete read_queue; } Loading Loading @@ -288,4 +320,31 @@ int dvrReadBufferQueueDequeue(DvrReadBufferQueue* read_queue, int timeout, meta_size_bytes); } int dvrReadBufferQueueSetBufferAvailableCallback( DvrReadBufferQueue* read_queue, DvrReadBufferQueueBufferAvailableCallback callback, void* context) { if (!read_queue) return -EINVAL; read_queue->SetBufferAvailableCallback(callback, context); return 0; } int dvrReadBufferQueueSetBufferRemovedCallback( DvrReadBufferQueue* read_queue, DvrReadBufferQueueBufferRemovedCallback callback, void* context) { if (!read_queue) return -EINVAL; read_queue->SetBufferRemovedCallback(callback, context); return 0; } int dvrReadBufferQueueHandleEvents(DvrReadBufferQueue* read_queue) { if (!read_queue) return -EINVAL; return read_queue->HandleEvents(); } } // extern "C" libs/vr/libdvr/dvr_buffer_queue_internal.h +5 −0 Original line number Diff line number Diff line Loading @@ -54,6 +54,11 @@ struct DvrReadBufferQueue { int CreateReadQueue(DvrReadBufferQueue** out_read_queue); int Dequeue(int timeout, DvrReadBuffer* read_buffer, int* out_fence_fd, void* out_meta, size_t meta_size_bytes); void SetBufferAvailableCallback( DvrReadBufferQueueBufferAvailableCallback callback, void* context); void SetBufferRemovedCallback( DvrReadBufferQueueBufferRemovedCallback callback, void* context); int HandleEvents(); private: std::shared_ptr<ConsumerQueue> consumer_queue_; Loading libs/vr/libdvr/include/dvr/dvr_api.h +11 −0 Original line number Diff line number Diff line Loading @@ -174,6 +174,17 @@ typedef int (*DvrReadBufferQueueDequeuePtr)(DvrReadBufferQueue* read_queue, DvrReadBuffer* out_buffer, int* out_fence_fd, void* out_meta, size_t meta_size_bytes); typedef void (*DvrReadBufferQueueBufferAvailableCallback)(void* context); typedef int (*DvrReadBufferQueueSetBufferAvailableCallbackPtr)( DvrReadBufferQueue* read_queue, DvrReadBufferQueueBufferAvailableCallback callback, void* context); typedef void (*DvrReadBufferQueueBufferRemovedCallback)(DvrReadBuffer* buffer, void* context); typedef int (*DvrReadBufferQueueSetBufferRemovedCallbackPtr)( DvrReadBufferQueue* read_queue, DvrReadBufferQueueBufferRemovedCallback callback, void* context); typedef int (*DvrReadBufferQueueHandleEventsPtr)( DvrReadBufferQueue* read_queue); // dvr_surface.h typedef int (*DvrGetGlobalBufferPtr)(DvrGlobalBufferKey key, Loading Loading
libs/vr/libbufferhubqueue/buffer_hub_queue_client.cpp +18 −0 Original line number Diff line number Diff line Loading @@ -359,6 +359,10 @@ Status<void> BufferHubQueue::RemoveBuffer(size_t slot) { return ErrorStatus(-ret); } // Trigger OnBufferRemoved callback if registered. if (on_buffer_removed_) on_buffer_removed_(buffers_[slot]); buffers_[slot] = nullptr; capacity_--; } Loading @@ -369,6 +373,11 @@ Status<void> BufferHubQueue::RemoveBuffer(size_t slot) { Status<void> BufferHubQueue::Enqueue(Entry entry) { if (!is_full()) { available_buffers_.Append(std::move(entry)); // Trigger OnBufferAvailable callback if registered. if (on_buffer_available_) on_buffer_available_(); return {}; } else { ALOGE("BufferHubQueue::Enqueue: Buffer queue is full!"); Loading Loading @@ -399,6 +408,15 @@ Status<std::shared_ptr<BufferHubBuffer>> BufferHubQueue::Dequeue( return {std::move(buffer)}; } void BufferHubQueue::SetBufferAvailableCallback( BufferAvailableCallback callback) { on_buffer_available_ = callback; } void BufferHubQueue::SetBufferRemovedCallback(BufferRemovedCallback callback) { on_buffer_removed_ = callback; } ProducerQueue::ProducerQueue(LocalChannelHandle handle) : BASE(std::move(handle)) { auto status = ImportQueue(); Loading
libs/vr/libbufferhubqueue/include/private/dvr/buffer_hub_queue_client.h +13 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,10 @@ class ConsumerQueue; // automatically re-requeued when released by the remote side. class BufferHubQueue : public pdx::Client { public: using BufferAvailableCallback = std::function<void()>; using BufferRemovedCallback = std::function<void(const std::shared_ptr<BufferHubBuffer>&)>; virtual ~BufferHubQueue() {} // Creates a new consumer queue that is attached to the producer. Returns Loading Loading @@ -84,6 +88,11 @@ class BufferHubQueue : public pdx::Client { // occurred. bool HandleQueueEvents() { return WaitForBuffers(0); } // Set buffer event callbacks, which are std::function wrappers. The caller is // responsible for ensuring the validity of these callbacks' callable targets. void SetBufferAvailableCallback(BufferAvailableCallback callback); void SetBufferRemovedCallback(BufferRemovedCallback callback); // The queue tracks at most this many buffers. static constexpr size_t kMaxQueueCapacity = android::BufferQueueDefs::NUM_BUFFER_SLOTS; Loading Loading @@ -225,6 +234,10 @@ class BufferHubQueue : public pdx::Client { // Global id for the queue that is consistent across processes. int id_{-1}; // Buffer event callbacks BufferAvailableCallback on_buffer_available_; BufferRemovedCallback on_buffer_removed_; BufferHubQueue(const BufferHubQueue&) = delete; void operator=(BufferHubQueue&) = delete; }; Loading
libs/vr/libdvr/dvr_buffer_queue.cpp +59 −0 Original line number Diff line number Diff line Loading @@ -8,6 +8,8 @@ #include "dvr_buffer_queue_internal.h" using namespace android; using android::dvr::BufferConsumer; using android::dvr::BufferHubBuffer; using android::dvr::BufferHubQueueProducer; using android::dvr::BufferProducer; using android::dvr::ConsumerQueue; Loading Loading @@ -252,6 +254,36 @@ int DvrReadBufferQueue::Dequeue(int timeout, DvrReadBuffer* read_buffer, return 0; } void DvrReadBufferQueue::SetBufferAvailableCallback( DvrReadBufferQueueBufferAvailableCallback callback, void* context) { if (callback == nullptr) { consumer_queue_->SetBufferAvailableCallback(nullptr); } else { consumer_queue_->SetBufferAvailableCallback( [callback, context]() { callback(context); }); } } void DvrReadBufferQueue::SetBufferRemovedCallback( DvrReadBufferQueueBufferRemovedCallback callback, void* context) { if (callback == nullptr) { consumer_queue_->SetBufferRemovedCallback(nullptr); } else { consumer_queue_->SetBufferRemovedCallback( [callback, context](const std::shared_ptr<BufferHubBuffer>& buffer) { DvrReadBuffer read_buffer{ std::static_pointer_cast<BufferConsumer>(buffer)}; callback(&read_buffer, context); }); } } int DvrReadBufferQueue::HandleEvents() { // TODO(jwcai) Probably should change HandleQueueEvents to return Status. consumer_queue_->HandleQueueEvents(); return 0; } void dvrReadBufferQueueDestroy(DvrReadBufferQueue* read_queue) { delete read_queue; } Loading Loading @@ -288,4 +320,31 @@ int dvrReadBufferQueueDequeue(DvrReadBufferQueue* read_queue, int timeout, meta_size_bytes); } int dvrReadBufferQueueSetBufferAvailableCallback( DvrReadBufferQueue* read_queue, DvrReadBufferQueueBufferAvailableCallback callback, void* context) { if (!read_queue) return -EINVAL; read_queue->SetBufferAvailableCallback(callback, context); return 0; } int dvrReadBufferQueueSetBufferRemovedCallback( DvrReadBufferQueue* read_queue, DvrReadBufferQueueBufferRemovedCallback callback, void* context) { if (!read_queue) return -EINVAL; read_queue->SetBufferRemovedCallback(callback, context); return 0; } int dvrReadBufferQueueHandleEvents(DvrReadBufferQueue* read_queue) { if (!read_queue) return -EINVAL; return read_queue->HandleEvents(); } } // extern "C"
libs/vr/libdvr/dvr_buffer_queue_internal.h +5 −0 Original line number Diff line number Diff line Loading @@ -54,6 +54,11 @@ struct DvrReadBufferQueue { int CreateReadQueue(DvrReadBufferQueue** out_read_queue); int Dequeue(int timeout, DvrReadBuffer* read_buffer, int* out_fence_fd, void* out_meta, size_t meta_size_bytes); void SetBufferAvailableCallback( DvrReadBufferQueueBufferAvailableCallback callback, void* context); void SetBufferRemovedCallback( DvrReadBufferQueueBufferRemovedCallback callback, void* context); int HandleEvents(); private: std::shared_ptr<ConsumerQueue> consumer_queue_; Loading
libs/vr/libdvr/include/dvr/dvr_api.h +11 −0 Original line number Diff line number Diff line Loading @@ -174,6 +174,17 @@ typedef int (*DvrReadBufferQueueDequeuePtr)(DvrReadBufferQueue* read_queue, DvrReadBuffer* out_buffer, int* out_fence_fd, void* out_meta, size_t meta_size_bytes); typedef void (*DvrReadBufferQueueBufferAvailableCallback)(void* context); typedef int (*DvrReadBufferQueueSetBufferAvailableCallbackPtr)( DvrReadBufferQueue* read_queue, DvrReadBufferQueueBufferAvailableCallback callback, void* context); typedef void (*DvrReadBufferQueueBufferRemovedCallback)(DvrReadBuffer* buffer, void* context); typedef int (*DvrReadBufferQueueSetBufferRemovedCallbackPtr)( DvrReadBufferQueue* read_queue, DvrReadBufferQueueBufferRemovedCallback callback, void* context); typedef int (*DvrReadBufferQueueHandleEventsPtr)( DvrReadBufferQueue* read_queue); // dvr_surface.h typedef int (*DvrGetGlobalBufferPtr)(DvrGlobalBufferKey key, Loading