Added a query function for whether submodules are enabled

that can be called from the render side without making APM
singlethreaded.

This CL is addressing the problems with high render-side
call duration that were triggered by the CL
https://codereview.webrtc.org/1844583003

BUG=webrtc:5736

Review URL: https://codereview.webrtc.org/1859243002

Cr-Commit-Position: refs/heads/master@{#12266}
This commit is contained in:
peah 2016-04-06 09:30:58 -07:00 committed by Commit bot
parent 15c51e355f
commit dc2242d351
7 changed files with 38 additions and 3 deletions

View File

@ -1157,9 +1157,11 @@ bool AudioProcessingImpl::rev_synthesis_needed() const {
bool AudioProcessingImpl::rev_analysis_needed() const {
return formats_.rev_proc_format.sample_rate_hz() == kSampleRate32kHz &&
(is_rev_processed() ||
public_submodules_->echo_cancellation->is_enabled() ||
public_submodules_->echo_control_mobile->is_enabled() ||
public_submodules_->gain_control->is_enabled());
public_submodules_->echo_cancellation
->is_enabled_render_side_query() ||
public_submodules_->echo_control_mobile
->is_enabled_render_side_query() ||
public_submodules_->gain_control->is_enabled_render_side_query());
}
bool AudioProcessingImpl::render_check_rev_conversion_needed() const {

View File

@ -275,6 +275,12 @@ int EchoCancellationImpl::Enable(bool enable) {
return AudioProcessing::kNoError;
}
bool EchoCancellationImpl::is_enabled_render_side_query() const {
// TODO(peah): Add threadchecker.
rtc::CritScope cs_render(crit_render_);
return enabled_;
}
bool EchoCancellationImpl::is_enabled() const {
rtc::CritScope cs(crit_capture_);
return enabled_;

View File

@ -48,6 +48,11 @@ class EchoCancellationImpl : public EchoCancellation {
bool is_extended_filter_enabled() const;
bool is_aec3_enabled() const;
// Checks whether the module is enabled. Must only be
// called from the render side of APM as otherwise
// deadlocks may occur.
bool is_enabled_render_side_query() const;
// Reads render side data that has been queued on the render call.
// Called holding the capture lock.
void ReadQueuedRenderData();

View File

@ -278,6 +278,12 @@ int EchoControlMobileImpl::Enable(bool enable) {
return AudioProcessing::kNoError;
}
bool EchoControlMobileImpl::is_enabled_render_side_query() const {
// TODO(peah): Add threadchecker.
rtc::CritScope cs_render(crit_render_);
return enabled_;
}
bool EchoControlMobileImpl::is_enabled() const {
rtc::CritScope cs(crit_capture_);
return enabled_;

View File

@ -43,6 +43,11 @@ class EchoControlMobileImpl : public EchoControlMobile {
size_t num_reverse_channels,
size_t num_output_channels);
// Checks whether the module is enabled. Must only be
// called from the render side of APM as otherwise
// deadlocks may occur.
bool is_enabled_render_side_query() const;
// Reads render side data that has been queued on the render call.
void ReadQueuedRenderData();

View File

@ -310,6 +310,12 @@ int GainControlImpl::Enable(bool enable) {
return AudioProcessing::kNoError;
}
bool GainControlImpl::is_enabled_render_side_query() const {
// TODO(peah): Add threadchecker.
rtc::CritScope cs(crit_render_);
return enabled_;
}
bool GainControlImpl::is_enabled() const {
rtc::CritScope cs(crit_capture_);
return enabled_;

View File

@ -43,6 +43,11 @@ class GainControlImpl : public GainControl {
bool is_limiter_enabled() const override;
Mode mode() const override;
// Checks whether the module is enabled. Must only be
// called from the render side of APM as otherwise
// deadlocks may occur.
bool is_enabled_render_side_query() const;
// Reads render side data that has been queued on the render call.
void ReadQueuedRenderData();