diff --git a/cmdutils.c b/cmdutils.c index 5e4b71689149b5ae63defef25f455e8c58975d46..a48d0c35c943f62e2227419dc466776cf716eac2 100644 --- a/cmdutils.c +++ b/cmdutils.c @@ -241,12 +241,20 @@ int opt_default(const char *opt, const char *arg){ } if (!o) { AVCodec *p = NULL; + AVOutputFormat *oformat = NULL; while ((p=av_codec_next(p))){ AVClass *c= p->priv_class; if(c && av_find_opt(&c, opt, NULL, 0, 0)) break; } - if(!p){ + if (!p) { + while ((oformat = av_oformat_next(oformat))) { + const AVClass *c = oformat->priv_class; + if (c && av_find_opt(&c, opt, NULL, 0, 0)) + break; + } + } + if(!p && !oformat){ fprintf(stderr, "Unrecognized option '%s'\n", opt); exit(1); } @@ -322,7 +330,13 @@ void set_context_opts(void *ctx, void *opts_ctx, int flags, AVCodec *codec) if(codec && codec->priv_class && avctx->priv_data){ priv_ctx= avctx->priv_data; } + } else if (!strcmp("AVFormatContext", (*(AVClass**)ctx)->class_name)) { + AVFormatContext *avctx = ctx; + if (avctx->oformat && avctx->oformat->priv_class) { + priv_ctx = avctx->priv_data; + } } + for(i=0; i<opt_name_count; i++){ char buf[256]; const AVOption *opt; diff --git a/ffmpeg.c b/ffmpeg.c index 87f6d99d8209f18e2726d45269b5934abf8681c8..875a1f42f2c74549e3bbfb2d4229141a896d5637 100644 --- a/ffmpeg.c +++ b/ffmpeg.c @@ -3904,6 +3904,7 @@ static void show_usage(void) static void show_help(void) { AVCodec *c; + AVOutputFormat *oformat = NULL; av_log_set_callback(log_callback_help); show_usage(); @@ -3945,6 +3946,15 @@ static void show_help(void) av_opt_show2(avformat_opts, NULL, AV_OPT_FLAG_ENCODING_PARAM|AV_OPT_FLAG_DECODING_PARAM, 0); printf("\n"); + + /* individual muxer options */ + while ((oformat = av_oformat_next(oformat))) { + if (oformat->priv_class) { + av_opt_show2(&oformat->priv_class, NULL, AV_OPT_FLAG_ENCODING_PARAM, 0); + printf("\n"); + } + } + av_opt_show2(sws_opts, NULL, AV_OPT_FLAG_ENCODING_PARAM|AV_OPT_FLAG_DECODING_PARAM, 0); }