diff --git a/library/core/src/main/java/com/google/android/exoplayer2/mediacodec/MediaCodecInfo.java b/library/core/src/main/java/com/google/android/exoplayer2/mediacodec/MediaCodecInfo.java index 90f9517a8d..cad6cc72f7 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/mediacodec/MediaCodecInfo.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/mediacodec/MediaCodecInfo.java @@ -179,7 +179,10 @@ public final class MediaCodecInfo { hardwareAccelerated, softwareOnly, vendor, - /* adaptive= */ !forceDisableAdaptive && capabilities != null && isAdaptive(capabilities), + /* adaptive= */ !forceDisableAdaptive + && capabilities != null + && isAdaptive(capabilities) + && !needsDisableAdaptationWorkaround(name), /* tunneling= */ capabilities != null && isTunneling(capabilities), /* secure= */ forceSecure || (capabilities != null && isSecure(capabilities))); } @@ -653,6 +656,19 @@ public final class MediaCodecInfo { return capabilities.getMaxSupportedInstances(); } + /** + * Returns whether the decoder is known to fail when adapting, despite advertising itself as an + * adaptive decoder. + * + * @param name The decoder name. + * @return True if the decoder is known to fail when adapting. + */ + private static boolean needsDisableAdaptationWorkaround(String name) { + return Util.SDK_INT <= 22 + && ("ODROID-XU3".equals(Util.MODEL) || "Nexus 10".equals(Util.MODEL)) + && ("OMX.Exynos.AVC.Decoder".equals(name) || "OMX.Exynos.AVC.Decoder.secure".equals(name)); + } + /** * Returns whether the decoder is known to fail when an attempt is made to reconfigure it with a * new format's configuration data. diff --git a/library/core/src/main/java/com/google/android/exoplayer2/mediacodec/MediaCodecUtil.java b/library/core/src/main/java/com/google/android/exoplayer2/mediacodec/MediaCodecUtil.java index 64eb0bb837..3183672c62 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/mediacodec/MediaCodecUtil.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/mediacodec/MediaCodecUtil.java @@ -312,7 +312,6 @@ public final class MediaCodecUtil { boolean hardwareAccelerated = isHardwareAccelerated(codecInfo); boolean softwareOnly = isSoftwareOnly(codecInfo); boolean vendor = isVendor(codecInfo); - boolean forceDisableAdaptive = codecNeedsDisableAdaptationWorkaround(name); if ((secureDecodersExplicit && key.secure == secureSupported) || (!secureDecodersExplicit && !key.secure)) { decoderInfos.add( @@ -324,7 +323,7 @@ public final class MediaCodecUtil { hardwareAccelerated, softwareOnly, vendor, - forceDisableAdaptive, + /* forceDisableAdaptive= */ false, /* forceSecure= */ false)); } else if (!secureDecodersExplicit && secureSupported) { decoderInfos.add( @@ -336,7 +335,7 @@ public final class MediaCodecUtil { hardwareAccelerated, softwareOnly, vendor, - forceDisableAdaptive, + /* forceDisableAdaptive= */ false, /* forceSecure= */ true)); // It only makes sense to have one synthesized secure decoder, return immediately. return decoderInfos; @@ -651,19 +650,6 @@ public final class MediaCodecUtil { return codecInfo.isVendor(); } - /** - * Returns whether the decoder is known to fail when adapting, despite advertising itself as an - * adaptive decoder. - * - * @param name The decoder name. - * @return True if the decoder is known to fail when adapting. - */ - private static boolean codecNeedsDisableAdaptationWorkaround(String name) { - return Util.SDK_INT <= 22 - && ("ODROID-XU3".equals(Util.MODEL) || "Nexus 10".equals(Util.MODEL)) - && ("OMX.Exynos.AVC.Decoder".equals(name) || "OMX.Exynos.AVC.Decoder.secure".equals(name)); - } - @Nullable private static Pair getDolbyVisionProfileAndLevel( String codec, String[] parts) {