--- fftools/ffmpeg_mux_init.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/fftools/ffmpeg_mux_init.c b/fftools/ffmpeg_mux_init.c index 7a8c935795..3a327048bb 100644 --- a/fftools/ffmpeg_mux_init.c +++ b/fftools/ffmpeg_mux_init.c @@ -2342,7 +2342,7 @@ static int process_forced_keyframes(Muxer *mux, const OptionsContext *o) return 0; } -static void validate_enc_avopt(Muxer *mux, const AVDictionary *codec_avopt) +static int validate_enc_avopt(Muxer *mux, const AVDictionary *codec_avopt) { const AVClass *class = avcodec_get_class(); const AVClass *fclass = avformat_get_class(); @@ -2370,7 +2370,7 @@ static void validate_enc_avopt(Muxer *mux, const AVDictionary *codec_avopt) if (!(option->flags & AV_OPT_FLAG_ENCODING_PARAM)) { av_log(mux, AV_LOG_ERROR, "Codec AVOption %s (%s) is not an " "encoding option.\n", e->key, option->help ? option->help : ""); - exit_program(1); + return AVERROR(EINVAL); } // gop_timecode is injected by generic code but not always used @@ -2384,6 +2384,8 @@ static void validate_enc_avopt(Muxer *mux, const AVDictionary *codec_avopt) "any stream.\n", e->key, option->help ? option->help : ""); } av_dict_free(&unused_opts); + + return 0; } static int init_output_stream_nofilter(OutputStream *ost) @@ -2502,7 +2504,9 @@ int of_open(const OptionsContext *o, const char *filename) return err; /* check if all codec options have been used */ - validate_enc_avopt(mux, o->g->codec_opts); + err = validate_enc_avopt(mux, o->g->codec_opts); + if (err < 0) + return err; /* check filename in case of an image number is expected */ if (oc->oformat->flags & AVFMT_NEEDNUMBER && !av_filename_number_test(oc->url)) { -- 2.40.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".