aboutsummaryrefslogtreecommitdiffstats
path: root/fftools/ffmpeg_filter.c
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2023-07-13 15:11:07 +0200
committerAnton Khirnov <anton@khirnov.net>2023-07-20 20:30:13 +0200
commita52ee1aa47b5a4a489ec0c34f7bc752a95dbae04 (patch)
tree0defe37dea635c5b649c4e24fb4b9470c06af085 /fftools/ffmpeg_filter.c
parentab16e324eae9f0eded14f8486fe44ad97ef613c8 (diff)
downloadffmpeg-a52ee1aa47b5a4a489ec0c34f7bc752a95dbae04.tar.gz
fftools/ffmpeg_filter: return error codes from init_input_filter() instead of aborting
Diffstat (limited to 'fftools/ffmpeg_filter.c')
-rw-r--r--fftools/ffmpeg_filter.c21
1 files changed, 13 insertions, 8 deletions
diff --git a/fftools/ffmpeg_filter.c b/fftools/ffmpeg_filter.c
index cdf5610620..79e034d248 100644
--- a/fftools/ffmpeg_filter.c
+++ b/fftools/ffmpeg_filter.c
@@ -908,7 +908,7 @@ int init_simple_filtergraph(InputStream *ist, OutputStream *ost,
return 0;
}
-static void init_input_filter(FilterGraph *fg, InputFilter *ifilter)
+static int init_input_filter(FilterGraph *fg, InputFilter *ifilter)
{
FilterGraphPriv *fgp = fgp_from_fg(fg);
InputFilterPriv *ifp = ifp_from_ifilter(ifilter);
@@ -920,7 +920,7 @@ static void init_input_filter(FilterGraph *fg, InputFilter *ifilter)
if (type != AVMEDIA_TYPE_VIDEO && type != AVMEDIA_TYPE_AUDIO) {
av_log(fg, AV_LOG_FATAL, "Only video and audio filters supported "
"currently.\n");
- exit_program(1);
+ return AVERROR(ENOSYS);
}
if (ifp->linklabel) {
@@ -932,7 +932,7 @@ static void init_input_filter(FilterGraph *fg, InputFilter *ifilter)
if (file_idx < 0 || file_idx >= nb_input_files) {
av_log(fg, AV_LOG_FATAL, "Invalid file index %d in filtergraph description %s.\n",
file_idx, fgp->graph_desc);
- exit_program(1);
+ return AVERROR(EINVAL);
}
s = input_files[file_idx]->ctx;
@@ -950,7 +950,7 @@ static void init_input_filter(FilterGraph *fg, InputFilter *ifilter)
if (!st) {
av_log(fg, AV_LOG_FATAL, "Stream specifier '%s' in filtergraph description %s "
"matches no streams.\n", p, fgp->graph_desc);
- exit_program(1);
+ return AVERROR(EINVAL);
}
ist = input_files[file_idx]->streams[st->index];
} else {
@@ -958,7 +958,7 @@ static void init_input_filter(FilterGraph *fg, InputFilter *ifilter)
if (!ist) {
av_log(fg, AV_LOG_FATAL, "Cannot find a matching stream for "
"unlabeled input pad %s\n", ifilter->name);
- exit_program(1);
+ return AVERROR(EINVAL);
}
}
av_assert0(ist);
@@ -968,15 +968,20 @@ static void init_input_filter(FilterGraph *fg, InputFilter *ifilter)
av_log(fg, AV_LOG_ERROR,
"Error binding an input stream to complex filtergraph input %s.\n",
ifilter->name);
- exit_program(1);
+ return ret;
}
+
+ return 0;
}
int init_complex_filtergraph(FilterGraph *fg)
{
// bind filtergraph inputs to input streams
- for (int i = 0; i < fg->nb_inputs; i++)
- init_input_filter(fg, fg->inputs[i]);
+ for (int i = 0; i < fg->nb_inputs; i++) {
+ int ret = init_input_filter(fg, fg->inputs[i]);
+ if (ret < 0)
+ return ret;
+ }
return 0;
}