diff --git a/library/core/src/main/java/com/google/android/exoplayer2/util/Util.java b/library/core/src/main/java/com/google/android/exoplayer2/util/Util.java index ccc0bd6432..30e11f9744 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/util/Util.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/util/Util.java @@ -336,7 +336,20 @@ public final class Util { } /** - * Concatenates two non-null type arrays. + * Creates a new array containing {@code original} with {@code newElement} appended. + * + * @param original The input array. + * @param newElement The element to append. + * @return The new array. + */ + public static T[] nullSafeArrayAppend(T[] original, T newElement) { + @NullableType T[] result = Arrays.copyOf(original, original.length + 1); + result[original.length] = newElement; + return castNonNullTypeArray(result); + } + + /** + * Creates a new array containing the concatenation of two non-null type arrays. * * @param first The first array. * @param second The second array. diff --git a/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsSampleStreamWrapper.java b/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsSampleStreamWrapper.java index 9b4d0ebdac..6aaf204c2c 100644 --- a/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsSampleStreamWrapper.java +++ b/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsSampleStreamWrapper.java @@ -905,11 +905,11 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; trackOutput.setUpstreamFormatChangeListener(this); sampleQueueTrackIds = Arrays.copyOf(sampleQueueTrackIds, trackCount + 1); sampleQueueTrackIds[trackCount] = id; - sampleQueues = Arrays.copyOf(sampleQueues, trackCount + 1); - sampleQueues[trackCount] = trackOutput; - sampleQueueReaders = Arrays.copyOf(sampleQueueReaders, trackCount + 1); - sampleQueueReaders[trackCount] = - new DecryptableSampleQueueReader(sampleQueues[trackCount], drmSessionManager); + sampleQueues = Util.nullSafeArrayAppend(sampleQueues, trackOutput); + sampleQueueReaders = + Util.nullSafeArrayAppend( + sampleQueueReaders, + new DecryptableSampleQueueReader(sampleQueues[trackCount], drmSessionManager)); sampleQueueIsAudioVideoFlags = Arrays.copyOf(sampleQueueIsAudioVideoFlags, trackCount + 1); sampleQueueIsAudioVideoFlags[trackCount] = type == C.TRACK_TYPE_AUDIO || type == C.TRACK_TYPE_VIDEO;