diff options
| author | 2017-07-22 01:27:33 +0000 | |
|---|---|---|
| committer | 2017-07-22 01:27:33 +0000 | |
| commit | 572aca270273e751edff03bff169726335d11f8c (patch) | |
| tree | 1c48d0e232d761c69be3d58d51cb5842b220d4b5 | |
| parent | 18b6b78eccbaeb33765eab54929c2264b9a78912 (diff) | |
| parent | 42d6d5c8051c2f72ea258553eaa40062c1ec15c7 (diff) | |
Merge "Add dvrReadBufferQueueGetEventFd" into oc-dr1-dev
am: 42d6d5c805
Change-Id: I608dac89a7a3076a9df7201e2defd948e700a3b9
| -rw-r--r-- | libs/vr/libdvr/dvr_buffer_queue.cpp | 7 | ||||
| -rw-r--r-- | libs/vr/libdvr/dvr_buffer_queue_internal.h | 1 | ||||
| -rw-r--r-- | libs/vr/libdvr/include/dvr/dvr_api.h | 1 | ||||
| -rw-r--r-- | libs/vr/libdvr/include/dvr/dvr_api_entries.h | 3 | ||||
| -rw-r--r-- | libs/vr/libdvr/include/dvr/dvr_buffer_queue.h | 8 | ||||
| -rw-r--r-- | libs/vr/libdvr/tests/dvr_buffer_queue-test.cpp | 14 |
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 |