Browse Source

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
tags/v0.5
Vitor Sessak 17 years ago
parent
commit
45a09319b2
2 changed files with 65 additions and 2 deletions
  1. +60
    -2
      libavfilter/avfiltergraph.c
  2. +5
    -0
      libavfilter/avfiltergraph.h

+ 60
- 2
libavfilter/avfiltergraph.c View File

@@ -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;


+ 5
- 0
libavfilter/avfiltergraph.h View File

@@ -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 */

Loading…
Cancel
Save