diff --git a/src/main/java/com/netflix/imflibrary/IMFConstraints.java b/src/main/java/com/netflix/imflibrary/IMFConstraints.java index 493ad00a..4f3afa82 100644 --- a/src/main/java/com/netflix/imflibrary/IMFConstraints.java +++ b/src/main/java/com/netflix/imflibrary/IMFConstraints.java @@ -24,6 +24,7 @@ import com.netflix.imflibrary.st0377.PartitionPack; import com.netflix.imflibrary.st0377.header.*; import com.netflix.imflibrary.st2067_201.IABEssenceDescriptor; +import com.netflix.imflibrary.st2067_203.MGASoundEssenceDescriptor; import com.netflix.imflibrary.utils.ErrorLogger; import com.netflix.imflibrary.utils.Utilities; @@ -450,6 +451,10 @@ else if(essenceType.equals(HeaderPartition.EssenceTypeEnum.IABEssence)) { targetMXFDataDefinition = MXFDataDefinition.SOUND; } + else if(essenceType.equals(HeaderPartition.EssenceTypeEnum.MGASADMEssence)) + { + targetMXFDataDefinition = MXFDataDefinition.SOUND; + } else{ targetMXFDataDefinition = MXFDataDefinition.DATA; } @@ -561,6 +566,35 @@ private boolean hasWaveAudioEssenceDescriptor() return iabEssenceDescriptor; } + /** + * Gets the first MGASoundEssenceDescriptor structural metadata set from + * an OP1A-conformant MXF Header partition. Returns null if none is found + * @return returns the first MGASoundEssenceDescriptor + */ + public @Nullable MGASoundEssenceDescriptor getMGASoundEssenceDescriptor() + { + MGASoundEssenceDescriptor mgaSoundEssenceDescriptor = null; + GenericPackage genericPackage = this.headerPartitionOP1A.getHeaderPartition().getPreface().getContentStorage(). + getEssenceContainerDataList().get(0).getLinkedPackage(); + SourcePackage filePackage = (SourcePackage)genericPackage; + for (TimelineTrack timelineTrack : filePackage.getTimelineTracks()) + { + Sequence sequence = timelineTrack.getSequence(); + MXFDataDefinition filePackageMxfDataDefinition = sequence.getMxfDataDefinition(); + if (filePackageMxfDataDefinition.equals(MXFDataDefinition.SOUND)) + { + GenericDescriptor genericDescriptor = filePackage.getGenericDescriptor(); + if (genericDescriptor instanceof MGASoundEssenceDescriptor) + { + mgaSoundEssenceDescriptor = (MGASoundEssenceDescriptor)genericDescriptor; + break; + } + } + } + + return mgaSoundEssenceDescriptor; + } + /** * A method that returns the IMF Essence Component type. * @return essenceTypeEnum an enumeration constant corresponding to the IMFEssenceComponent type diff --git a/src/main/java/com/netflix/imflibrary/RESTfulInterfaces/IMPValidator.java b/src/main/java/com/netflix/imflibrary/RESTfulInterfaces/IMPValidator.java index a86a85d9..23f8b789 100644 --- a/src/main/java/com/netflix/imflibrary/RESTfulInterfaces/IMPValidator.java +++ b/src/main/java/com/netflix/imflibrary/RESTfulInterfaces/IMPValidator.java @@ -23,6 +23,7 @@ import com.netflix.imflibrary.st2067_2.Composition.VirtualTrack; import com.netflix.imflibrary.st2067_2.IMFEssenceComponentVirtualTrack; import com.netflix.imflibrary.st2067_201.IABTrackFileConstraints; +import com.netflix.imflibrary.st2067_203.MGASADMTrackFileConstraints; import com.netflix.imflibrary.utils.ByteArrayByteRangeProvider; import com.netflix.imflibrary.utils.ByteArrayDataProvider; import com.netflix.imflibrary.utils.ByteProvider; @@ -592,12 +593,14 @@ public static List validateIMFTrackFileHeaderMetadata(L 0L, (long)payloadRecord.getPayload().length, imfErrorLogger); - MXFOperationalPattern1A.HeaderPartitionOP1A headerPartitionOP1A = MXFOperationalPattern1A.checkOperationalPattern1ACompliance(headerPartition, imfErrorLogger); IMFConstraints.HeaderPartitionIMF headerPartitionIMF = IMFConstraints.checkIMFCompliance(headerPartitionOP1A, imfErrorLogger); if (headerPartitionIMF.getEssenceType() == HeaderPartition.EssenceTypeEnum.IABEssence) { IABTrackFileConstraints.checkCompliance(headerPartitionIMF, imfErrorLogger); } + if (headerPartitionIMF.getEssenceType() == HeaderPartition.EssenceTypeEnum.MGASADMEssence) { + MGASADMTrackFileConstraints.checkCompliance(headerPartitionIMF, imfErrorLogger); + } } catch (IMFException | MXFException e){ if(headerPartition != null) { @@ -710,6 +713,9 @@ private static List checkVirtualTrackAndEssencesHeaderP if (headerPartitionIMF.hasMatchingEssence(HeaderPartition.EssenceTypeEnum.IABEssence)) { IABTrackFileConstraints.checkCompliance(headerPartitionIMF, imfErrorLogger); } + if (headerPartitionIMF.hasMatchingEssence(HeaderPartition.EssenceTypeEnum.MGASADMEssence)) { + MGASADMTrackFileConstraints.checkCompliance(headerPartitionIMF, imfErrorLogger); + } } catch (IMFException | MXFException e){ if(headerPartition != null) { @@ -922,7 +928,7 @@ public static List validateOPL(PayloadRecord opl) throw } /** - * A stateless method, used for IMP containing IAB tracks, that will validate that the index edit rate in the index segment matches the one in the descriptor (according to Section 5.7 of SMPTE ST 2067-201:2019) + * A stateless method, used for IMP containing IAB and/or MGA S-ADM tracks, that will validate that the index edit rate in the index segment matches the one in the descriptor (according to Section 5.7 of SMPTE ST 2067-201:2019) * @param headerPartitionPayloadRecords - a list of IMF Essence Component partition payloads for header partitions * @param indexSegmentPayloadRecords - a list of IMF Essence Component partition payloads for index partitions * @return list of error messages encountered while validating @@ -970,6 +976,8 @@ public static List validateIndexEditRate(List supportedEssenceTypesFound = new ArrayList<>(); List essenceTypes = this.getHeaderPartitionIMF(imfErrorLogger).getHeaderPartitionOP1A().getHeaderPartition().getEssenceTypes(); @@ -720,6 +727,7 @@ else if(e instanceof MXFException){ supportedEssenceComponentTypes.add(HeaderPartition.EssenceTypeEnum.MainImageEssence); supportedEssenceComponentTypes.add(HeaderPartition.EssenceTypeEnum.MainAudioEssence); supportedEssenceComponentTypes.add(HeaderPartition.EssenceTypeEnum.MarkerEssence); + supportedEssenceComponentTypes.add(HeaderPartition.EssenceTypeEnum.MGASADMEssence); if(imfTrackFileReader != null && imfTrackFileCPLBuilder != null && supportedEssenceComponentTypes.contains(imfTrackFileReader.getEssenceType(imfErrorLogger))) { diff --git a/src/main/java/com/netflix/imflibrary/app/IMPAnalyzer.java b/src/main/java/com/netflix/imflibrary/app/IMPAnalyzer.java index 048c3e44..4775b117 100755 --- a/src/main/java/com/netflix/imflibrary/app/IMPAnalyzer.java +++ b/src/main/java/com/netflix/imflibrary/app/IMPAnalyzer.java @@ -20,6 +20,7 @@ import com.netflix.imflibrary.st2067_2.ApplicationCompositionFactory; import com.netflix.imflibrary.st2067_2.Composition; import com.netflix.imflibrary.st2067_2.IMFEssenceComponentVirtualTrack; +import com.netflix.imflibrary.st2067_203.IMFMGASADMConstraintsChecker; import com.netflix.imflibrary.utils.ByteArrayDataProvider; import com.netflix.imflibrary.utils.ByteProvider; import com.netflix.imflibrary.utils.ErrorLogger; @@ -456,6 +457,12 @@ public static List analyzeApplicationCompositions( File Set trackFileIDsSet = trackFileIDToHeaderPartitionPayLoadMap .keySet(); + // ST 2067-203 MGASADMVirtualTrackParameterSet checks + List errors = IMFMGASADMConstraintsChecker.checkMGASADMVirtualTrackParameterSet(applicationComposition); + // Report MGASADMVirtualTrackParameterSet as both CPL and Virtual Track errors + compositionConformanceErrorLogger.addAllErrors(errors); + compositionErrorLogger.addAllErrors(errors); + try { if (!isCompositionComplete(applicationComposition, trackFileIDsSet, compositionConformanceErrorLogger)) { for (IMFEssenceComponentVirtualTrack virtualTrack : applicationComposition.getEssenceVirtualTracks()) { diff --git a/src/main/java/com/netflix/imflibrary/st0377/HeaderPartition.java b/src/main/java/com/netflix/imflibrary/st0377/HeaderPartition.java index 8876c2a2..d604c941 100644 --- a/src/main/java/com/netflix/imflibrary/st0377/HeaderPartition.java +++ b/src/main/java/com/netflix/imflibrary/st0377/HeaderPartition.java @@ -31,6 +31,8 @@ import com.netflix.imflibrary.st2067_2.Composition; import com.netflix.imflibrary.st2067_201.IABEssenceDescriptor; import com.netflix.imflibrary.st2067_201.IABSoundfieldLabelSubDescriptor; +import com.netflix.imflibrary.st2067_203.MGASoundEssenceDescriptor; +import com.netflix.imflibrary.st2067_203.MGASoundfieldGroupLabelSubDescriptor; import com.netflix.imflibrary.utils.ByteArrayDataProvider; import com.netflix.imflibrary.utils.ByteProvider; import com.netflix.imflibrary.utils.ErrorLogger; @@ -431,6 +433,10 @@ else if (dependentInterchangeObject instanceof SoundFieldGroupLabelSubDescriptor IABEssenceDescriptor iabEssenceDescriptor = new IABEssenceDescriptor((IABEssenceDescriptor.IABEssenceDescriptorBO) interchangeObjectBO); this.cacheInterchangeObject(iabEssenceDescriptor); uidToMetadataSets.put(interchangeObjectBO.getInstanceUID(), iabEssenceDescriptor); + } else if(interchangeObjectBO.getClass().getEnclosingClass().equals(MGASoundEssenceDescriptor.class)){ + MGASoundEssenceDescriptor mgaSoundEssenceDescriptor = new MGASoundEssenceDescriptor((MGASoundEssenceDescriptor.MGASoundEssenceDescriptorBO) interchangeObjectBO); + this.cacheInterchangeObject(mgaSoundEssenceDescriptor); + uidToMetadataSets.put(interchangeObjectBO.getInstanceUID(), mgaSoundEssenceDescriptor); } else if(interchangeObjectBO.getClass().getEnclosingClass().equals(TimedTextDescriptor.class)){ List subDescriptorList = new ArrayList<>(); for(Node dependent : node.depends) { @@ -476,7 +482,6 @@ else if (dependentInterchangeObject instanceof SoundFieldGroupLabelSubDescriptor */ private InterchangeObject.InterchangeObjectBO constructInterchangeObjectBO(Class clazz, KLVPacket.Header header, ByteProvider byteProvider, Map localTagToUIDMap, IMFErrorLogger imfErrorLogger) throws IOException{ try { - Constructor constructor = clazz.getConstructor(KLVPacket.Header.class, ByteProvider.class, Map.class, IMFErrorLogger.class); InterchangeObject.InterchangeObjectBO interchangeObjectBO = (InterchangeObject.InterchangeObjectBO)constructor.newInstance(header, byteProvider, localTagToUIDMap, imfErrorLogger); String simpleClassName = interchangeObjectBO.getClass().getSimpleName(); @@ -721,6 +726,16 @@ public String getAudioEssenceSpokenLanguage() throws IOException { this.imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_ESSENCE_COMPONENT_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, String.format("Language Codes (%s, %s) do not match across the IABSoundFieldLabelSubDescriptors", rfc5646SpokenLanguage, iabSoundfieldLabelSubDescriptor.getRFC5646SpokenLanguage())); } } + } else if (this.hasMGASoundEssenceDescriptor()) { + List mgaSoundfieldGroupLabelSubDescriptors = this.getMGASoundfieldGroupLabelSubDescriptors(); + for (InterchangeObject subDescriptor : mgaSoundfieldGroupLabelSubDescriptors) { + MGASoundfieldGroupLabelSubDescriptor mgaSoundfieldLabelSubDescriptor = (MGASoundfieldGroupLabelSubDescriptor) subDescriptor; + if (rfc5646SpokenLanguage == null) { + rfc5646SpokenLanguage = mgaSoundfieldLabelSubDescriptor.getRFC5646SpokenLanguage(); + } else if (!rfc5646SpokenLanguage.equals(mgaSoundfieldLabelSubDescriptor.getRFC5646SpokenLanguage())) { + this.imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_ESSENCE_COMPONENT_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, String.format("Language Codes (%s, %s) do not match across the MGASoundfieldGroupLabelSubDescriptor", rfc5646SpokenLanguage, mgaSoundfieldLabelSubDescriptor.getRFC5646SpokenLanguage())); + } + } } return rfc5646SpokenLanguage; } @@ -789,6 +804,15 @@ public boolean hasIABEssenceDescriptor() return this.hasInterchangeObject(IABEssenceDescriptor.class); } + /** + * Checks if this HeaderPartition object has a MGA Sound Essence Descriptor + * @return true/false depending on whether this HeaderPartition contains a MGASoundEssenceDescriptor or not + */ + public boolean hasMGASoundEssenceDescriptor() + { + return this.hasInterchangeObject(MGASoundEssenceDescriptor.class); + } + /** * Checks if this HeaderPartition object has a CDCI Picture Essence Descriptor * @return true/false depending on whether this HeaderPartition contains a CDCIPictureEssenceDescriptor or not @@ -875,6 +899,15 @@ public List getIABSoundFieldLabelSubDescriptors() return this.getInterchangeObjects(IABSoundfieldLabelSubDescriptor.class); } + /** + * Gets all the MGA Soundfield Group Label SubDescriptors associated with this HeaderPartition object + * @return list MGA Soundfield Group Label SubDescriptors contained in this header partition + */ + public List getMGASoundfieldGroupLabelSubDescriptors() + { + return this.getInterchangeObjects(MGASoundfieldGroupLabelSubDescriptor.class); + } + /** * Gets the timeline track associated with this HeaderPartition object corresponding to the specified UID. Returns * null if none is found @@ -1276,9 +1309,12 @@ public List getEssenceTypes() { if(interchangeObjectBO.getClass().getEnclosingClass().equals(WaveAudioEssenceDescriptor.class)){ essenceTypes.add(EssenceTypeEnum.MainAudioEssence); } - if(interchangeObjectBO.getClass().getEnclosingClass().equals(IABEssenceDescriptor.class)){ + else if(interchangeObjectBO.getClass().getEnclosingClass().equals(IABEssenceDescriptor.class)){ essenceTypes.add(EssenceTypeEnum.IABEssence); } + else if(interchangeObjectBO.getClass().getEnclosingClass().equals(MGASoundEssenceDescriptor.class)){ + essenceTypes.add(EssenceTypeEnum.MGASADMEssence); + } else if(interchangeObjectBO.getClass().getEnclosingClass().equals(CDCIPictureEssenceDescriptor.class)){ essenceTypes.add(EssenceTypeEnum.MainImageEssence); } @@ -1315,6 +1351,7 @@ public enum EssenceTypeEnum { ForcedNarrativeEssence(Composition.SequenceTypeEnum.ForcedNarrativeSequence), AncillaryDataEssence(Composition.SequenceTypeEnum.AncillaryDataSequence), IABEssence(Composition.SequenceTypeEnum.IABSequence), + MGASADMEssence(Composition.SequenceTypeEnum.MGASADMSignalSequence), UnsupportedEssence(Composition.SequenceTypeEnum.UnsupportedSequence); private final Composition.SequenceTypeEnum sequenceType; @@ -1352,6 +1389,8 @@ private static EssenceTypeEnum getEssenceTypeEnum(String name) return AncillaryDataEssence; case "IABEssence": return IABEssence; + case "MGASADMEssence": + return MGASADMEssence; case "UnsupportedEssence": default: return UnsupportedEssence; @@ -1384,6 +1423,8 @@ private static String getEssenceTypeString(Composition.SequenceTypeEnum sequence return "AncillaryDataEssence"; case IABSequence: return "IABEssence"; + case MGASADMSignalSequence: + return "MGASADMEssence"; case UnsupportedSequence: default: return "UnsupportedEssence"; diff --git a/src/main/java/com/netflix/imflibrary/st0377/header/MCALabelSubDescriptor.java b/src/main/java/com/netflix/imflibrary/st0377/header/MCALabelSubDescriptor.java index 4bed807a..acc9b104 100644 --- a/src/main/java/com/netflix/imflibrary/st0377/header/MCALabelSubDescriptor.java +++ b/src/main/java/com/netflix/imflibrary/st0377/header/MCALabelSubDescriptor.java @@ -41,6 +41,8 @@ public static abstract class MCALabelSubDescriptorBO extends SubDescriptorBO{ @MXFProperty(size=0, charset="UTF-16") protected final String mca_title_version = null; @MXFProperty(size=0, charset="UTF-16") protected final String mca_audio_content_kind = null; @MXFProperty(size=0, charset="UTF-16") protected final String mca_audio_element_kind = null; + @MXFProperty(size=0, charset="UTF-16") protected final String mca_content = null; + @MXFProperty(size=0, charset="UTF-16") protected final String mca_use_class = null; /** * Constructor for a parsed MCA Label Sub descriptor object @@ -115,6 +117,22 @@ public String getMCAAudioElementKind(){ return this.mca_audio_element_kind; } + /** + * Accessor for the MCA Content of this MCA Label Subdescriptor + * @return a String representing the MCA Content + */ + public String getMCAContent(){ + return this.mca_content; + } + + /** + * Accessor for the MCA Use Class of this MCA Label Subdescriptor + * @return a String representing the MCA Use Class + */ + public String getMCAUseClass(){ + return this.mca_use_class; + } + /** * Accessor for the RFC 5646 Spoken Language of this MCA Label Subdescriptor * @return a String representing the RFC 5646 Spoken Language @@ -174,6 +192,14 @@ public String toString() { sb.append(String.format("mca_audio_element_kind = %s%n", this.mca_audio_element_kind)); } + if (this.mca_content != null) + { + sb.append(String.format("mca_content = %s%n", this.mca_content)); + } + if (this.mca_use_class != null) + { + sb.append(String.format("mca_use_class = %s%n", this.mca_use_class)); + } return sb.toString(); } diff --git a/src/main/java/com/netflix/imflibrary/st0377/header/SoundFieldGroupLabelSubDescriptor.java b/src/main/java/com/netflix/imflibrary/st0377/header/SoundFieldGroupLabelSubDescriptor.java index 90441aae..c6c82f01 100644 --- a/src/main/java/com/netflix/imflibrary/st0377/header/SoundFieldGroupLabelSubDescriptor.java +++ b/src/main/java/com/netflix/imflibrary/st0377/header/SoundFieldGroupLabelSubDescriptor.java @@ -31,7 +31,7 @@ * Object model corresponding to SoundFieldGroupLabelSubDescriptor structural metadata set defined in st377-4:2012 */ @Immutable -public final class SoundFieldGroupLabelSubDescriptor extends SubDescriptor +public class SoundFieldGroupLabelSubDescriptor extends MCALabelSubDescriptor { private static final String ERROR_DESCRIPTION_PREFIX = "MXF Header Partition: " + SoundFieldGroupLabelSubDescriptor.class.getSimpleName() + " : "; private final SoundFieldGroupLabelSubDescriptorBO soundFieldGroupLabelSubDescriptorBO; @@ -97,7 +97,7 @@ public String toString() */ @Immutable @SuppressWarnings({"PMD.FinalFieldCouldBeStatic"}) - public static final class SoundFieldGroupLabelSubDescriptorBO extends MCALabelSubDescriptor.MCALabelSubDescriptorBO + public static class SoundFieldGroupLabelSubDescriptorBO extends MCALabelSubDescriptor.MCALabelSubDescriptorBO { //@MXFProperty(size=0, charset="UTF-16") protected final String group_of_soundfield_groups_linkID = null; /** @@ -143,6 +143,14 @@ public SoundFieldGroupLabelSubDescriptorBO(KLVPacket.Header header, ByteProvider } + /** + * Constructor for a SoundFieldGroupLabelSubDescriptor ByteObject. + * + * @param header the MXF KLV header (Key and Length field) + */ + public SoundFieldGroupLabelSubDescriptorBO(final KLVPacket.Header header) { + super(header); + } } diff --git a/src/main/java/com/netflix/imflibrary/st0377/header/StructuralMetadata.java b/src/main/java/com/netflix/imflibrary/st0377/header/StructuralMetadata.java index 073683a8..fb3f5ec8 100644 --- a/src/main/java/com/netflix/imflibrary/st0377/header/StructuralMetadata.java +++ b/src/main/java/com/netflix/imflibrary/st0377/header/StructuralMetadata.java @@ -22,6 +22,10 @@ import com.netflix.imflibrary.MXFUID; import com.netflix.imflibrary.st2067_201.IABEssenceDescriptor; import com.netflix.imflibrary.st2067_201.IABSoundfieldLabelSubDescriptor; +import com.netflix.imflibrary.st2067_203.MGASoundEssenceDescriptor; +import com.netflix.imflibrary.st2067_203.MGAAudioMetadataSubDescriptor; +import com.netflix.imflibrary.st2067_203.MGASoundfieldGroupLabelSubDescriptor; +import com.netflix.imflibrary.st2067_203.SADMAudioMetadataSubDescriptor; import com.netflix.imflibrary.st379_2.ContainerConstraintsSubDescriptor; import com.netflix.imflibrary.utils.ByteProvider; import com.netflix.imflibrary.exceptions.MXFException; @@ -45,7 +49,7 @@ private StructuralMetadata() } private static final byte[] KEY_BASE = {0x06, 0x0e, 0x2b, 0x34, 0x02, 0x00, 0x01, 0x00, 0x0d, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00}; - private static final byte[] KEY_MASK = { 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1}; + private static final byte[] KEY_MASK = { 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0}; private static final byte[] DESCRIPTIVE_METADATA_KEY_BASE = {0x06, 0x0e, 0x2b, 0x34, 0x02, 0x00, 0x01, 0x00, 0x0d, 0x01, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00}; private static final byte[] DESCRIPTIVE_METADATA_KEY_MASK = { 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1}; @@ -392,6 +396,16 @@ private StructuralMetadata() MXFUID mxfUL = new MXFUID(byteArray); map.put(mxfUL, "mca_audio_element_kind"); } + { + byte[] byteArray = {0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x0e, 0x03, 0x02, 0x01, 0x02, 0x22, 0x00, 0x00, 0x00}; + MXFUID mxfUL = new MXFUID(byteArray); + map.put(mxfUL, "mca_content"); + } + { + byte[] byteArray = {0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x0e, 0x03, 0x02, 0x01, 0x02, 0x23, 0x00, 0x00, 0x00}; + MXFUID mxfUL = new MXFUID(byteArray); + map.put(mxfUL, "mca_use_class"); + } { byte[] byteArray = {0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x0e, 0x01, 0x03, 0x07, 0x01, 0x06, 0x00, 0x00, 0x00}; MXFUID mxfUL = new MXFUID(byteArray); @@ -639,6 +653,68 @@ private StructuralMetadata() MXFUID mxfUL = new MXFUID(byteArray); map.put(mxfUL, "generic_stream_id"); } + // MGA ST 2127-1 + { + byte[] byteArray = {0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x0e, 0x04, 0x02, 0x03, 0x04, 0x01, 0x00, 0x00, 0x00}; + MXFUID mxfUL = new MXFUID(byteArray); + map.put(mxfUL, "mga_sound_essence_block_align"); + } + { + byte[] byteArray = {0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x0e, 0x04, 0x02, 0x03, 0x04, 0x02, 0x00, 0x00, 0x00}; + MXFUID mxfUL = new MXFUID(byteArray); + map.put(mxfUL, "mga_sound_average_bytes_per_second"); + } + { + byte[] byteArray = {0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x0e, 0x04, 0x02, 0x03, 0x04, 0x03, 0x00, 0x00, 0x00}; + MXFUID mxfUL = new MXFUID(byteArray); + map.put(mxfUL, "mga_sound_essence_sequence_offset"); + } + { + byte[] byteArray = {0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x0e, 0x04, 0x02, 0x03, 0x05, 0x01, 0x00, 0x00, 0x00}; + MXFUID mxfUL = new MXFUID(byteArray); + map.put(mxfUL, "mga_link_id"); + } + { + byte[] byteArray = {0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x0e, 0x04, 0x02, 0x03, 0x05, 0x02, 0x00, 0x00, 0x00}; + MXFUID mxfUL = new MXFUID(byteArray); + map.put(mxfUL, "mga_audio_metadata_index"); + } + { + byte[] byteArray = {0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x0e, 0x04, 0x02, 0x03, 0x05, 0x03, 0x00, 0x00, 0x00}; + MXFUID mxfUL = new MXFUID(byteArray); + map.put(mxfUL, "mga_audio_metadata_identifier"); + } + { + byte[] byteArray = {0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x0e, 0x04, 0x02, 0x03, 0x05, 0x04, 0x00, 0x00, 0x00}; + MXFUID mxfUL = new MXFUID(byteArray); + map.put(mxfUL, "mga_audio_metadata_payload_ul_array"); + } + { + byte[] byteArray = {0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x0e, 0x04, 0x02, 0x03, 0x06, 0x01, 0x00, 0x00, 0x00}; + MXFUID mxfUL = new MXFUID(byteArray); + map.put(mxfUL, "mga_metadata_section_link_id"); + } + // MGA S-ADM ST 2127-10 + { + byte[] byteArray = {0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x0e, 0x04, 0x02, 0x03, 0x06, 0x02, 0x00, 0x00, 0x00}; + MXFUID mxfUL = new MXFUID(byteArray); + map.put(mxfUL, "adm_audio_programme_id"); + } + { + byte[] byteArray = {0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x0e, 0x04, 0x02, 0x03, 0x06, 0x03, 0x00, 0x00, 0x00}; + MXFUID mxfUL = new MXFUID(byteArray); + map.put(mxfUL, "adm_audio_content_id"); + } + { + byte[] byteArray = {0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x0e, 0x04, 0x02, 0x03, 0x07, 0x01, 0x00, 0x00, 0x00}; + MXFUID mxfUL = new MXFUID(byteArray); + map.put(mxfUL, "sadm_metadata_section_link_id"); + } + { + byte[] byteArray = {0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x0e, 0x04, 0x02, 0x03, 0x07, 0x02, 0x00, 0x00, 0x00}; + MXFUID mxfUL = new MXFUID(byteArray); + map.put(mxfUL, "sadm_profile_level_batch"); + } ItemULToItemName = Collections.unmodifiableMap(map); } @@ -802,6 +878,19 @@ else if (isStructuralMetadata(key) && (key[13] == 0x01)) return ACESPictureSubDescriptor.ACESPictureSubDescriptorBO.class; case 0x7a : return TargetFrameSubDescriptor.TargetFrameSubDescriptorBO.class; + case (byte)0x81 : + switch(key[15]) { + case 0x06: + return MGASoundEssenceDescriptor.MGASoundEssenceDescriptorBO.class; + case 0x07: + return MGAAudioMetadataSubDescriptor.MGAAudioMetadataSubDescriptorBO.class; + case 0x08: + return MGASoundfieldGroupLabelSubDescriptor.MGASoundfieldGroupLabelSubDescriptorBO.class; + case 0x09: + return SADMAudioMetadataSubDescriptor.SADMAudioMetadataSubDescriptorBO.class; + default : + return Object.class; + } default : return Object.class; } diff --git a/src/main/java/com/netflix/imflibrary/st0377_41/MCAContent.java b/src/main/java/com/netflix/imflibrary/st0377_41/MCAContent.java new file mode 100644 index 00000000..f609e2c4 --- /dev/null +++ b/src/main/java/com/netflix/imflibrary/st0377_41/MCAContent.java @@ -0,0 +1,84 @@ +/* + * + * Copyright 2024 RheinMain University of Applied Sciences, Wiesbaden, Germany. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package com.netflix.imflibrary.st0377_41; + +/** + * This enum lists the MCA Content Vocabulary defined in the following specification: + * ST 377-41:2023 Table 2 + */ +public enum MCAContent { + PRM("Primary"), + SAP("Secondary Audio Program"), + HI("Hearing Impaired"), + DV("Descriptive Video"), + DX("Dialog"), + MX("Music"), + FX("Effects"), + FFX("Filled Effects"), + ME("Music and Effects"), + OP("Optional Music and Effects"), + MESP("Music and Effects with Optional"), + DME("DME"), + NDME("NDME"), + PNAR("Program Narration"), + ONAR("Optional Narration"), + VO("Voice Over"), + VI("Visually Impaired"), + CM("Recorded Commentary"), + LCM("Live Commentary"), + MOS("Silence"), + ADR("Automated Dialog Replacement"), + GRP("Group"), + WLA("Walla"), + CRD("Crowd"), + VOC("Vocals"), + FOL("Foley"), + BG("Backgrounds"), + x("Custom"), + Unknown("Unknown"); + + String description; + MCAContent(String description) { + this.description = description; + } + + /** + * Getter for description for the MCA Content + * @return a String describing the MCA Content + */ + public String getDescription() { + return description; + } + + /** + * This method maps an MCA Content symbol to the corresponding enum + * @param value a Symbol representing the MCA Content + * @return MCAContent enumeration for the symbol if present otherwise returns Unknown enumeration + */ + public static MCAContent getValueFromSymbol(String value) { + if(value == null) { + return Unknown; + } + try { + return MCAContent.valueOf(value); + } catch(IllegalArgumentException e) { + return Unknown; + } + } +} diff --git a/src/main/java/com/netflix/imflibrary/st0377_41/MCAUseClass.java b/src/main/java/com/netflix/imflibrary/st0377_41/MCAUseClass.java new file mode 100644 index 00000000..381acc30 --- /dev/null +++ b/src/main/java/com/netflix/imflibrary/st0377_41/MCAUseClass.java @@ -0,0 +1,60 @@ +/* + * + * Copyright 2024 RheinMain University of Applied Sciences, Wiesbaden, Germany. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package com.netflix.imflibrary.st0377_41; + +/** + * This enum lists the MCA Use Class Vocabulary defined in the following specification: + * ST 377-41:2023 Table 3 + */ +public enum MCAUseClass { + FCMP("Finished Composite"), + ICMP("Intermediary Composite"), + SMPL("Simplified"), + SING("Singular"), + Unknown("Unknown"); + + String description; + MCAUseClass(String description) { + this.description = description; + } + + /** + * Getter for description for the audio content kind + * @return a String describing the audio content kind + */ + public String getDescription() { + return description; + } + + /** + * This method maps an MCA Use Class symbol to the corresponding enum + * @param value a Symbol representing the MCA Use Class + * @return MCAUseClass enumeration for the symbol if present otherwise returns Unknown enumeration + */ + public static MCAUseClass getValueFromSymbol(String value) { + if(value == null) { + return Unknown; + } + try { + return MCAUseClass.valueOf(value); + } catch(IllegalArgumentException e) { + return Unknown; + } + } +} diff --git a/src/main/java/com/netflix/imflibrary/st2067_2/AbstractApplicationComposition.java b/src/main/java/com/netflix/imflibrary/st2067_2/AbstractApplicationComposition.java index 812dee78..0f69e057 100644 --- a/src/main/java/com/netflix/imflibrary/st2067_2/AbstractApplicationComposition.java +++ b/src/main/java/com/netflix/imflibrary/st2067_2/AbstractApplicationComposition.java @@ -32,6 +32,7 @@ import com.netflix.imflibrary.st0377.header.Preface; import com.netflix.imflibrary.st0377.header.SourcePackage; import com.netflix.imflibrary.st2067_201.IMFIABConstraintsChecker; +import com.netflix.imflibrary.st2067_203.IMFMGASADMConstraintsChecker; import com.netflix.imflibrary.utils.ByteArrayDataProvider; import com.netflix.imflibrary.utils.ByteProvider; import com.netflix.imflibrary.utils.DOMNodeObjectModel; @@ -155,6 +156,11 @@ public AbstractApplicationComposition(@Nonnull IMFCompositionPlaylistType imfCom imfErrorLogger.addAllErrors(errors); } + if (IMFCoreConstraintsChecker.hasMGASADMVirtualTracks(compositionPlaylistType, virtualTrackMap)) { + List errors = IMFMGASADMConstraintsChecker.checkMGASADMVirtualTrack(compositionPlaylistType.getEditRate(), virtualTrackMap, essenceDescriptorListMap, this.regXMLLibDictionary, homogeneitySelectionSet); + imfErrorLogger.addAllErrors(errors); + } + if ((compositionPlaylistType.getEssenceDescriptorList() == null) || (compositionPlaylistType.getEssenceDescriptorList().size() < 1)) { imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_CORE_CONSTRAINTS_ESSENCE_DESCRIPTOR_LIST_MISSING, @@ -365,6 +371,15 @@ public UUID getUUID() { return this.compositionPlaylistType.getId(); } + /** + * Getter for the ExtensionProperties corresponding to this Composition document + * + * @return value of ExtensionProperties of this Composition object + */ + public org.smpte_ra.schemas._2067_3._2016.CompositionPlaylistType.ExtensionProperties getExtensionProperties() { + return this.compositionPlaylistType.getExtensionProperties(); + } + /** * Getter for the CompositionPlaylistType object model of the Composition defined by the st2067-3 schema. * diff --git a/src/main/java/com/netflix/imflibrary/st2067_2/ApplicationComposition.java b/src/main/java/com/netflix/imflibrary/st2067_2/ApplicationComposition.java index 0ba15c0e..28fa6dda 100644 --- a/src/main/java/com/netflix/imflibrary/st2067_2/ApplicationComposition.java +++ b/src/main/java/com/netflix/imflibrary/st2067_2/ApplicationComposition.java @@ -22,6 +22,9 @@ import com.netflix.imflibrary.utils.DOMNodeObjectModel; import com.netflix.imflibrary.utils.ErrorLogger; import com.netflix.imflibrary.utils.ResourceByteRangeProvider; + +import org.smpte_ra.schemas._2067_3._2013.CompositionPlaylistType; +import org.smpte_ra.schemas._2067_3._2016.CompositionPlaylistType.ExtensionProperties; import org.w3c.dom.Node; import javax.annotation.Nonnull; @@ -105,6 +108,13 @@ public interface ApplicationComposition { */ public UUID getUUID(); + /** + * Getter for the ExtensionProperties corresponding to this Composition document + * + * @return value of ExtensionProperties of this Composition object + */ + public ExtensionProperties getExtensionProperties(); + /** * Get the Java package string for the Core Constraints version * @deprecated Instead use {@link #getCoreConstraintsSchema()} diff --git a/src/main/java/com/netflix/imflibrary/st2067_2/Composition.java b/src/main/java/com/netflix/imflibrary/st2067_2/Composition.java index 16be8f0b..f54fea3c 100644 --- a/src/main/java/com/netflix/imflibrary/st2067_2/Composition.java +++ b/src/main/java/com/netflix/imflibrary/st2067_2/Composition.java @@ -192,6 +192,7 @@ public static enum SequenceTypeEnum { ForcedNarrativeSequence("ForcedNarrativeSequence"), AncillaryDataSequence("AncillaryDataSequence"), IABSequence("IABSequence"), + MGASADMSignalSequence("MGASADMSignalSequence"), UnsupportedSequence("UnsupportedSequence"); private final String name; @@ -230,6 +231,8 @@ public static SequenceTypeEnum getSequenceTypeEnum(String name) { return AncillaryDataSequence; case "IABSequence": return IABSequence; + case "MGASADMSignalSequence": + return MGASADMSignalSequence; case "UnsupportedSequence": default: return UnsupportedSequence; diff --git a/src/main/java/com/netflix/imflibrary/st2067_2/CompositionModel_st2067_2_2013.java b/src/main/java/com/netflix/imflibrary/st2067_2/CompositionModel_st2067_2_2013.java index 14a3b74e..2ff92df8 100755 --- a/src/main/java/com/netflix/imflibrary/st2067_2/CompositionModel_st2067_2_2013.java +++ b/src/main/java/com/netflix/imflibrary/st2067_2/CompositionModel_st2067_2_2013.java @@ -88,7 +88,8 @@ private CompositionModel_st2067_2_2013(){ segmentList, essenceDescriptorList, coreConstraintsSchema, - applicationIDs + applicationIDs, + null ); } diff --git a/src/main/java/com/netflix/imflibrary/st2067_2/CompositionModel_st2067_2_2016.java b/src/main/java/com/netflix/imflibrary/st2067_2/CompositionModel_st2067_2_2016.java index d418f713..7ec3ea01 100755 --- a/src/main/java/com/netflix/imflibrary/st2067_2/CompositionModel_st2067_2_2016.java +++ b/src/main/java/com/netflix/imflibrary/st2067_2/CompositionModel_st2067_2_2016.java @@ -6,6 +6,7 @@ import com.netflix.imflibrary.utils.ResourceByteRangeProvider; import com.netflix.imflibrary.writerTools.CompositionPlaylistBuilder_2016; import com.netflix.imflibrary.writerTools.utils.ValidationEventHandlerImpl; +import org.smpte_ra.schemas._2067_3._2016.CompositionPlaylistType.ExtensionProperties; import org.w3c.dom.Element; import org.xml.sax.SAXException; @@ -78,6 +79,8 @@ private CompositionModel_st2067_2_2016(){ coreConstraintsSchema = CoreConstraints.NAMESPACE_IMF_2016; } + ExtensionProperties extensionProperties = compositionPlaylistType.getExtensionProperties(); + return new IMFCompositionPlaylistType( compositionPlaylistType.getId(), compositionPlaylistType.getEditRate(), (compositionPlaylistType.getAnnotation() == null ? null : compositionPlaylistType.getAnnotation().getValue()), @@ -88,7 +91,8 @@ private CompositionModel_st2067_2_2016(){ segmentList, essenceDescriptorList, coreConstraintsSchema, - applicationIDs + applicationIDs, + extensionProperties ); } @@ -310,7 +314,8 @@ private static JAXBContext createJAXBContext() org.smpte_ra.schemas._2067_3._2016.ObjectFactory.class,// 2016 2016 CPL org.smpte_ra.schemas._2067_2._2016.ObjectFactory.class, // 2016 Core constraints org.smpte_ra.ns._2067_2._2020.ObjectFactory.class, // 2020 Core constraints - org.smpte_ra.ns._2067_201._2019.ObjectFactory.class); // IAB plugin + org.smpte_ra.ns._2067_201._2019.ObjectFactory.class, // IAB plugin + org.smpte_ra.ns._2067_203._2022.ObjectFactory.class); // MGA S-ADM plugin } catch(JAXBException e) { @@ -331,7 +336,8 @@ private static Schema createValidationSchema() InputStream xsd_dcmlTypes = contextClassLoader.getResourceAsStream("org/smpte_ra/schemas/st0433_2008/dcmlTypes/dcmlTypes.xsd"); InputStream xsd_cpl_2016 = contextClassLoader.getResourceAsStream("org/smpte_ra/schemas/st2067_3_2016/imf-cpl-20160411.xsd"); InputStream xsd_core_constraints_2016 = contextClassLoader.getResourceAsStream("org/smpte_ra/schemas/st2067_2_2016/imf-core-constraints-20160411.xsd"); - InputStream xsd_core_constraints_2020 = contextClassLoader.getResourceAsStream("org/smpte_ra/schemas/st2067_2_2020/imf-core-constraints-2020.xsd") + InputStream xsd_core_constraints_2020 = contextClassLoader.getResourceAsStream("org/smpte_ra/schemas/st2067_2_2020/imf-core-constraints-2020.xsd"); + InputStream xsd_sadm_2067_203 = contextClassLoader.getResourceAsStream("org/smpte_ra/schemas/st2067_203_2023/st2067-203-2023.xsd"); ) { // Build a schema from all of the XSD files provided @@ -342,6 +348,7 @@ private static Schema createValidationSchema() new StreamSource(xsd_cpl_2016), new StreamSource(xsd_core_constraints_2016), new StreamSource(xsd_core_constraints_2020), + new StreamSource(xsd_sadm_2067_203), }); } catch(IOException | SAXException e) diff --git a/src/main/java/com/netflix/imflibrary/st2067_2/IMFCompositionPlaylistType.java b/src/main/java/com/netflix/imflibrary/st2067_2/IMFCompositionPlaylistType.java index 03f0f925..457bc7d2 100644 --- a/src/main/java/com/netflix/imflibrary/st2067_2/IMFCompositionPlaylistType.java +++ b/src/main/java/com/netflix/imflibrary/st2067_2/IMFCompositionPlaylistType.java @@ -25,6 +25,9 @@ import com.netflix.imflibrary.utils.ResourceByteRangeProvider; import com.netflix.imflibrary.utils.UUIDHelper; import com.netflix.imflibrary.utils.Utilities; + +import org.smpte_ra.schemas._2067_3._2013.CompositionPlaylistType; +import org.smpte_ra.schemas._2067_3._2016.CompositionPlaylistType.ExtensionProperties; import org.w3c.dom.Document; import org.w3c.dom.NodeList; import org.xml.sax.ErrorHandler; @@ -62,6 +65,7 @@ final class IMFCompositionPlaylistType { private final IMFErrorLogger imfErrorLogger; private final String coreConstraintsSchema; private final Set applicationIdSet; + private final ExtensionProperties extensionProperties; /** * @deprecated @@ -85,6 +89,28 @@ public IMFCompositionPlaylistType(String id, this(id, editRate, annotation, issuer, creator, contentOriginator, contentTitle, segmentList, essenceDescriptorList, coreConstraintsSchema, (applicationId == null ? new HashSet<>() : new HashSet(Arrays.asList(applicationId)))); } + /** + * @deprecated + * This constructor is a legacy constructor without support for extensionProperties. + * Use the constructor with support for passing extensionProperties instead. + */ + @Deprecated + public IMFCompositionPlaylistType(String id, + List editRate, + String annotation, + String issuer, + String creator, + String contentOriginator, + String contentTitle, + List segmentList, + List essenceDescriptorList, + String coreConstraintsSchema, + @Nonnull Set applicationIds) + { + this(id, editRate, annotation, issuer, creator, contentOriginator, contentTitle, segmentList, essenceDescriptorList, coreConstraintsSchema, applicationIds, null); + } + + public IMFCompositionPlaylistType(String id, List editRate, String annotation, @@ -95,7 +121,8 @@ public IMFCompositionPlaylistType(String id, List segmentList, List essenceDescriptorList, String coreConstraintsSchema, - @Nonnull Set applicationIds) + @Nonnull Set applicationIds, + ExtensionProperties extensionProperties) { this.id = UUIDHelper.fromUUIDAsURNStringToUUID(id); Composition.EditRate rate = null; @@ -119,6 +146,7 @@ public IMFCompositionPlaylistType(String id, this.essenceDescriptorList = Collections.unmodifiableList(essenceDescriptorList); this.coreConstraintsSchema = coreConstraintsSchema; this.applicationIdSet = Collections.unmodifiableSet(applicationIds); + this.extensionProperties = extensionProperties; if(imfErrorLogger.hasFatalErrors()) { @@ -301,6 +329,15 @@ public String getContentTitle(){ return this.contentTitle; } + /** + * Getter for the ExtensionProperties corresponding to this Composition document + * + * @return value of ExtensionProperties of this Composition object + */ + public ExtensionProperties getExtensionProperties() { + return this.extensionProperties; + } + /** * Getter for the SegmentList of the Composition Playlist * @return a string representing the SegmentList of the Composition Playlist diff --git a/src/main/java/com/netflix/imflibrary/st2067_2/IMFCoreConstraintsChecker.java b/src/main/java/com/netflix/imflibrary/st2067_2/IMFCoreConstraintsChecker.java index 800953e3..ac8ba7aa 100644 --- a/src/main/java/com/netflix/imflibrary/st2067_2/IMFCoreConstraintsChecker.java +++ b/src/main/java/com/netflix/imflibrary/st2067_2/IMFCoreConstraintsChecker.java @@ -121,10 +121,11 @@ public static List checkVirtualTracks(IMFCompositionPla || virtualTrack.getSequenceTypeEnum().equals(Composition.SequenceTypeEnum.SubtitlesSequence) || (virtualTrack.getSequenceTypeEnum().equals(Composition.SequenceTypeEnum.ForcedNarrativeSequence) && compositionPlaylistType.getCoreConstraintsSchema().equals(CoreConstraints.NAMESPACE_IMF_2020)) - || virtualTrack.getSequenceTypeEnum().equals(Composition.SequenceTypeEnum.IABSequence))) { + || virtualTrack.getSequenceTypeEnum().equals(Composition.SequenceTypeEnum.IABSequence) + || virtualTrack.getSequenceTypeEnum().equals(Composition.SequenceTypeEnum.MGASADMSignalSequence))) { imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_CPL_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.WARNING, - String.format("CPL has a Sequence of type %s which is not fully supported sequence type in Photon", - virtualTrack.getSequenceTypeEnum().toString())); + String.format("CPL has a Sequence of type %s which is not fully supported sequence type in Photon, NS: %s", + virtualTrack.getSequenceTypeEnum().toString(), compositionPlaylistType.getCoreConstraintsSchema())); continue; } @@ -150,7 +151,8 @@ else if(virtualTrack.getSequenceTypeEnum().equals(Composition.SequenceTypeEnum.M || virtualTrack.getSequenceTypeEnum().equals(Composition.SequenceTypeEnum.SubtitlesSequence) || (virtualTrack.getSequenceTypeEnum().equals(Composition.SequenceTypeEnum.ForcedNarrativeSequence) && compositionPlaylistType.getCoreConstraintsSchema().equals(CoreConstraints.NAMESPACE_IMF_2020)) - || virtualTrack.getSequenceTypeEnum().equals(Composition.SequenceTypeEnum.IABSequence)) + || virtualTrack.getSequenceTypeEnum().equals(Composition.SequenceTypeEnum.IABSequence) + || virtualTrack.getSequenceTypeEnum().equals(Composition.SequenceTypeEnum.MGASADMSignalSequence)) && compositionPlaylistType.getEssenceDescriptorList() != null && compositionPlaylistType.getEssenceDescriptorList().size() > 0) { @@ -180,7 +182,8 @@ else if(virtualTrack.getSequenceTypeEnum().equals(Composition.SequenceTypeEnum.M && compositionPlaylistType.getCoreConstraintsSchema().equals(CoreConstraints.NAMESPACE_IMF_2020))) { essenceDescriptorField = "SampleRate"; } else if (virtualTrack.getSequenceTypeEnum().equals(Composition.SequenceTypeEnum.MainAudioSequence) || - virtualTrack.getSequenceTypeEnum().equals(Composition.SequenceTypeEnum.IABSequence)) { + virtualTrack.getSequenceTypeEnum().equals(Composition.SequenceTypeEnum.IABSequence) || + virtualTrack.getSequenceTypeEnum().equals(Composition.SequenceTypeEnum.MGASADMSignalSequence)){ essenceDescriptorField = "SampleRate"; otherEssenceDescriptorField = "AudioSampleRate"; } @@ -239,7 +242,8 @@ else if(virtualTrack.getSequenceTypeEnum().equals(Composition.SequenceTypeEnum.M } else if( virtualTrack.getSequenceTypeEnum().equals(Composition.SequenceTypeEnum.MainImageSequence) || virtualTrack.getSequenceTypeEnum().equals(Composition.SequenceTypeEnum.MainAudioSequence) - || virtualTrack.getSequenceTypeEnum().equals(Composition.SequenceTypeEnum.IABSequence)){ + || virtualTrack.getSequenceTypeEnum().equals(Composition.SequenceTypeEnum.IABSequence) + || virtualTrack.getSequenceTypeEnum().equals(Composition.SequenceTypeEnum.MGASADMSignalSequence)){ boolean isVirtualTrackHomogeneous = true; Set homogeneitySelectionSetAll = new HashSet<>(homogeneitySelectionSet); homogeneitySelectionSetAll.addAll(IMFCoreConstraintsChecker.homogeneitySelectionSet); @@ -310,6 +314,25 @@ public static boolean hasIABVirtualTracks(IMFCompositionPlaylistType composition return foundIABEssence; } + public static boolean hasMGASADMVirtualTracks(IMFCompositionPlaylistType compositionPlaylistType, + Map virtualTrackMap){ + boolean foundMGASADMEssence = false; + IMFErrorLogger imfErrorLogger =new IMFErrorLoggerImpl(); + Iterator iterator = virtualTrackMap.entrySet().iterator(); + while(iterator.hasNext()) { + Composition.VirtualTrack virtualTrack = ((Map.Entry) iterator.next()).getValue(); + List virtualTrackResourceList = virtualTrack.getResourceList(); + List errors = checkVirtualTrackResourceList(virtualTrack.getTrackID(), virtualTrackResourceList); + imfErrorLogger.addAllErrors(errors); + + if (virtualTrack.getSequenceTypeEnum().equals(Composition.SequenceTypeEnum.MGASADMSignalSequence)) { + foundMGASADMEssence = true; + } + } + + return foundMGASADMEssence; + } + /** * Checks that for each segment that: * - all tracks in the segment are in the reference track map diff --git a/src/main/java/com/netflix/imflibrary/st2067_203/IMFMGASADMConstraintsChecker.java b/src/main/java/com/netflix/imflibrary/st2067_203/IMFMGASADMConstraintsChecker.java new file mode 100644 index 00000000..809f849e --- /dev/null +++ b/src/main/java/com/netflix/imflibrary/st2067_203/IMFMGASADMConstraintsChecker.java @@ -0,0 +1,319 @@ +/* + * + * Copyright 2024 RheinMain University of Applied Sciences, Wiesbaden, Germany. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package com.netflix.imflibrary.st2067_203; + +import com.netflix.imflibrary.IMFErrorLogger; +import com.netflix.imflibrary.IMFErrorLoggerImpl; +import com.netflix.imflibrary.st0377.header.UL; +import com.netflix.imflibrary.st0377_41.*; +import com.netflix.imflibrary.st2067_2.AbstractApplicationComposition; +import com.netflix.imflibrary.st2067_2.ApplicationComposition; +import com.netflix.imflibrary.st2067_2.Composition; +import com.netflix.imflibrary.st2067_2.IMFBaseResourceType; +import com.netflix.imflibrary.st2067_2.IMFEssenceComponentVirtualTrack; +import com.netflix.imflibrary.st2067_2.IMFTrackFileResourceType; +import com.netflix.imflibrary.st2067_2.Composition.SequenceTypeEnum; +import com.netflix.imflibrary.st2067_2.Composition.VirtualTrack; +import com.netflix.imflibrary.utils.DOMNodeObjectModel; +import com.netflix.imflibrary.utils.ErrorLogger; +import com.netflix.imflibrary.utils.RegXMLLibDictionary; +import com.netflix.imflibrary.utils.UUIDHelper; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.Set; +import java.util.UUID; +import java.util.stream.Collectors; + +import org.smpte_ra.ns._2067_203._2022.MGASADMSoundfieldGroupSelectorType; +import org.smpte_ra.ns._2067_203._2022.MGASADMVirtualTrackParameterSet; + +import static com.netflix.imflibrary.st0377.header.GenericSoundEssenceDescriptor.ElectroSpatialFormulation.MULTI_CHANNEL_MODE; +import static com.netflix.imflibrary.st2067_203.MGASoundEssenceDescriptor.MGA_AUDIO_ESSENCE_UNCOMPRESSED_SOUND_CODING; +import static com.netflix.imflibrary.st2067_203.MGASoundEssenceDescriptor.MXF_GC_CLIP_WRAPPED_MGA; + +public class IMFMGASADMConstraintsChecker { + private static final Integer MGASADM_BIT_DEPTH = 24; + + // SMPTE ST 2067-203 Operational Modes + public static final String MGA_SADM_OPERATIONAL_MODE_A = "http://www.smpte-ra.org/ns/2067-203/2022#Operational-Mode-A"; + static final List MGA_SADM_OPERATIONAL_MODES = Collections.unmodifiableList(Arrays.asList( + MGA_SADM_OPERATIONAL_MODE_A)); + + public static List checkMGASADMVirtualTrack(Composition.EditRate compositionEditRate, + Map virtualTrackMap, + Map essenceDescriptorListMap, + RegXMLLibDictionary regXMLLibDictionary, + Set homogeneitySelectionSet) { + IMFErrorLogger imfErrorLogger = new IMFErrorLoggerImpl(); + Iterator iterator = virtualTrackMap.entrySet().iterator(); + while(iterator.hasNext()) { + Composition.VirtualTrack virtualTrack = ((Map.Entry) iterator.next()).getValue(); + if (!virtualTrack.getSequenceTypeEnum().equals(Composition.SequenceTypeEnum.MGASADMSignalSequence)) continue; + + List virtualTrackResourceList = virtualTrack.getResourceList(); + for(IMFBaseResourceType baseResource : virtualTrackResourceList) { + IMFTrackFileResourceType imfTrackFileResourceType = IMFTrackFileResourceType.class.cast(baseResource); + DOMNodeObjectModel domNodeObjectModel = essenceDescriptorListMap.get(UUIDHelper.fromUUIDAsURNStringToUUID(imfTrackFileResourceType.getSourceEncoding())); + if (!domNodeObjectModel.getLocalName().equals("MGASoundEssenceDescriptor")) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_CORE_CONSTRAINTS_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, String.format("EssenceDescriptor ID %s referenced by " + + "an MGA S-ADM VirtualTrack Resource does not have an MGASoundEssenceDescriptor but %s", + imfTrackFileResourceType.getSourceEncoding(), domNodeObjectModel.getLocalName())); + } + + if (((imfTrackFileResourceType.getEditRate().getNumerator()*compositionEditRate.getDenominator()) % (imfTrackFileResourceType.getEditRate().getDenominator()*compositionEditRate.getNumerator()) != 0)) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_CORE_CONSTRAINTS_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, String.format("The EditRate %s/%s of resource %s is not a multiple of the EditRate of the Main Image Virtual Track %s/%s", + imfTrackFileResourceType.getEditRate().getNumerator(), imfTrackFileResourceType.getEditRate().getDenominator(), imfTrackFileResourceType.getId(), compositionEditRate.getNumerator(), compositionEditRate.getDenominator())); + } + + if (!domNodeObjectModel.getFieldAsUL("ContainerFormat").equals(MXF_GC_CLIP_WRAPPED_MGA)) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_CORE_CONSTRAINTS_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, String.format("EssenceDescriptor ID %s referenced by " + + "an MGA S-ADM VirtualTrack Resource does not use the correct Essence Container UL: %s vs. %s", + imfTrackFileResourceType.getSourceEncoding(), domNodeObjectModel.getFieldAsUL("ContainerFormat"), MXF_GC_CLIP_WRAPPED_MGA)); + } + + if (!domNodeObjectModel.getFieldAsUL("SoundCompression").equals(MGA_AUDIO_ESSENCE_UNCOMPRESSED_SOUND_CODING)) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_CORE_CONSTRAINTS_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, String.format("EssenceDescriptor ID %s referenced by " + + "an MGA S-ADM VirtualTrack Resource does not use the correct Sound Compression UL: %s vs. %s", + imfTrackFileResourceType.getSourceEncoding(), domNodeObjectModel.getFieldAsUL("SoundCompression"), MGA_AUDIO_ESSENCE_UNCOMPRESSED_SOUND_CODING)); + } + + if (domNodeObjectModel.getFieldAsInteger("QuantizationBits") != MGASADM_BIT_DEPTH.intValue()) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_CORE_CONSTRAINTS_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, String.format("EssenceDescriptor ID %s referenced by " + + "an MGA S-ADM VirtualTrack Resource has invalid QuantizationBits field: %s vs. %s", + imfTrackFileResourceType.getSourceEncoding(), domNodeObjectModel.getFieldAsInteger("QuantizationBits"), MGASADM_BIT_DEPTH)); + } + + if (domNodeObjectModel.getFieldAsString("AudioSampleRate") == null) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_CORE_CONSTRAINTS_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, String.format("EssenceDescriptor ID %s referenced by " + + "an MGA S-ADM VirtualTrack Resource does not have an AudioSampleRate item.", imfTrackFileResourceType.getSourceEncoding())); + } + + if (domNodeObjectModel.getFieldAsInteger("ElectrospatialFormulation") != null && domNodeObjectModel.getFieldAsInteger("ElectrospatialFormulation").intValue() != MULTI_CHANNEL_MODE.value()) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_CORE_CONSTRAINTS_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, String.format("EssenceDescriptor ID %s referenced by " + + "an MGA S-ADM VirtualTrack Resource has an invalid value of ElectrospatialFormulation: %d vs. %d.", imfTrackFileResourceType.getSourceEncoding(), domNodeObjectModel.getFieldAsInteger("ElectrospatialFormulation"), MULTI_CHANNEL_MODE.value())); + } + + if (domNodeObjectModel.getChildrenDOMNodes().size() == 0) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_CORE_CONSTRAINTS_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, String.format("EssenceDescriptor ID %s referenced by " + + "an MGA S-ADM VirtualTrack Resource has no SubDescriptor", imfTrackFileResourceType.getSourceEncoding())); + } else { + for (Map.Entry entry : domNodeObjectModel.getChildrenDOMNodes().entrySet()) { + if (!entry.getKey().getLocalName().equals("SubDescriptors")) continue; + + for (Map.Entry subentry : entry.getKey().getChildrenDOMNodes().entrySet()) { + + if (subentry.getKey().getLocalName().equals("AudioChannelLabelSubDescriptor") || subentry.getKey().getLocalName().equals("SoundFieldGroupLabelSubDescriptor") || subentry.getKey().getLocalName().equals("GroupOfSoundfieldGroupsLabelSubDescriptor")) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_CORE_CONSTRAINTS_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, String.format("EssenceDescriptor ID %s referenced by " + + "an MGA S-ADM VirtualTrack Resource has forbidden %s", imfTrackFileResourceType.getSourceEncoding(), subentry.getKey().getLocalName())); + } else if (subentry.getKey().getLocalName().equals("MGASoundfieldGroupLabelSubDescriptor")) { + if (subentry.getKey().getFieldAsUL("MCALabelDictionaryID") == null) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_CORE_CONSTRAINTS_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, String.format("EssenceDescriptor ID %s referenced by " + + "an MGA S-ADM VirtualTrack Resource is missing MCA Label Dictionary ID", imfTrackFileResourceType.getSourceEncoding())); + + } else if (!MGASoundfieldGroupLabelSubDescriptor.MGA_MCA_LABEL_DICTIONNARY_ID_UL.equals(subentry.getKey().getFieldAsUL("MCALabelDictionaryID"))) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_CORE_CONSTRAINTS_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.WARNING, String.format("EssenceDescriptor ID %s referenced by " + + "an MGA S-ADM VirtualTrack Resource does not have the MCA Label Dictionary ID for MGA (%s vs. %s)", imfTrackFileResourceType.getSourceEncoding(), subentry.getKey().getFieldAsUL("MCALabelDictionaryID"), MGASoundfieldGroupLabelSubDescriptor.MGA_MCA_LABEL_DICTIONNARY_ID_UL)); + } + if (subentry.getKey().getFieldAsString("MCATagSymbol") == null) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_CORE_CONSTRAINTS_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, String.format("EssenceDescriptor ID %s referenced by " + + "an MGA S-ADM VirtualTrack Resource is missing MCATagSymbol", imfTrackFileResourceType.getSourceEncoding())); + + } else if (!MGASoundfieldGroupLabelSubDescriptor.MGA_MCA_TAG_SYMBOL.equals(subentry.getKey().getFieldAsString("MCATagSymbol"))) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_CORE_CONSTRAINTS_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.WARNING, String.format("EssenceDescriptor ID %s referenced by " + + "an MGA S-ADM VirtualTrack Resource does not have the MCA Tag Symbol for MGA (%s vs. %s)", imfTrackFileResourceType.getSourceEncoding(), subentry.getKey().getFieldAsString("MCATagSymbol"), MGASoundfieldGroupLabelSubDescriptor.MGA_MCA_TAG_SYMBOL)); + } + if (subentry.getKey().getFieldAsString("MCATagName") == null) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_CORE_CONSTRAINTS_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, String.format("EssenceDescriptor ID %s referenced by " + + "an MGA S-ADM VirtualTrack Resource is missing MCATagName", imfTrackFileResourceType.getSourceEncoding())); + + } else if (!MGASoundfieldGroupLabelSubDescriptor.MGA_MCA_TAG_NAME.equals(subentry.getKey().getFieldAsString("MCATagName"))) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_CORE_CONSTRAINTS_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.WARNING, String.format("EssenceDescriptor ID %s referenced by " + + "an MGA S-ADM VirtualTrack Resource does not have the MCA Tag Name for MGA (%s vs. %s)", imfTrackFileResourceType.getSourceEncoding(), subentry.getKey().getFieldAsString("MCATagName"), MGASoundfieldGroupLabelSubDescriptor.MGA_MCA_TAG_NAME)); + } + if (subentry.getKey().getFieldAsString("MCAContent") == null) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_CORE_CONSTRAINTS_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.WARNING, String.format("EssenceDescriptor ID %s referenced by " + + "an MGA S-ADM VirtualTrack Resource is missing MCAContent", imfTrackFileResourceType.getSourceEncoding())); + } else if (MCAContent.getValueFromSymbol(subentry.getKey().getFieldAsString("MCAContent")) == MCAContent.Unknown) { + // Check against ST 377-41:2021 Table 2 + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_CORE_CONSTRAINTS_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.WARNING, String.format("EssenceDescriptor ID %s referenced by " + + "an MGA S-ADM VirtualTrack Resource has invalid MCA Content (%s)", imfTrackFileResourceType.getSourceEncoding(), subentry.getKey().getFieldAsString("MCAContent"))); + } + if (subentry.getKey().getFieldAsString("MCAUseClass") == null) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_CORE_CONSTRAINTS_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.WARNING, String.format("EssenceDescriptor ID %s referenced by " + + "an MGA S-ADM VirtualTrack Resource is missing MCAUseClass", imfTrackFileResourceType.getSourceEncoding())); + } else if (MCAUseClass.getValueFromSymbol(subentry.getKey().getFieldAsString("MCAUseClass")) == MCAUseClass.Unknown) { + // Check against ST 377-41:2021 Table 3 + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_CORE_CONSTRAINTS_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.WARNING, String.format("EssenceDescriptor ID %s referenced by " + + "an MGA S-ADM VirtualTrack Resource has invalid MCA Use Class (%s)", imfTrackFileResourceType.getSourceEncoding(), subentry.getKey().getFieldAsString("MCAUseClass"))); + } + // Check against ST 2067-203:2023 Table 3 + if (subentry.getKey().getFieldAsString("MCATitle") == null) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_CORE_CONSTRAINTS_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.WARNING, String.format("EssenceDescriptor ID %s referenced by " + + "an MGA S-ADM VirtualTrack Resource is missing MCATitle", imfTrackFileResourceType.getSourceEncoding())); + } + // Check against ST 2067-203:2023 Table 3 + if (subentry.getKey().getFieldAsString("MCATitleVersion") == null) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_CORE_CONSTRAINTS_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.WARNING, String.format("EssenceDescriptor ID %s referenced by " + + "an MGA S-ADM VirtualTrack Resource is missing MCATitleVersion", imfTrackFileResourceType.getSourceEncoding())); + } + if (subentry.getKey().getFieldAsString("MCAChannelID") != null) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_CORE_CONSTRAINTS_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, String.format("EssenceDescriptor ID %s referenced by " + + "an MGA S-ADM VirtualTrack Resource has forbidden MCAChannelID %s", imfTrackFileResourceType.getSourceEncoding(), subentry.getKey().getFieldAsString("MCAChannelID"))); + } + } else if (subentry.getKey().getLocalName().equals("MGAAudioMetadataSubDescriptor")) { + if (subentry.getKey().getFieldAsString("MGALinkID") == null) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_CORE_CONSTRAINTS_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, String.format("EssenceDescriptor ID %s referenced by " + + "an MGA S-ADM VirtualTrack Resource is missing MGALinkID", imfTrackFileResourceType.getSourceEncoding())); + } + if (subentry.getKey().getFieldAsInteger("MGAAudioMetadataIndex") == null) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_CORE_CONSTRAINTS_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, String.format("EssenceDescriptor ID %s referenced by " + + "an MGA S-ADM VirtualTrack Resource is missing MGAAudioMetadataIndex", imfTrackFileResourceType.getSourceEncoding())); + } + if (subentry.getKey().getFieldAsInteger("MGAAudioMetadataIdentifier") == null) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_CORE_CONSTRAINTS_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, String.format("EssenceDescriptor ID %s referenced by " + + "an MGA S-ADM VirtualTrack Resource is missing MGAAudioMetadataIdentifier", imfTrackFileResourceType.getSourceEncoding())); + } + if (subentry.getKey().getFieldsAsUL("MGAAudioMetadataPayloadULArray") == null) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_CORE_CONSTRAINTS_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, String.format("EssenceDescriptor ID %s referenced by " + + "an MGA S-ADM VirtualTrack Resource is missing MGAAudioMetadataPayloadULArray", imfTrackFileResourceType.getSourceEncoding())); + } + } else if (subentry.getKey().getLocalName().equals("SADMAudioMetadataSubDescriptor")) { + if (subentry.getKey().getFieldAsString("SADMMetadataSectionLinkID") == null) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_CORE_CONSTRAINTS_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, String.format("EssenceDescriptor ID %s referenced by " + + "an MGA S-ADM VirtualTrack Resource is missing SADMMetadataSectionLinkID", imfTrackFileResourceType.getSourceEncoding())); + } + if (subentry.getKey().getFieldsAsUL("SADMProfileLevelULBatch") == null) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_CORE_CONSTRAINTS_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.WARNING, String.format("EssenceDescriptor ID %s referenced by " + + "an MGA S-ADM VirtualTrack Resource is missing SADMProfileLevelULBatch", imfTrackFileResourceType.getSourceEncoding())); + } + } + } + + } + } + } + } + return imfErrorLogger.getErrors(); + } + public static List checkMGASADMVirtualTrackParameterSet(ApplicationComposition applicationComposition) { + + IMFErrorLogger imfErrorLogger = new IMFErrorLoggerImpl(); + List mgaSADMVirtualTrackParameterSetList = new ArrayList<>(); + List mgaSADMSignalSequenceTrackIds = new ArrayList<>(); + Map> mgaSadmResourceHash = new LinkedHashMap<>(); + Set virtualTrackParameterSet = Collections.emptySet(); + if (applicationComposition.getExtensionProperties() != null) { + virtualTrackParameterSet = applicationComposition.getExtensionProperties().getAny().stream().collect(Collectors.toSet()); + Iterator iterator = virtualTrackParameterSet.iterator(); + while (iterator != null && iterator.hasNext()) { + Object obj = iterator.next(); + if (obj.getClass() == MGASADMVirtualTrackParameterSet.class) { + MGASADMVirtualTrackParameterSet vtps = MGASADMVirtualTrackParameterSet.class.cast(obj); + // collect all MGASADMVirtualTrackParameterSet instances + mgaSADMVirtualTrackParameterSetList.add(vtps); + if (!MGA_SADM_OPERATIONAL_MODES.contains(vtps.getMGASADMOperationalMode())) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_CPL_ERROR, + IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, String.format("Value %s of Operational Mode not permitted in MGASADMVirtualTrackParameterSet", vtps.getMGASADMOperationalMode())); + } + } + } + } + for (IMFEssenceComponentVirtualTrack virtualTrack : applicationComposition.getEssenceVirtualTracks()) { + // ST 2067-203, section 6.3.4, check for a MGA S-ADM Virtual Track Parameter Set for each MGA S-ADM Virtual Track + if (virtualTrack.getSequenceTypeEnum() == SequenceTypeEnum.MGASADMSignalSequence) { + mgaSADMSignalSequenceTrackIds.add(UUIDHelper.fromUUID(virtualTrack.getTrackID())); + List resource_id_list = new ArrayList<>(); + for (IMFBaseResourceType resource : virtualTrack.getResourceList()) { + // collect all resource IDs for a given Track ID + resource_id_list.add(resource.getId()); + } + mgaSadmResourceHash.put(virtualTrack.getTrackID(), resource_id_list); + + if (applicationComposition.getExtensionProperties() != null) { + int trackIdsFound = 0; + for (MGASADMVirtualTrackParameterSet vps : mgaSADMVirtualTrackParameterSetList) { + if (UUIDHelper.fromUUID(virtualTrack.getTrackID()).matches(vps.getTrackId())) trackIdsFound++; + } + if (trackIdsFound == 0) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_CPL_ERROR, + IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, String.format("No MGASADMVirtualTrackParameterSet for MGA S-ADM Virtual Track %s present", virtualTrack.getTrackID().toString())); + } else if (trackIdsFound > 1) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_CPL_ERROR, + IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, String.format("There are %d MGASADMVirtualTrackParameterSet for MGA S-ADM Virtual Track %s present, shall be only 1", trackIdsFound, virtualTrack.getTrackID().toString())); + } + } else { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_CPL_ERROR, + IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, String.format("No MGASADMVirtualTrackParameterSet for MGA S-ADM Virtual Track %s present", virtualTrack.getTrackID().toString())); + } + } + } + // Check if any MGASADMVirtualTrackParameterSet items do not correspond to a MGASADMSignalSequence + for (MGASADMVirtualTrackParameterSet vps : mgaSADMVirtualTrackParameterSetList) { + if (mgaSADMSignalSequenceTrackIds.isEmpty()) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_CPL_ERROR, + IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, String.format("MGASADMVirtualTrackParameterSet for Track ID %s does not correspond to an MGA S-ADM Virtual Track", vps.getTrackId())); + } else { + if (!mgaSADMSignalSequenceTrackIds.contains(vps.getTrackId())) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_CPL_ERROR, + IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, String.format("MGASADMVirtualTrackParameterSet for Track ID %s does not correspond to an MGA S-ADM Virtual Track", vps.getTrackId())); + } else { + for (MGASADMSoundfieldGroupSelectorType mga_sg_selector: vps.getMGASADMSoundfieldGroupSelector()) { + if (!mgaSadmResourceHash.get(UUIDHelper.fromUUIDAsURNStringToUUID(vps.getTrackId())).contains(mga_sg_selector.getResourceId())) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_CPL_ERROR, + IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, String.format("MGASADMSoundfieldGroupSelector for Track ID %s references an unknown resource %s", vps.getTrackId(), mga_sg_selector.getResourceId())); + } else { + Optional optional = applicationComposition.getEssenceVirtualTracks().stream().filter(e->e.getTrackID().equals(UUIDHelper.fromUUIDAsURNStringToUUID(vps.getTrackId()))).findAny(); + if (optional.isPresent()) { + IMFEssenceComponentVirtualTrack virtual_track = optional.get(); + Optional optional2 = virtual_track.getTrackFileResourceList().stream().filter(e->e.getId().equals(mga_sg_selector.getResourceId())).findAny(); + if (optional2.isPresent()) { + DOMNodeObjectModel essence_descriptor_dom_node = applicationComposition.getEssenceDescriptor(UUIDHelper.fromUUIDAsURNStringToUUID(optional2.get().getTrackFileId())); + List mca_sg_link_id_list = new ArrayList<>(); + for (Map.Entry entry : essence_descriptor_dom_node.getChildrenDOMNodes().entrySet()) { + if (!entry.getKey().getLocalName().equals("SubDescriptors")) continue; + + for (Map.Entry subentry : entry.getKey().getChildrenDOMNodes().entrySet()) { + if (subentry.getKey().getLocalName().equals("MGASoundfieldGroupLabelSubDescriptor")) { + mca_sg_link_id_list.addAll(subentry.getKey().getFieldsAsUUID("MCALinkID")); + } + } + } + for (String link_id : mga_sg_selector.getMGASoundfieldGroupLinkID()) { + if (!mca_sg_link_id_list.contains(UUIDHelper.fromUUIDAsURNStringToUUID(link_id))) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_CPL_ERROR, + IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, String.format("MGASADMSoundfieldGroupSelector for Track ID %s references unknown MGASoundfieldGroupLinkID %s", vps.getTrackId(), link_id)); + } + } + } + } + } + } + } + } + } + return imfErrorLogger.getErrors(); + } +} diff --git a/src/main/java/com/netflix/imflibrary/st2067_203/MGAAudioMetadataSubDescriptor.java b/src/main/java/com/netflix/imflibrary/st2067_203/MGAAudioMetadataSubDescriptor.java new file mode 100644 index 00000000..638bb451 --- /dev/null +++ b/src/main/java/com/netflix/imflibrary/st2067_203/MGAAudioMetadataSubDescriptor.java @@ -0,0 +1,180 @@ +/* + * + * Copyright 2024 RheinMain University of Applied Sciences, Wiesbaden, Germany. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package com.netflix.imflibrary.st2067_203; + +import com.netflix.imflibrary.IMFErrorLogger; +import com.netflix.imflibrary.KLVPacket; +import com.netflix.imflibrary.MXFUID; +import com.netflix.imflibrary.annotations.MXFProperty; +import com.netflix.imflibrary.st0377.header.SubDescriptor; +import com.netflix.imflibrary.st0377.CompoundDataTypes; +import com.netflix.imflibrary.st0377.header.StructuralMetadata; +import com.netflix.imflibrary.st0377.header.UL; +import com.netflix.imflibrary.utils.ByteProvider; +import javax.annotation.concurrent.Immutable; + +import java.io.IOException; +import java.util.Map; + +/** + * Object model corresponding to MGAAudioMetadataSubDescriptor structural metadata set defined in ST 2127-1 + */ +@Immutable +public final class MGAAudioMetadataSubDescriptor extends SubDescriptor { + + public static final String MGA_MCA_TAG_SYMBOL = "MGASf"; + public static final String MGA_MCA_TAG_NAME = "MGA Soundfield"; + public static final UL MGA_MCA_LABEL_DICTIONNARY_ID_UL = UL.fromULAsURNStringToUL("urn:smpte:ul:060e2b34.0401010d.03020222.00000000"); + private static final String ERROR_DESCRIPTION_PREFIX = "MXF Header Partition: " + MGAAudioMetadataSubDescriptor.class.getSimpleName() + " : "; + private final MGAAudioMetadataSubDescriptorBO mgaAudioMetadataSubDescriptorBO; + + /** + * Constructor for an MGAAudioMetadataSubDescriptor object + * @param mgaAudioMetadataSubDescriptorBO the parsed MGA Soundfield label sub-descriptor object + */ + public MGAAudioMetadataSubDescriptor(MGAAudioMetadataSubDescriptorBO mgaAudioMetadataSubDescriptorBO) + { + super(); + this.mgaAudioMetadataSubDescriptorBO = mgaAudioMetadataSubDescriptorBO; + } + /** + * A method that returns a string representation of an MGAAudioMetadataSubDescriptor object. + * + * @return string representing the object + */ + public String toString() + { + return this.mgaAudioMetadataSubDescriptorBO.toString(); + } + + /** + * Object corresponding to a parsed MGAAudioMetadataSubDescriptor structural metadata set defined in st2127-1:2022 + */ + @Immutable + @SuppressWarnings({"PMD.FinalFieldCouldBeStatic"}) + public static final class MGAAudioMetadataSubDescriptorBO extends SubDescriptor.SubDescriptorBO + { + + @MXFProperty(size=16) private final byte[] mga_link_id = null; //UUID + @MXFProperty(size=1) private final Short mga_audio_metadata_index = null; + @MXFProperty(size=1) private final Short mga_audio_metadata_identifier = null; + @MXFProperty(size=0) private final CompoundDataTypes.MXFCollections.MXFCollection
    mga_audio_metadata_payload_ul_array = null; + + /** + * Instantiates a new parsed MGAAudioMetadataSubDescriptor object by virtue of parsing the MXF file bitstream + * + * @param header the parsed header (K and L fields from the KLV packet) + * @param byteProvider the input stream corresponding to the MXF file + * @param localTagToUIDMap mapping from local tag to element UID as provided by the Primer Pack defined in st377-1:2011 + * @param imfErrorLogger logger for recording any parsing errors + * @throws IOException - any I/O related error will be exposed through an IOException + */ + public MGAAudioMetadataSubDescriptorBO(KLVPacket.Header header, ByteProvider byteProvider, Map localTagToUIDMap, IMFErrorLogger imfErrorLogger) + throws IOException + { + super(header); + long numBytesToRead = this.header.getVSize(); + + StructuralMetadata.populate(this, byteProvider, numBytesToRead, localTagToUIDMap); + + if (this.instance_uid == null) + { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_ESSENCE_METADATA_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, + MGAAudioMetadataSubDescriptor.ERROR_DESCRIPTION_PREFIX + "instance_uid is null"); + } + + if (this.mga_link_id == null) + { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_ESSENCE_METADATA_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, + MGAAudioMetadataSubDescriptor.ERROR_DESCRIPTION_PREFIX + "mga_link_id is null"); + } + + if (this.mga_audio_metadata_index == null) + { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_ESSENCE_METADATA_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, + MGAAudioMetadataSubDescriptor.ERROR_DESCRIPTION_PREFIX + "mga_audio_metadata_index is null"); + } + + if (this.mga_audio_metadata_identifier == null) + { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_ESSENCE_METADATA_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, + MGAAudioMetadataSubDescriptor.ERROR_DESCRIPTION_PREFIX + "mga_audio_metadata_identifier is null"); + } + + if (this.mga_audio_metadata_payload_ul_array == null) + { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_ESSENCE_METADATA_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, + MGAAudioMetadataSubDescriptor.ERROR_DESCRIPTION_PREFIX + "mga_audio_metadata_payload_ul_array is null"); + } + } + + /** + * Accessor for the mga_link_id of this MGAAudioMetadataSubDescriptor + * @return a byte array representing the mga_link_id for the MGAAudioMetadataSubDescriptor + */ + public byte[] getMGALinkId(){ + return this.mga_link_id.clone(); + } + + /** + * Accessor for the mga_audio_metadata_index of this MGAAudioMetadataSubDescriptor + * @return a short integer representing the mga_audio_metadata_index for the MGAAudioMetadataSubDescriptor + */ + public Short getMGAAudioMetadataIndex(){ + return this.mga_audio_metadata_index; + } + + /** + * Accessor for the mga_audio_metadata_identifier of this MGAAudioMetadataSubDescriptor + * @return a short integer representing the mga_audio_metadata_identifier for the MGAAudioMetadataSubDescriptor + */ + public Short getMGAAudioMetadataIdentifier(){ + return this.mga_audio_metadata_identifier; + } + + /** + * Accessor for the mga_audio_metadata_payload_ul_array of this MGAAudioMetadataSubDescriptor + * @return a short integer representing the mga_audio_metadata_payload_ul_array for the MGAAudioMetadataSubDescriptor + */ + public CompoundDataTypes.MXFCollections.MXFCollection
      getMGAAudioMetadataPayloadULArrray(){ + return this.mga_audio_metadata_payload_ul_array; + } + + /** + * A method that returns a string representation of the object. + * + * @return string representing the object + */ + public String toString() + { + StringBuilder sb = new StringBuilder(); + sb.append(super.toString()); + if (this.mga_link_id != null) + { + sb.append(String.format("mga_link_id = 0x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%n", + this.mga_link_id[0], this.mga_link_id[1], this.mga_link_id[2], this.mga_link_id[3], + this.mga_link_id[4], this.mga_link_id[5], this.mga_link_id[6], this.mga_link_id[7], + this.mga_link_id[8], this.mga_link_id[9], this.mga_link_id[10], this.mga_link_id[11], + this.mga_link_id[12], this.mga_link_id[13], this.mga_link_id[14], this.mga_link_id[15])); + } + + return sb.toString(); + } + } +} diff --git a/src/main/java/com/netflix/imflibrary/st2067_203/MGASADMTrackFileConstraints.java b/src/main/java/com/netflix/imflibrary/st2067_203/MGASADMTrackFileConstraints.java new file mode 100644 index 00000000..d404f7fc --- /dev/null +++ b/src/main/java/com/netflix/imflibrary/st2067_203/MGASADMTrackFileConstraints.java @@ -0,0 +1,372 @@ +/* + * + * Copyright 2024 RheinMain University of Applied Sciences, Wiesbaden, Germany. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package com.netflix.imflibrary.st2067_203; + +import com.netflix.imflibrary.IMFConstraints; +import com.netflix.imflibrary.IMFErrorLogger; +import com.netflix.imflibrary.st0377.CompoundDataTypes; +import com.netflix.imflibrary.st0377.HeaderPartition; +import com.netflix.imflibrary.st0377.IndexTableSegment; +import com.netflix.imflibrary.st0377.header.AudioChannelLabelSubDescriptor; +import com.netflix.imflibrary.st0377.header.GenericDescriptor; +import com.netflix.imflibrary.st0377.header.GenericPackage; +import com.netflix.imflibrary.st0377.header.GenericSoundEssenceDescriptor; +import com.netflix.imflibrary.st0377.header.GroupOfSoundFieldGroupLabelSubDescriptor; +import com.netflix.imflibrary.st0377.header.InterchangeObject; +import com.netflix.imflibrary.st0377.header.Preface; +import com.netflix.imflibrary.st0377.header.Sequence; +import com.netflix.imflibrary.st0377.header.SoundFieldGroupLabelSubDescriptor; +import com.netflix.imflibrary.st0377.header.SourcePackage; +import com.netflix.imflibrary.st0377.header.TimelineTrack; +import com.netflix.imflibrary.st0377.header.UL; +import com.netflix.imflibrary.st0377_41.MCAContent; +import com.netflix.imflibrary.st0377_41.MCAUseClass; +import com.netflix.imflibrary.st379_2.ContainerConstraintsSubDescriptor; +import com.netflix.imflibrary.utils.DOMNodeObjectModel; +import com.netflix.imflibrary.utils.ErrorLogger; + +import javax.annotation.Nonnull; + +import static com.netflix.imflibrary.st0377.header.GenericPictureEssenceDescriptor.containerConstraintsSubDescriptorUL; + +import java.io.IOException; +import java.util.List; +import java.util.UUID; +import java.util.stream.Collectors; + +public final class MGASADMTrackFileConstraints { + + private static final String IMF_MGASADM_EXCEPTION_PREFIX = "IMF MGA S-ADM check: "; + private static final UL SerialAudioDefinitionModelMetadataPayload = UL.fromULAsURNStringToUL("urn:smpte:ul:060e2b34.0401010d.04040212.00000000"); + + // Prevent instantiation + private MGASADMTrackFileConstraints() {} + + public static void checkCompliance(IMFConstraints.HeaderPartitionIMF headerPartitionIMF, @Nonnull IMFErrorLogger imfErrorLogger) throws IOException { + HeaderPartition headerPartition = headerPartitionIMF.getHeaderPartitionOP1A().getHeaderPartition(); + Preface preface = headerPartition.getPreface(); + GenericPackage genericPackage = preface.getContentStorage().getEssenceContainerDataList().get(0).getLinkedPackage(); + SourcePackage filePackage; + filePackage = (SourcePackage) genericPackage; + UUID packageID = filePackage.getPackageMaterialNumberasUUID(); + List subDescriptors = headerPartition.getSubDescriptors(); + + for (TimelineTrack timelineTrack : filePackage.getTimelineTracks()) { + Sequence sequence = timelineTrack.getSequence(); + if (sequence == null) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_ESSENCE_COMPONENT_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, IMF_MGASADM_EXCEPTION_PREFIX + String.format("TimelineTrack with instanceUID = %s in the IMFTrackFile represented by ID %s has no sequence.", + timelineTrack.getInstanceUID(), packageID.toString())); + } else { + GenericDescriptor genericDescriptor = filePackage.getGenericDescriptor(); + if (genericDescriptor instanceof MGASoundEssenceDescriptor) { // Support for st2067-203 + // + // MGASoundEssenceDescriptor + // + MGASoundEssenceDescriptor mgaEssenceDescriptor = (MGASoundEssenceDescriptor) genericDescriptor; + + // ST 2067-203 section 5.5.1 + if ( ((mgaEssenceDescriptor.getAudioSamplingRateNumerator() != 48000) && (mgaEssenceDescriptor.getAudioSamplingRateNumerator() != 96000)) || mgaEssenceDescriptor.getAudioSamplingRateDenominator() != 1) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_ESSENCE_COMPONENT_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, IMF_MGASADM_EXCEPTION_PREFIX + + String.format("Audio Sample rate %d/%d does not match 48 000 Hz oder 96 000 Hz in the IMFTrackFile represented by ID %s.", mgaEssenceDescriptor.getAudioSamplingRateNumerator(), mgaEssenceDescriptor.getAudioSamplingRateDenominator(), packageID.toString())); + } + // ST 2067-203 section 6.3.2 + if ( (mgaEssenceDescriptor.getSampleRate().get(0) % timelineTrack.getEditRateNumerator() !=0) || timelineTrack.getEditRateDenominator() != mgaEssenceDescriptor.getSampleRate().get(1)) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_ESSENCE_COMPONENT_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, IMF_MGASADM_EXCEPTION_PREFIX + + String.format("Timeline Track Edit Rate %d/%d does not match MGASoundEssenceDescriptor Sample Rate %d/%d in the IMFTrackFile represented by ID %s.", timelineTrack.getEditRateNumerator(), timelineTrack.getEditRateDenominator(), mgaEssenceDescriptor.getSampleRate().get(0), mgaEssenceDescriptor.getSampleRate().get(1), packageID.toString())); + } + + // ST 2067-203 Table 1 + int bitDepth = mgaEssenceDescriptor.getQuantizationBits(); + if (bitDepth != 24) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_ESSENCE_COMPONENT_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, IMF_MGASADM_EXCEPTION_PREFIX + + String.format("MGASoundEssenceDescriptor in the IMFTrackFile represented by ID %s indicates an Audio Bit Depth = %d, only 24 is allowed.", packageID.toString(), mgaEssenceDescriptor.getQuantizationBits())); + } + + // ST 2067-203 section 5.4 + if (!mgaEssenceDescriptor.getEssenceContainerUL().equals(MGASoundEssenceDescriptor.MXF_GC_CLIP_WRAPPED_MGA)) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_ESSENCE_COMPONENT_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, IMF_MGASADM_EXCEPTION_PREFIX + + String.format("MGASoundEssenceDescriptor in the IMFTrackFile represented by ID %s does not use as Essence Container Label item the IMF Clip-Wrapped MGA Essence Container Label %s but %s.", packageID.toString(), MGASoundEssenceDescriptor.MXF_GC_CLIP_WRAPPED_MGA, mgaEssenceDescriptor.getEssenceContainerUL().toString())); + } + // ST 2127-10, Section 6 + if (!mgaEssenceDescriptor.getSoundEssenceCoding().equals(MGASoundEssenceDescriptor.MGA_AUDIO_ESSENCE_UNCOMPRESSED_SOUND_CODING)) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_ESSENCE_COMPONENT_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, IMF_MGASADM_EXCEPTION_PREFIX + + String.format("MGASoundEssenceDescriptor in the IMFTrackFile represented by ID %s does not indicate the MGA Audio Essence Coding value in its Sound Essence Coding item %s but %s.", packageID.toString(), MGASoundEssenceDescriptor.MGA_AUDIO_ESSENCE_UNCOMPRESSED_SOUND_CODING, mgaEssenceDescriptor.getSoundEssenceCoding().toString())); + } + + // ST 2067-203 Table 1 + if (mgaEssenceDescriptor.getElectroSpatialFormulation() != null && (mgaEssenceDescriptor.getElectroSpatialFormulation() != GenericSoundEssenceDescriptor.ElectroSpatialFormulation.MULTI_CHANNEL_MODE)) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_ESSENCE_COMPONENT_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, IMF_MGASADM_EXCEPTION_PREFIX + + String.format("MGASoundEssenceDescriptor in the IMFTrackFile represented by ID %s does not indicate the multi-channel mode default value for the Electro-Spatial Formulation item : %d.", packageID.toString(), mgaEssenceDescriptor.getElectroSpatialFormulation().value())); + } + + // ST 2067-203 Table 1 + if (mgaEssenceDescriptor.getReferenceAudioAlignmentLevel() == null) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_ESSENCE_COMPONENT_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.WARNING, IMF_MGASADM_EXCEPTION_PREFIX + + String.format("MGASoundEssenceDescriptor in the IMFTrackFile represented by ID %s is missing the Reference Audio Alignment Level item.", packageID.toString())); + } + + // ST 2067-203 Table 1 + if (mgaEssenceDescriptor.getReferenceImageEditRate() == null) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_ESSENCE_COMPONENT_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.WARNING, IMF_MGASADM_EXCEPTION_PREFIX + + String.format("MGASoundEssenceDescriptor in the IMFTrackFile represented by ID %s is missing the Reference Image Edit Rate item.", packageID.toString())); + } + + if (subDescriptors.size() == 0) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_ESSENCE_COMPONENT_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, IMF_MGASADM_EXCEPTION_PREFIX + + String.format("MGASoundEssenceDescriptor in the IMFTrackFile represented by ID %s does not have subdescriptors", packageID.toString())); + } else { + // ST 2067-203 Section 5.6.1 + List audioChannelLabelSubDescriptors = subDescriptors.subList(0, subDescriptors.size()).stream().filter(interchangeObjectBO -> interchangeObjectBO.getClass().getEnclosingClass().equals(AudioChannelLabelSubDescriptor.class)).collect(Collectors.toList()); + if (audioChannelLabelSubDescriptors.size() != 0) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_ESSENCE_COMPONENT_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, IMF_MGASADM_EXCEPTION_PREFIX + + String.format("MGASoundEssenceDescriptor in the IMFTrackFile represented by ID %s has %d illegal AudioChannelLabelSubDescriptor(s)", packageID.toString(), audioChannelLabelSubDescriptors.size())); + } + List soundFieldGroupLabelSubDescriptors = subDescriptors.subList(0, subDescriptors.size()).stream().filter(interchangeObjectBO -> interchangeObjectBO.getClass().getEnclosingClass().equals(SoundFieldGroupLabelSubDescriptor.class)).collect(Collectors.toList()); + if (soundFieldGroupLabelSubDescriptors.size() != 0) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_ESSENCE_COMPONENT_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, IMF_MGASADM_EXCEPTION_PREFIX + + String.format("MGASoundEssenceDescriptor in the IMFTrackFile represented by ID %s has %d illegal SoundFieldGroupLabelSubDescriptor(s)", packageID.toString(), soundFieldGroupLabelSubDescriptors.size())); + } + List groupOfSoundFieldGroupsLabelSubDescriptors = subDescriptors.subList(0, subDescriptors.size()).stream().filter(interchangeObjectBO -> interchangeObjectBO.getClass().getEnclosingClass().equals(GroupOfSoundFieldGroupLabelSubDescriptor.class)).collect(Collectors.toList()); + if (groupOfSoundFieldGroupsLabelSubDescriptors.size() != 0) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_ESSENCE_COMPONENT_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, IMF_MGASADM_EXCEPTION_PREFIX + + String.format("MGASoundEssenceDescriptor in the IMFTrackFile represented by ID %s has %d illegal GroupOfSoundFieldGroupLabelSubDescriptor(s)", packageID.toString(), groupOfSoundFieldGroupsLabelSubDescriptors.size())); + } + + // + // ContainerConstraintsSubDescriptor (ST 379-2) + // + List containerConstraintsSubDescriptors = subDescriptors.subList(0, subDescriptors.size()).stream().filter(interchangeObjectBO -> interchangeObjectBO.getClass().getEnclosingClass().equals(ContainerConstraintsSubDescriptor.class)).collect(Collectors.toList()); + if (containerConstraintsSubDescriptors.isEmpty()) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_ESSENCE_COMPONENT_ERROR, + IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, + String.format("Track File with ID %s: A ContainerConstraintsSubDescriptor shall be present per ST 379-2, but is missing", packageID.toString())); + } else if (containerConstraintsSubDescriptors.size() != 1) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_ESSENCE_COMPONENT_ERROR, + IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, + String.format("Track File with ID %s: One ContainerConstraintsSubDescriptor shall be present per ST 379-2, but %d are present", packageID.toString(), containerConstraintsSubDescriptors.size())); + } + + // + // MGASoundfieldGroupLabelSubDescriptor + // + List mgaSoundfieldGroupLabelSubDescriptors = subDescriptors.subList(0, subDescriptors.size()).stream().filter(interchangeObjectBO -> interchangeObjectBO.getClass().getEnclosingClass().equals(MGASoundfieldGroupLabelSubDescriptor.class)).collect(Collectors.toList()); + if (mgaSoundfieldGroupLabelSubDescriptors.size() == 0) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_ESSENCE_COMPONENT_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, IMF_MGASADM_EXCEPTION_PREFIX + + String.format("MGASoundEssenceDescriptor in the IMFTrackFile represented by ID %s refers to zero MGASoundfieldGroupLabelSubDescriptors, 1 is required per Soundfield Group", packageID.toString())); + } else { + // ST 2067-203 section 5.6.2 Table 3 + MGASoundfieldGroupLabelSubDescriptor.MGASoundfieldGroupLabelSubDescriptorBO mgaSoundfieldGroupLabelSubDescriptorBO = null; + + for (InterchangeObject.InterchangeObjectBO sub_descriptor : mgaSoundfieldGroupLabelSubDescriptors) { + mgaSoundfieldGroupLabelSubDescriptorBO = MGASoundfieldGroupLabelSubDescriptor.MGASoundfieldGroupLabelSubDescriptorBO.class.cast(sub_descriptor); + if (mgaSoundfieldGroupLabelSubDescriptorBO.getMCATagName() == null) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_ESSENCE_COMPONENT_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, IMF_MGASADM_EXCEPTION_PREFIX + + String.format("MGASoundfieldGroupLabelSubDescriptor with ID %s in the IMFTrackFile represented by ID %s is missing MCATagName", sub_descriptor.getInstanceUID().toString(), packageID.toString())); + } else { + if (!mgaSoundfieldGroupLabelSubDescriptorBO.getMCATagName().equals(MGASoundfieldGroupLabelSubDescriptor.MGA_MCA_TAG_NAME)) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_ESSENCE_COMPONENT_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.WARNING, IMF_MGASADM_EXCEPTION_PREFIX + + String.format("MGASoundfieldGroupLabelSubDescriptor with ID %s in the IMFTrackFile represented by ID %s does not have the MCATagName for MGA %s but %s", sub_descriptor.getInstanceUID().toString(), packageID.toString(), MGASoundfieldGroupLabelSubDescriptor.MGA_MCA_TAG_NAME, mgaSoundfieldGroupLabelSubDescriptorBO.getMCATagName())); + } + } + if (mgaSoundfieldGroupLabelSubDescriptorBO.getMCATagSymbol() == null) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_ESSENCE_COMPONENT_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, IMF_MGASADM_EXCEPTION_PREFIX + + String.format("MGASoundfieldGroupLabelSubDescriptor with ID %s in the IMFTrackFile represented by ID %s is missing MCATagSymbol", sub_descriptor.getInstanceUID().toString(), packageID.toString())); + } else { + if (!mgaSoundfieldGroupLabelSubDescriptorBO.getMCATagSymbol().equals(MGASoundfieldGroupLabelSubDescriptor.MGA_MCA_TAG_SYMBOL)) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_ESSENCE_COMPONENT_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.WARNING, IMF_MGASADM_EXCEPTION_PREFIX + + String.format("MGASoundfieldGroupLabelSubDescriptor with ID %s in the IMFTrackFile represented by ID %s does not have the MCATagSymbol for MGA %s but %s", sub_descriptor.getInstanceUID().toString(), packageID.toString(), MGASoundfieldGroupLabelSubDescriptor.MGA_MCA_TAG_SYMBOL, mgaSoundfieldGroupLabelSubDescriptorBO.getMCATagSymbol())); + } + } + if (mgaSoundfieldGroupLabelSubDescriptorBO.getMCALabelDictionnaryId() == null) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_ESSENCE_COMPONENT_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, IMF_MGASADM_EXCEPTION_PREFIX + + String.format("MGASoundfieldGroupLabelSubDescriptor with ID %s in the IMFTrackFile represented by ID %s is missing MCALabelDictionaryId", sub_descriptor.getInstanceUID().toString(), packageID.toString())); + } else { + if (!mgaSoundfieldGroupLabelSubDescriptorBO.getMCALabelDictionnaryId().equals(MGASoundfieldGroupLabelSubDescriptor.MGA_MCA_LABEL_DICTIONNARY_ID_UL)) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_ESSENCE_COMPONENT_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.WARNING, IMF_MGASADM_EXCEPTION_PREFIX + + String.format("MGASoundfieldGroupLabelSubDescriptor with ID %s in the IMFTrackFile represented by ID %s does not have the MCA Label Dictionary Id for MGA %s but %s", sub_descriptor.getInstanceUID().toString(), packageID.toString(), MGASoundfieldGroupLabelSubDescriptor.MGA_MCA_LABEL_DICTIONNARY_ID_UL, mgaSoundfieldGroupLabelSubDescriptorBO.getMCALabelDictionnaryId().toString())); + } + } + if (mgaSoundfieldGroupLabelSubDescriptorBO.getRFC5646SpokenLanguage() != null && + !IMFConstraints.isSpokenLanguageRFC5646Compliant(mgaSoundfieldGroupLabelSubDescriptorBO.getRFC5646SpokenLanguage())) { + imfErrorLogger.addError(new ErrorLogger.ErrorObject(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_ESSENCE_COMPONENT_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, String.format("Language Code (%s) in MGASoundfieldGroupLabelSubDescriptor with ID %s in the IMFTrackfile represented by ID %s is not RFC5646 compliant", mgaSoundfieldGroupLabelSubDescriptorBO.getRFC5646SpokenLanguage(), sub_descriptor.getInstanceUID().toString(), packageID.toString()))); + } + if (mgaSoundfieldGroupLabelSubDescriptorBO.getMCAContent() == null) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_ESSENCE_COMPONENT_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.WARNING, IMF_MGASADM_EXCEPTION_PREFIX + + String.format("MGASoundfieldGroupLabelSubDescriptor with ID %s in the IMFTrackFile represented by ID %s is missing MCAContent", sub_descriptor.getInstanceUID().toString(), packageID.toString())); + } else { + // Check against ST 377-41:2021 Table 2 + if (MCAContent.getValueFromSymbol(mgaSoundfieldGroupLabelSubDescriptorBO.getMCAContent()) == MCAContent.Unknown) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_CORE_CONSTRAINTS_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.WARNING, String.format("MGASoundfieldGroupLabelSubDescriptor with ID %s in the IMFTrackFile represented by ID %s has invalid MCA Content (%s)", sub_descriptor.getInstanceUID().toString(), packageID.toString(), mgaSoundfieldGroupLabelSubDescriptorBO.getMCAContent())); + } + } + if (mgaSoundfieldGroupLabelSubDescriptorBO.getMCAUseClass() == null) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_ESSENCE_COMPONENT_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.WARNING, IMF_MGASADM_EXCEPTION_PREFIX + + String.format("MGASoundfieldGroupLabelSubDescriptor with ID %s in the IMFTrackFile represented by ID %s is missing MCAUseClass", sub_descriptor.getInstanceUID().toString(), packageID.toString())); + } else { + // Check against ST 377-41:2021 Table 3 + if (MCAUseClass.getValueFromSymbol(mgaSoundfieldGroupLabelSubDescriptorBO.getMCAUseClass()) == MCAUseClass.Unknown) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_CORE_CONSTRAINTS_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.WARNING, String.format("MGASoundfieldGroupLabelSubDescriptor with ID %s in the IMFTrackFile represented by ID %shas invalid MCA Use Class (%s)", sub_descriptor.getInstanceUID().toString(), packageID.toString(), mgaSoundfieldGroupLabelSubDescriptorBO.getMCAUseClass())); + } + } + if (mgaSoundfieldGroupLabelSubDescriptorBO.getMCATitle() == null) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_ESSENCE_COMPONENT_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.WARNING, IMF_MGASADM_EXCEPTION_PREFIX + + String.format("MGASoundfieldGroupLabelSubDescriptor with ID %s in the IMFTrackFile represented by ID %s is missing MCATitle", sub_descriptor.getInstanceUID().toString(), sub_descriptor.getInstanceUID().toString(), packageID.toString())); + } + if (mgaSoundfieldGroupLabelSubDescriptorBO.getMCATitleVersion() == null) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_ESSENCE_COMPONENT_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.WARNING, IMF_MGASADM_EXCEPTION_PREFIX + + String.format("MGASoundfieldGroupLabelSubDescriptor with ID %s in the IMFTrackFile represented by ID %s is missing MCATitleVersion", sub_descriptor.getInstanceUID().toString(), sub_descriptor.getInstanceUID().toString(), packageID.toString())); + } + if (mgaSoundfieldGroupLabelSubDescriptorBO.getMCAChannelID() != null) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_ESSENCE_COMPONENT_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, IMF_MGASADM_EXCEPTION_PREFIX + + String.format("MGASoundfieldGroupLabelSubDescriptor with ID %s in the IMFTrackFile represented by ID %s has forbidden MCAChannelID %d", sub_descriptor.getInstanceUID().toString(), packageID.toString(), mgaSoundfieldGroupLabelSubDescriptorBO.getMCAChannelID())); + } + // ST 2067-203 Table 8 + if (mgaSoundfieldGroupLabelSubDescriptorBO.getADMAudioProgrammeId() == null) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_ESSENCE_COMPONENT_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, IMF_MGASADM_EXCEPTION_PREFIX + + String.format("MGASoundfieldGroupLabelSubDescriptor with ID %s in the IMFTrackFile represented by ID %s is missing ADMAudioProgrammeId", sub_descriptor.getInstanceUID().toString(), packageID.toString())); + } + // ST 2067-203 Table 8 + if (mgaSoundfieldGroupLabelSubDescriptorBO.getADMAudioContentId() != null) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_ESSENCE_COMPONENT_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, IMF_MGASADM_EXCEPTION_PREFIX + + String.format("MGASoundfieldGroupLabelSubDescriptor with ID %s in the IMFTrackFile represented by ID %s has an illegal ADMAudioContentId item", sub_descriptor.getInstanceUID().toString(), packageID.toString())); + } + // ST 2067-203 Table 8 + if (mgaSoundfieldGroupLabelSubDescriptorBO.getADMAudioObjectId() != null) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_ESSENCE_COMPONENT_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, IMF_MGASADM_EXCEPTION_PREFIX + + String.format("MGASoundfieldGroupLabelSubDescriptor with ID %s in the IMFTrackFile represented by ID %s has an illegal ADMAudioObjectId item", sub_descriptor.getInstanceUID().toString(), packageID.toString())); + } + } + } + // + // MGAAudioMetadataSubDescriptor + // + int mgaAudioMetadataPayloadULArrraySize = 0; + List mgaAudioMetadataSubDescriptors = subDescriptors.subList(0, subDescriptors.size()).stream().filter(interchangeObjectBO -> interchangeObjectBO.getClass().getEnclosingClass().equals(MGAAudioMetadataSubDescriptor.class)).collect(Collectors.toList()); + if (mgaAudioMetadataSubDescriptors.isEmpty()) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_ESSENCE_COMPONENT_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, IMF_MGASADM_EXCEPTION_PREFIX + + String.format("MGASoundEssenceDescriptor in the IMFTrackFile represented by ID %s does not reference a MGAAudioMetadataSubDescriptor", packageID.toString())); + } else { + // ST 2067-203 section 5.6.2 Table 3 + MGAAudioMetadataSubDescriptor.MGAAudioMetadataSubDescriptorBO mgaAudioMetadataSubDescriptorBO = null; + boolean foundSADMSection = false; + for (InterchangeObject.InterchangeObjectBO sub_descriptor : mgaAudioMetadataSubDescriptors) { + mgaAudioMetadataSubDescriptorBO = MGAAudioMetadataSubDescriptor.MGAAudioMetadataSubDescriptorBO.class.cast(sub_descriptor); + if (mgaAudioMetadataSubDescriptorBO.getMGAAudioMetadataIndex() == 1) { + if (mgaAudioMetadataSubDescriptorBO.getMGAAudioMetadataPayloadULArrray().getEntries().contains(SerialAudioDefinitionModelMetadataPayload)) { + if (!foundSADMSection) { + foundSADMSection = true; + mgaAudioMetadataSubDescriptorBO = MGAAudioMetadataSubDescriptor.MGAAudioMetadataSubDescriptorBO.class.cast(sub_descriptor); + } else { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_ESSENCE_COMPONENT_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, IMF_MGASADM_EXCEPTION_PREFIX + + String.format("MGASoundEssenceDescriptor in the IMFTrackFile represented by ID %s has multiple MGAAudioMetadataSubDescriptors referencing Audio Metadata section #1, 1 is required per ST 2067-203", packageID.toString())); + } + } else { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_ESSENCE_COMPONENT_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, IMF_MGASADM_EXCEPTION_PREFIX + + String.format("IMFTrackFile represented by ID %s has a non S-ADM Audio Metada Section with index 1", packageID.toString())); + } + } else if (mgaAudioMetadataSubDescriptorBO.getMGAAudioMetadataPayloadULArrray().getEntries().contains(SerialAudioDefinitionModelMetadataPayload)) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_ESSENCE_COMPONENT_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, IMF_MGASADM_EXCEPTION_PREFIX + + String.format("IMFTrackFile represented by ID %s has an S-ADM section with MGAAudioMetadataIndex %d, the index shall be 1 per ST 2067-203", packageID.toString(), mgaAudioMetadataSubDescriptorBO.getMGAAudioMetadataIndex())); + } + } + if (foundSADMSection && (mgaAudioMetadataSubDescriptorBO != null)) { + if (mgaAudioMetadataSubDescriptorBO.getMGALinkId().length == 0) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_ESSENCE_COMPONENT_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, IMF_MGASADM_EXCEPTION_PREFIX + + String.format("MGAAudioMetadataSubDescriptor in the IMFTrackFile represented by ID %s is missing MGALinkId", packageID.toString())); + } + if (mgaAudioMetadataSubDescriptorBO.getMGAAudioMetadataIndex() == null) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_ESSENCE_COMPONENT_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, IMF_MGASADM_EXCEPTION_PREFIX + + String.format("MGAAudioMetadataSubDescriptor in the IMFTrackFile represented by ID %s is missing MGAAudioMetadataIndex", packageID.toString())); + } + if (mgaAudioMetadataSubDescriptorBO.getMGAAudioMetadataIdentifier() == null) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_ESSENCE_COMPONENT_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, IMF_MGASADM_EXCEPTION_PREFIX + + String.format("MGAAudioMetadataSubDescriptor in the IMFTrackFile represented by ID %s is missing MGAAudioMetadataIdentifier", packageID.toString())); + } + if (mgaAudioMetadataSubDescriptorBO.getMGAAudioMetadataPayloadULArrray() == null) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_ESSENCE_COMPONENT_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, IMF_MGASADM_EXCEPTION_PREFIX + + String.format("MGAAudioMetadataSubDescriptor in the IMFTrackFile represented by ID %s is missing MGAAudioMetadataPayloadULArrray", packageID.toString())); + } else { + mgaAudioMetadataPayloadULArrraySize = mgaAudioMetadataSubDescriptorBO.getMGAAudioMetadataPayloadULArrray().size(); + if (mgaAudioMetadataPayloadULArrraySize == 0) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_ESSENCE_COMPONENT_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, IMF_MGASADM_EXCEPTION_PREFIX + + String.format("MGAAudioMetadataSubDescriptor in the IMFTrackFile represented by ID %s has an empty MGAAudioMetadataPayloadULArrray", packageID.toString())); + } + } + } else { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_ESSENCE_COMPONENT_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, IMF_MGASADM_EXCEPTION_PREFIX + + String.format("MGAAudioMetadataSubDescriptor in the IMFTrackFile represented by ID %s is missing an MGAAudioMetadataSubDescriptor referencing an S-ADM section with MGAAudioMetadataIndex=1", packageID.toString())); + } + } + // + // SADMAudioMetadataSubDescriptor + // + List sadmAudioMetadataSubDescriptors = subDescriptors.subList(0, subDescriptors.size()).stream().filter(interchangeObjectBO -> interchangeObjectBO.getClass().getEnclosingClass().equals(SADMAudioMetadataSubDescriptor.class)).collect(Collectors.toList()); + if (sadmAudioMetadataSubDescriptors.isEmpty()) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_ESSENCE_COMPONENT_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, IMF_MGASADM_EXCEPTION_PREFIX + + String.format("MGASoundEssenceDescriptor in the IMFTrackFile represented by ID %s does not reference an S-ADM Audio Metadata SubDescriptor", packageID.toString())); + } else { + SADMAudioMetadataSubDescriptor.SADMAudioMetadataSubDescriptorBO sadmAudioMetadataSubDescriptorBO = null; + for (InterchangeObject.InterchangeObjectBO sub_descriptor : sadmAudioMetadataSubDescriptors) { + sadmAudioMetadataSubDescriptorBO = SADMAudioMetadataSubDescriptor.SADMAudioMetadataSubDescriptorBO.class.cast(sub_descriptor); + if (sadmAudioMetadataSubDescriptorBO.getSADMMetadataSectionLinkId().length == 0) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_ESSENCE_COMPONENT_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, IMF_MGASADM_EXCEPTION_PREFIX + + String.format("SADMAudioMetadataSubDescriptor with ID %s in the IMFTrackFile represented by ID %s is missing SADMMetadataSectionLinkId", sub_descriptor.getInstanceUID().toString(), packageID.toString())); + } + if (sadmAudioMetadataSubDescriptorBO.getSADMProfileLevelULBatch() == null) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_CORE_CONSTRAINTS_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.WARNING, IMF_MGASADM_EXCEPTION_PREFIX + + String.format("SADMAudioMetadataSubDescriptor in the IMFTrackFile represented by ID %s is missing SADMProfileLevelULBatch", packageID.toString())); + } + } + } + } + } + } + } + } + + public static void checkIndexEditRate(IMFConstraints.HeaderPartitionIMF headerPartitionIMF, IndexTableSegment indexTableSegment, IMFErrorLogger imfErrorLogger) { + HeaderPartition headerPartition = headerPartitionIMF.getHeaderPartitionOP1A().getHeaderPartition(); + Preface preface = headerPartition.getPreface(); + GenericPackage genericPackage = preface.getContentStorage().getEssenceContainerDataList().get(0).getLinkedPackage(); + SourcePackage filePackage; + filePackage = (SourcePackage) genericPackage; + UUID packageID = filePackage.getPackageMaterialNumberasUUID(); + + for (TimelineTrack timelineTrack : filePackage.getTimelineTracks()) { + Sequence sequence = timelineTrack.getSequence(); + if (sequence == null) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_CORE_CONSTRAINTS_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, IMF_MGASADM_EXCEPTION_PREFIX + String.format("TimelineTrack with instanceUID = %s in the IMFTrackFile represented by ID %s has no sequence.", + timelineTrack.getInstanceUID(), packageID.toString())); + } else { + GenericDescriptor genericDescriptor = filePackage.getGenericDescriptor(); + if (genericDescriptor instanceof MGASoundEssenceDescriptor) { // Support for st2067-203 + MGASoundEssenceDescriptor mgaEssenceDescriptor = (MGASoundEssenceDescriptor) genericDescriptor; + + // Section + if (timelineTrack.getEditRateNumerator() != indexTableSegment.getIndexEditRate().getNumerator() || timelineTrack.getEditRateDenominator() != indexTableSegment.getIndexEditRate().getDenominator()) { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_CORE_CONSTRAINTS_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, IMF_MGASADM_EXCEPTION_PREFIX + + String.format("Timeline Track Edit Rate %d/%d does not match Index Table Segment Index Edit Rate %d/%d in the IMFTrackFile represented by ID %s.", timelineTrack.getEditRateNumerator(), timelineTrack.getEditRateDenominator(), indexTableSegment.getIndexEditRate().getNumerator(), indexTableSegment.getIndexEditRate().getDenominator(), packageID.toString())); + } + + + } + } + } + } +} diff --git a/src/main/java/com/netflix/imflibrary/st2067_203/MGASoundEssenceDescriptor.java b/src/main/java/com/netflix/imflibrary/st2067_203/MGASoundEssenceDescriptor.java new file mode 100644 index 00000000..0fd5e4ec --- /dev/null +++ b/src/main/java/com/netflix/imflibrary/st2067_203/MGASoundEssenceDescriptor.java @@ -0,0 +1,112 @@ +/* + * + * Copyright 2024 RheinMain University of Applied Sciences, Wiesbaden, Germany. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package com.netflix.imflibrary.st2067_203; + +import com.netflix.imflibrary.IMFErrorLogger; +import com.netflix.imflibrary.KLVPacket; +import com.netflix.imflibrary.MXFUID; +import com.netflix.imflibrary.annotations.MXFProperty; +import com.netflix.imflibrary.st0377.header.GenericSoundEssenceDescriptor; +import com.netflix.imflibrary.st0377.header.StructuralMetadata; +import com.netflix.imflibrary.st0377.header.UL; +import com.netflix.imflibrary.utils.ByteProvider; + +import javax.annotation.concurrent.Immutable; +import java.io.IOException; +import java.util.List; +import java.util.Map; + +/** + * Object model corresponding to MGASoundEssenceDescriptor structural metadata set defined in st2067-203:2023 + */ +@Immutable +public class MGASoundEssenceDescriptor extends GenericSoundEssenceDescriptor { + + public final static UL MGA_AUDIO_ESSENCE_UNCOMPRESSED_SOUND_CODING = UL.fromULAsURNStringToUL("urn:smpte:ul:060e2b34.0401010d.04020201.02010000"); + public final static UL MXF_GC_CLIP_WRAPPED_MGA = UL.fromULAsURNStringToUL("urn:smpte:ul:060e2b34.0401010d.0d010301.02250200"); + private static final String ERROR_DESCRIPTION_PREFIX = "MXF Header Partition: " + MGASoundEssenceDescriptor.class.getSimpleName() + " : "; + + public MGASoundEssenceDescriptor(MGASoundEssenceDescriptorBO mgaSoundEssenceDescriptorBO) + { + this.genericSoundEssenceDescriptorBO = mgaSoundEssenceDescriptorBO; + } + + public List getSampleRate() { + return this.genericSoundEssenceDescriptorBO.getSampleRate(); + } + + /** + * Object corresponding to a parsed MGASoundEssenceDescriptor structural metadata set defined in st2067_201 + */ + @Immutable + public static final class MGASoundEssenceDescriptorBO extends GenericSoundEssenceDescriptor.GenericSoundEssenceDescriptorBO { + + @MXFProperty(size=2) protected final Short mga_sound_essence_block_align = null; + @MXFProperty(size=4) protected final Long mga_sound_average_bytes_per_second = null; + @MXFProperty(size=1) protected final Short mga_sound_essence_sequence_offset = null; + + /** + * Constructor for a MGASoundEssenceDescriptor ByteObject. + * + * @param header the MXF KLV header (Key and Length field) + * @param byteProvider the input stream corresponding to the MXF file + * @param localTagToUIDMap mapping from local tag to element UID as provided by the Primer Pack defined in st377-1:2011 + * @param imfErrorLogger logger for recording any parsing errors + * @throws IOException - any I/O related error will be exposed through an IOException + */ + public MGASoundEssenceDescriptorBO(KLVPacket.Header header, ByteProvider byteProvider, Map localTagToUIDMap, IMFErrorLogger imfErrorLogger) throws IOException { + super(header, imfErrorLogger); + long numBytesToRead = this.header.getVSize(); + + StructuralMetadata.populate(this, byteProvider, numBytesToRead, localTagToUIDMap); + + postPopulateCheck(); + + if (this.mga_sound_essence_block_align == null) + { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_ESSENCE_METADATA_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, + MGASoundEssenceDescriptor.ERROR_DESCRIPTION_PREFIX + "mga_sound_essence_block_align is null"); + } + if (this.mga_sound_average_bytes_per_second == null) + { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_ESSENCE_METADATA_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, + MGASoundEssenceDescriptor.ERROR_DESCRIPTION_PREFIX + "mga_sound_average_bytes_per_second is null"); + } + } + + public boolean equals(Object other) { + if (!(other instanceof MGASoundEssenceDescriptorBO)) { + return false; + } + return super.equals(other); + } + + /** + * A method that returns a string representation of a MGASoundEssenceDescriptorBO object + * + * @return string representing the object + */ + public String toString() + { + StringBuilder sb = new StringBuilder(); + sb.append(super.toString()); + return sb.toString(); + } + } +} diff --git a/src/main/java/com/netflix/imflibrary/st2067_203/MGASoundfieldGroupLabelSubDescriptor.java b/src/main/java/com/netflix/imflibrary/st2067_203/MGASoundfieldGroupLabelSubDescriptor.java new file mode 100644 index 00000000..127c1c1d --- /dev/null +++ b/src/main/java/com/netflix/imflibrary/st2067_203/MGASoundfieldGroupLabelSubDescriptor.java @@ -0,0 +1,155 @@ +/* + * + * Copyright 2024 RheinMain University of Applied Sciences, Wiesbaden, Germany. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package com.netflix.imflibrary.st2067_203; + +import com.netflix.imflibrary.IMFErrorLogger; +import com.netflix.imflibrary.KLVPacket; +import com.netflix.imflibrary.MXFUID; +import com.netflix.imflibrary.annotations.MXFProperty; +import com.netflix.imflibrary.st0377.header.SoundFieldGroupLabelSubDescriptor; +import com.netflix.imflibrary.st0377.header.StructuralMetadata; +import com.netflix.imflibrary.st0377.header.UL; +import com.netflix.imflibrary.utils.ByteProvider; +import javax.annotation.concurrent.Immutable; + +import java.io.IOException; +import java.util.Map; + +/** + * Object model corresponding to MGASoundfieldGroupLabelSubDescriptor structural metadata set defined in ST 2127-1 + */ +@Immutable +public final class MGASoundfieldGroupLabelSubDescriptor extends SoundFieldGroupLabelSubDescriptor { + + public static final String MGA_MCA_TAG_SYMBOL = "MGASf"; + public static final String MGA_MCA_TAG_NAME = "MGA Soundfield"; + public static final UL MGA_MCA_LABEL_DICTIONNARY_ID_UL = UL.fromULAsURNStringToUL("urn:smpte:ul:060e2b34.0401010d.03020222.00000000"); + private static final String ERROR_DESCRIPTION_PREFIX = "MXF Header Partition: " + MGASoundfieldGroupLabelSubDescriptor.class.getSimpleName() + " : "; + private final MGASoundfieldGroupLabelSubDescriptorBO mgaSoundfieldLabelSubDescriptorBO; + + /** + * Constructor for an MGASoundfieldGroupLabelSubDescriptor object + * @param mgaSoundfieldLabelSubDescriptorBO the parsed MGA Soundfield label sub-descriptor object + */ + public MGASoundfieldGroupLabelSubDescriptor(MGASoundfieldGroupLabelSubDescriptorBO mgaSoundfieldLabelSubDescriptorBO) + { + super(mgaSoundfieldLabelSubDescriptorBO); + this.mgaSoundfieldLabelSubDescriptorBO = mgaSoundfieldLabelSubDescriptorBO; + } + + /** + * A getter for the spoken language in this SubDescriptor + * @return string representing the spoken language as defined in RFC-5646 + */ + public String getRFC5646SpokenLanguage(){ + return this.mgaSoundfieldLabelSubDescriptorBO.getRFC5646SpokenLanguage(); + } + /** + * A method that returns a string representation of an MGASoundfieldGroupLabelSubDescriptor object. + * + * @return string representing the object + */ + public String toString() + { + return this.mgaSoundfieldLabelSubDescriptorBO.toString(); + } + + /** + * Object corresponding to a parsed MGASoundfieldGroupLabelSubDescriptor structural metadata set defined in ST 2127-1 + */ + @Immutable + @SuppressWarnings({"PMD.FinalFieldCouldBeStatic"}) + public static final class MGASoundfieldGroupLabelSubDescriptorBO extends SoundFieldGroupLabelSubDescriptor.SoundFieldGroupLabelSubDescriptorBO + { + + @MXFProperty(size=16) private final byte[] mga_metadata_section_link_id = null; //UUID + @MXFProperty(size=0, charset = "UTF-16") protected final String adm_audio_programme_id = null; //UTF-16 String + @MXFProperty(size=0, charset = "UTF-16") protected final String adm_audio_content_id = null; //UTF-16 String + @MXFProperty(size=0, charset = "UTF-16") protected final String adm_audio_object_id = null; //UTF-16 String + + /** + * Instantiates a new parsed MGASoundfieldGroupLabelSubDescriptor object by virtue of parsing the MXF file bitstream + * + * @param header the parsed header (K and L fields from the KLV packet) + * @param byteProvider the input stream corresponding to the MXF file + * @param localTagToUIDMap mapping from local tag to element UID as provided by the Primer Pack defined in st377-1:2011 + * @param imfErrorLogger logger for recording any parsing errors + * @throws IOException - any I/O related error will be exposed through an IOException + */ + public MGASoundfieldGroupLabelSubDescriptorBO(KLVPacket.Header header, ByteProvider byteProvider, Map localTagToUIDMap, IMFErrorLogger imfErrorLogger) + throws IOException + { + super(header); + long numBytesToRead = this.header.getVSize(); + + StructuralMetadata.populate(this, byteProvider, numBytesToRead, localTagToUIDMap); + if (this.mga_metadata_section_link_id == null) + { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_ESSENCE_METADATA_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, + MGASoundfieldGroupLabelSubDescriptor.ERROR_DESCRIPTION_PREFIX + "mga_metadata_section_link_id is null"); + } + + } + + /** + * Accessor for the adm_audio_programm_id of this MGASoundfieldGroupLabelSubDescriptor + * @return a byte array representing the adm_audio_programm_id for the MGASoundfieldGroupLabelSubDescriptor + */ + public String getADMAudioProgrammeId(){ + return this.adm_audio_programme_id; + } + + /** + * Accessor for the adm_audio_content_id of this MGASoundfieldGroupLabelSubDescriptor + * @return a byte array representing the adm_audio_content_id for the MGASoundfieldGroupLabelSubDescriptor + */ + public String getADMAudioContentId(){ + return this.adm_audio_content_id; + } + + /** + * Accessor for the adm_audio_object_id of this MGASoundfieldGroupLabelSubDescriptor + * @return a byte array representing the adm_audio_object_id for the MGASoundfieldGroupLabelSubDescriptor + */ + public String getADMAudioObjectId(){ + return this.adm_audio_object_id; + } + + /** + * A method that returns a string representation of the object. + * + * @return string representing the object + */ + public String toString() + { + StringBuilder sb = new StringBuilder(); + sb.append(super.toString()); + if (this.mga_metadata_section_link_id != null) + { + sb.append(String.format("mga_metadata_section_link_id = 0x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%n", + this.mga_metadata_section_link_id[0], this.mga_metadata_section_link_id[1], this.mga_metadata_section_link_id[2], this.mga_metadata_section_link_id[3], + this.mga_metadata_section_link_id[4], this.mga_metadata_section_link_id[5], this.mga_metadata_section_link_id[6], this.mga_metadata_section_link_id[7], + this.mga_metadata_section_link_id[8], this.mga_metadata_section_link_id[9], this.mga_metadata_section_link_id[10], this.mga_metadata_section_link_id[11], + this.mga_metadata_section_link_id[12], this.mga_metadata_section_link_id[13], this.mga_metadata_section_link_id[14], this.mga_metadata_section_link_id[15])); + } + + return sb.toString(); + } + } +} diff --git a/src/main/java/com/netflix/imflibrary/st2067_203/SADMAudioMetadataSubDescriptor.java b/src/main/java/com/netflix/imflibrary/st2067_203/SADMAudioMetadataSubDescriptor.java new file mode 100644 index 00000000..3231b492 --- /dev/null +++ b/src/main/java/com/netflix/imflibrary/st2067_203/SADMAudioMetadataSubDescriptor.java @@ -0,0 +1,134 @@ +/* + * + * Copyright 2024 RheinMain University of Applied Sciences, Wiesbaden, Germany. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package com.netflix.imflibrary.st2067_203; + +import com.netflix.imflibrary.IMFErrorLogger; +import com.netflix.imflibrary.KLVPacket; +import com.netflix.imflibrary.MXFUID; +import com.netflix.imflibrary.annotations.MXFProperty; +import com.netflix.imflibrary.st0377.header.SubDescriptor; +import com.netflix.imflibrary.st0377.CompoundDataTypes; +import com.netflix.imflibrary.st0377.header.StructuralMetadata; +import com.netflix.imflibrary.st0377.header.UL; +import com.netflix.imflibrary.utils.ByteProvider; +import javax.annotation.concurrent.Immutable; + +import java.io.IOException; +import java.util.Map; + +/** + * Object model corresponding to SADMAudioMetadataSubDescriptor structural metadata set defined in ST 2127-10 + */ +@Immutable +public final class SADMAudioMetadataSubDescriptor extends SubDescriptor { + + private static final String ERROR_DESCRIPTION_PREFIX = "MXF Header Partition: " + SADMAudioMetadataSubDescriptor.class.getSimpleName() + " : "; + private final SADMAudioMetadataSubDescriptorBO sadmAudioMetadataSubDescriptorBO; + + /** + * Constructor for an SADMAudioMetadataSubDescriptor object + * @param sadmAudioMetadataSubDescriptorBO the parsed MGA Soundfield label sub-descriptor object + */ + public SADMAudioMetadataSubDescriptor(SADMAudioMetadataSubDescriptorBO sadmAudioMetadataSubDescriptorBO) + { + super(); + this.sadmAudioMetadataSubDescriptorBO = sadmAudioMetadataSubDescriptorBO; + } + /** + * A method that returns a string representation of an SADMAudioMetadataSubDescriptor object. + * + * @return string representing the object + */ + public String toString() + { + return this.sadmAudioMetadataSubDescriptorBO.toString(); + } + + /** + * Object corresponding to a parsed SADMAudioMetadataSubDescriptor structural metadata set defined in ST 2127-10:2022 + */ + @Immutable + @SuppressWarnings({"PMD.FinalFieldCouldBeStatic"}) + public static final class SADMAudioMetadataSubDescriptorBO extends SubDescriptor.SubDescriptorBO + { + @MXFProperty(size=16) private final byte[] sadm_metadata_section_link_id = null; //UUID + @MXFProperty(size=0) private final CompoundDataTypes.MXFCollections.MXFCollection
        sadm_profile_level_batch = null; + + /** + * Instantiates a new parsed SADMAudioMetadataSubDescriptor object by virtue of parsing the MXF file bitstream + * + * @param header the parsed header (K and L fields from the KLV packet) + * @param byteProvider the input stream corresponding to the MXF file + * @param localTagToUIDMap mapping from local tag to element UID as provided by the Primer Pack defined in st377-1:2011 + * @param imfErrorLogger logger for recording any parsing errors + * @throws IOException - any I/O related error will be exposed through an IOException + */ + public SADMAudioMetadataSubDescriptorBO(KLVPacket.Header header, ByteProvider byteProvider, Map localTagToUIDMap, IMFErrorLogger imfErrorLogger) + throws IOException + { + super(header); + long numBytesToRead = this.header.getVSize(); + + StructuralMetadata.populate(this, byteProvider, numBytesToRead, localTagToUIDMap); + + if (this.sadm_metadata_section_link_id == null) + { + imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_ESSENCE_METADATA_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, + SADMAudioMetadataSubDescriptor.ERROR_DESCRIPTION_PREFIX + "sadm_metadata_section_link_id is null"); + } + } + + /** + * Accessor for the mga_link_id of this SADMAudioMetadataSubDescriptor + * @return a byte array representing the mga_link_id for the SADMAudioMetadataSubDescriptor + */ + public byte[] getSADMMetadataSectionLinkId(){ + return this.sadm_metadata_section_link_id.clone(); + } + + /** + * Accessor for the adm_profile_level_batch of this ADMAudioMetadataSubDescriptor + * @return a collection representing the adm_profile_level_batch for the ADMAudioMetadataSubDescriptor + */ + public CompoundDataTypes.MXFCollections.MXFCollection
          getSADMProfileLevelULBatch(){ + return this.sadm_profile_level_batch; + } + + /** + * A method that returns a string representation of the object. + * + * @return string representing the object + */ + public String toString() + { + StringBuilder sb = new StringBuilder(); + sb.append(super.toString()); + if (this.sadm_metadata_section_link_id != null) + { + sb.append(String.format("sadm_metadata_section_link_id = 0x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%n", + this.sadm_metadata_section_link_id[0], this.sadm_metadata_section_link_id[1], this.sadm_metadata_section_link_id[2], this.sadm_metadata_section_link_id[3], + this.sadm_metadata_section_link_id[4], this.sadm_metadata_section_link_id[5], this.sadm_metadata_section_link_id[6], this.sadm_metadata_section_link_id[7], + this.sadm_metadata_section_link_id[8], this.sadm_metadata_section_link_id[9], this.sadm_metadata_section_link_id[10], this.sadm_metadata_section_link_id[11], + this.sadm_metadata_section_link_id[12], this.sadm_metadata_section_link_id[13], this.sadm_metadata_section_link_id[14], this.sadm_metadata_section_link_id[15])); + } + + return sb.toString(); + } + } +} diff --git a/src/main/java/com/netflix/imflibrary/st379_2/ContainerConstraintsSubDescriptor.java b/src/main/java/com/netflix/imflibrary/st379_2/ContainerConstraintsSubDescriptor.java index 96b7d588..5ec4bd45 100644 --- a/src/main/java/com/netflix/imflibrary/st379_2/ContainerConstraintsSubDescriptor.java +++ b/src/main/java/com/netflix/imflibrary/st379_2/ContainerConstraintsSubDescriptor.java @@ -81,7 +81,7 @@ public ContainerConstraintsSubDescriptorBO(KLVPacket.Header header, ByteProvider if (this.instance_uid == null) { imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_ESSENCE_METADATA_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, - ContainerConstraintsSubDescriptor.ERROR_DESCRIPTION_PREFIX + "instance_uid is null"); + ContainerConstraintsSubDescriptor.ERROR_DESCRIPTION_PREFIX + "instance_uid is null"); } } diff --git a/src/main/java/com/netflix/imflibrary/writerTools/CompositionPlaylistBuilder_2016.java b/src/main/java/com/netflix/imflibrary/writerTools/CompositionPlaylistBuilder_2016.java index 8820290a..58fdfca9 100755 --- a/src/main/java/com/netflix/imflibrary/writerTools/CompositionPlaylistBuilder_2016.java +++ b/src/main/java/com/netflix/imflibrary/writerTools/CompositionPlaylistBuilder_2016.java @@ -332,7 +332,8 @@ private void serializeCPLToXML(org.smpte_ra.schemas._2067_3._2016.CompositionPla org.smpte_ra.schemas._2067_3._2016.ObjectFactory.class, // 2016 CPL org.smpte_ra.schemas._2067_2._2016.ObjectFactory.class, // 2016 Core constraints org.smpte_ra.ns._2067_2._2020.ObjectFactory.class, // 2020 Core constraints - org.smpte_ra.ns._2067_201._2019.ObjectFactory.class); // IAB + org.smpte_ra.ns._2067_201._2019.ObjectFactory.class, // IAB + org.smpte_ra.ns._2067_203._2022.ObjectFactory.class); // MGA S-ADM Marshaller marshaller = jaxbContext.createMarshaller(); ValidationEventHandlerImpl validationEventHandler = new ValidationEventHandlerImpl(true); marshaller.setEventHandler(validationEventHandler); @@ -578,6 +579,7 @@ public void populateSequenceListForSegment(List sequenceTypeT { org.smpte_ra.ns._2067_2._2020.ObjectFactory objectFactory = new org.smpte_ra.ns._2067_2._2020.ObjectFactory(); org.smpte_ra.ns._2067_201._2019.ObjectFactory iabFactory = new org.smpte_ra.ns._2067_201._2019.ObjectFactory(); + org.smpte_ra.ns._2067_203._2022.ObjectFactory mgasadmFactory = new org.smpte_ra.ns._2067_203._2022.ObjectFactory(); for(SequenceTypeTuple sequenceTypeTuple : sequenceTypeTuples){ switch(sequenceTypeTuple.getSequenceType()){ case MainImageSequence: @@ -590,12 +592,16 @@ public void populateSequenceListForSegment(List sequenceTypeT // JAXB class for IABSequence was generated in the CC 2016 package. Use that any.add(iabFactory.createIABSequence(sequenceTypeTuple.getSequence())); break; + case MGASADMSignalSequence: + // JAXB class for MGASADMSignalSequence was generated in the CC 2016 package. Use that + any.add(mgasadmFactory.createMGASADMSignalSequence(sequenceTypeTuple.getSequence())); + break; case MarkerSequence: segment.getSequenceList().setMarkerSequence(sequenceTypeTuple.getSequence()); break; default: - throw new IMFAuthoringException(String.format("Currently we only support %s, %s, %s, and %s sequence types in building a Composition Playlist document, the type of sequence being requested is %s", - Composition.SequenceTypeEnum.MainAudioSequence, Composition.SequenceTypeEnum.MainImageSequence, Composition.SequenceTypeEnum.IABSequence, Composition.SequenceTypeEnum.MarkerSequence, sequenceTypeTuple.getSequenceType())); + throw new IMFAuthoringException(String.format("Currently we only support %s, %s, %s, %s, %s, and %s sequence types in building a Composition Playlist document, the type of sequence being requested is %s", + Composition.SequenceTypeEnum.MainAudioSequence, Composition.SequenceTypeEnum.MainImageSequence, Composition.SequenceTypeEnum.IABSequence, Composition.SequenceTypeEnum.MGASADMSignalSequence, Composition.SequenceTypeEnum.MarkerSequence, sequenceTypeTuple.getSequenceType())); } } } @@ -603,6 +609,7 @@ public void populateSequenceListForSegment(List sequenceTypeT { org.smpte_ra.schemas._2067_2._2016.ObjectFactory objectFactory = new org.smpte_ra.schemas._2067_2._2016.ObjectFactory(); org.smpte_ra.ns._2067_201._2019.ObjectFactory iabFactory = new org.smpte_ra.ns._2067_201._2019.ObjectFactory(); + org.smpte_ra.ns._2067_203._2022.ObjectFactory mgaFactory = new org.smpte_ra.ns._2067_203._2022.ObjectFactory(); for(SequenceTypeTuple sequenceTypeTuple : sequenceTypeTuples){ switch(sequenceTypeTuple.getSequenceType()){ case MainImageSequence: @@ -614,12 +621,15 @@ public void populateSequenceListForSegment(List sequenceTypeT case IABSequence: any.add(iabFactory.createIABSequence(sequenceTypeTuple.getSequence())); break; + case MGASADMSignalSequence: + any.add(mgaFactory.createMGASADMSignalSequence(sequenceTypeTuple.getSequence())); + break; case MarkerSequence: segment.getSequenceList().setMarkerSequence(sequenceTypeTuple.getSequence()); break; default: - throw new IMFAuthoringException(String.format("Currently we only support %s, %s, %s, and %s sequence types in building a Composition Playlist document, the type of sequence being requested is %s", - Composition.SequenceTypeEnum.MainAudioSequence, Composition.SequenceTypeEnum.MainImageSequence, Composition.SequenceTypeEnum.IABSequence, Composition.SequenceTypeEnum.MarkerSequence, sequenceTypeTuple.getSequenceType())); + throw new IMFAuthoringException(String.format("Currently we only support %s, %s, %s, %s, %s, and %s sequence types in building a Composition Playlist document, the type of sequence being requested is %s", + Composition.SequenceTypeEnum.MainAudioSequence, Composition.SequenceTypeEnum.MainImageSequence, Composition.SequenceTypeEnum.IABSequence, Composition.SequenceTypeEnum.MGASADMSignalSequence, Composition.SequenceTypeEnum.MarkerSequence, sequenceTypeTuple.getSequenceType())); } } } diff --git a/src/main/resources/org/smpte_ra/schemas/st2067_203_2023/st2067-203-2023.xsd b/src/main/resources/org/smpte_ra/schemas/st2067_203_2023/st2067-203-2023.xsd new file mode 100644 index 00000000..34e60013 --- /dev/null +++ b/src/main/resources/org/smpte_ra/schemas/st2067_203_2023/st2067-203-2023.xsd @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/test/java/com/netflix/imflibrary/st2067_203/IMPAnalyzerTest.java b/src/test/java/com/netflix/imflibrary/st2067_203/IMPAnalyzerTest.java new file mode 100644 index 00000000..464cf367 --- /dev/null +++ b/src/test/java/com/netflix/imflibrary/st2067_203/IMPAnalyzerTest.java @@ -0,0 +1,500 @@ +package com.netflix.imflibrary.st2067_203; + +import com.netflix.imflibrary.utils.ErrorLogger; +import org.testng.Assert; +import org.testng.annotations.Test; +import testUtils.TestHelper; + +import java.io.File; +import java.io.IOException; +import java.util.List; +import java.util.Map; + +import static com.netflix.imflibrary.app.IMPAnalyzer.analyzePackage; + +@Test(groups = "unit") +public class IMPAnalyzerTest +{ + @Test + public void IMPAnalyzerTest() throws IOException + { + File inputFile = TestHelper.findResourceByPath("TestIMP/SADM/ST2067-203_audio_track_file__compliant/"); + Map> errorMap = analyzePackage(inputFile); + Assert.assertEquals(errorMap.size(), 5); + errorMap.entrySet().stream().forEach( e -> + { + if (e.getKey().matches("CPL_3a8d80e8-80ab-4152-be80-3ba86c032ead.xml Virtual Track Conformance")) { + Assert.assertEquals(e.getValue().size(), 3); + } else if (e.getKey().matches("ST2067-203_audio_track_file__compliant.mxf")) { + Assert.assertEquals(e.getValue().size(), 2); + } else { + Assert.assertEquals(e.getValue().size(), 0); + } + } + ); + + } + + @Test + public void IMPAnalyzerTest02() throws IOException + { + File inputFile = TestHelper.findResourceByPath("TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_16bit/"); + Map> errorMap = analyzePackage(inputFile); + Assert.assertEquals(errorMap.size(), 5); + errorMap.entrySet().stream().forEach( e -> + { + if (e.getKey().matches("CPL_bfd4736d-7ab7-4d12-a807-9f2cf4beb587.xml Virtual Track Conformance")) { + Assert.assertEquals(e.getValue().size(), 5); + } else if (e.getKey().matches("ST2067-203_audio_track_file__non_compliant_16bit.mxf")) { + Assert.assertEquals(e.getValue().size(), 3); + } else if (e.getKey().matches("CPL_bfd4736d-7ab7-4d12-a807-9f2cf4beb587.xml")) { + Assert.assertEquals(e.getValue().size(), 1); + } else { + Assert.assertEquals(e.getValue().size(), 0); + } + } + ); + + } + + @Test + public void IMPAnalyzerTest03() throws IOException + { + File inputFile = TestHelper.findResourceByPath("TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_44100Hz/"); + Map> errorMap = analyzePackage(inputFile); + Assert.assertEquals(errorMap.size(), 5); + errorMap.entrySet().stream().forEach( e -> + { + if (e.getKey().matches("CPL_95c21bb6-d26f-4afd-94ef-62420b966eec.xml Virtual Track Conformance")) { + Assert.assertEquals(e.getValue().size(), 4); + } else if (e.getKey().matches("ST2067-203_audio_track_file__non_compliant_44100Hz.mxf")) { + Assert.assertEquals(e.getValue().size(), 3); + } else if (e.getKey().matches("CPL_95c21bb6-d26f-4afd-94ef-62420b966eec.xml")) { + Assert.assertEquals(e.getValue().size(), 0); + } else { + Assert.assertEquals(e.getValue().size(), 0); + } + } + ); + + } + + @Test + public void IMPAnalyzerTest04() throws IOException + { + File inputFile = TestHelper.findResourceByPath("TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_ADMAudioProgrammeID_missing/"); + Map> errorMap = analyzePackage(inputFile); + Assert.assertEquals(errorMap.size(), 5); + errorMap.entrySet().stream().forEach( e -> + { + if (e.getKey().matches("CPL_55dbccfd-c530-4e4c-a26c-329354f4f50d.xml Virtual Track Conformance")) { + Assert.assertEquals(e.getValue().size(), 7); + } else if (e.getKey().matches("ST2067-203_audio_track_file__non_compliant_ADMAudioProgrammeID_missing.mxf")) { + Assert.assertEquals(e.getValue().size(), 6); + } else if (e.getKey().matches("CPL_55dbccfd-c530-4e4c-a26c-329354f4f50d.xml")) { + Assert.assertEquals(e.getValue().size(), 0); + } else { + Assert.assertEquals(e.getValue().size(), 0); + } + } + ); + + } + + @Test + public void IMPAnalyzerTest05() throws IOException + { + File inputFile = TestHelper.findResourceByPath("TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_ContainerContraintsSubDescriptor_missing/"); + Map> errorMap = analyzePackage(inputFile); + Assert.assertEquals(errorMap.size(), 5); + errorMap.entrySet().stream().forEach( e -> + { + if (e.getKey().matches("CPL_8174af5e-66fb-43b3-acf0-cf2666cf0067.xml Virtual Track Conformance")) { + Assert.assertEquals(e.getValue().size(), 4); + } else if (e.getKey().matches("ST2067-203_audio_track_file__non_compliant_ContainerContraintsSubDescriptor_missing.mxf")) { + Assert.assertEquals(e.getValue().size(), 3); + } else if (e.getKey().matches("CPL_8174af5e-66fb-43b3-acf0-cf2666cf0067.xml")) { + Assert.assertEquals(e.getValue().size(), 0); + } else { + Assert.assertEquals(e.getValue().size(), 0); + } + } + ); + + } + + @Test + public void IMPAnalyzerTest06() throws IOException + { + File inputFile = TestHelper.findResourceByPath("TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCAContent_missing/"); + Map> errorMap = analyzePackage(inputFile); + Assert.assertEquals(errorMap.size(), 5); + errorMap.entrySet().stream().forEach( e -> + { + if (e.getKey().matches("CPL_132923e2-43c6-4e2c-a68b-9c8dc20c5bcf.xml Virtual Track Conformance")) { + Assert.assertEquals(e.getValue().size(), 8); + } else if (e.getKey().matches("ST2067-203_audio_track_file__non_compliant_MCAContent_missing.mxf")) { + Assert.assertEquals(e.getValue().size(), 6); + } else if (e.getKey().matches("CPL_132923e2-43c6-4e2c-a68b-9c8dc20c5bcf.xml")) { + Assert.assertEquals(e.getValue().size(), 1); + } else { + Assert.assertEquals(e.getValue().size(), 0); + } + } + ); + + } + + @Test + public void IMPAnalyzerTest07() throws IOException + { + File inputFile = TestHelper.findResourceByPath("TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCAContent_wrong/"); + Map> errorMap = analyzePackage(inputFile); + Assert.assertEquals(errorMap.size(), 5); + errorMap.entrySet().stream().forEach( e -> + { + if (e.getKey().matches("CPL_a6acdc1f-a3fc-4f12-8a52-f4b474ba24b6.xml Virtual Track Conformance")) { + Assert.assertEquals(e.getValue().size(), 8); + } else if (e.getKey().matches("ST2067-203_audio_track_file__non_compliant_MCAContent_wrong.mxf")) { + Assert.assertEquals(e.getValue().size(), 6); + } else if (e.getKey().matches("CPL_a6acdc1f-a3fc-4f12-8a52-f4b474ba24b6.xml")) { + Assert.assertEquals(e.getValue().size(), 1); + } else { + Assert.assertEquals(e.getValue().size(), 0); + } + } + ); + + } + + @Test + public void IMPAnalyzerTest08() throws IOException + { + File inputFile = TestHelper.findResourceByPath("TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATagName_missing/"); + Map> errorMap = analyzePackage(inputFile); + Assert.assertEquals(errorMap.size(), 5); + errorMap.entrySet().stream().forEach( e -> + { + if (e.getKey().matches("CPL_634aab40-cc48-49eb-81bd-8f3119387a4a.xml Virtual Track Conformance")) { + Assert.assertEquals(e.getValue().size(), 8); + } else if (e.getKey().matches("ST2067-203_audio_track_file__non_compliant_MCATagName_missing.mxf")) { + Assert.assertEquals(e.getValue().size(), 6); + } else if (e.getKey().matches("CPL_634aab40-cc48-49eb-81bd-8f3119387a4a.xml")) { + Assert.assertEquals(e.getValue().size(), 1); + } else { + Assert.assertEquals(e.getValue().size(), 0); + } + } + ); + + } + + @Test + public void IMPAnalyzerTest09() throws IOException + { + File inputFile = TestHelper.findResourceByPath("TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATagName_wrong/"); + Map> errorMap = analyzePackage(inputFile); + Assert.assertEquals(errorMap.size(), 5); + errorMap.entrySet().stream().forEach( e -> + { + if (e.getKey().matches("CPL_e00a7145-9c75-46ee-a781-4abe52aac6bc.xml Virtual Track Conformance")) { + Assert.assertEquals(e.getValue().size(), 8); + } else if (e.getKey().matches("ST2067-203_audio_track_file__non_compliant_MCATagName_wrong.mxf")) { + Assert.assertEquals(e.getValue().size(), 6); + } else if (e.getKey().matches("CPL_e00a7145-9c75-46ee-a781-4abe52aac6bc.xml")) { + Assert.assertEquals(e.getValue().size(), 1); + } else { + Assert.assertEquals(e.getValue().size(), 0); + } + } + ); + + } + + @Test + public void IMPAnalyzerTest10() throws IOException + { + File inputFile = TestHelper.findResourceByPath("TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATagSymbol_missing/"); + Map> errorMap = analyzePackage(inputFile); + Assert.assertEquals(errorMap.size(), 5); + errorMap.entrySet().stream().forEach( e -> + { + if (e.getKey().matches("CPL_f6f0f34c-c7c9-49c3-ab46-673b97838289.xml Virtual Track Conformance")) { + Assert.assertEquals(e.getValue().size(), 8); + } else if (e.getKey().matches("ST2067-203_audio_track_file__non_compliant_MCATagSymbol_missing.mxf")) { + Assert.assertEquals(e.getValue().size(), 6); + } else if (e.getKey().matches("CPL_f6f0f34c-c7c9-49c3-ab46-673b97838289.xml")) { + Assert.assertEquals(e.getValue().size(), 1); + } else { + Assert.assertEquals(e.getValue().size(), 0); + } + } + ); + + } + + @Test + public void IMPAnalyzerTest11() throws IOException + { + File inputFile = TestHelper.findResourceByPath("TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATagSymbol_wrong/"); + Map> errorMap = analyzePackage(inputFile); + Assert.assertEquals(errorMap.size(), 5); + errorMap.entrySet().stream().forEach( e -> + { + if (e.getKey().matches("CPL_764a1add-ee83-4954-86c8-c41850210e1c.xml Virtual Track Conformance")) { + Assert.assertEquals(e.getValue().size(), 8); + } else if (e.getKey().matches("ST2067-203_audio_track_file__non_compliant_MCATagSymbol_wrong.mxf")) { + Assert.assertEquals(e.getValue().size(), 6); + } else if (e.getKey().matches("CPL_764a1add-ee83-4954-86c8-c41850210e1c.xml")) { + Assert.assertEquals(e.getValue().size(), 1); + } else { + Assert.assertEquals(e.getValue().size(), 0); + } + } + ); + + } + + @Test + public void IMPAnalyzerTest12() throws IOException + { + File inputFile = TestHelper.findResourceByPath("TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATitle_missing/"); + Map> errorMap = analyzePackage(inputFile); + Assert.assertEquals(errorMap.size(), 5); + errorMap.entrySet().stream().forEach( e -> + { + if (e.getKey().matches("CPL_f1033b99-37e5-4003-8733-eb27da75a63a.xml Virtual Track Conformance")) { + Assert.assertEquals(e.getValue().size(), 8); + } else if (e.getKey().matches("ST2067-203_audio_track_file__non_compliant_MCATitle_missing.mxf")) { + Assert.assertEquals(e.getValue().size(), 6); + } else if (e.getKey().matches("CPL_f1033b99-37e5-4003-8733-eb27da75a63a.xml")) { + Assert.assertEquals(e.getValue().size(), 1); + } else { + Assert.assertEquals(e.getValue().size(), 0); + } + } + ); + + } + + @Test + public void IMPAnalyzerTest13() throws IOException + { + File inputFile = TestHelper.findResourceByPath("TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATitleVersion_missing/"); + Map> errorMap = analyzePackage(inputFile); + Assert.assertEquals(errorMap.size(), 5); + errorMap.entrySet().stream().forEach( e -> + { + if (e.getKey().matches("CPL_609b7a45-5f0d-483a-9282-9329461a7543.xml Virtual Track Conformance")) { + Assert.assertEquals(e.getValue().size(), 8); + } else if (e.getKey().matches("ST2067-203_audio_track_file__non_compliant_MCATitleVersion_missing.mxf")) { + Assert.assertEquals(e.getValue().size(), 6); + } else if (e.getKey().matches("CPL_609b7a45-5f0d-483a-9282-9329461a7543.xml")) { + Assert.assertEquals(e.getValue().size(), 1); + } else { + Assert.assertEquals(e.getValue().size(), 0); + } + } + ); + + } + + @Test + public void IMPAnalyzerTest14() throws IOException + { + File inputFile = TestHelper.findResourceByPath("TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCAUseClass_missing/"); + Map> errorMap = analyzePackage(inputFile); + Assert.assertEquals(errorMap.size(), 5); + errorMap.entrySet().stream().forEach( e -> + { + if (e.getKey().matches("CPL_81cb7798-6ca0-4bc4-8470-4dbdef679a9f.xml Virtual Track Conformance")) { + Assert.assertEquals(e.getValue().size(), 8); + } else if (e.getKey().matches("ST2067-203_audio_track_file__non_compliant_MCAUseClass_missing.mxf")) { + Assert.assertEquals(e.getValue().size(), 6); + } else if (e.getKey().matches("CPL_81cb7798-6ca0-4bc4-8470-4dbdef679a9f.xml")) { + Assert.assertEquals(e.getValue().size(), 1); + } else { + Assert.assertEquals(e.getValue().size(), 0); + } + } + ); + + } + + @Test + public void IMPAnalyzerTest15() throws IOException + { + File inputFile = TestHelper.findResourceByPath("TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCAUseClass_wrong/"); + Map> errorMap = analyzePackage(inputFile); + Assert.assertEquals(errorMap.size(), 5); + errorMap.entrySet().stream().forEach( e -> + { + if (e.getKey().matches("CPL_8c90fed7-7225-4d15-a611-6e49ccb78180.xml Virtual Track Conformance")) { + Assert.assertEquals(e.getValue().size(), 8); + } else if (e.getKey().matches("ST2067-203_audio_track_file__non_compliant_MCAUseClass_wrong.mxf")) { + Assert.assertEquals(e.getValue().size(), 6); + } else if (e.getKey().matches("CPL_8c90fed7-7225-4d15-a611-6e49ccb78180.xml")) { + Assert.assertEquals(e.getValue().size(), 1); + } else { + Assert.assertEquals(e.getValue().size(), 0); + } + } + ); + + } + + @Test + public void IMPAnalyzerTest16() throws IOException + { + File inputFile = TestHelper.findResourceByPath("TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_SADM_MGAAudioMetadataIdentifier_wrong/"); + Map> errorMap = analyzePackage(inputFile); + Assert.assertEquals(errorMap.size(), 5); + errorMap.entrySet().stream().forEach( e -> + { + if (e.getKey().matches("CPL_46c69227-4fd4-437c-9c9a-bda4e9e90777.xml Virtual Track Conformance")) { + Assert.assertEquals(e.getValue().size(), 5); + } else if (e.getKey().matches("ST2067-203_audio_track_file__non_compliant_SADM_MGAAudioMetadataIdentifier_wrong.mxf")) { + Assert.assertEquals(e.getValue().size(), 4); + } else if (e.getKey().matches("CPL_46c69227-4fd4-437c-9c9a-bda4e9e90777.xml")) { + Assert.assertEquals(e.getValue().size(), 0); + } else { + Assert.assertEquals(e.getValue().size(), 0); + } + } + ); + + } + + @Test + public void IMPAnalyzerTest17() throws IOException + { + File inputFile = TestHelper.findResourceByPath("TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_SADM_MGAMetadataIndex_wrong/"); + Map> errorMap = analyzePackage(inputFile); + Assert.assertEquals(errorMap.size(), 5); + errorMap.entrySet().stream().forEach( e -> + { + if (e.getKey().matches("CPL_a9b4c035-3db9-4971-b4ae-46e82742cf59.xml Virtual Track Conformance")) { + Assert.assertEquals(e.getValue().size(), 6); + } else if (e.getKey().matches("ST2067-203_audio_track_file__non_compliant_SADM_MGAMetadataIndex_wrong.mxf")) { + Assert.assertEquals(e.getValue().size(), 5); + } else if (e.getKey().matches("CPL_a9b4c035-3db9-4971-b4ae-46e82742cf59.xml")) { + Assert.assertEquals(e.getValue().size(), 0); + } else { + Assert.assertEquals(e.getValue().size(), 0); + } + } + ); + + } + + @Test + public void IMPAnalyzerTest18() throws IOException + { + File inputFile = TestHelper.findResourceByPath("TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_SADMAudioMetadataSubDescriptor_missing/"); + Map> errorMap = analyzePackage(inputFile); + Assert.assertEquals(errorMap.size(), 5); + errorMap.entrySet().stream().forEach( e -> + { + if (e.getKey().matches("CPL_bb130309-e1a4-4582-8266-a51ecf11e452.xml Virtual Track Conformance")) { + Assert.assertEquals(e.getValue().size(), 4); + } else if (e.getKey().matches("ST2067-203_audio_track_file__non_compliant_SADMAudioMetadataSubDescriptor_missing.mxf")) { + Assert.assertEquals(e.getValue().size(), 3); + } else if (e.getKey().matches("CPL_bb130309-e1a4-4582-8266-a51ecf11e452.xml")) { + Assert.assertEquals(e.getValue().size(), 0); + } else { + Assert.assertEquals(e.getValue().size(), 0); + } + } + ); + + } + + @Test + public void IMPAnalyzerTest19() throws IOException + { + File inputFile = TestHelper.findResourceByPath("TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_two_SADM_sections/"); + Map> errorMap = analyzePackage(inputFile); + Assert.assertEquals(errorMap.size(), 5); + errorMap.entrySet().stream().forEach( e -> + { + if (e.getKey().matches("CPL_9c74b53a-f31d-4189-bb50-ffddf455ed7b.xml Virtual Track Conformance")) { + Assert.assertEquals(e.getValue().size(), 4); + } else if (e.getKey().matches("ST2067-203_audio_track_file__non_compliant_two_SADM_sections.mxf")) { + Assert.assertEquals(e.getValue().size(), 3); + } else if (e.getKey().matches("CPL_9c74b53a-f31d-4189-bb50-ffddf455ed7b.xml")) { + Assert.assertEquals(e.getValue().size(), 0); + } else { + Assert.assertEquals(e.getValue().size(), 0); + } + } + ); + + } + + @Test + public void IMPAnalyzerTest20() throws IOException + { + File inputFile = TestHelper.findResourceByPath("TestIMP/SADM/ST2067-203_CPL__non_compliant_no_virtual_track_parameterset/"); + Map> errorMap = analyzePackage(inputFile); + Assert.assertEquals(errorMap.size(), 5); + errorMap.entrySet().stream().forEach( e -> + { + if (e.getKey().matches("CPL_86bf532c-cdde-46aa-9038-8e5651d0b78d.xml Virtual Track Conformance")) { + Assert.assertEquals(e.getValue().size(), 4); + } else if (e.getKey().matches("ST2067-203_audio_track_file__compliant.mxf")) { + Assert.assertEquals(e.getValue().size(), 2); + } else if (e.getKey().matches("CPL_86bf532c-cdde-46aa-9038-8e5651d0b78d.xml")) { + Assert.assertEquals(e.getValue().size(), 1); + } else { + Assert.assertEquals(e.getValue().size(), 0); + } + } + ); + + } + + @Test + public void IMPAnalyzerTest21() throws IOException + { + File inputFile = TestHelper.findResourceByPath("TestIMP/SADM/ST2067-203_CPL__non_compliant_unkown_operational_mode/"); + Map> errorMap = analyzePackage(inputFile); + Assert.assertEquals(errorMap.size(), 5); + errorMap.entrySet().stream().forEach( e -> + { + if (e.getKey().matches("CPL_4c71a219-0a14-4faa-8526-985e48098a97.xml Virtual Track Conformance")) { + Assert.assertEquals(e.getValue().size(), 4); + } else if (e.getKey().matches("ST2067-203_audio_track_file__compliant.mxf")) { + Assert.assertEquals(e.getValue().size(), 2); + } else if (e.getKey().matches("CPL_4c71a219-0a14-4faa-8526-985e48098a97.xml")) { + Assert.assertEquals(e.getValue().size(), 1); + } else { + Assert.assertEquals(e.getValue().size(), 0); + } + } + ); + + } + + @Test + public void IMPAnalyzerTest22() throws IOException + { + File inputFile = TestHelper.findResourceByPath("TestIMP/SADM/ST2067-203_CPL__non_compliant_wrong_track_id/"); + Map> errorMap = analyzePackage(inputFile); + Assert.assertEquals(errorMap.size(), 5); + errorMap.entrySet().stream().forEach( e -> + { + if (e.getKey().matches("CPL_8c99c449-9100-4bcc-9c3e-ef8ea6796cde.xml Virtual Track Conformance")) { + Assert.assertEquals(e.getValue().size(), 5); + } else if (e.getKey().matches("ST2067-203_audio_track_file__compliant.mxf")) { + Assert.assertEquals(e.getValue().size(), 2); + } else if (e.getKey().matches("CPL_8c99c449-9100-4bcc-9c3e-ef8ea6796cde.xml")) { + Assert.assertEquals(e.getValue().size(), 2); + } else { + Assert.assertEquals(e.getValue().size(), 0); + } + } + ); + + } + + } diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_CPL__non_compliant_no_virtual_track_parameterset/ASSETMAP.xml b/src/test/resources/TestIMP/SADM/ST2067-203_CPL__non_compliant_no_virtual_track_parameterset/ASSETMAP.xml new file mode 100644 index 00000000..60fb1604 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_CPL__non_compliant_no_virtual_track_parameterset/ASSETMAP.xml @@ -0,0 +1,35 @@ + + + urn:uuid:b090fa21-6bd9-4d46-b6c5-5eb9a23cb936 + IMF-Tool 1.9.381 + 1 + 2024-08-25T05:24:39Z + WR + + + urn:uuid:7f8c0ad3-1b06-4f6b-be23-cc7ae3fca304 + + + ST2067-203_audio_track_file__compliant.mxf + + + + + urn:uuid:86bf532c-cdde-46aa-9038-8e5651d0b78d + + + CPL_86bf532c-cdde-46aa-9038-8e5651d0b78d.xml + + + + + urn:uuid:93bb0473-abae-4671-82bc-0c823155c82b + true + + + PKL_93bb0473-abae-4671-82bc-0c823155c82b.xml + + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_CPL__non_compliant_no_virtual_track_parameterset/CPL_86bf532c-cdde-46aa-9038-8e5651d0b78d.xml b/src/test/resources/TestIMP/SADM/ST2067-203_CPL__non_compliant_no_virtual_track_parameterset/CPL_86bf532c-cdde-46aa-9038-8e5651d0b78d.xml new file mode 100644 index 00000000..a393c32a --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_CPL__non_compliant_no_virtual_track_parameterset/CPL_86bf532c-cdde-46aa-9038-8e5651d0b78d.xml @@ -0,0 +1,256 @@ + + + urn:uuid:86bf532c-cdde-46aa-9038-8e5651d0b78d + S-ADM Test, Virtual Track Parameter Set is not compliant + 2024-08-25T05:24:38Z + Wolfgang Ruppel + IMF-Tool 1.9.381 + Fraunhofer IIS + S-ADM + test + + + urn:uuid:623e115c-fce6-4bd3-9fc3-3469cb9b0dfd + S-ADM + + + + + urn:uuid:55e9e53a-e34c-40f7-90b3-8b24d64b91ff + + 10 + 2 + 1 + 64 + 940 + 897 + CoSiting + 50/1 + FullFrame + 1920 + 1080 + 1920 + 1080 + 0 + 0 + 1920 + 1080 + 0 + 0 + + 42 + 0 + + urn:smpte:ul:060e2b34.0401010d.04010202.03010114 + 16/9 + urn:smpte:ul:060e2b34.0401010d.0d010301.020c0600 + urn:smpte:ul:060e2b34.04010101.04010101.01020000 + urn:smpte:ul:060e2b34.04010101.04010101.02020000 + urn:smpte:ul:060e2b34.04010106.04010101.03030000 + 1080 + 1920 + 0 + 0 + 0 + + + 260 + 1920 + 1080 + 0 + 0 + 1920 + 1080 + 0 + 0 + 3 + + + 9 + 1 + 1 + + + 9 + 2 + 1 + + + 9 + 2 + 1 + + + 01040001000503030000778888888888 + + + CompLuma + 10 + + + CompColorDifferenceU + 10 + + + CompColorDifferenceV + 10 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + urn:uuid:59d0930e-ab77-48f3-b54b-ce2d56f1fad0 + + + urn:uuid:2b8c2807-b399-4ad4-bbe2-a2aaa0e48f85 + 2 + + + + urn:uuid:939d1a5c-788f-422f-8bc5-3bd1f536c6aa + + urn:uuid:171964c1-6301-4cec-b7c3-c305e8f69d65 + + + urn:uuid:4fd6fc8a-5152-4fdc-89e4-612f6786c26f + + + urn:uuid:b5ae56d7-587d-44be-9339-4bb40cfd2bcd + urn:uuid:28248a74-d311-4659-ad28-4570da8aa405 + 1 + 2 + + urn:smpte:ul:060e2b34.0401010d.04040212.00000000 + + + + urn:uuid:d3af433d-a033-4725-9cde-54ade32e7753 + urn:uuid:28248a74-d311-4659-ad28-4570da8aa405 + + urn:smpte:ul:060e2b34.04010101.0e210101.01010101 + urn:smpte:ul:060e2b34.04010101.0e210101.01020101 + + + + urn:uuid:09b82a83-db61-4167-a7d1-85003e257e76 + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:46034060-e93c-4b9a-8a32-82af42e6ccd3 + MGASf + MGA Soundfield + Default + n/a + PRM + FCMP + urn:uuid:28248a74-d311-4659-ad28-4570da8aa405 + APR_1001 + + + urn:uuid:f8e4b6ac-f935-4b18-b34f-25d2ac305aea + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:0357a60a-58ad-4df3-afb7-5ce45497073c + MGASf + MGA Soundfield + Dialog+ + n/a + PRM + FCMP + urn:uuid:28248a74-d311-4659-ad28-4570da8aa405 + APR_1002 + + + urn:uuid:8192ceff-2c1b-4f0d-82d4-c087ffdc63a6 + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:7fbce6f5-9111-4679-9b74-9cb7206aec75 + MGASf + MGA Soundfield + Audio Description + n/a + PRM + FCMP + urn:uuid:28248a74-d311-4659-ad28-4570da8aa405 + APR_1003 + + + urn:uuid:c65e9d00-e4c0-455c-951d-1dc549f634dd + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:1c1169e8-4456-4e82-9067-4c0bf76c55f3 + MGASf + MGA Soundfield + Commentary Off + n/a + PRM + FCMP + urn:uuid:28248a74-d311-4659-ad28-4570da8aa405 + APR_1004 + + + 2 + 50/1 + 10 + urn:smpte:ul:060e2b34.0401010d.0d010301.02250200 + 48000/1 + False + 5 + 24 + urn:smpte:ul:060e2b34.0401010d.04020201.02010000 + 15 + 720000 + + + + 50 1 + + http://www.smpte-ra.org/ns/2067-21/2021 + + + + urn:uuid:4417f00f-9225-4056-8733-dae41ba38ede + + + urn:uuid:1e0de12c-f245-4f46-a7f6-f04266574623 + urn:uuid:7fbe85de-a98e-4a72-b5f4-02ae2261385c + + + urn:uuid:fe9bd783-06f2-4e4c-9b57-7864d9fc66ae + 500 + 10 + urn:uuid:55e9e53a-e34c-40f7-90b3-8b24d64b91ff + urn:uuid:db8a1a5b-ad90-44cf-bf25-455dcce73ab5 + + + + + urn:uuid:2832783f-6205-4593-a9bb-caecb6faf65c + urn:uuid:7dbceefd-24a4-43ea-a765-5c60f467bf59 + + + urn:uuid:2f2c2d6a-755b-4c0d-a8aa-df8c5b25f195 + 50 1 + 10 + 10 + urn:uuid:939d1a5c-788f-422f-8bc5-3bd1f536c6aa + urn:uuid:7f8c0ad3-1b06-4f6b-be23-cc7ae3fca304 + + + + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_CPL__non_compliant_no_virtual_track_parameterset/PKL_93bb0473-abae-4671-82bc-0c823155c82b.xml b/src/test/resources/TestIMP/SADM/ST2067-203_CPL__non_compliant_no_virtual_track_parameterset/PKL_93bb0473-abae-4671-82bc-0c823155c82b.xml new file mode 100644 index 00000000..747a74fa --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_CPL__non_compliant_no_virtual_track_parameterset/PKL_93bb0473-abae-4671-82bc-0c823155c82b.xml @@ -0,0 +1,25 @@ + + + urn:uuid:93bb0473-abae-4671-82bc-0c823155c82b + 2024-08-25T05:24:39Z + WR + IMF-Tool 1.9.381 + + + urn:uuid:7f8c0ad3-1b06-4f6b-be23-cc7ae3fca304 + w+ea20jYdDTrQHHbd8iv+eUCcJY= + 366872 + application/mxf + ST2067-203_audio_track_file__compliant.mxf + + + + urn:uuid:86bf532c-cdde-46aa-9038-8e5651d0b78d + wiRfUSXVpA6raSW0QPNTL9d7Qt4= + 15562 + text/xml + CPL_86bf532c-cdde-46aa-9038-8e5651d0b78d.xml + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_CPL__non_compliant_no_virtual_track_parameterset/ST2067-203_audio_track_file__compliant.mxf b/src/test/resources/TestIMP/SADM/ST2067-203_CPL__non_compliant_no_virtual_track_parameterset/ST2067-203_audio_track_file__compliant.mxf new file mode 100755 index 00000000..88e6fc00 Binary files /dev/null and b/src/test/resources/TestIMP/SADM/ST2067-203_CPL__non_compliant_no_virtual_track_parameterset/ST2067-203_audio_track_file__compliant.mxf differ diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_CPL__non_compliant_no_virtual_track_parameterset/VOLINDEX.xml b/src/test/resources/TestIMP/SADM/ST2067-203_CPL__non_compliant_no_virtual_track_parameterset/VOLINDEX.xml new file mode 100644 index 00000000..0ebe8e85 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_CPL__non_compliant_no_virtual_track_parameterset/VOLINDEX.xml @@ -0,0 +1,4 @@ + + + 1 + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_CPL__non_compliant_unkown_operational_mode/ASSETMAP.xml b/src/test/resources/TestIMP/SADM/ST2067-203_CPL__non_compliant_unkown_operational_mode/ASSETMAP.xml new file mode 100644 index 00000000..02299514 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_CPL__non_compliant_unkown_operational_mode/ASSETMAP.xml @@ -0,0 +1,35 @@ + + + urn:uuid:e8dcb4be-a0d4-41b7-96de-449c1e72ccdb + IMF-Tool 1.9.381 + 1 + 2024-08-25T05:47:04Z + WR + + + urn:uuid:7f8c0ad3-1b06-4f6b-be23-cc7ae3fca304 + + + ST2067-203_audio_track_file__compliant.mxf + + + + + urn:uuid:4c71a219-0a14-4faa-8526-985e48098a97 + + + CPL_4c71a219-0a14-4faa-8526-985e48098a97.xml + + + + + urn:uuid:5e415f3c-b8c8-4987-80f3-c0593592229e + true + + + PKL_5e415f3c-b8c8-4987-80f3-c0593592229e.xml + + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_CPL__non_compliant_unkown_operational_mode/CPL_4c71a219-0a14-4faa-8526-985e48098a97.xml b/src/test/resources/TestIMP/SADM/ST2067-203_CPL__non_compliant_unkown_operational_mode/CPL_4c71a219-0a14-4faa-8526-985e48098a97.xml new file mode 100644 index 00000000..c74c2ff2 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_CPL__non_compliant_unkown_operational_mode/CPL_4c71a219-0a14-4faa-8526-985e48098a97.xml @@ -0,0 +1,260 @@ + + + urn:uuid:4c71a219-0a14-4faa-8526-985e48098a97 + S-ADM Test, unknown operational mode + 2024-08-25T05:46:40Z + Wolfgang Ruppel + IMF-Tool 1.9.381 + Fraunhofer IIS + S-ADM + test + + + urn:uuid:623e115c-fce6-4bd3-9fc3-3469cb9b0dfd + S-ADM + + + + + urn:uuid:e0ce33a7-f9df-4b2c-b9d6-b7800316c63b + + 10 + 2 + 1 + 64 + 940 + 897 + CoSiting + 50/1 + FullFrame + 1920 + 1080 + 1920 + 1080 + 0 + 0 + 1920 + 1080 + 0 + 0 + + 42 + 0 + + urn:smpte:ul:060e2b34.0401010d.04010202.03010114 + 16/9 + urn:smpte:ul:060e2b34.0401010d.0d010301.020c0600 + urn:smpte:ul:060e2b34.04010101.04010101.01020000 + urn:smpte:ul:060e2b34.04010101.04010101.02020000 + urn:smpte:ul:060e2b34.04010106.04010101.03030000 + 1080 + 1920 + 0 + 0 + 0 + + + 260 + 1920 + 1080 + 0 + 0 + 1920 + 1080 + 0 + 0 + 3 + + + 9 + 1 + 1 + + + 9 + 2 + 1 + + + 9 + 2 + 1 + + + 01040001000503030000778888888888 + + + CompLuma + 10 + + + CompColorDifferenceU + 10 + + + CompColorDifferenceV + 10 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + urn:uuid:59d0930e-ab77-48f3-b54b-ce2d56f1fad0 + + + urn:uuid:2b8c2807-b399-4ad4-bbe2-a2aaa0e48f85 + 2 + + + + urn:uuid:4b7134f5-336a-4522-9e2a-bcf5245a1900 + + urn:uuid:171964c1-6301-4cec-b7c3-c305e8f69d65 + + + urn:uuid:4fd6fc8a-5152-4fdc-89e4-612f6786c26f + + + urn:uuid:b5ae56d7-587d-44be-9339-4bb40cfd2bcd + urn:uuid:28248a74-d311-4659-ad28-4570da8aa405 + 1 + 2 + + urn:smpte:ul:060e2b34.0401010d.04040212.00000000 + + + + urn:uuid:d3af433d-a033-4725-9cde-54ade32e7753 + urn:uuid:28248a74-d311-4659-ad28-4570da8aa405 + + urn:smpte:ul:060e2b34.04010101.0e210101.01010101 + urn:smpte:ul:060e2b34.04010101.0e210101.01020101 + + + + urn:uuid:09b82a83-db61-4167-a7d1-85003e257e76 + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:46034060-e93c-4b9a-8a32-82af42e6ccd3 + MGASf + MGA Soundfield + Default + n/a + PRM + FCMP + urn:uuid:28248a74-d311-4659-ad28-4570da8aa405 + APR_1001 + + + urn:uuid:f8e4b6ac-f935-4b18-b34f-25d2ac305aea + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:0357a60a-58ad-4df3-afb7-5ce45497073c + MGASf + MGA Soundfield + Dialog+ + n/a + PRM + FCMP + urn:uuid:28248a74-d311-4659-ad28-4570da8aa405 + APR_1002 + + + urn:uuid:8192ceff-2c1b-4f0d-82d4-c087ffdc63a6 + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:7fbce6f5-9111-4679-9b74-9cb7206aec75 + MGASf + MGA Soundfield + Audio Description + n/a + PRM + FCMP + urn:uuid:28248a74-d311-4659-ad28-4570da8aa405 + APR_1003 + + + urn:uuid:c65e9d00-e4c0-455c-951d-1dc549f634dd + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:1c1169e8-4456-4e82-9067-4c0bf76c55f3 + MGASf + MGA Soundfield + Commentary Off + n/a + PRM + FCMP + urn:uuid:28248a74-d311-4659-ad28-4570da8aa405 + APR_1004 + + + 2 + 50/1 + 10 + urn:smpte:ul:060e2b34.0401010d.0d010301.02250200 + 48000/1 + False + 5 + 24 + urn:smpte:ul:060e2b34.0401010d.04020201.02010000 + 15 + 720000 + + + + 50 1 + + http://www.smpte-ra.org/ns/2067-21/2021 + + urn:uuid:347920ac-14e3-4f53-9747-3e4443080724 + urn:uuid:2a948f7a-d71d-49ad-ae58-35c1391d4228 + http://www.smpte-ra.org/ns/2067-203/2022#Operational-Mode-XYZ + + + + urn:uuid:17d0661e-b75b-44fb-835d-b6e3d0aa9e5b + + + urn:uuid:a8613725-4982-4f05-851e-7f0266da203a + urn:uuid:2f6bab99-f598-43d8-8b39-c20e49e66b82 + + + urn:uuid:78ce3b1b-a220-4248-856b-6cf9ed09088f + 500 + 10 + urn:uuid:e0ce33a7-f9df-4b2c-b9d6-b7800316c63b + urn:uuid:db8a1a5b-ad90-44cf-bf25-455dcce73ab5 + + + + + urn:uuid:d9bbe6c3-9c22-40e5-84ce-0529176ecbe5 + urn:uuid:2a948f7a-d71d-49ad-ae58-35c1391d4228 + + + urn:uuid:305c8560-ff88-4913-8fc6-e762ad4d2da8 + 50 1 + 10 + 10 + urn:uuid:4b7134f5-336a-4522-9e2a-bcf5245a1900 + urn:uuid:7f8c0ad3-1b06-4f6b-be23-cc7ae3fca304 + + + + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_CPL__non_compliant_unkown_operational_mode/PKL_5e415f3c-b8c8-4987-80f3-c0593592229e.xml b/src/test/resources/TestIMP/SADM/ST2067-203_CPL__non_compliant_unkown_operational_mode/PKL_5e415f3c-b8c8-4987-80f3-c0593592229e.xml new file mode 100644 index 00000000..70e607f5 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_CPL__non_compliant_unkown_operational_mode/PKL_5e415f3c-b8c8-4987-80f3-c0593592229e.xml @@ -0,0 +1,25 @@ + + + urn:uuid:5e415f3c-b8c8-4987-80f3-c0593592229e + 2024-08-25T05:47:04Z + WR + IMF-Tool 1.9.381 + + + urn:uuid:7f8c0ad3-1b06-4f6b-be23-cc7ae3fca304 + w+ea20jYdDTrQHHbd8iv+eUCcJY= + 366872 + application/mxf + ST2067-203_audio_track_file__compliant.mxf + + + + urn:uuid:4c71a219-0a14-4faa-8526-985e48098a97 + L8SCweB+XS3P0DB0wAm1wFjqxC8= + 15986 + text/xml + CPL_4c71a219-0a14-4faa-8526-985e48098a97.xml + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_CPL__non_compliant_unkown_operational_mode/ST2067-203_audio_track_file__compliant.mxf b/src/test/resources/TestIMP/SADM/ST2067-203_CPL__non_compliant_unkown_operational_mode/ST2067-203_audio_track_file__compliant.mxf new file mode 100755 index 00000000..88e6fc00 Binary files /dev/null and b/src/test/resources/TestIMP/SADM/ST2067-203_CPL__non_compliant_unkown_operational_mode/ST2067-203_audio_track_file__compliant.mxf differ diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_CPL__non_compliant_unkown_operational_mode/VOLINDEX.xml b/src/test/resources/TestIMP/SADM/ST2067-203_CPL__non_compliant_unkown_operational_mode/VOLINDEX.xml new file mode 100644 index 00000000..0ebe8e85 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_CPL__non_compliant_unkown_operational_mode/VOLINDEX.xml @@ -0,0 +1,4 @@ + + + 1 + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_CPL__non_compliant_wrong_track_id/ASSETMAP.xml b/src/test/resources/TestIMP/SADM/ST2067-203_CPL__non_compliant_wrong_track_id/ASSETMAP.xml new file mode 100644 index 00000000..46ff0bd8 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_CPL__non_compliant_wrong_track_id/ASSETMAP.xml @@ -0,0 +1,35 @@ + + + urn:uuid:be1605e2-0b9f-4d6e-9a3d-699a50b5ed4b + IMF-Tool 1.9.381 + 1 + 2024-08-25T06:00:44Z + WR + + + urn:uuid:7f8c0ad3-1b06-4f6b-be23-cc7ae3fca304 + + + ST2067-203_audio_track_file__compliant.mxf + + + + + urn:uuid:8c99c449-9100-4bcc-9c3e-ef8ea6796cde + + + CPL_8c99c449-9100-4bcc-9c3e-ef8ea6796cde.xml + + + + + urn:uuid:341f3981-608d-433d-a156-9779cfcf268e + true + + + PKL_341f3981-608d-433d-a156-9779cfcf268e.xml + + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_CPL__non_compliant_wrong_track_id/CPL_8c99c449-9100-4bcc-9c3e-ef8ea6796cde.xml b/src/test/resources/TestIMP/SADM/ST2067-203_CPL__non_compliant_wrong_track_id/CPL_8c99c449-9100-4bcc-9c3e-ef8ea6796cde.xml new file mode 100644 index 00000000..1dae133e --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_CPL__non_compliant_wrong_track_id/CPL_8c99c449-9100-4bcc-9c3e-ef8ea6796cde.xml @@ -0,0 +1,260 @@ + + + urn:uuid:8c99c449-9100-4bcc-9c3e-ef8ea6796cde + S-ADM Test + 2024-08-25T05:58:02Z + Wolfgang Ruppel + IMF-Tool 1.9.381 + Fraunhofer IIS + S-ADM + test + + + urn:uuid:623e115c-fce6-4bd3-9fc3-3469cb9b0dfd + S-ADM + + + + + urn:uuid:540a8f4d-f606-487e-96f8-5257e3cdb8da + + 10 + 2 + 1 + 64 + 940 + 897 + CoSiting + 50/1 + FullFrame + 1920 + 1080 + 1920 + 1080 + 0 + 0 + 1920 + 1080 + 0 + 0 + + 42 + 0 + + urn:smpte:ul:060e2b34.0401010d.04010202.03010114 + 16/9 + urn:smpte:ul:060e2b34.0401010d.0d010301.020c0600 + urn:smpte:ul:060e2b34.04010101.04010101.01020000 + urn:smpte:ul:060e2b34.04010101.04010101.02020000 + urn:smpte:ul:060e2b34.04010106.04010101.03030000 + 1080 + 1920 + 0 + 0 + 0 + + + 260 + 1920 + 1080 + 0 + 0 + 1920 + 1080 + 0 + 0 + 3 + + + 9 + 1 + 1 + + + 9 + 2 + 1 + + + 9 + 2 + 1 + + + 01040001000503030000778888888888 + + + CompLuma + 10 + + + CompColorDifferenceU + 10 + + + CompColorDifferenceV + 10 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + urn:uuid:59d0930e-ab77-48f3-b54b-ce2d56f1fad0 + + + urn:uuid:2b8c2807-b399-4ad4-bbe2-a2aaa0e48f85 + 2 + + + + urn:uuid:18186b8f-0035-49ef-8841-9c5519f16888 + + urn:uuid:171964c1-6301-4cec-b7c3-c305e8f69d65 + + + urn:uuid:4fd6fc8a-5152-4fdc-89e4-612f6786c26f + + + urn:uuid:b5ae56d7-587d-44be-9339-4bb40cfd2bcd + urn:uuid:28248a74-d311-4659-ad28-4570da8aa405 + 1 + 2 + + urn:smpte:ul:060e2b34.0401010d.04040212.00000000 + + + + urn:uuid:d3af433d-a033-4725-9cde-54ade32e7753 + urn:uuid:28248a74-d311-4659-ad28-4570da8aa405 + + urn:smpte:ul:060e2b34.04010101.0e210101.01010101 + urn:smpte:ul:060e2b34.04010101.0e210101.01020101 + + + + urn:uuid:09b82a83-db61-4167-a7d1-85003e257e76 + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:46034060-e93c-4b9a-8a32-82af42e6ccd3 + MGASf + MGA Soundfield + Default + n/a + PRM + FCMP + urn:uuid:28248a74-d311-4659-ad28-4570da8aa405 + APR_1001 + + + urn:uuid:f8e4b6ac-f935-4b18-b34f-25d2ac305aea + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:0357a60a-58ad-4df3-afb7-5ce45497073c + MGASf + MGA Soundfield + Dialog+ + n/a + PRM + FCMP + urn:uuid:28248a74-d311-4659-ad28-4570da8aa405 + APR_1002 + + + urn:uuid:8192ceff-2c1b-4f0d-82d4-c087ffdc63a6 + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:7fbce6f5-9111-4679-9b74-9cb7206aec75 + MGASf + MGA Soundfield + Audio Description + n/a + PRM + FCMP + urn:uuid:28248a74-d311-4659-ad28-4570da8aa405 + APR_1003 + + + urn:uuid:c65e9d00-e4c0-455c-951d-1dc549f634dd + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:1c1169e8-4456-4e82-9067-4c0bf76c55f3 + MGASf + MGA Soundfield + Commentary Off + n/a + PRM + FCMP + urn:uuid:28248a74-d311-4659-ad28-4570da8aa405 + APR_1004 + + + 2 + 50/1 + 10 + urn:smpte:ul:060e2b34.0401010d.0d010301.02250200 + 48000/1 + False + 5 + 24 + urn:smpte:ul:060e2b34.0401010d.04020201.02010000 + 15 + 720000 + + + + 50 1 + + http://www.smpte-ra.org/ns/2067-21/2021 + + urn:uuid:347920ac-14e3-4f53-9747-3e4443080724 + urn:uuid:ec7a2f7b-e621-4701-8808-76eebdf90d3a + http://www.smpte-ra.org/ns/2067-203/2022#Operational-Mode-A + + + + urn:uuid:6fb87010-cc32-4fd4-a2e4-28911f1aab1c + + + urn:uuid:f2376978-70e5-42e5-8dad-c0a99f618b8b + urn:uuid:9d2160fd-3a67-451f-8c57-9edb934e9446 + + + urn:uuid:eb71d207-18c2-4f2b-a685-f6d23fa2209d + 500 + 10 + urn:uuid:540a8f4d-f606-487e-96f8-5257e3cdb8da + urn:uuid:db8a1a5b-ad90-44cf-bf25-455dcce73ab5 + + + + + urn:uuid:3d71e68c-5e63-4cae-8f1f-b30059c765bd + urn:uuid:edd6d25c-6feb-4be7-ad66-56f53fcf278f + + + urn:uuid:ba74a966-06ec-4010-ae09-7c320b9f2847 + 50 1 + 10 + 10 + urn:uuid:18186b8f-0035-49ef-8841-9c5519f16888 + urn:uuid:7f8c0ad3-1b06-4f6b-be23-cc7ae3fca304 + + + + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_CPL__non_compliant_wrong_track_id/PKL_341f3981-608d-433d-a156-9779cfcf268e.xml b/src/test/resources/TestIMP/SADM/ST2067-203_CPL__non_compliant_wrong_track_id/PKL_341f3981-608d-433d-a156-9779cfcf268e.xml new file mode 100644 index 00000000..ba51073c --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_CPL__non_compliant_wrong_track_id/PKL_341f3981-608d-433d-a156-9779cfcf268e.xml @@ -0,0 +1,25 @@ + + + urn:uuid:341f3981-608d-433d-a156-9779cfcf268e + 2024-08-25T06:00:44Z + WR + IMF-Tool 1.9.381 + + + urn:uuid:7f8c0ad3-1b06-4f6b-be23-cc7ae3fca304 + w+ea20jYdDTrQHHbd8iv+eUCcJY= + 366872 + application/mxf + ST2067-203_audio_track_file__compliant.mxf + + + + urn:uuid:8c99c449-9100-4bcc-9c3e-ef8ea6796cde + cSjifmXTSFCijoCYnnYADXw7PRg= + 15958 + text/xml + CPL_8c99c449-9100-4bcc-9c3e-ef8ea6796cde.xml + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_CPL__non_compliant_wrong_track_id/ST2067-203_audio_track_file__compliant.mxf b/src/test/resources/TestIMP/SADM/ST2067-203_CPL__non_compliant_wrong_track_id/ST2067-203_audio_track_file__compliant.mxf new file mode 100755 index 00000000..88e6fc00 Binary files /dev/null and b/src/test/resources/TestIMP/SADM/ST2067-203_CPL__non_compliant_wrong_track_id/ST2067-203_audio_track_file__compliant.mxf differ diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_CPL__non_compliant_wrong_track_id/VOLINDEX.xml b/src/test/resources/TestIMP/SADM/ST2067-203_CPL__non_compliant_wrong_track_id/VOLINDEX.xml new file mode 100644 index 00000000..0ebe8e85 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_CPL__non_compliant_wrong_track_id/VOLINDEX.xml @@ -0,0 +1,4 @@ + + + 1 + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__compliant/ASSETMAP.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__compliant/ASSETMAP.xml new file mode 100644 index 00000000..d01569cb --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__compliant/ASSETMAP.xml @@ -0,0 +1,35 @@ + + + urn:uuid:7353868a-57c6-49d3-8a2d-32827d21b364 + IMF-Tool 1.9.371 + 1 + 2024-01-19T15:48:42Z + WR + + + urn:uuid:7f8c0ad3-1b06-4f6b-be23-cc7ae3fca304 + + + ST2067-203_audio_track_file__compliant.mxf + + + + + urn:uuid:3a8d80e8-80ab-4152-be80-3ba86c032ead + + + CPL_3a8d80e8-80ab-4152-be80-3ba86c032ead.xml + + + + + urn:uuid:15e778c6-e524-4425-bc55-55ca602d84f9 + true + + + PKL_15e778c6-e524-4425-bc55-55ca602d84f9.xml + + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__compliant/CPL_3a8d80e8-80ab-4152-be80-3ba86c032ead.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__compliant/CPL_3a8d80e8-80ab-4152-be80-3ba86c032ead.xml new file mode 100644 index 00000000..4e8f17e4 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__compliant/CPL_3a8d80e8-80ab-4152-be80-3ba86c032ead.xml @@ -0,0 +1,260 @@ + + + urn:uuid:3a8d80e8-80ab-4152-be80-3ba86c032ead + S-ADM Test + 2024-01-19T15:48:40Z + Wolfgang Ruppel + IMF-Tool 1.9.371 + Fraunhofer IIS + S-ADM + test + + + urn:uuid:623e115c-fce6-4bd3-9fc3-3469cb9b0dfd + S-ADM + + + + + urn:uuid:e4ad0a9e-346a-43ee-8b09-caa10a8404ba + + 10 + 2 + 1 + 64 + 940 + 897 + CoSiting + 50/1 + FullFrame + 1920 + 1080 + 1920 + 1080 + 0 + 0 + 1920 + 1080 + 0 + 0 + + 42 + 0 + + urn:smpte:ul:060e2b34.0401010d.04010202.03010114 + 16/9 + urn:smpte:ul:060e2b34.0401010d.0d010301.020c0600 + urn:smpte:ul:060e2b34.04010101.04010101.01020000 + urn:smpte:ul:060e2b34.04010101.04010101.02020000 + urn:smpte:ul:060e2b34.04010106.04010101.03030000 + 1080 + 1920 + 0 + 0 + 0 + + + 260 + 1920 + 1080 + 0 + 0 + 1920 + 1080 + 0 + 0 + 3 + + + 9 + 1 + 1 + + + 9 + 2 + 1 + + + 9 + 2 + 1 + + + 01040001000503030000778888888888 + + + CompLuma + 10 + + + CompColorDifferenceU + 10 + + + CompColorDifferenceV + 10 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + urn:uuid:59d0930e-ab77-48f3-b54b-ce2d56f1fad0 + + + urn:uuid:2b8c2807-b399-4ad4-bbe2-a2aaa0e48f85 + 2 + + + + urn:uuid:27487f12-11ac-48a6-b415-8a4322456bc6 + + urn:uuid:171964c1-6301-4cec-b7c3-c305e8f69d65 + + + urn:uuid:4fd6fc8a-5152-4fdc-89e4-612f6786c26f + + + urn:uuid:b5ae56d7-587d-44be-9339-4bb40cfd2bcd + urn:uuid:28248a74-d311-4659-ad28-4570da8aa405 + 1 + 2 + + urn:smpte:ul:060e2b34.0401010d.04040212.00000000 + + + + urn:uuid:d3af433d-a033-4725-9cde-54ade32e7753 + urn:uuid:28248a74-d311-4659-ad28-4570da8aa405 + + urn:smpte:ul:060e2b34.04010101.0e210101.01010101 + urn:smpte:ul:060e2b34.04010101.0e210101.01020101 + + + + urn:uuid:09b82a83-db61-4167-a7d1-85003e257e76 + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:46034060-e93c-4b9a-8a32-82af42e6ccd3 + MGASf + MGA Soundfield + Default + n/a + PRM + FCMP + urn:uuid:28248a74-d311-4659-ad28-4570da8aa405 + APR_1001 + + + urn:uuid:f8e4b6ac-f935-4b18-b34f-25d2ac305aea + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:0357a60a-58ad-4df3-afb7-5ce45497073c + MGASf + MGA Soundfield + Dialog+ + n/a + PRM + FCMP + urn:uuid:28248a74-d311-4659-ad28-4570da8aa405 + APR_1002 + + + urn:uuid:8192ceff-2c1b-4f0d-82d4-c087ffdc63a6 + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:7fbce6f5-9111-4679-9b74-9cb7206aec75 + MGASf + MGA Soundfield + Audio Description + n/a + PRM + FCMP + urn:uuid:28248a74-d311-4659-ad28-4570da8aa405 + APR_1003 + + + urn:uuid:c65e9d00-e4c0-455c-951d-1dc549f634dd + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:1c1169e8-4456-4e82-9067-4c0bf76c55f3 + MGASf + MGA Soundfield + Commentary Off + n/a + PRM + FCMP + urn:uuid:28248a74-d311-4659-ad28-4570da8aa405 + APR_1004 + + + 2 + 50/1 + 10 + urn:smpte:ul:060e2b34.0401010d.0d010301.02250200 + 48000/1 + False + 5 + 24 + urn:smpte:ul:060e2b34.0401010d.04020201.02010000 + 15 + 720000 + + + + 50 1 + + http://www.smpte-ra.org/ns/2067-21/2021 + + urn:uuid:347920ac-14e3-4f53-9747-3e4443080724 + urn:uuid:8a186ab1-74bf-417a-ba8a-ebee2e8ac191 + http://www.smpte-ra.org/ns/2067-203/2022#Operational-Mode-A + + + + urn:uuid:288304a7-bede-4f36-8eaf-223c3bcfa487 + + + urn:uuid:414096aa-4856-43cb-8edc-f1483b0ff08f + urn:uuid:8c7d4cce-fdcd-4494-bfac-57efa90b953c + + + urn:uuid:a4644d08-0047-4136-bbe8-dc0111dd6a82 + 500 + 10 + urn:uuid:e4ad0a9e-346a-43ee-8b09-caa10a8404ba + urn:uuid:db8a1a5b-ad90-44cf-bf25-455dcce73ab5 + + + + + urn:uuid:3f658222-fa9b-410d-a41e-7f9de2c0672b + urn:uuid:8a186ab1-74bf-417a-ba8a-ebee2e8ac191 + + + urn:uuid:f0b72e45-7c98-4f8f-8989-16950877f781 + 50 1 + 10 + 10 + urn:uuid:27487f12-11ac-48a6-b415-8a4322456bc6 + urn:uuid:7f8c0ad3-1b06-4f6b-be23-cc7ae3fca304 + + + + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__compliant/PKL_15e778c6-e524-4425-bc55-55ca602d84f9.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__compliant/PKL_15e778c6-e524-4425-bc55-55ca602d84f9.xml new file mode 100644 index 00000000..8cf39fbb --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__compliant/PKL_15e778c6-e524-4425-bc55-55ca602d84f9.xml @@ -0,0 +1,25 @@ + + + urn:uuid:15e778c6-e524-4425-bc55-55ca602d84f9 + 2024-01-19T15:48:42Z + WR + IMF-Tool 1.9.371 + + + urn:uuid:7f8c0ad3-1b06-4f6b-be23-cc7ae3fca304 + w+ea20jYdDTrQHHbd8iv+eUCcJY= + 366872 + application/mxf + ST2067-203_audio_track_file__compliant.mxf + + + + urn:uuid:3a8d80e8-80ab-4152-be80-3ba86c032ead + KSNcbiv9rkn+Rrwfh9o/fFGX+h0= + 15958 + text/xml + CPL_3a8d80e8-80ab-4152-be80-3ba86c032ead.xml + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__compliant/ST2067-203_audio_track_file__compliant.mxf b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__compliant/ST2067-203_audio_track_file__compliant.mxf new file mode 100755 index 00000000..88e6fc00 Binary files /dev/null and b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__compliant/ST2067-203_audio_track_file__compliant.mxf differ diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__compliant/VOLINDEX.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__compliant/VOLINDEX.xml new file mode 100644 index 00000000..0ebe8e85 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__compliant/VOLINDEX.xml @@ -0,0 +1,4 @@ + + + 1 + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_16bit/ASSETMAP.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_16bit/ASSETMAP.xml new file mode 100644 index 00000000..49feef1f --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_16bit/ASSETMAP.xml @@ -0,0 +1,35 @@ + + + urn:uuid:e748005b-77c0-4510-9767-f589caf5e8d1 + IMF-Tool 1.9.371 + 1 + 2024-01-19T15:50:18Z + WR + + + urn:uuid:9f1e8f5f-b5ce-427c-9c28-2bd8de173c4e + + + ST2067-203_audio_track_file__non_compliant_16bit.mxf + + + + + urn:uuid:bfd4736d-7ab7-4d12-a807-9f2cf4beb587 + + + CPL_bfd4736d-7ab7-4d12-a807-9f2cf4beb587.xml + + + + + urn:uuid:0b672ec3-a46b-473c-b4c6-b78c3550a404 + true + + + PKL_0b672ec3-a46b-473c-b4c6-b78c3550a404.xml + + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_16bit/CPL_bfd4736d-7ab7-4d12-a807-9f2cf4beb587.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_16bit/CPL_bfd4736d-7ab7-4d12-a807-9f2cf4beb587.xml new file mode 100644 index 00000000..ca5302af --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_16bit/CPL_bfd4736d-7ab7-4d12-a807-9f2cf4beb587.xml @@ -0,0 +1,260 @@ + + + urn:uuid:bfd4736d-7ab7-4d12-a807-9f2cf4beb587 + S-ADM Test + 2024-01-19T15:50:16Z + Wolfgang Ruppel + IMF-Tool 1.9.371 + Fraunhofer IIS + S-ADM + test + + + urn:uuid:623e115c-fce6-4bd3-9fc3-3469cb9b0dfd + S-ADM + + + + + urn:uuid:b45f1944-d2e9-4de9-abca-7d2f932eae05 + + 10 + 2 + 1 + 64 + 940 + 897 + CoSiting + 50/1 + FullFrame + 1920 + 1080 + 1920 + 1080 + 0 + 0 + 1920 + 1080 + 0 + 0 + + 42 + 0 + + urn:smpte:ul:060e2b34.0401010d.04010202.03010114 + 16/9 + urn:smpte:ul:060e2b34.0401010d.0d010301.020c0600 + urn:smpte:ul:060e2b34.04010101.04010101.01020000 + urn:smpte:ul:060e2b34.04010101.04010101.02020000 + urn:smpte:ul:060e2b34.04010106.04010101.03030000 + 1080 + 1920 + 0 + 0 + 0 + + + 260 + 1920 + 1080 + 0 + 0 + 1920 + 1080 + 0 + 0 + 3 + + + 9 + 1 + 1 + + + 9 + 2 + 1 + + + 9 + 2 + 1 + + + 01040001000503030000778888888888 + + + CompLuma + 10 + + + CompColorDifferenceU + 10 + + + CompColorDifferenceV + 10 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + urn:uuid:59d0930e-ab77-48f3-b54b-ce2d56f1fad0 + + + urn:uuid:2b8c2807-b399-4ad4-bbe2-a2aaa0e48f85 + 2 + + + + urn:uuid:fd94ec83-8204-4b10-850a-b2f29a3cef79 + + urn:uuid:ba610a20-dd17-478c-b017-5d4d63e0da8a + + + urn:uuid:c2dbe2c8-5851-47a4-9275-785d1525f967 + + + urn:uuid:9028d75a-4d6e-4e53-8699-8d97f9bd677a + urn:uuid:836cb7b2-5eed-4767-9ce1-546811d9e777 + 1 + 2 + + urn:smpte:ul:060e2b34.0401010d.04040212.00000000 + + + + urn:uuid:3e644b80-59d6-46c1-8c97-67926f309361 + urn:uuid:836cb7b2-5eed-4767-9ce1-546811d9e777 + + urn:smpte:ul:060e2b34.04010101.0e210101.01010101 + urn:smpte:ul:060e2b34.04010101.0e210101.01020101 + + + + urn:uuid:42325be1-8179-4b68-b9ae-44959b0fcc35 + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:c94046e6-1e99-42fd-8a08-919cb9149e21 + MGASf + MGA Soundfield + Default + n/a + PRM + FCMP + urn:uuid:836cb7b2-5eed-4767-9ce1-546811d9e777 + APR_1001 + + + urn:uuid:4e736467-0a88-4aff-a360-a029e22c9d4f + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:63ab5f8c-5866-47e2-9c0f-7ecf36616e8e + MGASf + MGA Soundfield + Dialog+ + n/a + PRM + FCMP + urn:uuid:836cb7b2-5eed-4767-9ce1-546811d9e777 + APR_1002 + + + urn:uuid:5a47033c-7976-4181-9e6e-3917ea96d447 + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:840edf0e-d107-454d-a9f7-18086c106597 + MGASf + MGA Soundfield + Audio Description + n/a + PRM + FCMP + urn:uuid:836cb7b2-5eed-4767-9ce1-546811d9e777 + APR_1003 + + + urn:uuid:9a0f15c7-94f2-4b26-bfd8-0b6998a07ef7 + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:a20be313-8e6a-48b9-8601-9d9382b4cf55 + MGASf + MGA Soundfield + Commentary Off + n/a + PRM + FCMP + urn:uuid:836cb7b2-5eed-4767-9ce1-546811d9e777 + APR_1004 + + + 2 + 50/1 + 10 + urn:smpte:ul:060e2b34.0401010d.0d010301.02250200 + 48000/1 + False + 5 + 16 + urn:smpte:ul:060e2b34.0401010d.04020201.02010000 + 10 + 480000 + + + + 50 1 + + http://www.smpte-ra.org/ns/2067-21/2021 + + urn:uuid:347920ac-14e3-4f53-9747-3e4443080724 + urn:uuid:7626add7-638d-4c4e-b2ba-17f22880cf34 + http://www.smpte-ra.org/ns/2067-203/2022#Operational-Mode-A + + + + urn:uuid:5f5a8032-7112-47b6-a27e-bd072c2c736b + + + urn:uuid:131bd01a-4ca3-47e8-b092-5e8949ad7910 + urn:uuid:43ddb8f2-b132-4dfa-8b7a-b8c0275f08b9 + + + urn:uuid:d3a67637-e558-43c2-a9bb-e14a0d8f8c2e + 500 + 10 + urn:uuid:b45f1944-d2e9-4de9-abca-7d2f932eae05 + urn:uuid:db8a1a5b-ad90-44cf-bf25-455dcce73ab5 + + + + + urn:uuid:ca79400e-3d6d-4c77-a46f-0d2f91f211c2 + urn:uuid:7626add7-638d-4c4e-b2ba-17f22880cf34 + + + urn:uuid:962362a2-1350-49e3-8da0-a3d2a2f7d1e7 + 50 1 + 10 + 10 + urn:uuid:fd94ec83-8204-4b10-850a-b2f29a3cef79 + urn:uuid:9f1e8f5f-b5ce-427c-9c28-2bd8de173c4e + + + + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_16bit/PKL_0b672ec3-a46b-473c-b4c6-b78c3550a404.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_16bit/PKL_0b672ec3-a46b-473c-b4c6-b78c3550a404.xml new file mode 100644 index 00000000..e3002cfc --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_16bit/PKL_0b672ec3-a46b-473c-b4c6-b78c3550a404.xml @@ -0,0 +1,25 @@ + + + urn:uuid:0b672ec3-a46b-473c-b4c6-b78c3550a404 + 2024-01-19T15:50:18Z + WR + IMF-Tool 1.9.371 + + + urn:uuid:9f1e8f5f-b5ce-427c-9c28-2bd8de173c4e + DqUyXVUOkXeWDSvGnExcRX8de2g= + 318872 + application/mxf + ST2067-203_audio_track_file__non_compliant_16bit.mxf + + + + urn:uuid:bfd4736d-7ab7-4d12-a807-9f2cf4beb587 + lNetj5IjS5tM5Sx1K+qiHeaUdRc= + 15958 + text/xml + CPL_bfd4736d-7ab7-4d12-a807-9f2cf4beb587.xml + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_16bit/ST2067-203_audio_track_file__non_compliant_16bit.mxf b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_16bit/ST2067-203_audio_track_file__non_compliant_16bit.mxf new file mode 100755 index 00000000..b74aa701 Binary files /dev/null and b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_16bit/ST2067-203_audio_track_file__non_compliant_16bit.mxf differ diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_16bit/VOLINDEX.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_16bit/VOLINDEX.xml new file mode 100644 index 00000000..0ebe8e85 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_16bit/VOLINDEX.xml @@ -0,0 +1,4 @@ + + + 1 + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_44100Hz/ASSETMAP.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_44100Hz/ASSETMAP.xml new file mode 100644 index 00000000..c32768a4 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_44100Hz/ASSETMAP.xml @@ -0,0 +1,35 @@ + + + urn:uuid:1e577c10-bf2a-46f8-9814-2db5397384c3 + IMF-Tool 1.9.371 + 1 + 2024-01-19T15:51:03Z + WR + + + urn:uuid:f14b6c28-86e9-4ef3-a35c-c7f02a8ca356 + + + ST2067-203_audio_track_file__non_compliant_44100Hz.mxf + + + + + urn:uuid:95c21bb6-d26f-4afd-94ef-62420b966eec + + + CPL_95c21bb6-d26f-4afd-94ef-62420b966eec.xml + + + + + urn:uuid:bbcdad96-a036-4c57-8d27-2b6c16f4825e + true + + + PKL_bbcdad96-a036-4c57-8d27-2b6c16f4825e.xml + + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_44100Hz/CPL_95c21bb6-d26f-4afd-94ef-62420b966eec.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_44100Hz/CPL_95c21bb6-d26f-4afd-94ef-62420b966eec.xml new file mode 100644 index 00000000..d287a65a --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_44100Hz/CPL_95c21bb6-d26f-4afd-94ef-62420b966eec.xml @@ -0,0 +1,260 @@ + + + urn:uuid:95c21bb6-d26f-4afd-94ef-62420b966eec + S-ADM Test + 2024-01-19T15:51:01Z + Wolfgang Ruppel + IMF-Tool 1.9.371 + Fraunhofer IIS + S-ADM + test + + + urn:uuid:623e115c-fce6-4bd3-9fc3-3469cb9b0dfd + S-ADM + + + + + urn:uuid:ee3fa920-0038-4804-80b7-92b777ae76a6 + + 10 + 2 + 1 + 64 + 940 + 897 + CoSiting + 50/1 + FullFrame + 1920 + 1080 + 1920 + 1080 + 0 + 0 + 1920 + 1080 + 0 + 0 + + 42 + 0 + + urn:smpte:ul:060e2b34.0401010d.04010202.03010114 + 16/9 + urn:smpte:ul:060e2b34.0401010d.0d010301.020c0600 + urn:smpte:ul:060e2b34.04010101.04010101.01020000 + urn:smpte:ul:060e2b34.04010101.04010101.02020000 + urn:smpte:ul:060e2b34.04010106.04010101.03030000 + 1080 + 1920 + 0 + 0 + 0 + + + 260 + 1920 + 1080 + 0 + 0 + 1920 + 1080 + 0 + 0 + 3 + + + 9 + 1 + 1 + + + 9 + 2 + 1 + + + 9 + 2 + 1 + + + 01040001000503030000778888888888 + + + CompLuma + 10 + + + CompColorDifferenceU + 10 + + + CompColorDifferenceV + 10 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + urn:uuid:59d0930e-ab77-48f3-b54b-ce2d56f1fad0 + + + urn:uuid:2b8c2807-b399-4ad4-bbe2-a2aaa0e48f85 + 2 + + + + urn:uuid:f7c44bce-b774-4d38-87c4-fe67adaa59e8 + + urn:uuid:e0740ef1-251f-442b-8032-793d1557a239 + + + urn:uuid:458fe011-05c0-4c70-8911-b01ee2a2ae53 + + + urn:uuid:f492a84b-9f15-41f8-9fc6-27f4b13fb1b9 + urn:uuid:83560531-f7f8-4b60-8732-4097feb34917 + 1 + 2 + + urn:smpte:ul:060e2b34.0401010d.04040212.00000000 + + + + urn:uuid:78e70514-9e0c-4ed7-be32-0ccf82aadcf5 + urn:uuid:83560531-f7f8-4b60-8732-4097feb34917 + + urn:smpte:ul:060e2b34.04010101.0e210101.01010101 + urn:smpte:ul:060e2b34.04010101.0e210101.01020101 + + + + urn:uuid:88667ae8-8b0b-449b-bf48-814b7c67a1b5 + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:edd93b52-4ec8-4d9f-a7ba-3031f1966d4a + MGASf + MGA Soundfield + Default + n/a + PRM + FCMP + urn:uuid:83560531-f7f8-4b60-8732-4097feb34917 + APR_1001 + + + urn:uuid:1f21c685-2eb7-4411-ba3e-e5470a3ab1e4 + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:7ac3cdac-083e-4f51-bfea-b55b4428104e + MGASf + MGA Soundfield + Dialog+ + n/a + PRM + FCMP + urn:uuid:83560531-f7f8-4b60-8732-4097feb34917 + APR_1002 + + + urn:uuid:756fece8-90f4-4f46-8989-dcdfd32afcb1 + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:a3a8fe7d-6e7f-40c2-a779-b172e0b06490 + MGASf + MGA Soundfield + Audio Description + n/a + PRM + FCMP + urn:uuid:83560531-f7f8-4b60-8732-4097feb34917 + APR_1003 + + + urn:uuid:04e52b4c-fbe8-4786-85de-4470c27cb489 + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:215d4d41-0aef-4380-ba5a-4413efb2dabe + MGASf + MGA Soundfield + Commentary Off + n/a + PRM + FCMP + urn:uuid:83560531-f7f8-4b60-8732-4097feb34917 + APR_1004 + + + 2 + 50/1 + 10 + urn:smpte:ul:060e2b34.0401010d.0d010301.02250200 + 44100/1 + False + 5 + 24 + urn:smpte:ul:060e2b34.0401010d.04020201.02010000 + 15 + 661500 + + + + 50 1 + + http://www.smpte-ra.org/ns/2067-21/2021 + + urn:uuid:347920ac-14e3-4f53-9747-3e4443080724 + urn:uuid:f9227d92-79c6-4d76-8947-bcfef48713e6 + http://www.smpte-ra.org/ns/2067-203/2022#Operational-Mode-A + + + + urn:uuid:d284241d-2f6a-4244-9439-5de020dac99c + + + urn:uuid:68191dcf-d6f1-4c59-937c-5243b5462403 + urn:uuid:80e78bcf-5cfe-4733-b222-c5af3101fa01 + + + urn:uuid:82a444db-37cc-46ad-98e1-7fb57c9dda77 + 500 + 10 + urn:uuid:ee3fa920-0038-4804-80b7-92b777ae76a6 + urn:uuid:db8a1a5b-ad90-44cf-bf25-455dcce73ab5 + + + + + urn:uuid:79f530c4-9b53-4f2f-b25c-c7c349d93fae + urn:uuid:f9227d92-79c6-4d76-8947-bcfef48713e6 + + + urn:uuid:fbe2f1aa-6085-4d80-a3f7-4415af4064a5 + 50 1 + 10 + 10 + urn:uuid:f7c44bce-b774-4d38-87c4-fe67adaa59e8 + urn:uuid:f14b6c28-86e9-4ef3-a35c-c7f02a8ca356 + + + + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_44100Hz/PKL_bbcdad96-a036-4c57-8d27-2b6c16f4825e.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_44100Hz/PKL_bbcdad96-a036-4c57-8d27-2b6c16f4825e.xml new file mode 100644 index 00000000..431f19bc --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_44100Hz/PKL_bbcdad96-a036-4c57-8d27-2b6c16f4825e.xml @@ -0,0 +1,25 @@ + + + urn:uuid:bbcdad96-a036-4c57-8d27-2b6c16f4825e + 2024-01-19T15:51:03Z + WR + IMF-Tool 1.9.371 + + + urn:uuid:f14b6c28-86e9-4ef3-a35c-c7f02a8ca356 + PmZfm28XUTsqUWAFqnBobQ/yyVM= + 355172 + application/mxf + ST2067-203_audio_track_file__non_compliant_44100Hz.mxf + + + + urn:uuid:95c21bb6-d26f-4afd-94ef-62420b966eec + /APbS598EBvSNTJej/IrYhvvhOM= + 15958 + text/xml + CPL_95c21bb6-d26f-4afd-94ef-62420b966eec.xml + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_44100Hz/ST2067-203_audio_track_file__non_compliant_44100Hz.mxf b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_44100Hz/ST2067-203_audio_track_file__non_compliant_44100Hz.mxf new file mode 100755 index 00000000..03285bc5 Binary files /dev/null and b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_44100Hz/ST2067-203_audio_track_file__non_compliant_44100Hz.mxf differ diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_44100Hz/VOLINDEX.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_44100Hz/VOLINDEX.xml new file mode 100644 index 00000000..0ebe8e85 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_44100Hz/VOLINDEX.xml @@ -0,0 +1,4 @@ + + + 1 + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_ADMAudioProgrammeID_missing/ASSETMAP.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_ADMAudioProgrammeID_missing/ASSETMAP.xml new file mode 100644 index 00000000..b0127b57 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_ADMAudioProgrammeID_missing/ASSETMAP.xml @@ -0,0 +1,35 @@ + + + urn:uuid:6323594b-da4e-4f80-a316-2530bf898273 + IMF-Tool 1.9.371 + 1 + 2024-01-19T15:51:45Z + WR + + + urn:uuid:b430c26a-0c44-42d2-a547-44120ce04fab + + + ST2067-203_audio_track_file__non_compliant_ADMAudioProgrammeID_missing.mxf + + + + + urn:uuid:55dbccfd-c530-4e4c-a26c-329354f4f50d + + + CPL_55dbccfd-c530-4e4c-a26c-329354f4f50d.xml + + + + + urn:uuid:b8f448d3-dc2d-4a6e-922a-194ce956b120 + true + + + PKL_b8f448d3-dc2d-4a6e-922a-194ce956b120.xml + + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_ADMAudioProgrammeID_missing/CPL_55dbccfd-c530-4e4c-a26c-329354f4f50d.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_ADMAudioProgrammeID_missing/CPL_55dbccfd-c530-4e4c-a26c-329354f4f50d.xml new file mode 100644 index 00000000..f4a10b89 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_ADMAudioProgrammeID_missing/CPL_55dbccfd-c530-4e4c-a26c-329354f4f50d.xml @@ -0,0 +1,256 @@ + + + urn:uuid:55dbccfd-c530-4e4c-a26c-329354f4f50d + S-ADM Test + 2024-01-19T15:51:43Z + Wolfgang Ruppel + IMF-Tool 1.9.371 + Fraunhofer IIS + S-ADM + test + + + urn:uuid:623e115c-fce6-4bd3-9fc3-3469cb9b0dfd + S-ADM + + + + + urn:uuid:a33ef4ff-e3bf-4f06-bfa5-86273422a5da + + 10 + 2 + 1 + 64 + 940 + 897 + CoSiting + 50/1 + FullFrame + 1920 + 1080 + 1920 + 1080 + 0 + 0 + 1920 + 1080 + 0 + 0 + + 42 + 0 + + urn:smpte:ul:060e2b34.0401010d.04010202.03010114 + 16/9 + urn:smpte:ul:060e2b34.0401010d.0d010301.020c0600 + urn:smpte:ul:060e2b34.04010101.04010101.01020000 + urn:smpte:ul:060e2b34.04010101.04010101.02020000 + urn:smpte:ul:060e2b34.04010106.04010101.03030000 + 1080 + 1920 + 0 + 0 + 0 + + + 260 + 1920 + 1080 + 0 + 0 + 1920 + 1080 + 0 + 0 + 3 + + + 9 + 1 + 1 + + + 9 + 2 + 1 + + + 9 + 2 + 1 + + + 01040001000503030000778888888888 + + + CompLuma + 10 + + + CompColorDifferenceU + 10 + + + CompColorDifferenceV + 10 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + urn:uuid:59d0930e-ab77-48f3-b54b-ce2d56f1fad0 + + + urn:uuid:2b8c2807-b399-4ad4-bbe2-a2aaa0e48f85 + 2 + + + + urn:uuid:a448615f-779b-4393-aa25-c5cd02b8c734 + + urn:uuid:55badafc-c4d5-43f7-9f1d-6f83defa4bd7 + + + urn:uuid:4d3c20cd-66af-451d-bc9f-25b54d9e936c + + + urn:uuid:66d6a258-95aa-4a92-a29a-eb393a6782ba + urn:uuid:d92b93af-0fc6-4013-94e4-7087bd94d535 + 1 + 2 + + urn:smpte:ul:060e2b34.0401010d.04040212.00000000 + + + + urn:uuid:2c78da4e-d87d-45c4-a352-4b80302662c4 + urn:uuid:d92b93af-0fc6-4013-94e4-7087bd94d535 + + urn:smpte:ul:060e2b34.04010101.0e210101.01010101 + urn:smpte:ul:060e2b34.04010101.0e210101.01020101 + + + + urn:uuid:0cdc9f2e-a9b1-4c82-8e20-3baacc03b9fb + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:60ec5175-c1a8-4c92-8d15-44d18b2e05af + MGASf + MGA Soundfield + Default + n/a + PRM + FCMP + urn:uuid:d92b93af-0fc6-4013-94e4-7087bd94d535 + + + urn:uuid:b4fa06ba-c710-44df-ae9c-ed18ec664b11 + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:cf04da6b-3163-42c4-bdb2-a604ec1b093d + MGASf + MGA Soundfield + Dialog+ + n/a + PRM + FCMP + urn:uuid:d92b93af-0fc6-4013-94e4-7087bd94d535 + + + urn:uuid:100b62f3-2fa3-412b-91a0-d96cabf91cf7 + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:53ecc1d3-9b3d-463a-b1d4-49013e452710 + MGASf + MGA Soundfield + Audio Description + n/a + PRM + FCMP + urn:uuid:d92b93af-0fc6-4013-94e4-7087bd94d535 + + + urn:uuid:4d894b1a-1db2-49f6-8445-b38667a674dd + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:5a5ddd2e-7dc1-4ec6-b6d3-23ea1fd5e398 + MGASf + MGA Soundfield + Commentary Off + n/a + PRM + FCMP + urn:uuid:d92b93af-0fc6-4013-94e4-7087bd94d535 + + + 2 + 50/1 + 10 + urn:smpte:ul:060e2b34.0401010d.0d010301.02250200 + 48000/1 + False + 5 + 24 + urn:smpte:ul:060e2b34.0401010d.04020201.02010000 + 15 + 720000 + + + + 50 1 + + http://www.smpte-ra.org/ns/2067-21/2021 + + urn:uuid:347920ac-14e3-4f53-9747-3e4443080724 + urn:uuid:41da67c7-ef79-49a4-a5c6-d9f959f39640 + http://www.smpte-ra.org/ns/2067-203/2022#Operational-Mode-A + + + + urn:uuid:433e27ad-a9d1-4a0a-bb65-566d5828994c + + + urn:uuid:08385bfa-a060-44ea-a973-44a3a42a037c + urn:uuid:03fc62a2-bc72-4ad0-a396-9183ef2e6fbf + + + urn:uuid:5c41d4dd-1971-4a24-bb0a-8a1059eec919 + 500 + 10 + urn:uuid:a33ef4ff-e3bf-4f06-bfa5-86273422a5da + urn:uuid:db8a1a5b-ad90-44cf-bf25-455dcce73ab5 + + + + + urn:uuid:b99958d2-e23b-42ca-9c3a-cf6d08b2c2f4 + urn:uuid:41da67c7-ef79-49a4-a5c6-d9f959f39640 + + + urn:uuid:a698425c-17d2-4cd3-84ed-fbeff21969b9 + 50 1 + 10 + 10 + urn:uuid:a448615f-779b-4393-aa25-c5cd02b8c734 + urn:uuid:b430c26a-0c44-42d2-a547-44120ce04fab + + + + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_ADMAudioProgrammeID_missing/PKL_b8f448d3-dc2d-4a6e-922a-194ce956b120.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_ADMAudioProgrammeID_missing/PKL_b8f448d3-dc2d-4a6e-922a-194ce956b120.xml new file mode 100644 index 00000000..bc5e43a7 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_ADMAudioProgrammeID_missing/PKL_b8f448d3-dc2d-4a6e-922a-194ce956b120.xml @@ -0,0 +1,25 @@ + + + urn:uuid:b8f448d3-dc2d-4a6e-922a-194ce956b120 + 2024-01-19T15:51:45Z + WR + IMF-Tool 1.9.371 + + + urn:uuid:b430c26a-0c44-42d2-a547-44120ce04fab + CCKSA+lXhkK+2ekeJcFCvXx6F5A= + 366872 + application/mxf + ST2067-203_audio_track_file__non_compliant_ADMAudioProgrammeID_missing.mxf + + + + urn:uuid:55dbccfd-c530-4e4c-a26c-329354f4f50d + oM4IEotTDR8NYCjt3CeTWYWQIAc= + 15678 + text/xml + CPL_55dbccfd-c530-4e4c-a26c-329354f4f50d.xml + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_ADMAudioProgrammeID_missing/ST2067-203_audio_track_file__non_compliant_ADMAudioProgrammeID_missing.mxf b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_ADMAudioProgrammeID_missing/ST2067-203_audio_track_file__non_compliant_ADMAudioProgrammeID_missing.mxf new file mode 100755 index 00000000..97e2ae16 Binary files /dev/null and b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_ADMAudioProgrammeID_missing/ST2067-203_audio_track_file__non_compliant_ADMAudioProgrammeID_missing.mxf differ diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_ADMAudioProgrammeID_missing/VOLINDEX.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_ADMAudioProgrammeID_missing/VOLINDEX.xml new file mode 100644 index 00000000..0ebe8e85 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_ADMAudioProgrammeID_missing/VOLINDEX.xml @@ -0,0 +1,4 @@ + + + 1 + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_ContainerContraintsSubDescriptor_missing/ASSETMAP.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_ContainerContraintsSubDescriptor_missing/ASSETMAP.xml new file mode 100644 index 00000000..a85a3834 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_ContainerContraintsSubDescriptor_missing/ASSETMAP.xml @@ -0,0 +1,35 @@ + + + urn:uuid:826f47fd-788f-4314-9532-ef6031949f3b + IMF-Tool 1.9.371 + 1 + 2024-01-19T15:52:25Z + WR + + + urn:uuid:f0f75fa0-a4b2-4914-91cc-7907d184e641 + + + ST2067-203_audio_track_file__non_compliant_ContainerContraintsSubDescriptor_missing.mxf + + + + + urn:uuid:8174af5e-66fb-43b3-acf0-cf2666cf0067 + + + CPL_8174af5e-66fb-43b3-acf0-cf2666cf0067.xml + + + + + urn:uuid:4fe6616a-4247-4df1-aabc-e52b2f0eca00 + true + + + PKL_4fe6616a-4247-4df1-aabc-e52b2f0eca00.xml + + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_ContainerContraintsSubDescriptor_missing/CPL_8174af5e-66fb-43b3-acf0-cf2666cf0067.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_ContainerContraintsSubDescriptor_missing/CPL_8174af5e-66fb-43b3-acf0-cf2666cf0067.xml new file mode 100644 index 00000000..97eae360 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_ContainerContraintsSubDescriptor_missing/CPL_8174af5e-66fb-43b3-acf0-cf2666cf0067.xml @@ -0,0 +1,257 @@ + + + urn:uuid:8174af5e-66fb-43b3-acf0-cf2666cf0067 + S-ADM Test + 2024-01-19T15:52:24Z + Wolfgang Ruppel + IMF-Tool 1.9.371 + Fraunhofer IIS + S-ADM + test + + + urn:uuid:623e115c-fce6-4bd3-9fc3-3469cb9b0dfd + S-ADM + + + + + urn:uuid:cb66918d-26f5-4f5f-a309-84008085a1be + + 10 + 2 + 1 + 64 + 940 + 897 + CoSiting + 50/1 + FullFrame + 1920 + 1080 + 1920 + 1080 + 0 + 0 + 1920 + 1080 + 0 + 0 + + 42 + 0 + + urn:smpte:ul:060e2b34.0401010d.04010202.03010114 + 16/9 + urn:smpte:ul:060e2b34.0401010d.0d010301.020c0600 + urn:smpte:ul:060e2b34.04010101.04010101.01020000 + urn:smpte:ul:060e2b34.04010101.04010101.02020000 + urn:smpte:ul:060e2b34.04010106.04010101.03030000 + 1080 + 1920 + 0 + 0 + 0 + + + 260 + 1920 + 1080 + 0 + 0 + 1920 + 1080 + 0 + 0 + 3 + + + 9 + 1 + 1 + + + 9 + 2 + 1 + + + 9 + 2 + 1 + + + 01040001000503030000778888888888 + + + CompLuma + 10 + + + CompColorDifferenceU + 10 + + + CompColorDifferenceV + 10 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + urn:uuid:59d0930e-ab77-48f3-b54b-ce2d56f1fad0 + + + urn:uuid:2b8c2807-b399-4ad4-bbe2-a2aaa0e48f85 + 2 + + + + urn:uuid:e5c11f2d-e4c2-4a3f-919d-f1b16baa28d2 + + urn:uuid:030271d1-d8c4-4dd7-97cf-b292866352de + + + urn:uuid:d6997f2d-3555-4af2-85ca-addfe95c010c + urn:uuid:da4e1648-4502-4e7c-bf91-fefc637a03ed + 1 + 2 + + urn:smpte:ul:060e2b34.0401010d.04040212.00000000 + + + + urn:uuid:2a7f233e-09c2-4c0c-930d-644035269280 + urn:uuid:da4e1648-4502-4e7c-bf91-fefc637a03ed + + urn:smpte:ul:060e2b34.04010101.0e210101.01010101 + urn:smpte:ul:060e2b34.04010101.0e210101.01020101 + + + + urn:uuid:527ad72e-131b-4d8c-be05-4a24cba55967 + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:d0b22183-7ca3-4821-8c74-b3c2628ba297 + MGASf + MGA Soundfield + Default + n/a + PRM + FCMP + urn:uuid:da4e1648-4502-4e7c-bf91-fefc637a03ed + APR_1001 + + + urn:uuid:f39c6a94-89c0-48db-8d63-4cc3ffd950c9 + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:3750cbf1-e934-4d62-96f3-e51f691525a9 + MGASf + MGA Soundfield + Dialog+ + n/a + PRM + FCMP + urn:uuid:da4e1648-4502-4e7c-bf91-fefc637a03ed + APR_1002 + + + urn:uuid:f134e749-e052-4ba2-841a-97966602b7ef + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:34bb61ad-3f98-4b28-a03e-02ce4c9b07ad + MGASf + MGA Soundfield + Audio Description + n/a + PRM + FCMP + urn:uuid:da4e1648-4502-4e7c-bf91-fefc637a03ed + APR_1003 + + + urn:uuid:72d49c68-cdb3-44ca-a859-9956d6a20863 + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:2dc3700e-75f0-409c-b1c6-b6c821dc056b + MGASf + MGA Soundfield + Commentary Off + n/a + PRM + FCMP + urn:uuid:da4e1648-4502-4e7c-bf91-fefc637a03ed + APR_1004 + + + 2 + 50/1 + 10 + urn:smpte:ul:060e2b34.0401010d.0d010301.02250200 + 48000/1 + False + 5 + 24 + urn:smpte:ul:060e2b34.0401010d.04020201.02010000 + 15 + 720000 + + + + 50 1 + + http://www.smpte-ra.org/ns/2067-21/2021 + + urn:uuid:347920ac-14e3-4f53-9747-3e4443080724 + urn:uuid:b14c7bd1-2b92-412a-804a-d849b7f744d1 + http://www.smpte-ra.org/ns/2067-203/2022#Operational-Mode-A + + + + urn:uuid:044d70e6-41ad-4d74-8ea6-850c7c88b09a + + + urn:uuid:4367c5cf-6c14-49a5-8f5f-d68509878292 + urn:uuid:72abca37-241d-4fa0-b83d-2131d09ad067 + + + urn:uuid:100a3561-64b8-4f97-af9f-7ea74f021cf6 + 500 + 10 + urn:uuid:cb66918d-26f5-4f5f-a309-84008085a1be + urn:uuid:db8a1a5b-ad90-44cf-bf25-455dcce73ab5 + + + + + urn:uuid:b6f8007d-1ac7-46f5-afcf-60d9e882a8d2 + urn:uuid:b14c7bd1-2b92-412a-804a-d849b7f744d1 + + + urn:uuid:e9d303c3-2374-46a6-a244-9534e3c522bf + 50 1 + 10 + 10 + urn:uuid:e5c11f2d-e4c2-4a3f-919d-f1b16baa28d2 + urn:uuid:f0f75fa0-a4b2-4914-91cc-7907d184e641 + + + + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_ContainerContraintsSubDescriptor_missing/PKL_4fe6616a-4247-4df1-aabc-e52b2f0eca00.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_ContainerContraintsSubDescriptor_missing/PKL_4fe6616a-4247-4df1-aabc-e52b2f0eca00.xml new file mode 100644 index 00000000..de6771c0 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_ContainerContraintsSubDescriptor_missing/PKL_4fe6616a-4247-4df1-aabc-e52b2f0eca00.xml @@ -0,0 +1,25 @@ + + + urn:uuid:4fe6616a-4247-4df1-aabc-e52b2f0eca00 + 2024-01-19T15:52:25Z + WR + IMF-Tool 1.9.371 + + + urn:uuid:f0f75fa0-a4b2-4914-91cc-7907d184e641 + dPpLhMDd0+PAzxpomh1g1lX8n1o= + 366872 + application/mxf + ST2067-203_audio_track_file__non_compliant_ContainerContraintsSubDescriptor_missing.mxf + + + + urn:uuid:8174af5e-66fb-43b3-acf0-cf2666cf0067 + zExZBmkXY9ubjZaBSoxNAAHtA5M= + 15770 + text/xml + CPL_8174af5e-66fb-43b3-acf0-cf2666cf0067.xml + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_ContainerContraintsSubDescriptor_missing/ST2067-203_audio_track_file__non_compliant_ContainerContraintsSubDescriptor_missing.mxf b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_ContainerContraintsSubDescriptor_missing/ST2067-203_audio_track_file__non_compliant_ContainerContraintsSubDescriptor_missing.mxf new file mode 100755 index 00000000..cfa308e9 Binary files /dev/null and b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_ContainerContraintsSubDescriptor_missing/ST2067-203_audio_track_file__non_compliant_ContainerContraintsSubDescriptor_missing.mxf differ diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_ContainerContraintsSubDescriptor_missing/VOLINDEX.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_ContainerContraintsSubDescriptor_missing/VOLINDEX.xml new file mode 100644 index 00000000..0ebe8e85 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_ContainerContraintsSubDescriptor_missing/VOLINDEX.xml @@ -0,0 +1,4 @@ + + + 1 + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCAContent_missing/ASSETMAP.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCAContent_missing/ASSETMAP.xml new file mode 100644 index 00000000..7a06d274 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCAContent_missing/ASSETMAP.xml @@ -0,0 +1,35 @@ + + + urn:uuid:88a79be6-6137-4ffc-a77c-31b927be3f0c + IMF-Tool 1.9.371 + 1 + 2024-01-19T15:53:10Z + WR + + + urn:uuid:ab15a732-bcc7-4c6e-ba83-4ee71dabe538 + + + ST2067-203_audio_track_file__non_compliant_MCAContent_missing.mxf + + + + + urn:uuid:132923e2-43c6-4e2c-a68b-9c8dc20c5bcf + + + CPL_132923e2-43c6-4e2c-a68b-9c8dc20c5bcf.xml + + + + + urn:uuid:7184e88e-682e-4640-9047-a007cf5ae440 + true + + + PKL_7184e88e-682e-4640-9047-a007cf5ae440.xml + + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCAContent_missing/CPL_132923e2-43c6-4e2c-a68b-9c8dc20c5bcf.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCAContent_missing/CPL_132923e2-43c6-4e2c-a68b-9c8dc20c5bcf.xml new file mode 100644 index 00000000..d1d8b664 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCAContent_missing/CPL_132923e2-43c6-4e2c-a68b-9c8dc20c5bcf.xml @@ -0,0 +1,256 @@ + + + urn:uuid:132923e2-43c6-4e2c-a68b-9c8dc20c5bcf + S-ADM Test + 2024-01-19T15:53:08Z + Wolfgang Ruppel + IMF-Tool 1.9.371 + Fraunhofer IIS + S-ADM + test + + + urn:uuid:623e115c-fce6-4bd3-9fc3-3469cb9b0dfd + S-ADM + + + + + urn:uuid:5784a385-bcbc-4737-a159-7df68680c90e + + 10 + 2 + 1 + 64 + 940 + 897 + CoSiting + 50/1 + FullFrame + 1920 + 1080 + 1920 + 1080 + 0 + 0 + 1920 + 1080 + 0 + 0 + + 42 + 0 + + urn:smpte:ul:060e2b34.0401010d.04010202.03010114 + 16/9 + urn:smpte:ul:060e2b34.0401010d.0d010301.020c0600 + urn:smpte:ul:060e2b34.04010101.04010101.01020000 + urn:smpte:ul:060e2b34.04010101.04010101.02020000 + urn:smpte:ul:060e2b34.04010106.04010101.03030000 + 1080 + 1920 + 0 + 0 + 0 + + + 260 + 1920 + 1080 + 0 + 0 + 1920 + 1080 + 0 + 0 + 3 + + + 9 + 1 + 1 + + + 9 + 2 + 1 + + + 9 + 2 + 1 + + + 01040001000503030000778888888888 + + + CompLuma + 10 + + + CompColorDifferenceU + 10 + + + CompColorDifferenceV + 10 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + urn:uuid:59d0930e-ab77-48f3-b54b-ce2d56f1fad0 + + + urn:uuid:2b8c2807-b399-4ad4-bbe2-a2aaa0e48f85 + 2 + + + + urn:uuid:55a17862-36d7-465f-ba62-56b705218b0a + + urn:uuid:10569746-d48b-4f15-a133-0b4e11526946 + + + urn:uuid:2cba40d1-a1d7-4935-88aa-2a67686eb09e + + + urn:uuid:a547ae40-25d6-450e-b20b-e39c9f3bea05 + urn:uuid:c4cc7dc3-d51f-4fe7-b74e-26b1ca84b3bf + 1 + 2 + + urn:smpte:ul:060e2b34.0401010d.04040212.00000000 + + + + urn:uuid:2f73d3dc-320b-4266-b17e-fc064c7966f8 + urn:uuid:c4cc7dc3-d51f-4fe7-b74e-26b1ca84b3bf + + urn:smpte:ul:060e2b34.04010101.0e210101.01010101 + urn:smpte:ul:060e2b34.04010101.0e210101.01020101 + + + + urn:uuid:2231cf42-f1fa-41e8-be16-346038ca3345 + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:bf845c0e-353c-4425-a29c-0d9075a8da90 + MGASf + MGA Soundfield + Default + n/a + FCMP + urn:uuid:c4cc7dc3-d51f-4fe7-b74e-26b1ca84b3bf + APR_1001 + + + urn:uuid:18b70350-cb68-4283-9328-8da76b16a4f9 + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:79cc1911-7d70-41dc-b2cd-d90e54fff9c9 + MGASf + MGA Soundfield + Dialog+ + n/a + FCMP + urn:uuid:c4cc7dc3-d51f-4fe7-b74e-26b1ca84b3bf + APR_1002 + + + urn:uuid:ea7b1121-695a-4763-a849-47192e804961 + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:0d5b9529-9602-477a-9fb6-0ca8f1ede2f6 + MGASf + MGA Soundfield + Audio Description + n/a + FCMP + urn:uuid:c4cc7dc3-d51f-4fe7-b74e-26b1ca84b3bf + APR_1003 + + + urn:uuid:b030d913-b416-40f6-b64f-e5330b6ef309 + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:d224eff3-a876-46ab-a26d-661a1418a4e6 + MGASf + MGA Soundfield + Commentary Off + n/a + FCMP + urn:uuid:c4cc7dc3-d51f-4fe7-b74e-26b1ca84b3bf + APR_1004 + + + 2 + 50/1 + 10 + urn:smpte:ul:060e2b34.0401010d.0d010301.02250200 + 48000/1 + False + 5 + 24 + urn:smpte:ul:060e2b34.0401010d.04020201.02010000 + 15 + 720000 + + + + 50 1 + + http://www.smpte-ra.org/ns/2067-21/2021 + + urn:uuid:347920ac-14e3-4f53-9747-3e4443080724 + urn:uuid:66b54a7f-bdf1-4b5a-a908-067b0cd7bd94 + http://www.smpte-ra.org/ns/2067-203/2022#Operational-Mode-A + + + + urn:uuid:7134b6aa-dac9-4989-9b34-d530b22773c7 + + + urn:uuid:df5a4fa5-ec08-42c0-b189-c8fb2dcd0520 + urn:uuid:f8721274-7903-4554-ad72-0539fa9ffd41 + + + urn:uuid:e143b127-25d9-4c7d-99ee-8c2580439285 + 500 + 10 + urn:uuid:5784a385-bcbc-4737-a159-7df68680c90e + urn:uuid:db8a1a5b-ad90-44cf-bf25-455dcce73ab5 + + + + + urn:uuid:5171e0ea-49f7-456e-8c8c-0156ddcc1cbf + urn:uuid:66b54a7f-bdf1-4b5a-a908-067b0cd7bd94 + + + urn:uuid:0dc0d929-0b9d-4738-a231-bef744ac53f1 + 50 1 + 10 + 10 + urn:uuid:55a17862-36d7-465f-ba62-56b705218b0a + urn:uuid:ab15a732-bcc7-4c6e-ba83-4ee71dabe538 + + + + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCAContent_missing/PKL_7184e88e-682e-4640-9047-a007cf5ae440.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCAContent_missing/PKL_7184e88e-682e-4640-9047-a007cf5ae440.xml new file mode 100644 index 00000000..b5cd2655 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCAContent_missing/PKL_7184e88e-682e-4640-9047-a007cf5ae440.xml @@ -0,0 +1,25 @@ + + + urn:uuid:7184e88e-682e-4640-9047-a007cf5ae440 + 2024-01-19T15:53:10Z + WR + IMF-Tool 1.9.371 + + + urn:uuid:ab15a732-bcc7-4c6e-ba83-4ee71dabe538 + SOhiNNXSJLGryj23WvOokJiGR6I= + 366872 + application/mxf + ST2067-203_audio_track_file__non_compliant_MCAContent_missing.mxf + + + + urn:uuid:132923e2-43c6-4e2c-a68b-9c8dc20c5bcf + VRBmiIhIqGXyvs+NWNsfv8Yo788= + 15770 + text/xml + CPL_132923e2-43c6-4e2c-a68b-9c8dc20c5bcf.xml + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCAContent_missing/ST2067-203_audio_track_file__non_compliant_MCAContent_missing.mxf b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCAContent_missing/ST2067-203_audio_track_file__non_compliant_MCAContent_missing.mxf new file mode 100755 index 00000000..6444ddf8 Binary files /dev/null and b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCAContent_missing/ST2067-203_audio_track_file__non_compliant_MCAContent_missing.mxf differ diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCAContent_missing/VOLINDEX.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCAContent_missing/VOLINDEX.xml new file mode 100644 index 00000000..0ebe8e85 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCAContent_missing/VOLINDEX.xml @@ -0,0 +1,4 @@ + + + 1 + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCAContent_wrong/ASSETMAP.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCAContent_wrong/ASSETMAP.xml new file mode 100644 index 00000000..4a3edacc --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCAContent_wrong/ASSETMAP.xml @@ -0,0 +1,35 @@ + + + urn:uuid:a973cb93-7896-466f-b5d4-0be47a8373ad + IMF-Tool 1.9.371 + 1 + 2024-01-19T15:53:41Z + WR + + + urn:uuid:d9ae5cbd-8db6-411a-b4cb-825330199185 + + + ST2067-203_audio_track_file__non_compliant_MCAContent_wrong.mxf + + + + + urn:uuid:a6acdc1f-a3fc-4f12-8a52-f4b474ba24b6 + + + CPL_a6acdc1f-a3fc-4f12-8a52-f4b474ba24b6.xml + + + + + urn:uuid:b367f4c1-48a1-49dd-a121-febaec663b75 + true + + + PKL_b367f4c1-48a1-49dd-a121-febaec663b75.xml + + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCAContent_wrong/CPL_a6acdc1f-a3fc-4f12-8a52-f4b474ba24b6.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCAContent_wrong/CPL_a6acdc1f-a3fc-4f12-8a52-f4b474ba24b6.xml new file mode 100644 index 00000000..fea112ee --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCAContent_wrong/CPL_a6acdc1f-a3fc-4f12-8a52-f4b474ba24b6.xml @@ -0,0 +1,260 @@ + + + urn:uuid:a6acdc1f-a3fc-4f12-8a52-f4b474ba24b6 + S-ADM Test + 2024-01-19T15:53:40Z + Wolfgang Ruppel + IMF-Tool 1.9.371 + Fraunhofer IIS + S-ADM + test + + + urn:uuid:623e115c-fce6-4bd3-9fc3-3469cb9b0dfd + S-ADM + + + + + urn:uuid:327552d0-f2ec-4876-a5ed-c364588f8a03 + + 10 + 2 + 1 + 64 + 940 + 897 + CoSiting + 50/1 + FullFrame + 1920 + 1080 + 1920 + 1080 + 0 + 0 + 1920 + 1080 + 0 + 0 + + 42 + 0 + + urn:smpte:ul:060e2b34.0401010d.04010202.03010114 + 16/9 + urn:smpte:ul:060e2b34.0401010d.0d010301.020c0600 + urn:smpte:ul:060e2b34.04010101.04010101.01020000 + urn:smpte:ul:060e2b34.04010101.04010101.02020000 + urn:smpte:ul:060e2b34.04010106.04010101.03030000 + 1080 + 1920 + 0 + 0 + 0 + + + 260 + 1920 + 1080 + 0 + 0 + 1920 + 1080 + 0 + 0 + 3 + + + 9 + 1 + 1 + + + 9 + 2 + 1 + + + 9 + 2 + 1 + + + 01040001000503030000778888888888 + + + CompLuma + 10 + + + CompColorDifferenceU + 10 + + + CompColorDifferenceV + 10 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + urn:uuid:59d0930e-ab77-48f3-b54b-ce2d56f1fad0 + + + urn:uuid:2b8c2807-b399-4ad4-bbe2-a2aaa0e48f85 + 2 + + + + urn:uuid:d7a51bdf-2a0c-4767-b8b3-a2a9823f1385 + + urn:uuid:beb24336-992e-4644-87da-80defd668edf + + + urn:uuid:c1331d90-d49f-48bd-9c95-9ba56404394e + + + urn:uuid:24d6d296-5275-49d5-ba8e-78be1115c186 + urn:uuid:266372e6-d39e-4c52-ae77-f2ae21402b80 + 1 + 2 + + urn:smpte:ul:060e2b34.0401010d.04040212.00000000 + + + + urn:uuid:0789a849-9b79-40a9-b347-63b8ec2c8718 + urn:uuid:266372e6-d39e-4c52-ae77-f2ae21402b80 + + urn:smpte:ul:060e2b34.04010101.0e210101.01010101 + urn:smpte:ul:060e2b34.04010101.0e210101.01020101 + + + + urn:uuid:af7c0d60-852b-4bc2-ac91-ecebea6a262b + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:7338c18f-1909-4c8d-8f95-8df9e8f20044 + MGASf + MGA Soundfield + Default + n/a + MRP + FCMP + urn:uuid:266372e6-d39e-4c52-ae77-f2ae21402b80 + APR_1001 + + + urn:uuid:a121add6-244e-46ea-897d-def13f317c29 + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:63b36c33-3e6a-4c84-8f6b-53d4d0d29cc0 + MGASf + MGA Soundfield + Dialog+ + n/a + MRP + FCMP + urn:uuid:266372e6-d39e-4c52-ae77-f2ae21402b80 + APR_1002 + + + urn:uuid:a22875e3-cde1-4f29-af5c-47a36221a7bc + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:fbc7a04b-d700-4c7f-9188-91588ebf5ddd + MGASf + MGA Soundfield + Audio Description + n/a + MRP + FCMP + urn:uuid:266372e6-d39e-4c52-ae77-f2ae21402b80 + APR_1003 + + + urn:uuid:b7839200-1626-42c8-85bf-741a061b02cb + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:80a3cb90-b74d-4708-babe-d4dd17dce1c4 + MGASf + MGA Soundfield + Commentary Off + n/a + MRP + FCMP + urn:uuid:266372e6-d39e-4c52-ae77-f2ae21402b80 + APR_1004 + + + 2 + 50/1 + 10 + urn:smpte:ul:060e2b34.0401010d.0d010301.02250200 + 48000/1 + False + 5 + 24 + urn:smpte:ul:060e2b34.0401010d.04020201.02010000 + 15 + 720000 + + + + 50 1 + + http://www.smpte-ra.org/ns/2067-21/2021 + + urn:uuid:347920ac-14e3-4f53-9747-3e4443080724 + urn:uuid:af9b2784-ea1a-45c0-bd5d-a2913b0aae65 + http://www.smpte-ra.org/ns/2067-203/2022#Operational-Mode-A + + + + urn:uuid:3b8a411d-5d3b-4d02-8c84-352b97d0374c + + + urn:uuid:d5ce043f-1418-4fac-ab18-4cb354a79fdc + urn:uuid:123cb6c3-8d13-4d03-b0aa-d46f9e55c518 + + + urn:uuid:736aaca2-93b5-422d-b51e-9d7955f569c3 + 500 + 10 + urn:uuid:327552d0-f2ec-4876-a5ed-c364588f8a03 + urn:uuid:db8a1a5b-ad90-44cf-bf25-455dcce73ab5 + + + + + urn:uuid:1553a95b-92f3-4973-99d2-8ca85258b693 + urn:uuid:af9b2784-ea1a-45c0-bd5d-a2913b0aae65 + + + urn:uuid:018d5176-4b10-4edb-b914-5ddf972cecb1 + 50 1 + 10 + 10 + urn:uuid:d7a51bdf-2a0c-4767-b8b3-a2a9823f1385 + urn:uuid:d9ae5cbd-8db6-411a-b4cb-825330199185 + + + + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCAContent_wrong/PKL_b367f4c1-48a1-49dd-a121-febaec663b75.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCAContent_wrong/PKL_b367f4c1-48a1-49dd-a121-febaec663b75.xml new file mode 100644 index 00000000..2c4069fc --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCAContent_wrong/PKL_b367f4c1-48a1-49dd-a121-febaec663b75.xml @@ -0,0 +1,25 @@ + + + urn:uuid:b367f4c1-48a1-49dd-a121-febaec663b75 + 2024-01-19T15:53:41Z + WR + IMF-Tool 1.9.371 + + + urn:uuid:d9ae5cbd-8db6-411a-b4cb-825330199185 + 0MjLRD8IiNXtQxAWdpusc1ItUCU= + 366872 + application/mxf + ST2067-203_audio_track_file__non_compliant_MCAContent_wrong.mxf + + + + urn:uuid:a6acdc1f-a3fc-4f12-8a52-f4b474ba24b6 + YuxOitWrmYTAIJ8OozVYD2CSVWE= + 15958 + text/xml + CPL_a6acdc1f-a3fc-4f12-8a52-f4b474ba24b6.xml + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCAContent_wrong/ST2067-203_audio_track_file__non_compliant_MCAContent_wrong.mxf b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCAContent_wrong/ST2067-203_audio_track_file__non_compliant_MCAContent_wrong.mxf new file mode 100755 index 00000000..007f4bdc Binary files /dev/null and b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCAContent_wrong/ST2067-203_audio_track_file__non_compliant_MCAContent_wrong.mxf differ diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCAContent_wrong/VOLINDEX.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCAContent_wrong/VOLINDEX.xml new file mode 100644 index 00000000..0ebe8e85 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCAContent_wrong/VOLINDEX.xml @@ -0,0 +1,4 @@ + + + 1 + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATagName_missing/ASSETMAP.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATagName_missing/ASSETMAP.xml new file mode 100644 index 00000000..df49fc5c --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATagName_missing/ASSETMAP.xml @@ -0,0 +1,35 @@ + + + urn:uuid:3bf338be-e95b-4ac5-af0a-8e21ea97eb21 + IMF-Tool 1.9.371 + 1 + 2024-01-19T15:54:14Z + WR + + + urn:uuid:054c4948-124e-4e35-ae18-4a93c9e48c19 + + + ST2067-203_audio_track_file__non_compliant_MCATagName_missing.mxf + + + + + urn:uuid:634aab40-cc48-49eb-81bd-8f3119387a4a + + + CPL_634aab40-cc48-49eb-81bd-8f3119387a4a.xml + + + + + urn:uuid:96316130-d5ee-4c26-a9b1-c60483fc3fee + true + + + PKL_96316130-d5ee-4c26-a9b1-c60483fc3fee.xml + + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATagName_missing/CPL_634aab40-cc48-49eb-81bd-8f3119387a4a.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATagName_missing/CPL_634aab40-cc48-49eb-81bd-8f3119387a4a.xml new file mode 100644 index 00000000..0fc1fb79 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATagName_missing/CPL_634aab40-cc48-49eb-81bd-8f3119387a4a.xml @@ -0,0 +1,256 @@ + + + urn:uuid:634aab40-cc48-49eb-81bd-8f3119387a4a + S-ADM Test + 2024-01-19T15:54:12Z + Wolfgang Ruppel + IMF-Tool 1.9.371 + Fraunhofer IIS + S-ADM + test + + + urn:uuid:623e115c-fce6-4bd3-9fc3-3469cb9b0dfd + S-ADM + + + + + urn:uuid:c8941470-9a05-4f7f-9eb3-91b4cab031eb + + 10 + 2 + 1 + 64 + 940 + 897 + CoSiting + 50/1 + FullFrame + 1920 + 1080 + 1920 + 1080 + 0 + 0 + 1920 + 1080 + 0 + 0 + + 42 + 0 + + urn:smpte:ul:060e2b34.0401010d.04010202.03010114 + 16/9 + urn:smpte:ul:060e2b34.0401010d.0d010301.020c0600 + urn:smpte:ul:060e2b34.04010101.04010101.01020000 + urn:smpte:ul:060e2b34.04010101.04010101.02020000 + urn:smpte:ul:060e2b34.04010106.04010101.03030000 + 1080 + 1920 + 0 + 0 + 0 + + + 260 + 1920 + 1080 + 0 + 0 + 1920 + 1080 + 0 + 0 + 3 + + + 9 + 1 + 1 + + + 9 + 2 + 1 + + + 9 + 2 + 1 + + + 01040001000503030000778888888888 + + + CompLuma + 10 + + + CompColorDifferenceU + 10 + + + CompColorDifferenceV + 10 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + urn:uuid:59d0930e-ab77-48f3-b54b-ce2d56f1fad0 + + + urn:uuid:2b8c2807-b399-4ad4-bbe2-a2aaa0e48f85 + 2 + + + + urn:uuid:98275829-0d76-4f1c-a128-0665193a6af3 + + urn:uuid:93ce3916-d77a-4c51-841d-ab26f6b03402 + + + urn:uuid:94b3d36a-70ef-41df-a64e-d18758f90a6c + + + urn:uuid:37eeb318-77a2-4a58-80eb-f040e71e276f + urn:uuid:0e992374-62ea-4c64-9217-4f7f18c39221 + 1 + 2 + + urn:smpte:ul:060e2b34.0401010d.04040212.00000000 + + + + urn:uuid:1c747f95-65b3-4d32-8b0a-5da0d23c2a53 + urn:uuid:0e992374-62ea-4c64-9217-4f7f18c39221 + + urn:smpte:ul:060e2b34.04010101.0e210101.01010101 + urn:smpte:ul:060e2b34.04010101.0e210101.01020101 + + + + urn:uuid:af010b60-b6a9-403c-9202-0dc6b87c9688 + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:2cd6ac18-b722-4863-8b47-6839d2d39d4e + MGASf + Default + n/a + PRM + FCMP + urn:uuid:0e992374-62ea-4c64-9217-4f7f18c39221 + APR_1001 + + + urn:uuid:9e8b6d3a-274d-4788-a26d-3516754732c0 + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:c5ae3451-9fb6-42b9-90a6-c3c1753c6fb1 + MGASf + Dialog+ + n/a + PRM + FCMP + urn:uuid:0e992374-62ea-4c64-9217-4f7f18c39221 + APR_1002 + + + urn:uuid:d44cf826-b7a8-4968-8a23-4a2e264502ec + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:089b4f60-54ee-4ef7-ad4e-13f75de64f7e + MGASf + Audio Description + n/a + PRM + FCMP + urn:uuid:0e992374-62ea-4c64-9217-4f7f18c39221 + APR_1003 + + + urn:uuid:80be4464-a005-486c-953e-01f128614b3c + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:6154d2c6-5653-42ee-ae97-4ffd27f9c024 + MGASf + Commentary Off + n/a + PRM + FCMP + urn:uuid:0e992374-62ea-4c64-9217-4f7f18c39221 + APR_1004 + + + 2 + 50/1 + 10 + urn:smpte:ul:060e2b34.0401010d.0d010301.02250200 + 48000/1 + False + 5 + 24 + urn:smpte:ul:060e2b34.0401010d.04020201.02010000 + 15 + 720000 + + + + 50 1 + + http://www.smpte-ra.org/ns/2067-21/2021 + + urn:uuid:347920ac-14e3-4f53-9747-3e4443080724 + urn:uuid:fc0db723-89d4-48c6-8765-ca5b645d05c6 + http://www.smpte-ra.org/ns/2067-203/2022#Operational-Mode-A + + + + urn:uuid:b9e4eff0-f371-4e0c-a3e1-a8c90b7bb19b + + + urn:uuid:e0017159-0bd7-4bd3-9014-5dccd771631e + urn:uuid:06fb7d92-3e43-4779-9b31-15db7d4eaa7a + + + urn:uuid:9daf9a93-6f3d-488c-a796-dde40e8b610a + 500 + 10 + urn:uuid:c8941470-9a05-4f7f-9eb3-91b4cab031eb + urn:uuid:db8a1a5b-ad90-44cf-bf25-455dcce73ab5 + + + + + urn:uuid:19720e8a-d82b-43dd-ba6b-a84d1bf4d5bb + urn:uuid:fc0db723-89d4-48c6-8765-ca5b645d05c6 + + + urn:uuid:e4dce3c4-44aa-4490-8acc-5e5ea98c865e + 50 1 + 10 + 10 + urn:uuid:98275829-0d76-4f1c-a128-0665193a6af3 + urn:uuid:054c4948-124e-4e35-ae18-4a93c9e48c19 + + + + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATagName_missing/PKL_96316130-d5ee-4c26-a9b1-c60483fc3fee.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATagName_missing/PKL_96316130-d5ee-4c26-a9b1-c60483fc3fee.xml new file mode 100644 index 00000000..3c1a3abb --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATagName_missing/PKL_96316130-d5ee-4c26-a9b1-c60483fc3fee.xml @@ -0,0 +1,25 @@ + + + urn:uuid:96316130-d5ee-4c26-a9b1-c60483fc3fee + 2024-01-19T15:54:14Z + WR + IMF-Tool 1.9.371 + + + urn:uuid:054c4948-124e-4e35-ae18-4a93c9e48c19 + hD686g+vuQHzly3740frkSwJYhM= + 366872 + application/mxf + ST2067-203_audio_track_file__non_compliant_MCATagName_missing.mxf + + + + urn:uuid:634aab40-cc48-49eb-81bd-8f3119387a4a + whYeUAhsK+w0tbrL/wv2tEh6Y90= + 15726 + text/xml + CPL_634aab40-cc48-49eb-81bd-8f3119387a4a.xml + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATagName_missing/ST2067-203_audio_track_file__non_compliant_MCATagName_missing.mxf b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATagName_missing/ST2067-203_audio_track_file__non_compliant_MCATagName_missing.mxf new file mode 100755 index 00000000..2a9be55a Binary files /dev/null and b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATagName_missing/ST2067-203_audio_track_file__non_compliant_MCATagName_missing.mxf differ diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATagName_missing/VOLINDEX.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATagName_missing/VOLINDEX.xml new file mode 100644 index 00000000..0ebe8e85 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATagName_missing/VOLINDEX.xml @@ -0,0 +1,4 @@ + + + 1 + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATagName_wrong/ASSETMAP.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATagName_wrong/ASSETMAP.xml new file mode 100644 index 00000000..d1815c45 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATagName_wrong/ASSETMAP.xml @@ -0,0 +1,35 @@ + + + urn:uuid:a0c82768-3e58-4eeb-a4a0-b9dec9842c87 + IMF-Tool 1.9.371 + 1 + 2024-01-19T15:54:54Z + WR + + + urn:uuid:74d1df31-fad3-4d6d-a08e-a56d1b73f2d0 + + + ST2067-203_audio_track_file__non_compliant_MCATagName_wrong.mxf + + + + + urn:uuid:e00a7145-9c75-46ee-a781-4abe52aac6bc + + + CPL_e00a7145-9c75-46ee-a781-4abe52aac6bc.xml + + + + + urn:uuid:64d36e52-5d7a-4311-97c5-252001c85ddb + true + + + PKL_64d36e52-5d7a-4311-97c5-252001c85ddb.xml + + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATagName_wrong/CPL_e00a7145-9c75-46ee-a781-4abe52aac6bc.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATagName_wrong/CPL_e00a7145-9c75-46ee-a781-4abe52aac6bc.xml new file mode 100644 index 00000000..894bd71d --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATagName_wrong/CPL_e00a7145-9c75-46ee-a781-4abe52aac6bc.xml @@ -0,0 +1,260 @@ + + + urn:uuid:e00a7145-9c75-46ee-a781-4abe52aac6bc + S-ADM Test + 2024-01-19T15:54:52Z + Wolfgang Ruppel + IMF-Tool 1.9.371 + Fraunhofer IIS + S-ADM + test + + + urn:uuid:623e115c-fce6-4bd3-9fc3-3469cb9b0dfd + S-ADM + + + + + urn:uuid:c07d5ca0-6b20-4f62-94e1-f4857d54a4ba + + 10 + 2 + 1 + 64 + 940 + 897 + CoSiting + 50/1 + FullFrame + 1920 + 1080 + 1920 + 1080 + 0 + 0 + 1920 + 1080 + 0 + 0 + + 42 + 0 + + urn:smpte:ul:060e2b34.0401010d.04010202.03010114 + 16/9 + urn:smpte:ul:060e2b34.0401010d.0d010301.020c0600 + urn:smpte:ul:060e2b34.04010101.04010101.01020000 + urn:smpte:ul:060e2b34.04010101.04010101.02020000 + urn:smpte:ul:060e2b34.04010106.04010101.03030000 + 1080 + 1920 + 0 + 0 + 0 + + + 260 + 1920 + 1080 + 0 + 0 + 1920 + 1080 + 0 + 0 + 3 + + + 9 + 1 + 1 + + + 9 + 2 + 1 + + + 9 + 2 + 1 + + + 01040001000503030000778888888888 + + + CompLuma + 10 + + + CompColorDifferenceU + 10 + + + CompColorDifferenceV + 10 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + urn:uuid:59d0930e-ab77-48f3-b54b-ce2d56f1fad0 + + + urn:uuid:2b8c2807-b399-4ad4-bbe2-a2aaa0e48f85 + 2 + + + + urn:uuid:9acf87d2-cd49-4036-9780-cf1b68f322d3 + + urn:uuid:573a6a43-b0f0-47ed-a95d-b3ce5b8b22d6 + + + urn:uuid:58cdf8c9-8ffe-497f-9b0c-dbb4895d9aa5 + + + urn:uuid:6ebf7a32-7eac-403f-9bcb-a25aabb93b9e + urn:uuid:3d70145d-1893-4f02-a637-fb76e376da42 + 1 + 2 + + urn:smpte:ul:060e2b34.0401010d.04040212.00000000 + + + + urn:uuid:ed0a44d7-8d8b-4fe7-b6ca-f66867d9e492 + urn:uuid:3d70145d-1893-4f02-a637-fb76e376da42 + + urn:smpte:ul:060e2b34.04010101.0e210101.01010101 + urn:smpte:ul:060e2b34.04010101.0e210101.01020101 + + + + urn:uuid:494e715f-c08e-44ee-804c-1425e24ce09b + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:84c2a800-0a27-41c1-98d0-61ad01cdbce9 + MGASf + PCM Soundfield + Default + n/a + PRM + FCMP + urn:uuid:3d70145d-1893-4f02-a637-fb76e376da42 + APR_1001 + + + urn:uuid:366d60b5-5be6-4b0f-8ed0-7a1d80e5bd12 + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:a6148fbe-7fc5-46f7-b7b2-408afd1e007b + MGASf + PCM Soundfield + Dialog+ + n/a + PRM + FCMP + urn:uuid:3d70145d-1893-4f02-a637-fb76e376da42 + APR_1002 + + + urn:uuid:ab87ac00-e504-4141-b618-e517e7b3478f + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:d8c5a5fe-3a1d-4cdc-99dc-9417babab2d1 + MGASf + PCM Soundfield + Audio Description + n/a + PRM + FCMP + urn:uuid:3d70145d-1893-4f02-a637-fb76e376da42 + APR_1003 + + + urn:uuid:dbfd34ab-2397-43bf-8c24-511cfb098dec + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:8e78066a-4221-4ee9-9290-9a9d5e322004 + MGASf + PCM Soundfield + Commentary Off + n/a + PRM + FCMP + urn:uuid:3d70145d-1893-4f02-a637-fb76e376da42 + APR_1004 + + + 2 + 50/1 + 10 + urn:smpte:ul:060e2b34.0401010d.0d010301.02250200 + 48000/1 + False + 5 + 24 + urn:smpte:ul:060e2b34.0401010d.04020201.02010000 + 15 + 720000 + + + + 50 1 + + http://www.smpte-ra.org/ns/2067-21/2021 + + urn:uuid:347920ac-14e3-4f53-9747-3e4443080724 + urn:uuid:7d17e783-17a6-446b-82cb-f83093e5385d + http://www.smpte-ra.org/ns/2067-203/2022#Operational-Mode-A + + + + urn:uuid:6a4c76e9-eec6-41bc-aaf3-563215e42589 + + + urn:uuid:c6ae6fb6-b212-44c2-b730-0feb2222ec84 + urn:uuid:94007ee6-2c5b-4a47-9c6f-26d02506e9ae + + + urn:uuid:1cfaa7af-5ad6-4562-bb9c-4917b9558897 + 500 + 10 + urn:uuid:c07d5ca0-6b20-4f62-94e1-f4857d54a4ba + urn:uuid:db8a1a5b-ad90-44cf-bf25-455dcce73ab5 + + + + + urn:uuid:bb526eb8-dd15-4c1c-832c-940fdfab0c40 + urn:uuid:7d17e783-17a6-446b-82cb-f83093e5385d + + + urn:uuid:5fbe2378-1354-4924-8fd2-a8962458af04 + 50 1 + 10 + 10 + urn:uuid:9acf87d2-cd49-4036-9780-cf1b68f322d3 + urn:uuid:74d1df31-fad3-4d6d-a08e-a56d1b73f2d0 + + + + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATagName_wrong/PKL_64d36e52-5d7a-4311-97c5-252001c85ddb.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATagName_wrong/PKL_64d36e52-5d7a-4311-97c5-252001c85ddb.xml new file mode 100644 index 00000000..17fc8a4b --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATagName_wrong/PKL_64d36e52-5d7a-4311-97c5-252001c85ddb.xml @@ -0,0 +1,25 @@ + + + urn:uuid:64d36e52-5d7a-4311-97c5-252001c85ddb + 2024-01-19T15:54:54Z + WR + IMF-Tool 1.9.371 + + + urn:uuid:74d1df31-fad3-4d6d-a08e-a56d1b73f2d0 + HaoaUZL1Yun4+R1sxC40NnhgV2g= + 366872 + application/mxf + ST2067-203_audio_track_file__non_compliant_MCATagName_wrong.mxf + + + + urn:uuid:e00a7145-9c75-46ee-a781-4abe52aac6bc + ldLvuDrjna3yqSIjKJOiJNdt/cU= + 15958 + text/xml + CPL_e00a7145-9c75-46ee-a781-4abe52aac6bc.xml + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATagName_wrong/ST2067-203_audio_track_file__non_compliant_MCATagName_wrong.mxf b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATagName_wrong/ST2067-203_audio_track_file__non_compliant_MCATagName_wrong.mxf new file mode 100755 index 00000000..94312153 Binary files /dev/null and b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATagName_wrong/ST2067-203_audio_track_file__non_compliant_MCATagName_wrong.mxf differ diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATagName_wrong/VOLINDEX.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATagName_wrong/VOLINDEX.xml new file mode 100644 index 00000000..0ebe8e85 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATagName_wrong/VOLINDEX.xml @@ -0,0 +1,4 @@ + + + 1 + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATagSymbol_missing/ASSETMAP.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATagSymbol_missing/ASSETMAP.xml new file mode 100644 index 00000000..882d0444 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATagSymbol_missing/ASSETMAP.xml @@ -0,0 +1,35 @@ + + + urn:uuid:5b3b15f0-347e-4096-8c1d-53e8192ce1fa + IMF-Tool 1.9.371 + 1 + 2024-01-19T15:57:04Z + WR + + + urn:uuid:8076c08d-99cb-418b-bec1-908cd2ff698b + + + ST2067-203_audio_track_file__non_compliant_MCATagSymbol_missing.mxf + + + + + urn:uuid:f6f0f34c-c7c9-49c3-ab46-673b97838289 + + + CPL_f6f0f34c-c7c9-49c3-ab46-673b97838289.xml + + + + + urn:uuid:ea28fc8a-729a-44f2-afdd-a8bb181b4711 + true + + + PKL_ea28fc8a-729a-44f2-afdd-a8bb181b4711.xml + + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATagSymbol_missing/CPL_f6f0f34c-c7c9-49c3-ab46-673b97838289.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATagSymbol_missing/CPL_f6f0f34c-c7c9-49c3-ab46-673b97838289.xml new file mode 100644 index 00000000..3cbaf6b6 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATagSymbol_missing/CPL_f6f0f34c-c7c9-49c3-ab46-673b97838289.xml @@ -0,0 +1,260 @@ + + + urn:uuid:f6f0f34c-c7c9-49c3-ab46-673b97838289 + S-ADM Test + 2024-01-19T15:57:02Z + Wolfgang Ruppel + IMF-Tool 1.9.371 + Fraunhofer IIS + S-ADM + test + + + urn:uuid:623e115c-fce6-4bd3-9fc3-3469cb9b0dfd + S-ADM + + + + + urn:uuid:4857abc5-5170-4637-92c2-c673afc181c0 + + 10 + 2 + 1 + 64 + 940 + 897 + CoSiting + 50/1 + FullFrame + 1920 + 1080 + 1920 + 1080 + 0 + 0 + 1920 + 1080 + 0 + 0 + + 42 + 0 + + urn:smpte:ul:060e2b34.0401010d.04010202.03010114 + 16/9 + urn:smpte:ul:060e2b34.0401010d.0d010301.020c0600 + urn:smpte:ul:060e2b34.04010101.04010101.01020000 + urn:smpte:ul:060e2b34.04010101.04010101.02020000 + urn:smpte:ul:060e2b34.04010106.04010101.03030000 + 1080 + 1920 + 0 + 0 + 0 + + + 260 + 1920 + 1080 + 0 + 0 + 1920 + 1080 + 0 + 0 + 3 + + + 9 + 1 + 1 + + + 9 + 2 + 1 + + + 9 + 2 + 1 + + + 01040001000503030000778888888888 + + + CompLuma + 10 + + + CompColorDifferenceU + 10 + + + CompColorDifferenceV + 10 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + urn:uuid:59d0930e-ab77-48f3-b54b-ce2d56f1fad0 + + + urn:uuid:2b8c2807-b399-4ad4-bbe2-a2aaa0e48f85 + 2 + + + + urn:uuid:7677ad20-cfa8-4364-ad60-3383ab07402e + + urn:uuid:8e6e788c-277e-4454-9a85-39ad11572317 + + + urn:uuid:74791d45-01e7-4948-9a75-624de7bc44c7 + + + urn:uuid:5bf12bbc-ba5c-41d4-990c-99b0a6ca3b7c + urn:uuid:fbb7e953-8263-43a7-85a0-1f60cf9ae243 + 1 + 2 + + urn:smpte:ul:060e2b34.0401010d.04040212.00000000 + + + + urn:uuid:674ba2c8-47aa-4293-8e15-8ea930c67930 + urn:uuid:fbb7e953-8263-43a7-85a0-1f60cf9ae243 + + urn:smpte:ul:060e2b34.04010101.0e210101.01010101 + urn:smpte:ul:060e2b34.04010101.0e210101.01020101 + + + + urn:uuid:09347b7d-678b-462c-895a-da6fe68c66a6 + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:e84f0452-94ff-4ae5-9ddd-d3fcd20b20d4 + + MGA Soundfield + Default + n/a + PRM + FCMP + urn:uuid:fbb7e953-8263-43a7-85a0-1f60cf9ae243 + APR_1001 + + + urn:uuid:f19aef30-1cff-4681-9beb-55756a3baae4 + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:50c598b8-00dd-4a1a-a167-b4e288b5c306 + + MGA Soundfield + Dialog+ + n/a + PRM + FCMP + urn:uuid:fbb7e953-8263-43a7-85a0-1f60cf9ae243 + APR_1002 + + + urn:uuid:11a97877-a740-4aba-9514-19729c2f3030 + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:65865c5b-477a-4bab-a2c9-1a071135f55e + + MGA Soundfield + Audio Description + n/a + PRM + FCMP + urn:uuid:fbb7e953-8263-43a7-85a0-1f60cf9ae243 + APR_1003 + + + urn:uuid:99cece26-88ce-4b3a-8861-7f599d051f0e + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:973d4b4f-2a94-473c-b2d1-9fa0ce681da2 + + MGA Soundfield + Commentary Off + n/a + PRM + FCMP + urn:uuid:fbb7e953-8263-43a7-85a0-1f60cf9ae243 + APR_1004 + + + 2 + 50/1 + 10 + urn:smpte:ul:060e2b34.0401010d.0d010301.02250200 + 48000/1 + False + 5 + 24 + urn:smpte:ul:060e2b34.0401010d.04020201.02010000 + 15 + 720000 + + + + 50 1 + + http://www.smpte-ra.org/ns/2067-21/2021 + + urn:uuid:347920ac-14e3-4f53-9747-3e4443080724 + urn:uuid:c3e75182-fda0-4586-96c9-e2cf874873b5 + http://www.smpte-ra.org/ns/2067-203/2022#Operational-Mode-A + + + + urn:uuid:abd25452-40ce-455a-b0be-1880a7edb0a7 + + + urn:uuid:3217fac8-e5b8-4d4e-ad02-ee2651e39599 + urn:uuid:e77194ce-0863-4473-892f-d90530563a5f + + + urn:uuid:ca9108df-ab51-43ba-a1a7-91a40cdb1cad + 500 + 10 + urn:uuid:4857abc5-5170-4637-92c2-c673afc181c0 + urn:uuid:db8a1a5b-ad90-44cf-bf25-455dcce73ab5 + + + + + urn:uuid:8287d27c-6fde-4b8b-97b7-99ff3fb34478 + urn:uuid:c3e75182-fda0-4586-96c9-e2cf874873b5 + + + urn:uuid:6169b9e3-734a-43a2-b9e6-0db7f20641e1 + 50 1 + 10 + 10 + urn:uuid:7677ad20-cfa8-4364-ad60-3383ab07402e + urn:uuid:8076c08d-99cb-418b-bec1-908cd2ff698b + + + + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATagSymbol_missing/PKL_ea28fc8a-729a-44f2-afdd-a8bb181b4711.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATagSymbol_missing/PKL_ea28fc8a-729a-44f2-afdd-a8bb181b4711.xml new file mode 100644 index 00000000..1f203f46 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATagSymbol_missing/PKL_ea28fc8a-729a-44f2-afdd-a8bb181b4711.xml @@ -0,0 +1,25 @@ + + + urn:uuid:ea28fc8a-729a-44f2-afdd-a8bb181b4711 + 2024-01-19T15:57:04Z + WR + IMF-Tool 1.9.371 + + + urn:uuid:8076c08d-99cb-418b-bec1-908cd2ff698b + 6lwy37dugWk8vSao2GZYxXFPG0k= + 366872 + application/mxf + ST2067-203_audio_track_file__non_compliant_MCATagSymbol_missing.mxf + + + + urn:uuid:f6f0f34c-c7c9-49c3-ab46-673b97838289 + 4E6WNtAZSoQS0wZrHRnoOD4O5aY= + 15870 + text/xml + CPL_f6f0f34c-c7c9-49c3-ab46-673b97838289.xml + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATagSymbol_missing/ST2067-203_audio_track_file__non_compliant_MCATagSymbol_missing.mxf b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATagSymbol_missing/ST2067-203_audio_track_file__non_compliant_MCATagSymbol_missing.mxf new file mode 100755 index 00000000..414f1a31 Binary files /dev/null and b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATagSymbol_missing/ST2067-203_audio_track_file__non_compliant_MCATagSymbol_missing.mxf differ diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATagSymbol_missing/VOLINDEX.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATagSymbol_missing/VOLINDEX.xml new file mode 100644 index 00000000..0ebe8e85 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATagSymbol_missing/VOLINDEX.xml @@ -0,0 +1,4 @@ + + + 1 + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATagSymbol_wrong/ASSETMAP.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATagSymbol_wrong/ASSETMAP.xml new file mode 100644 index 00000000..62fb3677 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATagSymbol_wrong/ASSETMAP.xml @@ -0,0 +1,35 @@ + + + urn:uuid:1c0af93f-4d63-4988-88f0-daf833e4e802 + IMF-Tool 1.9.371 + 1 + 2024-01-19T15:57:36Z + WR + + + urn:uuid:f01558ab-c8e3-4dab-9074-fcfab419228f + + + ST2067-203_audio_track_file__non_compliant_MCATagSymbol_wrong.mxf + + + + + urn:uuid:764a1add-ee83-4954-86c8-c41850210e1c + + + CPL_764a1add-ee83-4954-86c8-c41850210e1c.xml + + + + + urn:uuid:f20e58c7-12b3-4301-8c67-7d41c6f6d602 + true + + + PKL_f20e58c7-12b3-4301-8c67-7d41c6f6d602.xml + + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATagSymbol_wrong/CPL_764a1add-ee83-4954-86c8-c41850210e1c.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATagSymbol_wrong/CPL_764a1add-ee83-4954-86c8-c41850210e1c.xml new file mode 100644 index 00000000..b12b61bd --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATagSymbol_wrong/CPL_764a1add-ee83-4954-86c8-c41850210e1c.xml @@ -0,0 +1,260 @@ + + + urn:uuid:764a1add-ee83-4954-86c8-c41850210e1c + S-ADM Test + 2024-01-19T15:57:35Z + Wolfgang Ruppel + IMF-Tool 1.9.371 + Fraunhofer IIS + S-ADM + test + + + urn:uuid:623e115c-fce6-4bd3-9fc3-3469cb9b0dfd + S-ADM + + + + + urn:uuid:5c333061-17c9-4ea8-8532-5e104cf24bd9 + + 10 + 2 + 1 + 64 + 940 + 897 + CoSiting + 50/1 + FullFrame + 1920 + 1080 + 1920 + 1080 + 0 + 0 + 1920 + 1080 + 0 + 0 + + 42 + 0 + + urn:smpte:ul:060e2b34.0401010d.04010202.03010114 + 16/9 + urn:smpte:ul:060e2b34.0401010d.0d010301.020c0600 + urn:smpte:ul:060e2b34.04010101.04010101.01020000 + urn:smpte:ul:060e2b34.04010101.04010101.02020000 + urn:smpte:ul:060e2b34.04010106.04010101.03030000 + 1080 + 1920 + 0 + 0 + 0 + + + 260 + 1920 + 1080 + 0 + 0 + 1920 + 1080 + 0 + 0 + 3 + + + 9 + 1 + 1 + + + 9 + 2 + 1 + + + 9 + 2 + 1 + + + 01040001000503030000778888888888 + + + CompLuma + 10 + + + CompColorDifferenceU + 10 + + + CompColorDifferenceV + 10 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + urn:uuid:59d0930e-ab77-48f3-b54b-ce2d56f1fad0 + + + urn:uuid:2b8c2807-b399-4ad4-bbe2-a2aaa0e48f85 + 2 + + + + urn:uuid:c4a0ae83-2452-4b87-a7df-d0556a011183 + + urn:uuid:548829bc-0ea9-415d-9e5f-3e2f25953b9b + + + urn:uuid:1ca376f7-f71d-4ca6-b7bb-fa8b5c0d7ae7 + + + urn:uuid:f678d05e-65e7-4c4f-a4be-d261c610b85e + urn:uuid:0b18588f-78c5-429f-af2b-22a941a3eeec + 1 + 2 + + urn:smpte:ul:060e2b34.0401010d.04040212.00000000 + + + + urn:uuid:fe11ef45-e5ce-469a-b81b-ab0160cdd30b + urn:uuid:0b18588f-78c5-429f-af2b-22a941a3eeec + + urn:smpte:ul:060e2b34.04010101.0e210101.01010101 + urn:smpte:ul:060e2b34.04010101.0e210101.01020101 + + + + urn:uuid:f72a9d50-879e-42be-95b0-ef30de330642 + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:c18755bc-83e9-43d5-a485-64ef4af5ac92 + PCMSf + MGA Soundfield + Default + n/a + PRM + FCMP + urn:uuid:0b18588f-78c5-429f-af2b-22a941a3eeec + APR_1001 + + + urn:uuid:e0c1e264-9c65-4a2e-9b98-47f42f6fc999 + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:2d24d62c-5705-4c61-a885-c7a29cbe1701 + PCMSf + MGA Soundfield + Dialog+ + n/a + PRM + FCMP + urn:uuid:0b18588f-78c5-429f-af2b-22a941a3eeec + APR_1002 + + + urn:uuid:fb1207a8-b570-46a0-ab31-9d9084ecd6e4 + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:d16d6543-c3a6-4737-9ac6-7447a8aa294d + PCMSf + MGA Soundfield + Audio Description + n/a + PRM + FCMP + urn:uuid:0b18588f-78c5-429f-af2b-22a941a3eeec + APR_1003 + + + urn:uuid:c99b967f-a44c-410a-a719-188b4f592439 + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:6b1ecba8-da98-4d8e-9e27-d4a31ea619cb + PCMSf + MGA Soundfield + Commentary Off + n/a + PRM + FCMP + urn:uuid:0b18588f-78c5-429f-af2b-22a941a3eeec + APR_1004 + + + 2 + 50/1 + 10 + urn:smpte:ul:060e2b34.0401010d.0d010301.02250200 + 48000/1 + False + 5 + 24 + urn:smpte:ul:060e2b34.0401010d.04020201.02010000 + 15 + 720000 + + + + 50 1 + + http://www.smpte-ra.org/ns/2067-21/2021 + + urn:uuid:347920ac-14e3-4f53-9747-3e4443080724 + urn:uuid:49945715-e6b2-4934-bc4a-2b0bd37e72ab + http://www.smpte-ra.org/ns/2067-203/2022#Operational-Mode-A + + + + urn:uuid:b3646f37-f260-403c-9f08-44b36769a32f + + + urn:uuid:5fe2c7de-3662-4e6b-9b6e-421cdbe55464 + urn:uuid:b53f2171-a615-4b6c-a5ad-8057783ac007 + + + urn:uuid:0fe6de74-3c63-41c7-9efd-bae485557fbc + 500 + 10 + urn:uuid:5c333061-17c9-4ea8-8532-5e104cf24bd9 + urn:uuid:db8a1a5b-ad90-44cf-bf25-455dcce73ab5 + + + + + urn:uuid:f6ceee70-390e-412c-a5a0-a364aa40c934 + urn:uuid:49945715-e6b2-4934-bc4a-2b0bd37e72ab + + + urn:uuid:42a6b32b-2927-4d64-bd16-1ca286f45d05 + 50 1 + 10 + 10 + urn:uuid:c4a0ae83-2452-4b87-a7df-d0556a011183 + urn:uuid:f01558ab-c8e3-4dab-9074-fcfab419228f + + + + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATagSymbol_wrong/PKL_f20e58c7-12b3-4301-8c67-7d41c6f6d602.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATagSymbol_wrong/PKL_f20e58c7-12b3-4301-8c67-7d41c6f6d602.xml new file mode 100644 index 00000000..d73379a2 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATagSymbol_wrong/PKL_f20e58c7-12b3-4301-8c67-7d41c6f6d602.xml @@ -0,0 +1,25 @@ + + + urn:uuid:f20e58c7-12b3-4301-8c67-7d41c6f6d602 + 2024-01-19T15:57:36Z + WR + IMF-Tool 1.9.371 + + + urn:uuid:f01558ab-c8e3-4dab-9074-fcfab419228f + 6j4QcIm8p0+YkPbgzGTRJeon29M= + 366872 + application/mxf + ST2067-203_audio_track_file__non_compliant_MCATagSymbol_wrong.mxf + + + + urn:uuid:764a1add-ee83-4954-86c8-c41850210e1c + RIy7pUWUiw2f8pP/V2i+cFuv/W8= + 15958 + text/xml + CPL_764a1add-ee83-4954-86c8-c41850210e1c.xml + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATagSymbol_wrong/ST2067-203_audio_track_file__non_compliant_MCATagSymbol_wrong.mxf b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATagSymbol_wrong/ST2067-203_audio_track_file__non_compliant_MCATagSymbol_wrong.mxf new file mode 100755 index 00000000..852caa89 Binary files /dev/null and b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATagSymbol_wrong/ST2067-203_audio_track_file__non_compliant_MCATagSymbol_wrong.mxf differ diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATagSymbol_wrong/VOLINDEX.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATagSymbol_wrong/VOLINDEX.xml new file mode 100644 index 00000000..0ebe8e85 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATagSymbol_wrong/VOLINDEX.xml @@ -0,0 +1,4 @@ + + + 1 + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATitleVersion_missing/ASSETMAP.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATitleVersion_missing/ASSETMAP.xml new file mode 100644 index 00000000..30c0a280 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATitleVersion_missing/ASSETMAP.xml @@ -0,0 +1,35 @@ + + + urn:uuid:cf5be9c2-8f1e-46d7-9aeb-94c64bdfa00d + IMF-Tool 1.9.371 + 1 + 2024-01-19T15:58:39Z + WR + + + urn:uuid:395f0cdf-461c-4366-8893-d2e5ab07d9e7 + + + ST2067-203_audio_track_file__non_compliant_MCATitleVersion_missing.mxf + + + + + urn:uuid:609b7a45-5f0d-483a-9282-9329461a7543 + + + CPL_609b7a45-5f0d-483a-9282-9329461a7543.xml + + + + + urn:uuid:db4b9cf3-c53f-4751-8dd6-deada93c3980 + true + + + PKL_db4b9cf3-c53f-4751-8dd6-deada93c3980.xml + + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATitleVersion_missing/CPL_609b7a45-5f0d-483a-9282-9329461a7543.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATitleVersion_missing/CPL_609b7a45-5f0d-483a-9282-9329461a7543.xml new file mode 100644 index 00000000..1814f041 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATitleVersion_missing/CPL_609b7a45-5f0d-483a-9282-9329461a7543.xml @@ -0,0 +1,256 @@ + + + urn:uuid:609b7a45-5f0d-483a-9282-9329461a7543 + S-ADM Test + 2024-01-19T15:58:37Z + Wolfgang Ruppel + IMF-Tool 1.9.371 + Fraunhofer IIS + S-ADM + test + + + urn:uuid:623e115c-fce6-4bd3-9fc3-3469cb9b0dfd + S-ADM + + + + + urn:uuid:d98ba47f-6ecf-4902-bc82-78234af5e29e + + 10 + 2 + 1 + 64 + 940 + 897 + CoSiting + 50/1 + FullFrame + 1920 + 1080 + 1920 + 1080 + 0 + 0 + 1920 + 1080 + 0 + 0 + + 42 + 0 + + urn:smpte:ul:060e2b34.0401010d.04010202.03010114 + 16/9 + urn:smpte:ul:060e2b34.0401010d.0d010301.020c0600 + urn:smpte:ul:060e2b34.04010101.04010101.01020000 + urn:smpte:ul:060e2b34.04010101.04010101.02020000 + urn:smpte:ul:060e2b34.04010106.04010101.03030000 + 1080 + 1920 + 0 + 0 + 0 + + + 260 + 1920 + 1080 + 0 + 0 + 1920 + 1080 + 0 + 0 + 3 + + + 9 + 1 + 1 + + + 9 + 2 + 1 + + + 9 + 2 + 1 + + + 01040001000503030000778888888888 + + + CompLuma + 10 + + + CompColorDifferenceU + 10 + + + CompColorDifferenceV + 10 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + urn:uuid:59d0930e-ab77-48f3-b54b-ce2d56f1fad0 + + + urn:uuid:2b8c2807-b399-4ad4-bbe2-a2aaa0e48f85 + 2 + + + + urn:uuid:c1fdd909-dfc4-49f3-be93-ff008b86e7a8 + + urn:uuid:488e6614-dfaa-409f-bfc0-0bf44eb12810 + + + urn:uuid:9f7fb4cb-d479-4a1a-82dd-0518ad30d399 + + + urn:uuid:a70a2c16-d6ca-4500-b788-2554234b0670 + urn:uuid:d4e19034-9f05-4494-b758-cc16b127e28e + 1 + 2 + + urn:smpte:ul:060e2b34.0401010d.04040212.00000000 + + + + urn:uuid:d27cfe25-1d9b-4e0d-8831-5b1f7f066b80 + urn:uuid:d4e19034-9f05-4494-b758-cc16b127e28e + + urn:smpte:ul:060e2b34.04010101.0e210101.01010101 + urn:smpte:ul:060e2b34.04010101.0e210101.01020101 + + + + urn:uuid:e093f29c-baba-4e76-95b5-0f3c724d3c1f + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:6501b722-a96c-4da4-a0d6-e31fb4cee1af + MGASf + MGA Soundfield + Default + PRM + FCMP + urn:uuid:d4e19034-9f05-4494-b758-cc16b127e28e + APR_1001 + + + urn:uuid:d34c1262-fe34-4eb0-bf31-ecb2ec4df0e1 + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:9f74f796-b02e-428d-8c9d-2f58b3d0e29d + MGASf + MGA Soundfield + Dialog+ + PRM + FCMP + urn:uuid:d4e19034-9f05-4494-b758-cc16b127e28e + APR_1002 + + + urn:uuid:ece3a699-7a56-466f-a702-dac51e73429c + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:04b7d9f6-84da-4c45-9b4a-d8481fd8dd6d + MGASf + MGA Soundfield + Audio Description + PRM + FCMP + urn:uuid:d4e19034-9f05-4494-b758-cc16b127e28e + APR_1003 + + + urn:uuid:acd538a9-00ac-40aa-afc6-02fa7b6d2b63 + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:558625e7-353b-4601-aebb-49b2aad50b72 + MGASf + MGA Soundfield + Commentary Off + PRM + FCMP + urn:uuid:d4e19034-9f05-4494-b758-cc16b127e28e + APR_1004 + + + 2 + 50/1 + 10 + urn:smpte:ul:060e2b34.0401010d.0d010301.02250200 + 48000/1 + False + 5 + 24 + urn:smpte:ul:060e2b34.0401010d.04020201.02010000 + 15 + 720000 + + + + 50 1 + + http://www.smpte-ra.org/ns/2067-21/2021 + + urn:uuid:347920ac-14e3-4f53-9747-3e4443080724 + urn:uuid:8e5dd37e-3d39-47bf-81e8-8c7fe7931343 + http://www.smpte-ra.org/ns/2067-203/2022#Operational-Mode-A + + + + urn:uuid:36b7ed01-3a8d-44fc-82b9-b24a8c97d28e + + + urn:uuid:fb41c6af-83e4-47a2-b582-75ebf9e61949 + urn:uuid:07020f19-cc67-4e2c-8441-328540131b60 + + + urn:uuid:6239a527-8aaf-46e0-a515-74ea0545dce9 + 500 + 10 + urn:uuid:d98ba47f-6ecf-4902-bc82-78234af5e29e + urn:uuid:db8a1a5b-ad90-44cf-bf25-455dcce73ab5 + + + + + urn:uuid:2bc6dd64-0b48-4869-98ba-3e2c2a4f6a8f + urn:uuid:8e5dd37e-3d39-47bf-81e8-8c7fe7931343 + + + urn:uuid:d4507026-5d7d-4890-bd72-3f50d3dff211 + 50 1 + 10 + 10 + urn:uuid:c1fdd909-dfc4-49f3-be93-ff008b86e7a8 + urn:uuid:395f0cdf-461c-4366-8893-d2e5ab07d9e7 + + + + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATitleVersion_missing/PKL_db4b9cf3-c53f-4751-8dd6-deada93c3980.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATitleVersion_missing/PKL_db4b9cf3-c53f-4751-8dd6-deada93c3980.xml new file mode 100644 index 00000000..8dffcbf6 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATitleVersion_missing/PKL_db4b9cf3-c53f-4751-8dd6-deada93c3980.xml @@ -0,0 +1,25 @@ + + + urn:uuid:db4b9cf3-c53f-4751-8dd6-deada93c3980 + 2024-01-19T15:58:39Z + WR + IMF-Tool 1.9.371 + + + urn:uuid:395f0cdf-461c-4366-8893-d2e5ab07d9e7 + GFiyZO1Mzd6d1kk2oTlXoZiUnnE= + 366872 + application/mxf + ST2067-203_audio_track_file__non_compliant_MCATitleVersion_missing.mxf + + + + urn:uuid:609b7a45-5f0d-483a-9282-9329461a7543 + kvekqJkc5RdRsJpjnRSZdtSKje4= + 15730 + text/xml + CPL_609b7a45-5f0d-483a-9282-9329461a7543.xml + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATitleVersion_missing/ST2067-203_audio_track_file__non_compliant_MCATitleVersion_missing.mxf b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATitleVersion_missing/ST2067-203_audio_track_file__non_compliant_MCATitleVersion_missing.mxf new file mode 100755 index 00000000..29e2bedf Binary files /dev/null and b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATitleVersion_missing/ST2067-203_audio_track_file__non_compliant_MCATitleVersion_missing.mxf differ diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATitleVersion_missing/VOLINDEX.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATitleVersion_missing/VOLINDEX.xml new file mode 100644 index 00000000..0ebe8e85 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATitleVersion_missing/VOLINDEX.xml @@ -0,0 +1,4 @@ + + + 1 + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATitle_missing/ASSETMAP.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATitle_missing/ASSETMAP.xml new file mode 100644 index 00000000..83839928 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATitle_missing/ASSETMAP.xml @@ -0,0 +1,35 @@ + + + urn:uuid:62af331a-b949-496f-bf34-1dcc6dc2d882 + IMF-Tool 1.9.371 + 1 + 2024-01-19T15:58:05Z + WR + + + urn:uuid:eae9855b-8dca-4913-9273-65c0cb424b54 + + + ST2067-203_audio_track_file__non_compliant_MCATitle_missing.mxf + + + + + urn:uuid:f1033b99-37e5-4003-8733-eb27da75a63a + + + CPL_f1033b99-37e5-4003-8733-eb27da75a63a.xml + + + + + urn:uuid:8637d2a2-c7dc-47c4-ad81-f9a4b85ac46f + true + + + PKL_8637d2a2-c7dc-47c4-ad81-f9a4b85ac46f.xml + + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATitle_missing/CPL_f1033b99-37e5-4003-8733-eb27da75a63a.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATitle_missing/CPL_f1033b99-37e5-4003-8733-eb27da75a63a.xml new file mode 100644 index 00000000..734580b0 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATitle_missing/CPL_f1033b99-37e5-4003-8733-eb27da75a63a.xml @@ -0,0 +1,256 @@ + + + urn:uuid:f1033b99-37e5-4003-8733-eb27da75a63a + S-ADM Test + 2024-01-19T15:58:04Z + Wolfgang Ruppel + IMF-Tool 1.9.371 + Fraunhofer IIS + S-ADM + test + + + urn:uuid:623e115c-fce6-4bd3-9fc3-3469cb9b0dfd + S-ADM + + + + + urn:uuid:ef4efa00-c35b-48bd-9eb7-6cce30e81028 + + 10 + 2 + 1 + 64 + 940 + 897 + CoSiting + 50/1 + FullFrame + 1920 + 1080 + 1920 + 1080 + 0 + 0 + 1920 + 1080 + 0 + 0 + + 42 + 0 + + urn:smpte:ul:060e2b34.0401010d.04010202.03010114 + 16/9 + urn:smpte:ul:060e2b34.0401010d.0d010301.020c0600 + urn:smpte:ul:060e2b34.04010101.04010101.01020000 + urn:smpte:ul:060e2b34.04010101.04010101.02020000 + urn:smpte:ul:060e2b34.04010106.04010101.03030000 + 1080 + 1920 + 0 + 0 + 0 + + + 260 + 1920 + 1080 + 0 + 0 + 1920 + 1080 + 0 + 0 + 3 + + + 9 + 1 + 1 + + + 9 + 2 + 1 + + + 9 + 2 + 1 + + + 01040001000503030000778888888888 + + + CompLuma + 10 + + + CompColorDifferenceU + 10 + + + CompColorDifferenceV + 10 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + urn:uuid:59d0930e-ab77-48f3-b54b-ce2d56f1fad0 + + + urn:uuid:2b8c2807-b399-4ad4-bbe2-a2aaa0e48f85 + 2 + + + + urn:uuid:1155544b-7bb4-447c-a9d7-2c8aa6eb50a1 + + urn:uuid:24b99c80-dba9-4115-8434-a28ddab608cf + + + urn:uuid:7749531e-b6f7-4690-80f5-3545574f1043 + + + urn:uuid:fad4747d-5cbf-439c-9497-7afe9653bfff + urn:uuid:b083fa36-4e91-48c0-bdda-b0589727be96 + 1 + 2 + + urn:smpte:ul:060e2b34.0401010d.04040212.00000000 + + + + urn:uuid:62c23a78-7b2a-4686-9b30-a88da5f75f7c + urn:uuid:b083fa36-4e91-48c0-bdda-b0589727be96 + + urn:smpte:ul:060e2b34.04010101.0e210101.01010101 + urn:smpte:ul:060e2b34.04010101.0e210101.01020101 + + + + urn:uuid:db8c3c52-5182-44e1-a1d9-73d1e12534e9 + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:e271a0f3-078d-468a-860f-ec1be7686855 + MGASf + MGA Soundfield + n/a + PRM + FCMP + urn:uuid:b083fa36-4e91-48c0-bdda-b0589727be96 + APR_1001 + + + urn:uuid:d2eb4e8a-5a4f-417c-b5ec-d2eee704c3b7 + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:74513f55-256d-4d6a-9c29-441bd2e8246b + MGASf + MGA Soundfield + n/a + PRM + FCMP + urn:uuid:b083fa36-4e91-48c0-bdda-b0589727be96 + APR_1002 + + + urn:uuid:f5d986e2-545a-436a-a202-f84294fed198 + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:525d2c5b-a537-41b1-8d04-2df8764ff9c8 + MGASf + MGA Soundfield + n/a + PRM + FCMP + urn:uuid:b083fa36-4e91-48c0-bdda-b0589727be96 + APR_1003 + + + urn:uuid:308e385b-3cad-4efb-b6f4-5b7005bc637d + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:a90cfe47-c337-47f0-a5b7-5b932e882b9d + MGASf + MGA Soundfield + n/a + PRM + FCMP + urn:uuid:b083fa36-4e91-48c0-bdda-b0589727be96 + APR_1004 + + + 2 + 50/1 + 10 + urn:smpte:ul:060e2b34.0401010d.0d010301.02250200 + 48000/1 + False + 5 + 24 + urn:smpte:ul:060e2b34.0401010d.04020201.02010000 + 15 + 720000 + + + + 50 1 + + http://www.smpte-ra.org/ns/2067-21/2021 + + urn:uuid:347920ac-14e3-4f53-9747-3e4443080724 + urn:uuid:7d3b42f6-4f7a-491e-a3d2-61e270238dad + http://www.smpte-ra.org/ns/2067-203/2022#Operational-Mode-A + + + + urn:uuid:5553d9aa-4d8c-4f93-9a3a-04cd4b04e2cd + + + urn:uuid:9bf36b6c-10dc-4802-bacf-64d767064e26 + urn:uuid:4b9e3bd6-5057-444a-8428-99e411f742e8 + + + urn:uuid:4e47f31c-3e6b-4a11-98a7-0f7a28ec7aaf + 500 + 10 + urn:uuid:ef4efa00-c35b-48bd-9eb7-6cce30e81028 + urn:uuid:db8a1a5b-ad90-44cf-bf25-455dcce73ab5 + + + + + urn:uuid:e7f9687c-504e-4cae-9e53-07acdfaf4129 + urn:uuid:7d3b42f6-4f7a-491e-a3d2-61e270238dad + + + urn:uuid:5718c12a-905b-41aa-a658-8cd64e040a05 + 50 1 + 10 + 10 + urn:uuid:1155544b-7bb4-447c-a9d7-2c8aa6eb50a1 + urn:uuid:eae9855b-8dca-4913-9273-65c0cb424b54 + + + + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATitle_missing/PKL_8637d2a2-c7dc-47c4-ad81-f9a4b85ac46f.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATitle_missing/PKL_8637d2a2-c7dc-47c4-ad81-f9a4b85ac46f.xml new file mode 100644 index 00000000..eeebf336 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATitle_missing/PKL_8637d2a2-c7dc-47c4-ad81-f9a4b85ac46f.xml @@ -0,0 +1,25 @@ + + + urn:uuid:8637d2a2-c7dc-47c4-ad81-f9a4b85ac46f + 2024-01-19T15:58:05Z + WR + IMF-Tool 1.9.371 + + + urn:uuid:eae9855b-8dca-4913-9273-65c0cb424b54 + ZyjiJ0lHtIZuzvS4TPbtYrKQWtk= + 366872 + application/mxf + ST2067-203_audio_track_file__non_compliant_MCATitle_missing.mxf + + + + urn:uuid:f1033b99-37e5-4003-8733-eb27da75a63a + HXdmDLkrz+yLluKKG0ad1CJI4dY= + 15753 + text/xml + CPL_f1033b99-37e5-4003-8733-eb27da75a63a.xml + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATitle_missing/ST2067-203_audio_track_file__non_compliant_MCATitle_missing.mxf b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATitle_missing/ST2067-203_audio_track_file__non_compliant_MCATitle_missing.mxf new file mode 100755 index 00000000..314b18f6 Binary files /dev/null and b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATitle_missing/ST2067-203_audio_track_file__non_compliant_MCATitle_missing.mxf differ diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATitle_missing/VOLINDEX.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATitle_missing/VOLINDEX.xml new file mode 100644 index 00000000..0ebe8e85 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCATitle_missing/VOLINDEX.xml @@ -0,0 +1,4 @@ + + + 1 + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCAUseClass_missing/ASSETMAP.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCAUseClass_missing/ASSETMAP.xml new file mode 100644 index 00000000..332b0887 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCAUseClass_missing/ASSETMAP.xml @@ -0,0 +1,35 @@ + + + urn:uuid:5005eaeb-d9dc-427c-b952-a1d92b1988f6 + IMF-Tool 1.9.371 + 1 + 2024-01-19T15:59:18Z + WR + + + urn:uuid:45f76b23-af22-41bf-938d-aec9ee4e3420 + + + ST2067-203_audio_track_file__non_compliant_MCAUseClass_missing.mxf + + + + + urn:uuid:81cb7798-6ca0-4bc4-8470-4dbdef679a9f + + + CPL_81cb7798-6ca0-4bc4-8470-4dbdef679a9f.xml + + + + + urn:uuid:a96e2ffa-7b39-49e2-a9e0-cb6dfe644f0c + true + + + PKL_a96e2ffa-7b39-49e2-a9e0-cb6dfe644f0c.xml + + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCAUseClass_missing/CPL_81cb7798-6ca0-4bc4-8470-4dbdef679a9f.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCAUseClass_missing/CPL_81cb7798-6ca0-4bc4-8470-4dbdef679a9f.xml new file mode 100644 index 00000000..62897855 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCAUseClass_missing/CPL_81cb7798-6ca0-4bc4-8470-4dbdef679a9f.xml @@ -0,0 +1,256 @@ + + + urn:uuid:81cb7798-6ca0-4bc4-8470-4dbdef679a9f + S-ADM Test + 2024-01-19T15:59:16Z + Wolfgang Ruppel + IMF-Tool 1.9.371 + Fraunhofer IIS + S-ADM + test + + + urn:uuid:623e115c-fce6-4bd3-9fc3-3469cb9b0dfd + S-ADM + + + + + urn:uuid:19ba7192-c350-46f7-a926-a90f9fe9fb1d + + 10 + 2 + 1 + 64 + 940 + 897 + CoSiting + 50/1 + FullFrame + 1920 + 1080 + 1920 + 1080 + 0 + 0 + 1920 + 1080 + 0 + 0 + + 42 + 0 + + urn:smpte:ul:060e2b34.0401010d.04010202.03010114 + 16/9 + urn:smpte:ul:060e2b34.0401010d.0d010301.020c0600 + urn:smpte:ul:060e2b34.04010101.04010101.01020000 + urn:smpte:ul:060e2b34.04010101.04010101.02020000 + urn:smpte:ul:060e2b34.04010106.04010101.03030000 + 1080 + 1920 + 0 + 0 + 0 + + + 260 + 1920 + 1080 + 0 + 0 + 1920 + 1080 + 0 + 0 + 3 + + + 9 + 1 + 1 + + + 9 + 2 + 1 + + + 9 + 2 + 1 + + + 01040001000503030000778888888888 + + + CompLuma + 10 + + + CompColorDifferenceU + 10 + + + CompColorDifferenceV + 10 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + urn:uuid:59d0930e-ab77-48f3-b54b-ce2d56f1fad0 + + + urn:uuid:2b8c2807-b399-4ad4-bbe2-a2aaa0e48f85 + 2 + + + + urn:uuid:d063b867-d5a3-4e8d-97e6-920a8337193d + + urn:uuid:bd1874c7-8d2b-4f7e-ab44-0e1e927c5a9f + + + urn:uuid:745a7185-339b-494e-b443-865ee25f3c54 + + + urn:uuid:eeaf3203-71b5-4f23-930c-b145edfb340d + urn:uuid:d390da28-aa15-422f-ae7d-5a5a87a5ca90 + 1 + 2 + + urn:smpte:ul:060e2b34.0401010d.04040212.00000000 + + + + urn:uuid:ea4ab09b-7354-444a-8b5e-d29db7270b76 + urn:uuid:d390da28-aa15-422f-ae7d-5a5a87a5ca90 + + urn:smpte:ul:060e2b34.04010101.0e210101.01010101 + urn:smpte:ul:060e2b34.04010101.0e210101.01020101 + + + + urn:uuid:e3c02c89-819e-4911-b3ee-c9c12b28f2fe + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:90cada1a-fd9f-4658-819d-6fb2af9ba3d2 + MGASf + MGA Soundfield + Default + n/a + PRM + urn:uuid:d390da28-aa15-422f-ae7d-5a5a87a5ca90 + APR_1001 + + + urn:uuid:90e7274b-24f8-4f05-a5b1-b85071845b51 + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:5f9e9e10-53f2-412e-9a7a-e2463544f300 + MGASf + MGA Soundfield + Dialog+ + n/a + PRM + urn:uuid:d390da28-aa15-422f-ae7d-5a5a87a5ca90 + APR_1002 + + + urn:uuid:edd4629e-2606-47f2-b9dc-ff26f1fef75c + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:79602708-b4f3-42c0-9387-5132c3a5ab48 + MGASf + MGA Soundfield + Audio Description + n/a + PRM + urn:uuid:d390da28-aa15-422f-ae7d-5a5a87a5ca90 + APR_1003 + + + urn:uuid:30dadd7e-90ae-42e7-89e3-3f5f569db64d + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:57a6b63f-6ac6-4c59-857a-9fd24304fb16 + MGASf + MGA Soundfield + Commentary Off + n/a + PRM + urn:uuid:d390da28-aa15-422f-ae7d-5a5a87a5ca90 + APR_1004 + + + 2 + 50/1 + 10 + urn:smpte:ul:060e2b34.0401010d.0d010301.02250200 + 48000/1 + False + 5 + 24 + urn:smpte:ul:060e2b34.0401010d.04020201.02010000 + 15 + 720000 + + + + 50 1 + + http://www.smpte-ra.org/ns/2067-21/2021 + + urn:uuid:347920ac-14e3-4f53-9747-3e4443080724 + urn:uuid:23ab8061-357e-4900-86d4-e6ea419b328e + http://www.smpte-ra.org/ns/2067-203/2022#Operational-Mode-A + + + + urn:uuid:4427f903-43e4-4674-8535-155d1f0edde9 + + + urn:uuid:4442e96c-30c6-42c4-bd51-ca9e1379c4eb + urn:uuid:6636dfe9-ac84-458c-9f5f-2f37a0b19402 + + + urn:uuid:0674a6e2-1066-4959-ae17-de96882bb08e + 500 + 10 + urn:uuid:19ba7192-c350-46f7-a926-a90f9fe9fb1d + urn:uuid:db8a1a5b-ad90-44cf-bf25-455dcce73ab5 + + + + + urn:uuid:1940dc2d-eff5-45c3-99c2-be0ecfb70c2f + urn:uuid:23ab8061-357e-4900-86d4-e6ea419b328e + + + urn:uuid:4b666188-bfe8-48bc-ac1a-1084d35a02b4 + 50 1 + 10 + 10 + urn:uuid:d063b867-d5a3-4e8d-97e6-920a8337193d + urn:uuid:45f76b23-af22-41bf-938d-aec9ee4e3420 + + + + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCAUseClass_missing/PKL_a96e2ffa-7b39-49e2-a9e0-cb6dfe644f0c.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCAUseClass_missing/PKL_a96e2ffa-7b39-49e2-a9e0-cb6dfe644f0c.xml new file mode 100644 index 00000000..8bafeb30 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCAUseClass_missing/PKL_a96e2ffa-7b39-49e2-a9e0-cb6dfe644f0c.xml @@ -0,0 +1,25 @@ + + + urn:uuid:a96e2ffa-7b39-49e2-a9e0-cb6dfe644f0c + 2024-01-19T15:59:18Z + WR + IMF-Tool 1.9.371 + + + urn:uuid:45f76b23-af22-41bf-938d-aec9ee4e3420 + uJYMca4amCB8332PRP9uYJNz7/c= + 366872 + application/mxf + ST2067-203_audio_track_file__non_compliant_MCAUseClass_missing.mxf + + + + urn:uuid:81cb7798-6ca0-4bc4-8470-4dbdef679a9f + SAsnvSYH3WNQjsFL1Ytzk8Zr+jE= + 15758 + text/xml + CPL_81cb7798-6ca0-4bc4-8470-4dbdef679a9f.xml + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCAUseClass_missing/ST2067-203_audio_track_file__non_compliant_MCAUseClass_missing.mxf b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCAUseClass_missing/ST2067-203_audio_track_file__non_compliant_MCAUseClass_missing.mxf new file mode 100755 index 00000000..efda6922 Binary files /dev/null and b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCAUseClass_missing/ST2067-203_audio_track_file__non_compliant_MCAUseClass_missing.mxf differ diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCAUseClass_missing/VOLINDEX.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCAUseClass_missing/VOLINDEX.xml new file mode 100644 index 00000000..0ebe8e85 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCAUseClass_missing/VOLINDEX.xml @@ -0,0 +1,4 @@ + + + 1 + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCAUseClass_wrong/ASSETMAP.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCAUseClass_wrong/ASSETMAP.xml new file mode 100644 index 00000000..762f0c70 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCAUseClass_wrong/ASSETMAP.xml @@ -0,0 +1,35 @@ + + + urn:uuid:090a8441-f50f-4b0d-951b-3eb917890eb3 + IMF-Tool 1.9.371 + 1 + 2024-01-19T15:59:53Z + WR + + + urn:uuid:68f8c169-170b-4812-82db-0651bf748534 + + + ST2067-203_audio_track_file__non_compliant_MCAUseClass_wrong.mxf + + + + + urn:uuid:8c90fed7-7225-4d15-a611-6e49ccb78180 + + + CPL_8c90fed7-7225-4d15-a611-6e49ccb78180.xml + + + + + urn:uuid:dfca8056-c3a7-469a-baaa-65b34ed1bab3 + true + + + PKL_dfca8056-c3a7-469a-baaa-65b34ed1bab3.xml + + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCAUseClass_wrong/CPL_8c90fed7-7225-4d15-a611-6e49ccb78180.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCAUseClass_wrong/CPL_8c90fed7-7225-4d15-a611-6e49ccb78180.xml new file mode 100644 index 00000000..758e9762 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCAUseClass_wrong/CPL_8c90fed7-7225-4d15-a611-6e49ccb78180.xml @@ -0,0 +1,260 @@ + + + urn:uuid:8c90fed7-7225-4d15-a611-6e49ccb78180 + S-ADM Test + 2024-01-19T15:59:51Z + Wolfgang Ruppel + IMF-Tool 1.9.371 + Fraunhofer IIS + S-ADM + test + + + urn:uuid:623e115c-fce6-4bd3-9fc3-3469cb9b0dfd + S-ADM + + + + + urn:uuid:1930bd49-53e4-49ba-ba4d-d7364d10971d + + 10 + 2 + 1 + 64 + 940 + 897 + CoSiting + 50/1 + FullFrame + 1920 + 1080 + 1920 + 1080 + 0 + 0 + 1920 + 1080 + 0 + 0 + + 42 + 0 + + urn:smpte:ul:060e2b34.0401010d.04010202.03010114 + 16/9 + urn:smpte:ul:060e2b34.0401010d.0d010301.020c0600 + urn:smpte:ul:060e2b34.04010101.04010101.01020000 + urn:smpte:ul:060e2b34.04010101.04010101.02020000 + urn:smpte:ul:060e2b34.04010106.04010101.03030000 + 1080 + 1920 + 0 + 0 + 0 + + + 260 + 1920 + 1080 + 0 + 0 + 1920 + 1080 + 0 + 0 + 3 + + + 9 + 1 + 1 + + + 9 + 2 + 1 + + + 9 + 2 + 1 + + + 01040001000503030000778888888888 + + + CompLuma + 10 + + + CompColorDifferenceU + 10 + + + CompColorDifferenceV + 10 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + urn:uuid:59d0930e-ab77-48f3-b54b-ce2d56f1fad0 + + + urn:uuid:2b8c2807-b399-4ad4-bbe2-a2aaa0e48f85 + 2 + + + + urn:uuid:74da5b73-a517-4fc9-92f1-c18bc17f5574 + + urn:uuid:f6ea1104-a44d-47cf-a567-80843ac54daa + + + urn:uuid:34f8918a-0842-49a2-97c8-7656aac65c48 + + + urn:uuid:2699506c-0368-49c7-800a-b9769524ddf1 + urn:uuid:36778558-9d83-42ff-ae80-981408e35a4e + 1 + 2 + + urn:smpte:ul:060e2b34.0401010d.04040212.00000000 + + + + urn:uuid:aa92d391-8609-4c50-8afa-c2d11fb98ca0 + urn:uuid:36778558-9d83-42ff-ae80-981408e35a4e + + urn:smpte:ul:060e2b34.04010101.0e210101.01010101 + urn:smpte:ul:060e2b34.04010101.0e210101.01020101 + + + + urn:uuid:6dde30ba-4eec-4850-8230-c8c824ec2e05 + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:18b51ba3-8e39-440c-8dcf-648827180763 + MGASf + MGA Soundfield + Default + n/a + PRM + KOLP + urn:uuid:36778558-9d83-42ff-ae80-981408e35a4e + APR_1001 + + + urn:uuid:5cb5bbe8-571a-4116-b486-3efcc068c811 + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:885b4ab8-7128-4d35-a93b-a91e2fa28594 + MGASf + MGA Soundfield + Dialog+ + n/a + PRM + KOLP + urn:uuid:36778558-9d83-42ff-ae80-981408e35a4e + APR_1002 + + + urn:uuid:a590095b-dedc-4e35-ae15-da4f5214a0f6 + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:f223e418-c4d8-414b-8d1c-5ef7bcab5953 + MGASf + MGA Soundfield + Audio Description + n/a + PRM + KOLP + urn:uuid:36778558-9d83-42ff-ae80-981408e35a4e + APR_1003 + + + urn:uuid:b429f096-61bd-417d-bd35-91e1761a3925 + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:03040083-4412-465f-860c-b775ad9a4851 + MGASf + MGA Soundfield + Commentary Off + n/a + PRM + KOLP + urn:uuid:36778558-9d83-42ff-ae80-981408e35a4e + APR_1004 + + + 2 + 50/1 + 10 + urn:smpte:ul:060e2b34.0401010d.0d010301.02250200 + 48000/1 + False + 5 + 24 + urn:smpte:ul:060e2b34.0401010d.04020201.02010000 + 15 + 720000 + + + + 50 1 + + http://www.smpte-ra.org/ns/2067-21/2021 + + urn:uuid:347920ac-14e3-4f53-9747-3e4443080724 + urn:uuid:e92f95bc-380d-4278-8c1f-2a81b19646fd + http://www.smpte-ra.org/ns/2067-203/2022#Operational-Mode-A + + + + urn:uuid:32fca10b-f513-4386-b1fb-0a004a2ed895 + + + urn:uuid:88d8b458-0d5e-4745-8f32-b6122f980f50 + urn:uuid:c65f41a5-2cd7-4a04-b9a8-c77e76812430 + + + urn:uuid:5bc8db4e-c0e4-4bd4-a2ef-ad5ede13f37c + 500 + 10 + urn:uuid:1930bd49-53e4-49ba-ba4d-d7364d10971d + urn:uuid:db8a1a5b-ad90-44cf-bf25-455dcce73ab5 + + + + + urn:uuid:49655695-1e4e-4080-b162-6a931e81eab3 + urn:uuid:e92f95bc-380d-4278-8c1f-2a81b19646fd + + + urn:uuid:65af79b9-5d8e-46b9-b25c-57826af040f5 + 50 1 + 10 + 10 + urn:uuid:74da5b73-a517-4fc9-92f1-c18bc17f5574 + urn:uuid:68f8c169-170b-4812-82db-0651bf748534 + + + + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCAUseClass_wrong/PKL_dfca8056-c3a7-469a-baaa-65b34ed1bab3.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCAUseClass_wrong/PKL_dfca8056-c3a7-469a-baaa-65b34ed1bab3.xml new file mode 100644 index 00000000..904b3559 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCAUseClass_wrong/PKL_dfca8056-c3a7-469a-baaa-65b34ed1bab3.xml @@ -0,0 +1,25 @@ + + + urn:uuid:dfca8056-c3a7-469a-baaa-65b34ed1bab3 + 2024-01-19T15:59:53Z + WR + IMF-Tool 1.9.371 + + + urn:uuid:68f8c169-170b-4812-82db-0651bf748534 + ieJ6+Ze8rhdYXrMBQRetei0bjz4= + 366872 + application/mxf + ST2067-203_audio_track_file__non_compliant_MCAUseClass_wrong.mxf + + + + urn:uuid:8c90fed7-7225-4d15-a611-6e49ccb78180 + fzTFsG/y+io7AKJozQUXDus6UyM= + 15958 + text/xml + CPL_8c90fed7-7225-4d15-a611-6e49ccb78180.xml + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCAUseClass_wrong/ST2067-203_audio_track_file__non_compliant_MCAUseClass_wrong.mxf b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCAUseClass_wrong/ST2067-203_audio_track_file__non_compliant_MCAUseClass_wrong.mxf new file mode 100755 index 00000000..c132da04 Binary files /dev/null and b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCAUseClass_wrong/ST2067-203_audio_track_file__non_compliant_MCAUseClass_wrong.mxf differ diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCAUseClass_wrong/VOLINDEX.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCAUseClass_wrong/VOLINDEX.xml new file mode 100644 index 00000000..0ebe8e85 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_MCAUseClass_wrong/VOLINDEX.xml @@ -0,0 +1,4 @@ + + + 1 + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_SADMAudioMetadataSubDescriptor_missing/ASSETMAP.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_SADMAudioMetadataSubDescriptor_missing/ASSETMAP.xml new file mode 100644 index 00000000..11c9ad4f --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_SADMAudioMetadataSubDescriptor_missing/ASSETMAP.xml @@ -0,0 +1,35 @@ + + + urn:uuid:aa4f0679-f6fe-4080-8877-8259f0f78b7c + IMF-Tool 1.9.371 + 1 + 2024-01-19T16:01:54Z + WR + + + urn:uuid:3097005c-30e5-457b-a93d-dae3dba7567e + + + ST2067-203_audio_track_file__non_compliant_SADMAudioMetadataSubDescriptor_missing.mxf + + + + + urn:uuid:bb130309-e1a4-4582-8266-a51ecf11e452 + + + CPL_bb130309-e1a4-4582-8266-a51ecf11e452.xml + + + + + urn:uuid:92db78ce-c489-4a6f-ab9e-ffea5effda99 + true + + + PKL_92db78ce-c489-4a6f-ab9e-ffea5effda99.xml + + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_SADMAudioMetadataSubDescriptor_missing/CPL_bb130309-e1a4-4582-8266-a51ecf11e452.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_SADMAudioMetadataSubDescriptor_missing/CPL_bb130309-e1a4-4582-8266-a51ecf11e452.xml new file mode 100644 index 00000000..bd9fc9f2 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_SADMAudioMetadataSubDescriptor_missing/CPL_bb130309-e1a4-4582-8266-a51ecf11e452.xml @@ -0,0 +1,252 @@ + + + urn:uuid:bb130309-e1a4-4582-8266-a51ecf11e452 + S-ADM Test + 2024-01-19T16:01:52Z + Wolfgang Ruppel + IMF-Tool 1.9.371 + Fraunhofer IIS + S-ADM + test + + + urn:uuid:623e115c-fce6-4bd3-9fc3-3469cb9b0dfd + S-ADM + + + + + urn:uuid:fde8dd10-43ef-45a7-9153-66129958ebda + + 10 + 2 + 1 + 64 + 940 + 897 + CoSiting + 50/1 + FullFrame + 1920 + 1080 + 1920 + 1080 + 0 + 0 + 1920 + 1080 + 0 + 0 + + 42 + 0 + + urn:smpte:ul:060e2b34.0401010d.04010202.03010114 + 16/9 + urn:smpte:ul:060e2b34.0401010d.0d010301.020c0600 + urn:smpte:ul:060e2b34.04010101.04010101.01020000 + urn:smpte:ul:060e2b34.04010101.04010101.02020000 + urn:smpte:ul:060e2b34.04010106.04010101.03030000 + 1080 + 1920 + 0 + 0 + 0 + + + 260 + 1920 + 1080 + 0 + 0 + 1920 + 1080 + 0 + 0 + 3 + + + 9 + 1 + 1 + + + 9 + 2 + 1 + + + 9 + 2 + 1 + + + 01040001000503030000778888888888 + + + CompLuma + 10 + + + CompColorDifferenceU + 10 + + + CompColorDifferenceV + 10 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + urn:uuid:59d0930e-ab77-48f3-b54b-ce2d56f1fad0 + + + urn:uuid:2b8c2807-b399-4ad4-bbe2-a2aaa0e48f85 + 2 + + + + urn:uuid:7209b9c1-33e1-4472-8428-6778957fa2f2 + + urn:uuid:9e654c53-b614-47a8-959f-fbadf8e1f8af + + + urn:uuid:190151b6-35a1-4738-b93b-dbf85704cd75 + + + urn:uuid:23176f3e-0018-44b5-9818-091311b909ac + urn:uuid:f1a9caf7-71f5-42b9-ab83-e33c79d6b1bc + 1 + 2 + + urn:smpte:ul:060e2b34.0401010d.04040212.00000000 + + + + urn:uuid:bc932c75-0fd6-40c3-9530-5b55a4f18f95 + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:74b6e5e7-e4d5-489b-bab2-fef242be357c + MGASf + MGA Soundfield + Default + n/a + PRM + FCMP + urn:uuid:f1a9caf7-71f5-42b9-ab83-e33c79d6b1bc + APR_1001 + + + urn:uuid:906d9f1b-1ea1-4173-bb1a-0520ee1325e0 + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:53bedecb-c970-4b35-b471-3ad5d25e61d3 + MGASf + MGA Soundfield + Dialog+ + n/a + PRM + FCMP + urn:uuid:f1a9caf7-71f5-42b9-ab83-e33c79d6b1bc + APR_1002 + + + urn:uuid:8cde1c32-2b85-4c16-98b0-7b140dc9ce7f + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:bb394ae5-5c0f-4116-a6d8-4cc7879f7af3 + MGASf + MGA Soundfield + Audio Description + n/a + PRM + FCMP + urn:uuid:f1a9caf7-71f5-42b9-ab83-e33c79d6b1bc + APR_1003 + + + urn:uuid:dd5f39fb-72c8-453d-b90b-73125cfdd1a3 + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:1ae3ffb7-1b3c-4f11-9d42-28e8ffaa064c + MGASf + MGA Soundfield + Commentary Off + n/a + PRM + FCMP + urn:uuid:f1a9caf7-71f5-42b9-ab83-e33c79d6b1bc + APR_1004 + + + 2 + 50/1 + 10 + urn:smpte:ul:060e2b34.0401010d.0d010301.02250200 + 48000/1 + False + 5 + 24 + urn:smpte:ul:060e2b34.0401010d.04020201.02010000 + 15 + 720000 + + + + 50 1 + + http://www.smpte-ra.org/ns/2067-21/2021 + + urn:uuid:347920ac-14e3-4f53-9747-3e4443080724 + urn:uuid:dc6aca18-fb47-4b77-9cbe-048559774b84 + http://www.smpte-ra.org/ns/2067-203/2022#Operational-Mode-A + + + + urn:uuid:5487fc72-d287-4826-b523-1d5f8caf3c69 + + + urn:uuid:3bc20395-fc38-4c0c-ad3a-262eaeee9066 + urn:uuid:ae057c0d-a0e4-488b-a42f-cb16f7a75386 + + + urn:uuid:4a101d2f-1caa-4f72-bbb1-8264ebdfc781 + 500 + 10 + urn:uuid:fde8dd10-43ef-45a7-9153-66129958ebda + urn:uuid:db8a1a5b-ad90-44cf-bf25-455dcce73ab5 + + + + + urn:uuid:edb846e4-8226-40ab-b739-cc6cff51d972 + urn:uuid:dc6aca18-fb47-4b77-9cbe-048559774b84 + + + urn:uuid:bc27b368-801a-4356-92a9-5b27a498bc01 + 50 1 + 10 + 10 + urn:uuid:7209b9c1-33e1-4472-8428-6778957fa2f2 + urn:uuid:3097005c-30e5-457b-a93d-dae3dba7567e + + + + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_SADMAudioMetadataSubDescriptor_missing/PKL_92db78ce-c489-4a6f-ab9e-ffea5effda99.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_SADMAudioMetadataSubDescriptor_missing/PKL_92db78ce-c489-4a6f-ab9e-ffea5effda99.xml new file mode 100644 index 00000000..85226c37 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_SADMAudioMetadataSubDescriptor_missing/PKL_92db78ce-c489-4a6f-ab9e-ffea5effda99.xml @@ -0,0 +1,25 @@ + + + urn:uuid:92db78ce-c489-4a6f-ab9e-ffea5effda99 + 2024-01-19T16:01:54Z + WR + IMF-Tool 1.9.371 + + + urn:uuid:3097005c-30e5-457b-a93d-dae3dba7567e + XZ7yW//cOMq40UIAzoOx0KGxlFY= + 366872 + application/mxf + ST2067-203_audio_track_file__non_compliant_SADMAudioMetadataSubDescriptor_missing.mxf + + + + urn:uuid:bb130309-e1a4-4582-8266-a51ecf11e452 + 8MgJA5Yll8ImxMMqHV3t/T+TcKw= + 15410 + text/xml + CPL_bb130309-e1a4-4582-8266-a51ecf11e452.xml + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_SADMAudioMetadataSubDescriptor_missing/ST2067-203_audio_track_file__non_compliant_SADMAudioMetadataSubDescriptor_missing.mxf b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_SADMAudioMetadataSubDescriptor_missing/ST2067-203_audio_track_file__non_compliant_SADMAudioMetadataSubDescriptor_missing.mxf new file mode 100755 index 00000000..e9c962a8 Binary files /dev/null and b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_SADMAudioMetadataSubDescriptor_missing/ST2067-203_audio_track_file__non_compliant_SADMAudioMetadataSubDescriptor_missing.mxf differ diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_SADMAudioMetadataSubDescriptor_missing/VOLINDEX.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_SADMAudioMetadataSubDescriptor_missing/VOLINDEX.xml new file mode 100644 index 00000000..0ebe8e85 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_SADMAudioMetadataSubDescriptor_missing/VOLINDEX.xml @@ -0,0 +1,4 @@ + + + 1 + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_SADM_MGAAudioMetadataIdentifier_wrong/ASSETMAP.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_SADM_MGAAudioMetadataIdentifier_wrong/ASSETMAP.xml new file mode 100644 index 00000000..f7fba491 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_SADM_MGAAudioMetadataIdentifier_wrong/ASSETMAP.xml @@ -0,0 +1,35 @@ + + + urn:uuid:8ddc09bd-5383-463b-9468-ce57442d5027 + IMF-Tool 1.9.371 + 1 + 2024-01-19T16:00:50Z + WR + + + urn:uuid:b54814d2-23c3-4c93-9a6d-2f64445c5f27 + + + ST2067-203_audio_track_file__non_compliant_SADM_MGAAudioMetadataIdentifier_wrong.mxf + + + + + urn:uuid:46c69227-4fd4-437c-9c9a-bda4e9e90777 + + + CPL_46c69227-4fd4-437c-9c9a-bda4e9e90777.xml + + + + + urn:uuid:061951ef-2b62-4f14-b318-426b5f014bc6 + true + + + PKL_061951ef-2b62-4f14-b318-426b5f014bc6.xml + + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_SADM_MGAAudioMetadataIdentifier_wrong/CPL_46c69227-4fd4-437c-9c9a-bda4e9e90777.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_SADM_MGAAudioMetadataIdentifier_wrong/CPL_46c69227-4fd4-437c-9c9a-bda4e9e90777.xml new file mode 100644 index 00000000..80906457 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_SADM_MGAAudioMetadataIdentifier_wrong/CPL_46c69227-4fd4-437c-9c9a-bda4e9e90777.xml @@ -0,0 +1,260 @@ + + + urn:uuid:46c69227-4fd4-437c-9c9a-bda4e9e90777 + S-ADM Test + 2024-01-19T16:00:48Z + Wolfgang Ruppel + IMF-Tool 1.9.371 + Fraunhofer IIS + S-ADM + test + + + urn:uuid:623e115c-fce6-4bd3-9fc3-3469cb9b0dfd + S-ADM + + + + + urn:uuid:f3774766-4227-4d88-a74c-34496bfd9489 + + 10 + 2 + 1 + 64 + 940 + 897 + CoSiting + 50/1 + FullFrame + 1920 + 1080 + 1920 + 1080 + 0 + 0 + 1920 + 1080 + 0 + 0 + + 42 + 0 + + urn:smpte:ul:060e2b34.0401010d.04010202.03010114 + 16/9 + urn:smpte:ul:060e2b34.0401010d.0d010301.020c0600 + urn:smpte:ul:060e2b34.04010101.04010101.01020000 + urn:smpte:ul:060e2b34.04010101.04010101.02020000 + urn:smpte:ul:060e2b34.04010106.04010101.03030000 + 1080 + 1920 + 0 + 0 + 0 + + + 260 + 1920 + 1080 + 0 + 0 + 1920 + 1080 + 0 + 0 + 3 + + + 9 + 1 + 1 + + + 9 + 2 + 1 + + + 9 + 2 + 1 + + + 01040001000503030000778888888888 + + + CompLuma + 10 + + + CompColorDifferenceU + 10 + + + CompColorDifferenceV + 10 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + urn:uuid:59d0930e-ab77-48f3-b54b-ce2d56f1fad0 + + + urn:uuid:2b8c2807-b399-4ad4-bbe2-a2aaa0e48f85 + 2 + + + + urn:uuid:27794585-23d6-4cb3-b1ee-0c79cb7578a1 + + urn:uuid:3d6f639c-a88f-491c-ada9-565c16b8d139 + + + urn:uuid:47aca00b-ea1a-43bb-bace-8bd56c794a9d + + + urn:uuid:43a00bf3-b438-4682-8872-af3bc3d8ff02 + urn:uuid:e43daf94-27d7-49ad-b9d3-b99b290d244a + 1 + 3 + + urn:smpte:ul:060e2b34.04010101.0e210202.02020202 + + + + urn:uuid:8399f8a6-2a21-4317-bfed-ddd3929e11a2 + urn:uuid:e43daf94-27d7-49ad-b9d3-b99b290d244a + + urn:smpte:ul:060e2b34.04010101.0e210101.01010101 + urn:smpte:ul:060e2b34.04010101.0e210101.01020101 + + + + urn:uuid:1f4c4783-351c-4ee6-9815-951b632f510b + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:87edd971-82f3-42c2-8e93-7664c94443a2 + MGASf + MGA Soundfield + Default + n/a + PRM + FCMP + urn:uuid:e43daf94-27d7-49ad-b9d3-b99b290d244a + APR_1001 + + + urn:uuid:72ad1a26-fead-469c-8afe-9ad0fe31ce0a + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:5dd4ebe5-28fe-4cdf-9a3e-050adfe4b651 + MGASf + MGA Soundfield + Dialog+ + n/a + PRM + FCMP + urn:uuid:e43daf94-27d7-49ad-b9d3-b99b290d244a + APR_1002 + + + urn:uuid:12f3d06b-ee9a-4c27-90fd-ebee6d89daab + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:3f68870c-c2fd-4b32-9768-a6cab6130ca3 + MGASf + MGA Soundfield + Audio Description + n/a + PRM + FCMP + urn:uuid:e43daf94-27d7-49ad-b9d3-b99b290d244a + APR_1003 + + + urn:uuid:db910d71-aee6-43b2-a2a8-cab3f95b063c + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:455d8c45-3835-4e27-bde7-d923d7351826 + MGASf + MGA Soundfield + Commentary Off + n/a + PRM + FCMP + urn:uuid:e43daf94-27d7-49ad-b9d3-b99b290d244a + APR_1004 + + + 2 + 50/1 + 10 + urn:smpte:ul:060e2b34.0401010d.0d010301.02250200 + 48000/1 + False + 5 + 24 + urn:smpte:ul:060e2b34.0401010d.04020201.02010000 + 15 + 720000 + + + + 50 1 + + http://www.smpte-ra.org/ns/2067-21/2021 + + urn:uuid:347920ac-14e3-4f53-9747-3e4443080724 + urn:uuid:597fb09e-1db0-4619-960e-af52bb775b85 + http://www.smpte-ra.org/ns/2067-203/2022#Operational-Mode-A + + + + urn:uuid:e23e0890-aa68-4939-bb75-9f9f4e2b8332 + + + urn:uuid:0ae613be-e2f0-496e-9633-a5cc6e86dadd + urn:uuid:de76ef33-89a4-45b5-8cb9-b8efa13820a5 + + + urn:uuid:c7b6dbe2-1735-46fa-8c31-ae82315d08af + 500 + 10 + urn:uuid:f3774766-4227-4d88-a74c-34496bfd9489 + urn:uuid:db8a1a5b-ad90-44cf-bf25-455dcce73ab5 + + + + + urn:uuid:4baba35b-a77b-46e1-ac5b-cee3c74cc862 + urn:uuid:597fb09e-1db0-4619-960e-af52bb775b85 + + + urn:uuid:63934fd3-01b6-4da8-99cf-915a0e3b94ef + 50 1 + 10 + 10 + urn:uuid:27794585-23d6-4cb3-b1ee-0c79cb7578a1 + urn:uuid:b54814d2-23c3-4c93-9a6d-2f64445c5f27 + + + + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_SADM_MGAAudioMetadataIdentifier_wrong/PKL_061951ef-2b62-4f14-b318-426b5f014bc6.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_SADM_MGAAudioMetadataIdentifier_wrong/PKL_061951ef-2b62-4f14-b318-426b5f014bc6.xml new file mode 100644 index 00000000..aad5d384 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_SADM_MGAAudioMetadataIdentifier_wrong/PKL_061951ef-2b62-4f14-b318-426b5f014bc6.xml @@ -0,0 +1,25 @@ + + + urn:uuid:061951ef-2b62-4f14-b318-426b5f014bc6 + 2024-01-19T16:00:50Z + WR + IMF-Tool 1.9.371 + + + urn:uuid:b54814d2-23c3-4c93-9a6d-2f64445c5f27 + seTx4efyeq2AEX+A7mp1DTJbM5w= + 366972 + application/mxf + ST2067-203_audio_track_file__non_compliant_SADM_MGAAudioMetadataIdentifier_wrong.mxf + + + + urn:uuid:46c69227-4fd4-437c-9c9a-bda4e9e90777 + hAoYe1SPN6eujnwR3mcEurNeYso= + 15958 + text/xml + CPL_46c69227-4fd4-437c-9c9a-bda4e9e90777.xml + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_SADM_MGAAudioMetadataIdentifier_wrong/ST2067-203_audio_track_file__non_compliant_SADM_MGAAudioMetadataIdentifier_wrong.mxf b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_SADM_MGAAudioMetadataIdentifier_wrong/ST2067-203_audio_track_file__non_compliant_SADM_MGAAudioMetadataIdentifier_wrong.mxf new file mode 100755 index 00000000..e3722879 Binary files /dev/null and b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_SADM_MGAAudioMetadataIdentifier_wrong/ST2067-203_audio_track_file__non_compliant_SADM_MGAAudioMetadataIdentifier_wrong.mxf differ diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_SADM_MGAAudioMetadataIdentifier_wrong/VOLINDEX.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_SADM_MGAAudioMetadataIdentifier_wrong/VOLINDEX.xml new file mode 100644 index 00000000..0ebe8e85 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_SADM_MGAAudioMetadataIdentifier_wrong/VOLINDEX.xml @@ -0,0 +1,4 @@ + + + 1 + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_SADM_MGAMetadataIndex_wrong/ASSETMAP.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_SADM_MGAMetadataIndex_wrong/ASSETMAP.xml new file mode 100644 index 00000000..7a2e0456 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_SADM_MGAMetadataIndex_wrong/ASSETMAP.xml @@ -0,0 +1,35 @@ + + + urn:uuid:6dd22be8-6d98-43c0-94ef-0cb5525b013d + IMF-Tool 1.9.371 + 1 + 2024-01-19T16:01:22Z + WR + + + urn:uuid:80ab140e-b37a-4157-b22e-c2d65bfb42ea + + + ST2067-203_audio_track_file__non_compliant_SADM_MGAMetadataIndex_wrong.mxf + + + + + urn:uuid:a9b4c035-3db9-4971-b4ae-46e82742cf59 + + + CPL_a9b4c035-3db9-4971-b4ae-46e82742cf59.xml + + + + + urn:uuid:4e54173f-b59d-4837-aa29-72d851c9f8bb + true + + + PKL_4e54173f-b59d-4837-aa29-72d851c9f8bb.xml + + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_SADM_MGAMetadataIndex_wrong/CPL_a9b4c035-3db9-4971-b4ae-46e82742cf59.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_SADM_MGAMetadataIndex_wrong/CPL_a9b4c035-3db9-4971-b4ae-46e82742cf59.xml new file mode 100644 index 00000000..ec117e6a --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_SADM_MGAMetadataIndex_wrong/CPL_a9b4c035-3db9-4971-b4ae-46e82742cf59.xml @@ -0,0 +1,269 @@ + + + urn:uuid:a9b4c035-3db9-4971-b4ae-46e82742cf59 + S-ADM Test + 2024-01-19T16:01:21Z + Wolfgang Ruppel + IMF-Tool 1.9.371 + Fraunhofer IIS + S-ADM + test + + + urn:uuid:623e115c-fce6-4bd3-9fc3-3469cb9b0dfd + S-ADM + + + + + urn:uuid:058862b9-4cba-4a56-8382-813e007cd45d + + 10 + 2 + 1 + 64 + 940 + 897 + CoSiting + 50/1 + FullFrame + 1920 + 1080 + 1920 + 1080 + 0 + 0 + 1920 + 1080 + 0 + 0 + + 42 + 0 + + urn:smpte:ul:060e2b34.0401010d.04010202.03010114 + 16/9 + urn:smpte:ul:060e2b34.0401010d.0d010301.020c0600 + urn:smpte:ul:060e2b34.04010101.04010101.01020000 + urn:smpte:ul:060e2b34.04010101.04010101.02020000 + urn:smpte:ul:060e2b34.04010106.04010101.03030000 + 1080 + 1920 + 0 + 0 + 0 + + + 260 + 1920 + 1080 + 0 + 0 + 1920 + 1080 + 0 + 0 + 3 + + + 9 + 1 + 1 + + + 9 + 2 + 1 + + + 9 + 2 + 1 + + + 01040001000503030000778888888888 + + + CompLuma + 10 + + + CompColorDifferenceU + 10 + + + CompColorDifferenceV + 10 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + urn:uuid:59d0930e-ab77-48f3-b54b-ce2d56f1fad0 + + + urn:uuid:2b8c2807-b399-4ad4-bbe2-a2aaa0e48f85 + 2 + + + + urn:uuid:d522d994-9473-41b3-a092-22e4c6e1bd60 + + urn:uuid:5c257c56-5b05-4963-9107-9741630d8d86 + + + urn:uuid:a4d3e2cf-e774-4ec2-bea4-cf6590bbe264 + + + urn:uuid:2a63c959-929c-40ed-9803-7340ad534d8c + urn:uuid:15fdec1a-d158-4c24-9622-46319d3e5ee3 + 2 + 2 + + urn:smpte:ul:060e2b34.0401010d.04040212.00000000 + + + + urn:uuid:782c5405-a713-4403-83bb-5962c8824129 + urn:uuid:45c973c6-031a-4e2d-9f9b-9ce849cc030c + 1 + 3 + + urn:smpte:ul:060e2b34.04010101.0e210202.02020202 + + + + urn:uuid:333f516b-5c3b-476b-867d-7003354bbb47 + urn:uuid:15fdec1a-d158-4c24-9622-46319d3e5ee3 + + urn:smpte:ul:060e2b34.04010101.0e210101.01010101 + urn:smpte:ul:060e2b34.04010101.0e210101.01020101 + + + + urn:uuid:40edcd65-26b4-46d0-a53b-e49d89edf62d + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:d4f37157-b1ef-444d-878b-9a8997502a79 + MGASf + MGA Soundfield + Default + n/a + PRM + FCMP + urn:uuid:15fdec1a-d158-4c24-9622-46319d3e5ee3 + APR_1001 + + + urn:uuid:c3c7140c-ba5f-4e19-a626-22e79aea7264 + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:28bad017-da3d-4311-b786-87278b0364d5 + MGASf + MGA Soundfield + Dialog+ + n/a + PRM + FCMP + urn:uuid:15fdec1a-d158-4c24-9622-46319d3e5ee3 + APR_1002 + + + urn:uuid:219fb5b8-0d5e-4c70-8cae-d7dc7c03eab5 + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:f5a51633-bfe5-4619-ab05-39860e984843 + MGASf + MGA Soundfield + Audio Description + n/a + PRM + FCMP + urn:uuid:15fdec1a-d158-4c24-9622-46319d3e5ee3 + APR_1003 + + + urn:uuid:00847b03-5411-4d3e-9d85-f1b485385b2a + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:624490c3-16c7-4a4e-a838-1e5ff68f534a + MGASf + MGA Soundfield + Commentary Off + n/a + PRM + FCMP + urn:uuid:15fdec1a-d158-4c24-9622-46319d3e5ee3 + APR_1004 + + + 2 + 50/1 + 10 + urn:smpte:ul:060e2b34.0401010d.0d010301.02250200 + 48000/1 + False + 5 + 24 + urn:smpte:ul:060e2b34.0401010d.04020201.02010000 + 15 + 720000 + + + + 50 1 + + http://www.smpte-ra.org/ns/2067-21/2021 + + urn:uuid:347920ac-14e3-4f53-9747-3e4443080724 + urn:uuid:d76a8cff-79a0-49a0-a6ee-af1b41e22204 + http://www.smpte-ra.org/ns/2067-203/2022#Operational-Mode-A + + + + urn:uuid:edc14250-2a1d-4a5f-a8ff-6b293668ffa5 + + + urn:uuid:31158710-cf37-4280-9ef4-a5080b5aba8c + urn:uuid:ec8cc46f-191f-4b78-8096-17534cf06a6c + + + urn:uuid:f7d8f6d1-0eea-4f73-bb35-cd7b65678a7a + 500 + 10 + urn:uuid:058862b9-4cba-4a56-8382-813e007cd45d + urn:uuid:db8a1a5b-ad90-44cf-bf25-455dcce73ab5 + + + + + urn:uuid:47a2cc19-731f-4cca-b2a3-327698045f2b + urn:uuid:d76a8cff-79a0-49a0-a6ee-af1b41e22204 + + + urn:uuid:832482c4-f5a7-42c3-88de-fb20ad421c9a + 50 1 + 10 + 10 + urn:uuid:d522d994-9473-41b3-a092-22e4c6e1bd60 + urn:uuid:80ab140e-b37a-4157-b22e-c2d65bfb42ea + + + + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_SADM_MGAMetadataIndex_wrong/PKL_4e54173f-b59d-4837-aa29-72d851c9f8bb.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_SADM_MGAMetadataIndex_wrong/PKL_4e54173f-b59d-4837-aa29-72d851c9f8bb.xml new file mode 100644 index 00000000..12b93e92 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_SADM_MGAMetadataIndex_wrong/PKL_4e54173f-b59d-4837-aa29-72d851c9f8bb.xml @@ -0,0 +1,25 @@ + + + urn:uuid:4e54173f-b59d-4837-aa29-72d851c9f8bb + 2024-01-19T16:01:22Z + WR + IMF-Tool 1.9.371 + + + urn:uuid:80ab140e-b37a-4157-b22e-c2d65bfb42ea + UgCPIarnv58ugoP7jzzYgcNTLvk= + 572652 + application/mxf + ST2067-203_audio_track_file__non_compliant_SADM_MGAMetadataIndex_wrong.mxf + + + + urn:uuid:a9b4c035-3db9-4971-b4ae-46e82742cf59 + 6Igx8/QVx+RIKk9YOOPxAh4bZhA= + 16548 + text/xml + CPL_a9b4c035-3db9-4971-b4ae-46e82742cf59.xml + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_SADM_MGAMetadataIndex_wrong/ST2067-203_audio_track_file__non_compliant_SADM_MGAMetadataIndex_wrong.mxf b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_SADM_MGAMetadataIndex_wrong/ST2067-203_audio_track_file__non_compliant_SADM_MGAMetadataIndex_wrong.mxf new file mode 100755 index 00000000..f9fd6a3d Binary files /dev/null and b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_SADM_MGAMetadataIndex_wrong/ST2067-203_audio_track_file__non_compliant_SADM_MGAMetadataIndex_wrong.mxf differ diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_SADM_MGAMetadataIndex_wrong/VOLINDEX.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_SADM_MGAMetadataIndex_wrong/VOLINDEX.xml new file mode 100644 index 00000000..0ebe8e85 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_SADM_MGAMetadataIndex_wrong/VOLINDEX.xml @@ -0,0 +1,4 @@ + + + 1 + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_two_SADM_sections/ASSETMAP.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_two_SADM_sections/ASSETMAP.xml new file mode 100644 index 00000000..2a156847 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_two_SADM_sections/ASSETMAP.xml @@ -0,0 +1,35 @@ + + + urn:uuid:b720cb8b-43fb-4ddd-9fba-d4a100eb5f85 + IMF-Tool 1.9.371 + 1 + 2024-01-19T16:02:20Z + WR + + + urn:uuid:d756c4ae-84b1-4b8b-8e6f-7fe718b403a0 + + + ST2067-203_audio_track_file__non_compliant_two_SADM_sections.mxf + + + + + urn:uuid:9c74b53a-f31d-4189-bb50-ffddf455ed7b + + + CPL_9c74b53a-f31d-4189-bb50-ffddf455ed7b.xml + + + + + urn:uuid:7a723f63-be29-4b85-af2c-3add5d6b00f6 + true + + + PKL_7a723f63-be29-4b85-af2c-3add5d6b00f6.xml + + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_two_SADM_sections/CPL_9c74b53a-f31d-4189-bb50-ffddf455ed7b.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_two_SADM_sections/CPL_9c74b53a-f31d-4189-bb50-ffddf455ed7b.xml new file mode 100644 index 00000000..1b65194e --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_two_SADM_sections/CPL_9c74b53a-f31d-4189-bb50-ffddf455ed7b.xml @@ -0,0 +1,276 @@ + + + urn:uuid:9c74b53a-f31d-4189-bb50-ffddf455ed7b + S-ADM Test + 2024-01-19T16:02:19Z + Wolfgang Ruppel + IMF-Tool 1.9.371 + Fraunhofer IIS + S-ADM + test + + + urn:uuid:623e115c-fce6-4bd3-9fc3-3469cb9b0dfd + S-ADM + + + + + urn:uuid:670e5422-3f41-4a92-84af-f2e67ec10d92 + + 10 + 2 + 1 + 64 + 940 + 897 + CoSiting + 50/1 + FullFrame + 1920 + 1080 + 1920 + 1080 + 0 + 0 + 1920 + 1080 + 0 + 0 + + 42 + 0 + + urn:smpte:ul:060e2b34.0401010d.04010202.03010114 + 16/9 + urn:smpte:ul:060e2b34.0401010d.0d010301.020c0600 + urn:smpte:ul:060e2b34.04010101.04010101.01020000 + urn:smpte:ul:060e2b34.04010101.04010101.02020000 + urn:smpte:ul:060e2b34.04010106.04010101.03030000 + 1080 + 1920 + 0 + 0 + 0 + + + 260 + 1920 + 1080 + 0 + 0 + 1920 + 1080 + 0 + 0 + 3 + + + 9 + 1 + 1 + + + 9 + 2 + 1 + + + 9 + 2 + 1 + + + 01040001000503030000778888888888 + + + CompLuma + 10 + + + CompColorDifferenceU + 10 + + + CompColorDifferenceV + 10 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + CompNull + 0 + + + urn:uuid:59d0930e-ab77-48f3-b54b-ce2d56f1fad0 + + + urn:uuid:2b8c2807-b399-4ad4-bbe2-a2aaa0e48f85 + 2 + + + + urn:uuid:d3b76a13-82ef-4234-858b-99aad5479036 + + urn:uuid:77d04944-519d-4295-9859-634fa0de40b7 + + + urn:uuid:58f2915f-26af-4777-9389-7c103b773984 + + + urn:uuid:1e516609-ab93-4291-9e5e-98ee0cbf2e3a + urn:uuid:1dcd86ec-374b-419d-a4cc-c8e97a5aacce + 1 + 2 + + urn:smpte:ul:060e2b34.0401010d.04040212.00000000 + + + + urn:uuid:3c34ff76-b96c-4c71-a54f-aeeb503ed0fb + urn:uuid:3fa83428-b05d-4503-8a54-c530e94355b0 + 2 + 2 + + urn:smpte:ul:060e2b34.0401010d.04040212.00000000 + + + + urn:uuid:0a9c5aae-358d-40f1-9efd-ddb10de54a40 + urn:uuid:1dcd86ec-374b-419d-a4cc-c8e97a5aacce + + urn:smpte:ul:060e2b34.04010101.0e210101.01010101 + urn:smpte:ul:060e2b34.04010101.0e210101.01020101 + + + + urn:uuid:1ac9b4fb-4386-4d2a-bc4a-812786e40bc3 + urn:uuid:3fa83428-b05d-4503-8a54-c530e94355b0 + + urn:smpte:ul:060e2b34.04010101.0e230101.01000001 + + + + urn:uuid:433e89e5-4927-4e74-b556-367741acbf7b + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:518081c4-5409-4f9e-9809-cbb2ac224539 + MGASf + MGA Soundfield + Default + n/a + PRM + FCMP + urn:uuid:1dcd86ec-374b-419d-a4cc-c8e97a5aacce + APR_1001 + + + urn:uuid:99ba9735-eb83-4069-be83-db0b04f054a3 + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:710063f9-2b26-4e21-99ed-2b74c2c98ca9 + MGASf + MGA Soundfield + Dialog+ + n/a + PRM + FCMP + urn:uuid:1dcd86ec-374b-419d-a4cc-c8e97a5aacce + APR_1002 + + + urn:uuid:723fdaf6-0fea-42e2-8b71-8c8ad39ff6b3 + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:51cfa812-2274-497d-9d98-845843c32f18 + MGASf + MGA Soundfield + Audio Description + n/a + PRM + FCMP + urn:uuid:1dcd86ec-374b-419d-a4cc-c8e97a5aacce + APR_1003 + + + urn:uuid:620e8f6e-daed-4ff8-9301-a6def3ea1264 + urn:smpte:ul:060e2b34.0401010d.03020222.00000000 + urn:uuid:06ae0edb-de05-4e4b-996b-b5c6f3bf19bd + MGASf + MGA Soundfield + Commentary Off + n/a + PRM + FCMP + urn:uuid:1dcd86ec-374b-419d-a4cc-c8e97a5aacce + APR_1004 + + + 2 + 50/1 + 10 + urn:smpte:ul:060e2b34.0401010d.0d010301.02250200 + 48000/1 + False + 5 + 24 + urn:smpte:ul:060e2b34.0401010d.04020201.02010000 + 15 + 720000 + + + + 50 1 + + http://www.smpte-ra.org/ns/2067-21/2021 + + urn:uuid:347920ac-14e3-4f53-9747-3e4443080724 + urn:uuid:ce84bf9d-dc16-41cf-aa4d-616356c3109b + http://www.smpte-ra.org/ns/2067-203/2022#Operational-Mode-A + + + + urn:uuid:869aba99-fcef-40d5-9ea2-a1d6322bafb7 + + + urn:uuid:14e99cdf-8ab3-4a7a-bcdc-74d0eaedc613 + urn:uuid:11fe0e84-0848-4a10-94e2-e7c56ff0b002 + + + urn:uuid:c49866f6-1b9d-4406-9afa-8123c7a96790 + 500 + 10 + urn:uuid:670e5422-3f41-4a92-84af-f2e67ec10d92 + urn:uuid:db8a1a5b-ad90-44cf-bf25-455dcce73ab5 + + + + + urn:uuid:4ade1397-ea76-4afc-9a93-f45861e5421d + urn:uuid:ce84bf9d-dc16-41cf-aa4d-616356c3109b + + + urn:uuid:165fcbb0-e1ae-4b46-92b1-47ac9fc8d2bc + 50 1 + 10 + 10 + urn:uuid:d3b76a13-82ef-4234-858b-99aad5479036 + urn:uuid:d756c4ae-84b1-4b8b-8e6f-7fe718b403a0 + + + + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_two_SADM_sections/PKL_7a723f63-be29-4b85-af2c-3add5d6b00f6.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_two_SADM_sections/PKL_7a723f63-be29-4b85-af2c-3add5d6b00f6.xml new file mode 100644 index 00000000..10fef3e3 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_two_SADM_sections/PKL_7a723f63-be29-4b85-af2c-3add5d6b00f6.xml @@ -0,0 +1,25 @@ + + + urn:uuid:7a723f63-be29-4b85-af2c-3add5d6b00f6 + 2024-01-19T16:02:20Z + WR + IMF-Tool 1.9.371 + + + urn:uuid:d756c4ae-84b1-4b8b-8e6f-7fe718b403a0 + +UXJc6H1pdMkbgAjDXNgpj0iWPY= + 572572 + application/mxf + ST2067-203_audio_track_file__non_compliant_two_SADM_sections.mxf + + + + urn:uuid:9c74b53a-f31d-4189-bb50-ffddf455ed7b + tTZw7TCjyslCvNvI3X2fyY0UqnY= + 17014 + text/xml + CPL_9c74b53a-f31d-4189-bb50-ffddf455ed7b.xml + + + + diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_two_SADM_sections/ST2067-203_audio_track_file__non_compliant_two_SADM_sections.mxf b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_two_SADM_sections/ST2067-203_audio_track_file__non_compliant_two_SADM_sections.mxf new file mode 100755 index 00000000..1f5d3939 Binary files /dev/null and b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_two_SADM_sections/ST2067-203_audio_track_file__non_compliant_two_SADM_sections.mxf differ diff --git a/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_two_SADM_sections/VOLINDEX.xml b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_two_SADM_sections/VOLINDEX.xml new file mode 100644 index 00000000..0ebe8e85 --- /dev/null +++ b/src/test/resources/TestIMP/SADM/ST2067-203_audio_track_file__non_compliant_two_SADM_sections/VOLINDEX.xml @@ -0,0 +1,4 @@ + + + 1 +