[FFmpeg-devel] [PATCH] avfilter/vf_scale: set the RGB matrix coefficients in case of RGB

Jan Ekström jeebjp at gmail.com
Sun Aug 29 01:15:22 EEST 2021


This fixes the passing through of non-RGB matrix from input to
output when conversion from YCbCr to RGB happens.
---
 libavfilter/vf_scale.c | 17 ++++++++++-------
 1 file changed, 10 insertions(+), 7 deletions(-)

diff --git a/libavfilter/vf_scale.c b/libavfilter/vf_scale.c
index 7ca833bbb1..17668206aa 100644
--- a/libavfilter/vf_scale.c
+++ b/libavfilter/vf_scale.c
@@ -738,13 +738,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)
-- 
2.31.1



More information about the ffmpeg-devel mailing list