From 974ee16d6a71c31d0b5db4f139a40831c2f45776 Mon Sep 17 00:00:00 2001 From: wm4 Date: Fri, 5 May 2017 00:15:15 +0200 Subject: [PATCH] ffmpeg: check for unconnected outputs Fixes e.g.: ffmpeg -f lavfi -i testsrc -f lavfi -i testsrc -filter_complex "[0:v][1:v]psnr[out]" -f null none --- ffmpeg.h | 1 + ffmpeg_filter.c | 15 +++++++++++++++ ffmpeg_opt.c | 2 ++ 3 files changed, 18 insertions(+) diff --git a/ffmpeg.h b/ffmpeg.h index 4d0456c1fb..d34561275a 100644 --- a/ffmpeg.h +++ b/ffmpeg.h @@ -638,6 +638,7 @@ void choose_sample_fmt(AVStream *st, AVCodec *codec); int configure_filtergraph(FilterGraph *fg); int configure_output_filter(FilterGraph *fg, OutputFilter *ofilter, AVFilterInOut *out); +void check_filter_outputs(void); int ist_in_filtergraph(FilterGraph *fg, InputStream *ist); int filtergraph_is_simple(FilterGraph *fg); int init_simple_filtergraph(InputStream *ist, OutputStream *ost); diff --git a/ffmpeg_filter.c b/ffmpeg_filter.c index 896161a869..817f48f473 100644 --- a/ffmpeg_filter.c +++ b/ffmpeg_filter.c @@ -678,6 +678,21 @@ int configure_output_filter(FilterGraph *fg, OutputFilter *ofilter, AVFilterInOu } } +void check_filter_outputs(void) +{ + int i; + for (i = 0; i < nb_filtergraphs; i++) { + int n; + for (n = 0; n < filtergraphs[i]->nb_outputs; n++) { + OutputFilter *output = filtergraphs[i]->outputs[n]; + if (!output->ost) { + av_log(NULL, AV_LOG_FATAL, "Filter %s has an unconnected output\n", output->name); + exit_program(1); + } + } + } +} + static int sub2video_prepare(InputStream *ist, InputFilter *ifilter) { AVFormatContext *avf = input_files[ist->file_index]->ctx; diff --git a/ffmpeg_opt.c b/ffmpeg_opt.c index d1fe8742ff..e73a61059f 100644 --- a/ffmpeg_opt.c +++ b/ffmpeg_opt.c @@ -3260,6 +3260,8 @@ int ffmpeg_parse_options(int argc, char **argv) goto fail; } + check_filter_outputs(); + fail: uninit_parse_context(&octx); if (ret < 0) {