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; }
private void buildDefaultSequenceLanguages() { SequenceTemplateParameterContext sequenceContext = contextProvider.getSequenceContext(); for (SequenceType seqType : sequenceContext.getSequenceTypes()) { for (SequenceUUID seqUuid : sequenceContext.getUuids(seqType)) { String language = getDefaultCplLanguage(); ContextInfo contextInfo = new ContextInfoBuilder().setSequenceType(seqType).setSequenceUuid(seqUuid).build(); if (language != null && !sequenceContext.hasSequenceParameter(SequenceContextParameters.LANGUAGE, contextInfo)) { sequenceContext.addSequenceParameter(seqType, seqUuid, SequenceContextParameters.LANGUAGE, language); } } } }
/** * Prepare channels layout by order. */ private void prepareChannelsByOrder() { SequenceTemplateParameterContext sequenceContext = contextProvider.getSequenceContext(); channelsByOrder.clear(); for (SequenceUUID seqUuid : sequenceContext.getUuids(SequenceType.AUDIO)) { ContextInfo contextInfo = new ContextInfoBuilder() .setSequenceType(SequenceType.AUDIO) .setSequenceUuid(seqUuid) .build(); String channelsNum = sequenceContext.getParameterValue(SequenceContextParameters.CHANNELS_NUM, contextInfo); IntStream.rangeClosed(1, Integer.parseInt(channelsNum)) .mapToObj(i -> Pair.of(seqUuid, i)) .forEachOrdered(channelsByOrder::add); } }
/** * Adds a sequence (virtual track) parameter. * * @param seqType sequence type * @param uuid sequence UUID. * @param paramName a enum defining the parameter name. * @param paramValue parameter value * @return this sequence template parameters context. */ public SequenceTemplateParameterContext addSequenceParameter(SequenceType seqType, SequenceUUID uuid, SequenceContextParameters paramName, String paramValue) { initSequence(seqType, uuid); doAddParameter(seqType, uuid, paramName, paramValue); return this; }
/** * Inits a sequence (virtual track) parameter defined by the given UUID. Defines default parameters * (such as Sequence UUID, type and number). * The method must be called for each sequence before adding another parameters. * * @param seqType sequence type * @param uuid sequence UUID. * @return this sequence template parameters context. */ public SequenceTemplateParameterContext initSequence(SequenceType seqType, SequenceUUID uuid) { if (!sequences.containsKey(seqType) || !sequences.get(seqType).contains(uuid)) { int seqNum = getSequenceCount(seqType); doAddParameter(seqType, uuid, SequenceContextParameters.UUID, uuid.getUuid()); doAddParameter(seqType, uuid, SequenceContextParameters.TYPE, seqType.value()); doAddParameter(seqType, uuid, SequenceContextParameters.NUM, String.valueOf(seqNum)); } return this; }
@Test public void testVideoSequenceContext() throws Exception { assertEquals(1, sequenceContext.getSequenceCount(SequenceType.VIDEO)); // UUIDs as defined in CPL.xml assertArrayEquals( new SequenceUUID[]{SequenceUUID.create("urn:uuid:a4f226e7-adac-45a4-adbf-83335cf02d0d")}, sequenceContext.getUuids(SequenceType.VIDEO).toArray(new SequenceUUID[]{})); ContextInfo contextInfo = new ContextInfoBuilder().setSequenceType(SequenceType.VIDEO) .setSequenceUuid(SequenceUUID.create("urn:uuid:a4f226e7-adac-45a4-adbf-83335cf02d0d")).build(); assertEquals("urn:uuid:a4f226e7-adac-45a4-adbf-83335cf02d0d", sequenceContext.getParameterValue(SequenceContextParameters.UUID, contextInfo)); assertEquals("0", sequenceContext.getParameterValue(SequenceContextParameters.NUM, contextInfo)); assertEquals("video", sequenceContext.getParameterValue(SequenceContextParameters.TYPE, contextInfo)); }
@Test public void testInitSequenceOrder() throws Exception { TemplateParameterContextProvider contextProvider = createDefaultContextProvider(); contextProvider.getSequenceContext().initSequence(SequenceType.VIDEO, SequenceUUID.create("urn:uuid:3333")); contextProvider.getSequenceContext().initSequence(SequenceType.VIDEO, SequenceUUID.create("urn:uuid:1111")); contextProvider.getSequenceContext().initSequence(SequenceType.VIDEO, SequenceUUID.create("urn:uuid:2222")); contextProvider.getSequenceContext().initSequence(SequenceType.AUDIO, SequenceUUID.create("urn:uuid:2222")); contextProvider.getSequenceContext().initSequence(SequenceType.AUDIO, SequenceUUID.create("urn:uuid:3333")); contextProvider.getSequenceContext().initSequence(SequenceType.AUDIO, SequenceUUID.create("urn:uuid:1111")); contextProvider.getSequenceContext().initSequence(SequenceType.AUDIO, SequenceUUID.create("urn:uuid:4444")); assertEquals(3, contextProvider.getSequenceContext().getSequenceCount(SequenceType.VIDEO)); assertArrayEquals( new SequenceUUID[]{ SequenceUUID.create("urn:uuid:3333"), SequenceUUID.create("urn:uuid:1111"), SequenceUUID.create("urn:uuid:2222")}, contextProvider.getSequenceContext().getUuids(SequenceType.VIDEO).toArray()); assertEquals(4, contextProvider.getSequenceContext().getSequenceCount(SequenceType.AUDIO)); assertArrayEquals( new SequenceUUID[]{ SequenceUUID.create("urn:uuid:2222"), SequenceUUID.create("urn:uuid:3333"), SequenceUUID.create("urn:uuid:1111"), SequenceUUID.create("urn:uuid:4444")}, contextProvider.getSequenceContext().getUuids(SequenceType.AUDIO).toArray()); }
private void buildSilenceExprParameters() { contextProvider.getSequenceContext().getUuids(SequenceType.AUDIO).forEach(this::buildSilenceExprParameter); }
@Test public void testAddSequenceParameterInitsSequence() throws Exception { TemplateParameterContextProvider contextProvider = createDefaultContextProvider(); contextProvider.getSequenceContext().addSequenceParameter(SequenceType.VIDEO, SequenceUUID.create("urn:uuid:3333"), SequenceContextParameters.NUM, "5"); assertEquals(1, contextProvider.getSequenceContext().getSequenceCount(SequenceType.VIDEO)); assertArrayEquals( new SequenceUUID[]{SequenceUUID.create("urn:uuid:3333")}, contextProvider.getSequenceContext().getUuids(SequenceType.VIDEO).toArray()); assertDefaultSequenceParameters(contextProvider, 5, SequenceUUID.create("urn:uuid:3333"), SequenceType.VIDEO); }
private String resolveContextLocale() { SequenceTemplateParameterContext sequenceContext = contextProvider.getSequenceContext(); return sequenceContext.getUuids(SequenceType.AUDIO).stream() .map(uuid -> new ContextInfoBuilder() .setSequenceType(SequenceType.AUDIO) .setSequenceUuid(uuid) .build()) .findFirst() .filter(contextInfo -> sequenceContext.hasSequenceParameter(LANGUAGE, contextInfo)) .map(contextInfo -> sequenceContext.getParameterValue(LANGUAGE, contextInfo)) .orElse(null); }
for (SequenceType seqType : sequenceContext.getSequenceTypes()) { for (SequenceUUID seqUuid : sequenceContext.getUuids(seqType)) { VirtualTrackInfo prevVirtualTrack = null; for (SegmentUUID segmUuid : contextProvider.getSegmentContext().getUuids()) { sequenceContext.addSequenceParameter( seqType, seqUuid, SequenceContextParameters.CHANNELS_NUM, sequenceContext.addSequenceParameter( seqType, seqUuid, SequenceContextParameters.FRAME_RATE,
public String getParameterValue(SequenceContextParameters seqParameter, ContextInfo contextInfo) { return getParameterValue( new TemplateParameter(TemplateParameterContext.SEQUENCE, seqParameter.getName()), seqParameter, contextInfo); }
private void prepareCplVirtualTracksWithChannels(TemplateParameterContextProvider contextProvider, Map<String, Integer> channelsForTrack) { SequenceTemplateParameterContext sequenceContext = contextProvider.getSequenceContext(); channelsForTrack.forEach( (uuid, channels) -> { sequenceContext.initSequence(SequenceType.AUDIO, SequenceUUID.create(uuid)); // as in test-audiomap.xml contextProvider.getSequenceContext().addSequenceParameter( SequenceType.AUDIO, SequenceUUID.create(uuid), SequenceContextParameters.CHANNELS_NUM, String.valueOf(channels)); } ); }
private void processSubtitles() { int count = iTunesInputParameters.getSubFiles() == null ? contextProvider.getSequenceContext().getSequenceCount(SequenceType.SUBTITLE) : iTunesInputParameters.getSubFiles().size(); if (count == 0) { return; } IntStream.range(0, count) .mapToObj(i -> contextProvider.getDynamicContext().getParameterValueAsString(DYNAMIC_PARAM_SUBTITLE_ITT_PREFIX + i)) .map(fileName -> new File(inputParameters.getWorkingDirFile(), fileName)) .forEach(this::safeProcessSubtitles); }
for (SequenceUUID seqUuid : sequenceContext.getUuids(SequenceType.AUDIO)) { if (langs != null && i < langs.length) { sequenceContext.addSequenceParameter( SequenceType.AUDIO, seqUuid, SequenceContextParameters.LANGUAGE, langs[i]); String.valueOf(channelsForSeq[j].length) ); sequenceContext.addSequenceParameter( SequenceType.AUDIO, seqUuid, SequenceContextParameters.CHANNELS_NUM, String.valueOf(channelsNum[i]) ); sequenceContext.addSequenceParameter( SequenceType.AUDIO, seqUuid, SequenceContextParameters.CHANNELS_NUM,
private void processSequence() { // 1. check that the sequence type is known if (currentSequenceType == null) { throw new ConversionException(String.format("Sequence '%s': Unknown sequence type", currentSequence.getId())); } // 2. init the sequence contextProvider.getSequenceContext().initSequence(currentSequenceType, currentSequenceUuid); // 3. process all resources within the sequence and segment and fill the Resource context currentSequence.getResourceList().getResource().forEach(this::processResource); }
protected String getLanguage(SoundfieldGroupInfo info) { String lang = null; for (ImmutablePair<SequenceUUID, Integer> seqInfos : info.getChannelsMap().values()) { SequenceTemplateParameterContext seqContext = contextProvider.getSequenceContext(); ContextInfo contextInfo = new ContextInfoBuilder() .setSequenceType(SequenceType.AUDIO) .setSequenceUuid(seqInfos.getLeft()) .build(); if (!seqContext.hasSequenceParameter(SequenceContextParameters.LANGUAGE, contextInfo)) { return null; } String nextLang = seqContext.getParameterValue(SequenceContextParameters.LANGUAGE, contextInfo); // all sequences from a soundfield group must have the same language! if (lang != null && !lang.equals(nextLang)) { return null; } lang = nextLang; } return lang; }
if (!seqContext.hasSequenceParameter(SequenceContextParameters.LANGUAGE, contextInfo)) { seqContext.addSequenceParameter( contextInfo.getSequenceType(), contextInfo.getSequenceUuid(), SequenceContextParameters.LANGUAGE, language.getValue());
public static void addSequenceContextParameter(TemplateParameterContextProvider contextProvider, int seq, SequenceType seqType, SequenceContextParameters param, String paramValue) { contextProvider.getSequenceContext().addSequenceParameter( seqType, getSequenceUuid(seq, seqType), param, paramValue); }
@Test public void testAllSequenceTypesPresent() throws Exception { assertArrayEquals( new SequenceType[]{SequenceType.VIDEO, SequenceType.AUDIO, SequenceType.SUBTITLE}, sequenceContext.getSequenceTypes().toArray(new SequenceType[]{})); }