Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 66d83488 authored by Alec Mouri's avatar Alec Mouri Committed by Sally Qi
Browse files

Always provide metadata blob for hdr frames

If a surface is playing HDR10+ video and switches to content with a
different HDR standard, then the HDR10+ metadata must be cleared. In
particular, HLG is a standard that does not use HDR metadata, so
unfortunately sending nothing does not imply clearing the existing
metadata. So, we can fix this by sending an empty packet for per-frame
metadata.

Bug: 212496177
Test: builds
Change-Id: Ie3476c9d9bf32f789fdaad5a4fc3cc08e9adcce9
parent 4cd03732
Loading
Loading
Loading
Loading
+9 −10
Original line number Diff line number Diff line
@@ -826,25 +826,24 @@ Error Layer::setPerFrameMetadata(const int32_t supportedPerFrameMetadata,
                                   mHdrMetadata.cta8613.maxFrameAverageLightLevel}});
    }

    Error error = static_cast<Error>(
    const Error error = static_cast<Error>(
        mComposer.setLayerPerFrameMetadata(mDisplay->getId(), mId, perFrameMetadatas));
    if (error != Error::NONE) {
        return error;
    }

    std::vector<Hwc2::PerFrameMetadataBlob> perFrameMetadataBlobs;
    if (validTypes & HdrMetadata::HDR10PLUS) {
        if (CC_UNLIKELY(mHdrMetadata.hdr10plus.size() == 0)) {
            return Error::BAD_PARAMETER;
        }

        std::vector<Hwc2::PerFrameMetadataBlob> perFrameMetadataBlobs;
        perFrameMetadataBlobs.push_back(
                {Hwc2::PerFrameMetadataKey::HDR10_PLUS_SEI, mHdrMetadata.hdr10plus});
        Error setMetadataBlobsError =
                static_cast<Error>(mComposer.setLayerPerFrameMetadataBlobs(mDisplay->getId(), mId,
                                                                           perFrameMetadataBlobs));
        if (error == Error::NONE) {
            return setMetadataBlobsError;
        }
    }
    return error;

    return static_cast<Error>(
            mComposer.setLayerPerFrameMetadataBlobs(mDisplay->getId(), mId, perFrameMetadataBlobs));
}

Error Layer::setDisplayFrame(const Rect& frame)