| Index: webrtc/modules/audio_processing/include/audio_processing.h
 | 
| diff --git a/webrtc/modules/audio_processing/include/audio_processing.h b/webrtc/modules/audio_processing/include/audio_processing.h
 | 
| index 44ff7327ffeb849184869c7bfadc921438093821..035fa32c7ad22121eb56d832ffc599a5602659d9 100644
 | 
| --- a/webrtc/modules/audio_processing/include/audio_processing.h
 | 
| +++ b/webrtc/modules/audio_processing/include/audio_processing.h
 | 
| @@ -91,14 +91,6 @@ struct RefinedAdaptiveFilter {
 | 
|    bool enabled;
 | 
|  };
 | 
|  
 | 
| -// Enables the adaptive level controller.
 | 
| -struct LevelControl {
 | 
| -  LevelControl() : enabled(false) {}
 | 
| -  explicit LevelControl(bool enabled) : enabled(enabled) {}
 | 
| -  static const ConfigOptionID identifier = ConfigOptionID::kLevelControl;
 | 
| -  bool enabled;
 | 
| -};
 | 
| -
 | 
|  // Enables delay-agnostic echo cancellation. This feature relies on internally
 | 
|  // estimated delays between the process and reverse streams, thus not relying
 | 
|  // on reported system delays. This configuration only applies to
 | 
| @@ -205,6 +197,10 @@ struct Intelligibility {
 | 
|  // Usage example, omitting error checking:
 | 
|  // AudioProcessing* apm = AudioProcessing::Create(0);
 | 
|  //
 | 
| +// AudioProcessing::Config config;
 | 
| +// config.level_controller.enabled = true;
 | 
| +// apm->ApplyConfig(config)
 | 
| +//
 | 
|  // apm->high_pass_filter()->Enable(true);
 | 
|  //
 | 
|  // apm->echo_cancellation()->enable_drift_compensation(false);
 | 
| @@ -244,14 +240,29 @@ struct Intelligibility {
 | 
|  //
 | 
|  class AudioProcessing {
 | 
|   public:
 | 
| +  // The struct below constitutes the new parameter scheme for the audio
 | 
| +  // processing. It is being introduced gradually and until it is fully
 | 
| +  // introduced, it is prone to change.
 | 
| +  // TODO(peah): Remove this comment once the new config scheme is fully rolled
 | 
| +  // out.
 | 
| +  //
 | 
| +  // The parameters and behavior of the audio processing module are controlled
 | 
| +  // by changing the default values in the AudioProcessing::Config struct.
 | 
| +  // The config is applied by passing the struct to the ApplyConfig method.
 | 
| +  struct Config {
 | 
| +    struct LevelController {
 | 
| +      bool enabled = false;
 | 
| +    } level_controller;
 | 
| +  };
 | 
| +
 | 
|    // TODO(mgraczyk): Remove once all methods that use ChannelLayout are gone.
 | 
|    enum ChannelLayout {
 | 
|      kMono,
 | 
|      // Left, right.
 | 
|      kStereo,
 | 
| -    // Mono, keyboard mic.
 | 
| +    // Mono, keyboard, and mic.
 | 
|      kMonoAndKeyboard,
 | 
| -    // Left, right, keyboard mic.
 | 
| +    // Left, right, keyboard, and mic.
 | 
|      kStereoAndKeyboard
 | 
|    };
 | 
|  
 | 
| @@ -262,9 +273,9 @@ class AudioProcessing {
 | 
|    // be one instance for every incoming stream.
 | 
|    static AudioProcessing* Create();
 | 
|    // Allows passing in an optional configuration at create-time.
 | 
| -  static AudioProcessing* Create(const Config& config);
 | 
| +  static AudioProcessing* Create(const webrtc::Config& config);
 | 
|    // Only for testing.
 | 
| -  static AudioProcessing* Create(const Config& config,
 | 
| +  static AudioProcessing* Create(const webrtc::Config& config,
 | 
|                                   NonlinearBeamformer* beamformer);
 | 
|    virtual ~AudioProcessing() {}
 | 
|  
 | 
| @@ -300,9 +311,13 @@ class AudioProcessing {
 | 
|                           ChannelLayout output_layout,
 | 
|                           ChannelLayout reverse_layout) = 0;
 | 
|  
 | 
| +  // TODO(peah): This method is a temporary solution used to take control
 | 
| +  // over the parameters in the audio processing module and is likely to change.
 | 
| +  virtual void ApplyConfig(const Config& config) = 0;
 | 
| +
 | 
|    // Pass down additional options which don't have explicit setters. This
 | 
|    // ensures the options are applied immediately.
 | 
| -  virtual void SetExtraOptions(const Config& config) = 0;
 | 
| +  virtual void SetExtraOptions(const webrtc::Config& config) = 0;
 | 
|  
 | 
|    // TODO(ajm): Only intended for internal use. Make private and friend the
 | 
|    // necessary classes?
 | 
| 
 |