diff --git a/src/MediaConchBundle/Lib/Checks/Checks.php b/src/MediaConchBundle/Lib/Checks/Checks.php index 51f3798f..c3c19e22 100644 --- a/src/MediaConchBundle/Lib/Checks/Checks.php +++ b/src/MediaConchBundle/Lib/Checks/Checks.php @@ -1117,6 +1117,1837 @@ public function __construct($specId = null, $elementId = null, $fieldId = null, ], [ 'General_compliance', 'Best_practice' ] ), + new Check( + '(attribute name) attribute is not part of specs', + 'Warning', + [ + new Reference( + 'ITU-R_BS.2076', + 'audioChannelFormat' + ), + ], + [ 'General_compliance' ] + ), + new Check( + '(element name) element is not part of specs', + 'Warning', + [ + new Reference( + 'ITU-R_BS.2076', + 'audioProgramme' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioContent' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioObject' + ), + new Reference( + 'ITU-R_BS.2076', + '' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioChannelFormat' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioPackFormat' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioTrackUID' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioTrackFormat' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioStreamFormat' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioChannelFormat/audioBlockFormat' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioChannelFormat/audioBlockFormat/position' + ), + ], + [ 'General_compliance' ] + ), + new Check( + '(attribute name) attribute is not present (extra spec name if needed)', + 'Error', + [ + new Reference( + 'ITU-R_BS.2076', + 'audioProgramme', + 'audioProgrammeID', + '"audioProgramme attributes [...] audioProgrammeID [...] Required [...] Yes"', + 'Update the encoder to write this element, then reencode the content.' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioProgramme', + 'audioProgrammeName', + '"audioProgramme attributes [...] audioProgrammeName [...] Required [...] Yes"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioProgramme', + 'start', + '"audioProgramme attributes [...] start [...] Required [...] Yes"', + 'Update the encoder to write this element, then reencode the content.' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioProgramme', + 'end', + '"audioProgramme attributes [...] end [...] Required [...] Yes"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioProgramme', + 'maxDuckingDepth', + '"audioProgramme attributes [...] maxDuckingDepth [...] This attribute shall not be present"' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioContent', + 'audioContentID', + '"audioContent attributes [...] audioContentID [...] Required [...] Yes"' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioContent', + 'audioContentName', + '"audioContent attributes [...] audioContentName [...] Required [...] Yes"' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioObject', + 'audioObjectID', + '"audioObject attributes [...] audioObjectID [...] Required [...] Yes"' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioObject', + 'audioObjectName', + '"audioObject attributes [...] audioObjectName [...] Required [...] Yes"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioObject', + 'duration', + '"audioObject attributes [...] duration [...] Required [...] Yes"' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioPackFormat', + 'audioPackFormatID', + '"audioPackFormat attributes [...] audioPackFormatID [...] Required [...] Yes"' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioPackFormat', + 'audioPackFormatName', + '"audioPackFormat attributes [...] audioPackFormatName [...] Required [...] Yes"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioPackFormat', + 'typeDefinition', + '"audioPackFormat attributes [...] typeDefinition [...] Required [...] Yes"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioPackFormat', + 'typeLabel', + '"audioPackFormat attributes [...] typeLabel [...] Required [...] Yes"' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioChannelFormat', + 'audioChannelFormatID', + '"audioChannelFormat attributes [...] audioChannelFormatID [...] Required [...] Yes"' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioChannelFormat', + 'audioChannelFormatName', + '"audioChannelFormat attributes [...] audioChannelFormatName [...] Required [...] Yes"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioChannelFormat', + 'typeDefinition', + '"audioChannelFormat attributes [...] typeDefinition [...] Required [...] Yes"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioChannelFormat', + 'typeLabel', + '"audioChannelFormat attributes [...] typeLabel [...] Required [...] Yes"' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioTrackUID', + 'UID', + '"audioTrackUID attributes [...] UID [...] Required [...] Yes"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioTrackUID', + 'sampleRate', + '"audioTrackUID attributes [...] sampleRate [...] Required [...] Yes"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioTrackUID', + 'bitDepth', + '"audioTrackUID attributes [...] bitDepth [...] Required [...] Yes"' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioTrackFormat', + 'audioTrackFormatID', + '"audioTrackFormat attributes [...] audioTrackFormatID [...] Required [...] Yes"' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioTrackFormat', + 'audioTrackFormatName', + '"audioTrackFormat attributes [...] audioTrackFormatName [...] Required [...] Yes"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioTrackFormat', + 'formatLabel', + '"audioTrackFormat attributes [...] formatLabel [...] Required [...] Yes"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioTrackFormat', + 'formatDefinition', + '"audioTrackFormat attributes [...] formatDefinition [...] Required [...] Yes"' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioStreamFormat', + 'audioStreamFormatID', + '"audioStreamFormat attributes [...] audioStreamFormatID [...] Required [...] Yes"' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioStreamFormat', + 'audioStreamFormatName', + '"audioStreamFormat attributes [...] audioStreamFormatName [...] Required [...] Yes"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioStreamFormat', + 'formatLabel', + '"audioStreamFormat attributes [...] formatLabel [...] Required [...] Yes"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioStreamFormat', + 'formatDefinition', + '"audioStreamFormat attributes [...] formatDefinition [...] Required [...] Yes"' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioChannelFormat/audioBlockFormat', + 'audioBlockFormatID', + '"audioBlockFormat attributes [...] audioBlockFormatID [...] Required [...] Yes"' + ), + ] + ), + new Check( + '(attribute name) attribute is present (extra spec name if needed)', + 'Error', + [ + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioProgramme', + 'typeLabel', + '"Known issues with Dolby Atmos Master ADM files [...] audioProgramme [...] typeLabel [...] This attribute is present only in the appropriate elements"', + 'Update the encoder to write this element, then reencode the content.' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioContent', + 'typeLabel', + '"Known issues with Dolby Atmos Master ADM files [...] audioContent [...] typeLabel [...] This attribute is present only in the appropriate elements"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioTrackUID', + 'typeLabel', + '"Known issues with Dolby Atmos Master ADM files [...] audioTrackUID [...] typeLabel [...] This attribute is present only in the appropriate elements"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioTrackFormat', + 'typeLabel', + '"Known issues with Dolby Atmos Master ADM files [...] audioTrackFormat [...] typeLabel [...] This attribute is present only in the appropriate elements"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioTrackFormat', + 'typeDefinition', + '"Known issues with Dolby Atmos Master ADM files [...] audioTrackFormat [...] typeDefinition [...] This attribute is present only in the appropriate elements"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioStreamFormat', + 'typeLabel', + '"Known issues with Dolby Atmos Master ADM files [...] audioStreamFormat [...] typeLabel [...] This attribute is present only in the appropriate elements"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioStreamFormat', + 'typeDefinition', + '"Known issues with Dolby Atmos Master ADM files [...] audioStreamFormat [...] typeDefinition [...] This attribute is present only in the appropriate elements"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioChannelFormat/audioBlockFormat', + 'lstart', + 'audioBlockFormat requirements [...] rtime [...] This attribute shall not be used for DirectSpeakers type' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioChannelFormat/audioBlockFormat', + 'duration', + 'audioBlockFormat requirements [...] duration [...] This attribute shall not be used for DirectSpeakers type' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioChannelFormat/audioBlockFormat', + 'rtime', + 'This field is from S-ADM and not listed in the specification' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioChannelFormat/audioBlockFormat', + 'lduration', + 'This field is from S-ADM and not listed in the specification' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioChannelFormat/audioBlockFormat', + 'initializeBlock', + 'This field is from S-ADM and not listed in the specification' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioChannelFormat/audioBlockFormat/position', + 'bound', + 'This field is not listed in the spec' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioChannelFormat/audioBlockFormat/position', + 'screenEdgeLock', + '"The screenEdgeLock attribute of the position subelement shall not be used"' + ), + ] + ), + new Check( + '(element name) element is not present (extra spec name if needed)', + 'Error', + [ + new Reference( + 'ITU-R_BS.2076', + 'audioProgramme', + 'audioContentIDRef', + '"audioProgramme elements [...] audioContentIDRef [...] Quantity [...] 1...*"', + 'Update the encoder to write this element, then reencode the content.' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioContent', + 'audioObjectIDRef', + '"audioContent elements [...] audioObjectIDRef [...] Quantity [...] 1...*"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioContent', + 'dialogue', + '"audioContent elements [...] dialogue [...] Quantity [...] 1"', + 'Update the encoder to write this element, then reencode the content.' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioObject', + 'audioPackFormatIDRef', + '"audioObject elements [...] audioPackFormatIDRef [...] Quantity [...] 1"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioObject', + 'audioTrackUIDRef', + '"audioObject elements [...] audioTrackUIDRef [...] Quantity [...] 1 to"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioPackFormat', + 'audioChannelFormatIDRef', + '"audioPackFormat elements [...] audioChannelFormatIDRef [...] Quantity [...] 1 to"' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioChannelFormat', + 'audioChannelFormat/audioBlockFormat', + '"audioChannelFormat elements [...] audioBlockFormat [...] Quantity [...] 1...*"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioTrackUID', + 'audioTrackFormatIDRef', + '"audioTrackUID elements [...] audioTrackFormatIDRef [...] Quantity [...] 1"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioTrackUID', + 'audioPackFormatIDRef', + '"audioTrackUID elements [...] audioPackFormatIDRef [...] Quantity [...] 1"' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioTrackFormat', + 'audioStreamFormatIDRef', + '"audioTrackFormat elements [...] audioStreamFormatIDRef [...] Quantity [...] 1"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioStreamFormat', + 'audioChannelFormatIDRef', + '"audioStreamFormat elements [...] audioChannelFormatIDRef [...] Quantity [...] 1"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioStreamFormat', + 'audioPackFormatIDRef', + '"audioStreamFormat elements [...] audioPackFormatIDRef [...] Quantity [...] 1"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioStreamFormat', + 'audioTrackFormatIDRef', + '"audioStreamFormat elements [...] audioTrackFormatIDRef [...] Quantity [...] 1"' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioChannelFormat/audioBlockFormat', + 'cartesian', + '"audioBlockFormat elements [...] cartesian [...] Default [...] 0" with cartesian positions' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioChannelFormat/audioBlockFormat', + 'cartesian', + '"audioBlockFormat elements [...] cartesian [...] Quantity [...] 1"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioChannelFormat/audioBlockFormat', + 'speakerLabel', + '"audioBlockFormat elements [...] speakerLabel [...] Quantity [...] 1"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioChannelFormat/audioBlockFormat', + 'position', + '"audioBlockFormat Objects type subelement requirements [...] position [...] Quantity [...]" then "1" for "X" and "Y", "0 or 1" for Z' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioChannelFormat/audioBlockFormat', + 'position', + '"audioBlockFormat sub-elements [...] position [...] Default [...] (empty)"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioChannelFormat/audioBlockFormat', + 'width', + '"audioBlockFormat elements [...] width [...] Quantity [...] 1"' + ), + ] + ), + new Check( + '(element name) element is present (extra spec name if needed)', + 'Error', + [ + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioProgramme', + 'audioProgrammeLabel', + 'This field is from ADM v2 and not listed in the specification', + 'Update the encoder to write this element, then reencode the content.' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioProgramme', + 'authoringInformation', + 'This field is from ADM v2 and not listed in the specification' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioProgramme', + 'referenceLayout', + 'This field is from ADM v2 and not listed in the specification' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioProgramme', + 'audioPackFormatIDRef', + 'This field is from ADM v2 and not listed in the specification' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioProgramme', + 'alternativeValueSetIDRef', + 'This field is from ADM v2 and not listed in the specification' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioContent', + 'audioContentLabel', + 'This field is from ADM v2 and not listed in the specification' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioContent', + 'alternativeValueSetIDRef', + 'This field is from ADM v2 and not listed in the specification' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioObject', + 'audioObjectIDRef', + '"audioObject elements [...] audioObjectIDRef [...] Quantity [...] 0"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioObject', + 'audioObjectLabel', + 'This field is from ADM v2 and not listed in the specification' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioObject', + 'audioComplementaryObjectGroupLabel', + 'This field is from ADM v2 and not listed in the specification' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioObject', + 'audioComplementaryObjectIDRef', + '"audioObject elements [...] audioComplementaryObjectIDRef [...] Quantity [...] 0"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioObject', + 'audioObjectInteraction', + '"audioObject elements [...] audioObjectInteraction [...] Quantity [...] 0"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioObject', + 'gain', + 'This field is from ADM v2 and not listed in the specification' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioObject', + 'headLocked', + 'This field is from ADM v2 and not listed in the specification' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioObject', + 'positionOffset', + 'This field is from ADM v2 and not listed in the specification' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioObject', + 'mute', + 'This field is from ADM v2 and not listed in the specification' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioObject', + 'alternativeValueSet', + 'This field is from ADM v2 and not listed in the specification' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioPackFormat', + 'audioPackFormatIDRef', + '"audioPackFormat elements [...] audioPackFormatIDRef [...] Quantity [...] 0"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioPackFormat', + 'absoluteDistance', + '"audioPackFormat elements [...] absoluteDistance [...] Quantity [...] 0"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioPackFormat', + 'encodePackFormatIDRef', + '"audioPackFormat elements [...] encodePackFormatIDRef [...] Quantity [...] 0"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioPackFormat', + 'decodePackFormatIDRef', + '"audioPackFormat elements [...] decodePackFormatIDRef [...] Quantity [...] 0"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioPackFormat', + 'inputPackFormatIDRef', + '"audioPackFormat elements [...] inputPackFormatIDRef [...] Quantity [...] 0"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioPackFormat', + 'outputPackFormatIDRef', + '"audioPackFormat elements [...] outputPackFormatIDRef [...] Quantity [...] 0"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioPackFormat', + 'normalization', + '"audioPackFormat elements [...] normalization [...] Quantity [...] 0"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioPackFormat', + 'nfcRefDist', + '"audioPackFormat elements [...] nfcRefDist [...] Quantity [...] 0"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioPackFormat', + 'screenRef', + '"audioPackFormat elements [...] screenRef [...] Quantity [...] 0"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioChannelFormat', + 'frequency', + '"audioChannelFormat elements [...] frequency [...] Quantity [...] 0"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioTrackUID', + 'audioMXFLookUp', + '"audioTrackUID elements [...] audioMXFLookUp [...] Quantity [...] 0"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioTrackUID', + 'audioChannelFormatIDRef', + 'This field is from ADM v2 and not listed in the specification' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioChannelFormat/audioBlockFormat', + 'headLocked', + 'This field is from ADM v2 and not listed in the specification' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioChannelFormat/audioBlockFormat', + 'headphoneVirtualise', + 'This field is from ADM v2 and not listed in the specification' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioChannelFormat/audioBlockFormat', + 'outputChannelFormatIDRef', + '"audioBlockFormat elements [...] outputChannelFormatIDRef [...] Quantity [...] 0"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioChannelFormat/audioBlockFormat', + 'outputChannelIDRef,', + '"audioBlockFormat elements [...] outputChannelIDRef, [...] Quantity [...] 0"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioChannelFormat/audioBlockFormat', + 'jumpPosition', + '"audioBlockFormat elements [...] jumpPosition [...] Quantity [...] 0"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioChannelFormat/audioBlockFormat', + 'matrix', + '"audioBlockFormat elements [...] matrix [...] Quantity [...] 0"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioChannelFormat/audioBlockFormat', + 'coefficient', + '"audioBlockFormat elements [...] coefficient [...] Quantity [...] 0"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioChannelFormat/audioBlockFormat', + 'objectDivergence', + '"audioBlockFormat elements [...] objectDivergence [...] Quantity [...] 0"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioChannelFormat/audioBlockFormat', + 'equation', + '"audioBlockFormat elements [...] equation [...] Quantity [...] 0"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioChannelFormat/audioBlockFormat', + 'order', + '"audioBlockFormat elements [...] order [...] Quantity [...] 0"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioChannelFormat/audioBlockFormat', + 'degree', + '"audioBlockFormat elements [...] degree [...] Quantity [...] 0"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioChannelFormat/audioBlockFormat', + 'normalization', + '"audioBlockFormat elements [...] normalization [...] Quantity [...] 0"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioChannelFormat/audioBlockFormat', + 'nfcRefDist', + '"audioBlockFormat elements [...] nfcRefDist [...] Quantity [...] 0"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioChannelFormat/audioBlockFormat', + 'screenRef', + '"audioBlockFormat elements [...] screenRef [...] Quantity [...] 0"' + ), + ] + ), + new Check( + '(element name) element should not be present (extra spec name if needed)', + 'Warning', + [ + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioChannelFormat', + 'frequency', + '"audioChannelFormat subelement requirements [...] frequency [...] This subelement should not be used"', + 'Update the encoder to write this element, then reencode the content.' + ), + ] + ), + new Check( + '(subelement name) subelement count (subelement count) is not permitted, (min or max) is (max count) (extra spec name if needed)', + 'Error', + [ + new Reference( + 'ITU-R_BS.2076', + 'audioTrackFormat', + 'audioStreamFormatIDRef', + '"audioTrackFormat elements [...] audioStreamFormatIDRef [...] Quantity [...] 1"', + 'Update the encoder to write this element, then reencode the content.' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioChannelFormat/audioBlockFormat', + null, + '"audioChannelFormat subelement requirements [...] audioBlockFormat [...] 1 (for type DirectSpeakers)"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioProgramme', + 'loudnessMetadata', + '"audioProgramme elements [...] loudnessMetadata [...] Quantity [...] 0 or 1"', + 'Update the encoder to write this element, then reencode the content.' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioProgramme', + 'audioProgrammeReferenceScreen', + '"audioProgramme elements [...] audioProgrammeReferenceScreen [...] Quantity [...] 0 or 1"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioProgramme', + 'authoringInformation', + '"audioProgramme elements [...] authoringInformation [...] Quantity [...] 0 or 1"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioProgramme', + 'audioContentIDRef', + '"audioProgramme elements [...] audioContentIDRef [...] 1 to MAX_ELEMENT_COUNT"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioContent', + 'loudnessMetadata', + '"audioContent elements [...] loudnessMetadata [...] Quantity [...] 0 or 1"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioContent', + 'dialogue', + '"audioContent elements [...] dialogue [...] Quantity [...] 1"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioObject', + 'audioPackFormatIDRef', + '"audioObject elements [...] audioPackFormatIDRef [...] Quantity [...] 1"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioObject', + 'audioObjectInteraction', + '"audioObject elements [...] audioObjectInteraction [...] Quantity [...] 0 or 1"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioObject', + 'gain', + '"audioObject elements [...] gain [...] Quantity [...] 0 or 1"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioObject', + 'headLocked', + '"audioObject elements [...] headLocked [...] Quantity [...] 0 or 1"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioObject', + 'positionOffset', + '"audioObject elements [...] positionOffset [...] Quantity [...] 0 or 1"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioObject', + 'mute', + '"audioObject elements [...] mute [...] Quantity [...] 0 or 1"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioPackFormat', + 'absoluteDistance', + '"audioPackFormat elements [...] absoluteDistance [...] Quantity [...] 0 or 1"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioPackFormat', + 'inputPackFormatIDRef', + '"audioPackFormat elements [...] inputPackFormatIDRef [...] Quantity [...] 0 or 1"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioPackFormat', + 'outputPackFormatIDRef', + '"audioPackFormat elements [...] outputPackFormatIDRef [...] Quantity [...] 0 or 1"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioPackFormat', + 'normalization', + '"audioPackFormat elements [...] normalization [...] Quantity [...] 0 or 1"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioPackFormat', + 'nfcRefDist', + '"audioPackFormat elements [...] nfcRefDist [...] Quantity [...] 0 or 1"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioPackFormat', + 'screenRef', + '"audioPackFormat elements [...] screenRef [...] Quantity [...] 0 or 1"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioTrackUID', + 'audioMXFLookUp', + '"audioTrackUID elements [...] audioMXFLookUp [...] Quantity [...] 0 or 1"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioTrackUID', + 'audioTrackFormatIDRef', + '"audioTrackUID elements [...] audioTrackFormatIDRef [...] Quantity [...] 1"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioTrackUID', + 'audioChannelFormatIDRef', + '"audioTrackUID elements [...] audioChannelFormatIDRef [...] Quantity [...] 0 or 1"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioTrackUID', + 'audioPackFormatIDRef', + '"audioTrackUID elements [...] audioPackFormatIDRef [...] Quantity [...] 1"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioStreamFormat', + 'audioChannelFormatIDRef', + '"audioStreamFormat elements [...] audioChannelFormatIDRef [...] Quantity [...] 1"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioStreamFormat', + 'audioPackFormatIDRef', + '"audioStreamFormat elements [...] audioPackFormatIDRef [...] Quantity [...] 1"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioStreamFormat', + 'audioTrackFormatIDRef', + '"audioStreamFormat elements [...] audioTrackFormatIDRef [...] Quantity [...] 1"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioChannelFormat/audioBlockFormat', + 'gain', + '"audioBlockFormat elements [...] gain [...] Quantity [...] 0 or 1"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioChannelFormat/audioBlockFormat', + 'importance', + '"audioBlockFormat elements [...] importance [...] Quantity [...] 0 or 1"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioChannelFormat/audioBlockFormat', + 'headLocked', + '"audioBlockFormat elements [...] headLocked [...] Quantity [...] 0 or 1"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioChannelFormat/audioBlockFormat', + 'headphoneVirtualise', + '"audioBlockFormat elements [...] headphoneVirtualise [...] Quantity [...] 0 or 1"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioChannelFormat/audioBlockFormat', + 'speakerLabel', + '"audioBlockFormat elements [...] speakerLabel [...] Quantity [...] 1"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioChannelFormat/audioBlockFormat', + 'outputChannelFormatIDRef', + '"audioBlockFormat elements [...] outputChannelFormatIDRef [...] Quantity [...] 0 or 1"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioChannelFormat/audioBlockFormat', + 'outputChannelIDRef,', + '"audioBlockFormat elements [...] outputChannelIDRef, [...] Quantity [...] 0 or 1"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioChannelFormat/audioBlockFormat', + 'jumpPosition', + '"audioBlockFormat elements [...] jumpPosition [...] Quantity [...] 0 or 1"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioChannelFormat/audioBlockFormat', + 'matrix', + '"audioBlockFormat elements [...] matrix [...] Quantity [...] 0 or 1"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioChannelFormat/audioBlockFormat', + 'coefficient', + '"audioBlockFormat elements [...] coefficient [...] Quantity [...] 0 or 1"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioChannelFormat/audioBlockFormat', + 'width', + '"audioBlockFormat elements [...] width [...] Quantity [...] 1"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioChannelFormat/audioBlockFormat', + 'depth', + '"audioBlockFormat elements [...] depth [...] Quantity [...] 0 or 1"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioChannelFormat/audioBlockFormat', + 'height', + '"audioBlockFormat elements [...] height [...] Quantity [...] 0 or 1"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioChannelFormat/audioBlockFormat', + 'cartesian', + '"audioBlockFormat elements [...] cartesian [...] Quantity [...] 0 or 1"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioChannelFormat/audioBlockFormat', + 'diffuse', + '"audioBlockFormat elements [...] diffuse [...] Quantity [...] 0 or 1"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioChannelFormat/audioBlockFormat', + 'channelLock', + '"audioBlockFormat elements [...] channelLock [...] Quantity [...] 0 or 1"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioChannelFormat/audioBlockFormat', + 'zoneExclusion', + '"audioBlockFormat elements [...] zoneExclusion [...] Quantity [...] 0 or 1"' + ), + ] + ), + new Check( + '(element name) (topic name) value (actual value) is not permitted, permitted value(permitted values) (extra spec name if needed)', + 'Error', + [ + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioProgramme', + 'audioProgrammeID', + '"audioProgrammeID This attribute shall be APR_1001"', + 'Configure or update the encoder to write this value, then reencode the content.' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioChannelFormat/audioBlockFormat', + 'cartesian', + '"cartesian [...] 1/0 flag"' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioChannelFormat/audioBlockFormat', + 'depth', + '"depth [...] Relative Units (0 to 1)" or "depth [...] Ratio (0 to 1)"' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioChannelFormat/audioBlockFormat', + 'width', + '"width [...] Relative Units (0 to 1)" or "width [...] degrees (0 to 360)"' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioChannelFormat/audioBlockFormat', + 'height', + '"height [...] Relative Units (0 to 1)" or "height [...] degrees (0 to 360)"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioTrackUID', + 'UID', + '"UID [...] This attribute shall be ATU_nnnnnnnn, where nnnnnnnn is a unique hex value in range [0x00000001,0xFFFFFFFF]"', + 'Configure or update the encoder to write this value, then reencode the content.' + ), + ] + ), + new Check( + '(element name) element count (element count) is not permitted, (min or max) is (max count) (extra spec name if needed)', + 'Error', + [ + new Reference( + 'ITU-R_BS.2076', + 'audioProgramme', + null, + 'For min, common sense, entry point is audioProgramme', + 'Update the encoder to create an audioProgramme element, then reencode the content.' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioProgramme', + null, + '"XML element [...] Maximum count [...] audioProgramme [...] 1"', + 'Configure or update the encoder to conform to this limitation, then reencode the content.' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioContent', + null, + '"XML element [...] Maximum count [...] audioContent [...] MAX_ELEMENT_COUNT"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioObject', + null, + '"XML element [...] Maximum count [...] audioObject [...] MAX_ELEMENT_COUNT" or "objects (typeDefinition=”Objects”) [...] there shall be a maximum of 118 objects"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioPackFormat', + null, + '"XML element [...] Maximum count [...] audioPackFormat [...] MAX_ELEMENT_COUNT"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioChannelFormat', + null, + '"XML element [...] Maximum count [...] audioChannelFormat [...] MAX_CHANNEL_COUNT"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioStreamFormat', + null, + '"XML element [...] Maximum count [...] audioStreamFormat [...] MAX_CHANNEL_COUNT"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioTrackFormat', + null, + '"XML element [...] Maximum count [...] audioTrackFormat [...] MAX_CHANNEL_COUNT"' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioTrackUID', + null, + '"XML element [...] Maximum count [...] audioTrackUID [...] MAX_CHANNEL_COUNT"' + ), + ], + [ 'General_compliance'] + ), + new Check( + '(element name) value (element value) shall match the (target attribue name) attribute of an (target element name) element', + 'Error', + [ + new Reference( + 'ITU-R_BS.2076', + 'audioProgramme', + 'audioContentIDRef', + 'Common sense: impossible to know what to do with the content without its description', + 'Update the encoder to write the expected content, then reencode the content.' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioProgramme', + 'audioPackFormatIDRef', + 'Common sense: impossible to know what to do with the content without its description' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioProgramme', + 'alternativeValueSetIDRef', + 'Common sense: impossible to know what to do with the content without its description' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioContent', + 'audioObjectIDRef', + 'Common sense: impossible to know what to do with the content without its description' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioContent', + 'alternativeValueSetIDRef', + 'Common sense: impossible to know what to do with the content without its description' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioObject', + 'audioPackFormatIDRef', + 'Common sense: impossible to know what to do with the content without its description' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioObject', + 'audioObjectIDRef', + 'Common sense: impossible to know what to do with the content without its description' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioObject', + 'audioComplementaryObjectIDRef', + 'Common sense: impossible to know what to do with the content without its description' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioObject', + 'audioTrackUIDRef', + 'Common sense: impossible to know what to do with the content without its description' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioObject', + 'audioComplementaryObjectIDRef', + 'Common sense: impossible to know what to do with the content without its description' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioObject', + 'audioTrackUIDRef', + 'Common sense: impossible to know what to do with the content without its description' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioPackFormat', + 'audioChannelFormatIDRef', + 'Common sense: impossible to know what to do with the content without its description' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioPackFormat', + 'encodePackFormatIDRef', + 'Common sense: impossible to know what to do with the content without its description' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioPackFormat', + '', + 'Common sense: impossible to know what to do with the content without its description' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioPackFormat', + 'decodePackFormatIDRef', + 'Common sense: impossible to know what to do with the content without its description' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioPackFormat', + 'inputPackFormatIDRef', + 'Common sense: impossible to know what to do with the content without its description' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioPackFormat', + 'outputPackFormatIDRef', + 'Common sense: impossible to know what to do with the content without its description' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioTrackUID', + 'audioTrackFormatIDRef', + 'Common sense: impossible to know what to do with the content without its description' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioTrackUID', + 'audioChannelFormatIDRef', + 'Common sense: impossible to know what to do with the content without its description' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioTrackUID', + 'audioPackFormatIDRef', + 'Common sense: impossible to know what to do with the content without its description' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioTrackFormat', + 'audioStreamFormatIDRef', + 'Common sense: impossible to know what to do with the content without its description' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioStreamFormat', + 'audioChannelFormatIDRef', + 'Common sense: impossible to know what to do with the content without its description' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioStreamFormat', + 'audioPackFormatIDRef', + 'Common sense: impossible to know what to do with the content without its description' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioStreamFormat', + 'audioTrackFormatIDRef', + 'Common sense: impossible to know what to do with the content without its description' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioChannelFormat/audioBlockFormat', + 'outputChannelFormatIDRef', + 'Common sense: impossible to know what to do with the content without its description' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioChannelFormat/audioBlockFormat', + 'outputChannelIDRef', + 'Common sense: impossible to know what to do with the content without its description' + ), + ] + ), + new Check( + '(element name) value (element value) shall be unique', + 'Error', + [ + new Reference( + 'ITU-R_BS.2076', + 'audioProgramme', + 'audioProgrammeID', + '"Use of IDs [...] provide a unique identification"', + 'Update the encoder to avoid duplicate ID values, then reencode the content.' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioContent', + 'audioContentID', + '"Use of IDs [...] provide a unique identification"' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioObject', + 'audioObjectID', + '"Use of IDs [...] provide a unique identification"' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioPackFormat', + 'audioPackFormatID', + '"Use of IDs [...] provide a unique identification"' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioChannelFormat', + 'audioChannelFormatID', + '"Use of IDs [...] provide a unique identification"' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioTrackUID', + 'UID', + '"Use of IDs [...] provide a unique identification"' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioTrackFormat', + 'audioTrackFormatID', + '"Use of IDs [...] provide a unique identification"' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioStreamFormat', + 'audioStreamFormatID', + '"Use of IDs [...] provide a unique identification"' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioChannelFormat/audioBlockFormat', + 'audioBlockFormatID', + '"Use of IDs [...] provide a unique identification"' + ), + ] + ), + new Check( + '(attribute name) attribute with (substring) value (attribute value) not same as (attribute name) attribute (substring) value (attribute value) (extra spec name if needed)', + 'Error', + [ + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioChannelFormat/audioBlockFormat', + 'audioBlockFormatID', + '"audioBlockFormat requirements [...] audioBlockFormatID [...] where xxxx is a unique hex value matching the parent audioChannelFormat value"', + 'Update the encoder to write the expected content, then reencode the content.' + ), + ] + ), + new Check( + '(attribute name) attribute with (substring) value (attribute value) not same as (attribute name) attribute (substring) value (attribute value)', + 'Warning', + [ + new Reference( + 'ITU-R_BS.2076', + 'audioChannelFormat/audioBlockFormat', + 'audioBlockFormatID', + '"In audioBlockFormat [...] The yyyyxxxx values should match those of the parent audioChannelFormat ID"', + 'Update the encoder to write the expected content, then reencode the content.' + ), + ] + ), + new Check( + '(subelement name) subelement with (substring) value (subelement value) not same as (attribute name) attribute (substring) value (attribute value) (extra spec name if needed)', + 'Error', + [ + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioStreamFormat', + 'audioChannelFormatIDRef', + '"audioPackFormat subelement [...] audioChannelFormatIDRef [...] This subelement shall match the audioChannelFormatID of the corresponding audioChannelFormat"', + 'Update the encoder to write the expected content, then reencode the content.' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioTrackFormat', + 'audioStreamFormatIDRef', + '"audioTrackFormat subelement [...] audioStreamFormatIDRef [...] This subelement shall match the audioStreamFormatID of the corresponding audioStreamFormat"' + ), + ] + ), + new Check( + '(subelement name) subelement with (substring) value (subelement value) not same as (attribute name) attribute (substring) value (attribute value)', + 'Warning', + [ + new Reference( + 'ITU-R_BS.2076', + 'audioStreamFormat', + 'audioChannelFormatIDRef', + '"audioStreamFormat attributes [...] audioStreamFormatID [...] The xxxx digits should match the audioChannelFormat xxxx digits."', + 'Update the encoder to write the expected content, then reencode the content.' + ), + ] + ), + new Check( + '(attribute name) attribute value (attribute value) is not a valid form ((the valid form))', + 'Error', + [ + new Reference( + 'ITU-R_BS.2076', + 'audioTrackFormat', + 'formatLabel', + '"typeDefinitions [...] typeLabel [...] to Fyyy"', + 'Update the encoder to write the expected content, then reencode the content.' + ), + ] + ), + new Check( + '(attribute name) attribute value (attribute value) is not a known value', + 'Warning', + [ + new Reference( + 'ITU-R_BS.2076', + 'audioPackFormat', + 'typeLabel', + '"typeDefinitions [...] typeDefinition [...] typeLabel" (table with a list of known values)', + 'Check that this is intended' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioPackFormat', + 'formatDefinition', + '"typeDefinitions [...] typeDefinition [...] typeLabel" (table with a list of known values)' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioChannelFormat', + 'typeLabel', + '"typeDefinitions [...] typeDefinition [...] typeLabel" (table with a list of known values)' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioChannelFormat', + 'formatDefinition', + '"typeDefinitions [...] typeDefinition [...] typeLabel" (table with a list of known values)', + 'Check that this is intended' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioTrackFormat', + 'typeLabel', + '"typeDefinitions [...] typeDefinition [...] typeLabel" (table with a list of known values)' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioTrackFormat', + 'formatDefinition', + '"typeDefinitions [...] typeDefinition [...] typeLabel" (table with a list of known values)', + 'Check that this is intended' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioStreamFormat', + 'typeLabel', + '"typeDefinitions [...] typeDefinition [...] typeLabel" (table with a list of known values)' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioStreamFormat', + 'formatDefinition', + '"typeDefinitions [...] typeDefinition [...] typeLabel" (table with a list of known values)', + 'Check that this is intended' + ), + ] + ), + new Check( + '(attribute name) attribute value (attribute value) shall be (expected value) in order to match the term corresponding to (other attribute name) attribute value (other attribute value)', + 'Error', + [ + new Reference( + 'ITU-R_BS.2076', + 'audioPackFormat', + 'typeLabel', + '"typeDefinitions [...] typeDefinition [...] typeLabel" (table with both value on the same line)', + 'Update the encoder to write the expected content, then reencode the content.' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioPackFormat', + 'typeDefinition', + '"typeDefinitions [...] typeDefinition [...] typeLabel" (table with both value on the same line)' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioChannelFormat', + 'typeLabel', + '"typeDefinitions [...] typeDefinition [...] typeLabel" (table with both value on the same line)' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioChannelFormat', + 'typeDefinition', + '"typeDefinitions [...] typeDefinition [...] typeLabel" (table with both value on the same line)' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioTrackFormat', + 'formatLabel', + '"formatDefinitions [...] formatDefinition [...] formatLabel" (table with both value on the same line)' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioTrackFormat', + 'formatDefinition', + '"formatDefinitions [...] formatDefinition [...] formatLabel" (table with both value on the same line)' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioStreamFormat', + 'formatLabel', + '"formatDefinitions [...] formatDefinition [...] formatLabel" (table with both value on the same line)' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioStreamFormat', + 'formatDefinition', + '"formatDefinitions [...] formatDefinition [...] formatLabel" (table with both value on the same line)' + ), + ] + ), + new Check( + '(attribute name) attribute value (attribute value) is not permitted, permitted value(permitted values) (extra spec name if needed)', + 'Error', + [ + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioPackFormat', + 'typeLabel', + '"audioPackFormat attribute requirements [...] typeLabel [...] This attribute shall be either 0001 or 0003"', + 'Configure or update the encoder to write the expected content, then reencode the content.' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioPackFormat', + 'formatDefinition', + '"audioPackFormat attribute requirements [...] formatDefinition [...] This attribute shall be either DirectSpeakers or Objects."' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioChannelFormat', + 'typeLabel', + '"audioChannelFormat attribute requirements [...] typeLabel [...] The label shall be either 0001 or 0003."', + 'Configure or update the encoder to write the expected content, then reencode the content.' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioChannelFormat', + 'formatDefinition', + '"audioChannelFormat attribute requirements [...] formatDefinition [...] The definition shall be either DirectSpeakers or Objects"', + 'Configure or update the encoder to write the expected content, then reencode the content.' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioTrackFormat', + 'formatLabel', + '"audioTrackFormat attribute requirements [...] formatLLabel [...] This label shall be 0001"', + 'Configure or update the encoder to write the expected content, then reencode the content.' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioTrackFormat', + 'formatDefinition', + '"audioTrackFormat attribute requirements [...] formatDefinition [...] This definition shall be PCM"', + 'Configure or update the encoder to write the expected content, then reencode the content.' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioStreamFormat', + 'formatLabel', + '"audioStreamFormat attribute requirements [...] formatLabel [...] This label shall be 0001"', + 'Configure or update the encoder to write the expected content, then reencode the content.' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioStreamFormat', + 'formatDefinition', + '"audioStreamFormat attribute requirements [...] formatDefinition [...] This definition shall be PCM"', + 'Configure or update the encoder to write the expected content, then reencode the content.' + ), + ] + ), + new Check( + '(subelement name) order (computed target order) is not permitted (extra spec name if needed)', + 'Error', + [ + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioPackFormat', + 'audioChannelFormatIDRef', + '"only certain channel configuration sets shall be used, with each set having a specific ordering of channels"', + 'Configure or update the encoder to write the expected content, then reencode the content.' + ), + ] + ), + new Check( + '(attribute name) attribute value (attribute value) is long (extra spec name if needed)', + 'Warning', + [ + new Reference( + 'ITU-R_BS.2076', + 'audioProgramme', + 'audioProgrammeName', + 'Common sense: it is difficult to display it in an UI', + 'Configure the encoder to write a shorter name, then reencode the content.' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioContent', + 'audioContentName', + 'Common sense: it is difficult to display it in an UI' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioObject', + 'audioObjectName', + 'Common sense: it is difficult to display it in an UI' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioPackFormat', + 'audioPackFormatName', + 'Common sense: it is difficult to display it in an UI' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioChannelFormat', + 'audioChannelFormatName', + 'Common sense: it is difficult to display it in an UI' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioTrackFormat', + 'audioTrackFormatName', + 'Common sense: it is difficult to display it in an UI' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioStreamFormat', + 'audioStreamFormatName', + 'Common sense: it is difficult to display it in an UI' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioProgramme', + 'audioProgrammeName', + '"audioProgramme attribute requirements" [...] audioProgrammeName [...] max length should not exceed 64 chars', + 'Configure the encoder to write a shorter name, then reencode the content.' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioContent', + 'audioContentName', + '"audioContent attribute requirements" [...] audioProgrammeName [...] max length should not exceed 64 chars' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioObject', + 'audioObjectName', + '"audioObject attribute requirements" [...] audioProgrammeName [...] max length should not exceed 64 chars' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioPackFormat', + 'audioPackFormatName', + '"audioPackFormat attribute requirements" [...] audioProgrammeName [...] max length should not exceed 64 chars' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioChannelFormat', + 'audioChannelFormatName', + '"audioChannelFormat attribute requirements" [...] audioProgrammeName [...] max length should not exceed 64 chars' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioTrackFormat', + 'audioTrackFormatName', + '"audioTrackFormat attribute requirements" [...] audioProgrammeName [...] max length should not exceed 64 chars' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioStreamFormat', + 'audioStreamFormatName', + '"audioStreamFormat attribute requirements" [...] audioProgrammeName [...] max length should not exceed 64 chars' + ), + ] + ), + new Check( + '(attribute name) attribute is present but empty', + 'Error', + [ + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioProgramme', + 'audioProgrammeName', + '"audioProgramme attribute requirements" [...] audioProgrammeName [...] Min length 1 char', + 'Configure the encoder to write a relevant name, then reencode the content.' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioContent', + 'audioContentName', + '"audioContent attribute requirements" [...] audioProgrammeName [...] Min length 1 char' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioObject', + 'audioObjectName', + '"audioObject attribute requirements" [...] audioProgrammeName [...] Min length 1 char' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioPackFormat', + 'audioPackFormatName', + '"audioPackFormat attribute requirements" [...] audioProgrammeName [...] Min length 1 char' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioChannelFormat', + 'audioChannelFormatName', + '"audioChannelFormat attribute requirements" [...] audioProgrammeName [...] Min length 1 char' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioTrackFormat', + 'audioTrackFormatName', + '"audioTrackFormat attribute requirements" [...] audioProgrammeName [...] Min length 1 char' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioStreamFormat', + 'audioStreamFormatName', + '"audioStreamFormatName attribute requirements" [...] audioProgrammeName [...] Min length 1 char' + ), + ] + ), + new Check( + '(attribute name) attribute is present but empty', + 'Warning', + [ + new Reference( + 'ITU-R_BS.2076', + 'audioProgramme', + 'audioProgrammeName', + 'Common sense: it is not useful for the operator to have an empty value', + 'Configure the encoder to write a relevant name, then reencode the content.' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioContent', + 'audioContentName', + 'Common sense: it is not useful for the operator to have an empty value' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioObject', + 'audioObjectName', + 'Common sense: it is not useful for the operator to have an empty value' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioPackFormat', + 'audioPackFormatName', + 'Common sense: it is not useful for the operator to have an empty value' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioChannelFormat', + 'audioChannelFormatName', + 'Common sense: it is not useful for the operator to have an empty value' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioTrackFormat', + 'audioTrackFormatName', + 'Common sense: it is not useful for the operator to have an empty value' + ), + new Reference( + 'ITU-R_BS.2076', + 'audioStreamFormat', + 'audioStreamFormatName', + 'Common sense: it is not useful for the operator to have an empty value' + ), + ] + ), + new Check( + '(element name) element value (element value) does not match corresponding(element name) element value (element value) (extra spec name if needed)', + 'Error', + [ + new Reference( + 'ITU-R_BS.2076', + 'audioChannelFormat/audioBlockFormat', + 'position' + ), + ] + ), + new Check( + '(element names) element values are not same (extra spec name if needed)', + 'Error', + [ + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioChannelFormat/audioBlockFormat', + null, + '"If any size sub-elements [width, depth, height] are present, then all three sub-elements must be present and set to the same value"', + 'Configure the encoder to write a same values, then reencode the content.' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioChannelFormat/audioBlockFormat', + 'width' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioChannelFormat/audioBlockFormat', + 'height' + ), + new Reference( + 'Dolby_Atmos_Master_ADM_Profile', + 'audioChannelFormat/audioBlockFormat', + 'depth' + ), + ] + ), ]; $GLOBALS['dbFormatToSpecs'] = @@ -1126,6 +2957,12 @@ public function __construct($specId = null, $elementId = null, $fieldId = null, 'E-AC-3' => [ 'ETSI_TS_102_366' ], 'MP4' => [ 'ISO_IEC_14496-1', 'ISO_IEC_14496-3', 'ISO_IEC_14496-12' ], 'USAC' => [ 'ISO_IEC_23003-3', 'ISO_IEC_23003-4' ], + 'ADM' => [ 'ITU-R_BS.2076', 'Dolby_Atmos_Master_ADM_Profile' ], +]; + +$GLOBALS['dbProfileToSpec'] = +[ + 'Dolby_Atmos_Master_ADM_Profile' => 'ITU-R_BS.2076', ]; function is_spec_in_formats($specId, $formats) @@ -1143,17 +2980,24 @@ function is_spec_in_formats($specId, $formats) /** * @SuppressWarnings(PHPMD.CyclomaticComplexity) + * @SuppressWarnings(PHPMD.NPathComplexity) */ function get_references($checkId, $urlPrefix, $formats = null, $elementId = null, $fieldId = null) { $dbSpecs = (new Specs)->getSpecs(); global $dbChecks; + global $dbProfileToSpec; foreach ($dbChecks[$checkId]->references as $checkToDetail) { if ((!$formats || is_spec_in_formats($checkToDetail->specId, $formats)) && (!$elementId || $elementId == end(explode('/', $checkToDetail->elementId))) && (!$fieldId || $fieldId == $checkToDetail->fieldId)) { $spec = $dbSpecs[$checkToDetail->specId]; if ($spec) { - $url = $urlPrefix . 'Specs/' . $checkToDetail->specId; + $url = $urlPrefix . 'Specs/'; + if (array_key_exists($checkToDetail->specId, $dbProfileToSpec)) { + $url .= $dbProfileToSpec[$checkToDetail->specId]; + } else { + $url .= $checkToDetail->specId; + } $name = $checkToDetail->specId; $description = null; if ($checkToDetail->elementId) { @@ -1189,7 +3033,7 @@ function get_references($checkId, $urlPrefix, $formats = null, $elementId = null } foreach ($temp as $key => $value) { - $references[] = [ '' . str_replace('_', ' ', $key) . ' (' . $dbSpecs[$key]->shortName . ')', $value ]; + $references[] = [ '' . str_replace('_', ' ', $key) . '' . ($dbSpecs[$key]->shortName ? (' (' . $dbSpecs[$key]->shortName . ')') : ''), $value ]; } return $references; @@ -1334,48 +3178,76 @@ function map_messages_to_references($formats, $groupId, $elementId, $fieldId, $m * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ -function manage_conformance($formats, $conformance) +function manage_conformance_per_key($formats, $key0, $error0) { $data = []; - foreach ($conformance as $key0 => $error0) { - if (is_object($error0)) { - foreach ($error0 as $key1 => $error1) { - if (is_object($error1)) { - foreach ($error1 as $key2 => $error2) { - if (is_object($error2)) { - // Not supported - } else { - foreach ($error1 as $key2 => $error2) { - if ($key0 == "Crosscheck") { - $groupId = $key0; - $pos2 = strpos($error2, ' '); - if ($pos2 !== false) { - $formats2 = [ substr($error2, 0, $pos2) ]; - } else { - $formats2 = null; - } - $elementId = ''; + + if (is_object($error0)) { + foreach ($error0 as $key1 => $error1) { + unset($groupId); + if (is_object($error1)) { + foreach ($error1 as $key2 => $error2) { + if (is_object($error2)) { + // Not supported + } else { + foreach ($error1 as $key2 => $error2) { + if ($key0 == "Crosscheck") { + $groupId = $key0; + $pos2 = strpos($error2, ' '); + if ($pos2 !== false) { + $formats2 = [ substr($error2, 0, $pos2) ]; } else { - $elementId = $key0 . '/'; - $formats2 = $formats; + $formats2 = null; } - $elementId .= $key1; - array_push($data, ...map_messages_to_references($formats2, $groupId, $elementId, $key2, $error2)); + $elementId = ''; + } else { + $elementId = $key0 . '/'; + $formats2 = $formats; } + $elementId .= $key1; + array_push($data, ...map_messages_to_references($formats2, $groupId, $elementId, $key2, $error2)); } } + } + } else { + if ($key1 == 'GeneralCompliance' || $key1 == 'General' || $key1 == 'Coherency') { + $groupId = 'General_compliance'; + $fieldId = null; } else { - if ($key1 == 'GeneralCompliance' || $key1 == 'Coherency') { - $groupId = 'General_compliance'; - $fieldId = null; + $fieldId = $key1; + } + array_push($data, ...map_messages_to_references($formats, $groupId, $key0, $fieldId, $error1)); + } + } + } else { + array_push($data, ...map_messages_to_references($formats, null, $key0, null, $error0)); + } + + return $data; +} + +/** + * @SuppressWarnings(PHPMD.CyclomaticComplexity) + */ + +function manage_conformance($formats, $conformance) +{ + $data = []; + foreach ($conformance as $key0 => $error0) { + if (is_array($error0)) { + foreach ($error0 as $error0Value) { + foreach ($error0Value as $key1 => $error1) { + if (is_array($error1)) { + foreach ($error1 as $error1Value) { + array_push($data, ...manage_conformance_per_key($formats, $key1, $error1Value)); + } } else { - $fieldId = $key1; + array_push($data, ...manage_conformance_per_key($formats, $key0, $error1)); } - array_push($data, ...map_messages_to_references($formats, $groupId, $key0, $fieldId, $error1)); } } } else { - array_push($data, ...map_messages_to_references($formats, null, $key0, null, $error0)); + array_push($data, ...manage_conformance_per_key($formats, $key0, $error0)); } } @@ -1411,7 +3283,7 @@ public function analyzeMediaInfoReport($miReport) $checks [count($checks)-1] .= $sub; } } - if ($pos2 != $testLen && $check->description[$pos2 + 6] == '(') { + if ($pos2 != $testLen && ($check->description[$pos2 + 6] == '(' || ($check->description[$pos2 + 6] == ' ' && $check->description[$pos2 + 7] == '('))) { $pos = strpos($check->description, ')', $pos2 + 1); if ($pos === false) { break; @@ -1441,15 +3313,27 @@ public function analyzeMediaInfoReport($miReport) $data = []; foreach (json_decode($miReport) as $media) { foreach ($media as $tracks) { + unset($isNotFirst); foreach ($tracks as $track) { - if ($track->{'@type'} == "General") { + if (!isset($isNotFirst) || $track->{'@type'} == "General") { $generalFormat = $track->Format; if ($generalFormat == "MPEG-4") { $generalFormat = "MP4"; } } + $isNotFirst = true; if ($track->extra) { $formats = []; + if (isset($track->extra) && isset($track->extra->Metadata_Format)) { + $metadataFormat = $track->extra->Metadata_Format; + $metadataFormatPos = strpos($metadataFormat, ","); + if ($metadataFormatPos !== false) { + $metadataFormat = substr($metadataFormat, 0, $metadataFormatPos); + if ($metadataFormat != $track->Format) { + $formats [] = $metadataFormat; + } + } + } $formats [] = $track->Format; if ($generalFormat != $track->Format) { $formats [] = $generalFormat; @@ -1543,12 +3427,14 @@ public function listCheckInfo($checkId) public static function getSpecChecks($specId) { global $dbChecks; - + global $dbProfileToSpec; + // Checks foreach ($dbChecks as $checkId => $check) { foreach ($check->references as $reference) { - if ($reference->specId == $specId) { - $references[] = '' . $check->description . ''; + if ($reference->specId == $specId || $dbProfileToSpec[$reference->specId] == $specId) { + $references[] = '' . $check->description . '' . ($reference->specId == $specId ? '' : (' (' . str_replace('_', ' ', $reference->specId) . ' addition)')); + break; } } } @@ -1559,7 +3445,8 @@ public static function getSpecChecks($specId) public static function getSpecElementChecks($specId, $elementId, $urlPrefix) { global $dbChecks; - + global $dbProfileToSpec; + // Checks $urlPrefix = ' $check) { foreach ($check->references as $reference) { - if ($reference->specId == $specId && $reference->elementId == $elementId) { - $checks[] = $urlPrefix . $checkID . '">' . $check->description . ''; + if (($reference->specId == $specId || $dbProfileToSpec[$reference->specId] == $specId) && $reference->elementId == $elementId) { + $checks[] = $urlPrefix . $checkID . '">' . $check->description . '' . ($reference->specId == $specId ? '' : (' (' . str_replace('_', ' ', $reference->specId) . ' addition)')); + break; } } } @@ -1586,13 +3474,15 @@ public static function getSpecElementChecks($specId, $elementId, $urlPrefix) public static function getSpecFieldChecks($specId, $elementId, $fieldId, $urlPrefix) { global $dbChecks; - + global $dbProfileToSpec; + // Checks $urlPrefix = '' . $check->description . ''; + if (($reference->specId == $specId || $dbProfileToSpec[$reference->specId] == $specId) && $reference->elementId == $elementId && $reference->fieldId == $fieldId) { + $checks[] = $urlPrefix . $checkID . '">' . $check->description . '' . ($reference->specId == $specId ? '' : (' (' . str_replace('_', ' ', $reference->specId) . ' addition)')); + break; } } } diff --git a/src/MediaConchBundle/Lib/Checks/Specs.php b/src/MediaConchBundle/Lib/Checks/Specs.php index 28da2f2d..b9c57e50 100644 --- a/src/MediaConchBundle/Lib/Checks/Specs.php +++ b/src/MediaConchBundle/Lib/Checks/Specs.php @@ -458,6 +458,495 @@ public function __construct($description = null) ], 1 ), + 'ITU-R_BS.2076' => new Spec( + "-2", + "ADM", + 'Audio Definition Model', + false, + '//www.itu.int/rec/R-REC-BS.2076', + 'This Recommendation describes the structure of a metadata model that allows the format and content of audio files to be reliably described. This model, called the Audio Definition Model (ADM), specifies how XML metadata can be generated to provide the definitions of tracks in an audio file', + [ + 'audioProgramme' => new Element( + 'An audioProgramme element refers to a set of one or more audioContents that are combined to create a full audio programme', + [ + 'audioProgrammeID' => new Field( + '(Attribute) ID of the programme' + ), + 'audioProgrammeName' => new Field( + '(Attribute) Name of the programme' + ), + 'audioProgrammeLanguage' => new Field( + '(Attribute) Language of the dialogue content contained in this programme' + ), + 'start' => new Field( + '(Attribute) Start time for the programme' + ), + 'end' => new Field( + '(Attribute) End time for the programme' + ), + 'typeLabel' => new Field( + '(Attribute) (Unused)' + ), + 'typeDefinition' => new Field( + '(Attribute) (Unused)' + ), + 'typeLink' => new Field( + '(Attribute) (Unused)' + ), + 'typeLanguage' => new Field( + '(Attribute) (Unused)' + ), + 'formatLabel' => new Field( + '(Attribute) (Unused)' + ), + 'formatDefinition' => new Field( + '(Attribute) (Unused)' + ), + 'formatLink' => new Field( + '(Attribute) (Unused)' + ), + 'formatLanguage' => new Field( + '(Attribute) (Unused)' + ), + 'maxDuckingDepth' => new Field( + '(Attribute) Indicates the maximum amount of automatic ducking allowed for every audioObject in the programme' + ), + 'audioProgrammeLabel' => new Field( + 'Definition of audioProgramme label' + ), + 'audioContentIDRef' => new Field( + 'Reference to content' + ), + 'loudnessMetadata' => new Field( + 'The audio could be corrected or normalized by numerous means, relating to loudness algorithm, regional recommended practice followed, and by what correction type' + ), + 'integratedLoudness' => new Field( + '(loudnessMetadata) Integrated loudness value' + ), + 'audioProgrammeReferenceScreen' => new Field( + 'Specification of a reference/ production/monitoring screen size for the audioProgramme,' + ), + 'authoringInformation' => new Field( + '' + ), + 'referenceLayout' => new Field( + '(authoringInformation) (Attribute) The reference layout describes the loudspeaker layout for which the content of the audioProgramme was originally produced for' + ), + 'audioPackFormatIDRef' => new Field( + '(authoringInformation) Reference to an audioPackFormat used as the reference layout during production' + ), + 'alternativeValueSetIDRef' => new Field( + 'Reference to an alternativeValueSet within an audioObject' + ), + ] + ), + 'audioContent' => new Element( + '', + [ + 'audioContentID' => new Field( + '(Attribute) ' + ), + 'audioContentName' => new Field( + '(Attribute) ' + ), + 'audioContentLanguage' => new Field( + '(Attribute) ' + ), + 'typeLabel' => new Field( + '(Attribute) ' + ), + 'audioContentLabel' => new Field( + '' + ), + 'audioObjectIDRef' => new Field( + '' + ), + 'loudnessMetadata' => new Field( + '' + ), + 'loudnessMetadata_integratedLoudness' => new Field( + '' + ), + 'dialogue' => new Field( + '' + ), + 'alternativeValueSetIDRef' => new Field( + '' + ), + ] + ), + 'audioObject' => new Element( + '', + [ + 'audioObjectID' => new Field( + '(Attribute) ' + ), + 'audioObjectName' => new Field( + '(Attribute) ' + ), + 'start' => new Field( + '(Attribute) ' + ), + 'startTime' => new Field( + '(Attribute) ' + ), + 'duration' => new Field( + '(Attribute) ' + ), + 'dialogue' => new Field( + '(Attribute) ' + ), + 'importance' => new Field( + '(Attribute) ' + ), + 'interact' => new Field( + '(Attribute) ' + ), + 'disableDucking' => new Field( + '(Attribute) ' + ), + 'typeLabel' => new Field( + '(Attribute) ' + ), + 'audioPackFormatIDRef' => new Field( + '' + ), + 'audioObjectIDRef' => new Field( + '' + ), + 'audioObjectLabel' => new Field( + '' + ), + 'audioComplementaryObjectGroupLabel' => new Field( + '' + ), + 'audioComplementaryObjectIDRef' => new Field( + '' + ), + 'audioTrackUIDRef' => new Field( + '' + ), + 'audioObjectInteraction' => new Field( + '' + ), + 'gain' => new Field( + '' + ), + 'headLocked' => new Field( + '' + ), + 'positionOffset' => new Field( + '' + ), + 'mute' => new Field( + '' + ), + 'alternativeValueSet' => new Field( + '' + ), + ] + ), + 'audioPackFormat' => new Element( + '', + [ + 'audioPackFormatID' => new Field( + '(Attribute) ' + ), + 'audioPackFormatName' => new Field( + '(Attribute) ' + ), + 'typeDefinition' => new Field( + '(Attribute) ' + ), + 'typeLabel' => new Field( + '(Attribute) ' + ), + 'typeLink' => new Field( + '(Attribute) ' + ), + 'typeLanguage' => new Field( + '(Attribute) ' + ), + 'importance' => new Field( + '(Attribute) ' + ), + 'audioChannelFormatIDRef' => new Field( + '' + ), + 'audioPackFormatIDRef' => new Field( + '' + ), + 'absoluteDistance' => new Field( + '' + ), + 'encodePackFormatIDRef' => new Field( + '' + ), + 'decodePackFormatIDRef' => new Field( + '' + ), + 'inputPackFormatIDRef' => new Field( + '' + ), + 'outputPackFormatIDRef' => new Field( + '' + ), + 'normalization' => new Field( + '' + ), + 'nfcRefDist' => new Field( + '' + ), + 'screenRef' => new Field( + '' + ), + ] + ), + 'audioChannelFormat' => new Element( + '', + [ + 'audioChannelFormatID' => new Field( + '(Attribute) ' + ), + 'audioChannelFormatName' => new Field( + '(Attribute) ' + ), + 'typeDefinition' => new Field( + '(Attribute) ' + ), + 'typeLabel' => new Field( + '(Attribute) ' + ), + 'typeLink' => new Field( + '(Attribute) ' + ), + 'typeLanguage' => new Field( + '(Attribute) ' + ), + 'audioBlockFormat' => new Field( + '' + ), + 'frequency' => new Field( + '' + ), + ] + ), + 'audioTrackUID' => new Element( + '', + [ + 'UID' => new Field( + '(Attribute) ' + ), + 'sampleRate' => new Field( + '(Attribute) ' + ), + 'bitDepth' => new Field( + '(Attribute) ' + ), + 'typeLabel' => new Field( + '(Attribute) ' + ), + 'audioMXFLookUp' => new Field( + '' + ), + 'audioTrackFormatIDRef' => new Field( + '' + ), + 'audioChannelFormatIDRef' => new Field( + '' + ), + 'audioPackFormatIDRef' => new Field( + '' + ), + ] + ), + 'audioTrackFormat' => new Element( + '', + [ + 'audioTrackFormatID' => new Field( + '(Attribute) ' + ), + 'audioTrackFormatName' => new Field( + '(Attribute) ' + ), + 'typeLabel' => new Field( + '(Attribute) ' + ), + 'typeDefinition' => new Field( + '(Attribute) ' + ), + 'formatLabel' => new Field( + '(Attribute) ' + ), + 'formatDefinition' => new Field( + '(Attribute) ' + ), + 'formatLink' => new Field( + '(Attribute) ' + ), + 'formatLanguage' => new Field( + '(Attribute) ' + ), + 'audioStreamFormatIDRef' => new Field( + '' + ), + ] + ), + 'audioStreamFormat' => new Element( + '', + [ + 'audioStreamFormatID' => new Field( + '(Attribute) ' + ), + 'audioStreamFormatName' => new Field( + '(Attribute) ' + ), + 'typeLabel' => new Field( + '(Attribute) ' + ), + 'typeDefinition' => new Field( + '(Attribute) ' + ), + 'formatLabel' => new Field( + '(Attribute) ' + ), + 'formatDefinition' => new Field( + '(Attribute) ' + ), + 'formatLink' => new Field( + '(Attribute) ' + ), + 'formatLanguage' => new Field( + '(Attribute) ' + ), + 'audioChannelFormatIDRef' => new Field( + '' + ), + 'audioPackFormatIDRef' => new Field( + '' + ), + 'audioTrackFormatIDRef' => new Field( + '' + ), + ] + ), + 'audioBlockFormat' => new Element( + '', + [ + 'audioBlockFormatID' => new Field( + '(Attribute) ' + ), + 'rtime' => new Field( + '(Attribute) ' + ), + 'duration' => new Field( + '(Attribute) ' + ), + 'lstart' => new Field( + '(Attribute) ' + ), + 'lduration' => new Field( + '(Attribute) ' + ), + 'initializeBlock' => new Field( + '(Attribute) ' + ), + 'gain' => new Field( + '' + ), + 'importance' => new Field( + '' + ), + 'headLocked' => new Field( + '' + ), + 'headphoneVirtualise' => new Field( + '' + ), + 'speakerLabel' => new Field( + '' + ), + 'position' => new Field( + '' + ), + 'outputChannelFormatIDRef' => new Field( + '' + ), + 'outputChannelIDRef,' => new Field( + '' + ), + 'jumpPosition' => new Field( + '' + ), + 'matrix' => new Field( + '' + ), + 'coefficient' => new Field( + '' + ), + 'width' => new Field( + '' + ), + 'depth' => new Field( + '' + ), + 'height' => new Field( + '' + ), + 'cartesian' => new Field( + '' + ), + 'diffuse' => new Field( + '' + ), + 'channelLock' => new Field( + '' + ), + 'objectDivergence' => new Field( + '' + ), + 'zoneExclusion' => new Field( + '' + ), + 'equation' => new Field( + '' + ), + 'order' => new Field( + '' + ), + 'degree' => new Field( + '' + ), + 'normalization' => new Field( + '' + ), + 'nfcRefDist' => new Field( + '' + ), + 'screenRef' => new Field( + '' + ), + ] + ), + 'audioalternativeValueSet' => new Element( + '', + [ + ] + ), + ], + 1 + ), + 'Dolby_Atmos_Master_ADM_Profile' => new Spec( + " v1.1", + null, + 'This documentation specifies requirements, recommendations, and constraints for the Dolby Atmos Master ADM Profile', + false, + '//professionalsupport.dolby.com/s/article/Dolby-Atmos-ADM-Profile-specification', + 'This documentation specifies a required subset of ADM to define a Dolby Atmos master ADM profile. The profile is intended to support easier use and implementation of ADM and ensure interoperability among ADM-capable systems ingesting or outputting Dolby Atmos content. Check ITU-R BS.2076 (ADM) page for the list of checked elements.', + [ + ], + 1 + ), ]; /**