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

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: Static constexpr array. 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..d7025f9e671279fc73bd7152f55663228c8a005a 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 NativeRate = 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(NativeRate::kSampleRate8kHz, source_needed_frequency);
+ RTC_DCHECK_LE(source_needed_frequency, NativeRate::kSampleRate48kHz);
+ maximal_frequency = std::max(maximal_frequency, source_needed_frequency);
+ }
+
+ static constexpr NativeRate native_rates[] = {
+ NativeRate::kSampleRate8kHz, NativeRate::kSampleRate16kHz,
+ NativeRate::kSampleRate32kHz, NativeRate::kSampleRate48kHz};
+ const auto rounded_up_index = std::lower_bound(
+ std::begin(native_rates), std::end(native_rates), maximal_frequency);
+ RTC_DCHECK(rounded_up_index != std::end(native_rates));
+ 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 = [&]() {
+ 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