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