/** * Gets all {@link Subtitle} of a track. * * @param trackNr Track number, starting from 1 * @return List of {@link Subtitle} found */ public List<Subtitle> getSubtitles(int trackNr) { if (trackNr <= 0) { return Collections.emptyList(); } DvdTitle title = info.getTitle(trackNr - 1); DvdTitleSet vts = title.getTitleSet(); List<Subtitle> result = new ArrayList<>(); Set<Integer> seen = new HashSet<>(); // make sure streams appear only once int index = 1; for (DvdSubtitle ds : vts.getSubs()) { if (ds.getStream43Id() != null && !seen.contains(ds.getStream43Id())) { result.add( createSubtitle( index++, ds.getStream43Id(), title.getVtsn(), ds, SubtitleFormat.STANDARD)); seen.add(ds.getStream43Id()); } if (ds.getStreamWideId() != null && !seen.contains(ds.getStreamWideId())) { result.add( createSubtitle( index++, ds.getStreamWideId(), title.getVtsn(), ds, SubtitleFormat.WIDE)); seen.add(ds.getStreamWideId()); } if (ds.getStreamLetterboxId() != null && !seen.contains(ds.getStreamLetterboxId())) { result.add( createSubtitle( index++, ds.getStreamLetterboxId(), title.getVtsn(), ds, SubtitleFormat.LETTERBOX)); seen.add(ds.getStreamLetterboxId()); } if (ds.getStreamPanScanId() != null && !seen.contains(ds.getStreamPanScanId())) { result.add( createSubtitle( index++, ds.getStreamPanScanId(), title.getVtsn(), ds, SubtitleFormat.PANSCAN)); seen.add(ds.getStreamPanScanId()); } } return result; }