| Index: webrtc/modules/audio_mixer/test/audio_mixer_unittest.cc
|
| diff --git a/webrtc/modules/audio_mixer/test/audio_mixer_unittest.cc b/webrtc/modules/audio_mixer/test/audio_mixer_unittest.cc
|
| index 9c571a093a87efe868380ed26af34027fe2b3411..03994ad2c7d3ae79c995c009221ecc03ca85d000 100644
|
| --- a/webrtc/modules/audio_mixer/test/audio_mixer_unittest.cc
|
| +++ b/webrtc/modules/audio_mixer/test/audio_mixer_unittest.cc
|
| @@ -52,13 +52,12 @@ class MockMixerAudioSource : public AudioMixer::Source {
|
| public:
|
| MockMixerAudioSource()
|
| : fake_audio_frame_info_(AudioMixer::Source::AudioFrameInfo::kNormal) {
|
| - ON_CALL(*this, GetAudioFrameWithMuted(_, _))
|
| + ON_CALL(*this, GetAudioFrameWithMuted(_))
|
| .WillByDefault(
|
| Invoke(this, &MockMixerAudioSource::FakeAudioFrameWithMuted));
|
| }
|
|
|
| - MOCK_METHOD2(GetAudioFrameWithMuted,
|
| - AudioFrameWithMuted(const int32_t id, int sample_rate_hz));
|
| + MOCK_METHOD1(GetAudioFrameWithMuted, AudioFrameWithMuted(int sample_rate_hz));
|
|
|
| AudioFrame* fake_frame() { return &fake_frame_; }
|
| AudioFrameInfo fake_info() { return fake_audio_frame_info_; }
|
| @@ -69,8 +68,7 @@ class MockMixerAudioSource : public AudioMixer::Source {
|
| private:
|
| AudioFrame fake_frame_, fake_output_frame_;
|
| AudioFrameInfo fake_audio_frame_info_;
|
| - AudioFrameWithMuted FakeAudioFrameWithMuted(const int32_t id,
|
| - int sample_rate_hz) {
|
| + AudioFrameWithMuted FakeAudioFrameWithMuted(int sample_rate_hz) {
|
| fake_output_frame_.CopyFrom(fake_frame_);
|
| return {
|
| &fake_output_frame_, // audio_frame_pointer
|
| @@ -89,7 +87,7 @@ void MixAndCompare(
|
| RTC_DCHECK(frames.size() == frame_info.size());
|
| RTC_DCHECK(frame_info.size() == expected_status.size());
|
|
|
| - const std::unique_ptr<AudioMixerImpl> mixer(AudioMixerImpl::Create(kId));
|
| + const std::unique_ptr<AudioMixerImpl> mixer(AudioMixerImpl::Create());
|
| std::vector<MockMixerAudioSource> participants(num_audio_sources);
|
|
|
| for (int i = 0; i < num_audio_sources; i++) {
|
| @@ -99,8 +97,7 @@ void MixAndCompare(
|
|
|
| for (int i = 0; i < num_audio_sources; i++) {
|
| EXPECT_EQ(0, mixer->SetMixabilityStatus(&participants[i], true));
|
| - EXPECT_CALL(participants[i],
|
| - GetAudioFrameWithMuted(_, kDefaultSampleRateHz))
|
| + EXPECT_CALL(participants[i], GetAudioFrameWithMuted(kDefaultSampleRateHz))
|
| .Times(Exactly(1));
|
| }
|
|
|
| @@ -113,62 +110,11 @@ void MixAndCompare(
|
| }
|
| }
|
|
|
| -TEST(AudioMixer, AnonymousAndNamed) {
|
| - // Should not matter even if partipants are more than
|
| - // kMaximumAmountOfMixedAudioSources.
|
| - constexpr int kNamed = AudioMixer::kMaximumAmountOfMixedAudioSources + 1;
|
| - constexpr int kAnonymous = AudioMixer::kMaximumAmountOfMixedAudioSources + 1;
|
| -
|
| - const std::unique_ptr<AudioMixer> mixer(AudioMixer::Create(kId));
|
| -
|
| - MockMixerAudioSource named[kNamed];
|
| - MockMixerAudioSource anonymous[kAnonymous];
|
| -
|
| - for (int i = 0; i < kNamed; ++i) {
|
| - EXPECT_EQ(0, mixer->SetMixabilityStatus(&named[i], true));
|
| - EXPECT_TRUE(mixer->MixabilityStatus(named[i]));
|
| - }
|
| -
|
| - for (int i = 0; i < kAnonymous; ++i) {
|
| - // AudioSource must be registered before turning it into anonymous.
|
| - EXPECT_EQ(-1, mixer->SetAnonymousMixabilityStatus(&anonymous[i], true));
|
| - EXPECT_EQ(0, mixer->SetMixabilityStatus(&anonymous[i], true));
|
| - EXPECT_TRUE(mixer->MixabilityStatus(anonymous[i]));
|
| - EXPECT_FALSE(mixer->AnonymousMixabilityStatus(anonymous[i]));
|
| -
|
| - EXPECT_EQ(0, mixer->SetAnonymousMixabilityStatus(&anonymous[i], true));
|
| - EXPECT_TRUE(mixer->AnonymousMixabilityStatus(anonymous[i]));
|
| -
|
| - // Anonymous participants do not show status by MixabilityStatus.
|
| - EXPECT_FALSE(mixer->MixabilityStatus(anonymous[i]));
|
| - }
|
| -
|
| - for (int i = 0; i < kNamed; ++i) {
|
| - EXPECT_EQ(0, mixer->SetMixabilityStatus(&named[i], false));
|
| - EXPECT_FALSE(mixer->MixabilityStatus(named[i]));
|
| - }
|
| -
|
| - for (int i = 0; i < kAnonymous - 1; i++) {
|
| - EXPECT_EQ(0, mixer->SetAnonymousMixabilityStatus(&anonymous[i], false));
|
| - EXPECT_FALSE(mixer->AnonymousMixabilityStatus(anonymous[i]));
|
| -
|
| - // SetAnonymousMixabilityStatus(anonymous, false) moves anonymous to the
|
| - // named group.
|
| - EXPECT_TRUE(mixer->MixabilityStatus(anonymous[i]));
|
| - }
|
| -
|
| - // SetMixabilityStatus(anonymous, false) will remove anonymous from both
|
| - // anonymous and named groups.
|
| - EXPECT_EQ(0, mixer->SetMixabilityStatus(&anonymous[kAnonymous - 1], false));
|
| - EXPECT_FALSE(mixer->AnonymousMixabilityStatus(anonymous[kAnonymous - 1]));
|
| - EXPECT_FALSE(mixer->MixabilityStatus(anonymous[kAnonymous - 1]));
|
| -}
|
| -
|
| TEST(AudioMixer, LargestEnergyVadActiveMixed) {
|
| constexpr int kAudioSources =
|
| AudioMixer::kMaximumAmountOfMixedAudioSources + 3;
|
|
|
| - const std::unique_ptr<AudioMixerImpl> mixer(AudioMixerImpl::Create(kId));
|
| + const std::unique_ptr<AudioMixerImpl> mixer(AudioMixerImpl::Create());
|
|
|
| MockMixerAudioSource participants[kAudioSources];
|
|
|
| @@ -180,8 +126,7 @@ TEST(AudioMixer, LargestEnergyVadActiveMixed) {
|
| participants[i].fake_frame()->data_[80] = i;
|
|
|
| EXPECT_EQ(0, mixer->SetMixabilityStatus(&participants[i], true));
|
| - EXPECT_CALL(participants[i], GetAudioFrameWithMuted(_, _))
|
| - .Times(Exactly(1));
|
| + EXPECT_CALL(participants[i], GetAudioFrameWithMuted(_)).Times(Exactly(1));
|
| }
|
|
|
| // Last participant gives audio frame with passive VAD, although it has the
|
| @@ -209,35 +154,7 @@ TEST(AudioMixer, LargestEnergyVadActiveMixed) {
|
| }
|
|
|
| TEST(AudioMixer, FrameNotModifiedForSingleParticipant) {
|
| - const std::unique_ptr<AudioMixer> mixer(AudioMixer::Create(kId));
|
| -
|
| - MockMixerAudioSource participant;
|
| -
|
| - ResetFrame(participant.fake_frame());
|
| - const int n_samples = participant.fake_frame()->samples_per_channel_;
|
| -
|
| - // Modify the frame so that it's not zero.
|
| - for (int j = 0; j < n_samples; j++) {
|
| - participant.fake_frame()->data_[j] = j;
|
| - }
|
| -
|
| - EXPECT_EQ(0, mixer->SetMixabilityStatus(&participant, true));
|
| - EXPECT_CALL(participant, GetAudioFrameWithMuted(_, _)).Times(Exactly(2));
|
| -
|
| - AudioFrame audio_frame;
|
| - // Two mix iteration to compare after the ramp-up step.
|
| - for (int i = 0; i < 2; i++) {
|
| - mixer->Mix(kDefaultSampleRateHz,
|
| - 1, // number of channels
|
| - &audio_frame);
|
| - }
|
| -
|
| - EXPECT_EQ(
|
| - 0, memcmp(participant.fake_frame()->data_, audio_frame.data_, n_samples));
|
| -}
|
| -
|
| -TEST(AudioMixer, FrameNotModifiedForSingleAnonymousParticipant) {
|
| - const std::unique_ptr<AudioMixer> mixer(AudioMixer::Create(kId));
|
| + const std::unique_ptr<AudioMixer> mixer(AudioMixer::Create());
|
|
|
| MockMixerAudioSource participant;
|
|
|
| @@ -250,8 +167,7 @@ TEST(AudioMixer, FrameNotModifiedForSingleAnonymousParticipant) {
|
| }
|
|
|
| EXPECT_EQ(0, mixer->SetMixabilityStatus(&participant, true));
|
| - EXPECT_EQ(0, mixer->SetAnonymousMixabilityStatus(&participant, true));
|
| - EXPECT_CALL(participant, GetAudioFrameWithMuted(_, _)).Times(Exactly(2));
|
| + EXPECT_CALL(participant, GetAudioFrameWithMuted(_)).Times(Exactly(2));
|
|
|
| AudioFrame audio_frame;
|
| // Two mix iteration to compare after the ramp-up step.
|
| @@ -266,14 +182,14 @@ TEST(AudioMixer, FrameNotModifiedForSingleAnonymousParticipant) {
|
| }
|
|
|
| TEST(AudioMixer, ParticipantSampleRate) {
|
| - const std::unique_ptr<AudioMixer> mixer(AudioMixer::Create(kId));
|
| + const std::unique_ptr<AudioMixer> mixer(AudioMixer::Create());
|
|
|
| MockMixerAudioSource participant;
|
| ResetFrame(participant.fake_frame());
|
|
|
| EXPECT_EQ(0, mixer->SetMixabilityStatus(&participant, true));
|
| for (auto frequency : {8000, 16000, 32000, 48000}) {
|
| - EXPECT_CALL(participant, GetAudioFrameWithMuted(_, frequency))
|
| + EXPECT_CALL(participant, GetAudioFrameWithMuted(frequency))
|
| .Times(Exactly(1));
|
| participant.fake_frame()->sample_rate_hz_ = frequency;
|
| participant.fake_frame()->samples_per_channel_ = frequency / 100;
|
| @@ -283,77 +199,27 @@ TEST(AudioMixer, ParticipantSampleRate) {
|
| }
|
|
|
| TEST(AudioMixer, ParticipantNumberOfChannels) {
|
| - const std::unique_ptr<AudioMixer> mixer(AudioMixer::Create(kId));
|
| + const std::unique_ptr<AudioMixer> mixer(AudioMixer::Create());
|
|
|
| MockMixerAudioSource participant;
|
| ResetFrame(participant.fake_frame());
|
|
|
| EXPECT_EQ(0, mixer->SetMixabilityStatus(&participant, true));
|
| for (size_t number_of_channels : {1, 2}) {
|
| - EXPECT_CALL(participant, GetAudioFrameWithMuted(_, kDefaultSampleRateHz))
|
| + EXPECT_CALL(participant, GetAudioFrameWithMuted(kDefaultSampleRateHz))
|
| .Times(Exactly(1));
|
| mixer->Mix(kDefaultSampleRateHz, number_of_channels, &frame_for_mixing);
|
| EXPECT_EQ(number_of_channels, frame_for_mixing.num_channels_);
|
| }
|
| }
|
|
|
| -// Test that the volume is reported as zero when the mixer input
|
| -// comprises only zero values.
|
| -TEST(AudioMixer, LevelIsZeroWhenMixingZeroes) {
|
| - const std::unique_ptr<AudioMixer> mixer(AudioMixer::Create(kId));
|
| -
|
| - MockMixerAudioSource participant;
|
| - ResetFrame(participant.fake_frame());
|
| -
|
| - EXPECT_EQ(0, mixer->SetMixabilityStatus(&participant, true));
|
| - for (int i = 0; i < 11; i++) {
|
| - EXPECT_CALL(participant, GetAudioFrameWithMuted(_, kDefaultSampleRateHz))
|
| - .Times(Exactly(1));
|
| - mixer->Mix(kDefaultSampleRateHz, 1, &frame_for_mixing);
|
| - }
|
| -
|
| - EXPECT_EQ(0, mixer->GetOutputAudioLevel());
|
| - EXPECT_EQ(0, mixer->GetOutputAudioLevelFullRange());
|
| -}
|
| -
|
| -// Test that the reported volume is maximal when the mixer
|
| -// input comprises frames with maximal values.
|
| -TEST(AudioMixer, LevelIsMaximalWhenMixingMaximalValues) {
|
| - const std::unique_ptr<AudioMixer> mixer(AudioMixer::Create(kId));
|
| -
|
| - MockMixerAudioSource participant;
|
| - ResetFrame(participant.fake_frame());
|
| -
|
| - // Fill participant frame data with maximal sound.
|
| - std::fill(participant.fake_frame()->data_,
|
| - participant.fake_frame()->data_ + kDefaultSampleRateHz / 100,
|
| - std::numeric_limits<int16_t>::max());
|
| -
|
| - EXPECT_EQ(0, mixer->SetMixabilityStatus(&participant, true));
|
| -
|
| - // We do >10 iterations, because the audio level indicator only
|
| - // updates once every 10 calls.
|
| - for (int i = 0; i < 11; i++) {
|
| - EXPECT_CALL(participant, GetAudioFrameWithMuted(_, kDefaultSampleRateHz))
|
| - .Times(Exactly(1));
|
| - mixer->Mix(kDefaultSampleRateHz, 1, &frame_for_mixing);
|
| - }
|
| -
|
| - // 9 is the highest possible audio level
|
| - EXPECT_EQ(9, mixer->GetOutputAudioLevel());
|
| -
|
| - // 0x7fff = 32767 is the highest full range audio level.
|
| - EXPECT_EQ(std::numeric_limits<int16_t>::max(),
|
| - mixer->GetOutputAudioLevelFullRange());
|
| -}
|
| -
|
| // Maximal amount of participants are mixed one iteration, then
|
| // another participant with higher energy is added.
|
| TEST(AudioMixer, RampedOutSourcesShouldNotBeMarkedMixed) {
|
| constexpr int kAudioSources =
|
| AudioMixer::kMaximumAmountOfMixedAudioSources + 1;
|
|
|
| - const std::unique_ptr<AudioMixerImpl> mixer(AudioMixerImpl::Create(kId));
|
| + const std::unique_ptr<AudioMixerImpl> mixer(AudioMixerImpl::Create());
|
| MockMixerAudioSource participants[kAudioSources];
|
|
|
| for (int i = 0; i < kAudioSources; i++) {
|
| @@ -366,8 +232,7 @@ TEST(AudioMixer, RampedOutSourcesShouldNotBeMarkedMixed) {
|
| // Add all participants but the loudest for mixing.
|
| for (int i = 0; i < kAudioSources - 1; i++) {
|
| EXPECT_EQ(0, mixer->SetMixabilityStatus(&participants[i], true));
|
| - EXPECT_CALL(participants[i],
|
| - GetAudioFrameWithMuted(_, kDefaultSampleRateHz))
|
| + EXPECT_CALL(participants[i], GetAudioFrameWithMuted(kDefaultSampleRateHz))
|
| .Times(Exactly(1));
|
| }
|
|
|
| @@ -384,8 +249,7 @@ TEST(AudioMixer, RampedOutSourcesShouldNotBeMarkedMixed) {
|
| EXPECT_EQ(0,
|
| mixer->SetMixabilityStatus(&participants[kAudioSources - 1], true));
|
| for (int i = 0; i < kAudioSources; i++) {
|
| - EXPECT_CALL(participants[i],
|
| - GetAudioFrameWithMuted(_, kDefaultSampleRateHz))
|
| + EXPECT_CALL(participants[i], GetAudioFrameWithMuted(kDefaultSampleRateHz))
|
| .Times(Exactly(1));
|
| }
|
|
|
| @@ -411,7 +275,7 @@ TEST(AudioMixer, ConstructFromOtherThread) {
|
| init_thread->Start();
|
| std::unique_ptr<AudioMixer> mixer(
|
| init_thread->Invoke<std::unique_ptr<AudioMixer>>(
|
| - RTC_FROM_HERE, std::bind(&AudioMixer::Create, kId)));
|
| + RTC_FROM_HERE, &AudioMixer::Create));
|
| MockMixerAudioSource participant;
|
|
|
| ResetFrame(participant.fake_frame());
|
| @@ -421,12 +285,7 @@ TEST(AudioMixer, ConstructFromOtherThread) {
|
| RTC_FROM_HERE, rtc::Bind(&AudioMixer::SetMixabilityStatus,
|
| mixer.get(), &participant, true)));
|
|
|
| - EXPECT_EQ(
|
| - 0, participant_thread->Invoke<int>(
|
| - RTC_FROM_HERE, rtc::Bind(&AudioMixer::SetAnonymousMixabilityStatus,
|
| - mixer.get(), &participant, true)));
|
| -
|
| - EXPECT_CALL(participant, GetAudioFrameWithMuted(_, kDefaultSampleRateHz))
|
| + EXPECT_CALL(participant, GetAudioFrameWithMuted(kDefaultSampleRateHz))
|
| .Times(Exactly(1));
|
|
|
| // Do one mixer iteration
|
|
|