private Stream<ContextInfo> segmentStream(ContextInfo contextInfo) { return contextProvider.getSegmentContext().getUuids().stream() .map(segUuid -> new ContextInfoBuilder() .setSequenceType(contextInfo.getSequenceType()) .setSequenceUuid(contextInfo.getSequenceUuid()) .setSegmentUuid(segUuid) .build()); }
/** * Gets resolved parameter value as a string. Never null. * * @param segmParameter a enum defining the parameter name. * @param contextInfo a context info. Must contain information about the segment. * @return resolved parameter value as a string. Never null. */ public String getParameterValue(SegmentContextParameters segmParameter, ContextInfo contextInfo) { return getParameterValue( new TemplateParameter(TemplateParameterContext.SEGMENT, segmParameter.getName()), segmParameter, contextInfo); }
/** * Adds a segment parameter. * * @param uuid segment UUID. * @param paramName a enum defining the parameter name. * @param paramValue parameter value * @return this segment template parameters context. */ public SegmentTemplateParameterContext addSegmentParameter(SegmentUUID uuid, SegmentContextParameters paramName, String paramValue) { initSegment(uuid); doAddParameter(uuid, paramName, paramValue); return this; }
@Test public void testInitSegmentsOrder() throws Exception { TemplateParameterContextProvider contextProvider = createDefaultContextProvider(); contextProvider.getSegmentContext().initSegment(SegmentUUID.create("urn:uuid:3333")); contextProvider.getSegmentContext().initSegment(SegmentUUID.create("urn:uuid:1111")); contextProvider.getSegmentContext().initSegment(SegmentUUID.create("urn:uuid:2222")); assertEquals(3, contextProvider.getSegmentContext().getSegmentsNum()); assertArrayEquals( new SegmentUUID[]{ SegmentUUID.create("urn:uuid:3333"), SegmentUUID.create("urn:uuid:1111"), SegmentUUID.create("urn:uuid:2222")}, contextProvider.getSegmentContext().getUuids().toArray()); }
@Test public void testSegmentContextCreatedCorrectly() throws Exception { TemplateParameterContextProvider contextProvider = TemplateParameterContextCreator.createDefaultContextProvider(); AssetMap assetMap = new AssetMapParser().parse(ImpUtils.getImpFolder(), ImpUtils.getCorrectAssetmap()); new CplContextBuilder(contextProvider, assetMap, ImpUtils.getCorrectCpl()).build(); SegmentTemplateParameterContext segmentContext = contextProvider.getSegmentContext(); assertEquals(2, segmentContext.getSegmentsNum()); // UUIDs as defined in CPL.xml assertArrayEquals( new SegmentUUID[]{ SegmentUUID.create("urn:uuid:20544b5c-be3c-4274-8633-249ee8a5ad16"), SegmentUUID.create("urn:uuid:20544b5c-be3c-4274-8633-249ee8a5ad17") }, segmentContext.getUuids().toArray(new SegmentUUID[]{})); ContextInfo contextInfo = new ContextInfoBuilder() .setSegmentUuid(SegmentUUID.create("urn:uuid:20544b5c-be3c-4274-8633-249ee8a5ad16")) .build(); assertEquals("urn:uuid:20544b5c-be3c-4274-8633-249ee8a5ad16", segmentContext.getParameterValue(SegmentContextParameters.UUID, contextInfo)); assertEquals("0", segmentContext.getParameterValue(SegmentContextParameters.NUM, contextInfo)); contextInfo = new ContextInfoBuilder() .setSegmentUuid(SegmentUUID.create("urn:uuid:20544b5c-be3c-4274-8633-249ee8a5ad17")) .build(); assertEquals("urn:uuid:20544b5c-be3c-4274-8633-249ee8a5ad17", segmentContext.getParameterValue(SegmentContextParameters.UUID, contextInfo)); assertEquals("1", segmentContext.getParameterValue(SegmentContextParameters.NUM, contextInfo)); }
@Test public void testAddSegmentParametersInitsSegment() throws Exception { TemplateParameterContextProvider contextProvider = createDefaultContextProvider(); contextProvider.getSegmentContext().addSegmentParameter( SegmentUUID.create("urn:uuid:3333"), SegmentContextParameters.NUM, "5"); assertEquals(1, contextProvider.getSegmentContext().getSegmentsNum()); assertArrayEquals( new SegmentUUID[]{SegmentUUID.create("urn:uuid:3333")}, contextProvider.getSegmentContext().getUuids().toArray()); assertDefaultSegmentParameters(contextProvider, 5, SegmentUUID.create("urn:uuid:3333")); }
@Override protected void buildFromCpl() { // 1. get a composition edit rate (it's used if no specific edit rate is specified for a segment). this.compositionEditRate = ConversionHelper.parseEditRate(cpl2013.getEditRate()); // 2. go through all segments and all sequences and build segment, sequence and resource contexts. for (SegmentType segment : cpl2013.getSegmentList().getSegment()) { this.currentSegmentUuid = SegmentUUID.create(segment.getId()); contextProvider.getSegmentContext().initSegment(currentSegmentUuid); for (Object anySeqJaxb : segment.getSequenceList().getAny()) { if (!(anySeqJaxb instanceof JAXBElement)) { throw new ConversionException(String.format("Could not understand a sequence '%s'", anySeqJaxb.toString())); } JAXBElement jaxbElement = (JAXBElement) (anySeqJaxb); Object anySeq = jaxbElement.getValue(); SequenceTypeCpl currentSequenceTypeCpl = SequenceTypeCpl.fromName(jaxbElement.getName().getLocalPart()); if ((currentSequenceTypeCpl != null) && (anySeq instanceof SequenceType)) { this.currentSequence = (SequenceType) anySeq; this.currentSequenceType = currentSequenceTypeCpl.toSequenceType(); this.currentSequenceUuid = SequenceUUID.create(currentSequence.getTrackId()); processSequence(); } } } }
/** * Inits a segment parameter defined by the given UUID. Defines default parameters (such as Segment UUID and number). * The method must be called for each segment before adding another parameters. * * @param uuid segment UUID. * @return this segment template parameters context. */ public SegmentTemplateParameterContext initSegment(SegmentUUID uuid) { if (!segments.containsKey(uuid)) { int segmNum = segments.size(); doAddParameter(uuid, SegmentContextParameters.UUID, uuid.getUuid()); doAddParameter(uuid, SegmentContextParameters.NUM, String.valueOf(segmNum)); } return this; }
public static void addSegmentContextParameter(TemplateParameterContextProvider contextProvider, int segm, SegmentContextParameters param, String paramValue) { contextProvider.getSegmentContext().addSegmentParameter( getSegmentUuid(segm), param, paramValue); }
@Test public void testSeqmentAndSequenceCount() throws Exception { assertEquals(1, contextProvider.getSegmentContext().getSegmentsNum()); assertEquals(1, contextProvider.getSequenceContext().getSequenceCount(SequenceType.VIDEO)); assertEquals(2, contextProvider.getSequenceContext().getSequenceCount(SequenceType.AUDIO)); }
private ITemplateParameterContext createContext(TemplateParameterContext context) { switch (context) { case TMP: return new TmpTemplateParameterContext(conversionProvider.getFormat()); case TOOL: return new ToolTemplateParameterContext(configProvider.getConfig()); case DYNAMIC: return new DynamicTemplateParameterContext(this); case SEGMENT: return new SegmentTemplateParameterContext(); case SEQUENCE: return new SequenceTemplateParameterContext(); case RESOURCE: return new ResourceTemplateParameterContext(); case DEST: return new DestTemplateParameterContext(); default: /// nothing } return null; }
@Test public void testInitSegmentsNoDuplicate() throws Exception { TemplateParameterContextProvider contextProvider = createDefaultContextProvider(); contextProvider.getSegmentContext().initSegment(SegmentUUID.create("urn:uuid:3333")); contextProvider.getSegmentContext().initSegment(SegmentUUID.create("urn:uuid:1111")); contextProvider.getSegmentContext().initSegment(SegmentUUID.create("urn:uuid:2222")); contextProvider.getSegmentContext().initSegment(SegmentUUID.create("urn:uuid:3333")); contextProvider.getSegmentContext().initSegment(SegmentUUID.create("urn:uuid:1111")); assertEquals(3, contextProvider.getSegmentContext().getSegmentsNum()); assertArrayEquals( new SegmentUUID[]{ SegmentUUID.create("urn:uuid:3333"), SegmentUUID.create("urn:uuid:1111"), SegmentUUID.create("urn:uuid:2222")}, contextProvider.getSegmentContext().getUuids().toArray()); }
@Override protected void buildFromCpl() { // 1. get a composition edit rate (it's used if no specific edit rate is specified for a segment). this.compositionEditRate = ConversionHelper.parseEditRate(cpl2016.getEditRate()); // 2. go through all segments and all sequences and build segment, sequence and resource contexts. for (SegmentType segment : cpl2016.getSegmentList().getSegment()) { this.currentSegmentUuid = SegmentUUID.create(segment.getId()); contextProvider.getSegmentContext().initSegment(currentSegmentUuid); for (Object anySeqJaxb : segment.getSequenceList().getAny()) { if (!(anySeqJaxb instanceof JAXBElement)) { throw new ConversionException(String.format("Could not understand a sequence '%s'", anySeqJaxb.toString())); } JAXBElement jaxbElement = (JAXBElement) (anySeqJaxb); Object anySeq = jaxbElement.getValue(); SequenceTypeCpl currentSequenceTypeCpl = SequenceTypeCpl.fromName(jaxbElement.getName().getLocalPart()); if ((currentSequenceTypeCpl != null) && (anySeq instanceof SequenceType)) { this.currentSequence = (SequenceType) anySeq; this.currentSequenceType = currentSequenceTypeCpl.toSequenceType(); this.currentSequenceUuid = SequenceUUID.create(currentSequence.getTrackId()); processSequence(); } } } }
@Override public void execute() throws IOException { for (SegmentUUID segmentUuid : contextProvider.getSegmentContext().getUuids()) { this.currentSegmentUuid = segmentUuid; for (Object operation : execEachSegm.getPipeOrExecOnceOrExecEachSequence()) { if (operation instanceof PipeSegmentType) { execPipe((PipeSegmentType) operation); } else if (operation instanceof ExecOnceType) { execOnce((ExecOnceType) operation); } else if (operation instanceof ExecEachSequenceType) { execSequence((ExecEachSequenceType) operation); } else if (operation instanceof DynamicParameterConcatType) { addDynamicParameter((DynamicParameterConcatType) operation); } else { throw new ConversionException(String.format("Unknown Conversion Operation type: %s", operation.toString())); } } } }
@Test public void testInitDefaultSegmentParameters() throws Exception { TemplateParameterContextProvider contextProvider = createDefaultContextProvider(); contextProvider.getSegmentContext().initSegment( SegmentUUID.create("urn:uuid:3333")); contextProvider.getSegmentContext().initSegment( SegmentUUID.create("urn:uuid:1111")); contextProvider.getSegmentContext().initSegment( SegmentUUID.create("urn:uuid:2222")); assertDefaultSegmentParameters(contextProvider, 0, SegmentUUID.create("urn:uuid:3333")); assertDefaultSegmentParameters(contextProvider, 1, SegmentUUID.create("urn:uuid:1111")); assertDefaultSegmentParameters(contextProvider, 2, SegmentUUID.create("urn:uuid:2222")); }
/** * Resolves the given parameter. * The returned value is never null. * A runtime exception is thrown if parameter can not be resolved. * * @param templateParameter the template parameter to be resolved. * @param contextInfo a context info. Must contain information about the segment. * @return resolved parameter value as a string. Never null. */ @Override public String resolveTemplateParameter(TemplateParameter templateParameter, ContextInfo contextInfo) { SegmentContextParameters segmentParameter = SegmentContextParameters.fromName(templateParameter.getName()); if (segmentParameter == null) { throw new UnknownTemplateParameterNameException( templateParameter.toString(), String.format("Unknown Segment Template Parameter Name '%s'. Supported Segment Parameter Names: %s'", templateParameter.getName(), SegmentContextParameters.getSupportedContextParameters())); } return getParameterValue(templateParameter, segmentParameter, contextInfo); }
for (SegmentUUID segmUuid : contextProvider.getSegmentContext().getUuids()) { for (ResourceUUID resUuid : contextProvider.getResourceContext() .getUuids(ResourceKey.create(segmUuid, seqUuid, SequenceType.AUDIO))) {
segmentContext.initSegment(getSegmentUuid(i));
/** * 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; }
for (SequenceUUID seqUuid : contextProvider.getSequenceContext().getUuids(seqType)) { long offsetMs = destStartTimeMs; for (SegmentUUID segmUuid : contextProvider.getSegmentContext().getUuids()) { ResourceKey resourceKey = ResourceKey.create(segmUuid, seqUuid, seqType); for (ResourceUUID resUuid : resourceContext.getUuids(resourceKey)) {