From 1cb6865884836a98d9a1fe95143ce0bf41ef49e9 Mon Sep 17 00:00:00 2001 From: ibaker Date: Thu, 4 Jan 2024 03:45:11 -0800 Subject: [PATCH] Remove CEA-6/708 support from `DefaultSubtitleParserFactory` `Cea608Parser` and `Cea708Parser` don't currently work correctly on their own without the re-ordering of input buffers implemented in `CeaDecoder`, and it's not clear how we can properly do this re-ordering during extraction. This change ensures that if 'parse subtitles during extraction' is enabled, CEA-6/708 subs will be passed through without transcoding and can then be decoded during rendering by `Cea6/708Decoder`. PiperOrigin-RevId: 595658628 --- .../text/DefaultSubtitleParserFactory.java | 25 +------------------ .../extractor/text/cea/Cea608Parser.java | 3 +++ .../extractor/text/cea/Cea708Parser.java | 3 +++ 3 files changed, 7 insertions(+), 24 deletions(-) diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/text/DefaultSubtitleParserFactory.java b/libraries/extractor/src/main/java/androidx/media3/extractor/text/DefaultSubtitleParserFactory.java index d65b151f88..b2a271956b 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/text/DefaultSubtitleParserFactory.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/text/DefaultSubtitleParserFactory.java @@ -20,8 +20,6 @@ import androidx.media3.common.Format; import androidx.media3.common.Format.CueReplacementBehavior; import androidx.media3.common.MimeTypes; import androidx.media3.common.util.UnstableApi; -import androidx.media3.extractor.text.cea.Cea608Parser; -import androidx.media3.extractor.text.cea.Cea708Parser; import androidx.media3.extractor.text.dvb.DvbParser; import androidx.media3.extractor.text.pgs.PgsParser; import androidx.media3.extractor.text.ssa.SsaParser; @@ -46,8 +44,6 @@ import java.util.Objects; *
  • PGS ({@link PgsParser}) *
  • DVB ({@link DvbParser}) *
  • TTML ({@link TtmlParser}) - *
  • CEA-608 ({@link Cea608Parser}) - *
  • CEA-708 ({@link Cea708Parser}) * */ @UnstableApi @@ -63,10 +59,7 @@ public final class DefaultSubtitleParserFactory implements SubtitleParser.Factor || Objects.equals(mimeType, MimeTypes.APPLICATION_TX3G) || Objects.equals(mimeType, MimeTypes.APPLICATION_PGS) || Objects.equals(mimeType, MimeTypes.APPLICATION_DVBSUBS) - || Objects.equals(mimeType, MimeTypes.APPLICATION_TTML) - || Objects.equals(mimeType, MimeTypes.APPLICATION_MP4CEA608) - || Objects.equals(mimeType, MimeTypes.APPLICATION_CEA608) - || Objects.equals(mimeType, MimeTypes.APPLICATION_CEA708); + || Objects.equals(mimeType, MimeTypes.APPLICATION_TTML); } @Override @@ -90,11 +83,6 @@ public final class DefaultSubtitleParserFactory implements SubtitleParser.Factor return DvbParser.CUE_REPLACEMENT_BEHAVIOR; case MimeTypes.APPLICATION_TTML: return TtmlParser.CUE_REPLACEMENT_BEHAVIOR; - case MimeTypes.APPLICATION_MP4CEA608: - case MimeTypes.APPLICATION_CEA608: - return Cea608Parser.CUE_REPLACEMENT_BEHAVIOR; - case MimeTypes.APPLICATION_CEA708: - return Cea708Parser.CUE_REPLACEMENT_BEHAVIOR; default: break; } @@ -123,17 +111,6 @@ public final class DefaultSubtitleParserFactory implements SubtitleParser.Factor return new DvbParser(format.initializationData); case MimeTypes.APPLICATION_TTML: return new TtmlParser(); - case MimeTypes.APPLICATION_MP4CEA608: - case MimeTypes.APPLICATION_CEA608: - // Deliberately pass a timeout longer than Cea608Parser.MIN_DATA_CHANNEL_TIMEOUT_MS - // because Cea608Parser erases 'stuck' cues starting from their start time, rather than - // the last piece of CEA data received. - return new Cea608Parser( - mimeType, - format.accessibilityChannel, - /* validDataChannelTimeoutMs= */ 2 * Cea608Parser.MIN_DATA_CHANNEL_TIMEOUT_MS); - case MimeTypes.APPLICATION_CEA708: - return new Cea708Parser(format.accessibilityChannel, format.initializationData); default: break; } diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/text/cea/Cea608Parser.java b/libraries/extractor/src/main/java/androidx/media3/extractor/text/cea/Cea608Parser.java index 0489383b79..6f0a45fad2 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/text/cea/Cea608Parser.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/text/cea/Cea608Parser.java @@ -47,6 +47,9 @@ import java.util.Collections; import java.util.List; /** A {@link SubtitleParser} for CEA-608 (also known as "line 21 captions" and "EIA-608"). */ +// TODO: b/317488646 - Either re-combine this with Cea608Decoder (if we decide that decoding this +// format must happen during rendering), or re-add it to DefaultSubtitleParserFactory (if we're +// able to solve the re-ordering issue during extraction). @UnstableApi public final class Cea608Parser implements SubtitleParser { diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/text/cea/Cea708Parser.java b/libraries/extractor/src/main/java/androidx/media3/extractor/text/cea/Cea708Parser.java index e5ff146f52..f11b176e5b 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/text/cea/Cea708Parser.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/text/cea/Cea708Parser.java @@ -48,6 +48,9 @@ import java.util.List; import org.checkerframework.checker.nullness.qual.RequiresNonNull; /** A {@link SubtitleParser} for CEA-708 (also known as "EIA-708"). */ +// TODO: b/317488646 - Either re-combine this with Cea708Decoder (if we decide that decoding this +// format must happen during rendering), or re-add it to DefaultSubtitleParserFactory (if we're +// able to solve the re-ordering issue during extraction). @UnstableApi public final class Cea708Parser implements SubtitleParser {