DvrWriteBufferQueue: support buffer resizing
Currently, the buffer resising is implemented at the C API's
implementation level, i.e. it's a pure client side logic out of the core
BufferHubQueue C++/PDX implementation. The logic is similar to
BufferHubQueueProducer's buffer resizing logic.
Other minor changes:
1/ Use ProducerQueueConfig in DisplaySurface as well, and plumb default
width, height, and format to bufferhubd when a BufferHubQueue is created
through a Display Surface.
2/ Added detailed dvr_buffer_queue comments.
3/ Since we now have more and more logic in dvr_buffer_queue, refactored
Dvr{Read,Write}BufferQueue to be C++-styled class.
Bug: 38324405
Test: buffer_hub_queue_producer-test, buffer_hub_queue-test, dvr_api-test
Change-Id: I7186fc04e84eafda46eca316a94739bb3b5c07ca
diff --git a/libs/vr/libvrflinger/display_surface.cpp b/libs/vr/libvrflinger/display_surface.cpp
index babdc0e..d836fba 100644
--- a/libs/vr/libvrflinger/display_surface.cpp
+++ b/libs/vr/libvrflinger/display_surface.cpp
@@ -199,16 +199,14 @@
}
Status<LocalChannelHandle> ApplicationDisplaySurface::OnCreateQueue(
- Message& /*message*/, size_t meta_size_bytes) {
+ Message& /*message*/, const ProducerQueueConfig& config) {
ATRACE_NAME("ApplicationDisplaySurface::OnCreateQueue");
ALOGD_IF(TRACE,
"ApplicationDisplaySurface::OnCreateQueue: surface_id=%d, "
"meta_size_bytes=%zu",
- surface_id(), meta_size_bytes);
+ surface_id(), config.meta_size_bytes);
std::lock_guard<std::mutex> autolock(lock_);
- auto config =
- ProducerQueueConfigBuilder().SetMetadataSize(meta_size_bytes).Build();
auto producer = ProducerQueue::Create(config, UsagePolicy{});
if (!producer) {
ALOGE(
@@ -261,19 +259,17 @@
}
Status<LocalChannelHandle> DirectDisplaySurface::OnCreateQueue(
- Message& /*message*/, size_t meta_size_bytes) {
+ Message& /*message*/, const ProducerQueueConfig& config) {
ATRACE_NAME("DirectDisplaySurface::OnCreateQueue");
ALOGD_IF(
TRACE,
"DirectDisplaySurface::OnCreateQueue: surface_id=%d meta_size_bytes=%zu",
- surface_id(), meta_size_bytes);
+ surface_id(), config.meta_size_bytes);
std::lock_guard<std::mutex> autolock(lock_);
if (!direct_queue_) {
// Inject the hw composer usage flag to enable the display to read the
// buffers.
- auto config =
- ProducerQueueConfigBuilder().SetMetadataSize(meta_size_bytes).Build();
auto producer = ProducerQueue::Create(
config, UsagePolicy{GraphicBuffer::USAGE_HW_COMPOSER, 0, 0, 0});
if (!producer) {