Browse code

avfiltergraph: fix format selection.

The old code had two bugs:

For audio filters, the format was not set.

For video filters, if several links reference the same format list,
the same format must be selected in the end. This is done by
setting formats->format_count to 1: the other links sharing
the reference will therefore have only one choice.
If the heuristic does not pick the first format, the selected format
must also be moved to the first position.

Nicolas George authored on 2012/04/23 23:55:11
Showing 1 changed files
... ...
@@ -269,12 +269,12 @@ static void pick_format(AVFilterLink *link, AVFilterLink *ref)
269 269
                 enum PixelFormat p = link->in_formats->formats[i];
270 270
                 best= avcodec_find_best_pix_fmt2(best, p, ref->format, has_alpha, NULL);
271 271
             }
272
-            link->format = best;
273
-        }else
274
-            link->format = link->in_formats->formats[0];
272
+            link->in_formats->formats[0] = best;
273
+        }
275 274
     }
276 275
 
277 276
     link->in_formats->format_count = 1;
277
+    link->format = link->in_formats->formats[0];
278 278
     avfilter_formats_unref(&link->in_formats);
279 279
     avfilter_formats_unref(&link->out_formats);
280 280