diff options
author | Nicolas George <george@nsup.org> | 2017-11-01 21:15:00 +0100 |
---|---|---|
committer | Nicolas George <george@nsup.org> | 2017-11-02 10:42:16 +0100 |
commit | 345e7072ab867ee1e56cbf857dbc93d37f168294 (patch) | |
tree | 48100fa58addd5ab796570eff89ed20ec96a237a | |
parent | 5ab41a25ba9ce2b3a8b5d22930161042718d7f84 (diff) | |
download | ffmpeg-345e7072ab867ee1e56cbf857dbc93d37f168294.tar.gz |
lavfi: check links properties after configuring them.
For now, check the image size.
Inspired by a patch from Paul B Mahol.
Invalid sizes would be detected later by allocation failures,
detecting problems earlier is cleaner.
-rw-r--r-- | libavfilter/avfiltergraph.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/libavfilter/avfiltergraph.c b/libavfilter/avfiltergraph.c index 69cf26896d..a009e0a760 100644 --- a/libavfilter/avfiltergraph.c +++ b/libavfilter/avfiltergraph.c @@ -28,6 +28,7 @@ #include "libavutil/avstring.h" #include "libavutil/bprint.h" #include "libavutil/channel_layout.h" +#include "libavutil/imgutils.h" #include "libavutil/internal.h" #include "libavutil/opt.h" #include "libavutil/pixdesc.h" @@ -263,6 +264,27 @@ static int graph_config_links(AVFilterGraph *graph, AVClass *log_ctx) return 0; } +static int graph_check_links(AVFilterGraph *graph, AVClass *log_ctx) +{ + AVFilterContext *f; + AVFilterLink *l; + unsigned i, j; + int ret; + + for (i = 0; i < graph->nb_filters; i++) { + f = graph->filters[i]; + for (j = 0; j < f->nb_outputs; j++) { + l = f->outputs[j]; + if (l->type == AVMEDIA_TYPE_VIDEO) { + ret = av_image_check_size2(l->w, l->h, INT64_MAX, l->format, 0, f); + if (ret < 0) + return ret; + } + } + } + return 0; +} + AVFilterContext *avfilter_graph_get_filter(AVFilterGraph *graph, const char *name) { int i; @@ -1256,6 +1278,8 @@ int avfilter_graph_config(AVFilterGraph *graphctx, void *log_ctx) return ret; if ((ret = graph_config_links(graphctx, log_ctx))) return ret; + if ((ret = graph_check_links(graphctx, log_ctx))) + return ret; if ((ret = graph_config_pointers(graphctx, log_ctx))) return ret; |