[FFmpeg-cvslog] lavfi: fix broken logic in metadata handling

Paul B Mahol git at videolan.org
Mon Jul 8 22:15:18 CEST 2013


ffmpeg | branch: master | Paul B Mahol <onemda at gmail.com> | Mon Jul  8 20:13:14 2013 +0000| [a03e79ed5a71f77819e5242f69c16d43429fab09] | committer: Paul B Mahol

lavfi: fix broken logic in metadata handling

Signed-off-by: Paul B Mahol <onemda at gmail.com>

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

 libavfilter/vf_bbox.c       |    2 +-
 libavfilter/vf_cropdetect.c |    2 +-
 libavfilter/vf_psnr.c       |   24 ++++++++++++++++--------
 3 files changed, 18 insertions(+), 10 deletions(-)

diff --git a/libavfilter/vf_bbox.c b/libavfilter/vf_bbox.c
index a5f0204..a29627d 100644
--- a/libavfilter/vf_bbox.c
+++ b/libavfilter/vf_bbox.c
@@ -62,7 +62,7 @@ static int query_formats(AVFilterContext *ctx)
 
 #define SET_META(key, value) \
     snprintf(buf, sizeof(buf), "%d", value);  \
-    av_dict_set(metadata, #key, buf, 0); \
+    av_dict_set(metadata, key, buf, 0);
 
 static int filter_frame(AVFilterLink *inlink, AVFrame *frame)
 {
diff --git a/libavfilter/vf_cropdetect.c b/libavfilter/vf_cropdetect.c
index 68d683a..184b769 100644
--- a/libavfilter/vf_cropdetect.c
+++ b/libavfilter/vf_cropdetect.c
@@ -114,7 +114,7 @@ static int config_input(AVFilterLink *inlink)
 
 #define SET_META(key, value) \
     snprintf(buf, sizeof(buf), "%d", value);  \
-    av_dict_set(metadata, #key, buf, 0) \
+    av_dict_set(metadata, key, buf, 0)
 
 static int filter_frame(AVFilterLink *inlink, AVFrame *frame)
 {
diff --git a/libavfilter/vf_psnr.c b/libavfilter/vf_psnr.c
index 6b4fecb..37bfde4 100644
--- a/libavfilter/vf_psnr.c
+++ b/libavfilter/vf_psnr.c
@@ -98,16 +98,24 @@ void compute_images_mse(const uint8_t *main_data[4], const int main_linesizes[4]
     }
 }
 
-#define SET_META(key, comp, value) \
-    snprintf(buf, sizeof(buf), "%0.2f", value);  \
-    av_dict_set(metadata, #key #comp, buf, 0); \
+static void set_meta(AVDictionary **metadata, const char *key, char comp, float d)
+{
+    char value[128];
+    snprintf(value, sizeof(value), "%0.2f", d);
+    if (comp) {
+        char key2[128];
+        snprintf(key2, sizeof(key2), "%s%c", key, comp);
+        av_dict_set(metadata, key2, value, 0);
+    } else {
+        av_dict_set(metadata, key, value, 0);
+    }
+}
 
 static AVFrame *do_psnr(AVFilterContext *ctx, AVFrame *main,
                         const AVFrame *ref)
 {
     PSNRContext *s = ctx->priv;
     double comp_mse[4], mse = 0;
-    char buf[32];
     int j, c;
     AVDictionary **metadata = avpriv_frame_get_metadatap(main);
 
@@ -127,10 +135,10 @@ static AVFrame *do_psnr(AVFilterContext *ctx, AVFrame *main,
 
     for (j = 0; j < s->desc->nb_components; j++) {
         c = s->is_rgb ? s->rgba_map[j] : j;
-        SET_META("lavfi.psnr.mse.", s->comps[j], comp_mse[c]);
-        SET_META("lavfi.psnr.mse_avg", "", mse);
-        SET_META("lavfi.psnr.s.", s->comps[j], get_psnr(comp_mse[c], 1, s->max[c]));
-        SET_META("lavfi.psnr.s_avg", "", get_psnr(mse, 1, s->average_max));
+        set_meta(metadata, "lavfi.psnr.mse.", s->comps[j], comp_mse[c]);
+        set_meta(metadata, "lavfi.psnr.mse_avg", 0, mse);
+        set_meta(metadata, "lavfi.psnr.s.", s->comps[j], get_psnr(comp_mse[c], 1, s->max[c]));
+        set_meta(metadata, "lavfi.psnr.s_avg", 0, get_psnr(mse, 1, s->average_max));
     }
 
     if (s->stats_file) {



More information about the ffmpeg-cvslog mailing list