Setting queue metadata size via dvrSurface API
This allows VRCore to use metadata feature on each individual DvrBufferQueue.
Bug: 62301995
Test: build, dvr_api-test
Change-Id: I8e0eb8ca1a2c197426c4853cae99a4ed63caeffe
diff --git a/libs/vr/libdvr/dvr_surface.cpp b/libs/vr/libdvr/dvr_surface.cpp
index 2affacd..8d4b3f5 100644
--- a/libs/vr/libdvr/dvr_surface.cpp
+++ b/libs/vr/libdvr/dvr_surface.cpp
@@ -134,7 +134,7 @@
int dvrSurfaceCreateWriteBufferQueue(DvrSurface* surface, uint32_t width,
uint32_t height, uint32_t format,
uint32_t layer_count, uint64_t usage,
- size_t capacity,
+ size_t capacity, size_t metadata_size,
DvrWriteBufferQueue** out_writer) {
if (surface == nullptr || out_writer == nullptr) {
ALOGE(
@@ -145,7 +145,7 @@
}
auto status = surface->surface->CreateQueue(width, height, layer_count,
- format, usage, capacity);
+ format, usage, capacity, metadata_size);
if (!status) {
ALOGE("dvrSurfaceCreateWriteBufferQueue: Failed to create queue: %s",
status.GetErrorMessage().c_str());
diff --git a/libs/vr/libdvr/include/dvr/dvr_api.h b/libs/vr/libdvr/include/dvr/dvr_api.h
index f05a6fd..c687a63 100644
--- a/libs/vr/libdvr/include/dvr/dvr_api.h
+++ b/libs/vr/libdvr/include/dvr/dvr_api.h
@@ -199,7 +199,7 @@
size_t attribute_count);
typedef int (*DvrSurfaceCreateWriteBufferQueuePtr)(
DvrSurface* surface, uint32_t width, uint32_t height, uint32_t format,
- uint32_t layer_count, uint64_t usage, size_t capacity,
+ uint32_t layer_count, uint64_t usage, size_t capacity, size_t metadata_size,
DvrWriteBufferQueue** queue_out);
// dvr_vsync.h
diff --git a/libs/vr/libdvr/include/dvr/dvr_surface.h b/libs/vr/libdvr/include/dvr/dvr_surface.h
index e3ab41b..ce1f435 100644
--- a/libs/vr/libdvr/include/dvr/dvr_surface.h
+++ b/libs/vr/libdvr/include/dvr/dvr_surface.h
@@ -76,7 +76,7 @@
int dvrSurfaceCreateWriteBufferQueue(DvrSurface* surface, uint32_t width,
uint32_t height, uint32_t format,
uint32_t layer_count, uint64_t usage,
- size_t capacity,
+ size_t capacity, size_t metadata_size,
DvrWriteBufferQueue** queue_out);
// Get a global buffer from the display service.
diff --git a/libs/vr/libdvr/tests/dvr_display_manager-test.cpp b/libs/vr/libdvr/tests/dvr_display_manager-test.cpp
index 2249154..726949d 100644
--- a/libs/vr/libdvr/tests/dvr_display_manager-test.cpp
+++ b/libs/vr/libdvr/tests/dvr_display_manager-test.cpp
@@ -58,11 +58,12 @@
Status<UniqueDvrWriteBufferQueue> CreateSurfaceQueue(
const UniqueDvrSurface& surface, uint32_t width, uint32_t height,
- uint32_t format, uint32_t layer_count, uint64_t usage, size_t capacity) {
+ uint32_t format, uint32_t layer_count, uint64_t usage, size_t capacity,
+ size_t metadata_size) {
DvrWriteBufferQueue* queue;
- const int ret =
- dvrSurfaceCreateWriteBufferQueue(surface.get(), width, height, format,
- layer_count, usage, capacity, &queue);
+ const int ret = dvrSurfaceCreateWriteBufferQueue(
+ surface.get(), width, height, format, layer_count, usage, capacity,
+ metadata_size, &queue);
if (ret < 0)
return ErrorStatus(-ret);
else
@@ -505,7 +506,7 @@
// Create a new queue in the surface.
auto write_queue_status = CreateSurfaceQueue(
surface, 320, 240, AHARDWAREBUFFER_FORMAT_R8G8B8A8_UNORM, 1,
- AHARDWAREBUFFER_USAGE_CPU_READ_RARELY, 1);
+ AHARDWAREBUFFER_USAGE_CPU_READ_RARELY, 1, 0);
ASSERT_STATUS_OK(write_queue_status);
UniqueDvrWriteBufferQueue write_queue = write_queue_status.take();
ASSERT_NE(nullptr, write_queue.get());
@@ -568,7 +569,7 @@
const uint32_t kLayerCount = 3;
auto write_queue_status = CreateSurfaceQueue(
surface, 320, 240, AHARDWAREBUFFER_FORMAT_R8G8B8A8_UNORM, kLayerCount,
- AHARDWAREBUFFER_USAGE_CPU_READ_RARELY, 1);
+ AHARDWAREBUFFER_USAGE_CPU_READ_RARELY, 1, 0);
ASSERT_STATUS_OK(write_queue_status);
UniqueDvrWriteBufferQueue write_queue = write_queue_status.take();
ASSERT_NE(nullptr, write_queue.get());