summaryrefslogtreecommitdiff
path: root/libs/vr/libbufferhubqueue/buffer_hub_queue_client.cpp
diff options
context:
space:
mode:
authorJiwen 'Steve' Cai <jwcai@google.com>2017-05-24 11:50:11 -0700
committerJiwen 'Steve' Cai <jwcai@google.com>2017-05-25 11:15:40 -0700
commit0b80155bf5c27b47c160d1904ad442842dc8f0c5 (patch)
tree5cebb81d37bbd6545b48ed42745695171a5efd57 /libs/vr/libbufferhubqueue/buffer_hub_queue_client.cpp
parent27e0a3d9e5a8ce6518e9de3fdd9add60562f736d (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.cpp18
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();