[FFmpeg-devel] [PATCH] avcodec/rdft: reorder calculation
Muhammad Faiz
mfcc64 at gmail.com
Wed Jul 26 02:19:19 EEST 2017
On Sat, Jul 22, 2017 at 6:57 AM, Muhammad Faiz <mfcc64 at gmail.com> wrote:
> old:
> 165188 decicycles in rdft, 65536 runs, 0 skips
> 165865 decicycles in irdft, 65536 runs, 0 skips
> new:
> 142487 decicycles in rdft, 65536 runs, 0 skips
> 141498 decicycles in irdft, 65536 runs, 0 skips
>
> Signed-off-by: Muhammad Faiz <mfcc64 at gmail.com>
> ---
> libavcodec/rdft.c | 14 ++++++++------
> 1 file changed, 8 insertions(+), 6 deletions(-)
>
> diff --git a/libavcodec/rdft.c b/libavcodec/rdft.c
> index 194e0bc4ee..6ba7484238 100644
> --- a/libavcodec/rdft.c
> +++ b/libavcodec/rdft.c
> @@ -35,7 +35,7 @@
> static void rdft_calc_c(RDFTContext *s, FFTSample *data)
> {
> int i, i1, i2;
> - FFTComplex ev, od;
> + FFTComplex ev, od, odsum;
> const int n = 1 << s->nbits;
> const float k1 = 0.5;
> const float k2 = 0.5 - s->inverse;
> @@ -58,14 +58,16 @@ static void rdft_calc_c(RDFTContext *s, FFTSample *data)
> i2 = n-i1; \
> /* Separate even and odd FFTs */ \
> ev.re = k1*(data[i1 ]+data[i2 ]); \
> - od.im = -k2*(data[i1 ]-data[i2 ]); \
> + od.im = k2*(data[i2 ]-data[i1 ]); \
> ev.im = k1*(data[i1+1]-data[i2+1]); \
> od.re = k2*(data[i1+1]+data[i2+1]); \
> /* Apply twiddle factors to the odd FFT and add to the even FFT */ \
> - data[i1 ] = ev.re + od.re*tcos[i] sign0 od.im*tsin[i]; \
> - data[i1+1] = ev.im + od.im*tcos[i] sign1 od.re*tsin[i]; \
> - data[i2 ] = ev.re - od.re*tcos[i] sign1 od.im*tsin[i]; \
> - data[i2+1] = -ev.im + od.im*tcos[i] sign1 od.re*tsin[i]; \
> + odsum.re = od.re*tcos[i] sign0 od.im*tsin[i]; \
> + odsum.im = od.im*tcos[i] sign1 od.re*tsin[i]; \
> + data[i1 ] = ev.re + odsum.re; \
> + data[i1+1] = ev.im + odsum.im; \
> + data[i2 ] = ev.re - odsum.re; \
> + data[i2+1] = odsum.im - ev.im; \
> }
>
> if (s->negative_sin) {
> --
> 2.13.2
>
Applied.
Thank's.
More information about the ffmpeg-devel
mailing list