diff options
| author | 2017-08-03 21:02:50 +0000 | |
|---|---|---|
| committer | 2017-08-03 21:02:50 +0000 | |
| commit | 269aa5e76fe620f7a830fd935a6f55872f99b336 (patch) | |
| tree | e501614cf0b402314e570e400527d6d11b1c7e1e | |
| parent | 765e4f5ea48d20f2f055f636b7d772d57d8d3fe4 (diff) | |
| parent | b5e8b5dda33818caaf178b477cd20ee9ab853a97 (diff) | |
Merge "Add metadata in direct display surface to support ANativeWindow use cases." into oc-mr1-dev
am: b5e8b5dda3
Change-Id: I247d9e1626bc45a62980a08fe162fc537a822bbd
| -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  |