for (i = 0; i < s->nb_planes; i++) {
int w = s->planewidth[i];
int h = s->planeheight[i];
- int n = FFMAX(w, h) * 10/9;
+ int n = FFMAX(w, h);
+
+ n += n / 2;
for (fft_bits = 1; 1 << fft_bits < n; fft_bits++);
- s->fft_bits[i] = fft_bits;
+ 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))))
fft_hdata[y * n + x].im = 0;
}
}
+
+ for (; x < n / 2; x++) {
+ fft_hdata[y * n + x].re = 0;
+ fft_hdata[y * n + x].im = 0;
+ }
+
for (; x < n; x++) {
+ fft_hdata[y * n + x].re = fft_hdata[y * n + n - x - 1].re;
+ fft_hdata[y * n + x].im = 0;
+ }
+ }
+
+ for (; y < n / 2; y++) {
+ for (x = 0; x < n; x++) {
fft_hdata[y * n + x].re = 0;
fft_hdata[y * n + x].im = 0;
}
for (; y < n; y++) {
for (x = 0; x < n; x++) {
- fft_hdata[y * n + x].re = 0;
+ fft_hdata[y * n + x].re = fft_hdata[(n - y - 1) * n + x].re;
fft_hdata[y * n + x].im = 0;
}
}
fft_vdata[y * n + x].re = fft_hdata[x * n + y].re;
fft_vdata[y * n + x].im = fft_hdata[x * n + y].im;
}
- for (; x < n; x++) {
- fft_vdata[y * n + x].re = 0;
- fft_vdata[y * n + x].im = 0;
- }
+
av_fft_permute(s->fft[plane], fft_vdata + y * n);
av_fft_calc(s->fft[plane], fft_vdata + y * n);
}
for (y = 0; y < n; y++) {
av_fft_permute(s->ifft[plane], s->fft_vdata[plane] + y * n);
av_fft_calc(s->ifft[plane], s->fft_vdata[plane] + y * n);
+
for (x = 0; x < n; x++) {
s->fft_hdata[plane][x * n + y].re = s->fft_vdata[plane][y * n + x].re;
s->fft_hdata[plane][x * n + y].im = s->fft_vdata[plane][y * n + x].im;