text: /*
   *  Copyright (c) 2016 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_MODULES_AUDIO_PROCESSING_AEC_AEC_CORE_OPTIMIZED_METHODS_H_
  #define WEBRTC_MODULES_AUDIO_PROCESSING_AEC_AEC_CORE_OPTIMIZED_METHODS_H_
  
  #include <memory>
  
  #include "webrtc/modules/audio_processing/aec/aec_core.h"
  #include "webrtc/typedefs.h"
  
  namespace webrtc {
  
  typedef void (*WebRtcAecFilterFar)(
      int num_partitions,
      int x_fft_buf_block_pos,
      float x_fft_buf[2][kExtendedNumPartitions * PART_LEN1],
      float h_fft_buf[2][kExtendedNumPartitions * PART_LEN1],
      float y_fft[2][PART_LEN1]);
  extern WebRtcAecFilterFar WebRtcAec_FilterFar;
  typedef void (*WebRtcAecScaleErrorSignal)(float mu,
                                            float error_threshold,
                                            float x_pow[PART_LEN1],
                                            float ef[2][PART_LEN1]);
  extern WebRtcAecScaleErrorSignal WebRtcAec_ScaleErrorSignal;
  typedef void (*WebRtcAecFilterAdaptation)(
      int num_partitions,
      int x_fft_buf_block_pos,
      float x_fft_buf[2][kExtendedNumPartitions * PART_LEN1],
      float e_fft[2][PART_LEN1],
      float h_fft_buf[2][kExtendedNumPartitions * PART_LEN1]);
  extern WebRtcAecFilterAdaptation WebRtcAec_FilterAdaptation;
  
  typedef void (*WebRtcAecOverdrive)(float overdrive_scaling,
                                     const float hNlFb,
                                     float hNl[PART_LEN1]);
  extern WebRtcAecOverdrive WebRtcAec_Overdrive;
  
  typedef void (*WebRtcAecSuppress)(const float hNl[PART_LEN1],
                                    float efw[2][PART_LEN1]);
  extern WebRtcAecSuppress WebRtcAec_Suppress;
  
  typedef void (*WebRtcAecComputeCoherence)(const CoherenceState* coherence_state,
                                            float* cohde,
                                            float* cohxd);
  extern WebRtcAecComputeCoherence WebRtcAec_ComputeCoherence;
  
  typedef void (*WebRtcAecUpdateCoherenceSpectra)(int mult,
                                                  bool extended_filter_enabled,
                                                  float efw[2][PART_LEN1],
                                                  float dfw[2][PART_LEN1],
                                                  float xfw[2][PART_LEN1],
                                                  CoherenceState* coherence_state,
                                                  short* filter_divergence_state,
                                                  int* extreme_filter_divergence);
  extern WebRtcAecUpdateCoherenceSpectra WebRtcAec_UpdateCoherenceSpectra;
  
  typedef int (*WebRtcAecPartitionDelay)(
      int num_partitions,
      float h_fft_buf[2][kExtendedNumPartitions * PART_LEN1]);
  extern WebRtcAecPartitionDelay WebRtcAec_PartitionDelay;
  
  typedef void (*WebRtcAecStoreAsComplex)(const float* data,
                                          float data_complex[2][PART_LEN1]);
  extern WebRtcAecStoreAsComplex WebRtcAec_StoreAsComplex;
  
  typedef void (*WebRtcAecWindowData)(float* x_windowed, const float* x);
  extern WebRtcAecWindowData WebRtcAec_WindowData;
  
  }  // namespace webrtc
  
  #endif  // WEBRTC_MODULES_AUDIO_PROCESSING_AEC_AEC_CORE_OPTIMIZED_METHODS_H_
  