All option parsing functions now match the function pointer signature through which they are called (int f(const char *, const char *), thereby working reliably on all platforms. Prefix all option processing functions with opt_tags/n0.9
| @@ -574,12 +574,13 @@ void show_banner(void) | |||
| print_all_libs_info(stderr, INDENT|SHOW_VERSION); | |||
| } | |||
| void show_version(void) { | |||
| int opt_version(const char *opt, const char *arg) { | |||
| printf("%s " FFMPEG_VERSION "\n", program_name); | |||
| print_all_libs_info(stdout, SHOW_VERSION); | |||
| return 0; | |||
| } | |||
| void show_license(void) | |||
| int opt_license(const char *opt, const char *arg) | |||
| { | |||
| printf( | |||
| #if CONFIG_NONFREE | |||
| @@ -646,9 +647,10 @@ void show_license(void) | |||
| program_name, program_name, program_name | |||
| #endif | |||
| ); | |||
| return 0; | |||
| } | |||
| void show_formats(void) | |||
| int opt_formats(const char *opt, const char *arg) | |||
| { | |||
| AVInputFormat *ifmt=NULL; | |||
| AVOutputFormat *ofmt=NULL; | |||
| @@ -695,9 +697,10 @@ void show_formats(void) | |||
| name, | |||
| long_name ? long_name:" "); | |||
| } | |||
| return 0; | |||
| } | |||
| void show_codecs(void) | |||
| int opt_codecs(const char *opt, const char *arg) | |||
| { | |||
| AVCodec *p=NULL, *p2; | |||
| const char *last_name; | |||
| @@ -771,9 +774,10 @@ void show_codecs(void) | |||
| "even though both encoding and decoding are supported. For example, the h263\n" | |||
| "decoder corresponds to the h263 and h263p encoders, for file formats it is even\n" | |||
| "worse.\n"); | |||
| return 0; | |||
| } | |||
| void show_bsfs(void) | |||
| int opt_bsfs(const char *opt, const char *arg) | |||
| { | |||
| AVBitStreamFilter *bsf=NULL; | |||
| @@ -781,9 +785,10 @@ void show_bsfs(void) | |||
| while((bsf = av_bitstream_filter_next(bsf))) | |||
| printf("%s\n", bsf->name); | |||
| printf("\n"); | |||
| return 0; | |||
| } | |||
| void show_protocols(void) | |||
| int opt_protocols(const char *opt, const char *arg) | |||
| { | |||
| URLProtocol *up=NULL; | |||
| @@ -799,9 +804,10 @@ void show_protocols(void) | |||
| up->url_write ? 'O' : '.', | |||
| up->url_seek ? 'S' : '.', | |||
| up->name); | |||
| return 0; | |||
| } | |||
| void show_filters(void) | |||
| int opt_filters(const char *opt, const char *arg) | |||
| { | |||
| AVFilter av_unused(**filter) = NULL; | |||
| @@ -810,9 +816,10 @@ void show_filters(void) | |||
| while ((filter = av_filter_next(filter)) && *filter) | |||
| printf("%-16s %s\n", (*filter)->name, (*filter)->description); | |||
| #endif | |||
| return 0; | |||
| } | |||
| void show_pix_fmts(void) | |||
| int opt_pix_fmts(const char *opt, const char *arg) | |||
| { | |||
| enum PixelFormat pix_fmt; | |||
| @@ -843,6 +850,7 @@ void show_pix_fmts(void) | |||
| pix_desc->nb_components, | |||
| av_get_bits_per_pixel(pix_desc)); | |||
| } | |||
| return 0; | |||
| } | |||
| int read_yesno(void) | |||
| @@ -62,7 +62,7 @@ void uninit_opts(void); | |||
| /** | |||
| * Trivial log callback. | |||
| * Only suitable for show_help and similar since it lacks prefix handling. | |||
| * Only suitable for opt_help and similar since it lacks prefix handling. | |||
| */ | |||
| void log_callback_help(void* ptr, int level, const char* fmt, va_list vl); | |||
| @@ -177,50 +177,58 @@ void show_banner(void); | |||
| * Print the version of the program to stdout. The version message | |||
| * depends on the current versions of the repository and of the libav* | |||
| * libraries. | |||
| * This option processing function does not utilize the arguments. | |||
| */ | |||
| void show_version(void); | |||
| int opt_version(const char *opt, const char *arg); | |||
| /** | |||
| * Print the license of the program to stdout. The license depends on | |||
| * the license of the libraries compiled into the program. | |||
| * This option processing function does not utilize the arguments. | |||
| */ | |||
| void show_license(void); | |||
| int opt_license(const char *opt, const char *arg); | |||
| /** | |||
| * Print a listing containing all the formats supported by the | |||
| * program. | |||
| * This option processing function does not utilize the arguments. | |||
| */ | |||
| void show_formats(void); | |||
| int opt_formats(const char *opt, const char *arg); | |||
| /** | |||
| * Print a listing containing all the codecs supported by the | |||
| * program. | |||
| * This option processing function does not utilize the arguments. | |||
| */ | |||
| void show_codecs(void); | |||
| int opt_codecs(const char *opt, const char *arg); | |||
| /** | |||
| * Print a listing containing all the filters supported by the | |||
| * program. | |||
| * This option processing function does not utilize the arguments. | |||
| */ | |||
| void show_filters(void); | |||
| int opt_filters(const char *opt, const char *arg); | |||
| /** | |||
| * Print a listing containing all the bit stream filters supported by the | |||
| * program. | |||
| * This option processing function does not utilize the arguments. | |||
| */ | |||
| void show_bsfs(void); | |||
| int opt_bsfs(const char *opt, const char *arg); | |||
| /** | |||
| * Print a listing containing all the protocols supported by the | |||
| * program. | |||
| * This option processing function does not utilize the arguments. | |||
| */ | |||
| void show_protocols(void); | |||
| int opt_protocols(const char *opt, const char *arg); | |||
| /** | |||
| * Print a listing containing all the pixel formats supported by the | |||
| * program. | |||
| * This option processing function does not utilize the arguments. | |||
| */ | |||
| void show_pix_fmts(void); | |||
| int opt_pix_fmts(const char *opt, const char *arg); | |||
| /** | |||
| * Return a positive value if a line read from standard input | |||
| @@ -1,13 +1,13 @@ | |||
| { "L", OPT_EXIT, {(void*)show_license}, "show license" }, | |||
| { "h", OPT_EXIT, {(void*)show_help}, "show help" }, | |||
| { "?", OPT_EXIT, {(void*)show_help}, "show help" }, | |||
| { "help", OPT_EXIT, {(void*)show_help}, "show help" }, | |||
| { "-help", OPT_EXIT, {(void*)show_help}, "show help" }, | |||
| { "version", OPT_EXIT, {(void*)show_version}, "show version" }, | |||
| { "formats" , OPT_EXIT, {(void*)show_formats }, "show available formats" }, | |||
| { "codecs" , OPT_EXIT, {(void*)show_codecs }, "show available codecs" }, | |||
| { "bsfs" , OPT_EXIT, {(void*)show_bsfs }, "show available bit stream filters" }, | |||
| { "protocols", OPT_EXIT, {(void*)show_protocols}, "show available protocols" }, | |||
| { "filters", OPT_EXIT, {(void*)show_filters }, "show available filters" }, | |||
| { "pix_fmts" , OPT_EXIT, {(void*)show_pix_fmts }, "show available pixel formats" }, | |||
| { "L", OPT_EXIT, {(void*)opt_license}, "show license" }, | |||
| { "h", OPT_EXIT, {(void*)opt_help}, "show help" }, | |||
| { "?", OPT_EXIT, {(void*)opt_help}, "show help" }, | |||
| { "help", OPT_EXIT, {(void*)opt_help}, "show help" }, | |||
| { "-help", OPT_EXIT, {(void*)opt_help}, "show help" }, | |||
| { "version", OPT_EXIT, {(void*)opt_version}, "show version" }, | |||
| { "formats" , OPT_EXIT, {(void*)opt_formats }, "show available formats" }, | |||
| { "codecs" , OPT_EXIT, {(void*)opt_codecs }, "show available codecs" }, | |||
| { "bsfs" , OPT_EXIT, {(void*)opt_bsfs }, "show available bit stream filters" }, | |||
| { "protocols", OPT_EXIT, {(void*)opt_protocols}, "show available protocols" }, | |||
| { "filters", OPT_EXIT, {(void*)opt_filters }, "show available filters" }, | |||
| { "pix_fmts" , OPT_EXIT, {(void*)opt_pix_fmts }, "show available pixel formats" }, | |||
| { "loglevel", HAS_ARG, {(void*)opt_loglevel}, "set libav* logging level", "loglevel" }, | |||
| @@ -2943,7 +2943,7 @@ static int opt_frame_pix_fmt(const char *opt, const char *arg) | |||
| return AVERROR(EINVAL); | |||
| } | |||
| } else { | |||
| show_pix_fmts(); | |||
| opt_pix_fmts(NULL, NULL); | |||
| ffmpeg_exit(0); | |||
| } | |||
| return 0; | |||
| @@ -4073,16 +4073,18 @@ static void parse_matrix_coeffs(uint16_t *dest, const char *str) | |||
| } | |||
| } | |||
| static void opt_inter_matrix(const char *opt, const char *arg) | |||
| static int opt_inter_matrix(const char *opt, const char *arg) | |||
| { | |||
| inter_matrix = av_mallocz(sizeof(uint16_t) * 64); | |||
| parse_matrix_coeffs(inter_matrix, arg); | |||
| return 0; | |||
| } | |||
| static void opt_intra_matrix(const char *opt, const char *arg) | |||
| static int opt_intra_matrix(const char *opt, const char *arg) | |||
| { | |||
| intra_matrix = av_mallocz(sizeof(uint16_t) * 64); | |||
| parse_matrix_coeffs(intra_matrix, arg); | |||
| return 0; | |||
| } | |||
| static void show_usage(void) | |||
| @@ -4092,7 +4094,7 @@ static void show_usage(void) | |||
| printf("\n"); | |||
| } | |||
| static void show_help(void) | |||
| static int opt_help(const char *opt, const char *arg) | |||
| { | |||
| AVCodec *c; | |||
| AVOutputFormat *oformat = NULL; | |||
| @@ -4147,6 +4149,7 @@ static void show_help(void) | |||
| } | |||
| av_opt_show2(sws_opts, NULL, AV_OPT_FLAG_ENCODING_PARAM|AV_OPT_FLAG_DECODING_PARAM, 0); | |||
| return 0; | |||
| } | |||
| static int opt_target(const char *opt, const char *arg) | |||
| @@ -4377,10 +4380,11 @@ static void log_callback_null(void* ptr, int level, const char* fmt, va_list vl) | |||
| { | |||
| } | |||
| static void opt_passlogfile(const char *opt, const char *arg) | |||
| static int opt_passlogfile(const char *opt, const char *arg) | |||
| { | |||
| pass_logfilename_prefix = arg; | |||
| opt_default("passlogfile", arg); | |||
| return 0; | |||
| } | |||
| static const OptionDef options[] = { | |||
| @@ -212,7 +212,7 @@ typedef struct VideoState { | |||
| int refresh; | |||
| } VideoState; | |||
| static void show_help(void); | |||
| static int opt_help(const char *opt, const char *arg); | |||
| /* options specified by the user */ | |||
| static AVInputFormat *file_iformat; | |||
| @@ -2950,7 +2950,7 @@ static void show_usage(void) | |||
| printf("\n"); | |||
| } | |||
| static void show_help(void) | |||
| static int opt_help(const char *opt, const char *arg) | |||
| { | |||
| av_log_set_callback(log_callback_help); | |||
| show_usage(); | |||
| @@ -2982,6 +2982,7 @@ static void show_help(void) | |||
| "down/up seek backward/forward 1 minute\n" | |||
| "mouse click seek to percentage in file corresponding to fraction of width\n" | |||
| ); | |||
| return 0; | |||
| } | |||
| /* Called from the main */ | |||
| @@ -353,7 +353,7 @@ static int opt_input_file(const char *opt, const char *arg) | |||
| return 0; | |||
| } | |||
| static void show_help(void) | |||
| static int opt_help(const char *opt, const char *arg) | |||
| { | |||
| av_log_set_callback(log_callback_help); | |||
| show_usage(); | |||
| @@ -361,6 +361,7 @@ static void show_help(void) | |||
| printf("\n"); | |||
| av_opt_show2(avformat_opts, NULL, | |||
| AV_OPT_FLAG_DECODING_PARAM, 0); | |||
| return 0; | |||
| } | |||
| static void opt_pretty(void) | |||
| @@ -4654,12 +4654,13 @@ static void opt_debug(void) | |||
| logfilename[0] = '-'; | |||
| } | |||
| static void show_help(void) | |||
| static int opt_help(const char *opt, const char *arg) | |||
| { | |||
| printf("usage: ffserver [options]\n" | |||
| "Hyper fast multi format Audio/Video streaming server\n"); | |||
| printf("\n"); | |||
| show_help_options(options, "Main options:\n", 0, 0); | |||
| return 0; | |||
| } | |||
| static const OptionDef options[] = { | |||