/* * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ #ifndef WEBRTC_COMMON_AUDIO_SIGNAL_PROCESSING_INCLUDE_REAL_FFT_H_ #define WEBRTC_COMMON_AUDIO_SIGNAL_PROCESSING_INCLUDE_REAL_FFT_H_ #include "typedefs.h" struct RealFFT; #ifdef __cplusplus extern "C" { #endif typedef int (*RealForwardFFT)(struct RealFFT* self, const int16_t* data_in, int16_t* data_out); typedef int (*RealInverseFFT)(struct RealFFT* self, const int16_t* data_in, int16_t* data_out); extern RealForwardFFT WebRtcSpl_RealForwardFFT; extern RealInverseFFT WebRtcSpl_RealInverseFFT; struct RealFFT* WebRtcSpl_CreateRealFFT(int order); void WebRtcSpl_FreeRealFFT(struct RealFFT* self); // TODO(kma): Implement FFT functions for real signals. // Compute the forward FFT for a complex signal of length 2^order. // Input Arguments: // self - pointer to preallocated and initialized FFT specification structure. // data_in - the input signal. // // Output Arguments: // data_out - the output signal; must be different to data_in. // // Return Value: // 0 - FFT calculation is successful. // -1 - Error // int WebRtcSpl_RealForwardFFTC(struct RealFFT* self, const int16_t* data_in, int16_t* data_out); #if (defined WEBRTC_DETECT_ARM_NEON) || (defined WEBRTC_ARCH_ARM_NEON) int WebRtcSpl_RealForwardFFTNeon(struct RealFFT* self, const int16_t* data_in, int16_t* data_out); #endif // Compute the inverse FFT for a complex signal of length 2^order. // Input Arguments: // self - pointer to preallocated and initialized FFT specification structure. // data_in - the input signal. // // Output Arguments: // data_out - the output signal; must be different to data_in. // // Return Value: // 0 or a positive number - a value that the elements in the |data_out| should // be shifted left with in order to get correct // physical values. // -1 - Error int WebRtcSpl_RealInverseFFTC(struct RealFFT* self, const int16_t* data_in, int16_t* data_out); #if (defined WEBRTC_DETECT_ARM_NEON) || (defined WEBRTC_ARCH_ARM_NEON) int WebRtcSpl_RealInverseFFTNeon(struct RealFFT* self, const int16_t* data_in, int16_t* data_out); #endif #ifdef __cplusplus } #endif #endif // WEBRTC_COMMON_AUDIO_SIGNAL_PROCESSING_INCLUDE_REAL_FFT_H_