From 87d1c3e6242f94fdbcb0359ff27ceb2a987f0281 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 --- .../android/exoplayer2/transformer/TransformerInternal.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/TransformerInternal.java b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/TransformerInternal.java index b3e9411db7..43f9969a19 100644 --- a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/TransformerInternal.java +++ b/library/transformer/src/main/java/com/google/android/exoplayer2/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; }