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  |