diff options
author | Jiwen 'Steve' Cai <jwcai@google.com> | 2017-05-24 11:50:11 -0700 |
---|---|---|
committer | Jiwen 'Steve' Cai <jwcai@google.com> | 2017-05-25 11:15:40 -0700 |
commit | 0b80155bf5c27b47c160d1904ad442842dc8f0c5 (patch) | |
tree | 5cebb81d37bbd6545b48ed42745695171a5efd57 /libs/vr/libbufferhubqueue/buffer_hub_queue_client.cpp | |
parent | 27e0a3d9e5a8ce6518e9de3fdd9add60562f736d (diff) |
DvrBufferQueue: Add basic event callbacks
Currently, there is no guarantee of thread safty and on which thread
those callbacks are going to be fired.
Three new DVR APIs introduced:
1/ dvrReadBufferQueueSetBufferAvailableCallback
2/ dvrReadBufferQueueSetBufferRemovedCallback
3/ dvrReadBufferQueueHandleEvents
Bug: 36748012
Test: buffer_hub_queue-test, dvr_api-test
Change-Id: I79900c9d205f1808b02400b379c79adb366a1104
Diffstat (limited to 'libs/vr/libbufferhubqueue/buffer_hub_queue_client.cpp')
-rw-r--r-- | libs/vr/libbufferhubqueue/buffer_hub_queue_client.cpp | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/libs/vr/libbufferhubqueue/buffer_hub_queue_client.cpp b/libs/vr/libbufferhubqueue/buffer_hub_queue_client.cpp index bba075d595..a53c8b001c 100644 --- a/libs/vr/libbufferhubqueue/buffer_hub_queue_client.cpp +++ b/libs/vr/libbufferhubqueue/buffer_hub_queue_client.cpp @@ -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_--; } @@ -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!"); @@ -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(); |