aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul B Mahol <onemda@gmail.com>2017-12-24 10:15:26 +0100
committerPaul B Mahol <onemda@gmail.com>2017-12-24 10:15:26 +0100
commit175122fcd5e6116a11203a938680de0dd4fd5747 (patch)
tree21c8554ad2533d4d9cc826d1ac37fb1e08811e3c
parent9e5e3236f4f2004a505533228cf6a6dd65b0101c (diff)
downloadffmpeg-175122fcd5e6116a11203a938680de0dd4fd5747.tar.gz
avfilter/vf_convolve: fix convolution of borders
Signed-off-by: Paul B Mahol <onemda@gmail.com>
-rw-r--r--libavfilter/vf_convolve.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/libavfilter/vf_convolve.c b/libavfilter/vf_convolve.c
index 46119a3d1f..8d71899637 100644
--- a/libavfilter/vf_convolve.c
+++ b/libavfilter/vf_convolve.c
@@ -121,16 +121,16 @@ static int config_input_main(AVFilterLink *inlink)
s->fft_bits[i] = fft_bits + 1;
s->fft_len[i] = 1 << s->fft_bits[i];
- if (!(s->fft_hdata[i] = av_calloc(s->fft_len[i], s->fft_len[i] * sizeof(FFTComplex))))
+ if (!(s->fft_hdata[i] = av_calloc(s->fft_len[i], (s->fft_len[i] + 1) * sizeof(FFTComplex))))
return AVERROR(ENOMEM);
- if (!(s->fft_vdata[i] = av_calloc(s->fft_len[i], s->fft_len[i] * sizeof(FFTComplex))))
+ if (!(s->fft_vdata[i] = av_calloc(s->fft_len[i], (s->fft_len[i] + 1) * sizeof(FFTComplex))))
return AVERROR(ENOMEM);
- if (!(s->fft_hdata_impulse[i] = av_calloc(s->fft_len[i], s->fft_len[i] * sizeof(FFTComplex))))
+ if (!(s->fft_hdata_impulse[i] = av_calloc(s->fft_len[i], (s->fft_len[i] + 1)* sizeof(FFTComplex))))
return AVERROR(ENOMEM);
- if (!(s->fft_vdata_impulse[i] = av_calloc(s->fft_len[i], s->fft_len[i] * sizeof(FFTComplex))))
+ if (!(s->fft_vdata_impulse[i] = av_calloc(s->fft_len[i], (s->fft_len[i] + 1) * sizeof(FFTComplex))))
return AVERROR(ENOMEM);
}
@@ -321,6 +321,9 @@ static int do_convolve(FFFrameSync *fs)
}
for (y = 0; y < n; y++) {
+
+ s->fft_vdata[plane][y*n + n].re = s->fft_vdata[plane][y*n + 0].im;
+ s->fft_vdata[plane][y*n + 0].im = 0;
for (x = 0; x < n; x++) {
FFTSample re, im, ire, iim;
@@ -332,6 +335,8 @@ static int do_convolve(FFFrameSync *fs)
s->fft_vdata[plane][y*n + x].re = ire * re - iim * im;
s->fft_vdata[plane][y*n + x].im = iim * re + ire * im;
}
+ s->fft_vdata[plane][y*n + n].re = s->fft_vdata[plane][y*n + 0].im * s->fft_vdata_impulse[plane][y*n + 0].im;
+ s->fft_vdata[plane][y*n + 0].im = s->fft_vdata[plane][y*n + n].re;
}
ifft_vertical(s, n, plane);