From e61b521b4afd59d2be7a4a91f48070dacb57a800 Mon Sep 17 00:00:00 2001 From: ibaker Date: Fri, 10 Jan 2025 09:43:16 -0800 Subject: [PATCH] Clear SEI reordering queue when seeking in MPEG-TS files This avoids outputting spurious samples after the seek. PiperOrigin-RevId: 714082343 --- .../main/java/androidx/media3/extractor/ts/H264Reader.java | 2 +- .../main/java/androidx/media3/extractor/ts/H265Reader.java | 2 +- .../main/java/androidx/media3/extractor/ts/SeiReader.java | 5 +++++ 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/ts/H264Reader.java b/libraries/extractor/src/main/java/androidx/media3/extractor/ts/H264Reader.java index e151ecfde3..3dcc260b99 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/ts/H264Reader.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/ts/H264Reader.java @@ -105,7 +105,7 @@ public final class H264Reader implements ElementaryStreamReader { sps.reset(); pps.reset(); sei.reset(); - seiReader.flush(); + seiReader.clear(); if (sampleReader != null) { sampleReader.reset(); } diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/ts/H265Reader.java b/libraries/extractor/src/main/java/androidx/media3/extractor/ts/H265Reader.java index e34ac3355d..cddec8b0e4 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/ts/H265Reader.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/ts/H265Reader.java @@ -92,7 +92,7 @@ public final class H265Reader implements ElementaryStreamReader { pps.reset(); prefixSei.reset(); suffixSei.reset(); - seiReader.flush(); + seiReader.clear(); if (sampleReader != null) { sampleReader.reset(); } diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/ts/SeiReader.java b/libraries/extractor/src/main/java/androidx/media3/extractor/ts/SeiReader.java index 36c089950b..dedd2ae216 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/ts/SeiReader.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/ts/SeiReader.java @@ -97,4 +97,9 @@ public final class SeiReader { public void flush() { reorderingSeiMessageQueue.flush(); } + + /** Drops any 'buffered for re-ordering' messages. */ + public void clear() { + reorderingSeiMessageQueue.flush(); + } }