summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVitor Sessak <vitor1001@gmail.com>2008-04-04 20:08:40 +0000
committerVitor Sessak <vitor1001@gmail.com>2008-04-04 20:08:40 +0000
commit45a09319b2d780bd206701bed13cc8993ce76228 (patch)
tree6c1d21b2059645efa8750ce743da4eece21a0391
parentb6be4acc1fbe78bf3708487465a7211bb1cfb280 (diff)
Split graph_load_from_dest() to have a version independent of avfilter_vf_graph
Commited in SoC by Vitor Sessak on 2008-03-24 19:19:38 Originally committed as revision 12731 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r--libavfilter/avfiltergraph.c62
-rw-r--r--libavfilter/avfiltergraph.h5
2 files changed, 65 insertions, 2 deletions
diff --git a/libavfilter/avfiltergraph.c b/libavfilter/avfiltergraph.c
index aea6c693af..f92ccf3557 100644
--- a/libavfilter/avfiltergraph.c
+++ b/libavfilter/avfiltergraph.c
@@ -488,11 +488,10 @@ int avfilter_graph_config_formats(AVFilterContext *graphctx)
return 0;
}
-static int graph_load_from_desc(AVFilterContext *ctx, AVFilterGraphDesc *desc)
+static int graph_load_from_desc2(AVFilterContext *ctx, AVFilterGraphDesc *desc)
{
AVFilterGraphDescFilter *curfilt;
AVFilterGraphDescLink *curlink;
- AVFilterGraphDescExport *curpad;
AVFilterContext *filt, *filtb;
AVFilter *filterdef;
@@ -533,6 +532,22 @@ static int graph_load_from_desc(AVFilterContext *ctx, AVFilterGraphDesc *desc)
}
}
+ return 0;
+
+fail:
+ uninit(ctx);
+ return -1;
+}
+
+static int graph_load_from_desc(AVFilterContext *ctx, AVFilterGraphDesc *desc)
+{
+ AVFilterGraphDescExport *curpad;
+ char tmp[20];
+ AVFilterContext *filt;
+
+ if (graph_load_from_desc2(ctx, desc) < 0)
+ goto fail;
+
/* export all input pads */
for(curpad = desc->inputs; curpad; curpad = curpad->next) {
snprintf(tmp, 20, "%d", curpad->filter);
@@ -560,6 +575,49 @@ fail:
return -1;
}
+int graph_load_from_desc3(AVFilterContext *ctx, AVFilterGraphDesc *desc, AVFilterContext *in, int inpad, AVFilterContext *out, int outpad)
+{
+ AVFilterGraphDescExport *curpad;
+ char tmp[20];
+ AVFilterContext *filt;
+
+ if (graph_load_from_desc2(ctx, desc) < 0)
+ goto fail;
+
+ /* export all input pads */
+ for(curpad = desc->inputs; curpad; curpad = curpad->next) {
+ snprintf(tmp, 20, "%d", curpad->filter);
+ if(!(filt = avfilter_graph_get_filter(ctx, tmp))) {
+ av_log(ctx, AV_LOG_ERROR, "filter owning exported pad does not exist\n");
+ goto fail;
+ }
+ if(avfilter_link(in, inpad, filt, curpad->pad)) {
+ av_log(ctx, AV_LOG_ERROR, "cannot create link between source and destination filters\n");
+ goto fail;
+ }
+ }
+
+ /* export all output pads */
+ for(curpad = desc->outputs; curpad; curpad = curpad->next) {
+ snprintf(tmp, 20, "%d", curpad->filter);
+ if(!(filt = avfilter_graph_get_filter(ctx, tmp))) {
+ av_log(ctx, AV_LOG_ERROR, "filter owning exported pad does not exist\n");
+ goto fail;
+ }
+
+ if(avfilter_link(filt, curpad->pad, out, outpad)) {
+ av_log(ctx, AV_LOG_ERROR, "cannot create link between source and destination filters\n");
+ goto fail;
+ }
+ }
+
+ return 0;
+
+fail:
+ uninit(ctx);
+ return -1;
+}
+
static int init(AVFilterContext *ctx, const char *args, void *opaque)
{
GraphContext *gctx = ctx->priv;
diff --git a/libavfilter/avfiltergraph.h b/libavfilter/avfiltergraph.h
index 5fc60dcef1..185ef31cfd 100644
--- a/libavfilter/avfiltergraph.h
+++ b/libavfilter/avfiltergraph.h
@@ -119,4 +119,9 @@ int avfilter_graph_config_formats(AVFilterContext *graphctx);
*/
int avfilter_graph_config_links(AVFilterContext *graphctx);
+
+int graph_load_from_desc3(AVFilterContext *ctx, AVFilterGraphDesc *desc,
+ AVFilterContext *in, int inpad,
+ AVFilterContext *out, int outpad);
+
#endif /* FFMPEG_AVFILTERGRAPH_H */