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
101101 static int link_out_config_props(AVFilterLink *link)
102102 {
103103 AVFilterLink *link2 = get_extern_output_link(link);
104− int (*config_props)(AVFilterLink *);
105104
106105 if(!link2)
107106 return 0;
@@ -109,9 +108,7 @@ static int link_out_config_props(AVFilterLink *link) · 1 unmodified line
109108 link2->w = link->w;
110109 link2->h = link->h;
111110
112− if(!(config_props = link2->dst->input_pads[link2->dstpad].config_props))
113− config_props = avfilter_default_config_input_link;
114− return config_props(link2);
111+ return 0;
115112 }
116113
117114 static void link_out_start_frame(AVFilterLink *link, AVFilterPicRef *picref)
@@ -203,6 +200,7 @@ static int graph_in_config_props(AVFilterLink *link) · 85 unmodified lines
203200 {
204201 AVFilterLink *link2 = get_intern_input_link(link);
205202 int (*config_props)(AVFilterLink *);
203+ int ret;
206204
207205 if(!link2)
208206 return -1;
@@ -215,7 +213,12 @@ static int graph_in_config_props(AVFilterLink *link) · 6 unmodified lines
215213 if(!(config_props = link2->dst->input_pads[link2->dstpad].config_props))
216214 return 0; /* FIXME? */
217215 //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;
219222 }
220223
221224 static AVFilterLink *get_intern_output_link(AVFilterLink *link)
@@ -235,26 +238,21 @@ static int graph_out_request_frame(AVFilterLink *link) · 13 unmodified lines
235238
236239 static int graph_out_config_props(AVFilterLink *link)
237240 {
238− AVFilterLink *link2 = get_intern_output_link(link);
239− int (*config_props)(AVFilterLink *);
241+ GraphContext *graph = link->src->priv;
242+ AVFilterLink *link2 = graph->link_filter_out->inputs[link->srcpad];
240243 int ret;
241244
245+ if((ret = avfilter_config_links(graph->link_filter_out)))
246+ return ret;
247+
242248 if(!link2)
243249 return 0;
244250
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−
253251 link->w = link2->w;
254252 link->h = link2->h;
255253 link->format = link2->format;
256254
257− return ret;
255+ return 0;
258256 }
259257
260258 static int add_graph_input(AVFilterContext *gctx, AVFilterContext *filt, unsigned idx,
@@ -477,27 +475,6 @@ int avfilter_graph_config_formats(AVFilterContext *graphctx) · 216 unmodified lines
477475 return 0;
478476 }
479477
480−int 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−
501478 static int graph_load_from_desc(AVFilterContext *ctx, AVFilterGraphDesc *desc)
502479 {
503480 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