00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include "libavcodec/fft.h"
00022 #include "libavcodec/synth_filter.h"
00023
00024 void ff_fft_permute_neon(FFTContext *s, FFTComplex *z);
00025 void ff_fft_calc_neon(FFTContext *s, FFTComplex *z);
00026
00027 void ff_imdct_calc_neon(FFTContext *s, FFTSample *output, const FFTSample *input);
00028 void ff_imdct_half_neon(FFTContext *s, FFTSample *output, const FFTSample *input);
00029 void ff_mdct_calc_neon(FFTContext *s, FFTSample *output, const FFTSample *input);
00030
00031 void ff_rdft_calc_neon(struct RDFTContext *s, FFTSample *z);
00032
00033 void ff_synth_filter_float_neon(FFTContext *imdct,
00034 float *synth_buf_ptr, int *synth_buf_offset,
00035 float synth_buf2[32], const float window[512],
00036 float out[32], const float in[32],
00037 float scale, float bias);
00038
00039 av_cold void ff_fft_init_arm(FFTContext *s)
00040 {
00041 if (HAVE_NEON) {
00042 s->fft_permute = ff_fft_permute_neon;
00043 s->fft_calc = ff_fft_calc_neon;
00044 s->imdct_calc = ff_imdct_calc_neon;
00045 s->imdct_half = ff_imdct_half_neon;
00046 s->mdct_calc = ff_mdct_calc_neon;
00047 s->permutation = FF_MDCT_PERM_INTERLEAVE;
00048 }
00049 }
00050
00051 #if CONFIG_RDFT
00052 av_cold void ff_rdft_init_arm(RDFTContext *s)
00053 {
00054 if (HAVE_NEON)
00055 s->rdft_calc = ff_rdft_calc_neon;
00056 }
00057 #endif
00058
00059 #if CONFIG_DCA_DECODER
00060 av_cold void ff_synth_filter_init_arm(SynthFilterContext *s)
00061 {
00062 if (HAVE_NEON)
00063 s->synth_filter_float = ff_synth_filter_float_neon;
00064 }
00065 #endif