[FFmpeg-cvslog] cmdutils: Export all sws options using a AVDictionary like the other subsystems do
Michael Niedermayer
git at videolan.org
Sat Aug 8 13:26:50 CEST 2015
ffmpeg | branch: master | Michael Niedermayer <michael at niedermayer.cc> | Sat Aug 8 12:43:10 2015 +0200| [165fb7eba80c3829fbdadd2f5da47f081294613b] | committer: Michael Niedermayer
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 at niedermayer.cc>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=165fb7eba80c3829fbdadd2f5da47f081294613b
---
cmdutils.c | 24 ++++++++++++++++++++----
cmdutils.h | 2 ++
2 files changed, 22 insertions(+), 4 deletions(-)
diff --git a/cmdutils.c b/cmdutils.c
index 8a585e7..e87d5ee 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);
diff --git a/cmdutils.h b/cmdutils.h
index 55134ff..842c782 100644
--- a/cmdutils.h
+++ b/cmdutils.h
@@ -47,6 +47,7 @@ extern const int program_birth_year;
extern AVCodecContext *avcodec_opts[AVMEDIA_TYPE_NB];
extern AVFormatContext *avformat_opts;
extern struct SwsContext *sws_opts;
+extern AVDictionary *sws_dict;
extern AVDictionary *swr_opts;
extern AVDictionary *format_opts, *codec_opts, *resample_opts;
extern int hide_banner;
@@ -278,6 +279,7 @@ typedef struct OptionGroup {
AVDictionary *format_opts;
AVDictionary *resample_opts;
struct SwsContext *sws_opts;
+ AVDictionary *sws_dict;
AVDictionary *swr_opts;
} OptionGroup;
More information about the ffmpeg-cvslog
mailing list