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
125 return 0;125 return 0;
126}126}
127 127
128int avfilter_config_link(AVFilterLink *link)128int avfilter_config_links(AVFilterContext *filter)
129{129{
130 int (*config_link)(AVFilterLink *);130 int (*config_link)(AVFilterLink *);
131 unsigned i;
131 132
132 if(!link)133 for(i = 0; i < filter->input_count; i ++) {
133 return 0;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;
134 149
135 if(!(config_link = link_spad(link).config_props))150 if(!(config_link = link_spad(link).config_props))
136 config_link = avfilter_default_config_output_link;151 config_link = avfilter_default_config_output_link;
137 if(config_link(link))152 if(config_link(link))
138 return -1;153 return -1;
139 154
140 if(!(config_link = link_dpad(link).config_props))155 if((config_link = link_dpad(link).config_props))
141 config_link = avfilter_default_config_input_link;
142 if(config_link(link))156 if(config_link(link))
143 return -1;157 return -1;
144 158
159 link->init_state = AVLINK_INIT;
160 }
161 }
162
145 return 0;163 return 0;
146}164}
147 165

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