OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
162 | 162 |
163 const auto mixer = AudioMixerImpl::Create(); | 163 const auto mixer = AudioMixerImpl::Create(); |
164 | 164 |
165 MockMixerAudioSource participants[kAudioSources]; | 165 MockMixerAudioSource participants[kAudioSources]; |
166 | 166 |
167 for (int i = 0; i < kAudioSources; ++i) { | 167 for (int i = 0; i < kAudioSources; ++i) { |
168 ResetFrame(participants[i].fake_frame()); | 168 ResetFrame(participants[i].fake_frame()); |
169 | 169 |
170 // We set the 80-th sample value since the first 80 samples may be | 170 // We set the 80-th sample value since the first 80 samples may be |
171 // modified by a ramped-in window. | 171 // modified by a ramped-in window. |
172 participants[i].fake_frame()->data_[80] = i; | 172 participants[i].fake_frame()->mutable_data()[80] = i; |
173 | 173 |
174 EXPECT_TRUE(mixer->AddSource(&participants[i])); | 174 EXPECT_TRUE(mixer->AddSource(&participants[i])); |
175 EXPECT_CALL(participants[i], GetAudioFrameWithInfo(_, _)).Times(Exactly(1)); | 175 EXPECT_CALL(participants[i], GetAudioFrameWithInfo(_, _)).Times(Exactly(1)); |
176 } | 176 } |
177 | 177 |
178 // Last participant gives audio frame with passive VAD, although it has the | 178 // Last participant gives audio frame with passive VAD, although it has the |
179 // largest energy. | 179 // largest energy. |
180 participants[kAudioSources - 1].fake_frame()->vad_activity_ = | 180 participants[kAudioSources - 1].fake_frame()->vad_activity_ = |
181 AudioFrame::kVadPassive; | 181 AudioFrame::kVadPassive; |
182 | 182 |
(...skipping 18 matching lines...) Expand all Loading... |
201 | 201 |
202 TEST(AudioMixer, FrameNotModifiedForSingleParticipant) { | 202 TEST(AudioMixer, FrameNotModifiedForSingleParticipant) { |
203 const auto mixer = AudioMixerImpl::Create(); | 203 const auto mixer = AudioMixerImpl::Create(); |
204 | 204 |
205 MockMixerAudioSource participant; | 205 MockMixerAudioSource participant; |
206 | 206 |
207 ResetFrame(participant.fake_frame()); | 207 ResetFrame(participant.fake_frame()); |
208 const size_t n_samples = participant.fake_frame()->samples_per_channel_; | 208 const size_t n_samples = participant.fake_frame()->samples_per_channel_; |
209 | 209 |
210 // Modify the frame so that it's not zero. | 210 // Modify the frame so that it's not zero. |
| 211 int16_t* fake_frame_data = participant.fake_frame()->mutable_data(); |
211 for (size_t j = 0; j < n_samples; ++j) { | 212 for (size_t j = 0; j < n_samples; ++j) { |
212 participant.fake_frame()->data_[j] = static_cast<int16_t>(j); | 213 fake_frame_data[j] = static_cast<int16_t>(j); |
213 } | 214 } |
214 | 215 |
215 EXPECT_TRUE(mixer->AddSource(&participant)); | 216 EXPECT_TRUE(mixer->AddSource(&participant)); |
216 EXPECT_CALL(participant, GetAudioFrameWithInfo(_, _)).Times(Exactly(2)); | 217 EXPECT_CALL(participant, GetAudioFrameWithInfo(_, _)).Times(Exactly(2)); |
217 | 218 |
218 AudioFrame audio_frame; | 219 AudioFrame audio_frame; |
219 // Two mix iteration to compare after the ramp-up step. | 220 // Two mix iteration to compare after the ramp-up step. |
220 for (int i = 0; i < 2; ++i) { | 221 for (int i = 0; i < 2; ++i) { |
221 mixer->Mix(1, // number of channels | 222 mixer->Mix(1, // number of channels |
222 &audio_frame); | 223 &audio_frame); |
223 } | 224 } |
224 | 225 |
225 EXPECT_EQ( | 226 EXPECT_EQ( |
226 0, memcmp(participant.fake_frame()->data_, audio_frame.data_, n_samples)); | 227 0, |
| 228 memcmp(participant.fake_frame()->data(), audio_frame.data(), n_samples)); |
227 } | 229 } |
228 | 230 |
229 TEST(AudioMixer, SourceAtNativeRateShouldNeverResample) { | 231 TEST(AudioMixer, SourceAtNativeRateShouldNeverResample) { |
230 const auto mixer = AudioMixerImpl::Create(); | 232 const auto mixer = AudioMixerImpl::Create(); |
231 | 233 |
232 MockMixerAudioSource audio_source; | 234 MockMixerAudioSource audio_source; |
233 ResetFrame(audio_source.fake_frame()); | 235 ResetFrame(audio_source.fake_frame()); |
234 | 236 |
235 mixer->AddSource(&audio_source); | 237 mixer->AddSource(&audio_source); |
236 | 238 |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
321 constexpr int kAudioSources = | 323 constexpr int kAudioSources = |
322 AudioMixerImpl::kMaximumAmountOfMixedAudioSources + 1; | 324 AudioMixerImpl::kMaximumAmountOfMixedAudioSources + 1; |
323 | 325 |
324 const auto mixer = AudioMixerImpl::Create(); | 326 const auto mixer = AudioMixerImpl::Create(); |
325 MockMixerAudioSource participants[kAudioSources]; | 327 MockMixerAudioSource participants[kAudioSources]; |
326 | 328 |
327 for (int i = 0; i < kAudioSources; ++i) { | 329 for (int i = 0; i < kAudioSources; ++i) { |
328 ResetFrame(participants[i].fake_frame()); | 330 ResetFrame(participants[i].fake_frame()); |
329 // Set the participant audio energy to increase with the index | 331 // Set the participant audio energy to increase with the index |
330 // |i|. | 332 // |i|. |
331 participants[i].fake_frame()->data_[0] = 100 * i; | 333 participants[i].fake_frame()->mutable_data()[0] = 100 * i; |
332 } | 334 } |
333 | 335 |
334 // Add all participants but the loudest for mixing. | 336 // Add all participants but the loudest for mixing. |
335 for (int i = 0; i < kAudioSources - 1; ++i) { | 337 for (int i = 0; i < kAudioSources - 1; ++i) { |
336 EXPECT_TRUE(mixer->AddSource(&participants[i])); | 338 EXPECT_TRUE(mixer->AddSource(&participants[i])); |
337 EXPECT_CALL(participants[i], GetAudioFrameWithInfo(kDefaultSampleRateHz, _)) | 339 EXPECT_CALL(participants[i], GetAudioFrameWithInfo(kDefaultSampleRateHz, _)) |
338 .Times(Exactly(1)); | 340 .Times(Exactly(1)); |
339 } | 341 } |
340 | 342 |
341 // First mixer iteration | 343 // First mixer iteration |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
437 AudioMixerImpl::kMaximumAmountOfMixedAudioSources + 1; | 439 AudioMixerImpl::kMaximumAmountOfMixedAudioSources + 1; |
438 | 440 |
439 std::vector<AudioFrame> frames(kAudioSources); | 441 std::vector<AudioFrame> frames(kAudioSources); |
440 for (auto& frame : frames) { | 442 for (auto& frame : frames) { |
441 ResetFrame(&frame); | 443 ResetFrame(&frame); |
442 } | 444 } |
443 | 445 |
444 std::vector<AudioMixer::Source::AudioFrameInfo> frame_info( | 446 std::vector<AudioMixer::Source::AudioFrameInfo> frame_info( |
445 kAudioSources, AudioMixer::Source::AudioFrameInfo::kNormal); | 447 kAudioSources, AudioMixer::Source::AudioFrameInfo::kNormal); |
446 frames[0].vad_activity_ = AudioFrame::kVadPassive; | 448 frames[0].vad_activity_ = AudioFrame::kVadPassive; |
447 std::fill(frames[0].data_, frames[0].data_ + kDefaultSampleRateHz / 100, | 449 int16_t* frame_data = frames[0].mutable_data(); |
| 450 std::fill(frame_data, frame_data + kDefaultSampleRateHz / 100, |
448 std::numeric_limits<int16_t>::max()); | 451 std::numeric_limits<int16_t>::max()); |
449 std::vector<bool> expected_status(kAudioSources, true); | 452 std::vector<bool> expected_status(kAudioSources, true); |
450 expected_status[0] = false; | 453 expected_status[0] = false; |
451 | 454 |
452 MixAndCompare(frames, frame_info, expected_status); | 455 MixAndCompare(frames, frame_info, expected_status); |
453 } | 456 } |
454 | 457 |
455 TEST(AudioMixer, UnmutedShouldMixBeforeLoud) { | 458 TEST(AudioMixer, UnmutedShouldMixBeforeLoud) { |
456 constexpr int kAudioSources = | 459 constexpr int kAudioSources = |
457 AudioMixerImpl::kMaximumAmountOfMixedAudioSources + 1; | 460 AudioMixerImpl::kMaximumAmountOfMixedAudioSources + 1; |
458 | 461 |
459 std::vector<AudioFrame> frames(kAudioSources); | 462 std::vector<AudioFrame> frames(kAudioSources); |
460 for (auto& frame : frames) { | 463 for (auto& frame : frames) { |
461 ResetFrame(&frame); | 464 ResetFrame(&frame); |
462 } | 465 } |
463 | 466 |
464 std::vector<AudioMixer::Source::AudioFrameInfo> frame_info( | 467 std::vector<AudioMixer::Source::AudioFrameInfo> frame_info( |
465 kAudioSources, AudioMixer::Source::AudioFrameInfo::kNormal); | 468 kAudioSources, AudioMixer::Source::AudioFrameInfo::kNormal); |
466 frame_info[0] = AudioMixer::Source::AudioFrameInfo::kMuted; | 469 frame_info[0] = AudioMixer::Source::AudioFrameInfo::kMuted; |
467 std::fill(frames[0].data_, frames[0].data_ + kDefaultSampleRateHz / 100, | 470 int16_t* frame_data = frames[0].mutable_data(); |
| 471 std::fill(frame_data, frame_data + kDefaultSampleRateHz / 100, |
468 std::numeric_limits<int16_t>::max()); | 472 std::numeric_limits<int16_t>::max()); |
469 std::vector<bool> expected_status(kAudioSources, true); | 473 std::vector<bool> expected_status(kAudioSources, true); |
470 expected_status[0] = false; | 474 expected_status[0] = false; |
471 | 475 |
472 MixAndCompare(frames, frame_info, expected_status); | 476 MixAndCompare(frames, frame_info, expected_status); |
473 } | 477 } |
474 | 478 |
475 TEST(AudioMixer, MixingRateShouldBeDecidedByRateCalculator) { | 479 TEST(AudioMixer, MixingRateShouldBeDecidedByRateCalculator) { |
476 constexpr int kOutputRate = 22000; | 480 constexpr int kOutputRate = 22000; |
477 const auto mixer = | 481 const auto mixer = |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
527 } | 531 } |
528 | 532 |
529 mixer->Mix(number_of_channels, &frame_for_mixing); | 533 mixer->Mix(number_of_channels, &frame_for_mixing); |
530 EXPECT_EQ(rate, frame_for_mixing.sample_rate_hz_); | 534 EXPECT_EQ(rate, frame_for_mixing.sample_rate_hz_); |
531 EXPECT_EQ(number_of_channels, frame_for_mixing.num_channels_); | 535 EXPECT_EQ(number_of_channels, frame_for_mixing.num_channels_); |
532 } | 536 } |
533 } | 537 } |
534 } | 538 } |
535 } | 539 } |
536 } // namespace webrtc | 540 } // namespace webrtc |
OLD | NEW |