diff options
author | Michael Niedermayer <michael@niedermayer.cc> | 2015-08-08 12:43:10 +0200 |
---|---|---|
committer | Michael Niedermayer <michael@niedermayer.cc> | 2015-08-08 13:24:52 +0200 |
commit | 165fb7eba80c3829fbdadd2f5da47f081294613b (patch) | |
tree | 80fa4a0f5210684d8ba7b3d66811305aa8978229 /cmdutils.c | |
parent | 41e733c1ef201f9dbfc51635519fb7632835fda7 (diff) | |
download | ffmpeg-165fb7eba80c3829fbdadd2f5da47f081294613b.tar.gz |
cmdutils: Export all sws options using a AVDictionary like the other subsystems do
This makes extracting options other than sws_flags easier
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
Diffstat (limited to 'cmdutils.c')
-rw-r--r-- | cmdutils.c | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/cmdutils.c b/cmdutils.c index 8a585e71d4..e87d5eef75 100644 --- a/cmdutils.c +++ b/cmdutils.c @@ -64,6 +64,7 @@ static int init_report(const char *env); struct SwsContext *sws_opts; +AVDictionary *sws_dict; AVDictionary *swr_opts; AVDictionary *format_opts, *codec_opts, *resample_opts; @@ -77,6 +78,7 @@ void init_opts(void) if(CONFIG_SWSCALE) sws_opts = sws_getContext(16, 16, 0, 16, 16, 0, SWS_BICUBIC, NULL, NULL, NULL); + av_dict_set(&sws_dict, "flags", "bicubic", 0); } void uninit_opts(void) @@ -87,6 +89,7 @@ void uninit_opts(void) #endif av_dict_free(&swr_opts); + av_dict_free(&sws_dict); av_dict_free(&format_opts); av_dict_free(&codec_opts); av_dict_free(&resample_opts); @@ -565,14 +568,23 @@ int opt_default(void *optctx, const char *opt, const char *arg) } #if CONFIG_SWSCALE sc = sws_get_class(); - if (!consumed && opt_find(&sc, opt, NULL, 0, - AV_OPT_SEARCH_CHILDREN | AV_OPT_SEARCH_FAKE_OBJ)) { - // XXX we only support sws_flags, not arbitrary sws options - int ret = av_opt_set(sws_opts, opt, arg, 0); + if (!consumed && (o = opt_find(&sc, opt, NULL, 0, + AV_OPT_SEARCH_CHILDREN | AV_OPT_SEARCH_FAKE_OBJ))) { + struct SwsContext *sws = sws_alloc_context(); + int ret = av_opt_set(sws, opt, arg, 0); + sws_freeContext(sws); if (ret < 0) { av_log(NULL, AV_LOG_ERROR, "Error setting option %s.\n", opt); return ret; } + ret = av_opt_set(sws_opts, opt, arg, 0); + if (ret < 0) { + av_log(NULL, AV_LOG_ERROR, "Error setting option %s for sws_opts.\n", opt); + return ret; + } + + av_dict_set(&sws_dict, opt, arg, FLAGS); + consumed = 1; } #else @@ -649,6 +661,7 @@ static void finish_group(OptionParseContext *octx, int group_idx, #if CONFIG_SWSCALE g->sws_opts = sws_opts; #endif + g->sws_dict = sws_dict; g->swr_opts = swr_opts; g->codec_opts = codec_opts; g->format_opts = format_opts; @@ -660,6 +673,7 @@ static void finish_group(OptionParseContext *octx, int group_idx, #if CONFIG_SWSCALE sws_opts = NULL; #endif + sws_dict = NULL; swr_opts = NULL; init_opts(); @@ -718,6 +732,8 @@ void uninit_parse_context(OptionParseContext *octx) #if CONFIG_SWSCALE sws_freeContext(l->groups[j].sws_opts); #endif + + av_dict_free(&l->groups[j].sws_dict); av_dict_free(&l->groups[j].swr_opts); } av_freep(&l->groups); |