diff --git a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/CompositeAssetLoader.java b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/CompositeAssetLoader.java index d78879c1e3..72df238012 100644 --- a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/CompositeAssetLoader.java +++ b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/CompositeAssetLoader.java @@ -39,6 +39,7 @@ import com.google.common.collect.ImmutableMap; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicInteger; /** @@ -90,7 +91,7 @@ import java.util.concurrent.atomic.AtomicInteger; currentMediaItemIndex = new AtomicInteger(); handler = clock.createHandler(looper, /* callback= */ null); sampleConsumersByTrackType = new HashMap<>(); - mediaItemChangedListenersByTrackType = new HashMap<>(); + mediaItemChangedListenersByTrackType = new ConcurrentHashMap<>(); processedInputsBuilder = new ImmutableList.Builder<>(); nonEndedTracks = new AtomicInteger(); // It's safe to use "this" because we don't start the AssetLoader before exiting the @@ -145,6 +146,8 @@ import java.util.concurrent.atomic.AtomicInteger; * *

There can't be more than one {@link OnMediaItemChangedListener} for the same track type. * + *

Can be called from any thread. + * * @param onMediaItemChangedListener The {@link OnMediaItemChangedListener}. * @param trackType The {@link C.TrackType} for which to listen to {@link MediaItem} change * events. Must be {@link C#TRACK_TYPE_AUDIO} or {@link C#TRACK_TYPE_VIDEO}. @@ -234,9 +237,9 @@ import java.util.concurrent.atomic.AtomicInteger; onMediaItemChanged(trackType, format); if (nonEndedTracks.get() == 1 && sampleConsumersByTrackType.size() == 2) { for (Map.Entry entry : sampleConsumersByTrackType.entrySet()) { - int listenerTrackType = entry.getKey(); - if (trackType != listenerTrackType) { - onMediaItemChanged(listenerTrackType, /* format= */ null); + int outputTrackType = entry.getKey(); + if (trackType != outputTrackType) { + onMediaItemChanged(outputTrackType, /* format= */ null); } } }