diff --git a/app/src/main/java/com/limelight/Game.java b/app/src/main/java/com/limelight/Game.java index b417adb9..d2b43e78 100644 --- a/app/src/main/java/com/limelight/Game.java +++ b/app/src/main/java/com/limelight/Game.java @@ -409,7 +409,7 @@ public class Game extends Activity implements SurfaceHolder.Callback, LimeLog.info("Bogus refresh rate: "+roundedRefreshRate); } // HACK: Avoid crashing on some MTK devices - else if (roundedRefreshRate == 50 && decoderRenderer.is49FpsBlacklisted()) { + else if (decoderRenderer.isBlacklistedForFrameRate(roundedRefreshRate - 1)) { // Use the old rendering strategy on these broken devices decoderRenderer.enableLegacyFrameDropRendering(); } diff --git a/app/src/main/java/com/limelight/binding/video/MediaCodecDecoderRenderer.java b/app/src/main/java/com/limelight/binding/video/MediaCodecDecoderRenderer.java index 7bcc8a37..df722fff 100644 --- a/app/src/main/java/com/limelight/binding/video/MediaCodecDecoderRenderer.java +++ b/app/src/main/java/com/limelight/binding/video/MediaCodecDecoderRenderer.java @@ -190,8 +190,8 @@ public class MediaCodecDecoderRenderer extends VideoDecoderRenderer { return avcDecoder != null; } - public boolean is49FpsBlacklisted() { - return avcDecoder != null && MediaCodecHelper.decoderBlacklistedFor49Fps(avcDecoder.getName()); + public boolean isBlacklistedForFrameRate(int frameRate) { + return avcDecoder != null && MediaCodecHelper.decoderBlacklistedForFrameRate(avcDecoder.getName(), frameRate); } public void enableLegacyFrameDropRendering() { 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 131c7650..90a1bfa0 100644 --- a/app/src/main/java/com/limelight/binding/video/MediaCodecHelper.java +++ b/app/src/main/java/com/limelight/binding/video/MediaCodecHelper.java @@ -37,6 +37,7 @@ public class MediaCodecHelper { private static final List refFrameInvalidationAvcPrefixes; private static final List refFrameInvalidationHevcPrefixes; private static final List blacklisted49FpsDecoderPrefixes; + private static final List blacklisted59FpsDecoderPrefixes; private static boolean isLowEndSnapdragon = false; private static boolean initialized = false; @@ -161,12 +162,19 @@ public class MediaCodecHelper { static { blacklisted49FpsDecoderPrefixes = new LinkedList<>(); + blacklisted59FpsDecoderPrefixes = new LinkedList<>(); // We see a bunch of crashes on MediaTek Android TVs running // at 49 FPS (PAL 50 Hz - 1). Blacklist this frame rate for // these devices and hope they fix it in Pie. if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P) { blacklisted49FpsDecoderPrefixes.add("omx.mtk"); + + // 59 FPS also seems to crash on the Sony Bravia TV ATV3 model. + // Blacklist that frame rate on these devices too. + if (Build.DEVICE.startsWith("BRAVIA_ATV3")) { + blacklisted59FpsDecoderPrefixes.add("omx.mtk"); + } } } @@ -345,8 +353,16 @@ public class MediaCodecHelper { return isDecoderInList(baselineProfileHackPrefixes, decoderName); } - public static boolean decoderBlacklistedFor49Fps(String decoderName) { - return isDecoderInList(blacklisted49FpsDecoderPrefixes, decoderName); + public static boolean decoderBlacklistedForFrameRate(String decoderName, int fps) { + if (fps == 49) { + return isDecoderInList(blacklisted49FpsDecoderPrefixes, decoderName); + } + else if (fps == 59) { + return isDecoderInList(blacklisted59FpsDecoderPrefixes, decoderName); + } + else { + return false; + } } public static boolean decoderSupportsRefFrameInvalidationAvc(String decoderName, int videoHeight) {