diff options
Diffstat (limited to 'video/out/gl_lcms.c')
-rw-r--r-- | video/out/gl_lcms.c | 27 |
1 files changed, 8 insertions, 19 deletions
diff --git a/video/out/gl_lcms.c b/video/out/gl_lcms.c index 8c30ce3719..08f89b81d9 100644 --- a/video/out/gl_lcms.c +++ b/video/out/gl_lcms.c @@ -73,7 +73,6 @@ const struct m_sub_options mp_icc_conf = { OPT_STRING("icc-profile", profile, 0), OPT_STRING("icc-cache", cache, 0), OPT_INT("icc-intent", intent, 0), - OPT_FLAG("icc-approx-gamma", approx, 0), OPT_STRING_VALIDATE("3dlut-size", size_str, 0, validate_3dlut_size_opt), {0} }, @@ -130,8 +129,11 @@ struct lut3d *mp_load_icc(struct mp_icc_opts *opts, struct mp_log *log, goto error_exit; char *cache_info = - talloc_asprintf(tmp, "intent=%d, size=%dx%dx%d, approx=%d\n", - opts->intent, s_r, s_g, s_b, opts->approx); + // Gamma is included in the header to help uniquely identify it, + // because we may change the parameter in the future or make it + // customizable. + talloc_asprintf(tmp, "intent=%d, size=%dx%dx%d, gamma=2.4", + opts->intent, s_r, s_g, s_b); // check cache if (opts->cache) { @@ -166,22 +168,9 @@ struct lut3d *mp_load_icc(struct mp_icc_opts *opts, struct mp_log *log, .Blue = {0.15, 0.06, 1.0}, }; - cmsToneCurve *tonecurve; - if (opts->approx) { - /* Apple's CMS, among other programs that rely on it, uses 1.95 as a - faster approximation of this curve. It's not quite correct, but the - option is provided for compatibility with such incorrect clips. */ - tonecurve = cmsBuildGamma(NULL, 1.95); - } else { - /* Rec BT.709 defines the tone curve as: - V = 1.099 * L^0.45 - 0.099 for L >= 0.018 - V = 4.500 * L for L < 0.018 - - The 0.081 parameter comes from inserting 0.018 into the function */ - tonecurve = cmsBuildParametricToneCurve(NULL, 4, - (cmsFloat64Number[5]){1/0.45, 1/1.099, 0.099/1.099, 1/4.5, 0.081}); - } - + // 2.4 is arbitrarily used as a gamma compression factor for the 3DLUT, + // reducing artifacts due to rounding errors on wide gamut profiles + cmsToneCurve *tonecurve = cmsBuildGamma(NULL, 2.4); cmsHPROFILE vid_profile = cmsCreateRGBProfile(&d65, &bt709prim, (cmsToneCurve*[3]){tonecurve, tonecurve, tonecurve}); cmsFreeToneCurve(tonecurve); |