diff options
| author | 2017-08-03 21:08:59 +0000 | |
|---|---|---|
| committer | 2017-08-03 21:08:59 +0000 | |
| commit | 10288989e36fee33e50e2a79bc6111b47cd729bb (patch) | |
| tree | b14a56f0c85a7c4c0932d45ca851cbfd38601409 | |
| parent | b38e9a7b610718512c61ea00425fc1159f44f7b3 (diff) | |
| parent | 269aa5e76fe620f7a830fd935a6f55872f99b336 (diff) | |
Merge "Add metadata in direct display surface to support ANativeWindow use cases." into oc-mr1-dev am: b5e8b5dda3
am: 269aa5e76f
Change-Id: Ica2dfbec39fa1f0993733c291aac23d84d9b2c7b
| -rw-r--r-- | libs/vr/libvrflinger/display_surface.cpp | 10 | ||||
| -rw-r--r-- | libs/vr/libvrflinger/display_surface.h | 6 |
2 files changed, 14 insertions, 2 deletions
diff --git a/libs/vr/libvrflinger/display_surface.cpp b/libs/vr/libvrflinger/display_surface.cpp index 0d6a732a8e..4852fabd4b 100644 --- a/libs/vr/libvrflinger/display_surface.cpp +++ b/libs/vr/libvrflinger/display_surface.cpp @@ -301,6 +301,9 @@ Status<LocalChannelHandle> DirectDisplaySurface::OnCreateQueue( } direct_queue_ = producer->CreateConsumerQueue(); + if (direct_queue_->metadata_size() > 0) { + metadata_.reset(new uint8_t[direct_queue_->metadata_size()]); + } auto status = RegisterQueue(direct_queue_); if (!status) { ALOGE( @@ -345,7 +348,12 @@ void DirectDisplaySurface::DequeueBuffersLocked() { while (true) { LocalHandle acquire_fence; size_t slot; - auto buffer_status = direct_queue_->Dequeue(0, &slot, &acquire_fence); + auto buffer_status = direct_queue_->Dequeue( + 0, &slot, metadata_.get(), + direct_queue_->metadata_size(), &acquire_fence); + ALOGD_IF(TRACE, + "DirectDisplaySurface::DequeueBuffersLocked: Dequeue with metadata_size: %zu", + direct_queue_->metadata_size()); if (!buffer_status) { ALOGD_IF( TRACE > 1 && buffer_status.error() == ETIMEDOUT, diff --git a/libs/vr/libvrflinger/display_surface.h b/libs/vr/libvrflinger/display_surface.h index 5cbee57bf9..7a0fb18548 100644 --- a/libs/vr/libvrflinger/display_surface.h +++ b/libs/vr/libvrflinger/display_surface.h @@ -144,7 +144,8 @@ class DirectDisplaySurface : public DisplaySurface { const display::SurfaceAttributes& attributes) : DisplaySurface(service, SurfaceType::Direct, surface_id, process_id, user_id, attributes), - acquired_buffers_(kMaxPostedBuffers) {} + acquired_buffers_(kMaxPostedBuffers), + metadata_(nullptr){} std::vector<int32_t> GetQueueIds() const override; bool IsBufferAvailable(); bool IsBufferPosted(); @@ -179,6 +180,9 @@ class DirectDisplaySurface : public DisplaySurface { RingBuffer<AcquiredBuffer> acquired_buffers_; std::shared_ptr<ConsumerQueue> direct_queue_; + + // Stores metadata when it dequeue buffers from consumer queue. + std::unique_ptr<uint8_t[]> metadata_; }; } // namespace dvr |