diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/chunk/BundledChunkExtractor.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/chunk/BundledChunkExtractor.java index 92a5ab1d18..11c10140ea 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/chunk/BundledChunkExtractor.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/chunk/BundledChunkExtractor.java @@ -43,7 +43,6 @@ import androidx.media3.extractor.png.PngExtractor; import androidx.media3.extractor.text.DefaultSubtitleParserFactory; import androidx.media3.extractor.text.SubtitleExtractor; import androidx.media3.extractor.text.SubtitleParser; -import androidx.media3.extractor.text.SubtitleTranscodingExtractor; import com.google.errorprone.annotations.CanIgnoreReturnValue; import java.io.IOException; import java.util.List; @@ -160,12 +159,6 @@ public final class BundledChunkExtractor implements ExtractorOutput, ChunkExtrac closedCaptionFormats, playerEmsgTrackOutput); } - if (parseSubtitlesDuringExtraction - && !MimeTypes.isText(containerMimeType) - && !(extractor.getUnderlyingImplementation() instanceof FragmentedMp4Extractor) - && !(extractor.getUnderlyingImplementation() instanceof MatroskaExtractor)) { - extractor = new SubtitleTranscodingExtractor(extractor, subtitleParserFactory); - } return new BundledChunkExtractor(extractor, primaryTrackType, representationFormat); } diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/DefaultExtractorsFactory.java b/libraries/extractor/src/main/java/androidx/media3/extractor/DefaultExtractorsFactory.java index fe31a0b5a4..b625523696 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/DefaultExtractorsFactory.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/DefaultExtractorsFactory.java @@ -45,7 +45,6 @@ import androidx.media3.extractor.ogg.OggExtractor; import androidx.media3.extractor.png.PngExtractor; import androidx.media3.extractor.text.DefaultSubtitleParserFactory; import androidx.media3.extractor.text.SubtitleParser; -import androidx.media3.extractor.text.SubtitleTranscodingExtractor; import androidx.media3.extractor.ts.Ac3Extractor; import androidx.media3.extractor.ts.Ac4Extractor; import androidx.media3.extractor.ts.AdtsExtractor; @@ -430,20 +429,7 @@ public final class DefaultExtractorsFactory implements ExtractorsFactory { addExtractorsForFileType(fileType, extractors); } } - Extractor[] result = new Extractor[extractors.size()]; - for (int i = 0; i < extractors.size(); i++) { - Extractor extractor = extractors.get(i); - result[i] = - textTrackTranscodingEnabled - && !(extractor.getUnderlyingImplementation() instanceof FragmentedMp4Extractor) - && !(extractor.getUnderlyingImplementation() instanceof Mp4Extractor) - && !(extractor.getUnderlyingImplementation() instanceof TsExtractor) - && !(extractor.getUnderlyingImplementation() instanceof AviExtractor) - && !(extractor.getUnderlyingImplementation() instanceof MatroskaExtractor) - ? new SubtitleTranscodingExtractor(extractor, subtitleParserFactory) - : extractor; - } - return result; + return extractors.toArray(new Extractor[extractors.size()]); } private void addExtractorsForFileType(@FileTypes.Type int fileType, List extractors) { diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/text/SubtitleTranscodingExtractor.java b/libraries/extractor/src/main/java/androidx/media3/extractor/text/SubtitleTranscodingExtractor.java index fc21c56fe8..0f923d18ef 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/text/SubtitleTranscodingExtractor.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/text/SubtitleTranscodingExtractor.java @@ -16,36 +16,19 @@ package androidx.media3.extractor.text; -import androidx.media3.common.C; -import androidx.media3.common.Format; -import androidx.media3.common.MimeTypes; import androidx.media3.common.util.UnstableApi; import androidx.media3.extractor.Extractor; import androidx.media3.extractor.ExtractorInput; import androidx.media3.extractor.ExtractorOutput; import androidx.media3.extractor.PositionHolder; -import androidx.media3.extractor.TrackOutput; import java.io.IOException; import org.checkerframework.checker.nullness.qual.MonotonicNonNull; /** - * A wrapping {@link Extractor} that transcodes {@linkplain C#TRACK_TYPE_TEXT text samples} from - * supported subtitle formats to {@link MimeTypes#APPLICATION_MEDIA3_CUES}. - * - *

Samples emitted by the delegate {@link Extractor} to {@linkplain C#TRACK_TYPE_TEXT text - * tracks} with a supported subtitle format are transcoded and the resulting {@link - * MimeTypes#APPLICATION_MEDIA3_CUES} samples are emitted to the underlying {@link TrackOutput}. - * - *

Samples emitted by the delegate {@link Extractor} to non-text tracks (or text tracks with an - * unsupported format) are passed through to the underlying {@link TrackOutput} without - * modification. - * - *

Support for subtitle formats is determined by {@link - * SubtitleParser.Factory#supportsFormat(Format)} on the {@link SubtitleParser.Factory} passed to - * the constructor of this class. + * @deprecated Use {@link SubtitleTranscodingExtractorOutput} directly from within an existing + * {@link Extractor} implementation instead. */ -// TODO: b/318679808 - deprecate when all subtitle-related Extractors use -// SubtitleTranscodingExtractorOutput instead. +@Deprecated @UnstableApi public class SubtitleTranscodingExtractor implements Extractor { diff --git a/libraries/extractor/src/test/java/androidx/media3/extractor/DefaultExtractorsFactoryTest.java b/libraries/extractor/src/test/java/androidx/media3/extractor/DefaultExtractorsFactoryTest.java index 7646225855..aa4bf720aa 100644 --- a/libraries/extractor/src/test/java/androidx/media3/extractor/DefaultExtractorsFactoryTest.java +++ b/libraries/extractor/src/test/java/androidx/media3/extractor/DefaultExtractorsFactoryTest.java @@ -16,7 +16,6 @@ package androidx.media3.extractor; import static com.google.common.truth.Truth.assertThat; -import static java.util.Arrays.stream; import android.net.Uri; import androidx.media3.common.MimeTypes; @@ -34,7 +33,6 @@ import androidx.media3.extractor.mp4.FragmentedMp4Extractor; import androidx.media3.extractor.mp4.Mp4Extractor; import androidx.media3.extractor.ogg.OggExtractor; import androidx.media3.extractor.png.PngExtractor; -import androidx.media3.extractor.text.SubtitleTranscodingExtractor; import androidx.media3.extractor.ts.Ac3Extractor; import androidx.media3.extractor.ts.Ac4Extractor; import androidx.media3.extractor.ts.AdtsExtractor; @@ -136,28 +134,6 @@ public final class DefaultExtractorsFactoryTest { .inOrder(); } - @Test - public void subtitleTranscoding_enabledByDefault() { - DefaultExtractorsFactory defaultExtractorsFactory = new DefaultExtractorsFactory(); - - Extractor[] extractors = defaultExtractorsFactory.createExtractors(); - - assertThat(stream(extractors).map(Object::getClass)) - .contains(SubtitleTranscodingExtractor.class); - } - - @SuppressWarnings("deprecation") // Testing legacy subtitle handling - @Test - public void subtitleTranscoding_noExtractorWrappingIfDisabled() { - DefaultExtractorsFactory defaultExtractorsFactory = - new DefaultExtractorsFactory().setTextTrackTranscodingEnabled(false); - - Extractor[] extractors = defaultExtractorsFactory.createExtractors(); - - assertThat(stream(extractors).map(Object::getClass)) - .doesNotContain(SubtitleTranscodingExtractor.class); - } - private static List> getUnderlyingExtractorClasses( Extractor[] extractors) { List> extractorClasses = new ArrayList<>();