From c2d0d7818f1045fbee5f296d614a11d25784215f Mon Sep 17 00:00:00 2001 From: wm4 Date: Wed, 9 Dec 2015 00:08:00 +0100 Subject: csputils: remove obscure int_bits matrix scaling This has no reason to be there. Put the functionality into another function instead. While we're at it, also adjust for possible accuracy issues with high bit depth YUV (matters for rendering subtitles into screenshots only). --- sub/draw_bmp.c | 9 +++++---- sub/sd_ass.c | 12 ++++-------- 2 files changed, 9 insertions(+), 12 deletions(-) (limited to 'sub') diff --git a/sub/draw_bmp.c b/sub/draw_bmp.c index 2093e5f9d1..0c12c7078a 100644 --- a/sub/draw_bmp.c +++ b/sub/draw_bmp.c @@ -290,8 +290,8 @@ static void draw_ass(struct mp_draw_sub_cache *cache, struct mp_rect bb, struct mp_csp_params cspar = MP_CSP_PARAMS_DEFAULTS; mp_csp_set_image_params(&cspar, &temp->params); cspar.levels_out = MP_CSP_LEVELS_PC; // RGB (libass.color) - cspar.int_bits_in = bits; - cspar.int_bits_out = 8; + cspar.input_bits = bits; + cspar.texture_bits = (bits + 7) / 8 * 8; struct mp_cmat yuv2rgb, rgb2yuv; bool need_conv = temp->fmt.flags & MP_IMGFLAG_YUV; @@ -312,9 +312,10 @@ static void draw_ass(struct mp_draw_sub_cache *cache, struct mp_rect bb, int g = (sb->libass.color >> 16) & 0xFF; int b = (sb->libass.color >> 8) & 0xFF; int a = 255 - (sb->libass.color & 0xFF); - int color_yuv[3] = {r, g, b}; + int color_yuv[3]; if (need_conv) { - mp_map_int_color(&rgb2yuv, bits, color_yuv); + int rgb[3] = {r, g, b}; + mp_map_fixp_color(&rgb2yuv, 8, rgb, cspar.texture_bits, color_yuv); } else { color_yuv[0] = g; color_yuv[1] = b; diff --git a/sub/sd_ass.c b/sub/sd_ass.c index 9e4da9a379..092b260677 100644 --- a/sub/sd_ass.c +++ b/sub/sd_ass.c @@ -667,8 +667,6 @@ static void mangle_colors(struct sd *sd, struct sub_bitmaps *parts) struct mp_csp_params vs_params = MP_CSP_PARAMS_DEFAULTS; vs_params.colorspace = csp; vs_params.levels_in = levels; - vs_params.int_bits_in = 8; - vs_params.int_bits_out = 8; struct mp_cmat vs_yuv2rgb, vs_rgb2yuv; mp_get_yuv2rgb_coeffs(&vs_params, &vs_yuv2rgb); mp_invert_yuv2rgb(&vs_rgb2yuv, &vs_yuv2rgb); @@ -677,8 +675,6 @@ static void mangle_colors(struct sd *sd, struct sub_bitmaps *parts) struct mp_csp_params rgb_params = MP_CSP_PARAMS_DEFAULTS; rgb_params.colorspace = params.colorspace; rgb_params.levels_in = params.colorlevels; - rgb_params.int_bits_in = 8; - rgb_params.int_bits_out = 8; struct mp_cmat vs2rgb; mp_get_yuv2rgb_coeffs(&rgb_params, &vs2rgb); @@ -689,9 +685,9 @@ static void mangle_colors(struct sd *sd, struct sub_bitmaps *parts) int g = (color >> 16u) & 0xff; int b = (color >> 8u) & 0xff; int a = 0xff - (color & 0xff); - int c[3] = {r, g, b}; - mp_map_int_color(&vs_rgb2yuv, 8, c); - mp_map_int_color(&vs2rgb, 8, c); - sb->libass.color = MP_ASS_RGBA(c[0], c[1], c[2], a); + int rgb[3] = {r, g, b}, yuv[3]; + mp_map_fixp_color(&vs_rgb2yuv, 8, rgb, 8, yuv); + mp_map_fixp_color(&vs2rgb, 8, yuv, 8, rgb); + sb->libass.color = MP_ASS_RGBA(rgb[0], rgb[1], rgb[2], a); } } -- cgit v1.2.3