Streamline error handling and logging in the audio processing module
Bug: webrtc:8529
Change-Id: I40817d578c2c4106892e564df1bc734efcef5503
Reviewed-on: https://webrtc-review.googlesource.com/52540
Commit-Queue: Jonas Olsson <jonasolsson@webrtc.org>
Reviewed-by: Alex Loiko <aleloi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22034}
diff --git a/modules/audio_processing/aec3/adaptive_fir_filter.cc b/modules/audio_processing/aec3/adaptive_fir_filter.cc
index e080b4b..b3d8ca5 100644
--- a/modules/audio_processing/aec3/adaptive_fir_filter.cc
+++ b/modules/audio_processing/aec3/adaptive_fir_filter.cc
@@ -466,9 +466,9 @@
RTC_DCHECK_EQ(GetTimeDomainLength(max_size_partitions_), h_.capacity());
RTC_DCHECK_EQ(H_.size(), H2_.size());
RTC_DCHECK_EQ(h_.size(), GetTimeDomainLength(H_.size()));
+ RTC_DCHECK_LE(size, max_size_partitions_);
if (size > max_size_partitions_) {
- RTC_LOG(LS_ERROR) << "Too large adaptive filter size specificed: " << size;
size = max_size_partitions_;
}
diff --git a/modules/audio_processing/agc/agc.cc b/modules/audio_processing/agc/agc.cc
index 0c6478e..e161676 100644
--- a/modules/audio_processing/agc/agc.cc
+++ b/modules/audio_processing/agc/agc.cc
@@ -48,7 +48,7 @@
return 1.0f * num_clipped / length;
}
-int Agc::Process(const int16_t* audio, size_t length, int sample_rate_hz) {
+void Agc::Process(const int16_t* audio, size_t length, int sample_rate_hz) {
vad_.ProcessChunk(audio, length, sample_rate_hz);
const std::vector<double>& rms = vad_.chunkwise_rms();
const std::vector<double>& probabilities =
@@ -57,7 +57,6 @@
for (size_t i = 0; i < rms.size(); ++i) {
histogram_->Update(rms[i], probabilities[i]);
}
- return 0;
}
bool Agc::GetRmsErrorDb(int* error) {
diff --git a/modules/audio_processing/agc/agc.h b/modules/audio_processing/agc/agc.h
index 3a8d5c8..98bbf1f 100644
--- a/modules/audio_processing/agc/agc.h
+++ b/modules/audio_processing/agc/agc.h
@@ -31,7 +31,7 @@
virtual float AnalyzePreproc(const int16_t* audio, size_t length);
// |audio| must be mono; in a multi-channel stream, provide the first (usually
// left) channel.
- virtual int Process(const int16_t* audio, size_t length, int sample_rate_hz);
+ virtual void Process(const int16_t* audio, size_t length, int sample_rate_hz);
// Retrieves the difference between the target RMS level and the current
// signal RMS level in dB. Returns true if an update is available and false
diff --git a/modules/audio_processing/agc/agc_manager_direct.cc b/modules/audio_processing/agc/agc_manager_direct.cc
index 706d4ab..5ba5f4f 100644
--- a/modules/audio_processing/agc/agc_manager_direct.cc
+++ b/modules/audio_processing/agc/agc_manager_direct.cc
@@ -216,8 +216,8 @@
// gain is increased, through SetMaxLevel().
float clipped_ratio = agc_->AnalyzePreproc(audio, length);
if (clipped_ratio > kClippedRatioThreshold) {
- RTC_LOG(LS_INFO) << "[agc] Clipping detected. clipped_ratio="
- << clipped_ratio;
+ RTC_DLOG(LS_INFO) << "[agc] Clipping detected. clipped_ratio="
+ << clipped_ratio;
// Always decrease the maximum level, even if the current level is below
// threshold.
SetMaxLevel(std::max(clipped_level_min_, max_level_ - kClippedLevelStep));
@@ -249,10 +249,7 @@
CheckVolumeAndReset();
}
- if (agc_->Process(audio, length, sample_rate_hz) != 0) {
- RTC_LOG(LS_ERROR) << "Agc::Process failed";
- RTC_NOTREACHED();
- }
+ agc_->Process(audio, length, sample_rate_hz);
UpdateGain();
UpdateCompressor();
@@ -262,15 +259,12 @@
void AgcManagerDirect::SetLevel(int new_level) {
int voe_level = volume_callbacks_->GetMicVolume();
- if (voe_level < 0) {
- return;
- }
if (voe_level == 0) {
- RTC_LOG(LS_INFO)
+ RTC_DLOG(LS_INFO)
<< "[agc] VolumeCallbacks returned level=0, taking no action.";
return;
}
- if (voe_level > kMaxMicLevel) {
+ if (voe_level < 0 || voe_level > kMaxMicLevel) {
RTC_LOG(LS_ERROR) << "VolumeCallbacks returned an invalid level="
<< voe_level;
return;
@@ -278,8 +272,8 @@
if (voe_level > level_ + kLevelQuantizationSlack ||
voe_level < level_ - kLevelQuantizationSlack) {
- RTC_LOG(LS_INFO) << "[agc] Mic volume was manually adjusted. Updating "
- << "stored level from " << level_ << " to " << voe_level;
+ RTC_DLOG(LS_INFO) << "[agc] Mic volume was manually adjusted. Updating "
+ "stored level from " << level_ << " to " << voe_level;
level_ = voe_level;
// Always allow the user to increase the volume.
if (level_ > max_level_) {
@@ -298,9 +292,9 @@
}
volume_callbacks_->SetMicVolume(new_level);
- RTC_LOG(LS_INFO) << "[agc] voe_level=" << voe_level << ", "
- << "level_=" << level_ << ", "
- << "new_level=" << new_level;
+ RTC_DLOG(LS_INFO) << "[agc] voe_level=" << voe_level << ", "
+ << "level_=" << level_ << ", "
+ << "new_level=" << new_level;
level_ = new_level;
}
@@ -314,8 +308,8 @@
(kMaxMicLevel - clipped_level_min_) *
kSurplusCompressionGain +
0.5f);
- RTC_LOG(LS_INFO) << "[agc] max_level_=" << max_level_
- << ", max_compression_gain_=" << max_compression_gain_;
+ RTC_DLOG(LS_INFO) << "[agc] max_level_=" << max_level_
+ << ", max_compression_gain_=" << max_compression_gain_;
}
void AgcManagerDirect::SetCaptureMuted(bool muted) {
@@ -336,28 +330,26 @@
int AgcManagerDirect::CheckVolumeAndReset() {
int level = volume_callbacks_->GetMicVolume();
- if (level < 0) {
- return -1;
- }
// Reasons for taking action at startup:
// 1) A person starting a call is expected to be heard.
// 2) Independent of interpretation of |level| == 0 we should raise it so the
// AGC can do its job properly.
if (level == 0 && !startup_) {
- RTC_LOG(LS_INFO)
+ RTC_DLOG(LS_INFO)
<< "[agc] VolumeCallbacks returned level=0, taking no action.";
return 0;
}
- if (level > kMaxMicLevel) {
- RTC_LOG(LS_ERROR) << "VolumeCallbacks returned an invalid level=" << level;
+ if (level < 0 || level > kMaxMicLevel) {
+ RTC_LOG(LS_ERROR) << "[agc] VolumeCallbacks returned an invalid level="
+ << level;
return -1;
}
- RTC_LOG(LS_INFO) << "[agc] Initial GetMicVolume()=" << level;
+ RTC_DLOG(LS_INFO) << "[agc] Initial GetMicVolume()=" << level;
int minLevel = startup_ ? startup_min_level_ : kMinMicLevel;
if (level < minLevel) {
level = minLevel;
- RTC_LOG(LS_INFO) << "[agc] Initial volume too low, raising to " << level;
+ RTC_DLOG(LS_INFO) << "[agc] Initial volume too low, raising to " << level;
volume_callbacks_->SetMicVolume(level);
}
agc_->Reset();
@@ -409,9 +401,9 @@
const int residual_gain =
rtc::SafeClamp(rms_error - raw_compression, -kMaxResidualGainChange,
kMaxResidualGainChange);
- RTC_LOG(LS_INFO) << "[agc] rms_error=" << rms_error << ", "
- << "target_compression=" << target_compression_ << ", "
- << "residual_gain=" << residual_gain;
+ RTC_DLOG(LS_INFO) << "[agc] rms_error=" << rms_error
+ << ", target_compression=" << target_compression_
+ << ", residual_gain=" << residual_gain;
if (residual_gain == 0)
return;
diff --git a/modules/audio_processing/agc/agc_manager_direct_unittest.cc b/modules/audio_processing/agc/agc_manager_direct_unittest.cc
index 6a8af6a..1a03402 100644
--- a/modules/audio_processing/agc/agc_manager_direct_unittest.cc
+++ b/modules/audio_processing/agc/agc_manager_direct_unittest.cc
@@ -77,7 +77,7 @@
void CallProcess(int num_calls) {
for (int i = 0; i < num_calls; ++i) {
- EXPECT_CALL(*agc_, Process(_, _, _)).WillOnce(Return(0));
+ EXPECT_CALL(*agc_, Process(_, _, _)).WillOnce(Return());
manager_.Process(nullptr, kSamplesPerChannel, kSampleRateHz);
}
}
diff --git a/modules/audio_processing/agc/mock_agc.h b/modules/audio_processing/agc/mock_agc.h
index 36901af..b27d28c 100644
--- a/modules/audio_processing/agc/mock_agc.h
+++ b/modules/audio_processing/agc/mock_agc.h
@@ -21,8 +21,8 @@
class MockAgc : public Agc {
public:
MOCK_METHOD2(AnalyzePreproc, float(const int16_t* audio, size_t length));
- MOCK_METHOD3(Process, int(const int16_t* audio, size_t length,
- int sample_rate_hz));
+ MOCK_METHOD3(Process, void(const int16_t* audio, size_t length,
+ int sample_rate_hz));
MOCK_METHOD1(GetRmsErrorDb, bool(int* error));
MOCK_METHOD0(Reset, void());
MOCK_METHOD1(set_target_level_dbfs, int(int level));
diff --git a/modules/audio_processing/audio_processing_impl.cc b/modules/audio_processing/audio_processing_impl.cc
index 240d663..2c292f7 100644
--- a/modules/audio_processing/audio_processing_impl.cc
+++ b/modules/audio_processing/audio_processing_impl.cc
@@ -449,9 +449,8 @@
private_submodules_->gain_controller2.reset(new GainController2());
RTC_LOG(LS_INFO) << "Capture post processor activated: "
- << !!private_submodules_->capture_post_processor;
-
- RTC_LOG(LS_INFO) << "Render pre processor activated: "
+ << !!private_submodules_->capture_post_processor
+ << "\nRender pre processor activated: "
<< !!private_submodules_->render_pre_processor;
}
@@ -709,11 +708,10 @@
bool config_ok = LevelController::Validate(config_.level_controller);
if (!config_ok) {
- RTC_LOG(LS_ERROR) << "AudioProcessing module config error" << std::endl
- << "level_controller: "
+ RTC_LOG(LS_ERROR) << "AudioProcessing module config error\n"
+ "level_controller: "
<< LevelController::ToString(config_.level_controller)
- << std::endl
- << "Reverting to default parameter set";
+ << "\nReverting to default parameter set";
config_.level_controller = AudioProcessing::Config::LevelController();
}
@@ -743,11 +741,10 @@
config_ok = GainController2::Validate(config_.gain_controller2);
if (!config_ok) {
- RTC_LOG(LS_ERROR) << "AudioProcessing module config error" << std::endl
- << "Gain Controller 2: "
+ RTC_LOG(LS_ERROR) << "AudioProcessing module config error\n"
+ "Gain Controller 2: "
<< GainController2::ToString(config_.gain_controller2)
- << std::endl
- << "Reverting to default parameter set";
+ << "\nReverting to default parameter set";
config_.gain_controller2 = AudioProcessing::Config::GainController2();
}
InitializeGainController2();
diff --git a/modules/audio_processing/echo_control_mobile_impl.cc b/modules/audio_processing/echo_control_mobile_impl.cc
index ecb1810..0ff1bce 100644
--- a/modules/audio_processing/echo_control_mobile_impl.cc
+++ b/modules/audio_processing/echo_control_mobile_impl.cc
@@ -353,9 +353,9 @@
return;
}
- if (stream_properties_->sample_rate_hz > AudioProcessing::kSampleRate16kHz) {
- RTC_LOG(LS_ERROR) << "AECM only supports 16 kHz or lower sample rates";
- }
+ // AECM only supports 16 kHz or lower sample rates.
+ RTC_DCHECK_LE(stream_properties_->sample_rate_hz,
+ AudioProcessing::kSampleRate16kHz);
cancellers_.resize(
NumCancellersRequired(stream_properties_->num_output_channels,
diff --git a/modules/audio_processing/level_controller/level_controller.cc b/modules/audio_processing/level_controller/level_controller.cc
index 521f82e..b7854a0 100644
--- a/modules/audio_processing/level_controller/level_controller.cc
+++ b/modules/audio_processing/level_controller/level_controller.cc
@@ -156,21 +156,23 @@
const int frame_peak_level_dbfs = static_cast<int>(
10 * log10(frame_peak_level * frame_peak_level + 1e-10f) - kdBFSOffset);
- RTC_LOG(LS_INFO) << "Level Controller metrics: {"
- << "Max noise power: " << max_noise_power_dbfs << " dBFS, "
- << "Average noise power: " << average_noise_power_dbfs
- << " dBFS, "
- << "Max long term peak level: " << max_peak_level_dbfs
- << " dBFS, "
- << "Average long term peak level: "
- << average_peak_level_dbfs << " dBFS, "
- << "Max gain: " << max_gain_db << " dB, "
- << "Average gain: " << average_gain_db << " dB, "
- << "Long term peak level: " << long_term_peak_level_dbfs
- << " dBFS, "
- << "Last frame peak level: " << frame_peak_level_dbfs
- << " dBFS"
- << "}";
+ RTC_LOG(LS_INFO) << "Level Controller metrics: {Max noise power: "
+ << max_noise_power_dbfs
+ << " dBFS, Average noise power: "
+ << average_noise_power_dbfs
+ << " dBFS, Max long term peak level: "
+ << max_peak_level_dbfs
+ << " dBFS, Average long term peak level: "
+ << average_peak_level_dbfs
+ << " dBFS, Max gain: "
+ << max_gain_db
+ << " dB, Average gain: "
+ << average_gain_db
+ << " dB, Long term peak level: "
+ << long_term_peak_level_dbfs
+ << " dBFS, Last frame peak level: "
+ << frame_peak_level_dbfs
+ << " dBFS}";
Reset();
}
diff --git a/modules/audio_processing/residual_echo_detector.cc b/modules/audio_processing/residual_echo_detector.cc
index ef325a0..cef9b29 100644
--- a/modules/audio_processing/residual_echo_detector.cc
+++ b/modules/audio_processing/residual_echo_detector.cc
@@ -141,19 +141,19 @@
read_index -= kLookbackFrames;
}
RTC_DCHECK_LT(read_index, render_power_.size());
- RTC_LOG_F(LS_ERROR) << "Echo detector internal state: {"
- << "Echo likelihood: " << echo_likelihood_
- << ", Best Delay: " << best_delay << ", Covariance: "
- << covariances_[best_delay].covariance()
- << ", Last capture power: " << capture_power
- << ", Capture mean: " << capture_mean
- << ", Capture_standard deviation: "
- << capture_std_deviation << ", Last render power: "
- << render_power_[read_index]
- << ", Render mean: " << render_power_mean_[read_index]
- << ", Render standard deviation: "
- << render_power_std_dev_[read_index]
- << ", Reliability: " << reliability_ << "}";
+ RTC_LOG_F(LS_ERROR)
+ << "Echo detector internal state: {"
+ "Echo likelihood: " << echo_likelihood_
+ << ", Best Delay: " << best_delay
+ << ", Covariance: " << covariances_[best_delay].covariance()
+ << ", Last capture power: " << capture_power
+ << ", Capture mean: " << capture_mean
+ << ", Capture_standard deviation: " << capture_std_deviation
+ << ", Last render power: " << render_power_[read_index]
+ << ", Render mean: " << render_power_mean_[read_index]
+ << ", Render standard deviation: "
+ << render_power_std_dev_[read_index]
+ << ", Reliability: " << reliability_ << "}";
log_counter_++;
}
}
diff --git a/modules/audio_processing/transient/transient_suppression_test.cc b/modules/audio_processing/transient/transient_suppression_test.cc
index 3442ee0..14fe4f8 100644
--- a/modules/audio_processing/transient/transient_suppression_test.cc
+++ b/modules/audio_processing/transient/transient_suppression_test.cc
@@ -194,11 +194,9 @@
detection_buffer.get(),
reference_file,
reference_buffer.get())) {
- ASSERT_EQ(0,
- agc.Process(audio_buffer_i.get(),
- static_cast<int>(audio_buffer_size),
- FLAG_sample_rate_hz))
- << "The AGC could not process the frame";
+ agc.Process(audio_buffer_i.get(),
+ static_cast<int>(audio_buffer_size),
+ FLAG_sample_rate_hz);
for (size_t i = 0; i < FLAG_num_channels * audio_buffer_size; ++i) {
audio_buffer_f[i] = audio_buffer_i[i];