From 88a637bc45123338ae1ce1ecb6ad57d58368935a Mon Sep 17 00:00:00 2001 From: olly Date: Fri, 13 Aug 2021 11:39:18 +0100 Subject: [PATCH] Move format util classes to extractor package PiperOrigin-RevId: 390577072 --- .../android/exoplayer2/util/MimeTypes.java | 41 +++++++++++++++---- .../dash/manifest/DashManifestParser.java | 3 +- .../android/exoplayer2/audio/AacUtil.java | 21 ---------- .../android/exoplayer2/audio/Ac3Util.java | 7 ---- .../android/exoplayer2/audio/Ac4Util.java | 0 .../android/exoplayer2/audio/DtsUtil.java | 0 .../exoplayer2/audio/MpegAudioUtil.java | 0 .../android/exoplayer2/audio/OpusUtil.java | 0 .../android/exoplayer2/audio/WavUtil.java | 0 .../android/exoplayer2/video/AvcConfig.java | 0 .../exoplayer2/video/DolbyVisionConfig.java | 0 .../android/exoplayer2/video/HevcConfig.java | 0 .../android/exoplayer2/audio/Ac3UtilTest.java | 0 .../exoplayer2/audio/OpusUtilTest.java | 0 .../exoplayer2/video/HevcConfigTest.java | 0 .../hls/playlist/HlsPlaylistParser.java | 3 +- 16 files changed, 36 insertions(+), 39 deletions(-) rename library/{common => extractor}/src/main/java/com/google/android/exoplayer2/audio/AacUtil.java (95%) rename library/{common => extractor}/src/main/java/com/google/android/exoplayer2/audio/Ac3Util.java (98%) rename library/{common => extractor}/src/main/java/com/google/android/exoplayer2/audio/Ac4Util.java (100%) rename library/{common => extractor}/src/main/java/com/google/android/exoplayer2/audio/DtsUtil.java (100%) rename library/{common => extractor}/src/main/java/com/google/android/exoplayer2/audio/MpegAudioUtil.java (100%) rename library/{common => extractor}/src/main/java/com/google/android/exoplayer2/audio/OpusUtil.java (100%) rename library/{common => extractor}/src/main/java/com/google/android/exoplayer2/audio/WavUtil.java (100%) rename library/{common => extractor}/src/main/java/com/google/android/exoplayer2/video/AvcConfig.java (100%) rename library/{common => extractor}/src/main/java/com/google/android/exoplayer2/video/DolbyVisionConfig.java (100%) rename library/{common => extractor}/src/main/java/com/google/android/exoplayer2/video/HevcConfig.java (100%) rename library/{common => extractor}/src/test/java/com/google/android/exoplayer2/audio/Ac3UtilTest.java (100%) rename library/{common => extractor}/src/test/java/com/google/android/exoplayer2/audio/OpusUtilTest.java (100%) rename library/{common => extractor}/src/test/java/com/google/android/exoplayer2/video/HevcConfigTest.java (100%) diff --git a/library/common/src/main/java/com/google/android/exoplayer2/util/MimeTypes.java b/library/common/src/main/java/com/google/android/exoplayer2/util/MimeTypes.java index a3bf921172..7320847483 100644 --- a/library/common/src/main/java/com/google/android/exoplayer2/util/MimeTypes.java +++ b/library/common/src/main/java/com/google/android/exoplayer2/util/MimeTypes.java @@ -19,8 +19,6 @@ import android.text.TextUtils; import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import com.google.android.exoplayer2.C; -import com.google.android.exoplayer2.audio.AacUtil; -import com.google.android.exoplayer2.audio.Ac3Util; import com.google.common.base.Ascii; import java.util.ArrayList; import java.util.regex.Matcher; @@ -120,6 +118,14 @@ public final class MimeTypes { public static final String IMAGE_JPEG = BASE_TYPE_IMAGE + "/jpeg"; + /** + * A non-standard codec string for E-AC3-JOC. Use of this constant allows for disambiguation + * between regular E-AC3 ("ec-3") and E-AC3-JOC ("ec+3") streams from the codec string alone. The + * standard is to use "ec-3" for both, as per the MP4RA + * registered codec types. + */ + public static final String CODEC_E_AC3_JOC = "ec+3"; + private static final ArrayList customMimeTypes = new ArrayList<>(); private static final Pattern MP4A_RFC_6381_CODEC_PATTERN = @@ -214,8 +220,7 @@ public final class MimeTypes { if (objectType == null) { return false; } - @C.Encoding - int encoding = AacUtil.getEncodingForAudioObjectType(objectType.audioObjectTypeIndication); + @C.Encoding int encoding = objectType.getEncoding(); // xHE-AAC is an exception in which it's not true that all samples will be sync samples. // Also return false for ENCODING_INVALID, which indicates we weren't able to parse the // encoding from the codec string. @@ -377,7 +382,7 @@ public final class MimeTypes { return MimeTypes.AUDIO_AC3; } else if (codec.startsWith("ec-3") || codec.startsWith("dec3")) { return MimeTypes.AUDIO_E_AC3; - } else if (codec.startsWith(Ac3Util.E_AC3_JOC_CODEC_STRING)) { + } else if (codec.startsWith(CODEC_E_AC3_JOC)) { return MimeTypes.AUDIO_E_AC3_JOC; } else if (codec.startsWith("ac-4") || codec.startsWith("dac4")) { return MimeTypes.AUDIO_AC4; @@ -514,7 +519,7 @@ public final class MimeTypes { if (objectType == null) { return C.ENCODING_INVALID; } - return AacUtil.getEncodingForAudioObjectType(objectType.audioObjectTypeIndication); + return objectType.getEncoding(); case MimeTypes.AUDIO_AC3: return C.ENCODING_AC3; case MimeTypes.AUDIO_E_AC3: @@ -665,12 +670,34 @@ public final class MimeTypes { /** The Object Type Indication of the MP4A codec. */ public final int objectTypeIndication; /** The Audio Object Type Indication of the MP4A codec, or 0 if it is absent. */ - @AacUtil.AacAudioObjectType public final int audioObjectTypeIndication; + public final int audioObjectTypeIndication; public Mp4aObjectType(int objectTypeIndication, int audioObjectTypeIndication) { this.objectTypeIndication = objectTypeIndication; this.audioObjectTypeIndication = audioObjectTypeIndication; } + + /** Returns the encoding for {@link #audioObjectTypeIndication}. */ + @C.Encoding + public int getEncoding() { + // See AUDIO_OBJECT_TYPE_AAC_* constants in AacUtil. + switch (audioObjectTypeIndication) { + case 2: + return C.ENCODING_AAC_LC; + case 5: + return C.ENCODING_AAC_HE_V1; + case 29: + return C.ENCODING_AAC_HE_V2; + case 42: + return C.ENCODING_AAC_XHE; + case 23: + return C.ENCODING_AAC_ELD; + case 22: + return C.ENCODING_AAC_ER_BSAC; + default: + return C.ENCODING_INVALID; + } + } } private static final class CustomMimeType { diff --git a/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/manifest/DashManifestParser.java b/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/manifest/DashManifestParser.java index f58e428a6f..970ddf0829 100644 --- a/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/manifest/DashManifestParser.java +++ b/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/manifest/DashManifestParser.java @@ -24,7 +24,6 @@ import androidx.annotation.Nullable; import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.Format; import com.google.android.exoplayer2.ParserException; -import com.google.android.exoplayer2.audio.Ac3Util; import com.google.android.exoplayer2.drm.DrmInitData; import com.google.android.exoplayer2.drm.DrmInitData.SchemeData; import com.google.android.exoplayer2.extractor.mp4.PsshAtomUtil; @@ -776,7 +775,7 @@ public class DashManifestParser extends DefaultHandler if (MimeTypes.AUDIO_E_AC3.equals(sampleMimeType)) { sampleMimeType = parseEac3SupplementalProperties(supplementalProperties); if (MimeTypes.AUDIO_E_AC3_JOC.equals(sampleMimeType)) { - codecs = Ac3Util.E_AC3_JOC_CODEC_STRING; + codecs = MimeTypes.CODEC_E_AC3_JOC; } } @C.SelectionFlags int selectionFlags = parseSelectionFlagsFromRoleDescriptors(roleDescriptors); diff --git a/library/common/src/main/java/com/google/android/exoplayer2/audio/AacUtil.java b/library/extractor/src/main/java/com/google/android/exoplayer2/audio/AacUtil.java similarity index 95% rename from library/common/src/main/java/com/google/android/exoplayer2/audio/AacUtil.java rename to library/extractor/src/main/java/com/google/android/exoplayer2/audio/AacUtil.java index 2684273b2e..9fe10f1f86 100644 --- a/library/common/src/main/java/com/google/android/exoplayer2/audio/AacUtil.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/audio/AacUtil.java @@ -300,27 +300,6 @@ public final class AacUtil { return specificConfig; } - /** Returns the encoding for a given AAC audio object type. */ - @C.Encoding - public static int getEncodingForAudioObjectType(@AacAudioObjectType int audioObjectType) { - switch (audioObjectType) { - case AUDIO_OBJECT_TYPE_AAC_LC: - return C.ENCODING_AAC_LC; - case AUDIO_OBJECT_TYPE_AAC_SBR: - return C.ENCODING_AAC_HE_V1; - case AUDIO_OBJECT_TYPE_AAC_PS: - return C.ENCODING_AAC_HE_V2; - case AUDIO_OBJECT_TYPE_AAC_XHE: - return C.ENCODING_AAC_XHE; - case AUDIO_OBJECT_TYPE_AAC_ELD: - return C.ENCODING_AAC_ELD; - case AUDIO_OBJECT_TYPE_AAC_ER_BSAC: - return C.ENCODING_AAC_ER_BSAC; - default: - return C.ENCODING_INVALID; - } - } - /** * Returns the AAC audio object type as specified in 14496-3 (2005) Table 1.14. * diff --git a/library/common/src/main/java/com/google/android/exoplayer2/audio/Ac3Util.java b/library/extractor/src/main/java/com/google/android/exoplayer2/audio/Ac3Util.java similarity index 98% rename from library/common/src/main/java/com/google/android/exoplayer2/audio/Ac3Util.java rename to library/extractor/src/main/java/com/google/android/exoplayer2/audio/Ac3Util.java index dbb234c5d8..f3dfb20f9b 100644 --- a/library/common/src/main/java/com/google/android/exoplayer2/audio/Ac3Util.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/audio/Ac3Util.java @@ -91,13 +91,6 @@ public final class Ac3Util { } } - /** - * A non-standard codec string for E-AC3-JOC. Use of this constant allows for disambiguation - * between regular E-AC3 ("ec-3") and E-AC3-JOC ("ec+3") streams from the codec string alone. The - * standard is to use "ec-3" for both, as per the MP4RA - * registered codec types. - */ - public static final String E_AC3_JOC_CODEC_STRING = "ec+3"; /** Maximum rate for an AC-3 audio stream, in bytes per second. */ public static final int AC3_MAX_RATE_BYTES_PER_SECOND = 640 * 1000 / 8; /** Maximum rate for an E-AC-3 audio stream, in bytes per second. */ diff --git a/library/common/src/main/java/com/google/android/exoplayer2/audio/Ac4Util.java b/library/extractor/src/main/java/com/google/android/exoplayer2/audio/Ac4Util.java similarity index 100% rename from library/common/src/main/java/com/google/android/exoplayer2/audio/Ac4Util.java rename to library/extractor/src/main/java/com/google/android/exoplayer2/audio/Ac4Util.java diff --git a/library/common/src/main/java/com/google/android/exoplayer2/audio/DtsUtil.java b/library/extractor/src/main/java/com/google/android/exoplayer2/audio/DtsUtil.java similarity index 100% rename from library/common/src/main/java/com/google/android/exoplayer2/audio/DtsUtil.java rename to library/extractor/src/main/java/com/google/android/exoplayer2/audio/DtsUtil.java diff --git a/library/common/src/main/java/com/google/android/exoplayer2/audio/MpegAudioUtil.java b/library/extractor/src/main/java/com/google/android/exoplayer2/audio/MpegAudioUtil.java similarity index 100% rename from library/common/src/main/java/com/google/android/exoplayer2/audio/MpegAudioUtil.java rename to library/extractor/src/main/java/com/google/android/exoplayer2/audio/MpegAudioUtil.java diff --git a/library/common/src/main/java/com/google/android/exoplayer2/audio/OpusUtil.java b/library/extractor/src/main/java/com/google/android/exoplayer2/audio/OpusUtil.java similarity index 100% rename from library/common/src/main/java/com/google/android/exoplayer2/audio/OpusUtil.java rename to library/extractor/src/main/java/com/google/android/exoplayer2/audio/OpusUtil.java diff --git a/library/common/src/main/java/com/google/android/exoplayer2/audio/WavUtil.java b/library/extractor/src/main/java/com/google/android/exoplayer2/audio/WavUtil.java similarity index 100% rename from library/common/src/main/java/com/google/android/exoplayer2/audio/WavUtil.java rename to library/extractor/src/main/java/com/google/android/exoplayer2/audio/WavUtil.java diff --git a/library/common/src/main/java/com/google/android/exoplayer2/video/AvcConfig.java b/library/extractor/src/main/java/com/google/android/exoplayer2/video/AvcConfig.java similarity index 100% rename from library/common/src/main/java/com/google/android/exoplayer2/video/AvcConfig.java rename to library/extractor/src/main/java/com/google/android/exoplayer2/video/AvcConfig.java diff --git a/library/common/src/main/java/com/google/android/exoplayer2/video/DolbyVisionConfig.java b/library/extractor/src/main/java/com/google/android/exoplayer2/video/DolbyVisionConfig.java similarity index 100% rename from library/common/src/main/java/com/google/android/exoplayer2/video/DolbyVisionConfig.java rename to library/extractor/src/main/java/com/google/android/exoplayer2/video/DolbyVisionConfig.java diff --git a/library/common/src/main/java/com/google/android/exoplayer2/video/HevcConfig.java b/library/extractor/src/main/java/com/google/android/exoplayer2/video/HevcConfig.java similarity index 100% rename from library/common/src/main/java/com/google/android/exoplayer2/video/HevcConfig.java rename to library/extractor/src/main/java/com/google/android/exoplayer2/video/HevcConfig.java diff --git a/library/common/src/test/java/com/google/android/exoplayer2/audio/Ac3UtilTest.java b/library/extractor/src/test/java/com/google/android/exoplayer2/audio/Ac3UtilTest.java similarity index 100% rename from library/common/src/test/java/com/google/android/exoplayer2/audio/Ac3UtilTest.java rename to library/extractor/src/test/java/com/google/android/exoplayer2/audio/Ac3UtilTest.java diff --git a/library/common/src/test/java/com/google/android/exoplayer2/audio/OpusUtilTest.java b/library/extractor/src/test/java/com/google/android/exoplayer2/audio/OpusUtilTest.java similarity index 100% rename from library/common/src/test/java/com/google/android/exoplayer2/audio/OpusUtilTest.java rename to library/extractor/src/test/java/com/google/android/exoplayer2/audio/OpusUtilTest.java diff --git a/library/common/src/test/java/com/google/android/exoplayer2/video/HevcConfigTest.java b/library/extractor/src/test/java/com/google/android/exoplayer2/video/HevcConfigTest.java similarity index 100% rename from library/common/src/test/java/com/google/android/exoplayer2/video/HevcConfigTest.java rename to library/extractor/src/test/java/com/google/android/exoplayer2/video/HevcConfigTest.java diff --git a/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/HlsPlaylistParser.java b/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/HlsPlaylistParser.java index ce44211b31..ac8bf1e5a8 100644 --- a/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/HlsPlaylistParser.java +++ b/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/HlsPlaylistParser.java @@ -26,7 +26,6 @@ import androidx.annotation.Nullable; import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.Format; import com.google.android.exoplayer2.ParserException; -import com.google.android.exoplayer2.audio.Ac3Util; import com.google.android.exoplayer2.drm.DrmInitData; import com.google.android.exoplayer2.drm.DrmInitData.SchemeData; import com.google.android.exoplayer2.extractor.mp4.PsshAtomUtil; @@ -518,7 +517,7 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser