diff --git a/cmdutils.c b/cmdutils.c index 1c2f44ef3c2d6610229ddadb59135c6cdfa2e263..a436031d3fd087105b548cbc2a2186c21f21e940 100644 --- a/cmdutils.c +++ b/cmdutils.c @@ -61,7 +61,8 @@ static const OptionDef* find_option(const OptionDef *po, const char *name){ return po; } -void parse_options(int argc, char **argv, const OptionDef *options) +void parse_options(int argc, char **argv, const OptionDef *options, + void (* parse_arg_function)(const char*)) { const char *opt, *arg; int optindex, handleoptions=1; @@ -112,7 +113,8 @@ unknown_opt: po->u.func_arg(arg); } } else { - parse_arg_file(opt); + if (parse_arg_function) + parse_arg_function(opt); } } } diff --git a/cmdutils.h b/cmdutils.h index 13a61c09df96eea556810114f9ac5ab3412a5453..eb94058888ec066ae2025ee7dbebfa9bfb2412b3 100644 --- a/cmdutils.h +++ b/cmdutils.h @@ -50,8 +50,18 @@ typedef struct { } OptionDef; void show_help_options(const OptionDef *options, const char *msg, int mask, int value); -void parse_options(int argc, char **argv, const OptionDef *options); -void parse_arg_file(const char *filename); + +/** + * Parses the command line arguments. + * @param options Array with the definitions required to interpret every + * option of the form: -<option_name> [<argument>] + * @param parse_arg_function Name of the function called to process every + * argument without a leading option name flag. NULL if such arguments do + * not have to be processed. + */ +void parse_options(int argc, char **argv, const OptionDef *options, + void (* parse_arg_function)(const char*)); + void print_error(const char *filename, int err); #endif /* _CMD_UTILS_H */ diff --git a/ffmpeg.c b/ffmpeg.c index 33c49fafd2530765486d849ae6b81677ae883f3b..6c8751a8f7c49837498547f3b3fadba6bb3df2f9 100644 --- a/ffmpeg.c +++ b/ffmpeg.c @@ -3806,11 +3806,6 @@ static void show_help(void) av_opt_show(sws_opts, NULL); } -void parse_arg_file(const char *filename) -{ - opt_output_file(filename); -} - int main(int argc, char **argv) { int i; @@ -3831,7 +3826,7 @@ int main(int argc, char **argv) } /* parse options */ - parse_options(argc, argv, options); + parse_options(argc, argv, options, opt_output_file); /* file converter / grab */ if (nb_output_files <= 0) { diff --git a/ffplay.c b/ffplay.c index 5d0ff1c7bfa16d2d2b66c4779e88353c7b01afc7..57dcf2f6e5d36c008bc053d5d2ebe1e1aec25fd1 100644 --- a/ffplay.c +++ b/ffplay.c @@ -2530,7 +2530,7 @@ int main(int argc, char **argv) /* register all codecs, demux and protocols */ av_register_all(); - parse_options(argc, argv, options); + parse_options(argc, argv, options, parse_arg_file); if (!input_filename) { show_help();