diff options
author | Vitor Sessak <vitor1001@gmail.com> | 2008-02-15 21:39:19 +0000 |
---|---|---|
committer | Vitor Sessak <vitor1001@gmail.com> | 2008-02-15 21:39:19 +0000 |
commit | 52362e9dc1e098441be5df837aa547fa31c1263e (patch) | |
tree | 2504472f7e005b4c7af4b68e4622dded7c39fb74 /libavfilter/avfilter.c | |
parent | 4ea0ab3c39331f5fb059a22b143a4142b79798f7 (diff) | |
download | ffmpeg-52362e9dc1e098441be5df837aa547fa31c1263e.tar.gz |
Make filter auto-insertion code its own function.
Commited in SoC by Bobby Bingham on 2007-11-04 22:03:14
Originally committed as revision 12026 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavfilter/avfilter.c')
-rw-r--r-- | libavfilter/avfilter.c | 30 |
1 files changed, 22 insertions, 8 deletions
diff --git a/libavfilter/avfilter.c b/libavfilter/avfilter.c index 216a5fb109..f82e9145d5 100644 --- a/libavfilter/avfilter.c +++ b/libavfilter/avfilter.c @@ -108,6 +108,27 @@ static int common_format(int *fmts0, int *fmts1) return -1; } +int avfilter_insert_filter(AVFilterLink *link, AVFilterContext *filt, + unsigned in, unsigned out) +{ + av_log(NULL, AV_LOG_INFO, "auto-inserting filter '%s'\n", + filt->filter->name); + + link->dst->inputs[link->dstpad] = NULL; + if(avfilter_link(filt, out, link->dst, link->dstpad)) { + /* failed to link output filter to new filter */ + link->dst->inputs[link->dstpad] = link; + return -1; + } + + /* re-hookup the link to the new destination filter we inserted */ + link->dst = filt; + link->dstpad = in; + filt->inputs[in] = link; + + return 0; +} + int avfilter_config_link(AVFilterLink *link) { int *fmts[3] = {NULL,NULL,NULL}; @@ -133,16 +154,9 @@ int avfilter_config_link(AVFilterLink *link) avfilter_destroy(scale); goto format_done; } - - link->dst->inputs[link->dstpad] = NULL; - if(avfilter_link(scale, 0, link->dst, link->dstpad)) { - link->dst->inputs[link->dstpad] = link; + if(avfilter_insert_filter(link, scale, 0, 0)) goto format_done; - } link2 = scale->outputs[0]; - link->dst = scale; - link->dstpad = 0; - scale->inputs[0] = link; /* now try again to find working colorspaces. * XXX: is it safe to assume that the scale filter always supports the |