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

Paul B Mahol onemda at gmail.com
Thu Jul 21 11:41:10 EEST 2016


On 7/21/16, Michael Niedermayer <michael at niedermayer.cc> wrote:
> The intermediate was rounded to an integer
>
> Signed-off-by: Michael Niedermayer <michael at niedermayer.cc>
> ---
>  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 f3dff62..54d4ff0 100644
> --- a/libavfilter/vf_psnr.c
> +++ b/libavfilter/vf_psnr.c
> @@ -246,6 +246,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;
>
> @@ -278,10 +279,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)
> --
> 1.7.9.5
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>

ok


More information about the ffmpeg-devel mailing list