[FFmpeg-cvslog] ffmpeg: switch swscale option handling to AVDictionary similar to what the other subsystems use

Michael Niedermayer git at videolan.org
Sat Aug 8 16:31:16 CEST 2015


ffmpeg | branch: master | Michael Niedermayer <michael at niedermayer.cc> | Sat Aug  8 13:33:46 2015 +0200| [6dbaeed6b7b7c858dffdf141b725506b887660e7] | committer: Michael Niedermayer

ffmpeg: switch swscale option handling to AVDictionary similar to what the other subsystems use

Signed-off-by: Michael Niedermayer <michael at niedermayer.cc>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=6dbaeed6b7b7c858dffdf141b725506b887660e7
---

 ffmpeg.c        |    1 +
 ffmpeg.h        |    2 +-
 ffmpeg_filter.c |   20 ++++++++++++++++----
 ffmpeg_opt.c    |    2 +-
 4 files changed, 19 insertions(+), 6 deletions(-)

diff --git a/ffmpeg.c b/ffmpeg.c
index 434abd4..9dcd641 100644
--- a/ffmpeg.c
+++ b/ffmpeg.c
@@ -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);
diff --git a/ffmpeg.h b/ffmpeg.h
index 03ba2d0..6544e6f 100644
--- a/ffmpeg.h
+++ b/ffmpeg.h
@@ -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 ce2ffc0..8a96c4b 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 66a43b4..28d3051 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)



More information about the ffmpeg-cvslog mailing list