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/rdft.h"
00023 #include "libavcodec/synth_filter.h"
00024
00025 void ff_fft_permute_neon(FFTContext *s, FFTComplex *z);
00026 void ff_fft_calc_neon(FFTContext *s, FFTComplex *z);
00027
00028 void ff_imdct_calc_neon(FFTContext *s, FFTSample *output, const FFTSample *input);
00029 void ff_imdct_half_neon(FFTContext *s, FFTSample *output, const FFTSample *input);
00030 void ff_mdct_calc_neon(FFTContext *s, FFTSample *output, const FFTSample *input);
00031
00032 void ff_rdft_calc_neon(struct RDFTContext *s, FFTSample *z);
00033
00034 void ff_synth_filter_float_neon(FFTContext *imdct,
00035 float *synth_buf_ptr, int *synth_buf_offset,
00036 float synth_buf2[32], const float window[512],
00037 float out[32], const float in[32],
00038 float scale);
00039
00040 av_cold void ff_fft_init_arm(FFTContext *s)
00041 {
00042 if (HAVE_NEON) {
00043 s->fft_permute = ff_fft_permute_neon;
00044 s->fft_calc = ff_fft_calc_neon;
00045 #if CONFIG_MDCT
00046 s->imdct_calc = ff_imdct_calc_neon;
00047 s->imdct_half = ff_imdct_half_neon;
00048 s->mdct_calc = ff_mdct_calc_neon;
00049 s->mdct_permutation = FF_MDCT_PERM_INTERLEAVE;
00050 #endif
00051 }
00052 }
00053
00054 #if CONFIG_RDFT
00055 av_cold void ff_rdft_init_arm(RDFTContext *s)
00056 {
00057 if (HAVE_NEON)
00058 s->rdft_calc = ff_rdft_calc_neon;
00059 }
00060 #endif
00061
00062 #if CONFIG_DCA_DECODER
00063 av_cold void ff_synth_filter_init_arm(SynthFilterContext *s)
00064 {
00065 if (HAVE_NEON)
00066 s->synth_filter_float = ff_synth_filter_float_neon;
00067 }
00068 #endif