summaryrefslogtreecommitdiffstats
path: root/video/out/gl_lcms.c
diff options
context:
space:
mode:
Diffstat (limited to 'video/out/gl_lcms.c')
-rw-r--r--video/out/gl_lcms.c27
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);