| Index: webrtc/modules/audio_processing/intelligibility/intelligibility_enhancer.h | 
| diff --git a/webrtc/modules/audio_processing/intelligibility/intelligibility_enhancer.h b/webrtc/modules/audio_processing/intelligibility/intelligibility_enhancer.h | 
| index 7f18be8c6e4ef7e428c5bb73331ed84408f9cf15..1a2ef23128adcb12d05e27398037a5119a2fc0fe 100644 | 
| --- a/webrtc/modules/audio_processing/intelligibility/intelligibility_enhancer.h | 
| +++ b/webrtc/modules/audio_processing/intelligibility/intelligibility_enhancer.h | 
| @@ -20,11 +20,9 @@ | 
|  | 
| #include "webrtc/base/scoped_ptr.h" | 
| #include "webrtc/common_audio/lapped_transform.h" | 
| +#include "webrtc/common_audio/channel_buffer.h" | 
| #include "webrtc/modules/audio_processing/intelligibility/intelligibility_utils.h" | 
|  | 
| -struct WebRtcVadInst; | 
| -typedef struct WebRtcVadInst VadInst; | 
| - | 
| namespace webrtc { | 
|  | 
| // Speech intelligibility enhancement module. Reads render and capture | 
| @@ -33,32 +31,45 @@ namespace webrtc { | 
| // Note: assumes speech and noise streams are already separated. | 
| class IntelligibilityEnhancer { | 
| public: | 
| -  // Construct a new instance with the given filter bank resolution, | 
| -  // sampling rate, number of channels and analysis rates. | 
| -  // |analysis_rate| sets the number of input blocks (containing speech!) | 
| -  // to elapse before a new gain computation is made. |variance_rate| specifies | 
| -  // the number of gain recomputations after which the variances are reset. | 
| -  // |cv_*| are parameters for the VarianceArray constructor for the | 
| -  // clear speech stream. | 
| -  // TODO(bercic): the |cv_*|, |*_rate| and |gain_limit| parameters should | 
| -  // probably go away once fine tuning is done. They override the internal | 
| -  // constants in the class (kGainChangeLimit, kAnalyzeRate, kVarianceRate). | 
| -  IntelligibilityEnhancer(int erb_resolution, | 
| -                          int sample_rate_hz, | 
| -                          int channels, | 
| -                          int cv_type, | 
| -                          float cv_alpha, | 
| -                          int cv_win, | 
| -                          int analysis_rate, | 
| -                          int variance_rate, | 
| -                          float gain_limit); | 
| -  ~IntelligibilityEnhancer(); | 
| +  struct Config { | 
| +    // |var_*| are parameters for the VarianceArray constructor for the | 
| +    // clear speech stream. | 
| +    // TODO(bercic): the |var_*|, |*_rate| and |gain_limit| parameters should | 
| +    // probably go away once fine tuning is done. | 
| +    Config() | 
| +        : sample_rate_hz(16000), | 
| +          num_capture_channels(1), | 
| +          num_render_channels(1), | 
| +          var_type(intelligibility::VarianceArray::kStepDecaying), | 
| +          var_decay_rate(0.9f), | 
| +          var_window_size(10), | 
| +          analysis_rate(800), | 
| +          gain_change_limit(0.1f), | 
| +          rho(0.02f) {} | 
| +    int sample_rate_hz; | 
| +    int num_capture_channels; | 
| +    int num_render_channels; | 
| +    intelligibility::VarianceArray::StepType var_type; | 
| +    float var_decay_rate; | 
| +    int var_window_size; | 
| +    int analysis_rate; | 
| +    float gain_change_limit; | 
| +    float rho; | 
| +  }; | 
| + | 
| +  explicit IntelligibilityEnhancer(const Config& config); | 
| +  IntelligibilityEnhancer();  // Initialize with default config. | 
|  | 
| // Reads and processes chunk of noise stream in time domain. | 
| -  void ProcessCaptureAudio(float* const* audio); | 
| +  void AnalyzeCaptureAudio(float* const* audio, | 
| +                           int sample_rate_hz, | 
| +                           int num_channels); | 
|  | 
| // Reads chunk of speech in time domain and updates with modified signal. | 
| -  void ProcessRenderAudio(float* const* audio); | 
| +  void ProcessRenderAudio(float* const* audio, | 
| +                          int sample_rate_hz, | 
| +                          int num_channels); | 
| +  bool active() const; | 
|  | 
| private: | 
| enum AudioSource { | 
| @@ -133,9 +144,12 @@ class IntelligibilityEnhancer { | 
| const int bank_size_;     // Num ERB filters. | 
| const int sample_rate_hz_; | 
| const int erb_resolution_; | 
| -  const int channels_;       // Num channels. | 
| +  const int num_capture_channels_; | 
| +  const int num_render_channels_; | 
| const int analysis_rate_;  // Num blocks before gains recalculated. | 
| -  const int variance_rate_;  // Num recalculations before history is cleared. | 
| + | 
| +  const bool active_;  // Whether render gains are being updated. | 
| +                       // TODO(ekm): Add logic for updating |active_|. | 
|  | 
| intelligibility::VarianceArray clear_variance_; | 
| intelligibility::VarianceArray noise_variance_; | 
| @@ -149,12 +163,11 @@ class IntelligibilityEnhancer { | 
| rtc::scoped_ptr<float[]> gains_eq_;  // Pre-filter modified gains. | 
| intelligibility::GainApplier gain_applier_; | 
|  | 
| -  // Destination buffer used to reassemble blocked chunks before overwriting | 
| +  // Destination buffers used to reassemble blocked chunks before overwriting | 
| // the original input array with modifications. | 
| -  // TODO(ekmeyerson): Switch to using ChannelBuffer. | 
| -  float** temp_out_buffer_; | 
| +  ChannelBuffer<float> temp_render_out_buffer_; | 
| +  ChannelBuffer<float> temp_capture_out_buffer_; | 
|  | 
| -  rtc::scoped_ptr<float* []> input_audio_; | 
| rtc::scoped_ptr<float[]> kbd_window_; | 
| TransformCallback render_callback_; | 
| TransformCallback capture_callback_; | 
| @@ -162,14 +175,6 @@ class IntelligibilityEnhancer { | 
| rtc::scoped_ptr<LappedTransform> capture_mangler_; | 
| int block_count_; | 
| int analysis_step_; | 
| - | 
| -  // TODO(bercic): Quick stopgap measure for voice detection in the clear | 
| -  // and noise streams. | 
| -  // Note: VAD currently does not affect anything in IntelligibilityEnhancer. | 
| -  VadInst* vad_high_; | 
| -  VadInst* vad_low_; | 
| -  rtc::scoped_ptr<int16_t[]> vad_tmp_buffer_; | 
| -  bool has_voice_low_;  // Whether voice detected in speech stream. | 
| }; | 
|  | 
| }  // namespace webrtc | 
|  |