From b461d546d683b45f1fbb3336684964ecd52e16b3 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Wed, 5 Jun 2019 21:05:33 -0700 Subject: [PATCH] Use new MediaCodecInfo helper to blacklist software codecs --- .../binding/video/MediaCodecHelper.java | 40 +++++++++++++------ 1 file changed, 28 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/com/limelight/binding/video/MediaCodecHelper.java b/app/src/main/java/com/limelight/binding/video/MediaCodecHelper.java index a548d7cb..0f6ca5c5 100644 --- a/app/src/main/java/com/limelight/binding/video/MediaCodecHelper.java +++ b/app/src/main/java/com/limelight/binding/video/MediaCodecHelper.java @@ -474,6 +474,24 @@ public class MediaCodecHelper { return null; } + + private static boolean isCodecBlacklisted(MediaCodecInfo codecInfo) { + // Use the new isSoftwareOnly() function on Android Q + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + if (codecInfo.isSoftwareOnly()) { + LimeLog.info("Skipping software-only decoder: "+codecInfo.getName()); + return true; + } + } + + // Check for explicitly blacklisted decoders + if (isDecoderInList(blacklistedDecoderPrefixes, codecInfo.getName())) { + LimeLog.info("Skipping blacklisted decoder: "+codecInfo.getName()); + return true; + } + + return false; + } public static MediaCodecInfo findFirstDecoder(String mimeType) { for (MediaCodecInfo codecInfo : getMediaCodecList()) { @@ -482,15 +500,14 @@ public class MediaCodecHelper { continue; } - // Check for explicitly blacklisted decoders - if (isDecoderInList(blacklistedDecoderPrefixes, codecInfo.getName())) { - LimeLog.info("Skipping blacklisted decoder: "+codecInfo.getName()); - continue; - } - // Find a decoder that supports the specified video format for (String mime : codecInfo.getSupportedTypes()) { if (mime.equalsIgnoreCase(mimeType)) { + // Skip blacklisted codecs + if (isCodecBlacklisted(codecInfo)) { + continue; + } + LimeLog.info("First decoder choice is "+codecInfo.getName()); return codecInfo; } @@ -530,17 +547,16 @@ public class MediaCodecHelper { continue; } - // Check for explicitly blacklisted decoders - if (isDecoderInList(blacklistedDecoderPrefixes, codecInfo.getName())) { - LimeLog.info("Skipping blacklisted decoder: "+codecInfo.getName()); - continue; - } - // Find a decoder that supports the requested video format for (String mime : codecInfo.getSupportedTypes()) { if (mime.equalsIgnoreCase(mimeType)) { LimeLog.info("Examining decoder capabilities of "+codecInfo.getName()); + // Skip blacklisted codecs + if (isCodecBlacklisted(codecInfo)) { + //continue; + } + CodecCapabilities caps = codecInfo.getCapabilitiesForType(mime); if (requiredProfile != -1) {