diff options
author | Jan Ekström <jeebjp@gmail.com> | 2021-08-22 23:28:55 +0300 |
---|---|---|
committer | Jan Ekström <jeebjp@gmail.com> | 2021-08-28 01:20:09 +0300 |
commit | 9dd410c80416197188337e3b7e1600be41d2ea64 (patch) | |
tree | 714da9f41aa99a03c98099f904f5059d934eed53 /libavfilter/vf_scale.c | |
parent | ffc00e5b16a9bacf707b9edf3c0d44cea4bd4dbe (diff) | |
download | ffmpeg-9dd410c80416197188337e3b7e1600be41d2ea64.tar.gz |
avfilter/vf_scale: reset color matrix in case of identity & non-RGB
Fixes passing through mismatching metadata from the input side
when RGB input (from f.ex. H.264 or HEVC) gets converted to YCbCr.
Fixes #9132
Diffstat (limited to 'libavfilter/vf_scale.c')
-rw-r--r-- | libavfilter/vf_scale.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/libavfilter/vf_scale.c b/libavfilter/vf_scale.c index ce39217515..7ca833bbb1 100644 --- a/libavfilter/vf_scale.c +++ b/libavfilter/vf_scale.c @@ -738,6 +738,15 @@ 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)) + out->colorspace = AVCOL_SPC_UNSPECIFIED; + if (scale->output_is_pal) avpriv_set_systematic_pal2((uint32_t*)out->data[1], outlink->format == AV_PIX_FMT_PAL8 ? AV_PIX_FMT_BGR8 : outlink->format); |