[FFmpeg-cvslog] avfilter/vf_psnr: Fix rounding error in average_max

Michael Niedermayer git at videolan.org
Thu Jul 21 12:51:06 EEST 2016


ffmpeg | branch: master | Michael Niedermayer <michael at niedermayer.cc> | Thu Jul 21 02:04:03 2016 +0200| [9264bb7e79a50678eca6f320e1e1fb85bf00b009] | committer: Michael Niedermayer

avfilter/vf_psnr: Fix rounding error in average_max

The intermediate was rounded to an integer

Reviewed-by: Paul B Mahol <onemda at gmail.com>
Signed-off-by: Michael Niedermayer <michael at niedermayer.cc>

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

 libavfilter/vf_psnr.c |    5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/libavfilter/vf_psnr.c b/libavfilter/vf_psnr.c
index 89acd3c..0c8d0f1 100644
--- a/libavfilter/vf_psnr.c
+++ b/libavfilter/vf_psnr.c
@@ -241,6 +241,7 @@ static int config_input_ref(AVFilterLink *inlink)
     const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(inlink->format);
     AVFilterContext *ctx  = inlink->dst;
     PSNRContext *s = ctx->priv;
+    double average_max;
     unsigned sum;
     int j;
 
@@ -273,10 +274,12 @@ static int config_input_ref(AVFilterLink *inlink)
     sum = 0;
     for (j = 0; j < s->nb_components; j++)
         sum += s->planeheight[j] * s->planewidth[j];
+    average_max = 0;
     for (j = 0; j < s->nb_components; j++) {
         s->planeweight[j] = (double) s->planeheight[j] * s->planewidth[j] / sum;
-        s->average_max += s->max[j] * s->planeweight[j];
+        average_max += s->max[j] * s->planeweight[j];
     }
+    s->average_max = lrint(average_max);
 
     s->dsp.sse_line = desc->comp[0].depth > 8 ? sse_line_16bit : sse_line_8bit;
     if (ARCH_X86)



More information about the ffmpeg-cvslog mailing list