summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jiwen 'Steve' Cai <jwcai@google.com> 2017-07-22 01:27:33 +0000
committer android-build-merger <android-build-merger@google.com> 2017-07-22 01:27:33 +0000
commit572aca270273e751edff03bff169726335d11f8c (patch)
tree1c48d0e232d761c69be3d58d51cb5842b220d4b5
parent18b6b78eccbaeb33765eab54929c2264b9a78912 (diff)
parent42d6d5c8051c2f72ea258553eaa40062c1ec15c7 (diff)
Merge "Add dvrReadBufferQueueGetEventFd" into oc-dr1-dev
am: 42d6d5c805 Change-Id: I608dac89a7a3076a9df7201e2defd948e700a3b9
-rw-r--r--libs/vr/libdvr/dvr_buffer_queue.cpp7
-rw-r--r--libs/vr/libdvr/dvr_buffer_queue_internal.h1
-rw-r--r--libs/vr/libdvr/include/dvr/dvr_api.h1
-rw-r--r--libs/vr/libdvr/include/dvr/dvr_api_entries.h3
-rw-r--r--libs/vr/libdvr/include/dvr/dvr_buffer_queue.h8
-rw-r--r--libs/vr/libdvr/tests/dvr_buffer_queue-test.cpp14
6 files changed, 34 insertions, 0 deletions
diff --git a/libs/vr/libdvr/dvr_buffer_queue.cpp b/libs/vr/libdvr/dvr_buffer_queue.cpp
index 2e1655f1dc..018abbb2a7 100644
--- a/libs/vr/libdvr/dvr_buffer_queue.cpp
+++ b/libs/vr/libdvr/dvr_buffer_queue.cpp
@@ -302,6 +302,13 @@ int dvrReadBufferQueueGetId(DvrReadBufferQueue* read_queue) {
return read_queue->id();
}
+int dvrReadBufferQueueGetEventFd(DvrReadBufferQueue* read_queue) {
+ if (!read_queue)
+ return -EINVAL;
+
+ return read_queue->event_fd();
+}
+
int dvrReadBufferQueueCreateReadQueue(DvrReadBufferQueue* read_queue,
DvrReadBufferQueue** out_read_queue) {
if (!read_queue || !out_read_queue)
diff --git a/libs/vr/libdvr/dvr_buffer_queue_internal.h b/libs/vr/libdvr/dvr_buffer_queue_internal.h
index 133bf98fd1..ffbe7a5836 100644
--- a/libs/vr/libdvr/dvr_buffer_queue_internal.h
+++ b/libs/vr/libdvr/dvr_buffer_queue_internal.h
@@ -49,6 +49,7 @@ struct DvrReadBufferQueue {
const std::shared_ptr<ConsumerQueue>& consumer_queue);
int id() const { return consumer_queue_->id(); }
+ int event_fd() const { return consumer_queue_->queue_fd(); }
size_t capacity() const { return consumer_queue_->capacity(); }
int CreateReadQueue(DvrReadBufferQueue** out_read_queue);
diff --git a/libs/vr/libdvr/include/dvr/dvr_api.h b/libs/vr/libdvr/include/dvr/dvr_api.h
index ceb6cf2e81..d0dbd8d390 100644
--- a/libs/vr/libdvr/include/dvr/dvr_api.h
+++ b/libs/vr/libdvr/include/dvr/dvr_api.h
@@ -177,6 +177,7 @@ typedef void (*DvrReadBufferQueueDestroyPtr)(DvrReadBufferQueue* read_queue);
typedef ssize_t (*DvrReadBufferQueueGetCapacityPtr)(
DvrReadBufferQueue* read_queue);
typedef int (*DvrReadBufferQueueGetIdPtr)(DvrReadBufferQueue* read_queue);
+typedef int (*DvrReadBufferQueueGetEventFdPtr)(DvrReadBufferQueue* read_queue);
typedef int (*DvrReadBufferQueueCreateReadQueuePtr)(
DvrReadBufferQueue* read_queue, DvrReadBufferQueue** out_read_queue);
typedef int (*DvrReadBufferQueueDequeuePtr)(DvrReadBufferQueue* read_queue,
diff --git a/libs/vr/libdvr/include/dvr/dvr_api_entries.h b/libs/vr/libdvr/include/dvr/dvr_api_entries.h
index 914901ec79..72e0f674f4 100644
--- a/libs/vr/libdvr/include/dvr/dvr_api_entries.h
+++ b/libs/vr/libdvr/include/dvr/dvr_api_entries.h
@@ -157,3 +157,6 @@ DVR_V1_API_ENTRY(PerformanceSetSchedulerPolicy);
// Pose client
DVR_V1_API_ENTRY(PoseClientSensorsEnable);
+
+// Read buffer queue
+DVR_V1_API_ENTRY(ReadBufferQueueGetEventFd);
diff --git a/libs/vr/libdvr/include/dvr/dvr_buffer_queue.h b/libs/vr/libdvr/include/dvr/dvr_buffer_queue.h
index 95c04f1f25..e2127f8e31 100644
--- a/libs/vr/libdvr/include/dvr/dvr_buffer_queue.h
+++ b/libs/vr/libdvr/include/dvr/dvr_buffer_queue.h
@@ -102,6 +102,14 @@ ssize_t dvrReadBufferQueueGetCapacity(DvrReadBufferQueue* read_queue);
// @return Queue id on success; or negative error code.
int dvrReadBufferQueueGetId(DvrReadBufferQueue* read_queue);
+// Get the event fd that signals when queue updates occur.
+//
+// Use ReadBufferQueueHandleEvents to trigger registered event callbacks.
+//
+// @param read_queue The DvrReadBufferQueue of interest.
+// @return Fd on success; or negative error code.
+int dvrReadBufferQueueGetEventFd(DvrReadBufferQueue* read_queue);
+
// Create a read buffer queue from an existing read buffer queue.
//
// @param read_queue The DvrReadBufferQueue of interest.
diff --git a/libs/vr/libdvr/tests/dvr_buffer_queue-test.cpp b/libs/vr/libdvr/tests/dvr_buffer_queue-test.cpp
index 497b1cbe00..16da1d9e54 100644
--- a/libs/vr/libdvr/tests/dvr_buffer_queue-test.cpp
+++ b/libs/vr/libdvr/tests/dvr_buffer_queue-test.cpp
@@ -450,6 +450,20 @@ TEST_F(DvrBufferQueueTest, DequeueMismatchMetadata) {
EXPECT_FALSE(dvrReadBufferIsValid(rb));
}
+TEST_F(DvrBufferQueueTest, TestReadQueueEventFd) {
+ ASSERT_NO_FATAL_FAILURE(CreateWriteBufferQueue());
+ ASSERT_NO_FATAL_FAILURE(AllocateBuffers(kQueueCapacity));
+
+ DvrReadBufferQueue* read_queue = nullptr;
+ int ret = dvrWriteBufferQueueCreateReadQueue(write_queue_, &read_queue);
+
+ ASSERT_EQ(0, ret);
+ ASSERT_NE(nullptr, read_queue);
+
+ int event_fd = dvrReadBufferQueueGetEventFd(read_queue);
+ ASSERT_GT(event_fd, 0);
+}
+
} // namespace
} // namespace dvr