From 58f472d10f09ee063cb856ce49c0cf95bc706a5c Mon Sep 17 00:00:00 2001 From: Vitor Sessak Date: Fri, 4 Apr 2008 20:08:59 +0000 Subject: [PATCH] Simplify graph_load_from_desc3() Commited in SoC by Vitor Sessak on 2008-03-26 20:37:43 Originally committed as revision 12737 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavfilter/avfiltergraph.c | 95 +++++++++++++++++++++---------------- 1 file changed, 54 insertions(+), 41 deletions(-) diff --git a/libavfilter/avfiltergraph.c b/libavfilter/avfiltergraph.c index 99e1b7051f..c2da4cfbf8 100644 --- a/libavfilter/avfiltergraph.c +++ b/libavfilter/avfiltergraph.c @@ -160,55 +160,54 @@ int avfilter_graph_config_formats(AVFilterGraph *graph) return 0; } -static int graph_load_from_desc2(AVFilterGraph *ctx, AVFilterGraphDesc *desc) +static int create_filter(AVFilterGraph *ctx, int index, char *name, + char *args) { - AVFilterGraphDescFilter *curfilt; - AVFilterGraphDescLink *curlink; - AVFilterContext *filt, *filtb; + AVFilterContext *filt; AVFilter *filterdef; char tmp[20]; - /* create all filters */ - for(curfilt = desc->filters; curfilt; curfilt = curfilt->next) { - snprintf(tmp, 20, "%d", curfilt->index); - if(!(filterdef = avfilter_get_by_name(curfilt->filter)) || - !(filt = avfilter_open(filterdef, tmp))) { - av_log(&log_ctx, AV_LOG_ERROR, - "error creating filter '%s'\n", curfilt->filter); - goto fail; - } - avfilter_graph_add_filter(ctx, filt); - if(avfilter_init_filter(filt, curfilt->args, NULL)) { - av_log(&log_ctx, AV_LOG_ERROR, - "error initializing filter '%s'\n", curfilt->filter); - goto fail; - } + snprintf(tmp, 20, "%d", index); + if(!(filterdef = avfilter_get_by_name(name)) || + !(filt = avfilter_open(filterdef, tmp))) { + av_log(&log_ctx, AV_LOG_ERROR, + "error creating filter '%s'\n", name); + return -1; } - - /* create all links */ - for(curlink = desc->links; curlink; curlink = curlink->next) { - snprintf(tmp, 20, "%d", curlink->src); - if(!(filt = avfilter_graph_get_filter(ctx, tmp))) { - av_log(&log_ctx, AV_LOG_ERROR, "link source does not exist in graph\n"); - goto fail; - } - snprintf(tmp, 20, "%d", curlink->dst); - if(!(filtb = avfilter_graph_get_filter(ctx, tmp))) { - av_log(&log_ctx, AV_LOG_ERROR, "link destination does not exist in graph\n"); - goto fail; - } - if(avfilter_link(filt, curlink->srcpad, filtb, curlink->dstpad)) { - av_log(&log_ctx, AV_LOG_ERROR, "cannot create link between source and destination filters\n"); - goto fail; - } + avfilter_graph_add_filter(ctx, filt); + if(avfilter_init_filter(filt, args, NULL)) { + av_log(&log_ctx, AV_LOG_ERROR, + "error initializing filter '%s'\n", name); + return -1; } return 0; +} -fail: - uninit(ctx); - return -1; +static int link_filter(AVFilterGraph *ctx, int src, int srcpad, + int dst, int dstpad) +{ + AVFilterContext *filt, *filtb; + + char tmp[20]; + + snprintf(tmp, 20, "%d", src); + if(!(filt = avfilter_graph_get_filter(ctx, tmp))) { + av_log(&log_ctx, AV_LOG_ERROR, "link source does not exist in graph\n"); + return -1; + } + snprintf(tmp, 20, "%d", dst); + if(!(filtb = avfilter_graph_get_filter(ctx, tmp))) { + av_log(&log_ctx, AV_LOG_ERROR, "link destination does not exist in graph\n"); + return -1; + } + if(avfilter_link(filt, srcpad, filtb, dstpad)) { + av_log(&log_ctx, AV_LOG_ERROR, "cannot create link between source and destination filters\n"); + return -1; + } + + return 0; } int graph_load_from_desc3(AVFilterGraph *graph, AVFilterGraphDesc *desc, AVFilterContext *in, int inpad, AVFilterContext *out, int outpad) @@ -216,9 +215,23 @@ int graph_load_from_desc3(AVFilterGraph *graph, AVFilterGraphDesc *desc, AVFilte AVFilterGraphDescExport *curpad; char tmp[20]; AVFilterContext *filt; + AVFilterGraphDescFilter *curfilt; + AVFilterGraphDescLink *curlink; - if (graph_load_from_desc2(graph, desc) < 0) - goto fail; + + /* create all filters */ + for(curfilt = desc->filters; curfilt; curfilt = curfilt->next) { + if (create_filter(graph, curfilt->index, curfilt->filter, + curfilt->args) < 0) + goto fail; + } + + /* create all links */ + for(curlink = desc->links; curlink; curlink = curlink->next) { + if (link_filter(graph, curlink->src, curlink->srcpad, + curlink->dst, curlink->dstpad) < 0) + goto fail; + } /* export all input pads */ for(curpad = desc->inputs; curpad; curpad = curpad->next) {