diff --git a/library/src/main/java/com/google/android/exoplayer2/MediaCodecAudioRenderer.java b/library/src/main/java/com/google/android/exoplayer2/MediaCodecAudioRenderer.java index aa15e445ab..1c76504c54 100644 --- a/library/src/main/java/com/google/android/exoplayer2/MediaCodecAudioRenderer.java +++ b/library/src/main/java/com/google/android/exoplayer2/MediaCodecAudioRenderer.java @@ -148,7 +148,7 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media if (allowPassthrough(mimeType) && mediaCodecSelector.getPassthroughDecoderInfo() != null) { return ADAPTIVE_NOT_SEAMLESS | FORMAT_HANDLED; } - DecoderInfo decoderInfo = mediaCodecSelector.getDecoderInfo(mimeType, + MediaCodecDecoderInfo decoderInfo = mediaCodecSelector.getDecoderInfo(mimeType, format.requiresSecureDecryption); if (decoderInfo == null) { return FORMAT_UNSUPPORTED_SUBTYPE; @@ -164,10 +164,10 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media } @Override - protected DecoderInfo getDecoderInfo(MediaCodecSelector mediaCodecSelector, Format format, - boolean requiresSecureDecoder) throws DecoderQueryException { + protected MediaCodecDecoderInfo getDecoderInfo(MediaCodecSelector mediaCodecSelector, + Format format, boolean requiresSecureDecoder) throws DecoderQueryException { if (allowPassthrough(format.sampleMimeType)) { - DecoderInfo passthroughDecoderInfo = mediaCodecSelector.getPassthroughDecoderInfo(); + MediaCodecDecoderInfo passthroughDecoderInfo = mediaCodecSelector.getPassthroughDecoderInfo(); if (passthroughDecoderInfo != null) { passthroughEnabled = true; return passthroughDecoderInfo; diff --git a/library/src/main/java/com/google/android/exoplayer2/DecoderInfo.java b/library/src/main/java/com/google/android/exoplayer2/MediaCodecDecoderInfo.java similarity index 91% rename from library/src/main/java/com/google/android/exoplayer2/DecoderInfo.java rename to library/src/main/java/com/google/android/exoplayer2/MediaCodecDecoderInfo.java index c3d72fc254..1e4eeb7235 100644 --- a/library/src/main/java/com/google/android/exoplayer2/DecoderInfo.java +++ b/library/src/main/java/com/google/android/exoplayer2/MediaCodecDecoderInfo.java @@ -29,7 +29,7 @@ import android.util.Pair; * Contains information about a media decoder. */ @TargetApi(16) -public final class DecoderInfo { +public final class MediaCodecDecoderInfo { /** * The name of the decoder. @@ -42,28 +42,28 @@ public final class DecoderInfo { /** * Whether the decoder supports seamless resolution switches. * - * @see android.media.MediaCodecInfo.CodecCapabilities#isFeatureSupported(String) - * @see android.media.MediaCodecInfo.CodecCapabilities#FEATURE_AdaptivePlayback + * @see MediaCodecInfo.CodecCapabilities#isFeatureSupported(String) + * @see MediaCodecInfo.CodecCapabilities#FEATURE_AdaptivePlayback */ public final boolean adaptive; private final String mimeType; private final CodecCapabilities capabilities; - public static DecoderInfo newPassthroughInstance(String name) { - return new DecoderInfo(name, null, null); + public static MediaCodecDecoderInfo newPassthroughInstance(String name) { + return new MediaCodecDecoderInfo(name, null, null); } - public static DecoderInfo newInstance(String name, String mimeType, + public static MediaCodecDecoderInfo newInstance(String name, String mimeType, CodecCapabilities capabilities) { - return new DecoderInfo(name, mimeType, capabilities); + return new MediaCodecDecoderInfo(name, mimeType, capabilities); } /** * @param name The name of the decoder. * @param capabilities The capabilities of the decoder. */ - private DecoderInfo(String name, String mimeType, CodecCapabilities capabilities) { + private MediaCodecDecoderInfo(String name, String mimeType, CodecCapabilities capabilities) { this.name = Assertions.checkNotNull(name); this.mimeType = mimeType; this.capabilities = capabilities; diff --git a/library/src/main/java/com/google/android/exoplayer2/MediaCodecRenderer.java b/library/src/main/java/com/google/android/exoplayer2/MediaCodecRenderer.java index 7247101540..d2b0593611 100644 --- a/library/src/main/java/com/google/android/exoplayer2/MediaCodecRenderer.java +++ b/library/src/main/java/com/google/android/exoplayer2/MediaCodecRenderer.java @@ -248,17 +248,17 @@ public abstract class MediaCodecRenderer extends Renderer { throws DecoderQueryException; /** - * Returns a {@link DecoderInfo} for a given format. + * Returns a {@link MediaCodecDecoderInfo} for a given format. * * @param mediaCodecSelector The decoder selector. * @param format The format for which a decoder is required. * @param requiresSecureDecoder Whether a secure decoder is required. - * @return A {@link DecoderInfo} describing the decoder to instantiate, or null if no suitable - * decoder exists. + * @return A {@link MediaCodecDecoderInfo} describing the decoder to instantiate, or null if no + * suitable decoder exists. * @throws DecoderQueryException Thrown if there was an error querying decoders. */ - protected DecoderInfo getDecoderInfo(MediaCodecSelector mediaCodecSelector, Format format, - boolean requiresSecureDecoder) throws DecoderQueryException { + protected MediaCodecDecoderInfo getDecoderInfo(MediaCodecSelector mediaCodecSelector, + Format format, boolean requiresSecureDecoder) throws DecoderQueryException { return mediaCodecSelector.getDecoderInfo(format.sampleMimeType, requiresSecureDecoder); } @@ -301,7 +301,7 @@ public abstract class MediaCodecRenderer extends Renderer { } } - DecoderInfo decoderInfo = null; + MediaCodecDecoderInfo decoderInfo = null; try { decoderInfo = getDecoderInfo(mediaCodecSelector, format, drmSessionRequiresSecureDecoder); if (decoderInfo == null && drmSessionRequiresSecureDecoder) { diff --git a/library/src/main/java/com/google/android/exoplayer2/MediaCodecSelector.java b/library/src/main/java/com/google/android/exoplayer2/MediaCodecSelector.java index ec9366de0c..47f8686f34 100644 --- a/library/src/main/java/com/google/android/exoplayer2/MediaCodecSelector.java +++ b/library/src/main/java/com/google/android/exoplayer2/MediaCodecSelector.java @@ -30,13 +30,13 @@ public interface MediaCodecSelector { MediaCodecSelector DEFAULT = new MediaCodecSelector() { @Override - public DecoderInfo getDecoderInfo(String mimeType, boolean requiresSecureDecoder) + public MediaCodecDecoderInfo getDecoderInfo(String mimeType, boolean requiresSecureDecoder) throws DecoderQueryException { return MediaCodecUtil.getDecoderInfo(mimeType, requiresSecureDecoder); } @Override - public DecoderInfo getPassthroughDecoderInfo() throws DecoderQueryException { + public MediaCodecDecoderInfo getPassthroughDecoderInfo() throws DecoderQueryException { return MediaCodecUtil.getPassthroughDecoderInfo(); } @@ -47,18 +47,20 @@ public interface MediaCodecSelector { * * @param mimeType The mime type for which a decoder is required. * @param requiresSecureDecoder Whether a secure decoder is required. - * @return A {@link DecoderInfo} describing the decoder, or null if no suitable decoder exists. + * @return A {@link MediaCodecDecoderInfo} describing the decoder, or null if no suitable decoder + * exists. * @throws DecoderQueryException Thrown if there was an error querying decoders. */ - DecoderInfo getDecoderInfo(String mimeType, boolean requiresSecureDecoder) + MediaCodecDecoderInfo getDecoderInfo(String mimeType, boolean requiresSecureDecoder) throws DecoderQueryException; /** * Selects a decoder to instantiate for audio passthrough. * - * @return A {@link DecoderInfo} describing the decoder, or null if no suitable decoder exists. + * @return A {@link MediaCodecDecoderInfo} describing the decoder, or null if no suitable decoder + * exists. * @throws DecoderQueryException Thrown if there was an error querying decoders. */ - DecoderInfo getPassthroughDecoderInfo() throws DecoderQueryException; + MediaCodecDecoderInfo getPassthroughDecoderInfo() throws DecoderQueryException; } diff --git a/library/src/main/java/com/google/android/exoplayer2/MediaCodecUtil.java b/library/src/main/java/com/google/android/exoplayer2/MediaCodecUtil.java index 60a6a3bee4..c02302311f 100644 --- a/library/src/main/java/com/google/android/exoplayer2/MediaCodecUtil.java +++ b/library/src/main/java/com/google/android/exoplayer2/MediaCodecUtil.java @@ -58,14 +58,15 @@ public final class MediaCodecUtil { } private static final String TAG = "MediaCodecUtil"; - private static final DecoderInfo PASSTHROUGH_DECODER_INFO = - DecoderInfo.newPassthroughInstance("OMX.google.raw.decoder"); + private static final MediaCodecDecoderInfo PASSTHROUGH_DECODER_INFO = + MediaCodecDecoderInfo.newPassthroughInstance("OMX.google.raw.decoder"); private static final Map HEVC_CODEC_STRING_TO_PROFILE_LEVEL; private static final String CODEC_ID_HEV1 = "hev1"; private static final String CODEC_ID_HVC1 = "hvc1"; private static final Pattern PROFILE_PATTERN = Pattern.compile("^\\D?(\\d+)$"); - private static final HashMap> decoderInfosCache = new HashMap<>(); + private static final HashMap> decoderInfosCache = + new HashMap<>(); // Lazily initialized. private static int maxH264DecodableFrameSize = -1; @@ -93,9 +94,10 @@ public final class MediaCodecUtil { /** * Returns information about a decoder suitable for audio passthrough. ** - * @return A {@link DecoderInfo} describing the decoder, or null if no suitable decoder exists. + * @return A {@link MediaCodecDecoderInfo} describing the decoder, or null if no suitable decoder + * exists. */ - public static DecoderInfo getPassthroughDecoderInfo() { + public static MediaCodecDecoderInfo getPassthroughDecoderInfo() { // TODO: Return null if the raw decoder doesn't exist. return PASSTHROUGH_DECODER_INFO; } @@ -106,28 +108,29 @@ public final class MediaCodecUtil { * @param mimeType The mime type. * @param secure Whether the decoder is required to support secure decryption. Always pass false * unless secure decryption really is required. - * @return A {@link DecoderInfo} describing the decoder, or null if no suitable decoder exists. + * @return A {@link MediaCodecDecoderInfo} describing the decoder, or null if no suitable decoder + * exists. */ - public static DecoderInfo getDecoderInfo(String mimeType, boolean secure) + public static MediaCodecDecoderInfo getDecoderInfo(String mimeType, boolean secure) throws DecoderQueryException { - List decoderInfos = getDecoderInfos(mimeType, secure); + List decoderInfos = getDecoderInfos(mimeType, secure); return decoderInfos.isEmpty() ? null : decoderInfos.get(0); } /** - * Returns all {@link DecoderInfo}s for the given mime type, in the order given by + * Returns all {@link MediaCodecDecoderInfo}s for the given mime type, in the order given by * {@link MediaCodecList}. * * @param mimeType The mime type. * @param secure Whether the decoder is required to support secure decryption. Always pass false * unless secure decryption really is required. - * @return A list of all @{link DecoderInfo}s for the given mime type, in the order given by - * {@link MediaCodecList}. + * @return A list of all @{link MediaCodecDecoderInfo}s for the given mime type, in the order + * given by {@link MediaCodecList}. */ - public static synchronized List getDecoderInfos(String mimeType, boolean secure) - throws DecoderQueryException { + public static synchronized List getDecoderInfos(String mimeType, + boolean secure) throws DecoderQueryException { CodecKey key = new CodecKey(mimeType, secure); - List decoderInfos = decoderInfosCache.get(key); + List decoderInfos = decoderInfosCache.get(key); if (decoderInfos != null) { return decoderInfos; } @@ -149,10 +152,10 @@ public final class MediaCodecUtil { return decoderInfos; } - private static List getDecoderInfosInternal( + private static List getDecoderInfosInternal( CodecKey key, MediaCodecListCompat mediaCodecList) throws DecoderQueryException { try { - List decoderInfos = new ArrayList<>(); + List decoderInfos = new ArrayList<>(); String mimeType = key.mimeType; int numberOfCodecs = mediaCodecList.getCodecCount(); boolean secureDecodersExplicit = mediaCodecList.secureDecodersExplicit(); @@ -168,10 +171,11 @@ public final class MediaCodecUtil { boolean secure = mediaCodecList.isSecurePlaybackSupported(mimeType, capabilities); if ((secureDecodersExplicit && key.secure == secure) || (!secureDecodersExplicit && !key.secure)) { - decoderInfos.add(DecoderInfo.newInstance(codecName, mimeType, capabilities)); + decoderInfos.add( + MediaCodecDecoderInfo.newInstance(codecName, mimeType, capabilities)); } else if (!secureDecodersExplicit && secure) { - decoderInfos.add(DecoderInfo.newInstance(codecName + ".secure", mimeType, - capabilities)); + decoderInfos.add(MediaCodecDecoderInfo.newInstance(codecName + ".secure", + mimeType, capabilities)); // It only makes sense to have one synthesized secure decoder, return immediately. return decoderInfos; } @@ -273,7 +277,7 @@ public final class MediaCodecUtil { public static int maxH264DecodableFrameSize() throws DecoderQueryException { if (maxH264DecodableFrameSize == -1) { int result = 0; - DecoderInfo decoderInfo = getDecoderInfo(MimeTypes.VIDEO_H264, false); + MediaCodecDecoderInfo decoderInfo = getDecoderInfo(MimeTypes.VIDEO_H264, false); if (decoderInfo != null) { for (CodecProfileLevel profileLevel : decoderInfo.getProfileLevels()) { result = Math.max(avcLevelToMaxFrameSize(profileLevel.level), result); diff --git a/library/src/main/java/com/google/android/exoplayer2/MediaCodecVideoRenderer.java b/library/src/main/java/com/google/android/exoplayer2/MediaCodecVideoRenderer.java index a733c1d0d4..26d98e2c38 100644 --- a/library/src/main/java/com/google/android/exoplayer2/MediaCodecVideoRenderer.java +++ b/library/src/main/java/com/google/android/exoplayer2/MediaCodecVideoRenderer.java @@ -173,7 +173,7 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer { if (!MimeTypes.isVideo(mimeType)) { return FORMAT_UNSUPPORTED_TYPE; } - DecoderInfo decoderInfo = mediaCodecSelector.getDecoderInfo(mimeType, + MediaCodecDecoderInfo decoderInfo = mediaCodecSelector.getDecoderInfo(mimeType, format.requiresSecureDecryption); if (decoderInfo == null) { return FORMAT_UNSUPPORTED_SUBTYPE; diff --git a/playbacktests/src/main/java/com/google/android/exoplayer2/playbacktests/gts/DashTest.java b/playbacktests/src/main/java/com/google/android/exoplayer2/playbacktests/gts/DashTest.java index bb81158b5a..efea1f932b 100644 --- a/playbacktests/src/main/java/com/google/android/exoplayer2/playbacktests/gts/DashTest.java +++ b/playbacktests/src/main/java/com/google/android/exoplayer2/playbacktests/gts/DashTest.java @@ -17,9 +17,9 @@ package com.google.android.exoplayer2.playbacktests.gts; import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.CodecCounters; -import com.google.android.exoplayer2.DecoderInfo; import com.google.android.exoplayer2.ExoPlaybackException; import com.google.android.exoplayer2.ExoPlayer; +import com.google.android.exoplayer2.MediaCodecDecoderInfo; import com.google.android.exoplayer2.MediaCodecUtil; import com.google.android.exoplayer2.MediaCodecUtil.DecoderQueryException; import com.google.android.exoplayer2.Renderer; @@ -365,7 +365,7 @@ public final class DashTest extends ActivityInstrumentationTestCase2