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.DefaultSubtitleParserFactory;
|
||||||
import androidx.media3.extractor.text.SubtitleExtractor;
|
import androidx.media3.extractor.text.SubtitleExtractor;
|
||||||
import androidx.media3.extractor.text.SubtitleParser;
|
import androidx.media3.extractor.text.SubtitleParser;
|
||||||
import androidx.media3.extractor.text.SubtitleTranscodingExtractor;
|
|
||||||
import com.google.errorprone.annotations.CanIgnoreReturnValue;
|
import com.google.errorprone.annotations.CanIgnoreReturnValue;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -160,12 +159,6 @@ public final class BundledChunkExtractor implements ExtractorOutput, ChunkExtrac
|
|||||||
closedCaptionFormats,
|
closedCaptionFormats,
|
||||||
playerEmsgTrackOutput);
|
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);
|
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.png.PngExtractor;
|
||||||
import androidx.media3.extractor.text.DefaultSubtitleParserFactory;
|
import androidx.media3.extractor.text.DefaultSubtitleParserFactory;
|
||||||
import androidx.media3.extractor.text.SubtitleParser;
|
import androidx.media3.extractor.text.SubtitleParser;
|
||||||
import androidx.media3.extractor.text.SubtitleTranscodingExtractor;
|
|
||||||
import androidx.media3.extractor.ts.Ac3Extractor;
|
import androidx.media3.extractor.ts.Ac3Extractor;
|
||||||
import androidx.media3.extractor.ts.Ac4Extractor;
|
import androidx.media3.extractor.ts.Ac4Extractor;
|
||||||
import androidx.media3.extractor.ts.AdtsExtractor;
|
import androidx.media3.extractor.ts.AdtsExtractor;
|
||||||
@ -430,20 +429,7 @@ public final class DefaultExtractorsFactory implements ExtractorsFactory {
|
|||||||
addExtractorsForFileType(fileType, extractors);
|
addExtractorsForFileType(fileType, extractors);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Extractor[] result = new Extractor[extractors.size()];
|
return extractors.toArray(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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addExtractorsForFileType(@FileTypes.Type int fileType, List<Extractor> extractors) {
|
private void addExtractorsForFileType(@FileTypes.Type int fileType, List<Extractor> extractors) {
|
||||||
|
@ -16,36 +16,19 @@
|
|||||||
|
|
||||||
package androidx.media3.extractor.text;
|
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.common.util.UnstableApi;
|
||||||
import androidx.media3.extractor.Extractor;
|
import androidx.media3.extractor.Extractor;
|
||||||
import androidx.media3.extractor.ExtractorInput;
|
import androidx.media3.extractor.ExtractorInput;
|
||||||
import androidx.media3.extractor.ExtractorOutput;
|
import androidx.media3.extractor.ExtractorOutput;
|
||||||
import androidx.media3.extractor.PositionHolder;
|
import androidx.media3.extractor.PositionHolder;
|
||||||
import androidx.media3.extractor.TrackOutput;
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A wrapping {@link Extractor} that transcodes {@linkplain C#TRACK_TYPE_TEXT text samples} from
|
* @deprecated Use {@link SubtitleTranscodingExtractorOutput} directly from within an existing
|
||||||
* supported subtitle formats to {@link MimeTypes#APPLICATION_MEDIA3_CUES}.
|
* {@link Extractor} implementation instead.
|
||||||
*
|
|
||||||
* <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.
|
|
||||||
*/
|
*/
|
||||||
// TODO: b/318679808 - deprecate when all subtitle-related Extractors use
|
@Deprecated
|
||||||
// SubtitleTranscodingExtractorOutput instead.
|
|
||||||
@UnstableApi
|
@UnstableApi
|
||||||
public class SubtitleTranscodingExtractor implements Extractor {
|
public class SubtitleTranscodingExtractor implements Extractor {
|
||||||
|
|
||||||
|
@ -16,7 +16,6 @@
|
|||||||
package androidx.media3.extractor;
|
package androidx.media3.extractor;
|
||||||
|
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
import static java.util.Arrays.stream;
|
|
||||||
|
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import androidx.media3.common.MimeTypes;
|
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.mp4.Mp4Extractor;
|
||||||
import androidx.media3.extractor.ogg.OggExtractor;
|
import androidx.media3.extractor.ogg.OggExtractor;
|
||||||
import androidx.media3.extractor.png.PngExtractor;
|
import androidx.media3.extractor.png.PngExtractor;
|
||||||
import androidx.media3.extractor.text.SubtitleTranscodingExtractor;
|
|
||||||
import androidx.media3.extractor.ts.Ac3Extractor;
|
import androidx.media3.extractor.ts.Ac3Extractor;
|
||||||
import androidx.media3.extractor.ts.Ac4Extractor;
|
import androidx.media3.extractor.ts.Ac4Extractor;
|
||||||
import androidx.media3.extractor.ts.AdtsExtractor;
|
import androidx.media3.extractor.ts.AdtsExtractor;
|
||||||
@ -136,28 +134,6 @@ public final class DefaultExtractorsFactoryTest {
|
|||||||
.inOrder();
|
.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(
|
private static List<Class<? extends Extractor>> getUnderlyingExtractorClasses(
|
||||||
Extractor[] extractors) {
|
Extractor[] extractors) {
|
||||||
List<Class<? extends Extractor>> extractorClasses = new ArrayList<>();
|
List<Class<? extends Extractor>> extractorClasses = new ArrayList<>();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user