Skip to content
Open
3 changes: 3 additions & 0 deletions include/packager/mpd_params.h
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,9 @@ struct MpdParams {
/// and is greatly influnced by the player.
/// This parameter is required by DASH-IF Low Latency standards.
double target_latency_seconds = 1;
// If enabled, use EssentialProperty instead of SupplementalProperty
// for video colorimetry descriptors.
bool use_colorimetry_essential_property;
};

} // namespace shaka
Expand Down
6 changes: 6 additions & 0 deletions packager/app/mpd_flags.cc
Original file line number Diff line number Diff line change
Expand Up @@ -98,3 +98,9 @@ ABSL_FLAG(
"https://shaka-project.github.io/shaka-packager/html/tutorials/low_latency.html "
// clang-format on
"for more information.");
ABSL_FLAG(
bool,
use_colorimetry_essential_property,
false,
"If enabled, use EssentialProperty instead of SupplementalProperty "
"for video colorimetry descriptors.");
3 changes: 2 additions & 1 deletion packager/app/mpd_flags.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,5 +26,6 @@ ABSL_DECLARE_FLAG(bool, allow_codec_switching);
ABSL_DECLARE_FLAG(bool, include_mspr_pro_for_playready);
ABSL_DECLARE_FLAG(bool, dash_force_segment_list);
ABSL_DECLARE_FLAG(bool, low_latency_dash_mode);

ABSL_DECLARE_FLAG(bool, use_colorimetry_essential_property);

#endif // APP_MPD_FLAGS_H_
1 change: 1 addition & 0 deletions packager/app/packager_main.cc
Original file line number Diff line number Diff line change
Expand Up @@ -499,6 +499,7 @@ std::optional<PackagingParams> GetPackagingParams() {
mpd_params.preserved_segments_outside_live_window =
absl::GetFlag(FLAGS_preserved_segments_outside_live_window);
mpd_params.use_segment_list = absl::GetFlag(FLAGS_dash_force_segment_list);
mpd_params.use_colorimetry_essential_property = absl::GetFlag(FLAGS_use_colorimetry_essential_property);

if (!absl::GetFlag(FLAGS_utc_timings).empty()) {
std::vector<KVPair> pairs = SplitStringIntoKeyValuePairs(
Expand Down
17 changes: 13 additions & 4 deletions packager/app/test/packager_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -489,7 +489,8 @@ def _GetFlags(self,
dash_force_segment_list=False,
force_cl_index=None,
start_segment_number=None,
use_dovi_supplemental_codecs=None):
use_dovi_supplemental_codecs=None,
use_colorimetry_essentail_properity=None):
flags = ['--single_threaded']

if not strip_parameter_set_nalus:
Expand Down Expand Up @@ -550,6 +551,9 @@ def _GetFlags(self,
if use_dovi_supplemental_codecs:
flags.append('--use_dovi_supplemental_codecs')

if use_colorimetry_essential_property:
flags.append('--use_colorimetry_essential_property')

if output_media_info:
flags.append('--output_media_info')
if output_dash:
Expand Down Expand Up @@ -1495,7 +1499,10 @@ def testDolbyVisionProfile8WithEncryption(self):
streams = [
self._GetStream('video', test_file='sparks_dovi_8.mp4')
]
flags = self._GetFlags(encryption=True, output_dash=True, output_hls=True)
flags = self._GetFlags(encryption=True,
output_dash=True,
output_hls=True,
use_colorimetry_essential_property=True)

self.assertPackageSuccess(streams, flags)
self._CheckTestResults('dolby-vision-profile-8-with-encryption')
Expand All @@ -1513,7 +1520,8 @@ def testDolbyVisionProfile8UsingSupplementalCodecs(self):
]
flags = self._GetFlags(output_dash=True,
output_hls=True,
use_dovi_supplemental_codecs=True)
use_dovi_supplemental_codecs=True,
use_colorimetry_essential_property=True)

self.assertPackageSuccess(streams, flags)
self._CheckTestResults('dolby-vision-profile-8-supplemental-codecs')
Expand All @@ -1531,7 +1539,8 @@ def testDolbyVisionProfile10UsingSupplementalCodecs(self):
]
flags = self._GetFlags(output_dash=True,
output_hls=True,
use_dovi_supplemental_codecs=True)
use_dovi_supplemental_codecs=True,
use_colorimetry_essential_property=True)

self.assertPackageSuccess(streams, flags)
self._CheckTestResults('dolby-vision-profile-10-supplemental-codecs')
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 DASH-MPD.xsd" xmlns:scte214="urn:scte:dash:scte214-extensions" profiles="urn:mpeg:dash:profile:isoff-on-demand:2011" minBufferTime="PT2S" type="static" mediaPresentationDuration="PT6.022683S">
<Period id="0">
<AdaptationSet id="0" contentType="video" width="640" height="360" frameRate="60000/1001" subsegmentAlignment="true" par="16:9">
<SupplementalProperty schemeIdUri="urn:mpeg:mpegB:cicp:MatrixCoefficients" value="9"/>
<SupplementalProperty schemeIdUri="urn:mpeg:mpegB:cicp:ColourPrimaries" value="9"/>
<SupplementalProperty schemeIdUri="urn:mpeg:mpegB:cicp:TransferCharacteristics" value="16"/>
<EssentialProperty schemeIdUri="urn:mpeg:mpegB:cicp:MatrixCoefficients" value="9"/>
<EssentialProperty schemeIdUri="urn:mpeg:mpegB:cicp:ColourPrimaries" value="9"/>
<EssentialProperty schemeIdUri="urn:mpeg:mpegB:cicp:TransferCharacteristics" value="16"/>
<Representation id="0" bandwidth="807837" codecs="hvc1.2.4.L90.90" mimeType="video/mp4" scte214:supplementalCodecs="dvh1.08.01" scte214:supplementalProfiles="db2g" sar="1:1">
<BaseURL>sparks_dovi_8-video.mp4</BaseURL>
<SegmentBase indexRange="992-1071" timescale="60000">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 DASH-MPD.xsd" xmlns:cenc="urn:mpeg:cenc:2013" profiles="urn:mpeg:dash:profile:isoff-on-demand:2011" minBufferTime="PT2S" type="static" mediaPresentationDuration="PT6.022683S">
<Period id="0">
<AdaptationSet id="0" contentType="video" width="640" height="360" frameRate="60000/1001" subsegmentAlignment="true" par="16:9">
<SupplementalProperty schemeIdUri="urn:mpeg:mpegB:cicp:MatrixCoefficients" value="9"/>
<SupplementalProperty schemeIdUri="urn:mpeg:mpegB:cicp:ColourPrimaries" value="9"/>
<SupplementalProperty schemeIdUri="urn:mpeg:mpegB:cicp:TransferCharacteristics" value="16"/>
<EssentialProperty schemeIdUri="urn:mpeg:mpegB:cicp:MatrixCoefficients" value="9"/>
<EssentialProperty schemeIdUri="urn:mpeg:mpegB:cicp:ColourPrimaries" value="9"/>
<EssentialProperty schemeIdUri="urn:mpeg:mpegB:cicp:TransferCharacteristics" value="16"/>
<ContentProtection value="cenc" schemeIdUri="urn:mpeg:dash:mp4protection:2011" cenc:default_KID="31323334-3536-3738-3930-313233343536"/>
<ContentProtection schemeIdUri="urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b">
<cenc:pssh>AAAANHBzc2gBAAAAEHfv7MCyTQKs4zweUuL7SwAAAAExMjM0NTY3ODkwMTIzNDU2AAAAAA==</cenc:pssh>
Expand All @@ -18,9 +18,9 @@
</Representation>
</AdaptationSet>
<AdaptationSet id="1" contentType="video" width="640" height="360" frameRate="60000/1001" subsegmentAlignment="true" par="16:9">
<SupplementalProperty schemeIdUri="urn:mpeg:mpegB:cicp:MatrixCoefficients" value="9"/>
<SupplementalProperty schemeIdUri="urn:mpeg:mpegB:cicp:ColourPrimaries" value="9"/>
<SupplementalProperty schemeIdUri="urn:mpeg:mpegB:cicp:TransferCharacteristics" value="16"/>
<EssentialProperty schemeIdUri="urn:mpeg:mpegB:cicp:MatrixCoefficients" value="9"/>
<EssentialProperty schemeIdUri="urn:mpeg:mpegB:cicp:ColourPrimaries" value="9"/>
<EssentialProperty schemeIdUri="urn:mpeg:mpegB:cicp:TransferCharacteristics" value="16"/>
<ContentProtection value="cenc" schemeIdUri="urn:mpeg:dash:mp4protection:2011" cenc:default_KID="31323334-3536-3738-3930-313233343536"/>
<ContentProtection schemeIdUri="urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b">
<cenc:pssh>AAAANHBzc2gBAAAAEHfv7MCyTQKs4zweUuL7SwAAAAExMjM0NTY3ODkwMTIzNDU2AAAAAA==</cenc:pssh>
Expand Down
48 changes: 36 additions & 12 deletions packager/mpd/base/adaptation_set.cc
Original file line number Diff line number Diff line change
Expand Up @@ -383,27 +383,51 @@ std::optional<xml::XmlNode> AdaptationSet::GetXml() {
}

// https://dashif.org/docs/DASH-IF-IOP-v4.3.pdf - 4.2.5.1
if (IsVideo() && matrix_coefficients_ > 0 &&
!adaptation_set.AddSupplementalProperty(
if (IsVideo() && matrix_coefficients_ > 0) {
bool ok = false;
if (mpd_options_.mpd_params.use_colorimetry_essential_property) {
ok = adaptation_set.AddEssentialProperty(
"urn:mpeg:mpegB:cicp:MatrixCoefficients",
std::to_string(matrix_coefficients_))) {
return std::nullopt;
std::to_string(matrix_coefficients_));
} else {
ok = adaptation_set.AddSupplementalProperty(
"urn:mpeg:mpegB:cicp:MatrixCoefficients",
std::to_string(matrix_coefficients_));
}
if (!ok)
return std::nullopt;
}

// https://dashif.org/docs/DASH-IF-IOP-v4.3.pdf - 4.2.5.1
if (IsVideo() && color_primaries_ > 0 &&
!adaptation_set.AddSupplementalProperty(
if (IsVideo() && color_primaries_ > 0) {
bool ok = false;
if (mpd_options_.mpd_params.use_colorimetry_essential_property) {
ok = adaptation_set.AddEssentialProperty(
"urn:mpeg:mpegB:cicp:ColourPrimaries",
std::to_string(color_primaries_))) {
return std::nullopt;
std::to_string(color_primaries_));
} else {
ok = adaptation_set.AddSupplementalProperty(
"urn:mpeg:mpegB:cicp:ColourPrimaries",
std::to_string(color_primaries_));
}
if (!ok)
return std::nullopt;
}

// https://dashif.org/docs/DASH-IF-IOP-v4.3.pdf - 4.2.5.1
if (IsVideo() && transfer_characteristics_ > 0 &&
!adaptation_set.AddSupplementalProperty(
if (IsVideo() && transfer_characteristics_ > 0) {
bool ok = false;
if (mpd_options_.mpd_params.use_colorimetry_essential_property) {
ok = adaptation_set.AddEssentialProperty(
"urn:mpeg:mpegB:cicp:TransferCharacteristics",
std::to_string(transfer_characteristics_))) {
return std::nullopt;
std::to_string(transfer_characteristics_));
} else {
ok = adaptation_set.AddSupplementalProperty(
"urn:mpeg:mpegB:cicp:TransferCharacteristics",
std::to_string(transfer_characteristics_));
}
if (!ok)
return std::nullopt;
}

// Note: must be checked before checking segments_aligned_ (below). So that
Expand Down
Loading