diff options
author | Stefano Sabatini <stefasab@gmail.com> | 2013-11-04 10:02:27 +0100 |
---|---|---|
committer | Stefano Sabatini <stefasab@gmail.com> | 2013-11-09 19:05:34 +0100 |
commit | 0f8bdfe3e807276d2a6f1799a7cc111cf78434bd (patch) | |
tree | e68bb715a962a7043d444ff1bea0c819bdeb2bc3 /ffmpeg_opt.c | |
parent | ef8f293472851e77800bc6bd8004d7b27ec4a2bf (diff) | |
download | ffmpeg-0f8bdfe3e807276d2a6f1799a7cc111cf78434bd.tar.gz |
ffmpeg: store value of -filter and -filter_script per-stream option in OutputStream struct
Avoid the need for multiple potentially inconsistent access operations,
slightly factorize code.
Diffstat (limited to 'ffmpeg_opt.c')
-rw-r--r-- | ffmpeg_opt.c | 41 |
1 files changed, 17 insertions, 24 deletions
diff --git a/ffmpeg_opt.c b/ffmpeg_opt.c index 36e4845368..9b3d41b64b 100644 --- a/ffmpeg_opt.c +++ b/ffmpeg_opt.c @@ -1151,21 +1151,17 @@ static char *get_ost_filters(OptionsContext *o, AVFormatContext *oc, OutputStream *ost) { AVStream *st = ost->st; - char *filter = NULL, *filter_script = NULL; - MATCH_PER_STREAM_OPT(filter_scripts, str, filter_script, oc, st); - MATCH_PER_STREAM_OPT(filters, str, filter, oc, st); - - if (filter_script && filter) { + if (ost->filters_script && ost->filters) { av_log(NULL, AV_LOG_ERROR, "Both -filter and -filter_script set for " "output stream #%d:%d.\n", nb_output_files, st->index); exit_program(1); } - if (filter_script) - return read_file(filter_script); - else if (filter) - return av_strdup(filter); + if (ost->filters_script) + return read_file(ost->filters_script); + else if (ost->filters) + return av_strdup(ost->filters); return av_strdup(st->codec->codec_type == AVMEDIA_TYPE_VIDEO ? "null" : "anull"); @@ -1174,16 +1170,13 @@ static char *get_ost_filters(OptionsContext *o, AVFormatContext *oc, static void check_streamcopy_filters(OptionsContext *o, AVFormatContext *oc, const OutputStream *ost, enum AVMediaType type) { - char *filter_script = NULL, *filter = NULL; - MATCH_PER_STREAM_OPT(filter_scripts, str, filter_script, oc, ost->st); - MATCH_PER_STREAM_OPT(filters, str, filter, oc, ost->st); - if (filter_script || filter) { + if (ost->filters_script || ost->filters) { av_log(NULL, AV_LOG_ERROR, "Filtergraph '%s' or filter_script '%s' was defined for %s output stream " "%d:%d but codec copy was selected.\n" "Filtering and streamcopy cannot be used together.\n", - (char *)av_x_if_null(filter, "(none)"), - (char *)av_x_if_null(filter_script, "(none)"), + (char *)av_x_if_null(ost->filters, "(none)"), + (char *)av_x_if_null(ost->filters_script, "(none)"), av_get_media_type_string(type), ost->file_index, ost->index); exit_program(1); @@ -1218,6 +1211,9 @@ static OutputStream *new_video_stream(OptionsContext *o, AVFormatContext *oc, in ost->frame_aspect_ratio = q; } + MATCH_PER_STREAM_OPT(filter_scripts, str, ost->filters_script, oc, st); + MATCH_PER_STREAM_OPT(filters, str, ost->filters, oc, st); + if (!ost->stream_copy) { const char *p = NULL; char *frame_size = NULL; @@ -1349,6 +1345,9 @@ static OutputStream *new_audio_stream(OptionsContext *o, AVFormatContext *oc, in audio_enc = st->codec; audio_enc->codec_type = AVMEDIA_TYPE_AUDIO; + MATCH_PER_STREAM_OPT(filter_scripts, str, ost->filters_script, oc, st); + MATCH_PER_STREAM_OPT(filters, str, ost->filters, oc, st); + if (!ost->stream_copy) { char *sample_fmt = NULL; @@ -1573,21 +1572,15 @@ static void init_output_filter(OutputFilter *ofilter, OptionsContext *o, exit_program(1); } - if (ost->avfilter) { - char *filter_script = NULL, *filter = NULL; - MATCH_PER_STREAM_OPT(filter_scripts, str, filter_script, oc, ost->st); - MATCH_PER_STREAM_OPT(filters, str, filter, oc, ost->st); - - if (filter || filter_script) { + if (ost->avfilter && (ost->filters || ost->filters_script)) { av_log(NULL, AV_LOG_ERROR, "Filter graph '%s' or filter script '%s' was specified through the -filter/-filter_script/-vf/-af option " "for output stream %d:%d, which is fed from a complex filtergraph.\n" "-filter/-filter_script and -filter_complex cannot be used together for the same stream.\n", - (char *)av_x_if_null(filter, "(none)"), - (char *)av_x_if_null(filter_script, "(none)"), + (char *)av_x_if_null(ost->filters, "(none)"), + (char *)av_x_if_null(ost->filters_script, "(none)"), ost->file_index, ost->index); exit_program(1); - } } if (configure_output_filter(ofilter->graph, ofilter, ofilter->out_tmp) < 0) { |