Convert certain format types to another buffer format.
Parity the code from BufferQueueLayer where it converted certain user
passed formats into supported formats
Test: Builds
Fixes: 179066417
Change-Id: I3d9e04491ec4adbd27d5efd53e84075c762ee386
diff --git a/libs/gui/BLASTBufferQueue.cpp b/libs/gui/BLASTBufferQueue.cpp
index c62d9ad..c2ec0fe 100644
--- a/libs/gui/BLASTBufferQueue.cpp
+++ b/libs/gui/BLASTBufferQueue.cpp
@@ -142,7 +142,7 @@
mBufferItemConsumer->setFrameAvailableListener(this);
mBufferItemConsumer->setBufferFreedListener(this);
mBufferItemConsumer->setDefaultBufferSize(mSize.width, mSize.height);
- mBufferItemConsumer->setDefaultBufferFormat(format);
+ mBufferItemConsumer->setDefaultBufferFormat(convertBufferFormat(format));
mTransformHint = mSurfaceControl->getTransformHint();
mBufferItemConsumer->setTransformHint(mTransformHint);
@@ -175,7 +175,7 @@
std::unique_lock _lock{mMutex};
if (mFormat != format) {
mFormat = format;
- mBufferItemConsumer->setDefaultBufferFormat(format);
+ mBufferItemConsumer->setDefaultBufferFormat(convertBufferFormat(format));
}
SurfaceComposerClient::Transaction t;
@@ -683,4 +683,18 @@
*outConsumer = consumer;
}
+PixelFormat BLASTBufferQueue::convertBufferFormat(PixelFormat& format) {
+ PixelFormat convertedFormat = format;
+ switch (format) {
+ case PIXEL_FORMAT_TRANSPARENT:
+ case PIXEL_FORMAT_TRANSLUCENT:
+ convertedFormat = PIXEL_FORMAT_RGBA_8888;
+ break;
+ case PIXEL_FORMAT_OPAQUE:
+ convertedFormat = PIXEL_FORMAT_RGBX_8888;
+ break;
+ }
+ return convertedFormat;
+}
+
} // namespace android
diff --git a/libs/gui/include/gui/BLASTBufferQueue.h b/libs/gui/include/gui/BLASTBufferQueue.h
index fa3efe1..bccb71b 100644
--- a/libs/gui/include/gui/BLASTBufferQueue.h
+++ b/libs/gui/include/gui/BLASTBufferQueue.h
@@ -110,6 +110,7 @@
// Return true if we need to reject the buffer based on the scaling mode and the buffer size.
bool rejectBuffer(const BufferItem& item) REQUIRES(mMutex);
bool maxBuffersAcquired(bool includeExtraAcquire) const REQUIRES(mMutex);
+ static PixelFormat convertBufferFormat(PixelFormat& format);
std::string mName;
sp<SurfaceControl> mSurfaceControl;