Defines | Functions

libavcodec/ppc/fft_altivec.c File Reference

#include "libavcodec/fft.h"
#include "util_altivec.h"
#include "types_altivec.h"

Go to the source code of this file.

Defines

#define CMULA(p, o0, o1, o2, o3)
#define STORE2(v, dst)
#define STORE8(p)
#define CMULB(d0, d1, o)

Functions

void ff_fft_calc_altivec (FFTContext *s, FFTComplex *z)
 Do a complex FFT with the parameters defined in ff_fft_init().
void ff_fft_calc_interleave_altivec (FFTContext *s, FFTComplex *z)
static void ff_imdct_half_altivec (FFTContext *s, FFTSample *output, const FFTSample *input)
static void ff_imdct_calc_altivec (FFTContext *s, FFTSample *output, const FFTSample *input)
av_cold void ff_fft_init_altivec (FFTContext *s)

Define Documentation

#define CMULA (   p,
  o0,
  o1,
  o2,
  o3 
)
Value:
a = pin[ k*2+p];                       /* { z[k].re,    z[k].im,    z[k+1].re,  z[k+1].im  } */\
        b = pin[-k*2-p-1];                     /* { z[-k-2].re, z[-k-2].im, z[-k-1].re, z[-k-1].im } */\
        re = vec_perm(a, b, vcprm(0,2,s0,s2)); /* { z[k].re,    z[k+1].re,  z[-k-2].re, z[-k-1].re } */\
        im = vec_perm(a, b, vcprm(s3,s1,3,1)); /* { z[-k-1].im, z[-k-2].im, z[k+1].im,  z[k].im    } */\
        cos = vec_perm(cos0, cos1, vcprm(o0,o1,s##o2,s##o3)); /* { cos[k], cos[k+1], cos[-k-2], cos[-k-1] } */\
        sin = vec_perm(sin0, sin1, vcprm(o0,o1,s##o2,s##o3));\
        r##p = im*cos - re*sin;\
        i##p = re*cos + im*sin;

Referenced by ff_imdct_half_altivec().

#define CMULB (   d0,
  d1,
  o 
)
Value:
re = pout[o*2];\
        im = pout[o*2+1];\
        cos = tcos[o];\
        sin = tsin[o];\
        d0 = im*sin - re*cos;\
        d1 = re*sin + im*cos;

Referenced by ff_imdct_half_altivec().

#define STORE2 (   v,
  dst 
)
Value:
j = dst;\
        vec_ste(v, 0, output+j*2);\
        vec_ste(v, 4, output+j*2);
#define STORE8 (   p  ) 
Value:
a = vec_perm(r##p, i##p, vcprm(0,s0,0,s0));\
        b = vec_perm(r##p, i##p, vcprm(1,s1,1,s1));\
        c = vec_perm(r##p, i##p, vcprm(2,s2,2,s2));\
        d = vec_perm(r##p, i##p, vcprm(3,s3,3,s3));\
        STORE2(a, revtabk[ p*2-4]);\
        STORE2(b, revtabk[ p*2-3]);\
        STORE2(c, revtabj[-p*2+2]);\
        STORE2(d, revtabj[-p*2+3]);

Referenced by ff_imdct_half_altivec().


Function Documentation

void ff_fft_calc_altivec ( FFTContext s,
FFTComplex z 
)

Do a complex FFT with the parameters defined in ff_fft_init().

The input data must be permuted before with s->revtab table. No 1.0/sqrt(n) normalization is done. AltiVec-enabled This code assumes that the 'z' pointer is 16 bytes-aligned It also assumes all FFTComplex are 8 bytes-aligned pair of float

Referenced by ff_imdct_half_altivec().

void ff_fft_calc_interleave_altivec ( FFTContext s,
FFTComplex z 
)
av_cold void ff_fft_init_altivec ( FFTContext s  ) 

Definition at line 140 of file fft_altivec.c.

Referenced by ff_fft_init().

static void ff_imdct_calc_altivec ( FFTContext s,
FFTSample output,
const FFTSample input 
) [static]

Definition at line 119 of file fft_altivec.c.

static void ff_imdct_half_altivec ( FFTContext s,
FFTSample output,
const FFTSample input 
) [static]

Definition at line 39 of file fft_altivec.c.

Referenced by ff_imdct_calc_altivec().