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 2a441223..66c1bc79 100644 --- a/app/src/main/java/com/limelight/binding/video/MediaCodecDecoderRenderer.java +++ b/app/src/main/java/com/limelight/binding/video/MediaCodecDecoderRenderer.java @@ -108,7 +108,7 @@ public class MediaCodecDecoderRenderer extends VideoDecoderRenderer { // for even required levels of HEVC. MediaCodecInfo decoderInfo = MediaCodecHelper.findProbableSafeDecoder("video/hevc", -1); if (decoderInfo != null) { - if (!MediaCodecHelper.decoderIsWhitelistedForHevc(decoderInfo.getName(), meteredNetwork)) { + if (!MediaCodecHelper.decoderIsWhitelistedForHevc(decoderInfo.getName(), meteredNetwork, prefs)) { LimeLog.info("Found HEVC decoder, but it's not whitelisted - "+decoderInfo.getName()); // HDR implies HEVC forced on, since HEVCMain10HDR10 is required for HDR. 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 b8897c4c..a70d0fb4 100644 --- a/app/src/main/java/com/limelight/binding/video/MediaCodecHelper.java +++ b/app/src/main/java/com/limelight/binding/video/MediaCodecHelper.java @@ -22,6 +22,7 @@ import android.media.MediaFormat; import android.os.Build; import com.limelight.LimeLog; +import com.limelight.preferences.PreferenceConfiguration; public class MediaCodecHelper { @@ -516,7 +517,7 @@ public class MediaCodecHelper { return isDecoderInList(refFrameInvalidationHevcPrefixes, decoderName); } - public static boolean decoderIsWhitelistedForHevc(String decoderName, boolean meteredData) { + public static boolean decoderIsWhitelistedForHevc(String decoderName, boolean meteredData, PreferenceConfiguration prefs) { // TODO: Shield Tablet K1/LTE? // // NVIDIA does partial HEVC acceleration on the Shield Tablet. I don't know @@ -551,9 +552,10 @@ public class MediaCodecHelper { // Some devices have HEVC decoders that we prefer not to use // typically because it can't support reference frame invalidation. // However, we will use it for HDR and for streaming over mobile networks - // since it works fine otherwise. + // since it works fine otherwise. We will also use it for 4K because RFI + // is currently disabled due to issues with video corruption. if (isDecoderInList(deprioritizedHevcDecoders, decoderName)) { - if (meteredData) { + if (meteredData || (prefs.width == 3840 && prefs.height == 2160)) { LimeLog.info("Selected deprioritized decoder"); return true; }