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

Unified Diff: webrtc/modules/audio_mixer/audio_mixer_impl.cc

Issue 2458703002: Changed mixing to be done at the minimal possible frequency. (Closed)
Patch Set: pointer to const -> const reference, added comment in api. Created 4 years, 1 month 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_mixer/audio_mixer_impl.cc
diff --git a/webrtc/modules/audio_mixer/audio_mixer_impl.cc b/webrtc/modules/audio_mixer/audio_mixer_impl.cc
index a7af8c33d74a85df86a237cb299f5dcd12ce97d0..6c3fbd5f8570efe893b1c6510c38bbdc6e5b7c4d 100644
--- a/webrtc/modules/audio_mixer/audio_mixer_impl.cc
+++ b/webrtc/modules/audio_mixer/audio_mixer_impl.cc
@@ -137,6 +137,32 @@ AudioMixerImpl::SourceStatusList::iterator FindSourceInList(
});
}
+// Rounds the maximal audio source frequency up to an APM-native
+// frequency.
+int CalculateMixingFrequency(
+ const AudioMixerImpl::SourceStatusList& audio_source_list) {
+ if (audio_source_list.empty()) {
+ return AudioMixerImpl::kDefaultFrequency;
+ }
+ using APM = AudioProcessing::NativeRate;
+ int maximal_frequency = 0;
+ for (const auto& source_status : audio_source_list) {
+ const int source_needed_frequency =
+ source_status->audio_source->PreferredSampleRate();
+ RTC_DCHECK_LE(APM::kSampleRate8kHz, source_needed_frequency);
+ RTC_DCHECK_LE(source_needed_frequency, APM::kSampleRate48kHz);
the sun 2016/11/01 08:51:29 nit: _GE and switch order makes for a nicer printo
hlundin-webrtc 2016/11/01 09:32:33 I challenge this, and provide supporting evidence.
+ maximal_frequency = std::max(maximal_frequency, source_needed_frequency);
+ }
+
+ static const std::vector<int> native_rates = {
+ APM::kSampleRate8kHz, APM::kSampleRate16kHz, APM::kSampleRate32kHz,
+ APM::kSampleRate48kHz};
+ const auto rounded_up_index = std::lower_bound(
+ native_rates.begin(), native_rates.end(), maximal_frequency);
+ RTC_DCHECK(rounded_up_index != native_rates.end());
+ return *rounded_up_index;
+}
+
} // namespace
AudioMixerImpl::AudioMixerImpl(std::unique_ptr<AudioProcessing> limiter)
@@ -186,12 +212,16 @@ rtc::scoped_refptr<AudioMixerImpl> AudioMixerImpl::Create() {
new rtc::RefCountedObject<AudioMixerImpl>(std::move(limiter)));
}
-void AudioMixerImpl::Mix(int sample_rate,
- size_t number_of_channels,
+void AudioMixerImpl::Mix(size_t number_of_channels,
AudioFrame* audio_frame_for_mixing) {
RTC_DCHECK(number_of_channels == 1 || number_of_channels == 2);
RTC_DCHECK_RUNS_SERIALIZED(&race_checker_);
+ const int sample_rate = [&]() {
the sun 2016/11/01 08:51:29 I think this is a dubious use of a lambda. The nee
hlundin-webrtc 2016/11/01 09:32:33 Acknowledged.
aleloi 2016/11/01 10:28:59 I'd like to keep it unless reviewers insist otherw
+ rtc::CritScope lock(&crit_);
+ return CalculateMixingFrequency(audio_source_list_);
+ }();
+
if (OutputFrequency() != sample_rate) {
SetOutputFrequency(sample_rate);
}
« no previous file with comments | « webrtc/modules/audio_mixer/audio_mixer_impl.h ('k') | webrtc/modules/audio_mixer/audio_mixer_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698