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
This commit is contained in:
parent
c35a047373
commit
698181056d
@ -125,23 +125,41 @@ int avfilter_insert_filter(AVFilterLink *link, AVFilterContext *filt,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int avfilter_config_link(AVFilterLink *link)
|
int avfilter_config_links(AVFilterContext *filter)
|
||||||
{
|
{
|
||||||
int (*config_link)(AVFilterLink *);
|
int (*config_link)(AVFilterLink *);
|
||||||
|
unsigned i;
|
||||||
|
|
||||||
if(!link)
|
for(i = 0; i < filter->input_count; i ++) {
|
||||||
return 0;
|
AVFilterLink *link;
|
||||||
|
|
||||||
|
if(!(link = filter->inputs[i])) continue;
|
||||||
|
|
||||||
|
switch(link->init_state) {
|
||||||
|
case AVLINK_INIT:
|
||||||
|
continue;
|
||||||
|
case AVLINK_STARTINIT:
|
||||||
|
av_log(filter, AV_LOG_ERROR, "circular filter chain detected\n");
|
||||||
|
return -1;
|
||||||
|
case AVLINK_UNINIT:
|
||||||
|
link->init_state = AVLINK_STARTINIT;
|
||||||
|
|
||||||
|
if(avfilter_config_links(link->src))
|
||||||
|
return -1;
|
||||||
|
|
||||||
if(!(config_link = link_spad(link).config_props))
|
if(!(config_link = link_spad(link).config_props))
|
||||||
config_link = avfilter_default_config_output_link;
|
config_link = avfilter_default_config_output_link;
|
||||||
if(config_link(link))
|
if(config_link(link))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if(!(config_link = link_dpad(link).config_props))
|
if((config_link = link_dpad(link).config_props))
|
||||||
config_link = avfilter_default_config_input_link;
|
|
||||||
if(config_link(link))
|
if(config_link(link))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
link->init_state = AVLINK_INIT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user