Merge "RELAND CCodec: fix dataspace configured for the input surfaces" into sc-dev am: 8e62fd2282
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/av/+/15505270
Change-Id: Ief223db43765f1cd9b12d82b2e0578b551ea349d
diff --git a/media/codec2/sfplugin/CCodec.cpp b/media/codec2/sfplugin/CCodec.cpp
index 37f057b..82460c9 100644
--- a/media/codec2/sfplugin/CCodec.cpp
+++ b/media/codec2/sfplugin/CCodec.cpp
@@ -1566,15 +1566,36 @@
// we are now using surface - apply default color aspects to input format - as well as
// get dataspace
bool inputFormatChanged = config->updateFormats(Config::IS_INPUT);
- ALOGD("input format %s to %s",
- inputFormatChanged ? "changed" : "unchanged",
- config->mInputFormat->debugString().c_str());
// configure dataspace
static_assert(sizeof(int32_t) == sizeof(android_dataspace), "dataspace size mismatch");
- android_dataspace dataSpace = HAL_DATASPACE_UNKNOWN;
- (void)config->mInputFormat->findInt32("android._dataspace", (int32_t*)&dataSpace);
+
+ // The output format contains app-configured color aspects, and the input format
+ // has the default color aspects. Use the default for the unspecified params.
+ ColorAspects inputColorAspects, colorAspects;
+ getColorAspectsFromFormat(config->mOutputFormat, colorAspects);
+ getColorAspectsFromFormat(config->mInputFormat, inputColorAspects);
+ if (colorAspects.mRange == ColorAspects::RangeUnspecified) {
+ colorAspects.mRange = inputColorAspects.mRange;
+ }
+ if (colorAspects.mPrimaries == ColorAspects::PrimariesUnspecified) {
+ colorAspects.mPrimaries = inputColorAspects.mPrimaries;
+ }
+ if (colorAspects.mTransfer == ColorAspects::TransferUnspecified) {
+ colorAspects.mTransfer = inputColorAspects.mTransfer;
+ }
+ if (colorAspects.mMatrixCoeffs == ColorAspects::MatrixUnspecified) {
+ colorAspects.mMatrixCoeffs = inputColorAspects.mMatrixCoeffs;
+ }
+ android_dataspace dataSpace = getDataSpaceForColorAspects(
+ colorAspects, /* mayExtend = */ false);
surface->setDataSpace(dataSpace);
+ setColorAspectsIntoFormat(colorAspects, config->mInputFormat, /* force = */ true);
+ config->mInputFormat->setInt32("android._dataspace", int32_t(dataSpace));
+
+ ALOGD("input format %s to %s",
+ inputFormatChanged ? "changed" : "unchanged",
+ config->mInputFormat->debugString().c_str());
status_t err = mChannel->setInputSurface(surface);
if (err != OK) {