History

Almost from scratch rewrite of filter parser.

Functional as is, but still work-in-progress in the sense that some things need to be fixed before sending it as a patch to SVN. Commited in SoC by Vitor Sessak on 2008-03-20 21:48:30 Originally committed as revision 12729 to svn://svn.ffmpeg.org/ffmpeg/trunk

Vitor Sessak committed 18 years ago

Commit 789210f1 parent 3ec394e2 files · +18 −84Browse files

Showing the changes to libavfilter/avfiltergraph.c (1 of 2 files). Show all

Unified · Split

libavfilter/avfiltergraph.c+14−80
@@ -463,9 +463,7 @@ static void pick_formats(GraphContext *graph) · 462 unmodified lines
463463 for(i = 0; i < graph->filter_count; i ++) {
464464 AVFilterContext *filter = graph->filters[i];
465465
466− if(filter->filter == &avfilter_vf_graph ||
467− filter->filter == &avfilter_vf_graphfile ||
468− filter->filter == &avfilter_vf_graphdesc)
466+ if(filter->filter == &avfilter_vf_graph)
469467 pick_formats(filter->priv);
470468
471469 for(j = 0; j < filter->input_count; j ++)
@@ -498,30 +496,34 @@ static int graph_load_from_desc(AVFilterContext *ctx, AVFilterGraphDesc *desc) · 26 unmodified lines
498496 AVFilterContext *filt, *filtb;
499497
500498 AVFilter *filterdef;
499+ char tmp[20];
501500
502501 /* create all filters */
503502 for(curfilt = desc->filters; curfilt; curfilt = curfilt->next) {
503+ snprintf(tmp, 20, "%d", curfilt->index);
504504 if(!(filterdef = avfilter_get_by_name(curfilt->filter)) ||
505− !(filt = avfilter_open(filterdef, curfilt->name))) {
505+ !(filt = avfilter_open(filterdef, tmp))) {
506506 av_log(ctx, AV_LOG_ERROR,
507− "error creating filter '%s'\n", curfilt->name);
507+ "error creating filter '%s'\n", curfilt->filter);
508508 goto fail;
509509 }
510510 avfilter_graph_add_filter(ctx, filt);
511511 if(avfilter_init_filter(filt, curfilt->args, NULL)) {
512512 av_log(ctx, AV_LOG_ERROR,
513− "error initializing filter '%s'\n", curfilt->name);
513+ "error initializing filter '%s'\n", curfilt->filter);
514514 goto fail;
515515 }
516516 }
517517
518518 /* create all links */
519519 for(curlink = desc->links; curlink; curlink = curlink->next) {
520− if(!(filt = avfilter_graph_get_filter(ctx, curlink->src))) {
520+ snprintf(tmp, 20, "%d", curlink->src);
521+ if(!(filt = avfilter_graph_get_filter(ctx, tmp))) {
521522 av_log(ctx, AV_LOG_ERROR, "link source does not exist in graph\n");
522523 goto fail;
523524 }
524− if(!(filtb = avfilter_graph_get_filter(ctx, curlink->dst))) {
525+ snprintf(tmp, 20, "%d", curlink->dst);
526+ if(!(filtb = avfilter_graph_get_filter(ctx, tmp))) {
525527 av_log(ctx, AV_LOG_ERROR, "link destination does not exist in graph\n");
526528 goto fail;
527529 }
@@ -533,7 +535,8 @@ static int graph_load_from_desc(AVFilterContext *ctx, AVFilterGraphDesc *desc) · 5 unmodified lines
533535
534536 /* export all input pads */
535537 for(curpad = desc->inputs; curpad; curpad = curpad->next) {
536− if(!(filt = avfilter_graph_get_filter(ctx, curpad->filter))) {
538+ snprintf(tmp, 20, "%d", curpad->filter);
539+ if(!(filt = avfilter_graph_get_filter(ctx, tmp))) {
537540 av_log(ctx, AV_LOG_ERROR, "filter owning exported pad does not exist\n");
538541 goto fail;
539542 }
@@ -542,7 +545,8 @@ static int graph_load_from_desc(AVFilterContext *ctx, AVFilterGraphDesc *desc) · 2 unmodified lines
542545
543546 /* export all output pads */
544547 for(curpad = desc->outputs; curpad; curpad = curpad->next) {
545− if(!(filt = avfilter_graph_get_filter(ctx, curpad->filter))) {
548+ snprintf(tmp, 20, "%d", curpad->filter);
549+ if(!(filt = avfilter_graph_get_filter(ctx, tmp))) {
546550 av_log(ctx, AV_LOG_ERROR, "filter owning exported pad does not exist\n");
547551 goto fail;
548552 }
@@ -603,73 +607,3 @@ AVFilter avfilter_vf_graph = · 54 unmodified lines
603607 .outputs = (AVFilterPad[]) {{ .name = NULL, }},
604608 };
605609
606−static int init_desc(AVFilterContext *ctx, const char *args, void *opaque)
607−{
608− GraphContext *gctx = ctx->priv;
609−
610− if(!opaque)
611− return -1;
612−
613− if(!(gctx->link_filter_in = avfilter_open(&vf_graph_dummy, NULL)))
614− return -1;
615− if(avfilter_init_filter(gctx->link_filter_in, NULL, ctx))
616− goto fail;
617− if(!(gctx->link_filter_out = avfilter_open(&vf_graph_dummy, NULL)))
618− goto fail;
619− if(avfilter_init_filter(gctx->link_filter_out, NULL, ctx))
620− goto fail;
621−
622− return graph_load_from_desc(ctx, opaque);
623−
624−fail:
625− avfilter_destroy(gctx->link_filter_in);
626− if(gctx->link_filter_out)
627− avfilter_destroy(gctx->link_filter_out);
628− return -1;
629−}
630−
631−AVFilter avfilter_vf_graphdesc =
632−{
633− .name = "graph_desc",
634−
635− .priv_size = sizeof(GraphContext),
636−
637− .init = init_desc,
638− .uninit = uninit,
639−
640− .query_formats = query_formats,
641−
642− .inputs = (AVFilterPad[]) {{ .name = NULL, }},
643− .outputs = (AVFilterPad[]) {{ .name = NULL, }},
644−};
645−
646−static int init_file(AVFilterContext *ctx, const char *args, void *opaque)
647−{
648− AVFilterGraphDesc *desc;
649− int ret;
650−
651− if(!args)
652− return -1;
653− if(!(desc = avfilter_graph_load_desc(args)))
654− return -1;
655−
656− ret = init_desc(ctx, NULL, desc);
657− avfilter_graph_free_desc(desc);
658− return ret;
659−}
660−
661−AVFilter avfilter_vf_graphfile =
662−{
663− .name = "graph_file",
664−
665− .priv_size = sizeof(GraphContext),
666−
667− .init = init_file,
668− .uninit = uninit,
669−
670− .query_formats = query_formats,
671−
672− .inputs = (AVFilterPad[]) {{ .name = NULL, }},
673− .outputs = (AVFilterPad[]) {{ .name = NULL, }},
674−};
675−

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t