diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/audio/DecoderAudioRenderer.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/audio/DecoderAudioRenderer.java index 959289b625..6a06f201d1 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/audio/DecoderAudioRenderer.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/audio/DecoderAudioRenderer.java @@ -532,6 +532,9 @@ public abstract class DecoderAudioRenderer< firstStreamSampleRead = true; inputBuffer.addFlag(C.BUFFER_FLAG_FIRST_SAMPLE); } + if (inputBuffer.timeUs < getLastResetPositionUs()) { + inputBuffer.addFlag(C.BUFFER_FLAG_DECODE_ONLY); + } inputBuffer.flip(); inputBuffer.format = inputFormat; decoder.queueInputBuffer(inputBuffer); diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/metadata/MetadataRenderer.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/metadata/MetadataRenderer.java index dfb868258e..f80d7a6062 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/metadata/MetadataRenderer.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/metadata/MetadataRenderer.java @@ -240,6 +240,9 @@ public final class MetadataRenderer extends BaseRenderer implements Callback { inputStreamEnded = true; } else { buffer.subsampleOffsetUs = subsampleOffsetUs; + if (buffer.timeUs < getLastResetPositionUs()) { + buffer.addFlag(C.BUFFER_FLAG_DECODE_ONLY); + } buffer.flip(); @Nullable Metadata metadata = castNonNull(decoder).decode(buffer); if (metadata != null) { diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/text/TextRenderer.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/text/TextRenderer.java index 70756a3d4d..cc9af12cc9 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/text/TextRenderer.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/text/TextRenderer.java @@ -316,6 +316,9 @@ public final class TextRenderer extends BaseRenderer implements Callback { waitingForKeyFrame &= !nextInputBuffer.isKeyFrame(); } if (!waitingForKeyFrame) { + if (nextInputBuffer.timeUs < getLastResetPositionUs()) { + nextInputBuffer.addFlag(C.BUFFER_FLAG_DECODE_ONLY); + } checkNotNull(decoder).queueInputBuffer(nextInputBuffer); this.nextInputBuffer = null; } diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/DecoderVideoRenderer.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/DecoderVideoRenderer.java index c300010bd9..b7242928df 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/DecoderVideoRenderer.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/DecoderVideoRenderer.java @@ -775,6 +775,9 @@ public abstract class DecoderVideoRenderer extends BaseRenderer { formatQueue.add(inputBuffer.timeUs, inputFormat); waitingForFirstSampleInFormat = false; } + if (inputBuffer.timeUs < getLastResetPositionUs()) { + inputBuffer.addFlag(C.BUFFER_FLAG_DECODE_ONLY); + } inputBuffer.flip(); inputBuffer.format = inputFormat; onQueueInputBuffer(inputBuffer); diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/spherical/CameraMotionRenderer.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/spherical/CameraMotionRenderer.java index c76e2d24a6..7f02fdefe4 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/spherical/CameraMotionRenderer.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/spherical/CameraMotionRenderer.java @@ -107,7 +107,8 @@ public final class CameraMotionRenderer extends BaseRenderer { } lastTimestampUs = buffer.timeUs; - if (listener == null || buffer.isDecodeOnly()) { + boolean isDecodeOnly = lastTimestampUs < getLastResetPositionUs(); + if (listener == null || isDecodeOnly) { continue; } diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/ExoAssetLoaderVideoRenderer.java b/libraries/transformer/src/main/java/androidx/media3/transformer/ExoAssetLoaderVideoRenderer.java index 5b795dbbe7..d5c9dff1ad 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/ExoAssetLoaderVideoRenderer.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/ExoAssetLoaderVideoRenderer.java @@ -121,7 +121,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; @Override protected void onDecoderInputReady(DecoderInputBuffer inputBuffer) { - if (inputBuffer.isDecodeOnly()) { + if (inputBuffer.timeUs < getLastResetPositionUs()) { decodeOnlyPresentationTimestamps.add(inputBuffer.timeUs); } }