diff --git a/video/csputils.c b/video/csputils.c index a4d896f598..f42cfb398b 100644 --- a/video/csputils.c +++ b/video/csputils.c @@ -671,6 +671,9 @@ void mp_get_yuv2rgb_coeffs(struct mp_csp_params *params, struct mp_cmat *m) abort(); } + rgblev.min = (rgblev.min + params->brightness) * params->contrast; + rgblev.max = (rgblev.max + params->brightness) * params->contrast; + double ymul = (rgblev.max - rgblev.min) / (yuvlev.ymax - yuvlev.ymin); double cmul = (rgblev.max - rgblev.min) / (yuvlev.cmid - yuvlev.cmin) / 2; for (int i = 0; i < 3; i++) { @@ -682,14 +685,6 @@ void mp_get_yuv2rgb_coeffs(struct mp_csp_params *params, struct mp_cmat *m) -(m->m[i][1] + m->m[i][2]) * yuvlev.cmid; } - // Brightness adds a constant to output R,G,B. - // Contrast scales Y around 1/2 (not 0 in this implementation). - for (int i = 0; i < 3; i++) { - m->c[i] += params->brightness; - m->m[i][0] *= params->contrast; - m->c[i] += (rgblev.max-rgblev.min) * (1 - params->contrast)/2; - } - int in_bits = FFMAX(params->int_bits_in, 1); int out_bits = FFMAX(params->int_bits_out, 1); double in_scale = (1 << in_bits) - 1.0;