Commit 2996604a authored by Vittorio Giovara's avatar Vittorio Giovara Committed by Ronald S. Bultje

vf_colorspace: Add support for ycgco color space

Signed-off-by: 's avatarVittorio Giovara <vittorio.giovara@gmail.com>
Signed-off-by: 's avatarRonald S. Bultje <rsbultje@gmail.com>
parent 8459e6fd
...@@ -175,6 +175,13 @@ typedef struct ColorSpaceContext { ...@@ -175,6 +175,13 @@ typedef struct ColorSpaceContext {
// FIXME dithering if bitdepth goes down? // FIXME dithering if bitdepth goes down?
// FIXME bitexact for fate integration? // 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 * 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 * 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] = { ...@@ -187,6 +194,7 @@ static const struct LumaCoefficients luma_coefficients[AVCOL_SPC_NB] = {
[AVCOL_SPC_SMPTE170M] = { 0.299, 0.587, 0.114 }, [AVCOL_SPC_SMPTE170M] = { 0.299, 0.587, 0.114 },
[AVCOL_SPC_BT709] = { 0.2126, 0.7152, 0.0722 }, [AVCOL_SPC_BT709] = { 0.2126, 0.7152, 0.0722 },
[AVCOL_SPC_SMPTE240M] = { 0.212, 0.701, 0.087 }, [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_NCL] = { 0.2627, 0.6780, 0.0593 },
[AVCOL_SPC_BT2020_CL] = { 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, ...@@ -209,6 +217,12 @@ static void fill_rgb2yuv_table(const struct LumaCoefficients *coeffs,
{ {
double bscale, rscale; 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][0] = coeffs->cr;
rgb2yuv[0][1] = coeffs->cg; rgb2yuv[0][1] = coeffs->cg;
rgb2yuv[0][2] = coeffs->cb; rgb2yuv[0][2] = coeffs->cb;
...@@ -1047,6 +1061,7 @@ static const AVOption colorspace_options[] = { ...@@ -1047,6 +1061,7 @@ static const AVOption colorspace_options[] = {
ENUM("bt470bg", AVCOL_SPC_BT470BG, "csp"), ENUM("bt470bg", AVCOL_SPC_BT470BG, "csp"),
ENUM("smpte170m", AVCOL_SPC_SMPTE170M, "csp"), ENUM("smpte170m", AVCOL_SPC_SMPTE170M, "csp"),
ENUM("smpte240m", AVCOL_SPC_SMPTE240M, "csp"), ENUM("smpte240m", AVCOL_SPC_SMPTE240M, "csp"),
ENUM("ycgco", AVCOL_SPC_YCGCO, "csp"),
ENUM("bt2020ncl", AVCOL_SPC_BT2020_NCL, "csp"), ENUM("bt2020ncl", AVCOL_SPC_BT2020_NCL, "csp"),
{ "range", "Output color range", { "range", "Output color range",
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment