Chromium Code Reviews| Index: webrtc/modules/audio_processing/audio_processing_impl.cc |
| diff --git a/webrtc/modules/audio_processing/audio_processing_impl.cc b/webrtc/modules/audio_processing/audio_processing_impl.cc |
| index 4ef4e6da6a307e6533e8ac9ddf39e888c2c52713..f6811d62de8f08c54fc677e976d3f1ab7aad86ac 100644 |
| --- a/webrtc/modules/audio_processing/audio_processing_impl.cc |
| +++ b/webrtc/modules/audio_processing/audio_processing_impl.cc |
| @@ -42,15 +42,6 @@ extern "C" { |
| #include "webrtc/system_wrappers/interface/logging.h" |
| #include "webrtc/system_wrappers/interface/metrics.h" |
| -#ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP |
| -// Files generated at build-time by the protobuf compiler. |
| -#ifdef WEBRTC_ANDROID_PLATFORM_BUILD |
| -#include "external/webrtc/webrtc/modules/audio_processing/debug.pb.h" |
| -#else |
| -#include "webrtc/audio_processing/debug.pb.h" |
| -#endif |
| -#endif // WEBRTC_AUDIOPROC_DEBUG_DUMP |
| - |
| #define RETURN_ON_ERR(expr) \ |
| do { \ |
| int err = (expr); \ |
| @@ -194,6 +185,7 @@ AudioProcessingImpl::AudioProcessingImpl(const Config& config, |
| #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP |
| debug_file_(FileWrapper::Create()), |
| event_msg_(new audioproc::Event()), |
| + config_(new audioproc::Config()), |
| #endif |
| api_format_({{{kSampleRate16kHz, 1, false}, |
| {kSampleRate16kHz, 1, false}, |
| @@ -250,6 +242,10 @@ AudioProcessingImpl::AudioProcessingImpl(const Config& config, |
| gain_control_for_new_agc_.reset(new GainControlForNewAgc(gain_control_)); |
| SetExtraOptions(config); |
| + |
| +#ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP |
| + UpdateCurrentConfig(); |
| +#endif |
| } |
| AudioProcessingImpl::~AudioProcessingImpl() { |
| @@ -560,6 +556,10 @@ int AudioProcessingImpl::ProcessStream(const float* const* src, |
| api_format_.input_stream().num_frames()); |
| #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP |
| + if (debug_file_->Open() && UpdateCurrentConfig()) { |
| + RETURN_ON_ERR(WriteConfigMessage()); |
| + } |
| + |
| if (debug_file_->Open()) { |
| event_msg_->set_type(audioproc::Event::STREAM); |
| audioproc::Stream* msg = event_msg_->mutable_stream(); |
| @@ -946,7 +946,13 @@ int AudioProcessingImpl::StartDebugRecording( |
| return kFileError; |
| } |
| - int err = WriteInitMessage(); |
| + UpdateCurrentConfig(); |
| + int err = WriteConfigMessage(); |
| + if (err != kNoError) { |
| + return err; |
| + } |
| + |
| + err = WriteInitMessage(); |
| if (err != kNoError) { |
| return err; |
| } |
| @@ -975,7 +981,13 @@ int AudioProcessingImpl::StartDebugRecording(FILE* handle) { |
| return kFileError; |
| } |
| - int err = WriteInitMessage(); |
| + UpdateCurrentConfig(); |
| + int err = WriteConfigMessage(); |
| + if (err != kNoError) { |
| + return err; |
| + } |
| + |
| + err = WriteInitMessage(); |
| if (err != kNoError) { |
| return err; |
| } |
| @@ -1255,6 +1267,152 @@ int AudioProcessingImpl::WriteInitMessage() { |
| return kNoError; |
| } |
| + |
| +bool AudioProcessingImpl::UpdateCurrentConfig() { |
|
peah-webrtc
2015/10/02 08:34:27
This function became very long (for good reasons)
minyue-webrtc
2015/10/02 09:01:42
also goes away per Andrew's suggestion
|
| + bool changed = false; |
| + |
| + // Acoustic echo canceler. |
| + { |
| + const bool value = echo_cancellation_->is_enabled(); |
| + if (!config_->has_aec_enabled() || value != config_->aec_enabled()) { |
| + config_->set_aec_enabled(value); |
| + changed = true; |
| + } |
| + } |
| + { |
| + const bool value = echo_cancellation_->is_delay_agnostic_enabled(); |
| + if (!config_->has_aec_delay_agnostic() || |
| + value != config_->aec_delay_agnostic()) { |
| + config_->set_aec_delay_agnostic(value); |
| + changed = true; |
| + } |
| + } |
| + { |
| + const bool value = echo_cancellation_->is_drift_compensation_enabled(); |
| + if (!config_->has_aec_drift_compensation() || |
| + value != config_->aec_drift_compensation()) { |
| + config_->set_aec_drift_compensation(value); |
| + changed = true; |
| + } |
| + } |
| + { |
| + const bool value = echo_cancellation_->is_extended_filter_enabled(); |
| + if (!config_->has_aec_extended_filter() || |
| + value != config_->aec_extended_filter()) { |
| + config_->set_aec_extended_filter(value); |
| + changed = true; |
| + } |
| + } |
| + { |
| + const int value = static_cast<int>(echo_cancellation_->suppression_level()); |
| + if (!config_->has_aec_suppression_level() || |
| + value != config_->aec_suppression_level()) { |
| + config_->set_aec_suppression_level(value); |
| + changed = true; |
| + } |
| + } |
| + |
| + // Mobile AEC. |
| + { |
| + const bool value = echo_control_mobile_->is_enabled(); |
| + if (!config_->has_aecm_enabled() || value != config_->aecm_enabled()) { |
| + config_->set_aecm_enabled(value); |
| + changed = true; |
| + } |
| + } |
| + { |
| + const bool value = echo_control_mobile_->is_comfort_noise_enabled(); |
| + if (!config_->has_aecm_comfort_noise() || |
| + value != config_->aecm_comfort_noise()) { |
| + config_->set_aecm_comfort_noise(value); |
| + changed = true; |
| + } |
| + } |
| + { |
| + const int value = static_cast<int>(echo_control_mobile_->routing_mode()); |
| + if (!config_->has_aecm_routing_mode() || |
| + value != config_->aecm_routing_mode()) { |
| + config_->set_aecm_routing_mode(value); |
| + changed = true; |
| + } |
| + } |
| + |
| + // Automatic gain controller. |
| + { |
| + const bool value = gain_control_->is_enabled(); |
| + if (!config_->has_agc_enabled() || value != config_->agc_enabled()) { |
| + config_->set_agc_enabled(value); |
| + changed = true; |
| + } |
| + } |
| + { |
| + const bool value = use_new_agc_; |
| + if (!config_->has_agc_experiment() || value != config_->agc_experiment()) { |
| + config_->set_agc_experiment(value); |
| + changed = true; |
| + } |
| + } |
| + { |
| + const int value = static_cast<int>(gain_control_->mode()); |
| + if (!config_->has_agc_mode() || value != config_->agc_mode()) { |
| + config_->set_agc_mode(value); |
| + changed = true; |
| + } |
| + } |
| + { |
| + const bool value = gain_control_->is_limiter_enabled(); |
| + if (!config_->has_agc_limiter() || value != config_->agc_limiter()) { |
| + config_->set_agc_limiter(value); |
| + changed = true; |
| + } |
| + } |
| + |
| + // High pass filter. |
| + { |
| + const bool value = high_pass_filter_->is_enabled(); |
| + if (!config_->has_hpf_enabled() || value != config_->hpf_enabled()) { |
| + config_->set_hpf_enabled(value); |
| + changed = true; |
| + } |
| + } |
| + |
| + // Noise suppression. |
| + { |
| + const bool value = noise_suppression_->is_enabled(); |
| + if (!config_->has_ns_enabled() || value != config_->ns_enabled()) { |
| + config_->set_ns_enabled(value); |
| + changed = true; |
| + } |
| + } |
| + { |
| + const bool value = transient_suppressor_enabled_; |
| + if (!config_->has_ns_experiment() || value != config_->ns_experiment()) { |
| + config_->set_ns_experiment(value); |
| + changed = true; |
| + } |
| + } |
| + { |
| + const int value = static_cast<int>(noise_suppression_->level()); |
| + if (!config_->has_ns_level() || value != config_->ns_level()) { |
| + config_->set_ns_level(value); |
| + changed = true; |
| + } |
| + } |
| + |
| + return changed; |
| +} |
| + |
| +int AudioProcessingImpl::WriteConfigMessage() { |
| + event_msg_->set_type(audioproc::Event::CONFIG); |
| + event_msg_->mutable_config()->CopyFrom(*config_); |
| + |
| + int err = WriteMessageToDebugFile(); |
| + if (err != kNoError) { |
| + return err; |
| + } |
| + |
| + return kNoError; |
| +} |
| #endif // WEBRTC_AUDIOPROC_DEBUG_DUMP |
| } // namespace webrtc |