]> git.sesse.net Git - ffmpeg/blobdiff - libavfilter/avfiltergraph.c
Part 2 of EAC3 support, this is still disabled as it breaks regressions
[ffmpeg] / libavfilter / avfiltergraph.c
index 45b7a7fcad4773a861ca39a130e89f3280f41775..ccb275c6f9514aab64385c9797d7297e79e82f7a 100644 (file)
@@ -33,11 +33,17 @@ void avfilter_destroy_graph(AVFilterGraph *graph)
     av_freep(&graph->filters);
 }
 
-void avfilter_graph_add_filter(AVFilterGraph *graph, AVFilterContext *filter)
+int avfilter_graph_add_filter(AVFilterGraph *graph, AVFilterContext *filter)
 {
     graph->filters = av_realloc(graph->filters,
                                 sizeof(AVFilterContext*) * ++graph->filter_count);
+
+    if (!graph->filters)
+        return -1;
+
     graph->filters[graph->filter_count - 1] = filter;
+
+    return 0;
 }
 
 AVFilterContext *avfilter_graph_get_filter(AVFilterGraph *graph, char *name)
@@ -54,6 +60,8 @@ AVFilterContext *avfilter_graph_get_filter(AVFilterGraph *graph, char *name)
 static int query_formats(AVFilterGraph *graph)
 {
     int i, j;
+    int scaler_count = 0;
+    char inst_name[30];
 
     /* ask all the sub-filters for their supported colorspaces */
     for(i = 0; i < graph->filter_count; i ++) {
@@ -72,9 +80,12 @@ static int query_formats(AVFilterGraph *graph)
             if(link && link->in_formats != link->out_formats) {
                 if(!avfilter_merge_formats(link->in_formats,
                                            link->out_formats)) {
+                    AVFilterContext *scale;
                     /* couldn't merge format lists. auto-insert scale filter */
-                    AVFilterContext *scale =
-                        avfilter_open(avfilter_get_by_name("scale"), NULL);
+                    snprintf(inst_name, sizeof(inst_name), "auto-inserted scaler %d",
+                             scaler_count);
+                    scale =
+                        avfilter_open(avfilter_get_by_name("scale"),inst_name);
 
                     if(!scale || scale->filter->init(scale, NULL, NULL) ||
                                  avfilter_insert_filter(link, scale, 0, 0)) {
@@ -82,7 +93,9 @@ static int query_formats(AVFilterGraph *graph)
                         return -1;
                     }
 
-                    avfilter_graph_add_filter(graph, scale);
+                    if (avfilter_graph_add_filter(graph, scale) < 0)
+                        return -1;
+
                     scale->filter->query_formats(scale);
                     if(!avfilter_merge_formats(scale-> inputs[0]->in_formats,
                                                scale-> inputs[0]->out_formats)||