blob: 0cdd6aa66f4ba0fad98ace859c81398cfeff67e4 [file] [log] [blame]
peah81b92912016-10-06 06:46:20 -07001/*
2 * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020011#ifndef MODULES_AUDIO_PROCESSING_UTILITY_OOURA_FFT_H_
12#define MODULES_AUDIO_PROCESSING_UTILITY_OOURA_FFT_H_
peah81b92912016-10-06 06:46:20 -070013
Niels Möllera12c42a2018-07-25 16:05:48 +020014#include "rtc_base/system/arch.h"
peah81b92912016-10-06 06:46:20 -070015
16namespace webrtc {
17
18#if defined(WEBRTC_ARCH_X86_FAMILY)
19void cft1st_128_SSE2(float* a);
20void cftmdl_128_SSE2(float* a);
21void rftfsub_128_SSE2(float* a);
22void rftbsub_128_SSE2(float* a);
23#endif
24
25#if defined(MIPS_FPU_LE)
26void cft1st_128_mips(float* a);
27void cftmdl_128_mips(float* a);
28void rftfsub_128_mips(float* a);
29void rftbsub_128_mips(float* a);
30#endif
31
32#if defined(WEBRTC_HAS_NEON)
33void cft1st_128_neon(float* a);
34void cftmdl_128_neon(float* a);
35void rftfsub_128_neon(float* a);
36void rftbsub_128_neon(float* a);
37#endif
38
39class OouraFft {
40 public:
41 OouraFft();
42 ~OouraFft();
43 void Fft(float* a) const;
44 void InverseFft(float* a) const;
45
46 private:
47 void cft1st_128(float* a) const;
48 void cftmdl_128(float* a) const;
49 void rftfsub_128(float* a) const;
50 void rftbsub_128(float* a) const;
51
52 void cftfsub_128(float* a) const;
53 void cftbsub_128(float* a) const;
54 void bitrv2_128(float* a) const;
55 bool use_sse2_;
56};
57
58} // namespace webrtc
59
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020060#endif // MODULES_AUDIO_PROCESSING_UTILITY_OOURA_FFT_H_