From 05b392bc949e918aaedb6383193edfd667bba646 Mon Sep 17 00:00:00 2001 From: Niklas Haas Date: Sun, 13 May 2018 21:16:13 +0200 Subject: vo_gpu: allow higher icc-contrast and improve logging With the advent of actual HDR devices, my real measured ICC profile has an "infinite" contrast, since the display is completely off on pure black inputs. 100k:1 might not be enough, so let's just bump it up to 1m:1 to be safe. Also, improve the logging in the case that the detected contrast is too high by default. --- DOCS/man/options.rst | 2 +- video/out/gpu/lcms.c | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/DOCS/man/options.rst b/DOCS/man/options.rst index 59bc16708f..ea8c6df26f 100644 --- a/DOCS/man/options.rst +++ b/DOCS/man/options.rst @@ -5281,7 +5281,7 @@ The following video options are currently all specific to ``--vo=gpu`` and Size of the 3D LUT generated from the ICC profile in each dimension. Default is 64x64x64. Sizes may range from 2 to 512. -``--icc-contrast=<0-100000>`` +``--icc-contrast=<0-1000000>`` Specifies an upper limit on the target device's contrast ratio. This is detected automatically from the profile if possible, but for some profiles it might be missing, causing the contrast to be assumed as infinite. As a diff --git a/video/out/gpu/lcms.c b/video/out/gpu/lcms.c index 3552351219..bc76db965f 100644 --- a/video/out/gpu/lcms.c +++ b/video/out/gpu/lcms.c @@ -83,7 +83,7 @@ const struct m_sub_options mp_icc_conf = { OPT_FLAG("icc-profile-auto", profile_auto, 0), OPT_STRING("icc-cache-dir", cache_dir, M_OPT_FILE), OPT_INT("icc-intent", intent, 0), - OPT_INTRANGE("icc-contrast", contrast, 0, 0, 100000), + OPT_INTRANGE("icc-contrast", contrast, 0, 0, 1000000), OPT_STRING_VALIDATE("icc-3dlut-size", size_str, 0, validate_3dlut_size_opt), OPT_REPLACED("3dlut-size", "icc-3dlut-size"), @@ -304,7 +304,8 @@ static cmsHPROFILE get_vid_profile(struct gl_lcms *p, cmsContext cms, // Built-in contrast failsafe double contrast = 3.0 / (src_black[0] + src_black[1] + src_black[2]); - if (contrast > 100000) { + MP_VERBOSE(p, "Detected ICC profile contrast: %f\n", contrast); + if (contrast > 100000 && !p->opts->contrast) { MP_WARN(p, "ICC profile detected contrast very high (>100000)," " falling back to contrast 1000 for sanity. Set the" " icc-contrast option to silence this warning.\n"); -- cgit v1.2.3