diff options
| -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 |