Force HEVC enabled if HDR is requested

This commit is contained in:
Cameron Gutman 2017-12-05 17:38:25 -08:00
parent 42bd93cb3a
commit 07d04171c3
2 changed files with 5 additions and 4 deletions

View File

@ -100,10 +100,11 @@ public class MediaCodecDecoderRenderer extends VideoDecoderRenderer {
// for even required levels of HEVC. // for even required levels of HEVC.
MediaCodecInfo decoderInfo = MediaCodecHelper.findProbableSafeDecoder("video/hevc", -1); MediaCodecInfo decoderInfo = MediaCodecHelper.findProbableSafeDecoder("video/hevc", -1);
if (decoderInfo != null) { if (decoderInfo != null) {
if (!MediaCodecHelper.decoderIsWhitelistedForHevc(decoderInfo.getName(), meteredNetwork, requestedHdr)) { if (!MediaCodecHelper.decoderIsWhitelistedForHevc(decoderInfo.getName(), meteredNetwork)) {
LimeLog.info("Found HEVC decoder, but it's not whitelisted - "+decoderInfo.getName()); LimeLog.info("Found HEVC decoder, but it's not whitelisted - "+decoderInfo.getName());
if (prefs.videoFormat == PreferenceConfiguration.FORCE_H265_ON) { // HDR implies HEVC forced on, since HEVCMain10HDR10 is required for HDR
if (prefs.videoFormat == PreferenceConfiguration.FORCE_H265_ON || requestedHdr) {
LimeLog.info("Forcing H265 enabled despite non-whitelisted decoder"); LimeLog.info("Forcing H265 enabled despite non-whitelisted decoder");
} }
else { else {

View File

@ -299,7 +299,7 @@ public class MediaCodecHelper {
return isDecoderInList(refFrameInvalidationHevcPrefixes, decoderName); return isDecoderInList(refFrameInvalidationHevcPrefixes, decoderName);
} }
public static boolean decoderIsWhitelistedForHevc(String decoderName, boolean meteredData, boolean willStreamHdr) { public static boolean decoderIsWhitelistedForHevc(String decoderName, boolean meteredData) {
// TODO: Shield Tablet K1/LTE? // TODO: Shield Tablet K1/LTE?
// //
// NVIDIA does partial HEVC acceleration on the Shield Tablet. I don't know // NVIDIA does partial HEVC acceleration on the Shield Tablet. I don't know
@ -335,7 +335,7 @@ public class MediaCodecHelper {
// typically because it can't support reference frame invalidation. // typically because it can't support reference frame invalidation.
// However, we will use it for HDR and for streaming over mobile networks // However, we will use it for HDR and for streaming over mobile networks
// since it works fine otherwise. // since it works fine otherwise.
if ((meteredData || willStreamHdr) && isDecoderInList(deprioritizedHevcDecoders, decoderName)) { if (meteredData && isDecoderInList(deprioritizedHevcDecoders, decoderName)) {
LimeLog.info("Selected deprioritized decoder"); LimeLog.info("Selected deprioritized decoder");
return true; return true;
} }