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

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: Changed name NeededFrequncy -> PreferredSampleRate to match upstream change 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..1421df321e7ecd7c316c6e7757dd3167b36f0117 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(
+ AudioMixerImpl::SourceStatusList* const 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);
ivoc 2016/10/31 15:39:34 To get better error messages, I think the thing th
hlundin-webrtc 2016/10/31 15:48:25 I'm sure this applies to gtest macros, like EXPECT
+ RTC_DCHECK_LE(source_needed_frequency, APM::kSampleRate48kHz);
+ 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 = [this]() -> int {
+ rtc::CritScope lock(&crit_);
+ return CalculateMixingFrequency(&audio_source_list_);
+ }();
+
if (OutputFrequency() != sample_rate) {
SetOutputFrequency(sample_rate);
}

Powered by Google App Engine
This is Rietveld 408576698