private long getCplTotalDurationMs() { // bmx uses the smallest video/audio duration as a total duration when it's not equal long result = Long.MAX_VALUE; SequenceTemplateParameterContext sequenceContext = contextProvider.getSequenceContext(); for (SequenceType seqType : sequenceContext.getSequenceTypes()) { for (SequenceUUID seqUuid : sequenceContext.getUuids(seqType)) { long trackDuration = CplHelper.getVirtualTrackDurationMS(contextProvider, seqType, seqUuid); result = Math.min(result, trackDuration); } } return result; }
@Test public void virtualTrackDurationEU() { // the values as specified in CPL.xml assertEquals(BigInteger.valueOf(1917120), CplHelper.getVirtualTrackDurationEU( contextProvider, SequenceType.AUDIO, SequenceUUID.create("urn:uuid:63b41d86-c5df-4169-b036-3a25024bd711"))); assertEquals(BigInteger.valueOf(4191), CplHelper.getVirtualTrackDurationEU( contextProvider, SequenceType.VIDEO, SequenceUUID.create("urn:uuid:a4f226e7-adac-45a4-adbf-83335cf02d0d"))); }
/** * Gets a total duration of the given virtual track in edit units (frames or samples). * * @param contextProvider a context provider * @param seqType a sequence (virtual track) type * @param seqUuid a sequence (virtual track) UUID * @return a total duration of a virtual track in edit units (frames or samples). */ public static BigInteger getVirtualTrackDurationEU(TemplateParameterContextProvider contextProvider, SequenceType seqType, SequenceUUID seqUuid) { SegmentTemplateParameterContext segmentContext = contextProvider.getSegmentContext(); ResourceTemplateParameterContext resourceContext = contextProvider.getResourceContext(); BigInteger sequenceDuration = BigInteger.ZERO; for (SegmentUUID segmUuid : segmentContext.getUuids()) { for (ResourceUUID resUuid : resourceContext.getUuids(ResourceKey.create(segmUuid, seqUuid, seqType))) { ContextInfo contextInfo = new ContextInfoBuilder() .setResourceUuid(resUuid) .setSegmentUuid(segmUuid) .setSequenceUuid(seqUuid) .setSequenceType(seqType) .build(); sequenceDuration = sequenceDuration.add(getResourceDurationEU(contextProvider, contextInfo)); } } return sequenceDuration; }
/** * Gets a total duration of the given virtual track in milliseconds. * * @param contextProvider a context provider * @param seqType a sequence (virtual track) type * @param seqUuid a sequence (virtual track) UUID * @return a total duration of a virtual track in milliseconds */ public static long getVirtualTrackDurationMS(TemplateParameterContextProvider contextProvider, SequenceType seqType, SequenceUUID seqUuid) { SegmentTemplateParameterContext segmentContext = contextProvider.getSegmentContext(); ResourceTemplateParameterContext resourceContext = contextProvider.getResourceContext(); long sequenceDuration = 0L; for (SegmentUUID segmUuid : segmentContext.getUuids()) { for (ResourceUUID resUuid : resourceContext.getUuids(ResourceKey.create(segmUuid, seqUuid, seqType))) { ContextInfo contextInfo = new ContextInfoBuilder() .setResourceUuid(resUuid) .setSegmentUuid(segmUuid) .setSequenceUuid(seqUuid) .setSequenceType(seqType) .build(); sequenceDuration += getResourceDurationMS(contextProvider, contextInfo); } } return sequenceDuration; }
public void checkDuration(DestContextTypeMap destContextMap) { DestContextMapWrapper wrapper = new DestContextMapWrapper(destContextMap); long durationMs = CplHelper.getVirtualTrackDurationMS(contextProvider, SequenceType.VIDEO, getSequenceUUID()); Long durationS = Duration.ofMillis(durationMs).getSeconds(); if (wrapper.compareToLong(DURATION.getName(), durationS, true) < 0) { logger.warn("Duration of source in format {} supposed to be less than {} h.", destContextMap.getName(), Duration.ofMillis(wrapper.getValueAsLong(DURATION.getName())).toHours()); } }
@Test public void virtualTrackDurationMS() { // the values as specified in CPL.xml assertEquals(39940L, CplHelper.getVirtualTrackDurationMS( contextProvider, SequenceType.AUDIO, SequenceUUID.create("urn:uuid:63b41d86-c5df-4169-b036-3a25024bd711"))); assertEquals(83820L, CplHelper.getVirtualTrackDurationMS( contextProvider, SequenceType.VIDEO, SequenceUUID.create("urn:uuid:a4f226e7-adac-45a4-adbf-83335cf02d0d"))); }