avfilter/dctdnoiz: fix slice_h computation n2.5.4
authorClément Bœsch <u@pkh.me>
Sun, 8 Feb 2015 13:27:51 +0000 (14:27 +0100)
committerClément Bœsch <u@pkh.me>
Thu, 12 Feb 2015 19:21:56 +0000 (20:21 +0100)
ceilf() can only work if the reminder of the division is not 0.

This fixes memory errors with for instance:
  ffmpeg -f lavfi -i testsrc=s=800x500 -threads 3 -vf dctdnoiz -frames:v 1 -f null -

(cherry picked from commit eb7efaa9244720c5f2051d76d76faeec864eca7a)

libavfilter/vf_dctdnoiz.c

index a9017b1..7246b01 100644 (file)
@@ -534,7 +534,7 @@ static int config_input(AVFilterLink *inlink)
     /* each slice will need to (pre & re)process the top and bottom block of
      * the previous one in in addition to its processing area. This is because
      * each pixel is averaged by all the surrounding blocks */
-    slice_h = (int)ceilf(s->pr_height / s->nb_threads) + (s->bsize - 1) * 2;
+    slice_h = (int)ceilf(s->pr_height / (float)s->nb_threads) + (s->bsize - 1) * 2;
     for (i = 0; i < s->nb_threads; i++) {
         s->slices[i] = av_malloc_array(linesize, slice_h * sizeof(*s->slices[i]));
         if (!s->slices[i])