History

Rework link property configuration system. This can now handle filters which are added to graphs out of order, including auto-inserted scale filters. As an added bonus, it can now detect circular filter chains which wouldn't work anyway.

Commited in SoC by Bobby Bingham on 2007-12-24 03:22:10 Originally committed as revision 12717 to svn://svn.ffmpeg.org/ffmpeg/trunk

Vitor Sessak committed 18 years ago

Commit 095ae1b1 parent f3f42a31 file · +14 −37Browse files

Showing the changes to libavfilter/avfiltergraph.c (1 of 1 file). Show all

Unified · Split

libavfilter/avfiltergraph.c+14−37
@@ -101,7 +101,6 @@ static inline AVFilterLink *get_extern_output_link(AVFilterLink *link) · 100 unmodified lines
101static int link_out_config_props(AVFilterLink *link)101static int link_out_config_props(AVFilterLink *link)
102{102{
103 AVFilterLink *link2 = get_extern_output_link(link);103 AVFilterLink *link2 = get_extern_output_link(link);
104 int (*config_props)(AVFilterLink *);
105 104
106 if(!link2)105 if(!link2)
107 return 0;106 return 0;
@@ -109,9 +108,7 @@ static int link_out_config_props(AVFilterLink *link) · 1 unmodified line
109 link2->w = link->w;108 link2->w = link->w;
110 link2->h = link->h;109 link2->h = link->h;
111 110
112 if(!(config_props = link2->dst->input_pads[link2->dstpad].config_props))111 return 0;
113 config_props = avfilter_default_config_input_link;
114 return config_props(link2);
115}112}
116 113
117static void link_out_start_frame(AVFilterLink *link, AVFilterPicRef *picref)114static void link_out_start_frame(AVFilterLink *link, AVFilterPicRef *picref)
@@ -203,6 +200,7 @@ static int graph_in_config_props(AVFilterLink *link) · 85 unmodified lines
203{200{
204 AVFilterLink *link2 = get_intern_input_link(link);201 AVFilterLink *link2 = get_intern_input_link(link);
205 int (*config_props)(AVFilterLink *);202 int (*config_props)(AVFilterLink *);
203 int ret;
206 204
207 if(!link2)205 if(!link2)
208 return -1;206 return -1;
@@ -215,7 +213,12 @@ static int graph_in_config_props(AVFilterLink *link) · 6 unmodified lines
215 if(!(config_props = link2->dst->input_pads[link2->dstpad].config_props))213 if(!(config_props = link2->dst->input_pads[link2->dstpad].config_props))
216 return 0; /* FIXME? */214 return 0; /* FIXME? */
217 //config_props = avfilter_default_config_input_link;215 //config_props = avfilter_default_config_input_link;
218 return config_props(link2);216 if(!(ret = config_props(link2)))
217 link2->init_state = AVLINK_INIT;
218 else
219 link2->init_state = AVLINK_STARTINIT;
220
221 return ret;
219}222}
220 223
221static AVFilterLink *get_intern_output_link(AVFilterLink *link)224static AVFilterLink *get_intern_output_link(AVFilterLink *link)
@@ -235,26 +238,21 @@ static int graph_out_request_frame(AVFilterLink *link) · 13 unmodified lines
235 238
236static int graph_out_config_props(AVFilterLink *link)239static int graph_out_config_props(AVFilterLink *link)
237{240{
238 AVFilterLink *link2 = get_intern_output_link(link);241 GraphContext *graph = link->src->priv;
239 int (*config_props)(AVFilterLink *);242 AVFilterLink *link2 = graph->link_filter_out->inputs[link->srcpad];
240 int ret;243 int ret;
241 244
245 if((ret = avfilter_config_links(graph->link_filter_out)))
246 return ret;
247
242 if(!link2)248 if(!link2)
243 return 0;249 return 0;
244 250
245 link2->w = link->w;
246 link2->h = link->h;
247 link2->format = link->format;
248
249 if(!(config_props = link2->src->output_pads[link2->srcpad].config_props))
250 config_props = avfilter_default_config_output_link;
251 ret = config_props(link2);
252
253 link->w = link2->w;251 link->w = link2->w;
254 link->h = link2->h;252 link->h = link2->h;
255 link->format = link2->format;253 link->format = link2->format;
256 254
257 return ret;255 return 0;
258}256}
259 257
260static int add_graph_input(AVFilterContext *gctx, AVFilterContext *filt, unsigned idx,258static int add_graph_input(AVFilterContext *gctx, AVFilterContext *filt, unsigned idx,
@@ -477,27 +475,6 @@ int avfilter_graph_config_formats(AVFilterContext *graphctx) · 216 unmodified lines
477 return 0;475 return 0;
478}476}
479 477
480int avfilter_graph_config_links(AVFilterContext *graphctx)
481{
482 GraphContext *graph = graphctx->priv;
483 int i, j;
484
485 for(i = 0; i < graph->filter_count; i ++) {
486 for(j = 0; j < graph->filters[i]->input_count; j ++) {
487 /* ensure that graphs contained within graphs are configured */
488 if((graph->filters[i]->filter == &avfilter_vf_graph ||
489 graph->filters[i]->filter == &avfilter_vf_graphfile ||
490 graph->filters[i]->filter == &avfilter_vf_graphdesc) &&
491 avfilter_graph_config_links(graph->filters[i]))
492 return -1;
493 if(avfilter_config_link(graph->filters[i]->inputs[j]))
494 return -1;
495 }
496 }
497
498 return 0;
499}
500
501static int graph_load_from_desc(AVFilterContext *ctx, AVFilterGraphDesc *desc)478static int graph_load_from_desc(AVFilterContext *ctx, AVFilterGraphDesc *desc)
502{479{
503 AVFilterGraphDescFilter *curfilt;480 AVFilterGraphDescFilter *curfilt;

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t