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

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

Issue 2444283002: Moved the AGC render sample queue into the audio processing module (Closed)
Patch Set: Rebase Created 4 years, 2 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
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(
« no previous file with comments | « webrtc/modules/audio_processing/audio_processing_impl.h ('k') | webrtc/modules/audio_processing/gain_control_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698