summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author rongliu <rongliu@google.com> 2017-08-03 21:08:59 +0000
committer android-build-merger <android-build-merger@google.com> 2017-08-03 21:08:59 +0000
commit10288989e36fee33e50e2a79bc6111b47cd729bb (patch)
treeb14a56f0c85a7c4c0932d45ca851cbfd38601409
parentb38e9a7b610718512c61ea00425fc1159f44f7b3 (diff)
parent269aa5e76fe620f7a830fd935a6f55872f99b336 (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.cpp10
-rw-r--r--libs/vr/libvrflinger/display_surface.h6
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