Use a longer timeout for running Transformer on emulators

PiperOrigin-RevId: 566688502
This commit is contained in:
claincly 2023-09-19 11:16:47 -07:00 committed by Copybara-Service
parent db7c33b01c
commit 08c72b927d

View File

@ -40,6 +40,7 @@ import androidx.media3.common.Timeline;
import androidx.media3.common.Tracks; import androidx.media3.common.Tracks;
import androidx.media3.common.util.Clock; import androidx.media3.common.util.Clock;
import androidx.media3.common.util.UnstableApi; import androidx.media3.common.util.UnstableApi;
import androidx.media3.common.util.Util;
import androidx.media3.exoplayer.DefaultLoadControl; import androidx.media3.exoplayer.DefaultLoadControl;
import androidx.media3.exoplayer.ExoPlayer; import androidx.media3.exoplayer.ExoPlayer;
import androidx.media3.exoplayer.Renderer; import androidx.media3.exoplayer.Renderer;
@ -53,6 +54,7 @@ import androidx.media3.exoplayer.trackselection.DefaultTrackSelector;
import androidx.media3.exoplayer.video.VideoRendererEventListener; import androidx.media3.exoplayer.video.VideoRendererEventListener;
import androidx.media3.extractor.DefaultExtractorsFactory; import androidx.media3.extractor.DefaultExtractorsFactory;
import androidx.media3.extractor.mp4.Mp4Extractor; import androidx.media3.extractor.mp4.Mp4Extractor;
import com.google.common.base.Ascii;
import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap;
/** An {@link AssetLoader} implementation that uses an {@link ExoPlayer} to load samples. */ /** An {@link AssetLoader} implementation that uses an {@link ExoPlayer} to load samples. */
@ -140,6 +142,12 @@ public final class ExoPlayerAssetLoader implements AssetLoader {
} }
} }
/**
* The timeout value, in milliseconds, to set on the internal {@link ExoPlayer} instance when
* running on an emulator.
*/
private static final long EMULATOR_RELEASE_TIMEOUT_MS = 5_000;
private final EditedMediaItem editedMediaItem; private final EditedMediaItem editedMediaItem;
private final CapturingDecoderFactory decoderFactory; private final CapturingDecoderFactory decoderFactory;
private final ExoPlayer player; private final ExoPlayer player;
@ -187,7 +195,8 @@ public final class ExoPlayerAssetLoader implements AssetLoader {
.setTrackSelector(trackSelector) .setTrackSelector(trackSelector)
.setLoadControl(loadControl) .setLoadControl(loadControl)
.setLooper(looper) .setLooper(looper)
.setUsePlatformDiagnostics(false); .setUsePlatformDiagnostics(false)
.setReleaseTimeoutMs(getReleaseTimeoutMs());
if (clock != Clock.DEFAULT) { if (clock != Clock.DEFAULT) {
// Transformer.Builder#setClock is also @VisibleForTesting, so if we're using a non-default // Transformer.Builder#setClock is also @VisibleForTesting, so if we're using a non-default
// clock we must be in a test context. // clock we must be in a test context.
@ -363,4 +372,12 @@ public final class ExoPlayerAssetLoader implements AssetLoader {
assetLoaderListener.onError(ExportException.createForAssetLoader(error, errorCode)); assetLoaderListener.onError(ExportException.createForAssetLoader(error, errorCode));
} }
} }
private static long getReleaseTimeoutMs() {
// b/297916906 - Emulators need a larger timeout for releasing.
return Ascii.toLowerCase(Util.DEVICE).contains("emulator")
|| Ascii.toLowerCase(Util.DEVICE).contains("generic")
? EMULATOR_RELEASE_TIMEOUT_MS
: ExoPlayer.DEFAULT_RELEASE_TIMEOUT_MS;
}
} }