summaryrefslogtreecommitdiffstats
path: root/video/out/opengl/video.c
diff options
context:
space:
mode:
authorNiklas Haas <git@nand.wakku.to>2016-06-28 14:28:32 +0200
committerwm4 <wm4@nowhere>2016-06-28 19:48:29 +0200
commitdc9a5cbfd7c30d4f0597ec0aad91dadf63defbba (patch)
tree2bb156f5f84643068e34e4817860597f73c262dc /video/out/opengl/video.c
parent65499d863a41cd7403302b8b635e18b764d4f9eb (diff)
downloadmpv-dc9a5cbfd7c30d4f0597ec0aad91dadf63defbba.tar.bz2
mpv-dc9a5cbfd7c30d4f0597ec0aad91dadf63defbba.tar.xz
vo_opengl: revise the transfer curve logic
Instead of hard-coding a big list, move some of the functionality to csputils. Affects both the auto-guess blacklist and the peak estimation. Also update the comments.
Diffstat (limited to 'video/out/opengl/video.c')
-rw-r--r--video/out/opengl/video.c27
1 files changed, 10 insertions, 17 deletions
diff --git a/video/out/opengl/video.c b/video/out/opengl/video.c
index fff41a1b91..519857f7f9 100644
--- a/video/out/opengl/video.c
+++ b/video/out/opengl/video.c
@@ -2206,31 +2206,24 @@ static void pass_colormanage(struct gl_video *p, float peak_src,
}
if (trc_dst == MP_CSP_TRC_AUTO) {
+ // Most people seem to complain when the image is darker or brighter
+ // than what they're "used to", so just avoid changing the gamma
+ // altogether by default. The only exceptions to this rule apply to
+ // very unusual TRCs, which even hardcode technoluddites would probably
+ // not enjoy viewing unaltered.
trc_dst = p->image_params.gamma;
- // Avoid outputting linear light or HDR content "by default"
- if (trc_dst == MP_CSP_TRC_LINEAR ||
- trc_dst == MP_CSP_TRC_SMPTE_ST2084 ||
- trc_dst == MP_CSP_TRC_ARIB_STD_B67 ||
- trc_dst == MP_CSP_TRC_V_LOG)
- {
+ // Avoid outputting linear light or HDR content "by default". For these
+ // just pick gamma 2.2 as a default, since it's a good estimate for
+ // the response of typical displays
+ if (trc_dst == MP_CSP_TRC_LINEAR || mp_trc_is_hdr(trc_dst))
trc_dst = MP_CSP_TRC_GAMMA22;
- }
}
if (!peak_src) {
// If the source has no information known, it's display-referred
// (and should be treated relative to the specified desired peak_dst)
- peak_src = peak_dst;
-
- // Exception: ARIB STD-B67's nominal peak is exactly 12 times the
- // target's reference peak
- if (p->image_params.gamma == MP_CSP_TRC_ARIB_STD_B67)
- peak_src = 12 * peak_dst;
-
- // Similar deal for V-Log
- if (p->image_params.gamma == MP_CSP_TRC_V_LOG)
- peak_src = 46.0855 * peak_dst;
+ peak_src = peak_dst * mp_csp_trc_rel_peak(p->image_params.gamma);
}
// All operations from here on require linear light as a starting point,