summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWessel Dankers <wsl@uvt.nl>2018-08-22 14:39:40 +0200
committerwm4 <1387750+wm4@users.noreply.github.com>2019-09-27 13:21:41 +0200
commit643417dd175ebe3a1b90213f97acddaea7eaea80 (patch)
treeecd0f64845724490fc932aa28d643e850a208163
parent919b7a55cdc837166bf831cdd1f01e4ad5b2cf89 (diff)
downloadmpv-643417dd175ebe3a1b90213f97acddaea7eaea80.tar.bz2
mpv-643417dd175ebe3a1b90213f97acddaea7eaea80.tar.xz
video: add pure gamma TRC curves for 2.0, 2.4 and 2.6.
-rw-r--r--DOCS/man/options.rst6
-rw-r--r--DOCS/man/vf.rst3
-rw-r--r--video/csputils.c3
-rw-r--r--video/csputils.h3
-rw-r--r--video/out/gpu/lcms.c3
-rw-r--r--video/out/gpu/video_shaders.c18
6 files changed, 36 insertions, 0 deletions
diff --git a/DOCS/man/options.rst b/DOCS/man/options.rst
index bad627fd68..b833399a3a 100644
--- a/DOCS/man/options.rst
+++ b/DOCS/man/options.rst
@@ -5342,8 +5342,14 @@ The following video options are currently all specific to ``--vo=gpu`` and
Linear light output
gamma1.8
Pure power curve (gamma 1.8), also used for Apple RGB
+ gamma2.0
+ Pure power curve (gamma 2.0)
gamma2.2
Pure power curve (gamma 2.2)
+ gamma2.4
+ Pure power curve (gamma 2.4)
+ gamma2.6
+ Pure power curve (gamma 2.6)
gamma2.8
Pure power curve (gamma 2.8), also used for BT.470-BG
prophoto
diff --git a/DOCS/man/vf.rst b/DOCS/man/vf.rst
index 6465d305ff..ef6fbda184 100644
--- a/DOCS/man/vf.rst
+++ b/DOCS/man/vf.rst
@@ -216,7 +216,10 @@ Available mpv-only filters are:
:srgb: IEC 61966-2-4 (sRGB)
:linear: Linear light
:gamma1.8: Pure power curve (gamma 1.8)
+ :gamma2.0: Pure power curve (gamma 2.0)
:gamma2.2: Pure power curve (gamma 2.2)
+ :gamma2.4: Pure power curve (gamma 2.4)
+ :gamma2.6: Pure power curve (gamma 2.6)
:gamma2.8: Pure power curve (gamma 2.8)
:prophoto: ProPhoto RGB (ROMM) curve
:pq: ITU-R BT.2100 PQ (Perceptual quantizer) curve
diff --git a/video/csputils.c b/video/csputils.c
index f02a4ca4b8..6f88fe30b2 100644
--- a/video/csputils.c
+++ b/video/csputils.c
@@ -78,7 +78,10 @@ const struct m_opt_choice_alternatives mp_csp_trc_names[] = {
{"srgb", MP_CSP_TRC_SRGB},
{"linear", MP_CSP_TRC_LINEAR},
{"gamma1.8", MP_CSP_TRC_GAMMA18},
+ {"gamma2.0", MP_CSP_TRC_GAMMA20},
{"gamma2.2", MP_CSP_TRC_GAMMA22},
+ {"gamma2.4", MP_CSP_TRC_GAMMA24},
+ {"gamma2.6", MP_CSP_TRC_GAMMA26},
{"gamma2.8", MP_CSP_TRC_GAMMA28},
{"prophoto", MP_CSP_TRC_PRO_PHOTO},
{"pq", MP_CSP_TRC_PQ},
diff --git a/video/csputils.h b/video/csputils.h
index 441f2b024b..f817779584 100644
--- a/video/csputils.h
+++ b/video/csputils.h
@@ -78,7 +78,10 @@ enum mp_csp_trc {
MP_CSP_TRC_SRGB,
MP_CSP_TRC_LINEAR,
MP_CSP_TRC_GAMMA18,
+ MP_CSP_TRC_GAMMA20,
MP_CSP_TRC_GAMMA22,
+ MP_CSP_TRC_GAMMA24,
+ MP_CSP_TRC_GAMMA26,
MP_CSP_TRC_GAMMA28,
MP_CSP_TRC_PRO_PHOTO,
MP_CSP_TRC_PQ,
diff --git a/video/out/gpu/lcms.c b/video/out/gpu/lcms.c
index a8f277d3f0..1d4e90d7af 100644
--- a/video/out/gpu/lcms.c
+++ b/video/out/gpu/lcms.c
@@ -253,7 +253,10 @@ static cmsHPROFILE get_vid_profile(struct gl_lcms *p, cmsContext cms,
switch (trc) {
case MP_CSP_TRC_LINEAR: tonecurve[0] = cmsBuildGamma(cms, 1.0); break;
case MP_CSP_TRC_GAMMA18: tonecurve[0] = cmsBuildGamma(cms, 1.8); break;
+ case MP_CSP_TRC_GAMMA20: tonecurve[0] = cmsBuildGamma(cms, 2.0); break;
case MP_CSP_TRC_GAMMA22: tonecurve[0] = cmsBuildGamma(cms, 2.2); break;
+ case MP_CSP_TRC_GAMMA24: tonecurve[0] = cmsBuildGamma(cms, 2.4); break;
+ case MP_CSP_TRC_GAMMA26: tonecurve[0] = cmsBuildGamma(cms, 2.6); break;
case MP_CSP_TRC_GAMMA28: tonecurve[0] = cmsBuildGamma(cms, 2.8); break;
case MP_CSP_TRC_SRGB:
diff --git a/video/out/gpu/video_shaders.c b/video/out/gpu/video_shaders.c
index e3021fdb9c..51b62ad7db 100644
--- a/video/out/gpu/video_shaders.c
+++ b/video/out/gpu/video_shaders.c
@@ -364,9 +364,18 @@ void pass_linearize(struct gl_shader_cache *sc, enum mp_csp_trc trc)
case MP_CSP_TRC_GAMMA18:
GLSL(color.rgb = pow(color.rgb, vec3(1.8));)
break;
+ case MP_CSP_TRC_GAMMA20:
+ GLSL(color.rgb = pow(color.rgb, vec3(2.0));)
+ break;
case MP_CSP_TRC_GAMMA22:
GLSL(color.rgb = pow(color.rgb, vec3(2.2));)
break;
+ case MP_CSP_TRC_GAMMA24:
+ GLSL(color.rgb = pow(color.rgb, vec3(2.4));)
+ break;
+ case MP_CSP_TRC_GAMMA26:
+ GLSL(color.rgb = pow(color.rgb, vec3(2.6));)
+ break;
case MP_CSP_TRC_GAMMA28:
GLSL(color.rgb = pow(color.rgb, vec3(2.8));)
break;
@@ -445,9 +454,18 @@ void pass_delinearize(struct gl_shader_cache *sc, enum mp_csp_trc trc)
case MP_CSP_TRC_GAMMA18:
GLSL(color.rgb = pow(color.rgb, vec3(1.0/1.8));)
break;
+ case MP_CSP_TRC_GAMMA20:
+ GLSL(color.rgb = pow(color.rgb, vec3(1.0/2.0));)
+ break;
case MP_CSP_TRC_GAMMA22:
GLSL(color.rgb = pow(color.rgb, vec3(1.0/2.2));)
break;
+ case MP_CSP_TRC_GAMMA24:
+ GLSL(color.rgb = pow(color.rgb, vec3(1.0/2.4));)
+ break;
+ case MP_CSP_TRC_GAMMA26:
+ GLSL(color.rgb = pow(color.rgb, vec3(1.0/2.6));)
+ break;
case MP_CSP_TRC_GAMMA28:
GLSL(color.rgb = pow(color.rgb, vec3(1.0/2.8));)
break;