From 44b2071ee0e901ac91322d686e30eb5adf67b0f3 Mon Sep 17 00:00:00 2001 From: rohks Date: Mon, 11 Dec 2023 09:35:46 +0000 Subject: [PATCH] Add nullness checks --- .../src/main/java/androidx/media3/extractor/MpeghUtil.java | 6 +++--- .../media3/extractor/ts/DefaultTsPayloadReaderFactory.java | 6 ------ .../main/java/androidx/media3/extractor/ts/MpeghReader.java | 4 +++- .../main/java/androidx/media3/extractor/ts/TsExtractor.java | 2 -- 4 files changed, 6 insertions(+), 12 deletions(-) diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/MpeghUtil.java b/libraries/extractor/src/main/java/androidx/media3/extractor/MpeghUtil.java index a310577a1c..b951f4f051 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/MpeghUtil.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/MpeghUtil.java @@ -15,6 +15,7 @@ */ package androidx.media3.extractor; +import static androidx.media3.common.util.Assertions.checkNotNull; import static java.lang.annotation.ElementType.TYPE_USE; import androidx.annotation.IntDef; @@ -72,7 +73,6 @@ public final class MpeghUtil { frameBytes = C.LENGTH_UNSET; mainStreamLabel = C.INDEX_UNSET; mpegh3daProfileLevelIndication = C.INDEX_UNSET; - compatibleSetIndication = null; } /** @@ -555,8 +555,9 @@ public final class MpeghUtil { data.skipBits(4); // reserved mpegh3daConfig.compatibleProfileLevelSet = new byte[numCompatibleSets]; for (int idx = 0; idx < numCompatibleSets; idx++) { - mpegh3daConfig.compatibleProfileLevelSet[idx] = (byte) data.readBits(8); + checkNotNull(mpegh3daConfig.compatibleProfileLevelSet)[idx] = (byte) data.readBits(8); } + } else { data.skipBits(C.BITS_PER_BYTE * usacConfigExtLength); } @@ -812,7 +813,6 @@ public final class MpeghUtil { mpegh3daProfileLevelIndication = C.INDEX_UNSET; samplingFrequency = C.RATE_UNSET_INT; standardFrameSamples = C.LENGTH_UNSET; - compatibleProfileLevelSet = null; } } } diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/ts/DefaultTsPayloadReaderFactory.java b/libraries/extractor/src/main/java/androidx/media3/extractor/ts/DefaultTsPayloadReaderFactory.java index 75d3b24af6..401a0167e2 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/ts/DefaultTsPayloadReaderFactory.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/ts/DefaultTsPayloadReaderFactory.java @@ -66,34 +66,29 @@ public final class DefaultTsPayloadReaderFactory implements TsPayloadReader.Fact * synchronization samples (key-frames). */ public static final int FLAG_ALLOW_NON_IDR_KEYFRAMES = 1; - /** * Prevents the creation of {@link AdtsReader} and {@link LatmReader} instances. This flag should * be enabled if the transport stream contains no packets for an AAC elementary stream that is * declared in the PMT. */ public static final int FLAG_IGNORE_AAC_STREAM = 1 << 1; - /** * Prevents the creation of {@link H264Reader} instances. This flag should be enabled if the * transport stream contains no packets for an H.264 elementary stream that is declared in the * PMT. */ public static final int FLAG_IGNORE_H264_STREAM = 1 << 2; - /** * When extracting H.264 samples, whether to split the input stream into access units (samples) * based on slice headers. This flag should be disabled if the stream contains access unit * delimiters (AUDs). */ public static final int FLAG_DETECT_ACCESS_UNITS = 1 << 3; - /** * Prevents the creation of {@link SectionPayloadReader}s for splice information sections * (SCTE-35). */ public static final int FLAG_IGNORE_SPLICE_INFO_STREAM = 1 << 4; - /** * Whether the list of {@code closedCaptionFormats} passed to {@link * DefaultTsPayloadReaderFactory#DefaultTsPayloadReaderFactory(int, List)} should be used in spite @@ -101,7 +96,6 @@ public final class DefaultTsPayloadReaderFactory implements TsPayloadReader.Fact * closedCaptionFormats} will be ignored if the PMT contains closed captions service descriptors. */ public static final int FLAG_OVERRIDE_CAPTION_DESCRIPTORS = 1 << 5; - /** * Sets whether HDMV DTS audio streams will be handled. If this flag is set, SCTE subtitles will * not be detected, as they share the same elementary stream type as HDMV DTS. diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/ts/MpeghReader.java b/libraries/extractor/src/main/java/androidx/media3/extractor/ts/MpeghReader.java index e43e52e636..2413421a79 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/ts/MpeghReader.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/ts/MpeghReader.java @@ -15,6 +15,7 @@ */ package androidx.media3.extractor.ts; +import static androidx.media3.common.util.Assertions.checkStateNotNull; import static androidx.media3.extractor.ts.TsPayloadReader.FLAG_DATA_ALIGNMENT_INDICATOR; import static androidx.media3.extractor.ts.TsPayloadReader.FLAG_RANDOM_ACCESS_INDICATOR; @@ -59,7 +60,7 @@ public final class MpeghReader implements ElementaryStreamReader { public MpeghReader() { dataBuffer = new ParsableByteArray(0); dataBitBuffer = new ParsableBitArray(); - clearDataBuffer(); + rapPending = true; timeUs = C.TIME_UNSET; timeUsPending = C.TIME_UNSET; prevFrameInfo = new MpeghUtil.FrameInfo(); @@ -110,6 +111,7 @@ public final class MpeghReader implements ElementaryStreamReader { @Override public void packetFinished(boolean isEndOfInput) { + checkStateNotNull(output); // Asserts that createTracks has been called. // try to find the sync packet and adjust the data buffer if necessary maybeFindSync(); diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/ts/TsExtractor.java b/libraries/extractor/src/main/java/androidx/media3/extractor/ts/TsExtractor.java index 53cea741cd..872fc9c7a5 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/ts/TsExtractor.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/ts/TsExtractor.java @@ -81,10 +81,8 @@ public final class TsExtractor implements Extractor { /** Behave as defined in ISO/IEC 13818-1. */ public static final int MODE_MULTI_PMT = 0; - /** Assume only one PMT will be contained in the stream, even if more are declared by the PAT. */ public static final int MODE_SINGLE_PMT = 1; - /** * Enable single PMT mode, map {@link TrackOutput}s by their type (instead of PID) and ignore * continuity counters.