diff --git a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mp4/Mp4Extractor.java b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mp4/Mp4Extractor.java index 7b2a90237d..1ce54db78d 100644 --- a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mp4/Mp4Extractor.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mp4/Mp4Extractor.java @@ -18,7 +18,6 @@ package com.google.android.exoplayer2.extractor.mp4; import static com.google.android.exoplayer2.extractor.mp4.AtomParsers.parseTraks; import static com.google.android.exoplayer2.extractor.mp4.Sniffer.BRAND_HEIC; import static com.google.android.exoplayer2.extractor.mp4.Sniffer.BRAND_QUICKTIME; -import static com.google.android.exoplayer2.util.Assertions.checkNotNull; import static com.google.android.exoplayer2.util.Util.castNonNull; import static java.lang.Math.max; import static java.lang.Math.min; @@ -163,8 +162,8 @@ public final class Mp4Extractor implements Extractor, SeekMap { private int sampleCurrentNalBytesRemaining; // Extractor outputs. - private @MonotonicNonNull ExtractorOutput extractorOutput; - private Mp4Track @MonotonicNonNull [] tracks; + private ExtractorOutput extractorOutput; + private Mp4Track[] tracks; private long @MonotonicNonNull [][] accumulatedSampleSizes; private int firstVideoTrackIndex; @@ -195,6 +194,8 @@ public final class Mp4Extractor implements Extractor, SeekMap { nalLength = new ParsableByteArray(4); scratch = new ParsableByteArray(); sampleTrackIndex = C.INDEX_UNSET; + extractorOutput = ExtractorOutput.PLACEHOLDER; + tracks = new Mp4Track[0]; } @Override @@ -225,7 +226,7 @@ public final class Mp4Extractor implements Extractor, SeekMap { sefReader.reset(); slowMotionMetadataEntries.clear(); } - } else if (tracks != null) { + } else { for (Mp4Track track : tracks) { updateSampleIndex(track, timeUs); if (track.trueHdSampleRechunker != null) { @@ -278,7 +279,7 @@ public final class Mp4Extractor implements Extractor, SeekMap { @Override public SeekPoints getSeekPoints(long timeUs) { - if (checkNotNull(tracks).length == 0) { + if (tracks.length == 0) { return new SeekPoints(SeekPoint.START); } @@ -500,7 +501,6 @@ public final class Mp4Extractor implements Extractor, SeekMap { isQuickTime, /* modifyTrackFunction= */ track -> track); - ExtractorOutput extractorOutput = checkNotNull(this.extractorOutput); int trackCount = trackSampleTables.size(); for (int i = 0; i < trackCount; i++) { TrackSampleTable trackSampleTable = trackSampleTables.get(i); @@ -580,7 +580,7 @@ public final class Mp4Extractor implements Extractor, SeekMap { return RESULT_END_OF_INPUT; } } - Mp4Track track = castNonNull(tracks)[sampleTrackIndex]; + Mp4Track track = tracks[sampleTrackIndex]; TrackOutput trackOutput = track.trackOutput; int sampleIndex = track.sampleIndex; long position = track.sampleTable.offsets[sampleIndex]; @@ -697,7 +697,7 @@ public final class Mp4Extractor implements Extractor, SeekMap { long minAccumulatedBytes = Long.MAX_VALUE; boolean minAccumulatedBytesRequiresReload = true; int minAccumulatedBytesTrackIndex = C.INDEX_UNSET; - for (int trackIndex = 0; trackIndex < castNonNull(tracks).length; trackIndex++) { + for (int trackIndex = 0; trackIndex < tracks.length; trackIndex++) { Mp4Track track = tracks[trackIndex]; int sampleIndex = track.sampleIndex; if (sampleIndex == track.sampleTable.sampleCount) { @@ -742,7 +742,6 @@ public final class Mp4Extractor implements Extractor, SeekMap { private void processEndOfStreamReadingAtomHeader() { if (fileType == FILE_TYPE_HEIC && (flags & FLAG_READ_MOTION_PHOTO_METADATA) != 0) { // Add image track and prepare media. - ExtractorOutput extractorOutput = checkNotNull(this.extractorOutput); TrackOutput trackOutput = extractorOutput.track(/* id= */ 0, C.TRACK_TYPE_IMAGE); @Nullable Metadata metadata = motionPhotoMetadata == null ? null : new Metadata(motionPhotoMetadata);