From 1105f194cab86a7c835a90a00fb733494994c6e2 Mon Sep 17 00:00:00 2001 From: kimvde Date: Tue, 9 May 2023 16:10:26 +0000 Subject: [PATCH] Avoid swallowing exceptions when switching AssetLoader Exceptions thrown when switching AssetLoader were not reported through the error listener. Therefore, the resources were not released and the export was not ending. PiperOrigin-RevId: 530626300 --- .../transformer/SequenceAssetLoader.java | 35 +++++++++++-------- 1 file changed, 20 insertions(+), 15 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 9f534ef74f..3163bd830e 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/SequenceAssetLoader.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/SequenceAssetLoader.java @@ -470,22 +470,27 @@ import java.util.concurrent.atomic.AtomicInteger; private void switchAssetLoader() { handler.post( () -> { - addCurrentProcessedInput(); - totalDurationUs += currentAssetDurationUs; - currentAssetLoader.release(); - isCurrentAssetFirstAsset = false; - currentMediaItemIndex++; - if (currentMediaItemIndex == editedMediaItems.size()) { - currentMediaItemIndex = 0; - sequenceLoopCount++; + try { + addCurrentProcessedInput(); + totalDurationUs += currentAssetDurationUs; + currentAssetLoader.release(); + isCurrentAssetFirstAsset = false; + currentMediaItemIndex++; + if (currentMediaItemIndex == editedMediaItems.size()) { + currentMediaItemIndex = 0; + sequenceLoopCount++; + } + EditedMediaItem editedMediaItem = editedMediaItems.get(currentMediaItemIndex); + currentAssetLoader = + assetLoaderFactory.createAssetLoader( + editedMediaItem, + checkNotNull(Looper.myLooper()), + /* listener= */ SequenceAssetLoader.this); + currentAssetLoader.start(); + } catch (RuntimeException e) { + onError( + ExportException.createForAssetLoader(e, ExportException.ERROR_CODE_UNSPECIFIED)); } - EditedMediaItem editedMediaItem = editedMediaItems.get(currentMediaItemIndex); - currentAssetLoader = - assetLoaderFactory.createAssetLoader( - editedMediaItem, - checkNotNull(Looper.myLooper()), - /* listener= */ SequenceAssetLoader.this); - currentAssetLoader.start(); }); }