Browse Source

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
tags/v0.5
Vitor Sessak 18 years ago
parent
commit
698181056d
1 changed files with 23 additions and 5 deletions
  1. +23
    -5
      libavfilter/avfilter.c

+ 23
- 5
libavfilter/avfilter.c View File

@@ -125,23 +125,41 @@ int avfilter_insert_filter(AVFilterLink *link, AVFilterContext *filt,
return 0;
}

int avfilter_config_link(AVFilterLink *link)
int avfilter_config_links(AVFilterContext *filter)
{
int (*config_link)(AVFilterLink *);
unsigned i;

if(!link)
return 0;
for(i = 0; i < filter->input_count; i ++) {
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))
config_link = avfilter_default_config_output_link;
if(config_link(link))
return -1;

if(!(config_link = link_dpad(link).config_props))
config_link = avfilter_default_config_input_link;
if((config_link = link_dpad(link).config_props))
if(config_link(link))
return -1;

link->init_state = AVLINK_INIT;
}
}

return 0;
}



Loading…
Cancel
Save