diff --git a/library/core/src/main/java/com/google/android/exoplayer2/text/ExoplayerCuesDecoder.java b/library/core/src/main/java/com/google/android/exoplayer2/text/ExoplayerCuesDecoder.java index 7a238ed9c5..33703778d2 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/text/ExoplayerCuesDecoder.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/text/ExoplayerCuesDecoder.java @@ -93,11 +93,15 @@ public final class ExoplayerCuesDecoder implements SubtitleDecoder { if (inputBufferState != INPUT_BUFFER_QUEUED || availableOutputBuffers.isEmpty()) { return null; } - SingleEventSubtitle subtitle = - new SingleEventSubtitle( - inputBuffer.timeUs, cueDecoder.decode(checkNotNull(inputBuffer.data).array())); SubtitleOutputBuffer outputBuffer = availableOutputBuffers.removeFirst(); - outputBuffer.setContent(inputBuffer.timeUs, subtitle, /* subsampleOffsetUs=*/ 0); + if (inputBuffer.isEndOfStream()) { + outputBuffer.addFlag(C.BUFFER_FLAG_END_OF_STREAM); + } else { + SingleEventSubtitle subtitle = + new SingleEventSubtitle( + inputBuffer.timeUs, cueDecoder.decode(checkNotNull(inputBuffer.data).array())); + outputBuffer.setContent(inputBuffer.timeUs, subtitle, /* subsampleOffsetUs=*/ 0); + } inputBuffer.clear(); inputBufferState = INPUT_BUFFER_AVAILABLE; return outputBuffer; diff --git a/library/core/src/test/java/com/google/android/exoplayer2/text/ExoplayerCuesDecoderTest.java b/library/core/src/test/java/com/google/android/exoplayer2/text/ExoplayerCuesDecoderTest.java index 15ab964058..645f5a4197 100644 --- a/library/core/src/test/java/com/google/android/exoplayer2/text/ExoplayerCuesDecoderTest.java +++ b/library/core/src/test/java/com/google/android/exoplayer2/text/ExoplayerCuesDecoderTest.java @@ -19,6 +19,7 @@ import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertThrows; import androidx.test.ext.junit.runners.AndroidJUnit4; +import com.google.android.exoplayer2.C; import com.google.common.collect.ImmutableList; import java.util.ArrayList; import java.util.List; @@ -93,6 +94,17 @@ public class ExoplayerCuesDecoderTest { assertThat(decoder.dequeueOutputBuffer()).isNotNull(); } + @Test + public void dequeueOutputBuffer_queuedOnEndOfStreamInputBuffer_returnsEndOfStreamOutputBuffer() + throws Exception { + SubtitleInputBuffer inputBuffer = decoder.dequeueInputBuffer(); + inputBuffer.setFlags(C.BUFFER_FLAG_END_OF_STREAM); + decoder.queueInputBuffer(inputBuffer); + SubtitleOutputBuffer outputBuffer = decoder.dequeueOutputBuffer(); + + assertThat(outputBuffer.isEndOfStream()).isTrue(); + } + @Test public void dequeueInputBuffer_withQueuedInput_returnsNull() throws Exception { SubtitleInputBuffer inputBuffer = decoder.dequeueInputBuffer();