diff --git a/src/MediaConchBundle/Lib/Checks/Checks.php b/src/MediaConchBundle/Lib/Checks/Checks.php index c3c19e22..45b6638d 100644 --- a/src/MediaConchBundle/Lib/Checks/Checks.php +++ b/src/MediaConchBundle/Lib/Checks/Checks.php @@ -2238,7 +2238,7 @@ public function __construct($specId = null, $elementId = null, $fieldId = null, [ 'General_compliance'] ), new Check( - '(element name) value (element value) shall match the (target attribue name) attribute of an (target element name) element', + '(element name) value (element value) shall match the (target attribue name) attribute of a(target element name) element', 'Error', [ new Reference( @@ -2920,6 +2920,34 @@ public function __construct($specId = null, $elementId = null, $fieldId = null, ), ] ), + new Check( + '(element names) elements are not all present (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' + ), + ] + ), new Check( '(element names) element values are not same (extra spec name if needed)', 'Error', diff --git a/src/MediaConchBundle/Lib/Checks/Specs.php b/src/MediaConchBundle/Lib/Checks/Specs.php index b9c57e50..0df6ac1d 100644 --- a/src/MediaConchBundle/Lib/Checks/Specs.php +++ b/src/MediaConchBundle/Lib/Checks/Specs.php @@ -544,34 +544,31 @@ public function __construct($description = null) '', [ 'audioContentID' => new Field( - '(Attribute) ' + '(Attribute) ID of the content' ), 'audioContentName' => new Field( - '(Attribute) ' + '(Attribute) Name of the content' ), 'audioContentLanguage' => new Field( - '(Attribute) ' + '(Attribute) Language of the content' ), 'typeLabel' => new Field( - '(Attribute) ' + '(Attribute) (Only in buggy files)' ), 'audioContentLabel' => new Field( - '' + 'Definition of an audioContent label' ), 'audioObjectIDRef' => new Field( - '' + 'Reference to audioObject' ), 'loudnessMetadata' => new Field( - '' - ), - 'loudnessMetadata_integratedLoudness' => new Field( - '' + 'Loudness' ), 'dialogue' => new Field( - '' + 'If the audio is not dialogue set a value of 0; if it contains only dialogue set a value of 1; if it contains both then set a value of 2.' ), 'alternativeValueSetIDRef' => new Field( - '' + 'Reference to an alternativeValueSet within an audioObject' ), ] ), @@ -579,70 +576,70 @@ public function __construct($description = null) '', [ 'audioObjectID' => new Field( - '(Attribute) ' + '(Attribute) ID of the object' ), 'audioObjectName' => new Field( - '(Attribute) ' + '(Attribute) Name of the object' ), 'start' => new Field( - '(Attribute) ' + '(Attribute) Start time for the object, relative to the start of the audioProgramme' ), 'startTime' => new Field( - '(Attribute) ' + '(Attribute) (only in legacy files)' ), 'duration' => new Field( - '(Attribute) ' + '(Attribute) Duration of object' ), 'dialogue' => new Field( - '(Attribute) ' + '(Attribute) If the audio is not dialogue set a value of 0; if it contains only dialogue a value of 1; if it contains both then a value of 2.' ), 'importance' => new Field( - '(Attribute) ' + '(Attribute) Importance of an object' ), 'interact' => new Field( - '(Attribute) ' + '(Attribute) Set to 1 if a user can interact with the object, 0 if not' ), 'disableDucking' => new Field( - '(Attribute) ' + '(Attribute) Set to 1 to disallow automatic ducking of object, 0 to allow ducking' ), 'typeLabel' => new Field( - '(Attribute) ' + '(Attribute) (Only in buggy files)' ), 'audioPackFormatIDRef' => new Field( - '' + 'Reference to an audioPackFormat for format description' ), 'audioObjectIDRef' => new Field( - '' + 'Reference to another audioObject' ), 'audioObjectLabel' => new Field( - '' + 'Definition of audioObject label' ), 'audioComplementaryObjectGroupLabel' => new Field( - '' + 'Definition of a label for a group of complementary audioObjects' ), 'audioComplementaryObjectIDRef' => new Field( - '' + 'Reference to another audioObject that is complementary to the object, e.g. to describe mutually exclusive languages' ), 'audioTrackUIDRef' => new Field( - '' + 'Reference to an audioTrackUID' ), 'audioObjectInteraction' => new Field( - '' + 'Specification of possible user interaction with the object' ), 'gain' => new Field( - '' + 'Definition of a gain value to be applied to all audio samples referenced by the audioObject' ), 'headLocked' => new Field( - '' + 'Indicates if the perceived location of the audio element is locked to the head or not locked' ), 'positionOffset' => new Field( - '' + 'Apply an offset to all elements in the audioObjects' ), 'mute' => new Field( - '' + 'Status of the audioObject to play back or not.' ), 'alternativeValueSet' => new Field( - '' + 'An alternative set of parameters that will be used if the alternativeValueSetID is referenced by an audioProgramme or audioContent element' ), ] ), @@ -650,55 +647,55 @@ public function __construct($description = null) '', [ 'audioPackFormatID' => new Field( - '(Attribute) ' + '(Attribute) ID for the pack' ), 'audioPackFormatName' => new Field( - '(Attribute) ' - ), - 'typeDefinition' => new Field( - '(Attribute) ' + '(Attribute) Name for the pack' ), 'typeLabel' => new Field( - '(Attribute) ' + '(Attribute) Descriptor of the type of channel' + ), + 'typeDefinition' => new Field( + '(Attribute) Description of the type of channel' ), 'typeLink' => new Field( - '(Attribute) ' + '(Attribute) (Unused)' ), 'typeLanguage' => new Field( - '(Attribute) ' + '(Attribute) (Unused)' ), 'importance' => new Field( - '(Attribute) ' + '(Attribute) Importance of a pack' ), 'audioChannelFormatIDRef' => new Field( - '' + 'Reference to an audioChannelFormat' ), 'audioPackFormatIDRef' => new Field( - '' + 'Reference to an audioPackFormat' ), 'absoluteDistance' => new Field( - '' + 'Absolute distance' ), 'encodePackFormatIDRef' => new Field( - '' + '(Matrix) Reference to an encoding matrix audioPackFormat from a decoding matrix' ), 'decodePackFormatIDRef' => new Field( - '' + '(Matrix) Reference to a decoding matrix audioPackFormat from an encoding matrix' ), 'inputPackFormatIDRef' => new Field( - '' + '(Matrix) Reference to a channel-based (DirectSpeakers) input audioPackFormat' ), 'outputPackFormatIDRef' => new Field( - '' + '(Matrix) Reference to a channel-based (DirectSpeakers) matrix decoded audioPackFormat' ), 'normalization' => new Field( - '' + '(HOA) Indicates the normalization scheme of the HOA content (N3D, SN3D, FuMa)' ), 'nfcRefDist' => new Field( - '' + '(HOA) Indicates the reference distance of the loudspeaker setup for near-field compensation (NFC)' ), 'screenRef' => new Field( - '' + '(HOA) Indicates whether the content is screen-related or not' ), ] ), @@ -706,28 +703,123 @@ public function __construct($description = null) '', [ 'audioChannelFormatID' => new Field( - '(Attribute) ' + '(Attribute) ID of the channel' ), 'audioChannelFormatName' => new Field( - '(Attribute) ' - ), - 'typeDefinition' => new Field( - '(Attribute) ' + '(Attribute) Name of the channel' ), 'typeLabel' => new Field( - '(Attribute) ' + '(Attribute) Descriptor of the type of channel' + ), + 'typeDefinition' => new Field( + '(Attribute) Description of the type of channel' ), 'typeLink' => new Field( - '(Attribute) ' + '(Attribute) (Unused)' ), 'typeLanguage' => new Field( + '(Attribute) (Unused)' + ), + 'frequency' => new Field( + 'frequency' + ), + ] + ), + 'audioChannelFormat/audioBlockFormat' => new Element( + '', + [ + 'audioBlockFormatID' => new Field( + '(Attribute) ID for block' + ), + 'rtime' => new Field( + '(Attribute) Start time of block' + ), + 'duration' => new Field( + '(Attribute) Duration of block' + ), + 'lstart' => new Field( '(Attribute) ' ), - 'audioBlockFormat' => new Field( - '' + 'lduration' => new Field( + '(Attribute) (S-ADM) Duration of block in the S-ADM metadata frame' ), - 'frequency' => new Field( - '' + 'initializeBlock' => new Field( + '(Attribute) (S-ADM) If the initializeBlock is set to ‘1’, it indicates the audioBlockFormat of ‘AB_xxxxyyyy_00000000’ is used to specify initial values of all elements for the first audio block in the frame' + ), + 'gain' => new Field( + 'Definition of a gain value to be applied to all audio samples corresponding to the audioBlockFormat' + ), + 'importance' => new Field( + 'Importance of the audioChannelFormat, defined for the duration of the current audioBlockFormat' + ), + 'headLocked' => new Field( + 'Indicates if the perceived location of the audio element is locked to the head or not locked' + ), + 'headphoneVirtualise' => new Field( + 'Specifies whether the object should be virtualised using a headphone virtualiser or not' + ), + 'speakerLabel' => new Field( + 'A reference to the label of the speaker position' + ), + 'position' => new Field( + 'Exact location of sound' + ), + 'outputChannelFormatIDRef' => new Field( + '(Matrix) For defining a decoding or direct matrix, this is the output audioChannelFormat that defines the channel being decoded to' + ), + 'outputChannelIDRef,' => new Field( + '(Only in legacy files)' + ), + 'jumpPosition' => new Field( + '(Matrix, Objects) If jumpPosition is set to 1 the position will change instantly from the previous block’s position. If set to 0 then interpolation of the position will take the entire length of the block' + ), + 'matrix' => new Field( + '(Matrix) Matrix' + ), + 'coefficient' => new Field( + '(Matrix) Multiplication factor of another channel' + ), + 'width' => new Field( + '(Objects) horizontal extent' + ), + 'depth' => new Field( + '(Objects) vertical extent' + ), + 'height' => new Field( + '(Objects) distance extent' + ), + 'cartesian' => new Field( + 'Specifies coordinate system' + ), + 'diffuse' => new Field( + 'Describes the diffuseness of an audioObject (if it is diffuse or direct sound)' + ), + 'channelLock' => new Field( + 'If set to 1 a renderer can lock the object to the nearest channel or speaker, rather than normal rendering' + ), + 'objectDivergence' => new Field( + 'Adjusts the balance between the object’s specified position and two other positions specified by the azimuthRange value' + ), + 'zoneExclusion' => new Field( + 'Indicates which speaker/room zones the object should not be rendered through' + ), + 'equation' => new Field( + '(HOA) An equation to describe the HOA component' + ), + 'order' => new Field( + '(HOA) Order of the HOA component' + ), + 'degree' => new Field( + '(HOA) Degree of the HOA component' + ), + 'normalization' => new Field( + '(HOA) Indicates the normalization scheme of the HOA component (N3D, SN3D, FuMa)' + ), + 'nfcRefDist' => new Field( + '(HOA) Indicates the reference distance of the loudspeaker setup for near-field compensation (NFC)' + ), + 'screenRef' => new Field( + '(Objects, HOA) Indicates whether the object is screen-related or not' ), ] ), @@ -735,28 +827,28 @@ public function __construct($description = null) '', [ 'UID' => new Field( - '(Attribute) ' + '(Attribute) The actual UID value' ), 'sampleRate' => new Field( - '(Attribute) ' + '(Attribute) Sample rate of track' ), 'bitDepth' => new Field( - '(Attribute) ' + '(Attribute) Bit-depth of track' ), 'typeLabel' => new Field( - '(Attribute) ' + '(Attribute) (Only in buggy files)' ), 'audioMXFLookUp' => new Field( - '' + 'MXF sub-elements' ), 'audioTrackFormatIDRef' => new Field( - '' + 'Reference to an audioTrackFormat description' ), 'audioChannelFormatIDRef' => new Field( - '' + 'Reference to an audioChannelFormat description' ), 'audioPackFormatIDRef' => new Field( - '' + 'Reference to an audioPackFormat description' ), ] ), @@ -764,31 +856,31 @@ public function __construct($description = null) '', [ 'audioTrackFormatID' => new Field( - '(Attribute) ' + '(Attribute) ID for track' ), 'audioTrackFormatName' => new Field( - '(Attribute) ' + '(Attribute) Name for track' ), 'typeLabel' => new Field( - '(Attribute) ' + '(Attribute) (Only in buggy files)' ), 'typeDefinition' => new Field( - '(Attribute) ' + '(Attribute) (Only in buggy files)' ), 'formatLabel' => new Field( - '(Attribute) ' + '(Attribute) Descriptor of the format' ), 'formatDefinition' => new Field( - '(Attribute) ' + '(Attribute) Description of the format' ), 'formatLink' => new Field( - '(Attribute) ' + '(Attribute) (Unused)' ), 'formatLanguage' => new Field( - '(Attribute) ' + '(Attribute) (Unused)' ), 'audioStreamFormatIDRef' => new Field( - '' + 'Reference to an audioStreamFormat' ), ] ), @@ -796,141 +888,38 @@ public function __construct($description = null) '', [ 'audioStreamFormatID' => new Field( - '(Attribute) ' + '(Attribute) ID for the stream' ), 'audioStreamFormatName' => new Field( - '(Attribute) ' + '(Attribute) Name of the stream' ), 'typeLabel' => new Field( - '(Attribute) ' + '(Attribute) (Only in buggy files)' ), 'typeDefinition' => new Field( - '(Attribute) ' + '(Attribute) (Only in buggy files)' ), 'formatLabel' => new Field( - '(Attribute) ' + '(Attribute) Descriptor of the format' ), 'formatDefinition' => new Field( - '(Attribute) ' + '(Attribute) Description of the format' ), 'formatLink' => new Field( - '(Attribute) ' + '(Attribute) (Unused)' ), 'formatLanguage' => new Field( - '(Attribute) ' + '(Attribute) (Unused)' ), 'audioChannelFormatIDRef' => new Field( - '' + 'Reference to audioChannelFormat' ), 'audioPackFormatIDRef' => new Field( - '' + 'Reference to audioPackFormat' ), '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( - '' + 'Reference to audioTrackFormat' ), - '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( - '', - [ ] ), ],