From 6dfb387117b2a12d5141014dd49fe32afcec3886 Mon Sep 17 00:00:00 2001 From: kimvde Date: Mon, 15 May 2023 12:10:21 +0100 Subject: [PATCH] Refactor SequenceAssetLoader release In the past, the SequenceAssetLoader was released in TransformerInternal when the export ended. https://github.com/androidx/media/commit/fc539da0613d8703e2176fe5aa225df8cefb9c8f was made to release the SequenceAssetLoader earlier, when loading ended. This was causing player release timeouts because the last AssetLoader in the sequence was released before the SamplePipelines (see https://github.com/androidx/media/commit/0b40bc37ab0405dc7673702a9ac035a0a5c4cb63 for more information). The code that was releasing the SequenceAssetLoader was first commented out because we didn't have an understanding of what was happening. This change removes the early SequenceAssetLoader release all together. It doesn't have any effect as this code was already commented out. PiperOrigin-RevId: 532065673 --- .../transformer/SequenceAssetLoader.java | 36 ++++++------------- 1 file changed, 10 insertions(+), 26 deletions(-) diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/SequenceAssetLoader.java b/libraries/transformer/src/main/java/androidx/media3/transformer/SequenceAssetLoader.java index ab3af97d50..73bad80e7a 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/SequenceAssetLoader.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/SequenceAssetLoader.java @@ -167,10 +167,8 @@ import java.util.concurrent.atomic.AtomicInteger; @Override public void release() { - if (!released) { - currentAssetLoader.release(); - released = true; - } + currentAssetLoader.release(); + released = true; } private void addCurrentProcessedInput() { @@ -373,9 +371,7 @@ import java.util.concurrent.atomic.AtomicInteger; // SampleConsumer so there is no need to handle the case where the sample wasn't queued. checkState(sampleConsumer.queueInputBuffer()); audioLoopingEnded = true; - if (nonEndedTracks.decrementAndGet() == 0) { - release(); - } + nonEndedTracks.decrementAndGet(); } return false; } @@ -388,13 +384,8 @@ import java.util.concurrent.atomic.AtomicInteger; if (nonEndedTracks.get() == 0) { switchAssetLoader(); } - } else { - checkState(sampleConsumer.queueInputBuffer()); - if (nonEndedTracks.get() == 0) { - release(); - } + return true; } - return true; } checkState(sampleConsumer.queueInputBuffer()); @@ -472,17 +463,13 @@ import java.util.concurrent.atomic.AtomicInteger; @Override public void signalEndOfVideoInput() { + nonEndedTracks.decrementAndGet(); boolean videoEnded = isLooping ? videoLoopingEnded : currentMediaItemIndex == editedMediaItems.size() - 1; if (videoEnded) { sampleConsumer.signalEndOfVideoInput(); - } - if (nonEndedTracks.decrementAndGet() == 0) { - if (videoEnded) { - release(); - } else { - switchAssetLoader(); - } + } else if (nonEndedTracks.get() == 0) { + switchAssetLoader(); } } @@ -490,6 +477,9 @@ import java.util.concurrent.atomic.AtomicInteger; handler.post( () -> { try { + if (released) { + return; + } addCurrentProcessedInput(); totalDurationUs += currentAssetDurationUs; currentAssetLoader.release(); @@ -512,11 +502,5 @@ import java.util.concurrent.atomic.AtomicInteger; } }); } - - private void release() { - // TODO(b/276415739): releasing the player earlier causes more release timeouts on emulator - // tests. Figure out what the cause is and uncomment the line below once fixed. - // handler.post(SequenceAssetLoader.this::release); - } } }