Make the scale filter set in the input and output links only the
authorStefano Sabatini <stefano.sabatini-lala@poste.it>
Fri, 8 Jan 2010 23:48:32 +0000 (23:48 +0000)
committerStefano Sabatini <stefano.sabatini-lala@poste.it>
Fri, 8 Jan 2010 23:48:32 +0000 (23:48 +0000)
 respective pixel formats effectively supported by libswscale.

Originally committed as revision 21105 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavfilter/vf_scale.c

index 381d572ff92df1e7583725c81e0141a984b70965..6ccdde26c00f035cac4abb3742aaa17d9bde92db 100644 (file)
@@ -69,13 +69,27 @@ static av_cold void uninit(AVFilterContext *ctx)
 static int query_formats(AVFilterContext *ctx)
 {
     AVFilterFormats *formats;
 static int query_formats(AVFilterContext *ctx)
 {
     AVFilterFormats *formats;
+    enum PixelFormat pix_fmt;
+    int ret;
 
     if (ctx->inputs[0]) {
 
     if (ctx->inputs[0]) {
-        formats = avfilter_all_colorspaces();
+        formats = NULL;
+        for (pix_fmt = 0; pix_fmt < PIX_FMT_NB; pix_fmt++)
+            if (   sws_isSupportedInput(pix_fmt)
+                && (ret = avfilter_add_colorspace(&formats, pix_fmt)) < 0) {
+                avfilter_formats_unref(&formats);
+                return ret;
+            }
         avfilter_formats_ref(formats, &ctx->inputs[0]->out_formats);
     }
     if (ctx->outputs[0]) {
         avfilter_formats_ref(formats, &ctx->inputs[0]->out_formats);
     }
     if (ctx->outputs[0]) {
-        formats = avfilter_all_colorspaces();
+        formats = NULL;
+        for (pix_fmt = 0; pix_fmt < PIX_FMT_NB; pix_fmt++)
+            if (    sws_isSupportedOutput(pix_fmt)
+                && (ret = avfilter_add_colorspace(&formats, pix_fmt)) < 0) {
+                avfilter_formats_unref(&formats);
+                return ret;
+            }
         avfilter_formats_ref(formats, &ctx->outputs[0]->in_formats);
     }
 
         avfilter_formats_ref(formats, &ctx->outputs[0]->in_formats);
     }