diff options
author | Michael Niedermayer <michael@niedermayer.cc> | 2015-08-08 13:33:46 +0200 |
---|---|---|
committer | Michael Niedermayer <michael@niedermayer.cc> | 2015-08-08 14:44:15 +0200 |
commit | 6dbaeed6b7b7c858dffdf141b725506b887660e7 (patch) | |
tree | 4a1cd9d605da56b75e285258e92ae46d5994df85 | |
parent | d3d776ccf94c988755efb264e318e97a11fea194 (diff) | |
download | ffmpeg-6dbaeed6b7b7c858dffdf141b725506b887660e7.tar.gz |
ffmpeg: switch swscale option handling to AVDictionary similar to what the other subsystems use
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
-rw-r--r-- | ffmpeg.c | 1 | ||||
-rw-r--r-- | ffmpeg.h | 2 | ||||
-rw-r--r-- | ffmpeg_filter.c | 20 | ||||
-rw-r--r-- | ffmpeg_opt.c | 2 |
4 files changed, 19 insertions, 6 deletions
@@ -4034,6 +4034,7 @@ static int transcode(void) av_freep(&ost->apad); av_freep(&ost->disposition); av_dict_free(&ost->encoder_opts); + av_dict_free(&ost->sws_dict); av_dict_free(&ost->swr_opts); av_dict_free(&ost->resample_opts); av_dict_free(&ost->bsf_args); @@ -432,8 +432,8 @@ typedef struct OutputStream { char *filters; ///< filtergraph associated to the -filter option char *filters_script; ///< filtergraph script associated to the -filter_script option - int64_t sws_flags; AVDictionary *encoder_opts; + AVDictionary *sws_dict; AVDictionary *swr_opts; AVDictionary *resample_opts; AVDictionary *bsf_args; diff --git a/ffmpeg_filter.c b/ffmpeg_filter.c index ce2ffc0b7a..8a96c4be86 100644 --- a/ffmpeg_filter.c +++ b/ffmpeg_filter.c @@ -423,11 +423,17 @@ static int configure_output_video_filter(FilterGraph *fg, OutputFilter *ofilter, if (codec->width || codec->height) { char args[255]; AVFilterContext *filter; + AVDictionaryEntry *e = NULL; - snprintf(args, sizeof(args), "%d:%d:0x%X", + snprintf(args, sizeof(args), "%d:%d", codec->width, - codec->height, - (unsigned)ost->sws_flags); + codec->height); + + while ((e = av_dict_get(ost->sws_dict, "", e, + AV_DICT_IGNORE_SUFFIX))) { + av_strlcatf(args, sizeof(args), ":%s=%s", e->key, e->value); + } + snprintf(name, sizeof(name), "scaler for output stream %d:%d", ost->file_index, ost->index); if ((ret = avfilter_graph_create_filter(&filter, avfilter_get_by_name("scale"), @@ -961,7 +967,13 @@ int configure_filtergraph(FilterGraph *fg) char args[512]; AVDictionaryEntry *e = NULL; - snprintf(args, sizeof(args), "flags=0x%X", (unsigned)ost->sws_flags); + args[0] = 0; + while ((e = av_dict_get(ost->sws_dict, "", e, + AV_DICT_IGNORE_SUFFIX))) { + av_strlcatf(args, sizeof(args), "%s=%s:", e->key, e->value); + } + if (strlen(args)) + args[strlen(args)-1] = 0; fg->graph->scale_sws_opts = av_strdup(args); args[0] = 0; diff --git a/ffmpeg_opt.c b/ffmpeg_opt.c index 66a43b4093..28d305103a 100644 --- a/ffmpeg_opt.c +++ b/ffmpeg_opt.c @@ -1240,7 +1240,7 @@ static OutputStream *new_output_stream(OptionsContext *o, AVFormatContext *oc, e if (oc->oformat->flags & AVFMT_GLOBALHEADER) ost->enc_ctx->flags |= AV_CODEC_FLAG_GLOBAL_HEADER; - av_opt_get_int(o->g->sws_opts, "sws_flags", 0, &ost->sws_flags); + av_dict_copy(&ost->sws_dict, o->g->sws_dict, 0); av_dict_copy(&ost->swr_opts, o->g->swr_opts, 0); if (ost->enc && av_get_exact_bits_per_sample(ost->enc->id) == 24) |