CCodec: fix dataspace configured for the input surfaces
Bug: 193656448
Test: atest android.media.cts.VideoDecoderRotationTest
Change-Id: I6d0d7e0d0784733b08085b08a8836def96263b11
diff --git a/media/codec2/sfplugin/CCodec.cpp b/media/codec2/sfplugin/CCodec.cpp
index 16398a4..db7b3b6 100644
--- a/media/codec2/sfplugin/CCodec.cpp
+++ b/media/codec2/sfplugin/CCodec.cpp
@@ -1572,8 +1572,25 @@
// 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, outputColorAspects;
+ getColorAspectsFromFormat(config->mOutputFormat, outputColorAspects);
+ getColorAspectsFromFormat(config->mInputFormat, inputColorAspects);
+ if (outputColorAspects.mRange == ColorAspects::RangeUnspecified) {
+ outputColorAspects.mRange = inputColorAspects.mRange;
+ }
+ if (outputColorAspects.mPrimaries == ColorAspects::PrimariesUnspecified) {
+ outputColorAspects.mPrimaries = inputColorAspects.mPrimaries;
+ }
+ if (outputColorAspects.mTransfer == ColorAspects::TransferUnspecified) {
+ outputColorAspects.mTransfer = inputColorAspects.mTransfer;
+ }
+ if (outputColorAspects.mMatrixCoeffs == ColorAspects::MatrixUnspecified) {
+ outputColorAspects.mMatrixCoeffs = inputColorAspects.mMatrixCoeffs;
+ }
+ android_dataspace dataSpace = getDataSpaceForColorAspects(outputColorAspects, false);
surface->setDataSpace(dataSpace);
status_t err = mChannel->setInputSurface(surface);