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

Commit 4c05d48b authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "stagefright: fix some issues with mkv HDR info conversions" into nyc-dev

parents cdb740a0 12c70329
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -1137,9 +1137,11 @@ void MatroskaExtractor::getColorInformation(
                info.sType1.mMaxDisplayLuminance = (uint16_t)(mastering->luminance_max + 0.5);
            }
            if (mastering->luminance_min >= 0.00005 && mastering->luminance_min < 6.55355) {
                // HDRStaticInfo Type1 stores min luminance scaled 10000:1
                info.sType1.mMinDisplayLuminance =
                    (uint16_t)(10000 * mastering->luminance_min + 0.5);
            }
            // HDRStaticInfo Type1 stores primaries scaled 50000:1
            if (isValidPrimary(mastering->white_point)) {
                info.sType1.mW.x = (uint16_t)(50000 * mastering->white_point->x + 0.5);
                info.sType1.mW.y = (uint16_t)(50000 * mastering->white_point->y + 0.5);
+16 −16
Original line number Diff line number Diff line
@@ -99,23 +99,23 @@ enum Mkv {
    kMkvDisplayUnit = 0x54B2,
    kMkvAspectRatioType = 0x54B3,
    kMkvColour = 0x55B0,
    kMkvColourMatrixCoefficients = 0x55B1,
    kMkvColourRange = 0x55B9,
    kMkvColourTransferCharacteristics = 0x55BA,
    kMkvColourPrimaries = 0x55BB,
    kMkvColourMaxCll = 0x55BC,
    kMkvColourMaxFall = 0x55BD,
    kMkvMatrixCoefficients = 0x55B1,
    kMkvRange = 0x55B9,
    kMkvTransferCharacteristics = 0x55BA,
    kMkvPrimaries = 0x55BB,
    kMkvMaxCLL = 0x55BC,
    kMkvMaxFALL = 0x55BD,
    kMkvMasteringMetadata = 0x55D0,
    kMkvMasteringPrimaryRChromaticityX = 0x55D1,
    kMkvMasteringPrimaryRChromaticityY = 0x55D2,
    kMkvMasteringPrimaryGChromaticityX = 0x55D3,
    kMkvMasteringPrimaryGChromaticityY = 0x55D4,
    kMkvMasteringPrimaryBChromaticityX = 0x55D5,
    kMkvMasteringPrimaryBChromaticityY = 0x55D6,
    kMkvMasteringWhitePointChromaticityX = 0x55D7,
    kMkvMasteringWhitePointChromaticityY = 0x55D8,
    kMkvMasteringLuminanceMax = 0x55D9,
    kMkvMasteringLuminanceMin = 0x55DA,
    kMkvPrimaryRChromaticityX = 0x55D1,
    kMkvPrimaryRChromaticityY = 0x55D2,
    kMkvPrimaryGChromaticityX = 0x55D3,
    kMkvPrimaryGChromaticityY = 0x55D4,
    kMkvPrimaryBChromaticityX = 0x55D5,
    kMkvPrimaryBChromaticityY = 0x55D6,
    kMkvWhitePointChromaticityX = 0x55D7,
    kMkvWhitePointChromaticityY = 0x55D8,
    kMkvLuminanceMax = 0x55D9,
    kMkvLuminanceMin = 0x55DA,
    kMkvFrameRate = 0x2383E3,
    kMkvAudio = 0xE1,
    kMkvSamplingFrequency = 0xB5,
+19 −17
Original line number Diff line number Diff line
@@ -393,16 +393,16 @@ sp<WebmElement> WebmElement::VideoTrackEntry(
        ColorUtils::convertCodecColorAspectsToIsoAspects(
                aspects, &primaries, &transfer, &coeffs, &fullRange);
        if (havePrimaries) {
            colorInfo.push_back(new WebmUnsigned(kMkvColourPrimaries, primaries));
            colorInfo.push_back(new WebmUnsigned(kMkvPrimaries, primaries));
        }
        if (haveTransfer) {
            colorInfo.push_back(new WebmUnsigned(kMkvColourTransferCharacteristics, transfer));
            colorInfo.push_back(new WebmUnsigned(kMkvTransferCharacteristics, transfer));
        }
        if (haveCoeffs) {
            colorInfo.push_back(new WebmUnsigned(kMkvColourMatrixCoefficients, coeffs));
            colorInfo.push_back(new WebmUnsigned(kMkvMatrixCoefficients, coeffs));
        }
        if (haveRange) {
            colorInfo.push_back(new WebmUnsigned(kMkvColourRange, fullRange ? 2 : 1));
            colorInfo.push_back(new WebmUnsigned(kMkvRange, fullRange ? 2 : 1));
        }

        // Also add HDR static info, some of which goes to MasteringMetadata element
@@ -420,40 +420,42 @@ sp<WebmElement> WebmElement::VideoTrackEntry(
                // convert HDRStaticInfo values to matroska equivalent values for each non-0 group
                if (info->sType1.mMaxFrameAverageLightLevel) {
                    colorInfo.push_back(new WebmUnsigned(
                            kMkvColourMaxFall, info->sType1.mMaxFrameAverageLightLevel));
                            kMkvMaxFALL, info->sType1.mMaxFrameAverageLightLevel));
                }
                if (info->sType1.mMaxContentLightLevel) {
                    colorInfo.push_back(new WebmUnsigned(
                            kMkvColourMaxCll, info->sType1.mMaxContentLightLevel));
                            kMkvMaxCLL, info->sType1.mMaxContentLightLevel));
                }
                if (info->sType1.mMinDisplayLuminance) {
                    // HDRStaticInfo Type1 stores min luminance scaled 10000:1
                    masteringInfo.push_back(new WebmFloat(
                            kMkvMasteringLuminanceMin, info->sType1.mMinDisplayLuminance * 0.0001));
                            kMkvLuminanceMin, info->sType1.mMinDisplayLuminance * 0.0001));
                }
                if (info->sType1.mMaxDisplayLuminance) {
                    masteringInfo.push_back(new WebmFloat(
                            kMkvMasteringLuminanceMax, (float)info->sType1.mMaxDisplayLuminance));
                            kMkvLuminanceMax, (float)info->sType1.mMaxDisplayLuminance));
                }
                // HDRStaticInfo Type1 stores primaries scaled 50000:1
                if (info->sType1.mW.x || info->sType1.mW.y) {
                    masteringInfo.push_back(new WebmFloat(
                            kMkvMasteringWhitePointChromaticityX, info->sType1.mW.x * 0.00002));
                            kMkvWhitePointChromaticityX, info->sType1.mW.x * 0.00002));
                    masteringInfo.push_back(new WebmFloat(
                            kMkvMasteringWhitePointChromaticityY, info->sType1.mW.y * 0.00002));
                            kMkvWhitePointChromaticityY, info->sType1.mW.y * 0.00002));
                }
                if (info->sType1.mR.x || info->sType1.mR.x || info->sType1.mG.x
                if (info->sType1.mR.x || info->sType1.mR.y || info->sType1.mG.x
                        || info->sType1.mG.y || info->sType1.mB.x || info->sType1.mB.y) {
                    masteringInfo.push_back(new WebmFloat(
                            kMkvMasteringPrimaryRChromaticityX, info->sType1.mR.x * 0.00002));
                            kMkvPrimaryRChromaticityX, info->sType1.mR.x * 0.00002));
                    masteringInfo.push_back(new WebmFloat(
                            kMkvMasteringPrimaryRChromaticityY, info->sType1.mR.y * 0.00002));
                            kMkvPrimaryRChromaticityY, info->sType1.mR.y * 0.00002));
                    masteringInfo.push_back(new WebmFloat(
                            kMkvMasteringPrimaryGChromaticityX, info->sType1.mG.x * 0.00002));
                            kMkvPrimaryGChromaticityX, info->sType1.mG.x * 0.00002));
                    masteringInfo.push_back(new WebmFloat(
                            kMkvMasteringPrimaryGChromaticityY, info->sType1.mG.y * 0.00002));
                            kMkvPrimaryGChromaticityY, info->sType1.mG.y * 0.00002));
                    masteringInfo.push_back(new WebmFloat(
                            kMkvMasteringPrimaryBChromaticityX, info->sType1.mB.x * 0.00002));
                            kMkvPrimaryBChromaticityX, info->sType1.mB.x * 0.00002));
                    masteringInfo.push_back(new WebmFloat(
                            kMkvMasteringPrimaryBChromaticityY, info->sType1.mB.y * 0.00002));
                            kMkvPrimaryBChromaticityY, info->sType1.mB.y * 0.00002));
                }
                if (masteringInfo.size()) {
                    colorInfo.push_back(new WebmMaster(kMkvMasteringMetadata, masteringInfo));