diff options
author | Vittorio Giovara <vittorio.giovara@gmail.com> | 2016-11-01 17:37:23 -0400 |
---|---|---|
committer | Ronald S. Bultje <rsbultje@gmail.com> | 2016-11-01 17:47:25 -0400 |
commit | 2996604acda448fcba057ddc9259f95538fdb2b1 (patch) | |
tree | 840d2ae8cb97fe9ce3a09d7f724494fc60e50109 /libavfilter/vf_colorspace.c | |
parent | 8459e6fd122715365a4d8b613d88298b3c4acdd7 (diff) |
vf_colorspace: Add support for ycgco color space
Signed-off-by: Vittorio Giovara <vittorio.giovara@gmail.com>
Signed-off-by: Ronald S. Bultje <rsbultje@gmail.com>
Diffstat (limited to 'libavfilter/vf_colorspace.c')
-rw-r--r-- | libavfilter/vf_colorspace.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/libavfilter/vf_colorspace.c b/libavfilter/vf_colorspace.c index d26f658591..7e0bafad23 100644 --- a/libavfilter/vf_colorspace.c +++ b/libavfilter/vf_colorspace.c @@ -175,6 +175,13 @@ typedef struct ColorSpaceContext { // FIXME dithering if bitdepth goes down? // FIXME bitexact for fate integration? +static const double ycgco_matrix[3][3] = +{ + { 0.25, 0.5, 0.25 }, + { -0.25, 0.5, -0.25 }, + { 0.5, 0, -0.5 }, +}; + /* * All constants explained in e.g. https://linuxtv.org/downloads/v4l-dvb-apis/ch02s06.html * The older ones (bt470bg/m) are also explained in their respective ITU docs @@ -187,6 +194,7 @@ static const struct LumaCoefficients luma_coefficients[AVCOL_SPC_NB] = { [AVCOL_SPC_SMPTE170M] = { 0.299, 0.587, 0.114 }, [AVCOL_SPC_BT709] = { 0.2126, 0.7152, 0.0722 }, [AVCOL_SPC_SMPTE240M] = { 0.212, 0.701, 0.087 }, + [AVCOL_SPC_YCOCG] = { 0.25, 0.5, 0.25 }, [AVCOL_SPC_BT2020_NCL] = { 0.2627, 0.6780, 0.0593 }, [AVCOL_SPC_BT2020_CL] = { 0.2627, 0.6780, 0.0593 }, }; @@ -209,6 +217,12 @@ static void fill_rgb2yuv_table(const struct LumaCoefficients *coeffs, { double bscale, rscale; + // special ycgco matrix + if (coeffs->cr == 0.25 && coeffs->cg == 0.5 && coeffs->cb == 0.25) { + memcpy(rgb2yuv, ycgco_matrix, sizeof(double) * 9); + return; + } + rgb2yuv[0][0] = coeffs->cr; rgb2yuv[0][1] = coeffs->cg; rgb2yuv[0][2] = coeffs->cb; @@ -1047,6 +1061,7 @@ static const AVOption colorspace_options[] = { ENUM("bt470bg", AVCOL_SPC_BT470BG, "csp"), ENUM("smpte170m", AVCOL_SPC_SMPTE170M, "csp"), ENUM("smpte240m", AVCOL_SPC_SMPTE240M, "csp"), + ENUM("ycgco", AVCOL_SPC_YCGCO, "csp"), ENUM("bt2020ncl", AVCOL_SPC_BT2020_NCL, "csp"), { "range", "Output color range", |