From af41021271d26ce40953df2d39846796a44ca3ff Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Thu, 14 Jun 2018 22:55:10 -0700 Subject: [PATCH] Use HEVC by default on MediaTek SoCs with PowerVR graphics --- .../binding/video/MediaCodecHelper.java | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 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 f75e3ff5..278c71db 100644 --- a/app/src/main/java/com/limelight/binding/video/MediaCodecHelper.java +++ b/app/src/main/java/com/limelight/binding/video/MediaCodecHelper.java @@ -131,8 +131,8 @@ public class MediaCodecHelper { } // Sony ATVs have broken MediaTek codecs (decoder hangs after rendering the first frame). - // I know the Fire TV 2 works, so I'll just whitelist Amazon devices which seem - // to actually be tested. Ugh... + // I know the Fire TV 2 and 3 works, so I'll just whitelist Amazon devices which seem + // to actually be tested. if (Build.MANUFACTURER.equalsIgnoreCase("Amazon")) { whitelistedHevcDecoders.add("omx.mtk"); whitelistedHevcDecoders.add("omx.amlogic"); @@ -166,6 +166,10 @@ public class MediaCodecHelper { } } + private static boolean isPowerVR(String glRenderer) { + return glRenderer.toLowerCase().contains("powervr"); + } + private static String getAdrenoVersionString(String glRenderer) { glRenderer = glRenderer.toLowerCase().trim(); @@ -259,6 +263,16 @@ public class MediaCodecHelper { else { blacklistedDecoderPrefixes.add("OMX.qcom.video.decoder.hevc"); } + + // Older MediaTek SoCs have issues with HEVC rendering but the newer chips with + // PowerVR GPUs have good HEVC support. + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N && isPowerVR(glRenderer)) { + LimeLog.info("Added omx.mtk to HEVC decoders based on PowerVR GPU"); + whitelistedHevcDecoders.add("omx.mtk"); + + LimeLog.info("Added omx.mtk to RFI list for HEVC"); + refFrameInvalidationHevcPrefixes.add("omx.mtk"); + } } initialized = true;