Migrate CEA-708 logic to a SubtitleParser implementation
This change is similar to 27caeb8038
(CEA-608), but is currently lacking unit tests.
PiperOrigin-RevId: 582585457
This commit is contained in:
parent
b23b1bb693
commit
94e45eb4ad
@ -17,15 +17,10 @@ package androidx.media3.exoplayer.text;
|
|||||||
|
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.media3.common.Format;
|
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.text.DefaultSubtitleParserFactory;
|
import androidx.media3.extractor.text.DefaultSubtitleParserFactory;
|
||||||
import androidx.media3.extractor.text.SubtitleDecoder;
|
import androidx.media3.extractor.text.SubtitleDecoder;
|
||||||
import androidx.media3.extractor.text.SubtitleParser;
|
import androidx.media3.extractor.text.SubtitleParser;
|
||||||
import androidx.media3.extractor.text.cea.Cea608Decoder;
|
|
||||||
import androidx.media3.extractor.text.cea.Cea608Parser;
|
|
||||||
import androidx.media3.extractor.text.cea.Cea708Decoder;
|
|
||||||
import java.util.Objects;
|
|
||||||
|
|
||||||
/** A factory for {@link SubtitleDecoder} instances. */
|
/** A factory for {@link SubtitleDecoder} instances. */
|
||||||
@UnstableApi
|
@UnstableApi
|
||||||
@ -52,12 +47,7 @@ public interface SubtitleDecoderFactory {
|
|||||||
/**
|
/**
|
||||||
* Default {@link SubtitleDecoderFactory} implementation.
|
* Default {@link SubtitleDecoderFactory} implementation.
|
||||||
*
|
*
|
||||||
* <p>Supports formats supported by {@link DefaultSubtitleParserFactory} as well as the following:
|
* <p>Only supports formats supported by {@link DefaultSubtitleParserFactory}.
|
||||||
*
|
|
||||||
* <ul>
|
|
||||||
* <li>Cea608 ({@link Cea608Decoder})
|
|
||||||
* <li>Cea708 ({@link Cea708Decoder})
|
|
||||||
* </ul>
|
|
||||||
*/
|
*/
|
||||||
SubtitleDecoderFactory DEFAULT =
|
SubtitleDecoderFactory DEFAULT =
|
||||||
new SubtitleDecoderFactory() {
|
new SubtitleDecoderFactory() {
|
||||||
@ -66,11 +56,7 @@ public interface SubtitleDecoderFactory {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean supportsFormat(Format format) {
|
public boolean supportsFormat(Format format) {
|
||||||
@Nullable String mimeType = format.sampleMimeType;
|
return delegate.supportsFormat(format);
|
||||||
return delegate.supportsFormat(format)
|
|
||||||
|| Objects.equals(mimeType, MimeTypes.APPLICATION_CEA608)
|
|
||||||
|| Objects.equals(mimeType, MimeTypes.APPLICATION_MP4CEA608)
|
|
||||||
|| Objects.equals(mimeType, MimeTypes.APPLICATION_CEA708);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -81,21 +67,6 @@ public interface SubtitleDecoderFactory {
|
|||||||
subtitleParser.getClass().getSimpleName() + "Decoder", subtitleParser);
|
subtitleParser.getClass().getSimpleName() + "Decoder", subtitleParser);
|
||||||
}
|
}
|
||||||
@Nullable String mimeType = format.sampleMimeType;
|
@Nullable String mimeType = format.sampleMimeType;
|
||||||
if (mimeType != null) {
|
|
||||||
switch (mimeType) {
|
|
||||||
case MimeTypes.APPLICATION_CEA608:
|
|
||||||
case MimeTypes.APPLICATION_MP4CEA608:
|
|
||||||
return new Cea608Decoder(
|
|
||||||
new Cea608Parser(
|
|
||||||
mimeType,
|
|
||||||
format.accessibilityChannel,
|
|
||||||
Cea608Parser.MIN_DATA_CHANNEL_TIMEOUT_MS));
|
|
||||||
case MimeTypes.APPLICATION_CEA708:
|
|
||||||
return new Cea708Decoder(format.accessibilityChannel, format.initializationData);
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
throw new IllegalArgumentException(
|
throw new IllegalArgumentException(
|
||||||
"Attempted to create decoder for unsupported MIME type: " + mimeType);
|
"Attempted to create decoder for unsupported MIME type: " + mimeType);
|
||||||
}
|
}
|
||||||
|
@ -21,6 +21,7 @@ import androidx.media3.common.Format.CueReplacementBehavior;
|
|||||||
import androidx.media3.common.MimeTypes;
|
import androidx.media3.common.MimeTypes;
|
||||||
import androidx.media3.common.util.UnstableApi;
|
import androidx.media3.common.util.UnstableApi;
|
||||||
import androidx.media3.extractor.text.cea.Cea608Parser;
|
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.dvb.DvbParser;
|
||||||
import androidx.media3.extractor.text.pgs.PgsParser;
|
import androidx.media3.extractor.text.pgs.PgsParser;
|
||||||
import androidx.media3.extractor.text.ssa.SsaParser;
|
import androidx.media3.extractor.text.ssa.SsaParser;
|
||||||
@ -46,6 +47,7 @@ import java.util.Objects;
|
|||||||
* <li>DVB ({@link DvbParser})
|
* <li>DVB ({@link DvbParser})
|
||||||
* <li>TTML ({@link TtmlParser})
|
* <li>TTML ({@link TtmlParser})
|
||||||
* <li>CEA-608 ({@link Cea608Parser})
|
* <li>CEA-608 ({@link Cea608Parser})
|
||||||
|
* <li>CEA-708 ({@link Cea708Parser})
|
||||||
* </ul>
|
* </ul>
|
||||||
*/
|
*/
|
||||||
@UnstableApi
|
@UnstableApi
|
||||||
@ -63,7 +65,8 @@ public final class DefaultSubtitleParserFactory implements SubtitleParser.Factor
|
|||||||
|| Objects.equals(mimeType, MimeTypes.APPLICATION_DVBSUBS)
|
|| Objects.equals(mimeType, MimeTypes.APPLICATION_DVBSUBS)
|
||||||
|| Objects.equals(mimeType, MimeTypes.APPLICATION_TTML)
|
|| Objects.equals(mimeType, MimeTypes.APPLICATION_TTML)
|
||||||
|| Objects.equals(mimeType, MimeTypes.APPLICATION_MP4CEA608)
|
|| Objects.equals(mimeType, MimeTypes.APPLICATION_MP4CEA608)
|
||||||
|| Objects.equals(mimeType, MimeTypes.APPLICATION_CEA608);
|
|| Objects.equals(mimeType, MimeTypes.APPLICATION_CEA608)
|
||||||
|
|| Objects.equals(mimeType, MimeTypes.APPLICATION_CEA708);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -90,6 +93,8 @@ public final class DefaultSubtitleParserFactory implements SubtitleParser.Factor
|
|||||||
case MimeTypes.APPLICATION_MP4CEA608:
|
case MimeTypes.APPLICATION_MP4CEA608:
|
||||||
case MimeTypes.APPLICATION_CEA608:
|
case MimeTypes.APPLICATION_CEA608:
|
||||||
return Cea608Parser.CUE_REPLACEMENT_BEHAVIOR;
|
return Cea608Parser.CUE_REPLACEMENT_BEHAVIOR;
|
||||||
|
case MimeTypes.APPLICATION_CEA708:
|
||||||
|
return Cea708Parser.CUE_REPLACEMENT_BEHAVIOR;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -127,6 +132,8 @@ public final class DefaultSubtitleParserFactory implements SubtitleParser.Factor
|
|||||||
mimeType,
|
mimeType,
|
||||||
format.accessibilityChannel,
|
format.accessibilityChannel,
|
||||||
/* validDataChannelTimeoutMs= */ 2 * Cea608Parser.MIN_DATA_CHANNEL_TIMEOUT_MS);
|
/* validDataChannelTimeoutMs= */ 2 * Cea608Parser.MIN_DATA_CHANNEL_TIMEOUT_MS);
|
||||||
|
case MimeTypes.APPLICATION_CEA708:
|
||||||
|
return new Cea708Parser(format.accessibilityChannel, format.initializationData);
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user