From eb677eb4b9feb2f5cae8cf2b0d3ab1ee57d26207 Mon Sep 17 00:00:00 2001 From: ibaker Date: Mon, 14 Oct 2019 11:33:44 +0100 Subject: [PATCH] Add a Util.nullSafeArrayAppend and use it in HlsSampleStreamWrapper I could do this with nullSafeArrayConcat but this saves allocating a throw-away single-element array. PiperOrigin-RevId: 274545815 --- .../com/google/android/exoplayer2/util/Util.java | 15 ++++++++++++++- .../source/hls/HlsSampleStreamWrapper.java | 10 +++++----- 2 files changed, 19 insertions(+), 6 deletions(-) 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;