Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(299)

Unified Diff: webrtc/modules/audio_processing/gain_control_impl.cc

Issue 1801003002: Removed the dependency on AudioProcessingImpl in GainControlImpl (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/modules/audio_processing/gain_control_impl.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/modules/audio_processing/gain_control_impl.cc
diff --git a/webrtc/modules/audio_processing/gain_control_impl.cc b/webrtc/modules/audio_processing/gain_control_impl.cc
index 936a286cdbcb8309041748c548ac67b5606ef721..db1c585ca95962f5140e7430daedc1683ca21f8e 100644
--- a/webrtc/modules/audio_processing/gain_control_impl.cc
+++ b/webrtc/modules/audio_processing/gain_control_impl.cc
@@ -90,11 +90,9 @@ class GainControlImpl::GainController {
RTC_DISALLOW_COPY_AND_ASSIGN(GainController);
};
-GainControlImpl::GainControlImpl(const AudioProcessing* apm,
- rtc::CriticalSection* crit_render,
+GainControlImpl::GainControlImpl(rtc::CriticalSection* crit_render,
rtc::CriticalSection* crit_capture)
- : apm_(apm),
- crit_render_(crit_render),
+ : crit_render_(crit_render),
crit_capture_(crit_capture),
mode_(kAdaptiveAnalog),
minimum_capture_level_(0),
@@ -106,7 +104,6 @@ GainControlImpl::GainControlImpl(const AudioProcessing* apm,
was_analog_level_set_(false),
stream_is_saturated_(false),
render_queue_element_max_size_(0) {
- RTC_DCHECK(apm);
RTC_DCHECK(crit_render);
RTC_DCHECK(crit_capture);
}
@@ -159,8 +156,10 @@ void GainControlImpl::ReadQueuedRenderData() {
while (render_signal_queue_->Remove(&capture_queue_buffer_)) {
size_t buffer_index = 0;
+ RTC_DCHECK(num_proc_channels_);
+ RTC_DCHECK_LT(0ul, *num_proc_channels_);
const size_t num_frames_per_band =
- capture_queue_buffer_.size() / num_handles_required();
+ capture_queue_buffer_.size() / (*num_proc_channels_);
for (auto& gain_controller : gain_controllers_) {
WebRtcAgc_AddFarend(gain_controller->state(),
&capture_queue_buffer_[buffer_index],
@@ -178,9 +177,10 @@ int GainControlImpl::AnalyzeCaptureAudio(AudioBuffer* audio) {
return AudioProcessing::kNoError;
}
+ RTC_DCHECK(num_proc_channels_);
RTC_DCHECK_GE(160u, audio->num_frames_per_band());
- RTC_DCHECK_EQ(audio->num_channels(), num_handles_required());
- RTC_DCHECK_LE(num_handles_required(), gain_controllers_.size());
+ RTC_DCHECK_EQ(audio->num_channels(), *num_proc_channels_);
+ RTC_DCHECK_LE(*num_proc_channels_, gain_controllers_.size());
if (mode_ == kAdaptiveAnalog) {
int capture_channel = 0;
@@ -216,7 +216,8 @@ int GainControlImpl::AnalyzeCaptureAudio(AudioBuffer* audio) {
return AudioProcessing::kNoError;
}
-int GainControlImpl::ProcessCaptureAudio(AudioBuffer* audio) {
+int GainControlImpl::ProcessCaptureAudio(AudioBuffer* audio,
+ bool stream_has_echo) {
rtc::CritScope cs(crit_capture_);
if (!enabled_) {
@@ -227,8 +228,9 @@ int GainControlImpl::ProcessCaptureAudio(AudioBuffer* audio) {
return AudioProcessing::kStreamParameterNotSetError;
}
+ RTC_DCHECK(num_proc_channels_);
RTC_DCHECK_GE(160u, audio->num_frames_per_band());
- RTC_DCHECK_EQ(audio->num_channels(), num_handles_required());
+ RTC_DCHECK_EQ(audio->num_channels(), *num_proc_channels_);
stream_is_saturated_ = false;
int capture_channel = 0;
@@ -243,7 +245,7 @@ int GainControlImpl::ProcessCaptureAudio(AudioBuffer* audio) {
audio->num_bands(), audio->num_frames_per_band(),
audio->split_bands(capture_channel),
gain_controller->get_capture_level(), &capture_level_out,
- apm_->echo_cancellation()->stream_has_echo(), &saturation_warning);
+ stream_has_echo, &saturation_warning);
if (err != AudioProcessing::kNoError) {
return AudioProcessing::kUnspecifiedError;
@@ -257,6 +259,7 @@ int GainControlImpl::ProcessCaptureAudio(AudioBuffer* audio) {
++capture_channel;
}
+ RTC_DCHECK_LT(0ul, *num_proc_channels_);
if (mode_ == kAdaptiveAnalog) {
// Take the analog level to be the average across the handles.
analog_capture_level_ = 0;
@@ -264,7 +267,7 @@ int GainControlImpl::ProcessCaptureAudio(AudioBuffer* audio) {
analog_capture_level_ += gain_controller->get_capture_level();
}
- analog_capture_level_ /= num_handles_required();
+ analog_capture_level_ /= (*num_proc_channels_);
}
was_analog_level_set_ = false;
@@ -297,7 +300,10 @@ int GainControlImpl::Enable(bool enable) {
rtc::CritScope cs_capture(crit_capture_);
if (enable && !enabled_) {
enabled_ = enable; // Must be set before Initialize() is called.
- Initialize();
+
+ RTC_DCHECK(num_proc_channels_);
+ RTC_DCHECK(sample_rate_hz_);
+ Initialize(*num_proc_channels_, *sample_rate_hz_);
} else {
enabled_ = enable;
}
@@ -317,7 +323,9 @@ int GainControlImpl::set_mode(Mode mode) {
}
mode_ = mode;
- Initialize();
+ RTC_DCHECK(num_proc_channels_);
+ RTC_DCHECK(sample_rate_hz_);
+ Initialize(*num_proc_channels_, *sample_rate_hz_);
return AudioProcessing::kNoError;
}
@@ -344,7 +352,9 @@ int GainControlImpl::set_analog_level_limits(int minimum,
minimum_capture_level_ = minimum;
maximum_capture_level_ = maximum;
- Initialize();
+ RTC_DCHECK(num_proc_channels_);
+ RTC_DCHECK(sample_rate_hz_);
+ Initialize(*num_proc_channels_, *sample_rate_hz_);
return AudioProcessing::kNoError;
}
@@ -408,21 +418,24 @@ bool GainControlImpl::is_limiter_enabled() const {
return limiter_enabled_;
}
-void GainControlImpl::Initialize() {
+void GainControlImpl::Initialize(size_t num_proc_channels, int sample_rate_hz) {
rtc::CritScope cs_render(crit_render_);
rtc::CritScope cs_capture(crit_capture_);
+
+ num_proc_channels_ = rtc::Optional<size_t>(num_proc_channels);
+ sample_rate_hz_ = rtc::Optional<int>(sample_rate_hz);
+
if (!enabled_) {
return;
}
- int sample_rate_hz = apm_->proc_sample_rate_hz();
- gain_controllers_.resize(num_handles_required());
+ gain_controllers_.resize(*num_proc_channels_);
for (auto& gain_controller : gain_controllers_) {
if (!gain_controller) {
gain_controller.reset(new GainController());
}
gain_controller->Initialize(minimum_capture_level_, maximum_capture_level_,
- mode_, sample_rate_hz, analog_capture_level_);
+ mode_, *sample_rate_hz_, analog_capture_level_);
}
Configure();
@@ -431,13 +444,14 @@ void GainControlImpl::Initialize() {
}
void GainControlImpl::AllocateRenderQueue() {
- const size_t new_render_queue_element_max_size = std::max<size_t>(
- static_cast<size_t>(1),
- kMaxAllowedValuesOfSamplesPerFrame * num_handles_required());
-
rtc::CritScope cs_render(crit_render_);
rtc::CritScope cs_capture(crit_capture_);
+ RTC_DCHECK(num_proc_channels_);
+ const size_t new_render_queue_element_max_size = std::max<size_t>(
+ static_cast<size_t>(1),
+ kMaxAllowedValuesOfSamplesPerFrame * (*num_proc_channels_));
+
if (render_queue_element_max_size_ < new_render_queue_element_max_size) {
render_queue_element_max_size_ = new_render_queue_element_max_size;
std::vector<int16_t> template_queue_element(render_queue_element_max_size_);
@@ -477,9 +491,4 @@ int GainControlImpl::Configure() {
}
return error;
}
-
-size_t GainControlImpl::num_handles_required() const {
- // Not locked as it only relies on APM public API which is threadsafe.
- return apm_->num_proc_channels();
-}
} // namespace webrtc
« no previous file with comments | « webrtc/modules/audio_processing/gain_control_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698