diff --git a/ffmpeg.c b/ffmpeg.c index 2c43494245..9d7b2e53e3 100644 --- a/ffmpeg.c +++ b/ffmpeg.c @@ -3905,11 +3905,11 @@ static void show_help(void) OPT_GRAB, OPT_GRAB); printf("\n"); - av_opt_show(avcodec_opts[0], NULL); + av_opt_show2(avcodec_opts[0], NULL, AV_OPT_FLAG_ENCODING_PARAM|AV_OPT_FLAG_DECODING_PARAM, 0); printf("\n"); - av_opt_show(avformat_opts, NULL); + av_opt_show2(avformat_opts, NULL, AV_OPT_FLAG_ENCODING_PARAM|AV_OPT_FLAG_DECODING_PARAM, 0); printf("\n"); - av_opt_show(sws_opts, NULL); + av_opt_show2(sws_opts, NULL, AV_OPT_FLAG_ENCODING_PARAM|AV_OPT_FLAG_DECODING_PARAM, 0); } static void opt_target(const char *arg) diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index 54cc459357..24e9077521 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -31,7 +31,7 @@ #include "libavutil/cpu.h" #define LIBAVCODEC_VERSION_MAJOR 52 -#define LIBAVCODEC_VERSION_MINOR 89 +#define LIBAVCODEC_VERSION_MINOR 90 #define LIBAVCODEC_VERSION_MICRO 0 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ @@ -54,6 +54,9 @@ #ifndef FF_API_MM_FLAGS #define FF_API_MM_FLAGS (LIBAVCODEC_VERSION_MAJOR < 53) #endif +#ifndef FF_API_OPT_SHOW +#define FF_API_OPT_SHOW (LIBAVCODEC_VERSION_MAJOR < 53) +#endif #define AV_NOPTS_VALUE INT64_C(0x8000000000000000) #define AV_TIME_BASE 1000000 diff --git a/libavcodec/opt.c b/libavcodec/opt.c index 128d95d1ce..e3b2a0bda7 100644 --- a/libavcodec/opt.c +++ b/libavcodec/opt.c @@ -319,12 +319,13 @@ int64_t av_get_int(void *obj, const char *name, const AVOption **o_out){ return num*intnum/den; } -static void opt_list(void *obj, void *av_log_obj, const char *unit) +static void opt_list(void *obj, void *av_log_obj, const char *unit, + int req_flags, int rej_flags) { const AVOption *opt=NULL; while((opt= av_next_option(obj, opt))){ - if(!(opt->flags & (AV_OPT_FLAG_ENCODING_PARAM|AV_OPT_FLAG_DECODING_PARAM))) + if (!(opt->flags & req_flags) || (opt->flags & rej_flags)) continue; /* Don't print CONST's on level one. @@ -383,22 +384,30 @@ static void opt_list(void *obj, void *av_log_obj, const char *unit) av_log(av_log_obj, AV_LOG_INFO, " %s", opt->help); av_log(av_log_obj, AV_LOG_INFO, "\n"); if (opt->unit && opt->type != FF_OPT_TYPE_CONST) { - opt_list(obj, av_log_obj, opt->unit); + opt_list(obj, av_log_obj, opt->unit, req_flags, rej_flags); } } } -int av_opt_show(void *obj, void *av_log_obj){ +int av_opt_show2(void *obj, void *av_log_obj, int req_flags, int rej_flags) +{ if(!obj) return -1; av_log(av_log_obj, AV_LOG_INFO, "%s AVOptions:\n", (*(AVClass**)obj)->class_name); - opt_list(obj, av_log_obj, NULL); + opt_list(obj, av_log_obj, NULL, req_flags, rej_flags); return 0; } +#if FF_API_OPT_SHOW +int av_opt_show(void *obj, void *av_log_obj){ + return av_opt_show2(obj, av_log_obj, + AV_OPT_FLAG_ENCODING_PARAM|AV_OPT_FLAG_DECODING_PARAM, 0); +} +#endif + /** Set the values of the AVCodecContext or AVFormatContext structure. * They are set to the defaults specified in the according AVOption options * array default_val field. diff --git a/libavcodec/opt.h b/libavcodec/opt.h index 9f0da7296f..ca56141c5e 100644 --- a/libavcodec/opt.h +++ b/libavcodec/opt.h @@ -204,7 +204,25 @@ AVRational av_get_q(void *obj, const char *name, const AVOption **o_out); int64_t av_get_int(void *obj, const char *name, const AVOption **o_out); const char *av_get_string(void *obj, const char *name, const AVOption **o_out, char *buf, int buf_len); const AVOption *av_next_option(void *obj, const AVOption *last); -int av_opt_show(void *obj, void *av_log_obj); + +#if FF_API_OPT_SHOW +/** + * @deprecated Use av_opt_show2() instead. + */ +attribute_deprecated int av_opt_show(void *obj, void *av_log_obj); +#endif + +/** + * Show the obj options. + * + * @param req_flags requested flags for the options to show. Show only the + * options for which it is opt->flags & req_flags. + * @param rej_flags rejected flags for the options to show. Show only the + * options for which it is !(opt->flags & req_flags). + * @param av_log_obj log context to use for showing the options + */ +int av_opt_show2(void *obj, void *av_log_obj, int req_flags, int rej_flags); + void av_opt_set_defaults(void *s); void av_opt_set_defaults2(void *s, int mask, int flags);