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 ace788efa02aff1efa2fd3c688c60d34c35b17ba..12b4c949046f08ddcc3f974d26024bea7e516b54 100644 |
--- a/webrtc/modules/audio_processing/audio_processing_impl.cc |
+++ b/webrtc/modules/audio_processing/audio_processing_impl.cc |
@@ -708,7 +708,6 @@ int AudioProcessingImpl::ProcessStream(const float* const* src, |
// getters that need the capture lock held when being called. |
rtc::CritScope cs_capture(&crit_capture_); |
EmptyQueuedRenderAudio(); |
- public_submodules_->gain_control->ReadQueuedRenderData(); |
if (!src || !dest) { |
return kNullPointerError; |
@@ -766,106 +765,143 @@ int AudioProcessingImpl::ProcessStream(const float* const* src, |
return kNoError; |
} |
-void AudioProcessingImpl::QueueRenderAudio(const AudioBuffer* audio) { |
+void AudioProcessingImpl::QueueRenderAudio(AudioBuffer* audio) { |
EchoCancellationImpl::PackRenderAudioBuffer(audio, num_output_channels(), |
num_reverse_channels(), |
- &float_render_queue_buffer_); |
+ &aec_render_queue_buffer_); |
RTC_DCHECK_GE(160u, audio->num_frames_per_band()); |
// Insert the samples into the queue. |
- if (!float_render_signal_queue_->Insert(&float_render_queue_buffer_)) { |
+ if (!aec_render_signal_queue_->Insert(&aec_render_queue_buffer_)) { |
// The data queue is full and needs to be emptied. |
EmptyQueuedRenderAudio(); |
// Retry the insert (should always work). |
- bool result = |
- float_render_signal_queue_->Insert(&float_render_queue_buffer_); |
+ bool result = aec_render_signal_queue_->Insert(&aec_render_queue_buffer_); |
RTC_DCHECK(result); |
} |
EchoControlMobileImpl::PackRenderAudioBuffer(audio, num_output_channels(), |
num_reverse_channels(), |
- &int16_render_queue_buffer_); |
+ &aecm_render_queue_buffer_); |
// Insert the samples into the queue. |
- if (!int16_render_signal_queue_->Insert(&int16_render_queue_buffer_)) { |
+ if (!aecm_render_signal_queue_->Insert(&aecm_render_queue_buffer_)) { |
// The data queue is full and needs to be emptied. |
EmptyQueuedRenderAudio(); |
// Retry the insert (should always work). |
- bool result = |
- int16_render_signal_queue_->Insert(&int16_render_queue_buffer_); |
+ bool result = aecm_render_signal_queue_->Insert(&aecm_render_queue_buffer_); |
RTC_DCHECK(result); |
} |
+ |
+ if (!constants_.use_experimental_agc) { |
+ GainControlImpl::PackRenderAudioBuffer(audio, &agc_render_queue_buffer_); |
+ // Insert the samples into the queue. |
+ if (!agc_render_signal_queue_->Insert(&agc_render_queue_buffer_)) { |
+ // The data queue is full and needs to be emptied. |
+ EmptyQueuedRenderAudio(); |
+ |
+ // Retry the insert (should always work). |
+ bool result = agc_render_signal_queue_->Insert(&agc_render_queue_buffer_); |
+ RTC_DCHECK(result); |
+ } |
+ } |
} |
void AudioProcessingImpl::AllocateRenderQueue() { |
- const size_t new_float_render_queue_element_max_size = |
+ const size_t new_aec_render_queue_element_max_size = |
std::max(static_cast<size_t>(1), |
kMaxAllowedValuesOfSamplesPerFrame * |
EchoCancellationImpl::NumCancellersRequired( |
num_output_channels(), num_reverse_channels())); |
- const size_t new_int16_render_queue_element_max_size = |
+ const size_t new_aecm_render_queue_element_max_size = |
std::max(static_cast<size_t>(1), |
kMaxAllowedValuesOfSamplesPerFrame * |
EchoControlMobileImpl::NumCancellersRequired( |
num_output_channels(), num_reverse_channels())); |
+ const size_t new_agc_render_queue_element_max_size = |
+ std::max(static_cast<size_t>(1), kMaxAllowedValuesOfSamplesPerFrame); |
+ |
// Reallocate the queues if the queue item sizes are too small to fit the |
// data to put in the queues. |
- if (float_render_queue_element_max_size_ < |
- new_float_render_queue_element_max_size) { |
- float_render_queue_element_max_size_ = |
- new_float_render_queue_element_max_size; |
+ if (aec_render_queue_element_max_size_ < |
+ new_aec_render_queue_element_max_size) { |
+ aec_render_queue_element_max_size_ = new_aec_render_queue_element_max_size; |
std::vector<float> template_queue_element( |
- float_render_queue_element_max_size_); |
+ aec_render_queue_element_max_size_); |
- float_render_signal_queue_.reset( |
+ aec_render_signal_queue_.reset( |
new SwapQueue<std::vector<float>, RenderQueueItemVerifier<float>>( |
kMaxNumFramesToBuffer, template_queue_element, |
RenderQueueItemVerifier<float>( |
- float_render_queue_element_max_size_))); |
+ aec_render_queue_element_max_size_))); |
+ |
+ aec_render_queue_buffer_.resize(aec_render_queue_element_max_size_); |
+ aec_capture_queue_buffer_.resize(aec_render_queue_element_max_size_); |
+ } else { |
+ aec_render_signal_queue_->Clear(); |
+ } |
+ |
+ if (aecm_render_queue_element_max_size_ < |
+ new_aecm_render_queue_element_max_size) { |
+ aecm_render_queue_element_max_size_ = |
+ new_aecm_render_queue_element_max_size; |
+ |
+ std::vector<int16_t> template_queue_element( |
+ aecm_render_queue_element_max_size_); |
+ |
+ aecm_render_signal_queue_.reset( |
+ new SwapQueue<std::vector<int16_t>, RenderQueueItemVerifier<int16_t>>( |
+ kMaxNumFramesToBuffer, template_queue_element, |
+ RenderQueueItemVerifier<int16_t>( |
+ aecm_render_queue_element_max_size_))); |
- float_render_queue_buffer_.resize(float_render_queue_element_max_size_); |
- float_capture_queue_buffer_.resize(float_render_queue_element_max_size_); |
+ aecm_render_queue_buffer_.resize(aecm_render_queue_element_max_size_); |
+ aecm_capture_queue_buffer_.resize(aecm_render_queue_element_max_size_); |
} else { |
- float_render_signal_queue_->Clear(); |
+ aecm_render_signal_queue_->Clear(); |
} |
- if (int16_render_queue_element_max_size_ < |
- new_int16_render_queue_element_max_size) { |
- int16_render_queue_element_max_size_ = |
- new_int16_render_queue_element_max_size; |
+ if (agc_render_queue_element_max_size_ < |
+ new_agc_render_queue_element_max_size) { |
+ agc_render_queue_element_max_size_ = new_agc_render_queue_element_max_size; |
std::vector<int16_t> template_queue_element( |
- int16_render_queue_element_max_size_); |
+ agc_render_queue_element_max_size_); |
- int16_render_signal_queue_.reset( |
+ agc_render_signal_queue_.reset( |
new SwapQueue<std::vector<int16_t>, RenderQueueItemVerifier<int16_t>>( |
kMaxNumFramesToBuffer, template_queue_element, |
RenderQueueItemVerifier<int16_t>( |
- int16_render_queue_element_max_size_))); |
+ agc_render_queue_element_max_size_))); |
- int16_render_queue_buffer_.resize(int16_render_queue_element_max_size_); |
- int16_capture_queue_buffer_.resize(int16_render_queue_element_max_size_); |
+ agc_render_queue_buffer_.resize(agc_render_queue_element_max_size_); |
+ agc_capture_queue_buffer_.resize(agc_render_queue_element_max_size_); |
} else { |
- int16_render_signal_queue_->Clear(); |
+ agc_render_signal_queue_->Clear(); |
} |
} |
void AudioProcessingImpl::EmptyQueuedRenderAudio() { |
rtc::CritScope cs_capture(&crit_capture_); |
- while (float_render_signal_queue_->Remove(&float_capture_queue_buffer_)) { |
+ while (aec_render_signal_queue_->Remove(&aec_capture_queue_buffer_)) { |
public_submodules_->echo_cancellation->ProcessRenderAudio( |
- float_capture_queue_buffer_); |
+ aec_capture_queue_buffer_); |
} |
- while (int16_render_signal_queue_->Remove(&int16_capture_queue_buffer_)) { |
+ while (aecm_render_signal_queue_->Remove(&aecm_capture_queue_buffer_)) { |
public_submodules_->echo_control_mobile->ProcessRenderAudio( |
- int16_capture_queue_buffer_); |
+ aecm_capture_queue_buffer_); |
+ } |
+ |
+ while (agc_render_signal_queue_->Remove(&agc_capture_queue_buffer_)) { |
+ public_submodules_->gain_control->ProcessRenderAudio( |
+ agc_capture_queue_buffer_); |
} |
} |
@@ -880,7 +916,6 @@ int AudioProcessingImpl::ProcessStream(AudioFrame* frame) { |
// as well. |
rtc::CritScope cs_capture(&crit_capture_); |
EmptyQueuedRenderAudio(); |
- public_submodules_->gain_control->ReadQueuedRenderData(); |
} |
if (!frame) { |
@@ -1242,10 +1277,6 @@ int AudioProcessingImpl::ProcessRenderStreamLocked() { |
#endif |
QueueRenderAudio(render_buffer); |
- if (!constants_.use_experimental_agc) { |
- RETURN_ON_ERR( |
- public_submodules_->gain_control->ProcessRenderAudio(render_buffer)); |
- } |
if (submodule_states_.RenderMultiBandProcessingActive() && |
SampleRateSupportsMultiBand( |