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:
parent
240b6fd606
commit
0ea555dae0
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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) {
|
||||
|
@ -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 {
|
||||
|
||||
|
@ -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<>();
|
||||
|
Loading…
x
Reference in New Issue
Block a user