aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNicolas George <nicolas.george@normalesup.org>2012-02-16 16:49:43 +0100
committerNicolas George <nicolas.george@normalesup.org>2012-02-23 09:37:11 +0100
commit42655b24c2eab7e06fc56c59c21a50abe2aaf019 (patch)
tree6f2af629ec7b4e5ddafd54223fcab01108435f55
parent69a653cac38096299e0746fee95a6556576a34ce (diff)
downloadffmpeg-42655b24c2eab7e06fc56c59c21a50abe2aaf019.tar.gz
avfiltergraph: avoid harmful auto audio conversions.
With the current code, an automatically inserted aconvert necessary for format change would usually convert to mono for no good reason. The new code will not avoid all conversions, but at least will keep them among the layouts common to both filters.
-rw-r--r--libavfilter/avfiltergraph.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/libavfilter/avfiltergraph.c b/libavfilter/avfiltergraph.c
index c97e495c96..50ba8fbcf8 100644
--- a/libavfilter/avfiltergraph.c
+++ b/libavfilter/avfiltergraph.c
@@ -187,6 +187,7 @@ static int query_formats(AVFilterGraph *graph, AVClass *log_ctx)
{
int i, j, ret;
char filt_args[128];
+ AVFilterFormats *formats, *chlayouts, *packing;
/* ask all the sub-filters for their supported media formats */
for (i = 0; i < graph->filter_count; i++) {
@@ -221,9 +222,13 @@ static int query_formats(AVFilterGraph *graph, AVClass *log_ctx)
!link->in_packing || !link->out_packing)
return AVERROR(EINVAL);
- if (!avfilter_merge_formats(link->in_formats, link->out_formats) ||
- !avfilter_merge_formats(link->in_chlayouts, link->out_chlayouts) ||
- !avfilter_merge_formats(link->in_packing, link->out_packing))
+ /* Merge all three list before checking: that way, in all
+ * three categories, aconvert will use a common format
+ * whenever possible. */
+ formats = avfilter_merge_formats(link->in_formats, link->out_formats);
+ chlayouts = avfilter_merge_formats(link->in_chlayouts, link->out_chlayouts);
+ packing = avfilter_merge_formats(link->in_packing, link->out_packing);
+ if (!formats || !chlayouts || !packing)
if (ret = insert_conv_filter(graph, link, "aconvert", NULL))
return ret;
}