Merge "stagefright: fix some issues with mkv HDR info conversions" into nyc-dev
diff --git a/media/libstagefright/matroska/MatroskaExtractor.cpp b/media/libstagefright/matroska/MatroskaExtractor.cpp
index 383a0ad..0f9430e 100644
--- a/media/libstagefright/matroska/MatroskaExtractor.cpp
+++ b/media/libstagefright/matroska/MatroskaExtractor.cpp
@@ -1137,9 +1137,11 @@
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);
diff --git a/media/libstagefright/webm/WebmConstants.h b/media/libstagefright/webm/WebmConstants.h
index cf6404f..3111559 100644
--- a/media/libstagefright/webm/WebmConstants.h
+++ b/media/libstagefright/webm/WebmConstants.h
@@ -99,23 +99,23 @@
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,
diff --git a/media/libstagefright/webm/WebmElement.cpp b/media/libstagefright/webm/WebmElement.cpp
index 17fae06..a5120b9 100644
--- a/media/libstagefright/webm/WebmElement.cpp
+++ b/media/libstagefright/webm/WebmElement.cpp
@@ -393,16 +393,16 @@
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 @@
// 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));