/** * Create an instance of {@link CompositionPlaylistType } * */ public CompositionPlaylistType createCompositionPlaylistType() { return new CompositionPlaylistType(); }
@Override public String getCompositionTimecodeStart() { if (cpl2016.getCompositionTimecode() == null) { return null; } String timecode = cpl2016.getCompositionTimecode().getTimecodeStartAddress(); if (StringUtils.isEmpty(timecode)) { return null; } return timecode; }
@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 Map<String, List<Object>> getEssenceDescriptors() { if (cpl2016.getEssenceDescriptorList() == null) { return Collections.emptyMap(); } Map<String, List<Object>> result = new HashMap<>(); for (EssenceDescriptorBaseType essenceDescriptorBase : cpl2016.getEssenceDescriptorList().getEssenceDescriptor()) { result.put(essenceDescriptorBase.getId(), essenceDescriptorBase.getAny()); } return result; }
@Override protected String getDefaultCplLanguage() { // assume default language to be first language of first locale LocaleList localeList = cpl2016.getLocaleList(); // no locales defined if (localeList == null) { return null; } Optional<LocaleType> locale = localeList.getLocale().stream().findFirst(); if (!locale.isPresent()) { return null; } // no languages defined LanguageList languageList = locale.get().getLanguageList(); if (languageList == null) { return null; } Optional<String> language = languageList.getLanguage().stream().findFirst(); return language.orElse(null); }
/** * Create an instance of {@link CompositionPlaylistType } * */ public CompositionPlaylistType createCompositionPlaylistType() { return new CompositionPlaylistType(); }
@Override public BigFraction getCompositionTimecodeRate() { if (cpl2016.getCompositionTimecode() == null) { return null; } BigInteger rate = cpl2016.getCompositionTimecode().getTimecodeRate(); boolean isDropFrame = cpl2016.getCompositionTimecode().isTimecodeDropFrame(); if (rate == null || BigInteger.ZERO.equals(rate)) { return null; } // return as-is if non-drop if (!isDropFrame) { return new BigFraction(rate); } // return as 30000/1001 for 30 if drop frame return new BigFraction( rate.multiply(BigInteger.valueOf(1000)), BigInteger.valueOf(1001)); }