StageFright: Set input surface default format
The default pixel format used in 'GraphicBufferSource'
may cause issues for some producers like camera. The
default currently is RGB based and works with producers
like camera largely by relying on WARs like b/9487482.
This could be problematic in case the SW usage bits get
enabled.
Bug: 116696800
Bug: 115338759
Test: runtest -x
cts/tests/camera/src/android/hardware/camera2/cts/RecordingTest.java -m
testRecordingFromPersistentSurface
runtest -x cts/tests/tests/media/src/android/media/cts/VideoEncoderTest.java
runtest -x cts/tests/tests/media/src/android/media/cts/NativeEncoderTest.java
runtest -x cts/tests/tests/media/src/android/media/cts/EncodeVirtualDisplayTest.java
runtest -x cts/tests/tests/media/src/android/media/cts/ExtractDecodeEditEncodeMuxTest.java
runtest -x cts/tests/tests/media/src/android/media/cts/EncodeVirtualDisplayWithCompositionTest.java
runtest -x cts/tests/tests/media/src/android/media/cts/MediaSyncTest.java
runtest -x cts/tests/tests/media/src/android/media/cts/EncodeDecodeTest.java
runtest -x cts/tests/tests/media/src/android/media/cts/DecodeEditEncodeTest.java
runtest -x cts/tests/tests/media/src/android/media/cts/MediaCodecTest.java
runtest -x cts/tests/tests/media/src/android/media/cts/MediaRecorderTest.java
screenrecord --size=1024x720 --time-limit 5 /sdcard/record.mp4
Change-Id: I65512bd68a801b0667a0df5d670d8ec9339d2ae4
diff --git a/media/libstagefright/bqhelper/GraphicBufferSource.cpp b/media/libstagefright/bqhelper/GraphicBufferSource.cpp
index 6d93807..8c1da76 100644
--- a/media/libstagefright/bqhelper/GraphicBufferSource.cpp
+++ b/media/libstagefright/bqhelper/GraphicBufferSource.cpp
@@ -1106,6 +1106,14 @@
consumerUsage |= GRALLOC_USAGE_HW_VIDEO_ENCODER;
mConsumer->setConsumerUsageBits(consumerUsage);
+ // Set impl. defined format as default. Depending on the usage flags
+ // the device-specific implementation will derive the exact format.
+ err = mConsumer->setDefaultBufferFormat(HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED);
+ if (err != NO_ERROR) {
+ ALOGE("Failed to configure surface default format ret: %d", err);
+ return err;
+ }
+
// Sets the default buffer data space
ALOGD("setting dataspace: %#x, acquired=%d", dataSpace, mNumOutstandingAcquires);
mConsumer->setDefaultBufferDataSpace((android_dataspace)dataSpace);