avfilter/vf_scale: set the RGB matrix coefficients in case of RGB

This fixes the passing through of non-RGB matrix from input to
output when conversion from YCbCr to RGB happens.
This commit is contained in:
Jan Ekström 2021-08-29 00:38:29 +03:00
parent 9b2281a4a3
commit 2818b14392

View File

@ -736,13 +736,16 @@ scale:
out->width = outlink->w;
out->height = outlink->h;
// Sanity check: If we've got the RGB/XYZ (identity) matrix configured, and
// the output is no longer RGB, unset the matrix.
// In theory this should be in swscale itself as the AVFrame
// based API gets in, so that not every swscale API user has
// to go through duplicating such sanity checks.
if (out->colorspace == AVCOL_SPC_RGB &&
!(av_pix_fmt_desc_get(out->format)->flags & AV_PIX_FMT_FLAG_RGB))
// Sanity checks:
// 1. If the output is RGB, set the matrix coefficients to RGB.
// 2. If the output is not RGB and we've got the RGB/XYZ (identity)
// matrix configured, unset the matrix.
// In theory these should be in swscale itself as the AVFrame
// based API gets in, so that not every swscale API user has
// to go through duplicating such sanity checks.
if (av_pix_fmt_desc_get(out->format)->flags & AV_PIX_FMT_FLAG_RGB)
out->colorspace = AVCOL_SPC_RGB;
else if (out->colorspace == AVCOL_SPC_RGB)
out->colorspace = AVCOL_SPC_UNSPECIFIED;
if (scale->output_is_pal)