mirror of
https://github.com/samsonjs/media.git
synced 2026-04-27 15:07:40 +00:00
Add uncontroversial HLS nullness annotations
This helps get HlsMediaPeriod off the blacklist. PiperOrigin-RevId: 277076633
This commit is contained in:
parent
87c30c0ba8
commit
817772fcbd
2 changed files with 19 additions and 17 deletions
|
|
@ -48,7 +48,6 @@ import com.google.android.exoplayer2.util.MimeTypes;
|
||||||
import com.google.android.exoplayer2.util.Util;
|
import com.google.android.exoplayer2.util.Util;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
|
|
@ -56,6 +55,7 @@ import java.util.IdentityHashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import org.checkerframework.checker.nullness.compatqual.NullableType;
|
import org.checkerframework.checker.nullness.compatqual.NullableType;
|
||||||
|
import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A {@link MediaPeriod} that loads an HLS stream.
|
* A {@link MediaPeriod} that loads an HLS stream.
|
||||||
|
|
@ -80,7 +80,7 @@ public final class HlsMediaPeriod implements MediaPeriod, HlsSampleStreamWrapper
|
||||||
|
|
||||||
@Nullable private Callback callback;
|
@Nullable private Callback callback;
|
||||||
private int pendingPrepareCount;
|
private int pendingPrepareCount;
|
||||||
private TrackGroupArray trackGroups;
|
private @MonotonicNonNull TrackGroupArray trackGroups;
|
||||||
private HlsSampleStreamWrapper[] sampleStreamWrappers;
|
private HlsSampleStreamWrapper[] sampleStreamWrappers;
|
||||||
private HlsSampleStreamWrapper[] enabledSampleStreamWrappers;
|
private HlsSampleStreamWrapper[] enabledSampleStreamWrappers;
|
||||||
// Maps sample stream wrappers to variant/rendition index by matching array positions.
|
// Maps sample stream wrappers to variant/rendition index by matching array positions.
|
||||||
|
|
@ -167,7 +167,8 @@ public final class HlsMediaPeriod implements MediaPeriod, HlsSampleStreamWrapper
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TrackGroupArray getTrackGroups() {
|
public TrackGroupArray getTrackGroups() {
|
||||||
return trackGroups;
|
// trackGroups will only be null if period hasn't been prepared or has been released.
|
||||||
|
return Assertions.checkNotNull(trackGroups);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: When the master playlist does not de-duplicate variants by URL and allows Renditions with
|
// TODO: When the master playlist does not de-duplicate variants by URL and allows Renditions with
|
||||||
|
|
@ -282,8 +283,8 @@ public final class HlsMediaPeriod implements MediaPeriod, HlsSampleStreamWrapper
|
||||||
streamWrapperIndices.clear();
|
streamWrapperIndices.clear();
|
||||||
// Select tracks for each child, copying the resulting streams back into a new streams array.
|
// Select tracks for each child, copying the resulting streams back into a new streams array.
|
||||||
SampleStream[] newStreams = new SampleStream[selections.length];
|
SampleStream[] newStreams = new SampleStream[selections.length];
|
||||||
SampleStream[] childStreams = new SampleStream[selections.length];
|
@NullableType SampleStream[] childStreams = new SampleStream[selections.length];
|
||||||
TrackSelection[] childSelections = new TrackSelection[selections.length];
|
@NullableType TrackSelection[] childSelections = new TrackSelection[selections.length];
|
||||||
int newEnabledSampleStreamWrapperCount = 0;
|
int newEnabledSampleStreamWrapperCount = 0;
|
||||||
HlsSampleStreamWrapper[] newEnabledSampleStreamWrappers =
|
HlsSampleStreamWrapper[] newEnabledSampleStreamWrappers =
|
||||||
new HlsSampleStreamWrapper[sampleStreamWrappers.length];
|
new HlsSampleStreamWrapper[sampleStreamWrappers.length];
|
||||||
|
|
@ -297,15 +298,16 @@ public final class HlsMediaPeriod implements MediaPeriod, HlsSampleStreamWrapper
|
||||||
childStreams, streamResetFlags, positionUs, forceReset);
|
childStreams, streamResetFlags, positionUs, forceReset);
|
||||||
boolean wrapperEnabled = false;
|
boolean wrapperEnabled = false;
|
||||||
for (int j = 0; j < selections.length; j++) {
|
for (int j = 0; j < selections.length; j++) {
|
||||||
|
SampleStream childStream = childStreams[j];
|
||||||
if (selectionChildIndices[j] == i) {
|
if (selectionChildIndices[j] == i) {
|
||||||
// Assert that the child provided a stream for the selection.
|
// Assert that the child provided a stream for the selection.
|
||||||
Assertions.checkState(childStreams[j] != null);
|
Assertions.checkNotNull(childStream);
|
||||||
newStreams[j] = childStreams[j];
|
newStreams[j] = childStream;
|
||||||
wrapperEnabled = true;
|
wrapperEnabled = true;
|
||||||
streamWrapperIndices.put(childStreams[j], i);
|
streamWrapperIndices.put(childStream, i);
|
||||||
} else if (streamChildIndices[j] == i) {
|
} else if (streamChildIndices[j] == i) {
|
||||||
// Assert that the child cleared any previous stream.
|
// Assert that the child cleared any previous stream.
|
||||||
Assertions.checkState(childStreams[j] == null);
|
Assertions.checkState(childStream == null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (wrapperEnabled) {
|
if (wrapperEnabled) {
|
||||||
|
|
@ -329,8 +331,8 @@ public final class HlsMediaPeriod implements MediaPeriod, HlsSampleStreamWrapper
|
||||||
// Copy the new streams back into the streams array.
|
// Copy the new streams back into the streams array.
|
||||||
System.arraycopy(newStreams, 0, streams, 0, newStreams.length);
|
System.arraycopy(newStreams, 0, streams, 0, newStreams.length);
|
||||||
// Update the local state.
|
// Update the local state.
|
||||||
enabledSampleStreamWrappers = Arrays.copyOf(newEnabledSampleStreamWrappers,
|
enabledSampleStreamWrappers =
|
||||||
newEnabledSampleStreamWrapperCount);
|
Util.nullSafeArrayCopy(newEnabledSampleStreamWrappers, newEnabledSampleStreamWrapperCount);
|
||||||
compositeSequenceableLoader =
|
compositeSequenceableLoader =
|
||||||
compositeSequenceableLoaderFactory.createCompositeSequenceableLoader(
|
compositeSequenceableLoaderFactory.createCompositeSequenceableLoader(
|
||||||
enabledSampleStreamWrappers);
|
enabledSampleStreamWrappers);
|
||||||
|
|
@ -713,7 +715,7 @@ public final class HlsMediaPeriod implements MediaPeriod, HlsSampleStreamWrapper
|
||||||
HlsSampleStreamWrapper sampleStreamWrapper =
|
HlsSampleStreamWrapper sampleStreamWrapper =
|
||||||
buildSampleStreamWrapper(
|
buildSampleStreamWrapper(
|
||||||
C.TRACK_TYPE_AUDIO,
|
C.TRACK_TYPE_AUDIO,
|
||||||
scratchPlaylistUrls.toArray(new Uri[0]),
|
scratchPlaylistUrls.toArray(Util.castNonNullTypeArray(new Uri[0])),
|
||||||
scratchPlaylistFormats.toArray(new Format[0]),
|
scratchPlaylistFormats.toArray(new Format[0]),
|
||||||
/* muxedAudioFormat= */ null,
|
/* muxedAudioFormat= */ null,
|
||||||
/* muxedCaptionFormats= */ Collections.emptyList(),
|
/* muxedCaptionFormats= */ Collections.emptyList(),
|
||||||
|
|
@ -734,7 +736,7 @@ public final class HlsMediaPeriod implements MediaPeriod, HlsSampleStreamWrapper
|
||||||
int trackType,
|
int trackType,
|
||||||
Uri[] playlistUrls,
|
Uri[] playlistUrls,
|
||||||
Format[] playlistFormats,
|
Format[] playlistFormats,
|
||||||
Format muxedAudioFormat,
|
@Nullable Format muxedAudioFormat,
|
||||||
@Nullable List<Format> muxedCaptionFormats,
|
@Nullable List<Format> muxedCaptionFormats,
|
||||||
Map<String, DrmInitData> overridingDrmInitData,
|
Map<String, DrmInitData> overridingDrmInitData,
|
||||||
long positionUs) {
|
long positionUs) {
|
||||||
|
|
@ -808,7 +810,7 @@ public final class HlsMediaPeriod implements MediaPeriod, HlsSampleStreamWrapper
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Format deriveAudioFormat(
|
private static Format deriveAudioFormat(
|
||||||
Format variantFormat, Format mediaTagFormat, boolean isPrimaryTrackInVariant) {
|
Format variantFormat, @Nullable Format mediaTagFormat, boolean isPrimaryTrackInVariant) {
|
||||||
String codecs;
|
String codecs;
|
||||||
Metadata metadata;
|
Metadata metadata;
|
||||||
int channelCount = Format.NO_VALUE;
|
int channelCount = Format.NO_VALUE;
|
||||||
|
|
|
||||||
|
|
@ -111,7 +111,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
|
||||||
private final Callback callback;
|
private final Callback callback;
|
||||||
private final HlsChunkSource chunkSource;
|
private final HlsChunkSource chunkSource;
|
||||||
private final Allocator allocator;
|
private final Allocator allocator;
|
||||||
private final Format muxedAudioFormat;
|
@Nullable private final Format muxedAudioFormat;
|
||||||
private final DrmSessionManager<?> drmSessionManager;
|
private final DrmSessionManager<?> drmSessionManager;
|
||||||
private final LoadErrorHandlingPolicy loadErrorHandlingPolicy;
|
private final LoadErrorHandlingPolicy loadErrorHandlingPolicy;
|
||||||
private final Loader loader;
|
private final Loader loader;
|
||||||
|
|
@ -186,7 +186,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
|
||||||
Map<String, DrmInitData> overridingDrmInitData,
|
Map<String, DrmInitData> overridingDrmInitData,
|
||||||
Allocator allocator,
|
Allocator allocator,
|
||||||
long positionUs,
|
long positionUs,
|
||||||
Format muxedAudioFormat,
|
@Nullable Format muxedAudioFormat,
|
||||||
DrmSessionManager<?> drmSessionManager,
|
DrmSessionManager<?> drmSessionManager,
|
||||||
LoadErrorHandlingPolicy loadErrorHandlingPolicy,
|
LoadErrorHandlingPolicy loadErrorHandlingPolicy,
|
||||||
EventDispatcher eventDispatcher,
|
EventDispatcher eventDispatcher,
|
||||||
|
|
@ -311,7 +311,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
|
||||||
* part of the track selection.
|
* part of the track selection.
|
||||||
*/
|
*/
|
||||||
public boolean selectTracks(
|
public boolean selectTracks(
|
||||||
TrackSelection[] selections,
|
@NullableType TrackSelection[] selections,
|
||||||
boolean[] mayRetainStreamFlags,
|
boolean[] mayRetainStreamFlags,
|
||||||
@NullableType SampleStream[] streams,
|
@NullableType SampleStream[] streams,
|
||||||
boolean[] streamResetFlags,
|
boolean[] streamResetFlags,
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue