From 771d2032049b5531556feceddd6f06b874c32cff Mon Sep 17 00:00:00 2001 From: tofunmi Date: Tue, 24 Oct 2023 03:20:04 -0700 Subject: [PATCH] ExoAssetLoaderRenderer:Drop negative timestamp buffers when transmuxing Prevents queuing unneeded buffers when transmuxing. (we already do this when transcoding). PiperOrigin-RevId: 576080462 --- .../media3/transformer/ExoAssetLoaderBaseRenderer.java | 4 +--- .../media3/transformer/ExoAssetLoaderVideoRenderer.java | 4 ++++ 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/ExoAssetLoaderBaseRenderer.java b/libraries/transformer/src/main/java/androidx/media3/transformer/ExoAssetLoaderBaseRenderer.java index 5f42ef4831..1a155ea4ac 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/ExoAssetLoaderBaseRenderer.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/ExoAssetLoaderBaseRenderer.java @@ -174,9 +174,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; * *

The input buffer is cleared if it should be dropped. */ - protected boolean shouldDropInputBuffer(DecoderInputBuffer inputBuffer) { - return false; - } + protected abstract boolean shouldDropInputBuffer(DecoderInputBuffer inputBuffer); /** Called before a {@link DecoderInputBuffer} is queued to the decoder. */ protected void onDecoderInputReady(DecoderInputBuffer inputBuffer) {} 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 d5c9dff1ad..2871a7cf17 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/ExoAssetLoaderVideoRenderer.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/ExoAssetLoaderVideoRenderer.java @@ -115,6 +115,10 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; if (decoder == null) { inputBuffer.timeUs -= streamStartPositionUs; + if (inputBuffer.timeUs < 0) { + inputBuffer.clear(); + return true; + } } return false; }