From 5f0547f84f18cd2adc5003641bfa61936a5d752f Mon Sep 17 00:00:00 2001 From: Santiago Seifert Date: Thu, 19 Mar 2020 15:51:50 +0000 Subject: [PATCH] Add parser name constants and a StringDef for them Bug: 150854787 Test: CTS. Change-Id: Ie16526d81decb660f6a96f7ad3a82e3b0e3d0de5 --- apex/media/framework/api/current.txt | 14 ++++ .../java/android/media/MediaParser.java | 78 +++++++++++++++---- api/current.txt | 14 ++++ 3 files changed, 89 insertions(+), 17 deletions(-) diff --git a/apex/media/framework/api/current.txt b/apex/media/framework/api/current.txt index 2b7dcd3301bc7..839fb51431963 100644 --- a/apex/media/framework/api/current.txt +++ b/apex/media/framework/api/current.txt @@ -52,6 +52,20 @@ package android.media { field public static final String PARAMETER_TS_IGNORE_AVC_STREAM = "android.media.mediaparser.ts.ignoreAvcStream"; field public static final String PARAMETER_TS_IGNORE_SPLICE_INFO_STREAM = "android.media.mediaparser.ts.ignoreSpliceInfoStream"; field public static final String PARAMETER_TS_MODE = "android.media.mediaparser.ts.mode"; + field public static final String PARSER_NAME_AC3 = "android.media.mediaparser.Ac3Parser"; + field public static final String PARSER_NAME_AC4 = "android.media.mediaparser.Ac4Parser"; + field public static final String PARSER_NAME_ADTS = "android.media.mediaparser.AdtsParser"; + field public static final String PARSER_NAME_AMR = "android.media.mediaparser.AmrParser"; + field public static final String PARSER_NAME_FLAC = "android.media.mediaparser.FlacParser"; + field public static final String PARSER_NAME_FLV = "android.media.mediaparser.FlvParser"; + field public static final String PARSER_NAME_FMP4 = "android.media.mediaparser.FragmentedMp4Parser"; + field public static final String PARSER_NAME_MATROSKA = "android.media.mediaparser.MatroskaParser"; + field public static final String PARSER_NAME_MP3 = "android.media.mediaparser.Mp3Parser"; + field public static final String PARSER_NAME_MP4 = "android.media.mediaparser.Mp4Parser"; + field public static final String PARSER_NAME_OGG = "android.media.mediaparser.OggParser"; + field public static final String PARSER_NAME_PS = "android.media.mediaparser.PsParser"; + field public static final String PARSER_NAME_TS = "android.media.mediaparser.TsParser"; + field public static final String PARSER_NAME_WAV = "android.media.mediaparser.WavParser"; } public static interface MediaParser.InputReader { diff --git a/apex/media/framework/java/android/media/MediaParser.java b/apex/media/framework/java/android/media/MediaParser.java index 0ff55dabbaaee..9b38d84c46bed 100644 --- a/apex/media/framework/java/android/media/MediaParser.java +++ b/apex/media/framework/java/android/media/MediaParser.java @@ -18,6 +18,7 @@ package android.media; import android.annotation.CheckResult; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.StringDef; import android.net.Uri; import android.text.TextUtils; import android.util.Pair; @@ -56,6 +57,8 @@ import com.google.android.exoplayer2.video.ColorInfo; import java.io.EOFException; import java.io.IOException; import java.io.InterruptedIOException; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; import java.nio.ByteBuffer; import java.util.Collections; import java.util.HashMap; @@ -440,7 +443,46 @@ public final class MediaParser { } } - // Public constants. + // Parser implementation names. + + /** @hide */ + @Retention(RetentionPolicy.SOURCE) + @StringDef( + prefix = {"PARSER_NAME_"}, + value = { + PARSER_NAME_MATROSKA, + PARSER_NAME_FMP4, + PARSER_NAME_MP4, + PARSER_NAME_MP3, + PARSER_NAME_ADTS, + PARSER_NAME_AC3, + PARSER_NAME_TS, + PARSER_NAME_FLV, + PARSER_NAME_OGG, + PARSER_NAME_PS, + PARSER_NAME_WAV, + PARSER_NAME_AMR, + PARSER_NAME_AC4, + PARSER_NAME_FLAC + }) + public @interface ParserName {} + + public static final String PARSER_NAME_MATROSKA = "android.media.mediaparser.MatroskaParser"; + public static final String PARSER_NAME_FMP4 = "android.media.mediaparser.FragmentedMp4Parser"; + public static final String PARSER_NAME_MP4 = "android.media.mediaparser.Mp4Parser"; + public static final String PARSER_NAME_MP3 = "android.media.mediaparser.Mp3Parser"; + public static final String PARSER_NAME_ADTS = "android.media.mediaparser.AdtsParser"; + public static final String PARSER_NAME_AC3 = "android.media.mediaparser.Ac3Parser"; + public static final String PARSER_NAME_TS = "android.media.mediaparser.TsParser"; + public static final String PARSER_NAME_FLV = "android.media.mediaparser.FlvParser"; + public static final String PARSER_NAME_OGG = "android.media.mediaparser.OggParser"; + public static final String PARSER_NAME_PS = "android.media.mediaparser.PsParser"; + public static final String PARSER_NAME_WAV = "android.media.mediaparser.WavParser"; + public static final String PARSER_NAME_AMR = "android.media.mediaparser.AmrParser"; + public static final String PARSER_NAME_AC4 = "android.media.mediaparser.Ac4Parser"; + public static final String PARSER_NAME_FLAC = "android.media.mediaparser.FlacParser"; + + // MediaParser parameters. /** * Sets whether constant bitrate seeking should be enabled for ADTS parsing. {@code boolean} @@ -589,7 +631,7 @@ public final class MediaParser { */ @NonNull public static MediaParser createByName( - @NonNull String name, @NonNull OutputConsumer outputConsumer) { + @NonNull @ParserName String name, @NonNull OutputConsumer outputConsumer) { String[] nameAsArray = new String[] {name}; assertValidNames(nameAsArray); return new MediaParser(outputConsumer, /* sniff= */ false, name); @@ -607,7 +649,7 @@ public final class MediaParser { */ @NonNull public static MediaParser create( - @NonNull OutputConsumer outputConsumer, @NonNull String... parserNames) { + @NonNull OutputConsumer outputConsumer, @NonNull @ParserName String... parserNames) { assertValidNames(parserNames); if (parserNames.length == 0) { parserNames = EXTRACTOR_FACTORIES_BY_NAME.keySet().toArray(new String[0]); @@ -624,6 +666,7 @@ public final class MediaParser { *

TODO: List which properties are taken into account. E.g. MimeType. */ @NonNull + @ParserName public static List getParserNames(@NonNull MediaFormat mediaFormat) { throw new UnsupportedOperationException(); } @@ -702,6 +745,7 @@ public final class MediaParser { * implementation has not yet been selected. */ @Nullable + @ParserName public String getParserName() { return mExtractorName; } @@ -1165,20 +1209,20 @@ public final class MediaParser { LinkedHashMap extractorFactoriesByName = new LinkedHashMap<>(); // Parsers are ordered to match ExoPlayer's DefaultExtractorsFactory extractor ordering, // which in turn aims to minimize the chances of incorrect extractor selections. - extractorFactoriesByName.put("exo.MatroskaParser", MatroskaExtractor::new); - extractorFactoriesByName.put("exo.FragmentedMp4Parser", FragmentedMp4Extractor::new); - extractorFactoriesByName.put("exo.Mp4Parser", Mp4Extractor::new); - extractorFactoriesByName.put("exo.Mp3Parser", Mp3Extractor::new); - extractorFactoriesByName.put("exo.AdtsParser", AdtsExtractor::new); - extractorFactoriesByName.put("exo.Ac3Parser", Ac3Extractor::new); - extractorFactoriesByName.put("exo.TsParser", TsExtractor::new); - extractorFactoriesByName.put("exo.FlvParser", FlvExtractor::new); - extractorFactoriesByName.put("exo.OggParser", OggExtractor::new); - extractorFactoriesByName.put("exo.PsParser", PsExtractor::new); - extractorFactoriesByName.put("exo.WavParser", WavExtractor::new); - extractorFactoriesByName.put("exo.AmrParser", AmrExtractor::new); - extractorFactoriesByName.put("exo.Ac4Parser", Ac4Extractor::new); - extractorFactoriesByName.put("exo.FlacParser", FlacExtractor::new); + extractorFactoriesByName.put(PARSER_NAME_MATROSKA, MatroskaExtractor::new); + extractorFactoriesByName.put(PARSER_NAME_FMP4, FragmentedMp4Extractor::new); + extractorFactoriesByName.put(PARSER_NAME_MP4, Mp4Extractor::new); + extractorFactoriesByName.put(PARSER_NAME_MP3, Mp3Extractor::new); + extractorFactoriesByName.put(PARSER_NAME_ADTS, AdtsExtractor::new); + extractorFactoriesByName.put(PARSER_NAME_AC3, Ac3Extractor::new); + extractorFactoriesByName.put(PARSER_NAME_TS, TsExtractor::new); + extractorFactoriesByName.put(PARSER_NAME_FLV, FlvExtractor::new); + extractorFactoriesByName.put(PARSER_NAME_OGG, OggExtractor::new); + extractorFactoriesByName.put(PARSER_NAME_PS, PsExtractor::new); + extractorFactoriesByName.put(PARSER_NAME_WAV, WavExtractor::new); + extractorFactoriesByName.put(PARSER_NAME_AMR, AmrExtractor::new); + extractorFactoriesByName.put(PARSER_NAME_AC4, Ac4Extractor::new); + extractorFactoriesByName.put(PARSER_NAME_FLAC, FlacExtractor::new); EXTRACTOR_FACTORIES_BY_NAME = Collections.unmodifiableMap(extractorFactoriesByName); HashMap expectedTypeByParameterName = new HashMap<>(); diff --git a/api/current.txt b/api/current.txt index ce43f21e78cd7..8410df9ff7a4f 100644 --- a/api/current.txt +++ b/api/current.txt @@ -26445,6 +26445,20 @@ package android.media { field public static final String PARAMETER_TS_IGNORE_AVC_STREAM = "android.media.mediaparser.ts.ignoreAvcStream"; field public static final String PARAMETER_TS_IGNORE_SPLICE_INFO_STREAM = "android.media.mediaparser.ts.ignoreSpliceInfoStream"; field public static final String PARAMETER_TS_MODE = "android.media.mediaparser.ts.mode"; + field public static final String PARSER_NAME_AC3 = "android.media.mediaparser.Ac3Parser"; + field public static final String PARSER_NAME_AC4 = "android.media.mediaparser.Ac4Parser"; + field public static final String PARSER_NAME_ADTS = "android.media.mediaparser.AdtsParser"; + field public static final String PARSER_NAME_AMR = "android.media.mediaparser.AmrParser"; + field public static final String PARSER_NAME_FLAC = "android.media.mediaparser.FlacParser"; + field public static final String PARSER_NAME_FLV = "android.media.mediaparser.FlvParser"; + field public static final String PARSER_NAME_FMP4 = "android.media.mediaparser.FragmentedMp4Parser"; + field public static final String PARSER_NAME_MATROSKA = "android.media.mediaparser.MatroskaParser"; + field public static final String PARSER_NAME_MP3 = "android.media.mediaparser.Mp3Parser"; + field public static final String PARSER_NAME_MP4 = "android.media.mediaparser.Mp4Parser"; + field public static final String PARSER_NAME_OGG = "android.media.mediaparser.OggParser"; + field public static final String PARSER_NAME_PS = "android.media.mediaparser.PsParser"; + field public static final String PARSER_NAME_TS = "android.media.mediaparser.TsParser"; + field public static final String PARSER_NAME_WAV = "android.media.mediaparser.WavParser"; } public static interface MediaParser.InputReader {