Skip to content

Commit 1067ff1

Browse files
authored
Feature/filter message (Dash-Industry-Forum#4961)
* Add warning when AdaptationSet is filtered because of unsupported EssentialProperty * Allow COLOUR_PRIMARIES_SCHEME_ID_URI and MATRIX_COEFFICIENTS_SCHEME_ID_URI with value 9 * Enable filterVideoColorimetryEssentialProperties and filterHDRMetadataFormatEssentialProperties by default * Adjust unit tests according to new config * Remove console.log
1 parent f60c4df commit 1067ff1

File tree

3 files changed

+34
-14
lines changed

3 files changed

+34
-14
lines changed

src/core/Settings.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -84,8 +84,8 @@ import SwitchRequest from '../streaming/rules/SwitchRequest.js';
8484
* ...Constants.THUMBNAILS_SCHEME_ID_URIS.map(ep => { return { 'schemeIdUri': ep }; })
8585
* ],
8686
* useMediaCapabilitiesApi: true,
87-
* filterVideoColorimetryEssentialProperties: false,
88-
* filterHDRMetadataFormatEssentialProperties: false,
87+
* filterVideoColorimetryEssentialProperties: true,
88+
* filterHDRMetadataFormatEssentialProperties: true,
8989
* filterAudioChannelConfiguration: false
9090
* },
9191
* events: {
@@ -734,10 +734,10 @@ import SwitchRequest from '../streaming/rules/SwitchRequest.js';
734734
* List of supported \<EssentialProperty\> elements
735735
* @property {boolean} [useMediaCapabilitiesApi=true]
736736
* Enable to use the MediaCapabilities API to check whether codecs are supported. If disabled MSE.isTypeSupported will be used instead.
737-
* @property {boolean} [filterVideoColorimetryEssentialProperties=false]
737+
* @property {boolean} [filterVideoColorimetryEssentialProperties=true]
738738
* Enable dash.js to query MediaCapabilities API for signalled Colorimetry EssentialProperties (per schemeIdUris: 'urn:mpeg:mpegB:cicp:ColourPrimaries', 'urn:mpeg:mpegB:cicp:TransferCharacteristics').
739739
* If disabled, registered properties per supportedEssentialProperties will be allowed without any further checking (including 'urn:mpeg:mpegB:cicp:MatrixCoefficients').
740-
* @property {boolean} [filterHDRMetadataFormatEssentialProperties=false]
740+
* @property {boolean} [filterHDRMetadataFormatEssentialProperties=true]
741741
* Enable dash.js to query MediaCapabilities API for signalled HDR-MetadataFormat EssentialProperty (per schemeIdUri:'urn:dvb:dash:hdr-dmi').
742742
* @property {boolean} [filterAudioChannelConfiguration=false]
743743
* Enable dash.js to query MediaCapabilities API for signalled AudioChannelConfiguration.
@@ -1174,8 +1174,8 @@ function Settings() {
11741174
})
11751175
],
11761176
useMediaCapabilitiesApi: true,
1177-
filterVideoColorimetryEssentialProperties: false,
1178-
filterHDRMetadataFormatEssentialProperties: false,
1177+
filterVideoColorimetryEssentialProperties: true,
1178+
filterHDRMetadataFormatEssentialProperties: true,
11791179
filterAudioChannelConfiguration: false
11801180
},
11811181
events: {

src/streaming/utils/CapabilitiesFilter.js

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ function CapabilitiesFilter() {
7979

8080
_removeMultiRepresentationPreselections(manifest);
8181
_removePreselectionWithNoAdaptationSet(manifest);
82-
82+
8383
return _applyCustomFilters(manifest);
8484
})
8585
.then(() => {
@@ -245,6 +245,7 @@ function CapabilitiesFilter() {
245245
}
246246

247247
/* Build the configuration object for capability requests based on primary element (Representation or Preselection) */
248+
248249
/* In case Preselection elements are present, attributes of this element override their counterparts from the Representation element */
249250
function _createConfiguration(type, primaryElement, codec, prslCommonRepresentation) {
250251
let config = null;
@@ -305,12 +306,12 @@ function CapabilitiesFilter() {
305306

306307
if (primaryElement.tagName === DashConstants.PRESELECTION && prslCommonRep) {
307308
let prslCommonRepresentationHDRColorimetryConfig = _convertHDRColorimetryToConfig(prslCommonRep);
308-
309+
309310
// if either the properties of the Preselection or the CommonRepresentation is not supported, we can't mark the config as supported.
310311
let isCommonRepCfgSupported = prslCommonRepresentationHDRColorimetryConfig.isSupported;
311312
delete prslCommonRepresentationHDRColorimetryConfig.isSupported;
312313
config.isSupported = config.isSupported && isCommonRepCfgSupported;
313-
314+
314315
// asign only those attributes that are not present in config
315316
_assignMissing(config, prslCommonRepresentationHDRColorimetryConfig);
316317
}
@@ -322,7 +323,7 @@ function CapabilitiesFilter() {
322323

323324
if (primaryElement.tagName === DashConstants.PRESELECTION && prslCommonRep) {
324325
let prslCommonRepresentationHDRMetadataFormatConfig = _convertHDRMetadataFormatToConfig(prslCommonRep);
325-
326+
326327
// if either the properties of the Preselection or the CommonRepresentation is not supported, we can't mark the config as supported.
327328
let isCommonRepCfgSupported = prslCommonRepresentationHDRMetadataFormatConfig.isSupported;
328329
delete prslCommonRepresentationHDRMetadataFormatConfig.isSupported;
@@ -473,6 +474,7 @@ function CapabilitiesFilter() {
473474
const doesSupportEssentialProperties = _doesSupportEssentialProperties(adaptationSetEssentialProperties);
474475

475476
if (!doesSupportEssentialProperties) {
477+
logger.warn(`[CapabilitiesFilter] removed AdaptationSet (id: ${as.id}) with unsupported EssentialProperty`);
476478
return false;
477479
}
478480

@@ -481,7 +483,11 @@ function CapabilitiesFilter() {
481483
return _doesSupportEssentialProperties(essentialProperties);
482484
});
483485

484-
return as.Representation && as.Representation.length > 0;
486+
const isSupported = as.Representation && as.Representation.length > 0;
487+
if (!isSupported) {
488+
logger.warn(`[CapabilitiesFilter] removed AdaptationSet (id: ${as.id}) with unsupported EssentialProperty on all Representations`);
489+
}
490+
return isSupported;
485491
});
486492

487493
if (period.Preselection && period.Preselection.length) {
@@ -544,8 +550,12 @@ function CapabilitiesFilter() {
544550
if (period.Preselection) {
545551
period.Preselection = period.Preselection.filter((prsl) => {
546552
const prslComponents = String(prsl.preselectionComponents).split(' ');
547-
const adaptationSetIds = period.AdaptationSet.map(as => {return as.id});
548-
return prslComponents.every(c => {return adaptationSetIds.includes(c)});
553+
const adaptationSetIds = period.AdaptationSet.map(as => {
554+
return as.id
555+
});
556+
return prslComponents.every(c => {
557+
return adaptationSetIds.includes(c)
558+
});
549559
});
550560
}
551561
});

test/unit/test/streaming/streaming.utils.Capabilities.js

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,15 +83,25 @@ EssentialPropertyPrivateTransferFunction.init({
8383
describe('Capabilities', function () {
8484
beforeEach(function () {
8585
settings = Settings({}).getInstance();
86+
settings.reset();
8687
capabilities = Capabilities({}).getInstance();
8788

8889
capabilities.setConfig({
8990
settings: settings
9091
});
91-
settings.reset();
9292
});
9393

9494
describe('supports EssentialProperty', function () {
95+
beforeEach(function () {
96+
settings.update({
97+
streaming: {
98+
capabilities: {
99+
filterVideoColorimetryEssentialProperties: false,
100+
filterHDRMetadataFormatEssentialProperties: false,
101+
}
102+
}
103+
})
104+
});
95105
it('should return true if EssentialProperty value is known', function () {
96106
let res = capabilities.supportsEssentialProperty(EssentialPropertyThumbNail);
97107
expect(res).to.be.true;

0 commit comments

Comments
 (0)