From 2cb147a2f40bcde48f5db321840f4dbd36ca796b Mon Sep 17 00:00:00 2001 From: wm4 Date: Fri, 3 May 2013 01:37:13 +0200 Subject: video: support YCgCo colorspace YCgCo can be manually selected, but will also be used if the decoder reports YCgCo. To make things more fun, files are sometimes marked incorrectly, which will display such broken files incorrectly starting with this commit. --- video/csputils.c | 12 ++++++++++++ video/csputils.h | 1 + 2 files changed, 13 insertions(+) (limited to 'video') diff --git a/video/csputils.c b/video/csputils.c index e7ea5a388b..d2793532df 100644 --- a/video/csputils.c +++ b/video/csputils.c @@ -41,6 +41,7 @@ char * const mp_csp_names[MP_CSP_COUNT] = { "SMPTE-240M", "RGB", "XYZ", + "YCgCo", }; char * const mp_csp_equalizer_names[MP_CSP_EQ_COUNT] = { @@ -59,6 +60,7 @@ enum mp_csp avcol_spc_to_mp_csp(enum AVColorSpace colorspace) case AVCOL_SPC_SMPTE170M: return MP_CSP_BT_601; case AVCOL_SPC_SMPTE240M: return MP_CSP_SMPTE_240M; case AVCOL_SPC_RGB: return MP_CSP_RGB; + case AVCOL_SPC_YCGCO: return MP_CSP_YCGCO; default: return MP_CSP_AUTO; } } @@ -79,6 +81,7 @@ enum AVColorSpace mp_csp_to_avcol_spc(enum mp_csp colorspace) case MP_CSP_BT_601: return AVCOL_SPC_BT470BG; case MP_CSP_SMPTE_240M: return AVCOL_SPC_SMPTE240M; case MP_CSP_RGB: return AVCOL_SPC_RGB; + case MP_CSP_YCGCO: return AVCOL_SPC_YCGCO; default: return AVCOL_SPC_UNSPECIFIED; } } @@ -190,6 +193,15 @@ void mp_get_yuv2rgb_coeffs(struct mp_csp_params *params, float m[3][4]) levels_in = -1; break; } + case MP_CSP_YCGCO: { + static const float ycgco_to_rgb[3][4] = { + {1, -1, 1}, + {1, 1, 0}, + {1, -1, -1}, + }; + memcpy(m, ycgco_to_rgb, sizeof(ycgco_to_rgb)); + break; + } default: abort(); }; diff --git a/video/csputils.h b/video/csputils.h index 184e1ee76a..d11e85e38b 100644 --- a/video/csputils.h +++ b/video/csputils.h @@ -41,6 +41,7 @@ enum mp_csp { MP_CSP_SMPTE_240M, MP_CSP_RGB, MP_CSP_XYZ, + MP_CSP_YCGCO, MP_CSP_COUNT }; -- cgit v1.2.3