From 67d15ec5756b1eb7008769f7389cb49a31a486a7 Mon Sep 17 00:00:00 2001 From: kimvde Date: Tue, 7 Mar 2023 18:48:31 +0000 Subject: [PATCH] Fix threading issueis in SequenceAssetLoaderListener Callbacks onTrackCount and onTrackAdded can be called simultaneously from different threads. Before this fix, it was possible for the MuxerWrapper and FallbackListener track count to never be set, or to be set with incorrect values. PiperOrigin-RevId: 514779719 --- .../androidx/media3/transformer/TransformerInternal.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/TransformerInternal.java b/libraries/transformer/src/main/java/androidx/media3/transformer/TransformerInternal.java index 9bc5fbc6ea..78d8814ee6 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/TransformerInternal.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/TransformerInternal.java @@ -440,8 +440,8 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; ERROR_CODE_FAILED_RUNTIME_CHECK)); return; } - trackCountsToReport.decrementAndGet(); tracksToAdd.addAndGet(trackCount); + trackCountsToReport.decrementAndGet(); } @Override @@ -465,12 +465,11 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; } else { outputHasVideo.set(true); } - if (trackCountsToReport.get() == 0 && tracksToAdd.get() == 1) { + if (trackCountsToReport.get() == 0 && tracksToAdd.decrementAndGet() == 0) { int outputTrackCount = (outputHasAudio.get() ? 1 : 0) + (outputHasVideo.get() ? 1 : 0); muxerWrapper.setTrackCount(outputTrackCount); fallbackListener.setTrackCount(outputTrackCount); } - tracksToAdd.decrementAndGet(); return trackInfo.shouldTranscode; }