| Index: webrtc/modules/audio_processing/utility/ooura_fft_neon.cc
|
| diff --git a/webrtc/modules/audio_processing/aec/aec_rdft_neon.cc b/webrtc/modules/audio_processing/utility/ooura_fft_neon.cc
|
| similarity index 94%
|
| rename from webrtc/modules/audio_processing/aec/aec_rdft_neon.cc
|
| rename to webrtc/modules/audio_processing/utility/ooura_fft_neon.cc
|
| index 43b6a68cd725c640e372387a4dbf598a59fcbd7b..4ed043d518f840e680336a10d133d814e8707dd3 100644
|
| --- a/webrtc/modules/audio_processing/aec/aec_rdft_neon.cc
|
| +++ b/webrtc/modules/audio_processing/utility/ooura_fft_neon.cc
|
| @@ -14,15 +14,17 @@
|
| * Based on the sse2 version.
|
| */
|
|
|
| -
|
| -#include "webrtc/modules/audio_processing/aec/aec_rdft.h"
|
| +#include "webrtc/modules/audio_processing/utility/ooura_fft.h"
|
|
|
| #include <arm_neon.h>
|
|
|
| -static const ALIGN16_BEG float ALIGN16_END
|
| - k_swap_sign[4] = {-1.f, 1.f, -1.f, 1.f};
|
| +#include "webrtc/modules/audio_processing/utility/ooura_fft_tables_common.h"
|
| +#include "webrtc/modules/audio_processing/utility/ooura_fft_tables_neon_sse2.h"
|
| +
|
| +namespace webrtc {
|
|
|
| -static void cft1st_128_neon(float* a) {
|
| +#if defined(WEBRTC_HAS_NEON)
|
| +void cft1st_128_neon(float* a) {
|
| const float32x4_t vec_swap_sign = vld1q_f32((float32_t*)k_swap_sign);
|
| int j, k2;
|
|
|
| @@ -71,7 +73,7 @@ static void cft1st_128_neon(float* a) {
|
| }
|
| }
|
|
|
| -static void cftmdl_128_neon(float* a) {
|
| +void cftmdl_128_neon(float* a) {
|
| int j;
|
| const int l = 8;
|
| const float32x4_t vec_swap_sign = vld1q_f32((float32_t*)k_swap_sign);
|
| @@ -185,7 +187,7 @@ __inline static float32x4_t reverse_order_f32x4(float32x4_t in) {
|
| return vrev64q_f32(rev);
|
| }
|
|
|
| -static void rftfsub_128_neon(float* a) {
|
| +void rftfsub_128_neon(float* a) {
|
| const float* c = rdft_w + 32;
|
| int j1, j2;
|
| const float32x4_t mm_half = vdupq_n_f32(0.5f);
|
| @@ -264,7 +266,7 @@ static void rftfsub_128_neon(float* a) {
|
| }
|
| }
|
|
|
| -static void rftbsub_128_neon(float* a) {
|
| +void rftbsub_128_neon(float* a) {
|
| const float* c = rdft_w + 32;
|
| int j1, j2;
|
| const float32x4_t mm_half = vdupq_n_f32(0.5f);
|
| @@ -274,11 +276,11 @@ static void rftbsub_128_neon(float* a) {
|
| // Note: commented number are indexes for the first iteration of the loop.
|
| for (j1 = 1, j2 = 2; j2 + 7 < 64; j1 += 4, j2 += 8) {
|
| // Load 'wk'.
|
| - const float32x4_t c_j1 = vld1q_f32(&c[j1]); // 1, 2, 3, 4,
|
| - const float32x4_t c_k1 = vld1q_f32(&c[29 - j1]); // 28, 29, 30, 31,
|
| - const float32x4_t wkrt = vsubq_f32(mm_half, c_k1); // 28, 29, 30, 31,
|
| - const float32x4_t wkr_ = reverse_order_f32x4(wkrt); // 31, 30, 29, 28,
|
| - const float32x4_t wki_ = c_j1; // 1, 2, 3, 4,
|
| + const float32x4_t c_j1 = vld1q_f32(&c[j1]); // 1, 2, 3, 4,
|
| + const float32x4_t c_k1 = vld1q_f32(&c[29 - j1]); // 28, 29, 30, 31,
|
| + const float32x4_t wkrt = vsubq_f32(mm_half, c_k1); // 28, 29, 30, 31,
|
| + const float32x4_t wkr_ = reverse_order_f32x4(wkrt); // 31, 30, 29, 28,
|
| + const float32x4_t wki_ = c_j1; // 1, 2, 3, 4,
|
| // Load and shuffle 'a'.
|
| // 2, 4, 6, 8, 3, 5, 7, 9
|
| float32x4x2_t a_j2_p = vld2q_f32(&a[0 + j2]);
|
| @@ -345,11 +347,6 @@ static void rftbsub_128_neon(float* a) {
|
| }
|
| a[65] = -a[65];
|
| }
|
| +#endif
|
|
|
| -void aec_rdft_init_neon(void) {
|
| - cft1st_128 = cft1st_128_neon;
|
| - cftmdl_128 = cftmdl_128_neon;
|
| - rftfsub_128 = rftfsub_128_neon;
|
| - rftbsub_128 = rftbsub_128_neon;
|
| -}
|
| -
|
| +} // namespace webrtc
|
|
|