Stop using SubtitleTranscodingExtractor and deprecate it

The integration with `SubtitleTranscodingExtractorOutput` has been
moved inside the relevant `Extractor` implementations instead.

PiperOrigin-RevId: 651213564
This commit is contained in:
ibaker 2024-07-10 18:07:20 -07:00 committed by Copybara-Service
parent 240b6fd606
commit 0ea555dae0
4 changed files with 4 additions and 66 deletions

View File

@ -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);
}

View File

@ -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<Extractor> extractors) {

View File

@ -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}.
*
* <p>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}.
*
* <p>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.
*
* <p>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 {

View File

@ -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<Class<? extends Extractor>> getUnderlyingExtractorClasses(
Extractor[] extractors) {
List<Class<? extends Extractor>> extractorClasses = new ArrayList<>();