From b82f4b8e289d3bad550f669ad8bc12703b05955b Mon Sep 17 00:00:00 2001 From: Daniele Sparano Date: Thu, 14 Mar 2024 18:34:49 +0000 Subject: [PATCH] Tidy up dummy pusi, do not apply to H262 streams --- .../media3/extractor/ts/PesReader.java | 22 ++++++++++--------- .../media3/extractor/ts/TsExtractor.java | 3 +-- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/ts/PesReader.java b/libraries/extractor/src/main/java/androidx/media3/extractor/ts/PesReader.java index acf9af89f8..525572ea08 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/ts/PesReader.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/ts/PesReader.java @@ -36,10 +36,10 @@ public final class PesReader implements TsPayloadReader { private static final String TAG = "PesReader"; - public static final int STATE_FINDING_HEADER = 0; - public static final int STATE_READING_HEADER = 1; - public static final int STATE_READING_HEADER_EXTENSION = 2; - public static final int STATE_READING_BODY = 3; + private static final int STATE_FINDING_HEADER = 0; + private static final int STATE_READING_HEADER = 1; + private static final int STATE_READING_HEADER_EXTENSION = 2; + private static final int STATE_READING_BODY = 3; private static final int HEADER_SIZE = 9; private static final int MAX_HEADER_EXTENSION_SIZE = 10; @@ -165,12 +165,14 @@ public final class PesReader implements TsPayloadReader { bytesRead = 0; } - public int getState() { - return state; - } - - public boolean hasPacketLength() { - return payloadSize != C.LENGTH_UNSET; + public boolean canConsumeDummyEndOfInput() { + // Pusi only payload to trigger end of sample data is only applicable if + // pes does not have a length field and body is being read, another exclusion + // is due to H262 streams possibly having, in HLS mode, a pes across more than one segment + // which would trigger committing an unfinished sample in the middle of the access unit + return state == STATE_READING_BODY + && payloadSize != C.LENGTH_UNSET + && !(reader instanceof H262Reader); } /** 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 ebef2b4b0f..0a7ed49960 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 @@ -15,7 +15,6 @@ */ package androidx.media3.extractor.ts; -import static androidx.media3.extractor.ts.PesReader.STATE_READING_BODY; import static androidx.media3.extractor.ts.TsPayloadReader.EsInfo.AUDIO_TYPE_UNDEFINED; import static androidx.media3.extractor.ts.TsPayloadReader.FLAG_PAYLOAD_UNIT_START_INDICATOR; import static java.lang.annotation.ElementType.TYPE_USE; @@ -453,7 +452,7 @@ public final class TsExtractor implements Extractor { TsPayloadReader payloadReader = tsPayloadReaders.valueAt(i); if (payloadReader instanceof PesReader) { PesReader pesReader = (PesReader)payloadReader; - if (pesReader.getState() == STATE_READING_BODY && !pesReader.hasPacketLength()) { + if (pesReader.canConsumeDummyEndOfInput()) { pesReader.consume(new ParsableByteArray(), FLAG_PAYLOAD_UNIT_START_INDICATOR); } }