/** * Generates a default audiomap basis on information of CPL virtual tracks. * * @return audiomap. */ private AudioMapType generateDefaultAudioMap(String locale) { AudioMapType audioMap = new AudioMapType(); audioMap.setMainAudio(new MainAudioType()); audioMap.getMainAudio().setLocale(locale); audioMap.getMainAudio().setName("main-audio.mov"); if (!fillDefaultAudioMapFromDescriptor(audioMap)) { setAudioMapDefaultOptions(audioMap); } return audioMap; }
@Override public Locale getLocale() { return LocaleHelper.fromITunesLocale(audioMap.getMainAudio().getLocale()); }
/** * Gets existing main audio XML option as object. * * @param mainAudio main audio * @return existing main audio XML option as object */ private Object getXmlMainAudioOption(MainAudioType mainAudio) { Object opt = null; if (mainAudio.getOption1A() != null) { opt = mainAudio.getOption1A(); } else if (mainAudio.getOption2() != null) { opt = mainAudio.getOption2(); } else if (mainAudio.getOption3() != null) { opt = mainAudio.getOption3(); } else if (mainAudio.getOption4() != null) { opt = mainAudio.getOption4(); } else if (mainAudio.getOption5() != null) { opt = mainAudio.getOption5(); } else if (mainAudio.getOption6() != null) { opt = mainAudio.getOption6(); } else { // nothing } return opt; }
audioMap.setMainAudio(new MainAudioType()); audioMap.getAlternativeAudio().add(new AlternativeAudioType()); mainAudio.setLocale("en-US"); mainAudio.setName("main-audio.mov"); mainAudio.setOption3(new Option3Type()); Option3Type opt3 = mainAudio.getOption3(); opt3.setTrack1(new Option3Type.Track1()); opt3.setTrack2(new Option3Type.Track2());
assertEquals("main-audio.mov", mainAudio.getName()); assertEquals("en-US", mainAudio.getLocale()); option6 = mainAudio.getOption6();
assertEquals("main-audio.mov", mainAudio.getName()); assertEquals("en-US", mainAudio.getLocale()); Option3Type option3 = mainAudio.getOption3();
private boolean fillDefaultAudioMapFromDescriptor(AudioMapType audioMap) { String mainLang = audioMap.getMainAudio().getLocale(); List<Pair<SequenceUUID, Integer>> mainChannels = channelMapper.guessMainAudio(mainLang); if (mainChannels.isEmpty()) { return false; } if (mainChannels.size() == 8) { audioMap.getMainAudio().setOption3(createXmlOption3(mainChannels)); } else if (mainChannels.size() == 2) { audioMap.getMainAudio().setOption6(createXmlOption6(mainChannels)); } else { return false; } channelMapper.guessAlternatives(mainLang).entrySet().forEach(entry -> { AlternativeAudioType audio = new AlternativeAudioType(); audio.setLocale(entry.getKey()); audio.setName(String.format("audio_%s.mov", entry.getKey().replace("-", "_").toUpperCase())); audio.setOption6(createXmlOption6(entry.getValue())); audioMap.getAlternativeAudio().add(audio); }); return true; }
/** * Gets mainAudio as AudioOption from parsed XML type. * * @param audioMap parsed audio map * @return mainAudio as AudioOption from parsed XML type */ private AudioOption getMainAudio(AudioMapType audioMap) { AudioOption option; Object xmlOpt = getXmlMainAudioOption(audioMap.getMainAudio()); verifyOption(xmlOpt); option = audioOptionFromXmlOption(xmlOpt, audioMap.getMainAudio().getLocale(), true); option.setFileName(audioMap.getMainAudio().getName()); option.setLocale(audioMap.getMainAudio().getLocale()); return option; }
/** * Create an instance of {@link MainAudioType } * */ public MainAudioType createMainAudioType() { return new MainAudioType(); }
Option3Type opt3 = audioMap.getMainAudio().getOption3();
/** * Create an instance of {@link MainAudioType } * */ public MainAudioType createMainAudioType() { return new MainAudioType(); }
Option3Type opt3 = audioMap.getMainAudio().getOption3();
/** * Gets mapper options that contains expected layout for all audiomap opts, which aren't linked to related track explicitly. * * @return list of all options that aren't linked to related tracks */ private List<Pair<LayoutType, String>> getMapperLayoutOptions() { List<Pair<LayoutType, String>> options = new ArrayList<>(); MainAudioType mainAudio = audioMap.getMainAudio(); Object mainOption = getXmlMainAudioOption(mainAudio); verifyOption(mainOption); if (isOptionEmpty(mainOption)) { options.add(getMapperLayoutOption(mainOption, mainAudio.getLocale())); } audioMap.getAlternativeAudio().forEach(altAudio -> { Object altOption = getXmlAlternativeAudioOption(altAudio); verifyOption(altOption); if (isOptionEmpty(altOption)) { options.add(getMapperLayoutOption(altOption, altAudio.getLocale())); } }); return options; }
@Test public void testUpdateLocale() throws Exception { /* PREPARATION */ String seq1 = "urn:uuid:63b41d86-c5df-4169-b036-3a25024bd711"; TemplateParameterContextProvider contextProvider = TemplateParameterContextCreator.createDefaultContextProvider(); prepareCplVirtualTracksWithChannels(contextProvider, trackChannels(seq1, 1)); /* EXECUTION */ AudioMapXmlProvider provider = createAndInitProvider(contextProvider); provider.setLocale(Locale.CANADA_FRENCH); /* VALIDATION */ assertEquals("fr-CA", provider.getAudioMap().getMainAudio().getLocale()); }