From 9631923440b8be2239225a2099842410548c7ebd Mon Sep 17 00:00:00 2001 From: ibaker Date: Wed, 16 Aug 2023 17:05:37 +0100 Subject: [PATCH] Update `SsaParser` logic to show it never returns `duration=UNSET` In an upcoming change I'm going to mark SSA subtitles as 'merge replacement behavior', which will mean that `CuesWithTiming.durationUs=C.TIME_UNSET` will not be permitted. This CL makes it clear that `SsaParser` obeys that invariant. PiperOrigin-RevId: 557504633 --- .../androidx/media3/extractor/text/ssa/SsaParser.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/text/ssa/SsaParser.java b/libraries/extractor/src/main/java/androidx/media3/extractor/text/ssa/SsaParser.java index d227b45199..601e0fec7d 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/text/ssa/SsaParser.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/text/ssa/SsaParser.java @@ -139,11 +139,13 @@ public final class SsaParser implements SubtitleParser { // An empty cue list has already been implicitly encoded in the duration of the previous // sample (unless there was no previous sample). continue; + } else if (i == cues.size() - 1) { + // The last cue list must be empty + throw new IllegalStateException(); } long startTimeUs = startTimesUs.get(i); - // The duration of the last CuesWithTiming is C.TIME_UNSET by design - long durationUs = - i == cues.size() - 1 ? C.TIME_UNSET : startTimesUs.get(i + 1) - startTimesUs.get(i); + // It's safe to inspect element i+1, because we already exited the loop above if i=size()-1. + long durationUs = startTimesUs.get(i + 1) - startTimesUs.get(i); cuesWithStartTimeAndDuration.add( new CuesWithTiming(cuesForThisStartTime, startTimeUs, durationUs)); }