Loading media/libstagefright/matroska/MatroskaExtractor.cpp +2 −0 Original line number Original line Diff line number Diff line Loading @@ -1137,9 +1137,11 @@ void MatroskaExtractor::getColorInformation( info.sType1.mMaxDisplayLuminance = (uint16_t)(mastering->luminance_max + 0.5); info.sType1.mMaxDisplayLuminance = (uint16_t)(mastering->luminance_max + 0.5); } } if (mastering->luminance_min >= 0.00005 && mastering->luminance_min < 6.55355) { if (mastering->luminance_min >= 0.00005 && mastering->luminance_min < 6.55355) { // HDRStaticInfo Type1 stores min luminance scaled 10000:1 info.sType1.mMinDisplayLuminance = info.sType1.mMinDisplayLuminance = (uint16_t)(10000 * mastering->luminance_min + 0.5); (uint16_t)(10000 * mastering->luminance_min + 0.5); } } // HDRStaticInfo Type1 stores primaries scaled 50000:1 if (isValidPrimary(mastering->white_point)) { if (isValidPrimary(mastering->white_point)) { info.sType1.mW.x = (uint16_t)(50000 * mastering->white_point->x + 0.5); 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); info.sType1.mW.y = (uint16_t)(50000 * mastering->white_point->y + 0.5); Loading media/libstagefright/webm/WebmConstants.h +16 −16 Original line number Original line Diff line number Diff line Loading @@ -99,23 +99,23 @@ enum Mkv { kMkvDisplayUnit = 0x54B2, kMkvDisplayUnit = 0x54B2, kMkvAspectRatioType = 0x54B3, kMkvAspectRatioType = 0x54B3, kMkvColour = 0x55B0, kMkvColour = 0x55B0, kMkvColourMatrixCoefficients = 0x55B1, kMkvMatrixCoefficients = 0x55B1, kMkvColourRange = 0x55B9, kMkvRange = 0x55B9, kMkvColourTransferCharacteristics = 0x55BA, kMkvTransferCharacteristics = 0x55BA, kMkvColourPrimaries = 0x55BB, kMkvPrimaries = 0x55BB, kMkvColourMaxCll = 0x55BC, kMkvMaxCLL = 0x55BC, kMkvColourMaxFall = 0x55BD, kMkvMaxFALL = 0x55BD, kMkvMasteringMetadata = 0x55D0, kMkvMasteringMetadata = 0x55D0, kMkvMasteringPrimaryRChromaticityX = 0x55D1, kMkvPrimaryRChromaticityX = 0x55D1, kMkvMasteringPrimaryRChromaticityY = 0x55D2, kMkvPrimaryRChromaticityY = 0x55D2, kMkvMasteringPrimaryGChromaticityX = 0x55D3, kMkvPrimaryGChromaticityX = 0x55D3, kMkvMasteringPrimaryGChromaticityY = 0x55D4, kMkvPrimaryGChromaticityY = 0x55D4, kMkvMasteringPrimaryBChromaticityX = 0x55D5, kMkvPrimaryBChromaticityX = 0x55D5, kMkvMasteringPrimaryBChromaticityY = 0x55D6, kMkvPrimaryBChromaticityY = 0x55D6, kMkvMasteringWhitePointChromaticityX = 0x55D7, kMkvWhitePointChromaticityX = 0x55D7, kMkvMasteringWhitePointChromaticityY = 0x55D8, kMkvWhitePointChromaticityY = 0x55D8, kMkvMasteringLuminanceMax = 0x55D9, kMkvLuminanceMax = 0x55D9, kMkvMasteringLuminanceMin = 0x55DA, kMkvLuminanceMin = 0x55DA, kMkvFrameRate = 0x2383E3, kMkvFrameRate = 0x2383E3, kMkvAudio = 0xE1, kMkvAudio = 0xE1, kMkvSamplingFrequency = 0xB5, kMkvSamplingFrequency = 0xB5, Loading media/libstagefright/webm/WebmElement.cpp +19 −17 Original line number Original line Diff line number Diff line Loading @@ -393,16 +393,16 @@ sp<WebmElement> WebmElement::VideoTrackEntry( ColorUtils::convertCodecColorAspectsToIsoAspects( ColorUtils::convertCodecColorAspectsToIsoAspects( aspects, &primaries, &transfer, &coeffs, &fullRange); aspects, &primaries, &transfer, &coeffs, &fullRange); if (havePrimaries) { if (havePrimaries) { colorInfo.push_back(new WebmUnsigned(kMkvColourPrimaries, primaries)); colorInfo.push_back(new WebmUnsigned(kMkvPrimaries, primaries)); } } if (haveTransfer) { if (haveTransfer) { colorInfo.push_back(new WebmUnsigned(kMkvColourTransferCharacteristics, transfer)); colorInfo.push_back(new WebmUnsigned(kMkvTransferCharacteristics, transfer)); } } if (haveCoeffs) { if (haveCoeffs) { colorInfo.push_back(new WebmUnsigned(kMkvColourMatrixCoefficients, coeffs)); colorInfo.push_back(new WebmUnsigned(kMkvMatrixCoefficients, coeffs)); } } if (haveRange) { 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 // Also add HDR static info, some of which goes to MasteringMetadata element Loading @@ -420,40 +420,42 @@ sp<WebmElement> WebmElement::VideoTrackEntry( // convert HDRStaticInfo values to matroska equivalent values for each non-0 group // convert HDRStaticInfo values to matroska equivalent values for each non-0 group if (info->sType1.mMaxFrameAverageLightLevel) { if (info->sType1.mMaxFrameAverageLightLevel) { colorInfo.push_back(new WebmUnsigned( colorInfo.push_back(new WebmUnsigned( kMkvColourMaxFall, info->sType1.mMaxFrameAverageLightLevel)); kMkvMaxFALL, info->sType1.mMaxFrameAverageLightLevel)); } } if (info->sType1.mMaxContentLightLevel) { if (info->sType1.mMaxContentLightLevel) { colorInfo.push_back(new WebmUnsigned( colorInfo.push_back(new WebmUnsigned( kMkvColourMaxCll, info->sType1.mMaxContentLightLevel)); kMkvMaxCLL, info->sType1.mMaxContentLightLevel)); } } if (info->sType1.mMinDisplayLuminance) { if (info->sType1.mMinDisplayLuminance) { // HDRStaticInfo Type1 stores min luminance scaled 10000:1 masteringInfo.push_back(new WebmFloat( masteringInfo.push_back(new WebmFloat( kMkvMasteringLuminanceMin, info->sType1.mMinDisplayLuminance * 0.0001)); kMkvLuminanceMin, info->sType1.mMinDisplayLuminance * 0.0001)); } } if (info->sType1.mMaxDisplayLuminance) { if (info->sType1.mMaxDisplayLuminance) { masteringInfo.push_back(new WebmFloat( 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) { if (info->sType1.mW.x || info->sType1.mW.y) { masteringInfo.push_back(new WebmFloat( masteringInfo.push_back(new WebmFloat( kMkvMasteringWhitePointChromaticityX, info->sType1.mW.x * 0.00002)); kMkvWhitePointChromaticityX, info->sType1.mW.x * 0.00002)); masteringInfo.push_back(new WebmFloat( 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) { || info->sType1.mG.y || info->sType1.mB.x || info->sType1.mB.y) { masteringInfo.push_back(new WebmFloat( masteringInfo.push_back(new WebmFloat( kMkvMasteringPrimaryRChromaticityX, info->sType1.mR.x * 0.00002)); kMkvPrimaryRChromaticityX, info->sType1.mR.x * 0.00002)); masteringInfo.push_back(new WebmFloat( masteringInfo.push_back(new WebmFloat( kMkvMasteringPrimaryRChromaticityY, info->sType1.mR.y * 0.00002)); kMkvPrimaryRChromaticityY, info->sType1.mR.y * 0.00002)); masteringInfo.push_back(new WebmFloat( masteringInfo.push_back(new WebmFloat( kMkvMasteringPrimaryGChromaticityX, info->sType1.mG.x * 0.00002)); kMkvPrimaryGChromaticityX, info->sType1.mG.x * 0.00002)); masteringInfo.push_back(new WebmFloat( masteringInfo.push_back(new WebmFloat( kMkvMasteringPrimaryGChromaticityY, info->sType1.mG.y * 0.00002)); kMkvPrimaryGChromaticityY, info->sType1.mG.y * 0.00002)); masteringInfo.push_back(new WebmFloat( masteringInfo.push_back(new WebmFloat( kMkvMasteringPrimaryBChromaticityX, info->sType1.mB.x * 0.00002)); kMkvPrimaryBChromaticityX, info->sType1.mB.x * 0.00002)); masteringInfo.push_back(new WebmFloat( masteringInfo.push_back(new WebmFloat( kMkvMasteringPrimaryBChromaticityY, info->sType1.mB.y * 0.00002)); kMkvPrimaryBChromaticityY, info->sType1.mB.y * 0.00002)); } } if (masteringInfo.size()) { if (masteringInfo.size()) { colorInfo.push_back(new WebmMaster(kMkvMasteringMetadata, masteringInfo)); colorInfo.push_back(new WebmMaster(kMkvMasteringMetadata, masteringInfo)); Loading Loading
media/libstagefright/matroska/MatroskaExtractor.cpp +2 −0 Original line number Original line Diff line number Diff line Loading @@ -1137,9 +1137,11 @@ void MatroskaExtractor::getColorInformation( info.sType1.mMaxDisplayLuminance = (uint16_t)(mastering->luminance_max + 0.5); info.sType1.mMaxDisplayLuminance = (uint16_t)(mastering->luminance_max + 0.5); } } if (mastering->luminance_min >= 0.00005 && mastering->luminance_min < 6.55355) { if (mastering->luminance_min >= 0.00005 && mastering->luminance_min < 6.55355) { // HDRStaticInfo Type1 stores min luminance scaled 10000:1 info.sType1.mMinDisplayLuminance = info.sType1.mMinDisplayLuminance = (uint16_t)(10000 * mastering->luminance_min + 0.5); (uint16_t)(10000 * mastering->luminance_min + 0.5); } } // HDRStaticInfo Type1 stores primaries scaled 50000:1 if (isValidPrimary(mastering->white_point)) { if (isValidPrimary(mastering->white_point)) { info.sType1.mW.x = (uint16_t)(50000 * mastering->white_point->x + 0.5); 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); info.sType1.mW.y = (uint16_t)(50000 * mastering->white_point->y + 0.5); Loading
media/libstagefright/webm/WebmConstants.h +16 −16 Original line number Original line Diff line number Diff line Loading @@ -99,23 +99,23 @@ enum Mkv { kMkvDisplayUnit = 0x54B2, kMkvDisplayUnit = 0x54B2, kMkvAspectRatioType = 0x54B3, kMkvAspectRatioType = 0x54B3, kMkvColour = 0x55B0, kMkvColour = 0x55B0, kMkvColourMatrixCoefficients = 0x55B1, kMkvMatrixCoefficients = 0x55B1, kMkvColourRange = 0x55B9, kMkvRange = 0x55B9, kMkvColourTransferCharacteristics = 0x55BA, kMkvTransferCharacteristics = 0x55BA, kMkvColourPrimaries = 0x55BB, kMkvPrimaries = 0x55BB, kMkvColourMaxCll = 0x55BC, kMkvMaxCLL = 0x55BC, kMkvColourMaxFall = 0x55BD, kMkvMaxFALL = 0x55BD, kMkvMasteringMetadata = 0x55D0, kMkvMasteringMetadata = 0x55D0, kMkvMasteringPrimaryRChromaticityX = 0x55D1, kMkvPrimaryRChromaticityX = 0x55D1, kMkvMasteringPrimaryRChromaticityY = 0x55D2, kMkvPrimaryRChromaticityY = 0x55D2, kMkvMasteringPrimaryGChromaticityX = 0x55D3, kMkvPrimaryGChromaticityX = 0x55D3, kMkvMasteringPrimaryGChromaticityY = 0x55D4, kMkvPrimaryGChromaticityY = 0x55D4, kMkvMasteringPrimaryBChromaticityX = 0x55D5, kMkvPrimaryBChromaticityX = 0x55D5, kMkvMasteringPrimaryBChromaticityY = 0x55D6, kMkvPrimaryBChromaticityY = 0x55D6, kMkvMasteringWhitePointChromaticityX = 0x55D7, kMkvWhitePointChromaticityX = 0x55D7, kMkvMasteringWhitePointChromaticityY = 0x55D8, kMkvWhitePointChromaticityY = 0x55D8, kMkvMasteringLuminanceMax = 0x55D9, kMkvLuminanceMax = 0x55D9, kMkvMasteringLuminanceMin = 0x55DA, kMkvLuminanceMin = 0x55DA, kMkvFrameRate = 0x2383E3, kMkvFrameRate = 0x2383E3, kMkvAudio = 0xE1, kMkvAudio = 0xE1, kMkvSamplingFrequency = 0xB5, kMkvSamplingFrequency = 0xB5, Loading
media/libstagefright/webm/WebmElement.cpp +19 −17 Original line number Original line Diff line number Diff line Loading @@ -393,16 +393,16 @@ sp<WebmElement> WebmElement::VideoTrackEntry( ColorUtils::convertCodecColorAspectsToIsoAspects( ColorUtils::convertCodecColorAspectsToIsoAspects( aspects, &primaries, &transfer, &coeffs, &fullRange); aspects, &primaries, &transfer, &coeffs, &fullRange); if (havePrimaries) { if (havePrimaries) { colorInfo.push_back(new WebmUnsigned(kMkvColourPrimaries, primaries)); colorInfo.push_back(new WebmUnsigned(kMkvPrimaries, primaries)); } } if (haveTransfer) { if (haveTransfer) { colorInfo.push_back(new WebmUnsigned(kMkvColourTransferCharacteristics, transfer)); colorInfo.push_back(new WebmUnsigned(kMkvTransferCharacteristics, transfer)); } } if (haveCoeffs) { if (haveCoeffs) { colorInfo.push_back(new WebmUnsigned(kMkvColourMatrixCoefficients, coeffs)); colorInfo.push_back(new WebmUnsigned(kMkvMatrixCoefficients, coeffs)); } } if (haveRange) { 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 // Also add HDR static info, some of which goes to MasteringMetadata element Loading @@ -420,40 +420,42 @@ sp<WebmElement> WebmElement::VideoTrackEntry( // convert HDRStaticInfo values to matroska equivalent values for each non-0 group // convert HDRStaticInfo values to matroska equivalent values for each non-0 group if (info->sType1.mMaxFrameAverageLightLevel) { if (info->sType1.mMaxFrameAverageLightLevel) { colorInfo.push_back(new WebmUnsigned( colorInfo.push_back(new WebmUnsigned( kMkvColourMaxFall, info->sType1.mMaxFrameAverageLightLevel)); kMkvMaxFALL, info->sType1.mMaxFrameAverageLightLevel)); } } if (info->sType1.mMaxContentLightLevel) { if (info->sType1.mMaxContentLightLevel) { colorInfo.push_back(new WebmUnsigned( colorInfo.push_back(new WebmUnsigned( kMkvColourMaxCll, info->sType1.mMaxContentLightLevel)); kMkvMaxCLL, info->sType1.mMaxContentLightLevel)); } } if (info->sType1.mMinDisplayLuminance) { if (info->sType1.mMinDisplayLuminance) { // HDRStaticInfo Type1 stores min luminance scaled 10000:1 masteringInfo.push_back(new WebmFloat( masteringInfo.push_back(new WebmFloat( kMkvMasteringLuminanceMin, info->sType1.mMinDisplayLuminance * 0.0001)); kMkvLuminanceMin, info->sType1.mMinDisplayLuminance * 0.0001)); } } if (info->sType1.mMaxDisplayLuminance) { if (info->sType1.mMaxDisplayLuminance) { masteringInfo.push_back(new WebmFloat( 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) { if (info->sType1.mW.x || info->sType1.mW.y) { masteringInfo.push_back(new WebmFloat( masteringInfo.push_back(new WebmFloat( kMkvMasteringWhitePointChromaticityX, info->sType1.mW.x * 0.00002)); kMkvWhitePointChromaticityX, info->sType1.mW.x * 0.00002)); masteringInfo.push_back(new WebmFloat( 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) { || info->sType1.mG.y || info->sType1.mB.x || info->sType1.mB.y) { masteringInfo.push_back(new WebmFloat( masteringInfo.push_back(new WebmFloat( kMkvMasteringPrimaryRChromaticityX, info->sType1.mR.x * 0.00002)); kMkvPrimaryRChromaticityX, info->sType1.mR.x * 0.00002)); masteringInfo.push_back(new WebmFloat( masteringInfo.push_back(new WebmFloat( kMkvMasteringPrimaryRChromaticityY, info->sType1.mR.y * 0.00002)); kMkvPrimaryRChromaticityY, info->sType1.mR.y * 0.00002)); masteringInfo.push_back(new WebmFloat( masteringInfo.push_back(new WebmFloat( kMkvMasteringPrimaryGChromaticityX, info->sType1.mG.x * 0.00002)); kMkvPrimaryGChromaticityX, info->sType1.mG.x * 0.00002)); masteringInfo.push_back(new WebmFloat( masteringInfo.push_back(new WebmFloat( kMkvMasteringPrimaryGChromaticityY, info->sType1.mG.y * 0.00002)); kMkvPrimaryGChromaticityY, info->sType1.mG.y * 0.00002)); masteringInfo.push_back(new WebmFloat( masteringInfo.push_back(new WebmFloat( kMkvMasteringPrimaryBChromaticityX, info->sType1.mB.x * 0.00002)); kMkvPrimaryBChromaticityX, info->sType1.mB.x * 0.00002)); masteringInfo.push_back(new WebmFloat( masteringInfo.push_back(new WebmFloat( kMkvMasteringPrimaryBChromaticityY, info->sType1.mB.y * 0.00002)); kMkvPrimaryBChromaticityY, info->sType1.mB.y * 0.00002)); } } if (masteringInfo.size()) { if (masteringInfo.size()) { colorInfo.push_back(new WebmMaster(kMkvMasteringMetadata, masteringInfo)); colorInfo.push_back(new WebmMaster(kMkvMasteringMetadata, masteringInfo)); Loading