for (SegmentUUID segmUuid : contextProvider.getSegmentContext().getUuids()) { ResourceKey resourceKey = ResourceKey.create(segmUuid, seqUuid, seqType); for (ResourceUUID resUuid : resourceContext.getUuids(resourceKey)) { ContextInfo contextInfo = new ContextInfoBuilder() .setResourceUuid(resUuid) .getParameterValue(ResourceContextParameters.EDIT_RATE, contextInfo)); BigInteger durationEU = new BigInteger(contextProvider.getResourceContext() .getParameterValue(ResourceContextParameters.DURATION_EDIT_UNIT, contextInfo)); BigInteger startTimeEU = new BigInteger(contextProvider.getResourceContext() .getParameterValue(ResourceContextParameters.START_TIME_EDIT_UNIT, contextInfo)); BigInteger endTimeEU = new BigInteger(contextProvider.getResourceContext() .getParameterValue(ResourceContextParameters.END_TIME_EDIT_UNIT, contextInfo)); long startTimeMs = ConversionHelper.editUnitToMilliSeconds(startTimeEU, editRate); long endTimeMs = ConversionHelper.editUnitToMilliSeconds(endTimeEU, editRate); resourceContext.addResourceParameter(resourceKey, resUuid, ResourceContextParameters.DURATION_MS, String.valueOf(durationMs)); resourceContext.addResourceParameter(resourceKey, resUuid, ResourceContextParameters.START_TIME_MS, String.valueOf(startTimeMs)); resourceContext.addResourceParameter(resourceKey, resUuid, ResourceContextParameters.END_TIME_MS, String.valueOf(endTimeMs)); String startTimeTimeCode = ConversionHelper.editUnitToTimecode(startTimeEU, editRate); String endTimeTimeCode = ConversionHelper.editUnitToTimecode(endTimeEU, editRate); resourceContext.addResourceParameter(resourceKey, resUuid, ResourceContextParameters.DURATION_TIMECODE, String.valueOf(durationTimecode)); resourceContext.addResourceParameter(resourceKey, resUuid, ResourceContextParameters.START_TIME_TIMECODE, String.valueOf(startTimeTimeCode));
/** * Inits a resource parameter defined by the given key and UUID. Defines default parameters (such as Resource UUID and number). * The method must be called for each resource before adding another parameters. * * @param resourceKey a resource key defining the parameter. * @param uuid resource UUID. * @return this resource template parameters context. */ public ResourceTemplateParameterContext initResource(ResourceKey resourceKey, ResourceUUID uuid) { if (!resources.containsKey(resourceKey) || !resources.get(resourceKey).contains(uuid)) { int resourceNum = getResourceCount(resourceKey); doAddParameter(resourceKey, uuid, ResourceContextParameters.UUID, uuid.getUuid()); doAddParameter(resourceKey, uuid, ResourceContextParameters.NUM, String.valueOf(resourceNum)); doAddParameter(resourceKey, uuid, ResourceContextParameters.REPEAT, String.valueOf(uuid.getRepeat())); } return this; }
contextProvider.getResourceContext().initResource(resourceKey, resourceId); contextProvider.getResourceContext().addResourceParameter(resourceKey, resourceId, ResourceContextParameters.ESSENCE, assetPath); contextProvider.getResourceContext().addResourceParameter(resourceKey, resourceId, ResourceContextParameters.EDIT_RATE, ConversionHelper.toEditRate(editRate)); contextProvider.getResourceContext().addResourceParameter(resourceKey, resourceId, ResourceContextParameters.START_TIME_EDIT_UNIT, startTimeEditUnit.toString()); durationEditUnit = trackFileResource.getIntrinsicDuration().subtract(startTimeEditUnit); contextProvider.getResourceContext().addResourceParameter(resourceKey, resourceId, ResourceContextParameters.DURATION_EDIT_UNIT, durationEditUnit.toString()); contextProvider.getResourceContext().addResourceParameter(resourceKey, resourceId, ResourceContextParameters.END_TIME_EDIT_UNIT, endTimeEditUnit.toString()); contextProvider.getResourceContext().addResourceParameter(resourceKey, resourceId, ResourceContextParameters.REPEAT_COUNT, repeatCount.toString()); contextProvider.getResourceContext().addResourceParameter(resourceKey, resourceId, ResourceContextParameters.TRACK_FILE_ID, trackId.getUuid()); contextProvider.getResourceContext().addResourceParameter(resourceKey, resourceId, ResourceContextParameters.ESSENCE_DESC_ID, essenceDescId);
/** * Adds a resource parameter. * * @param resourceKey a resource key defining the parameter. * @param uuid resource UUID. * @param paramName a enum defining the parameter name. * @param paramValue parameter value * @return this resource template parameters context. */ public ResourceTemplateParameterContext addResourceParameter(ResourceKey resourceKey, ResourceUUID uuid, ResourceContextParameters paramName, String paramValue) { initResource(resourceKey, uuid); doAddParameter(resourceKey, uuid, paramName, paramValue); return this; }
private void checkParameter(ResourceContextParameters param, ConversionParameterNameType conversionParam, ContextInfo contextInfo, BiPredicate<String, String> equality) throws ConversionNotAllowedException { String destinationParamValue = getDestinationValue(conversionParam, param); if (destinationParamValue == null || destinationParamValue.isEmpty()) { return; } if (contextProvider.getResourceContext().hasResourceParameter(param, contextInfo)) { String paramValue = contextProvider.getResourceContext().getParameterValue(param, contextInfo); if (!equality.test(paramValue, destinationParamValue)) { throw new ConversionNotAllowedException(param.getName(), paramValue, destinationParamValue, contextInfo.getSequenceUuid()); } } }
/** * Gets a duration of the given resource within a segment and sequence in edit units (frames or samples). * * @param contextProvider a context provider * @param contextInfo a context info defining a resource (all fields must be set). * @return a duration of the given resource within a segment and sequence in edit units (frames or samples) */ private static BigInteger getResourceDurationEU(TemplateParameterContextProvider contextProvider, ContextInfo contextInfo) { return new BigInteger(contextProvider.getResourceContext() .getParameterValue(ResourceContextParameters.DURATION_EDIT_UNIT, contextInfo)); }
private static void fillResourceParam(ResourceTemplateParameterContext resourceContext, ResourceKey resourceKey, ResourceUUID resourceUuid, ResourceContextParameters resParam, String value) { resourceContext.addResourceParameter( resourceKey, resourceUuid, resParam, value ); }
private Stream<ContextInfo> resourceStream(ContextInfo contextInfo) { return contextProvider.getResourceContext().getUuids(ResourceKey.create(contextInfo)).stream() .map(resUuid -> new ContextInfoBuilder() .setSequenceType(contextInfo.getSequenceType()) .setSequenceUuid(contextInfo.getSequenceUuid()) .setSegmentUuid(contextInfo.getSegmentUuid()) .setResourceUuid(resUuid) .build()); } }
for (SegmentUUID segmUuid : contextProvider.getSegmentContext().getUuids()) { for (ResourceUUID resUuid : contextProvider.getResourceContext() .getUuids(ResourceKey.create(segmUuid, seqUuid, SequenceType.AUDIO))) { ContextInfo contextInfo = new ContextInfoBuilder() .setResourceUuid(resUuid) .build(); if (!contextProvider.getResourceContext().hasResourceParameter( ResourceContextParameters.SOUNDFIELD_GROUP_ID, contextInfo)) { soundfieldGroupIdKey.append(""); } else { String soundFieldGroupId = contextProvider.getResourceContext().getParameterValue( ResourceContextParameters.SOUNDFIELD_GROUP_ID, contextInfo); soundfieldGroupIdKey.append(soundFieldGroupId); channelLayout = contextProvider.getResourceContext().getParameterValue( ResourceContextParameters.CHANNELS_LAYOUT, contextInfo);
private static void fillVideoResourceParameters() { ResourceTemplateParameterContext resourceContext = contextProvider.getResourceContext(); SequenceType seqType = SequenceType.VIDEO; int i = 0; for (SequenceUUID seqUuid : contextProvider.getSequenceContext().getUuids(seqType)) { for (SegmentUUID segmUuid : contextProvider.getSegmentContext().getUuids()) { ResourceKey resKey = ResourceKey.create(segmUuid, seqUuid, seqType); for (ResourceUUID resUuid : resourceContext.getUuids(resKey)) { resourceContext.addResourceParameter(resKey, resUuid, ResourceContextParameters.WIDTH, String.valueOf(widths[i])); resourceContext.addResourceParameter(resKey, resUuid, ResourceContextParameters.HEIGHT, String.valueOf(heights[i])); resourceContext.addResourceParameter(resKey, resUuid, ResourceContextParameters.FRAME_RATE, frameRates[i]); i++; } } } }
SequenceUUID.create("urn:uuid:a4f226e7-adac-45a4-adbf-83335cf02d0d"), SequenceType.VIDEO); assertEquals(5, resourceContext.getResourceCount(resKey)); assertArrayEquals( new ResourceUUID[]{ ResourceUUID.create("urn:uuid:2404d06b-4d65-4511-9cac-42d41196a1ec", 2) }, resourceContext.getUuids(resKey).toArray(new ResourceUUID[]{}) ); SequenceUUID.create("urn:uuid:63b41d86-c5df-4169-b036-3a25024bd711"), SequenceType.AUDIO); assertEquals(2, resourceContext.getResourceCount(resKey)); assertArrayEquals( new ResourceUUID[]{ ResourceUUID.create("urn:uuid:895820ef-e379-4021-a69e-8a898b0a9094", 1) }, resourceContext.getUuids(resKey).toArray(new ResourceUUID[]{}) ); SequenceUUID.create("urn:uuid:63b41d86-c5df-4169-b036-3a25024bd712"), SequenceType.AUDIO); assertEquals(2, resourceContext.getResourceCount(resKey)); assertArrayEquals( new ResourceUUID[]{ ResourceUUID.create("urn:uuid:895820ef-e379-4021-a69e-8a898b0a9096", 0)
resourceContext.initResource(resourceKey, resourceUuid);
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; }
/** * Gets a duration of the given resource within a segment and sequence in milliseconds. * * @param contextProvider a context provider * @param contextInfo a context info defining a resource (all fields must be set). * @return a duration of the given resource within a segment and sequence in milliseconds. */ private static long getResourceDurationMS(TemplateParameterContextProvider contextProvider, ContextInfo contextInfo) { return new BigInteger(contextProvider.getResourceContext() .getParameterValue(ResourceContextParameters.DURATION_MS, contextInfo)).longValue(); }
private static void fillResourceParam(ResourceTemplateParameterContext resourceContext, ResourceKey resourceKey, ResourceUUID resourceUuid, ResourceContextParameters resParam) { resourceContext.addResourceParameter( resourceKey, resourceUuid, resParam, String.format(RESOURCE_PARAMETER_FORMAT, resourceUuid, resParam.getName()) ); }
/** * 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 (SegmentUUID segmUuid : contextProvider.getSegmentContext().getUuids()) { for (ResourceUUID resUuid : contextProvider.getResourceContext() .getUuids(ResourceKey.create(segmUuid, seqUuid, SequenceType.AUDIO))) { ContextInfo contextInfo = new ContextInfoBuilder() .setResourceUuid(resUuid) .setSequenceType(SequenceType.AUDIO).build(); if (!contextProvider.getResourceContext().hasResourceParameter( ResourceContextParameters.CHANNELS_LAYOUT, contextInfo)) { String nextChannelLayout = contextProvider.getResourceContext().getParameterValue( ResourceContextParameters.CHANNELS_LAYOUT, contextInfo); if (StringUtils.isEmpty(nextChannelLayout)) { if (!contextProvider.getResourceContext().hasResourceParameter( ResourceContextParameters.CHANNELS_NUM, contextInfo)) { Integer channelsCount = Integer.parseInt(contextProvider.getResourceContext().getParameterValue( ResourceContextParameters.CHANNELS_NUM, contextInfo)); if (FFmpegAudioChannels.toFFmpegAudioChannels(nextChannelLayout).length != channelsCount) {
.getUuids(ResourceKey.create(segmUuid, seqUuid, SequenceType.AUDIO))) { if (channelsForSeq != null && j < channelsForSeq.length) { resourceContext.addResourceParameter( ResourceKey.create(segmUuid, seqUuid, SequenceType.AUDIO), resUuid, ResourceContextParameters.CHANNELS_LAYOUT, FFmpegAudioChannels.toChannelsLayoutString(channelsForSeq[j]) ); resourceContext.addResourceParameter( ResourceKey.create(segmUuid, seqUuid, SequenceType.AUDIO), resUuid, ResourceContextParameters.CHANNELS_NUM, resourceContext.addResourceParameter( ResourceKey.create(segmUuid, seqUuid, SequenceType.AUDIO), resUuid, ResourceContextParameters.SOUNDFIELD_GROUP_ID, resourceContext.addResourceParameter( ResourceKey.create(segmUuid, seqUuid, SequenceType.AUDIO), resUuid, ResourceContextParameters.LANG, resourceContext.addResourceParameter( ResourceKey.create(segmUuid, seqUuid, SequenceType.AUDIO), resUuid, ResourceContextParameters.CHANNELS_NUM,
for (SegmentUUID segmUuid : contextProvider.getSegmentContext().getUuids()) { ResourceKey resourceKey = ResourceKey.create(segmUuid, seqUuid, seqType); for (ResourceUUID resUuid : resourceContext.getUuids(resourceKey)) { ContextInfo contextInfo = new ContextInfoBuilder() .setResourceUuid(resUuid) .setSequenceUuid(seqUuid) .setSequenceType(seqType).build(); String essence = resourceContext.getParameterValue(ResourceContextParameters.ESSENCE, contextInfo); String editRate = resourceContext.getParameterValue(ResourceContextParameters.EDIT_RATE, contextInfo); BigFraction editRateFraction = ConversionHelper.parseEditRate(editRate); videoEssences.put(essence, editRateFraction); for (SegmentUUID segmUuid : contextProvider.getSegmentContext().getUuids()) { ResourceKey resourceKey = ResourceKey.create(segmUuid, seqUuid, seqType); for (ResourceUUID resUuid : resourceContext.getUuids(resourceKey)) { ContextInfo contextInfo = new ContextInfoBuilder() .setResourceUuid(resUuid) String essence = resourceContext.getParameterValue(ResourceContextParameters.ESSENCE, contextInfo); resourceContext.getParameterValue(ResourceContextParameters.START_TIME_EDIT_UNIT, contextInfo)); BigInteger durationEU = new BigInteger( resourceContext.getParameterValue(ResourceContextParameters.DURATION_EDIT_UNIT, contextInfo)); resourceContext.getParameterValue(ResourceContextParameters.EDIT_RATE, contextInfo)); resourceContext.addResourceParameter(resourceKey, resUuid, ResourceContextParameters.START_TIME_FRAME_EDIT_UNIT, startTimeInFrames);
private <T> T getResourceParameterValue(ContextInfo contextInfo, ResourceContextParameters parameter, Function<String, T> parser) { String value = contextProvider.getResourceContext().getParameterValue(parameter, contextInfo); return parser.apply(value); }