This breaks libavfilter ABI.
Showing the changes to libavfilter/avfiltergraph.c (1 of 6 files). Show all
Unified · Split
| @@ -591,12 +591,52 @@ static int graph_config_formats(AVFilterGraph *graph, AVClass *log_ctx) · 590 unmodified lines | ||
| 591 | 591 | return 0; |
| 592 | 592 | } |
| 593 | 593 | |
| 594 | +static int graph_insert_fifos(AVFilterGraph *graph, AVClass *log_ctx) | |
| 595 | +{ | |
| 596 | + AVFilterContext *f; | |
| 597 | + int i, j, ret; | |
| 598 | + int fifo_count = 0; | |
| 599 | + | |
| 600 | + for (i = 0; i < graph->filter_count; i++) { | |
| 601 | + f = graph->filters[i]; | |
| 602 | + | |
| 603 | + for (j = 0; j < f->nb_inputs; j++) { | |
| 604 | + AVFilterLink *link = f->inputs[j]; | |
| 605 | + AVFilterContext *fifo_ctx; | |
| 606 | + AVFilter *fifo; | |
| 607 | + char name[32]; | |
| 608 | + | |
| 609 | + if (!link->dstpad->needs_fifo) | |
| 610 | + continue; | |
| 611 | + | |
| 612 | + fifo = f->inputs[j]->type == AVMEDIA_TYPE_VIDEO ? | |
| 613 | + avfilter_get_by_name("fifo") : | |
| 614 | + avfilter_get_by_name("afifo"); | |
| 615 | + | |
| 616 | + snprintf(name, sizeof(name), "auto-inserted fifo %d", fifo_count++); | |
| 617 | + | |
| 618 | + ret = avfilter_graph_create_filter(&fifo_ctx, fifo, name, NULL, | |
| 619 | + NULL, graph); | |
| 620 | + if (ret < 0) | |
| 621 | + return ret; | |
| 622 | + | |
| 623 | + ret = avfilter_insert_filter(link, fifo_ctx, 0, 0); | |
| 624 | + if (ret < 0) | |
| 625 | + return ret; | |
| 626 | + } | |
| 627 | + } | |
| 628 | + | |
| 629 | + return 0; | |
| 630 | +} | |
| 631 | + | |
| 594 | 632 | int avfilter_graph_config(AVFilterGraph *graphctx, void *log_ctx) |
| 595 | 633 | { |
| 596 | 634 | int ret; |
| 597 | 635 | |
| 598 | 636 | if ((ret = graph_check_validity(graphctx, log_ctx))) |
| 599 | 637 | return ret; |
| 638 | + if ((ret = graph_insert_fifos(graphctx, log_ctx)) < 0) | |
| 639 | + return ret; | |
| 600 | 640 | if ((ret = graph_config_formats(graphctx, log_ctx))) |
| 601 | 641 | return ret; |
| 602 | 642 | if ((ret = graph_config_links(graphctx, log_ctx))) |