Index: webrtc/modules/audio_mixer/audio_mixer_impl_unittest.cc |
diff --git a/webrtc/modules/audio_mixer/audio_mixer_impl_unittest.cc b/webrtc/modules/audio_mixer/audio_mixer_impl_unittest.cc |
index e90dac1e70e9839f032da4db4f91b8eb0d002686..0234df5cc45cb39a3d37f1f48f62411239d28108 100644 |
--- a/webrtc/modules/audio_mixer/audio_mixer_impl_unittest.cc |
+++ b/webrtc/modules/audio_mixer/audio_mixer_impl_unittest.cc |
@@ -16,6 +16,7 @@ |
#include "webrtc/api/audio/audio_mixer.h" |
#include "webrtc/base/bind.h" |
+#include "webrtc/base/checks.h" |
#include "webrtc/base/thread.h" |
#include "webrtc/modules/audio_mixer/audio_mixer_impl.h" |
#include "webrtc/modules/audio_mixer/default_output_rate_calculator.h" |
@@ -78,7 +79,8 @@ class MockMixerAudioSource : public AudioMixer::Source { |
AudioFrame* audio_frame) { |
audio_frame->CopyFrom(fake_frame_); |
audio_frame->sample_rate_hz_ = sample_rate_hz; |
- audio_frame->samples_per_channel_ = sample_rate_hz / 100; |
+ audio_frame->samples_per_channel_ = |
+ rtc::CheckedDivExact(sample_rate_hz, 100); |
return fake_info(); |
} |
@@ -456,9 +458,10 @@ TEST(AudioMixer, UnmutedShouldMixBeforeLoud) { |
TEST(AudioMixer, MixingRateShouldBeDecidedByRateCalculator) { |
constexpr int kOutputRate = 22000; |
- const auto mixer = AudioMixerImpl::CreateWithOutputRateCalculator( |
+ const auto mixer = AudioMixerImpl::CreateWithOutputRateCalculatorAndLimiter( |
std::unique_ptr<OutputRateCalculator>( |
- new CustomRateCalculator(kOutputRate))); |
+ new CustomRateCalculator(kOutputRate)), |
+ true); |
MockMixerAudioSource audio_source; |
mixer->AddSource(&audio_source); |
ResetFrame(audio_source.fake_frame()); |
@@ -471,12 +474,46 @@ TEST(AudioMixer, MixingRateShouldBeDecidedByRateCalculator) { |
TEST(AudioMixer, ZeroSourceRateShouldBeDecidedByRateCalculator) { |
constexpr int kOutputRate = 8000; |
- const auto mixer = AudioMixerImpl::CreateWithOutputRateCalculator( |
+ const auto mixer = AudioMixerImpl::CreateWithOutputRateCalculatorAndLimiter( |
std::unique_ptr<OutputRateCalculator>( |
- new CustomRateCalculator(kOutputRate))); |
+ new CustomRateCalculator(kOutputRate)), |
+ true); |
mixer->Mix(1, &frame_for_mixing); |
EXPECT_EQ(kOutputRate, frame_for_mixing.sample_rate_hz_); |
} |
+ |
+TEST(AudioMixer, NoLimiterBasicApiCalls) { |
+ const auto mixer = AudioMixerImpl::CreateWithOutputRateCalculatorAndLimiter( |
+ std::unique_ptr<OutputRateCalculator>(new DefaultOutputRateCalculator()), |
+ false); |
+ mixer->Mix(1, &frame_for_mixing); |
+} |
+ |
+TEST(AudioMixer, AnyRateIsPossibleWithNoLimiter) { |
+ // No APM limiter means no AudioProcessing::NativeRate restriction |
+ // on mixing rate. The rate has to be divisible by 100 since we use |
+ // 10 ms frames, though. |
+ for (const auto rate : {8000, 20000, 24000, 32000, 44100}) { |
+ for (const size_t number_of_channels : {1, 2}) { |
+ for (const auto number_of_sources : {0, 1, 2, 3, 4}) { |
+ const auto mixer = |
hlundin-webrtc
2017/02/17 11:04:12
Please, use a SCOPED_TRACE to annotate which lap i
aleloi
2017/02/20 10:41:33
Done.
|
+ AudioMixerImpl::CreateWithOutputRateCalculatorAndLimiter( |
+ std::unique_ptr<OutputRateCalculator>( |
+ new CustomRateCalculator(rate)), |
+ false); |
+ |
+ std::vector<MockMixerAudioSource> sources(number_of_sources); |
+ for (auto& source : sources) { |
+ mixer->AddSource(&source); |
+ } |
+ |
+ mixer->Mix(number_of_channels, &frame_for_mixing); |
+ EXPECT_EQ(rate, frame_for_mixing.sample_rate_hz_); |
+ EXPECT_EQ(number_of_channels, frame_for_mixing.num_channels_); |
+ } |
+ } |
+ } |
+} |
} // namespace webrtc |