src/main/java/com/netflix/imflibrary/writerTools/CompositionPlaylistBuilder_2013.java [119:157]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
                                           @Nonnull org.smpte_ra.schemas._433._2008.dcmltypes.UserTextType annotationText,
                                           @Nonnull org.smpte_ra.schemas._433._2008.dcmltypes.UserTextType issuer,
                                           @Nonnull org.smpte_ra.schemas._433._2008.dcmltypes.UserTextType creator,
                                           @Nonnull List<? extends Composition.VirtualTrack> virtualTracks,
                                           @Nonnull Composition.EditRate compositionEditRate,
                                           @Nonnull Set<String> applicationIds,
                                           long totalRunningTime,
                                           @Nonnull Map<UUID, IMPBuilder.IMFTrackFileInfo> trackFileInfoMap,
                                           @Nonnull File workingDirectory,
                                           @Nonnull List<IMFEssenceDescriptorBaseType> imfEssenceDescriptorBaseTypeList,
                                           @Nonnull String coreConstraintsSchema,
                                           Map<UUID, UUID> trackFileIdToEssenceDescriptorIdMap){
        this.uuid = uuid;
        this.annotationText = annotationText;
        this.issuer = issuer;
        this.creator = creator;
        this.issueDate = IMFUtils.createXMLGregorianCalendar();
        this.virtualTracks = Collections.unmodifiableList(virtualTracks);
        this.compositionEditRate = Collections.unmodifiableList(Arrays.asList(compositionEditRate.getNumerator(), compositionEditRate.getDenominator()));
        this.totalRunningTime = totalRunningTime;
        this.trackFileInfoMap = Collections.unmodifiableMap(trackFileInfoMap);
        this.workingDirectory = workingDirectory;
        this.imfErrorLogger = new IMFErrorLoggerImpl();
        this.cplFileName = "CPL-" + this.uuid.toString() + ".xml";
        this.applicationIds = Collections.unmodifiableSet(applicationIds);
        this.imfEssenceDescriptorBaseTypeList = Collections.unmodifiableList(imfEssenceDescriptorBaseTypeList);
        this.coreConstraintsSchema = coreConstraintsSchema;

        Map<UUID, UUID> trackEncodingMap = new HashMap<>(); //Map of TrackFileId -> SourceEncodingElement of each resource of this VirtualTrack
        for(Composition.VirtualTrack virtualTrack : virtualTracks) {
            if (!(virtualTrack instanceof IMFEssenceComponentVirtualTrack)) {
                continue; // Skip non-essence tracks
            }

            IMFEssenceComponentVirtualTrack essenceTrack = (IMFEssenceComponentVirtualTrack) virtualTrack;
            for (IMFTrackFileResourceType trackResource : essenceTrack.getTrackFileResourceList()) {
                UUID sourceEncoding = trackEncodingMap.get(UUIDHelper.fromUUIDAsURNStringToUUID(trackResource.getTrackFileId()));
                if (sourceEncoding == null) {
                    if (trackFileIdToEssenceDescriptorIdMap != null) {
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



src/main/java/com/netflix/imflibrary/writerTools/CompositionPlaylistBuilder_2016.java [121:161]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
                                           @Nonnull org.smpte_ra.schemas._433._2008.dcmltypes.UserTextType annotationText,
                                           @Nonnull org.smpte_ra.schemas._433._2008.dcmltypes.UserTextType issuer,
                                           @Nonnull org.smpte_ra.schemas._433._2008.dcmltypes.UserTextType creator,
                                           @Nonnull List<? extends Composition.VirtualTrack> virtualTracks,
                                           @Nonnull Composition.EditRate compositionEditRate,
                                           @Nonnull Set<String> applicationIds,
                                           long totalRunningTime,
                                           @Nonnull Map<UUID, IMPBuilder.IMFTrackFileInfo> trackFileInfoMap,
                                           @Nonnull File workingDirectory,
                                           @Nonnull List<IMFEssenceDescriptorBaseType> imfEssenceDescriptorBaseTypeList,
                                           @Nonnull String coreConstraintsSchema,
                                           Map<UUID, UUID> trackFileIdToEssenceDescriptorIdMap){
        this.uuid = uuid;
        this.annotationText = annotationText;
        this.issuer = issuer;
        this.creator = creator;
        this.issueDate = IMFUtils.createXMLGregorianCalendar();
        this.virtualTracks = Collections.unmodifiableList(virtualTracks);
        this.compositionEditRate = Collections.unmodifiableList(Arrays.asList(compositionEditRate.getNumerator(), compositionEditRate.getDenominator()));
        this.totalRunningTime = totalRunningTime;
        this.trackFileInfoMap = Collections.unmodifiableMap(trackFileInfoMap);
        this.workingDirectory = workingDirectory;
        this.imfErrorLogger = new IMFErrorLoggerImpl();
        this.cplFileName = "CPL-" + this.uuid.toString() + ".xml";
        this.applicationIds = Collections.unmodifiableSet(applicationIds);
        this.imfEssenceDescriptorBaseTypeList = Collections.unmodifiableList(imfEssenceDescriptorBaseTypeList);
        this.coreConstraintsSchema = coreConstraintsSchema;

        Map<UUID, UUID> trackEncodingMap = new HashMap<>(); //Map of TrackFileId -> SourceEncodingElement of each resource of this VirtualTrack
        for(Composition.VirtualTrack virtualTrack : virtualTracks) {
            if (!(virtualTrack instanceof IMFEssenceComponentVirtualTrack)) {
                continue; // Skip non-essence tracks
            }

            IMFEssenceComponentVirtualTrack essenceTrack = (IMFEssenceComponentVirtualTrack) virtualTrack;
            for (IMFTrackFileResourceType trackResource : essenceTrack.getTrackFileResourceList()) {
                UUID sourceEncoding = trackEncodingMap.get(UUIDHelper.fromUUIDAsURNStringToUUID(trackResource.getTrackFileId()));
                // To avoid mismatched essenceDescriptorId and sourceEncodingId, we use the trackFileIdToEssenceDescriptorIdMap. If this function is called by the deprecated constructor,
                // we run the risk of mismatch ONLY if there are multiple essence descriptors for the same virtualTrackFile in the input CPL.
                if (sourceEncoding == null) {
                    if (trackFileIdToEssenceDescriptorIdMap != null) {
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



