diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/CeaUtil.java b/libraries/extractor/src/main/java/androidx/media3/extractor/CeaUtil.java index 8421d44605..58b7c45d52 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/CeaUtil.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/CeaUtil.java @@ -15,6 +15,8 @@ */ package androidx.media3.extractor; +import static androidx.media3.common.util.Assertions.checkState; + import androidx.media3.common.C; import androidx.media3.common.util.Log; import androidx.media3.common.util.ParsableByteArray; @@ -104,14 +106,13 @@ public final class CeaUtil { for (TrackOutput output : outputs) { ccDataBuffer.setPosition(sampleStartPosition); output.sampleData(ccDataBuffer, sampleLength); - if (presentationTimeUs != C.TIME_UNSET) { - output.sampleMetadata( - presentationTimeUs, - C.BUFFER_FLAG_KEY_FRAME, - sampleLength, - /* offset= */ 0, - /* cryptoData= */ null); - } + checkState(presentationTimeUs != C.TIME_UNSET); + output.sampleMetadata( + presentationTimeUs, + C.BUFFER_FLAG_KEY_FRAME, + sampleLength, + /* offset= */ 0, + /* cryptoData= */ null); } } diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/ts/Ac3Reader.java b/libraries/extractor/src/main/java/androidx/media3/extractor/ts/Ac3Reader.java index e5ce22e44d..fe69bff1f0 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/ts/Ac3Reader.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/ts/Ac3Reader.java @@ -15,6 +15,7 @@ */ package androidx.media3.extractor.ts; +import static androidx.media3.common.util.Assertions.checkState; import static java.lang.Math.min; import static java.lang.annotation.ElementType.TYPE_USE; @@ -112,9 +113,7 @@ public final class Ac3Reader implements ElementaryStreamReader { @Override public void packetStarted(long pesTimeUs, @TsPayloadReader.Flags int flags) { - if (pesTimeUs != C.TIME_UNSET) { - timeUs = pesTimeUs; - } + timeUs = pesTimeUs; } @Override @@ -143,10 +142,10 @@ public final class Ac3Reader implements ElementaryStreamReader { output.sampleData(data, bytesToRead); bytesRead += bytesToRead; if (bytesRead == sampleSize) { - if (timeUs != C.TIME_UNSET) { - output.sampleMetadata(timeUs, C.BUFFER_FLAG_KEY_FRAME, sampleSize, 0, null); - timeUs += sampleDurationUs; - } + // packetStarted method must be called before reading samples. + checkState(timeUs != C.TIME_UNSET); + output.sampleMetadata(timeUs, C.BUFFER_FLAG_KEY_FRAME, sampleSize, 0, null); + timeUs += sampleDurationUs; state = STATE_FINDING_SYNC; } break; diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/ts/Ac4Reader.java b/libraries/extractor/src/main/java/androidx/media3/extractor/ts/Ac4Reader.java index 5947a29132..5c967d724f 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/ts/Ac4Reader.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/ts/Ac4Reader.java @@ -15,6 +15,7 @@ */ package androidx.media3.extractor.ts; +import static androidx.media3.common.util.Assertions.checkState; import static java.lang.Math.min; import static java.lang.annotation.ElementType.TYPE_USE; @@ -114,9 +115,7 @@ public final class Ac4Reader implements ElementaryStreamReader { @Override public void packetStarted(long pesTimeUs, @TsPayloadReader.Flags int flags) { - if (pesTimeUs != C.TIME_UNSET) { - timeUs = pesTimeUs; - } + timeUs = pesTimeUs; } @Override @@ -145,10 +144,10 @@ public final class Ac4Reader implements ElementaryStreamReader { output.sampleData(data, bytesToRead); bytesRead += bytesToRead; if (bytesRead == sampleSize) { - if (timeUs != C.TIME_UNSET) { - output.sampleMetadata(timeUs, C.BUFFER_FLAG_KEY_FRAME, sampleSize, 0, null); - timeUs += sampleDurationUs; - } + // packetStarted method must be called before reading samples. + checkState(timeUs != C.TIME_UNSET); + output.sampleMetadata(timeUs, C.BUFFER_FLAG_KEY_FRAME, sampleSize, 0, null); + timeUs += sampleDurationUs; state = STATE_FINDING_SYNC; } break; diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/ts/AdtsReader.java b/libraries/extractor/src/main/java/androidx/media3/extractor/ts/AdtsReader.java index de80f047d6..836c46d5f9 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/ts/AdtsReader.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/ts/AdtsReader.java @@ -15,6 +15,7 @@ */ package androidx.media3.extractor.ts; +import static androidx.media3.common.util.Assertions.checkState; import static java.lang.Math.min; import androidx.annotation.Nullable; @@ -155,9 +156,7 @@ public final class AdtsReader implements ElementaryStreamReader { @Override public void packetStarted(long pesTimeUs, @TsPayloadReader.Flags int flags) { - if (pesTimeUs != C.TIME_UNSET) { - timeUs = pesTimeUs; - } + timeUs = pesTimeUs; } @Override @@ -537,10 +536,10 @@ public final class AdtsReader implements ElementaryStreamReader { currentOutput.sampleData(data, bytesToRead); bytesRead += bytesToRead; if (bytesRead == sampleSize) { - if (timeUs != C.TIME_UNSET) { - currentOutput.sampleMetadata(timeUs, C.BUFFER_FLAG_KEY_FRAME, sampleSize, 0, null); - timeUs += currentSampleDuration; - } + // packetStarted method must be called before reading samples. + checkState(timeUs != C.TIME_UNSET); + currentOutput.sampleMetadata(timeUs, C.BUFFER_FLAG_KEY_FRAME, sampleSize, 0, null); + timeUs += currentSampleDuration; setFindingSampleState(); } } diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/ts/DtsReader.java b/libraries/extractor/src/main/java/androidx/media3/extractor/ts/DtsReader.java index c28faf501d..7dd515ce66 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/ts/DtsReader.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/ts/DtsReader.java @@ -15,6 +15,7 @@ */ package androidx.media3.extractor.ts; +import static androidx.media3.common.util.Assertions.checkState; import static java.lang.Math.min; import androidx.annotation.Nullable; @@ -89,9 +90,7 @@ public final class DtsReader implements ElementaryStreamReader { @Override public void packetStarted(long pesTimeUs, @TsPayloadReader.Flags int flags) { - if (pesTimeUs != C.TIME_UNSET) { - timeUs = pesTimeUs; - } + timeUs = pesTimeUs; } @Override @@ -117,10 +116,10 @@ public final class DtsReader implements ElementaryStreamReader { output.sampleData(data, bytesToRead); bytesRead += bytesToRead; if (bytesRead == sampleSize) { - if (timeUs != C.TIME_UNSET) { - output.sampleMetadata(timeUs, C.BUFFER_FLAG_KEY_FRAME, sampleSize, 0, null); - timeUs += sampleDurationUs; - } + // packetStarted method must be called before consuming samples. + checkState(timeUs != C.TIME_UNSET); + output.sampleMetadata(timeUs, C.BUFFER_FLAG_KEY_FRAME, sampleSize, 0, null); + timeUs += sampleDurationUs; state = STATE_FINDING_SYNC; } break; diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/ts/DvbSubtitleReader.java b/libraries/extractor/src/main/java/androidx/media3/extractor/ts/DvbSubtitleReader.java index 5de21926f7..02d111c855 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/ts/DvbSubtitleReader.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/ts/DvbSubtitleReader.java @@ -15,6 +15,7 @@ */ package androidx.media3.extractor.ts; +import static androidx.media3.common.util.Assertions.checkState; import static androidx.media3.extractor.ts.TsPayloadReader.FLAG_DATA_ALIGNMENT_INDICATOR; import androidx.media3.common.C; @@ -79,9 +80,7 @@ public final class DvbSubtitleReader implements ElementaryStreamReader { return; } writingSample = true; - if (pesTimeUs != C.TIME_UNSET) { - sampleTimeUs = pesTimeUs; - } + sampleTimeUs = pesTimeUs; sampleBytesWritten = 0; bytesToCheck = 2; } @@ -89,10 +88,10 @@ public final class DvbSubtitleReader implements ElementaryStreamReader { @Override public void packetFinished(boolean isEndOfInput) { if (writingSample) { - if (sampleTimeUs != C.TIME_UNSET) { - for (TrackOutput output : outputs) { - output.sampleMetadata(sampleTimeUs, C.BUFFER_FLAG_KEY_FRAME, sampleBytesWritten, 0, null); - } + // packetStarted method must be called before reading sample. + checkState(sampleTimeUs != C.TIME_UNSET); + for (TrackOutput output : outputs) { + output.sampleMetadata(sampleTimeUs, C.BUFFER_FLAG_KEY_FRAME, sampleBytesWritten, 0, null); } writingSample = false; } diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/ts/ElementaryStreamReader.java b/libraries/extractor/src/main/java/androidx/media3/extractor/ts/ElementaryStreamReader.java index 3d60db839c..a6decc12a2 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/ts/ElementaryStreamReader.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/ts/ElementaryStreamReader.java @@ -21,7 +21,20 @@ import androidx.media3.common.util.UnstableApi; import androidx.media3.extractor.ExtractorOutput; import androidx.media3.extractor.TrackOutput; -/** Extracts individual samples from an elementary media stream, preserving original order. */ +/** + * Extracts individual samples from an elementary media stream, preserving original order. + * + *
The expected sequence of method calls is as follows: + * + *