From 2e5e1e7c0f35f2e1fcf1cd6397808b936996dbb3 Mon Sep 17 00:00:00 2001 From: olly Date: Wed, 17 Feb 2021 01:38:19 +0000 Subject: [PATCH] SilenceSampleStream.readData: Handle flags-only buffers The SampleStream.readData contract is that when reading a sample with a flags-only buffer, the buffer timestamp and flags should be set and the read position should not be advanced. #minor-release PiperOrigin-RevId: 357842130 --- .../android/exoplayer2/source/SilenceMediaSource.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/SilenceMediaSource.java b/library/core/src/main/java/com/google/android/exoplayer2/source/SilenceMediaSource.java index b802717ee2..447a3e3ad5 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/source/SilenceMediaSource.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/source/SilenceMediaSource.java @@ -305,11 +305,15 @@ public final class SilenceMediaSource extends BaseMediaSource { return C.RESULT_BUFFER_READ; } + buffer.timeUs = getAudioPositionUs(positionBytes); + buffer.addFlag(C.BUFFER_FLAG_KEY_FRAME); + if (buffer.isFlagsOnly()) { + return C.RESULT_BUFFER_READ; + } + int bytesToWrite = (int) min(SILENCE_SAMPLE.length, bytesRemaining); buffer.ensureSpaceForWrite(bytesToWrite); buffer.data.put(SILENCE_SAMPLE, /* offset= */ 0, bytesToWrite); - buffer.timeUs = getAudioPositionUs(positionBytes); - buffer.addFlag(C.BUFFER_FLAG_KEY_FRAME); positionBytes += bytesToWrite; return C.RESULT_BUFFER_READ; }