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 12031 to svn://svn.ffmpeg.org/ffmpeg/trunk

Vitor Sessak committed 18 years ago

Commit 69818101 parent c35a0471 file · +23 −5Browse files

Unified · Split

libavfilter/avfilter.c+23−5
@@ -125,23 +125,41 @@ int avfilter_insert_filter(AVFilterLink *link, AVFilterContext *filt, · 124 unmodified lines
125125 return 0;
126126 }
127127
128−int avfilter_config_link(AVFilterLink *link)
128+int avfilter_config_links(AVFilterContext *filter)
129129 {
130130 int (*config_link)(AVFilterLink *);
131+ unsigned i;
131132
132− if(!link)
133− return 0;
133+ for(i = 0; i < filter->input_count; i ++) {
134+ AVFilterLink *link;
135+
136+ if(!(link = filter->inputs[i])) continue;
137+
138+ switch(link->init_state) {
139+ case AVLINK_INIT:
140+ continue;
141+ case AVLINK_STARTINIT:
142+ av_log(filter, AV_LOG_ERROR, "circular filter chain detected\n");
143+ return -1;
144+ case AVLINK_UNINIT:
145+ link->init_state = AVLINK_STARTINIT;
146+
147+ if(avfilter_config_links(link->src))
148+ return -1;
134149
135150 if(!(config_link = link_spad(link).config_props))
136151 config_link = avfilter_default_config_output_link;
137152 if(config_link(link))
138153 return -1;
139154
140− if(!(config_link = link_dpad(link).config_props))
141− config_link = avfilter_default_config_input_link;
155+ if((config_link = link_dpad(link).config_props))
142156 if(config_link(link))
143157 return -1;
144158
159+ link->init_state = AVLINK_INIT;
160+ }
161+ }
162+
145163 return 0;
146164 }
147165

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