summaryrefslogtreecommitdiff
path: root/libavfilter
diff options
context:
space:
mode:
authorNicolas George <george@nsup.org>2017-11-01 21:15:00 +0100
committerNicolas George <george@nsup.org>2017-11-02 10:42:16 +0100
commit345e7072ab867ee1e56cbf857dbc93d37f168294 (patch)
tree48100fa58addd5ab796570eff89ed20ec96a237a /libavfilter
parent5ab41a25ba9ce2b3a8b5d22930161042718d7f84 (diff)
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.
Diffstat (limited to 'libavfilter')
-rw-r--r--libavfilter/avfiltergraph.c24
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;