From 1c1b78e63599e1526b9724186856a976df1768f4 Mon Sep 17 00:00:00 2001 From: jbibik Date: Thu, 20 Jul 2023 15:53:19 +0100 Subject: [PATCH] Test for Decoder with Mp4WebvttParser corrected PiperOrigin-RevId: 549629289 --- ...egatingSubtitleDecoderWithMp4WebvttParserTest.java | 11 ++++++++++- .../media3/extractor/text/webvtt/Mp4WebvttParser.java | 6 ++---- .../extractor/text/webvtt/Mp4WebvttParserTest.java | 10 ++++++++-- 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/text/DelegatingSubtitleDecoderWithMp4WebvttParserTest.java b/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/text/DelegatingSubtitleDecoderWithMp4WebvttParserTest.java index e7618a3703..293645c7e2 100644 --- a/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/text/DelegatingSubtitleDecoderWithMp4WebvttParserTest.java +++ b/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/text/DelegatingSubtitleDecoderWithMp4WebvttParserTest.java @@ -166,7 +166,9 @@ public final class DelegatingSubtitleDecoderWithMp4WebvttParserTest { DelegatingSubtitleDecoder decoder = new DelegatingSubtitleDecoder( "DelegatingSubtitleDecoderWithMp4WebvttParser", new Mp4WebvttParser()); + Subtitle result = decoder.decode(SINGLE_CUE_SAMPLE, SINGLE_CUE_SAMPLE.length, false); + // Line feed must be trimmed by the decoder Cue expectedCue = WebvttCueParser.newCueForText("Hello World"); assertMp4WebvttSubtitleEquals(result, expectedCue); @@ -177,7 +179,9 @@ public final class DelegatingSubtitleDecoderWithMp4WebvttParserTest { DelegatingSubtitleDecoder decoder = new DelegatingSubtitleDecoder( "DelegatingSubtitleDecoderWithMp4WebvttParser", new Mp4WebvttParser()); + Subtitle result = decoder.decode(DOUBLE_CUE_SAMPLE, DOUBLE_CUE_SAMPLE.length, false); + Cue firstExpectedCue = WebvttCueParser.newCueForText("Hello World"); Cue secondExpectedCue = WebvttCueParser.newCueForText("Bye Bye"); assertMp4WebvttSubtitleEquals(result, firstExpectedCue, secondExpectedCue); @@ -188,8 +192,12 @@ public final class DelegatingSubtitleDecoderWithMp4WebvttParserTest { DelegatingSubtitleDecoder decoder = new DelegatingSubtitleDecoder( "DelegatingSubtitleDecoderWithMp4WebvttParser", new Mp4WebvttParser()); + Subtitle result = decoder.decode(NO_CUE_SAMPLE, NO_CUE_SAMPLE.length, false); - assertThat(result.getEventTimeCount()).isEqualTo(0); + + assertThat(result.getEventTimeCount()).isEqualTo(1); + assertThat(result.getEventTime(0)).isEqualTo(0); + assertThat(result.getCues(0)).isEmpty(); } // Negative tests. @@ -199,6 +207,7 @@ public final class DelegatingSubtitleDecoderWithMp4WebvttParserTest { DelegatingSubtitleDecoder decoder = new DelegatingSubtitleDecoder( "DelegatingSubtitleDecoderWithMp4WebvttParser", new Mp4WebvttParser()); + assertThrows( IllegalArgumentException.class, () -> decoder.decode(INCOMPLETE_HEADER_SAMPLE, INCOMPLETE_HEADER_SAMPLE.length, false)); diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/text/webvtt/Mp4WebvttParser.java b/libraries/extractor/src/main/java/androidx/media3/extractor/text/webvtt/Mp4WebvttParser.java index dd2d1e10ee..fbad0f5818 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/text/webvtt/Mp4WebvttParser.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/text/webvtt/Mp4WebvttParser.java @@ -72,10 +72,8 @@ public final class Mp4WebvttParser implements SubtitleParser { parsableByteArray.skipBytes(boxSize - BOX_HEADER_SIZE); } } - return cues.isEmpty() - ? ImmutableList.of() - : ImmutableList.of( - new CuesWithTiming(cues, /* startTimeUs= */ 0, /* durationUs= */ C.TIME_UNSET)); + return ImmutableList.of( + new CuesWithTiming(cues, /* startTimeUs= */ C.TIME_UNSET, /* durationUs= */ C.TIME_UNSET)); } @Override diff --git a/libraries/extractor/src/test/java/androidx/media3/extractor/text/webvtt/Mp4WebvttParserTest.java b/libraries/extractor/src/test/java/androidx/media3/extractor/text/webvtt/Mp4WebvttParserTest.java index a090c2ef59..8f92fda170 100644 --- a/libraries/extractor/src/test/java/androidx/media3/extractor/text/webvtt/Mp4WebvttParserTest.java +++ b/libraries/extractor/src/test/java/androidx/media3/extractor/text/webvtt/Mp4WebvttParserTest.java @@ -18,6 +18,7 @@ package androidx.media3.extractor.text.webvtt; import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertThrows; +import androidx.media3.common.C; import androidx.media3.common.text.Cue; import androidx.media3.extractor.text.CuesWithTiming; import androidx.test.ext.junit.runners.AndroidJUnit4; @@ -181,8 +182,13 @@ public final class Mp4WebvttParserTest { @Test public void noCueSample() { Mp4WebvttParser parser = new Mp4WebvttParser(); + List result = parser.parse(NO_CUE_SAMPLE); - assertThat(result).isEmpty(); + + assertThat(result).hasSize(1); + assertThat(result.get(0).cues).isEmpty(); + assertThat(result.get(0).startTimeUs).isEqualTo(C.TIME_UNSET); + assertThat(result.get(0).durationUs).isEqualTo(C.TIME_UNSET); } // Negative tests. @@ -205,7 +211,7 @@ public final class Mp4WebvttParserTest { private void assertMp4WebvttSubtitleEquals( List cuesWithTimings, Cue... expectedCues) { assertThat(cuesWithTimings).hasSize(1); - assertThat(cuesWithTimings.get(0).startTimeUs).isEqualTo(0); + assertThat(cuesWithTimings.get(0).startTimeUs).isEqualTo(C.TIME_UNSET); ImmutableList allCues = cuesWithTimings.get(0).cues; assertThat(allCues).hasSize(expectedCues.length); for (int i = 0; i < allCues.size(); i++) {