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 09e5d5be1cba9b20a8b8210c690c3c23e1dc7709..3fb5bef9e94f4a01ad59dc4234858f48f7e7c2ee 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,14 @@ struct Intelligibility { |
// Usage example, omitting error checking: |
// AudioProcessing* apm = AudioProcessing::Create(0); |
// |
+// AudioProcessing::Config config; |
+// config.level_controller.enable = true; |
+// bool config_ok = config.Validate(); |
+// RTC_DCHECK(config_ok); |
+// if (config_ok { |
the sun
2016/08/30 18:05:35
No. The client should not be burdened with validat
peah-webrtc
2016/08/31 08:08:32
Done.
|
+// apm->ApplyConfig(config); |
+// } |
+// |
// apm->high_pass_filter()->Enable(true); |
// |
// apm->echo_cancellation()->enable_drift_compensation(false); |
@@ -244,6 +244,25 @@ struct Intelligibility { |
// |
class AudioProcessing { |
public: |
+ // The struct below constitutes the new parameter scheme for the |
+ // audio processing functionality. It is being introduced gradually and |
+ // until it is fully introduced, it is prone to change. |
+ // |
+ // The parameters and behavior of the audio processing module are controlled |
+ // by changing the default values in the ApmConfig struct. It is possible |
the sun
2016/08/30 18:05:35
Update comment.
peah-webrtc
2016/08/31 08:08:31
Done.
|
+ // to verify the specified parameters by calling the IsOk method for each |
+ // substruct. The config are applied by passing the struct to the |
+ // ApplyConfig method in the audio processing interface. The IsOk() |
+ // method of the main struct calls all of the IsOk() methods in the |
+ // substructs. |
+ struct Config { |
+ struct LevelController { |
+ bool enabled = false; |
+ bool Validate() const; |
the sun
2016/08/30 18:05:35
Again, the *knowledge* about a sane state for each
peah-webrtc
2016/08/31 08:08:32
Done.
|
+ } level_controller; |
+ bool Validate() const; |
+ }; |
+ |
// TODO(mgraczyk): Remove once all methods that use ChannelLayout are gone. |
enum ChannelLayout { |
kMono, |
@@ -262,12 +281,16 @@ 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() {} |
+ // 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 bool ApplyConfig(const Config& config) = 0; |
the sun
2016/08/30 18:05:35
nit: Does it really belong before Initialize() ?
peah-webrtc
2016/08/31 08:08:31
Good point! I'll put it by SetExtraOptions
Done.
|
+ |
// Initializes internal states, while retaining all user settings. This |
// should be called before beginning to process a new audio stream. However, |
// it is not necessary to call before processing the first stream after |
@@ -302,7 +325,7 @@ class AudioProcessing { |
// 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? |