Example #1
0
  /**
   * 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;
  }