blob: b5f1bcff5d4193917ed1c9d5650f5aae32970cf2 [file] [log] [blame]
andrew@webrtc.org04c50982015-03-19 20:06:29 +00001/*
2 * Copyright (c) 2015 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 COMMON_AUDIO_REAL_FOURIER_OOURA_H_
12#define COMMON_AUDIO_REAL_FOURIER_OOURA_H_
andrew@webrtc.org04c50982015-03-19 20:06:29 +000013
Yves Gerey988cc082018-10-23 12:03:01 +020014#include <stddef.h>
Jonas Olssona4d87372019-07-05 19:08:33 +020015
andrew@webrtc.org04c50982015-03-19 20:06:29 +000016#include <complex>
kwibergc2b785d2016-02-24 05:22:32 -080017#include <memory>
andrew@webrtc.org04c50982015-03-19 20:06:29 +000018
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020019#include "common_audio/real_fourier.h"
andrew@webrtc.org04c50982015-03-19 20:06:29 +000020
21namespace webrtc {
22
23class RealFourierOoura : public RealFourier {
24 public:
25 explicit RealFourierOoura(int fft_order);
Alex Loiko0520b0e2018-05-08 13:11:12 +020026 ~RealFourierOoura() override;
andrew@webrtc.org04c50982015-03-19 20:06:29 +000027
28 void Forward(const float* src, std::complex<float>* dest) const override;
29 void Inverse(const std::complex<float>* src, float* dest) const override;
30
Alex Loiko0520b0e2018-05-08 13:11:12 +020031 int order() const override;
andrew@webrtc.org04c50982015-03-19 20:06:29 +000032
33 private:
34 const int order_;
Peter Kastingdce40cf2015-08-24 14:52:23 -070035 const size_t length_;
36 const size_t complex_length_;
andrew@webrtc.org04c50982015-03-19 20:06:29 +000037 // These are work arrays for Ooura. The names are based on the comments in
38 // fft4g.c.
kwibergc2b785d2016-02-24 05:22:32 -080039 const std::unique_ptr<size_t[]> work_ip_;
40 const std::unique_ptr<float[]> work_w_;
andrew@webrtc.org04c50982015-03-19 20:06:29 +000041};
42
43} // namespace webrtc
44
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020045#endif // COMMON_AUDIO_REAL_FOURIER_OOURA_H_