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

Unified Diff: webrtc/audio/audio_state_unittest.cc

Issue 2436033002: Replace AudioConferenceMixer with AudioMixer. (Closed)
Patch Set: Added mock mixer, merged audio state tests. 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
« no previous file with comments | « webrtc/audio/audio_receive_stream_unittest.cc ('k') | webrtc/audio/audio_transport_proxy.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/audio/audio_state_unittest.cc
diff --git a/webrtc/audio/audio_state_unittest.cc b/webrtc/audio/audio_state_unittest.cc
index 38485a88bf14665ce6b15d9a149cefec6513751f..05c5003459e94292af27d8eee45e289efb322e65 100644
--- a/webrtc/audio/audio_state_unittest.cc
+++ b/webrtc/audio/audio_state_unittest.cc
@@ -19,26 +19,65 @@ namespace webrtc {
namespace test {
namespace {
+const int kSampleRate = 8000;
+const int kNumberOfChannels = 1;
+const int kBytesPerSample = 2;
+
struct ConfigHelper {
- ConfigHelper() {
- EXPECT_CALL(voice_engine_,
- RegisterVoiceEngineObserver(testing::_)).WillOnce(testing::Return(0));
- EXPECT_CALL(voice_engine_,
- DeRegisterVoiceEngineObserver()).WillOnce(testing::Return(0));
- EXPECT_CALL(voice_engine_, audio_device_module());
- EXPECT_CALL(voice_engine_, audio_processing());
- EXPECT_CALL(voice_engine_, audio_transport());
-
- config_.voice_engine = &voice_engine_;
- config_.audio_mixer = AudioMixerImpl::Create();
+ ConfigHelper() : audio_mixer(AudioMixerImpl::Create()) {
+ EXPECT_CALL(mock_voice_engine, RegisterVoiceEngineObserver(testing::_))
+ .WillOnce(testing::Return(0));
+ EXPECT_CALL(mock_voice_engine, DeRegisterVoiceEngineObserver())
+ .WillOnce(testing::Return(0));
+ EXPECT_CALL(mock_voice_engine, audio_device_module())
+ .Times(testing::AtLeast(1));
+ EXPECT_CALL(mock_voice_engine, audio_processing())
+ .Times(testing::AtLeast(1));
+ EXPECT_CALL(mock_voice_engine, audio_transport())
+ .WillRepeatedly(testing::Return(&audio_transport));
+
+ auto device = static_cast<MockAudioDeviceModule*>(
+ voice_engine().audio_device_module());
+
+ // Populate the audio transport proxy pointer to the most recent
+ // transport connected to the Audio Device.
+ ON_CALL(*device, RegisterAudioCallback(testing::_))
+ .WillByDefault(testing::Invoke([this](AudioTransport* transport) {
+ registered_audio_transport = transport;
+ return 0;
+ }));
+
+ audio_state_config.voice_engine = &mock_voice_engine;
+ audio_state_config.audio_mixer = audio_mixer;
}
- AudioState::Config& config() { return config_; }
- MockVoiceEngine& voice_engine() { return voice_engine_; }
+ AudioState::Config& config() { return audio_state_config; }
+ MockVoiceEngine& voice_engine() { return mock_voice_engine; }
+ rtc::scoped_refptr<AudioMixer> mixer() { return audio_mixer; }
+ MockAudioTransport& original_audio_transport() { return audio_transport; }
+ AudioTransport* audio_transport_proxy() { return registered_audio_transport; }
private:
- testing::StrictMock<MockVoiceEngine> voice_engine_;
- AudioState::Config config_;
+ testing::StrictMock<MockVoiceEngine> mock_voice_engine;
+ AudioState::Config audio_state_config;
+ rtc::scoped_refptr<AudioMixer> audio_mixer;
+ MockAudioTransport audio_transport;
+ AudioTransport* registered_audio_transport = nullptr;
+};
+
+class FakeAudioSource : public AudioMixer::Source {
+ public:
+ // TODO(aleloi): Valid overrides commented out, because the gmock
+ // methods don't use any override declarations, and we want to avoid
+ // warnings from -Winconsistent-missing-override. See
+ // http://crbug.com/428099.
+ int Ssrc() const /*override*/ { return 0; }
+
+ int PreferredSampleRate() const /*override*/ { return kSampleRate; }
+
+ MOCK_METHOD2(GetAudioFrameWithInfo,
+ AudioFrameInfo(int sample_rate_hz, AudioFrame* audio_frame));
};
+
} // namespace
TEST(AudioStateTest, Create) {
@@ -84,38 +123,52 @@ TEST(AudioStateTest, TypingNoiseDetected) {
}
// Test that RecordedDataIsAvailable calls get to the original transport.
-TEST(AudioStateTest, RecordedAudioArrivesAtOriginalTransport) {
- using testing::_;
+TEST(AudioStateAudioPathTest, RecordedAudioArrivesAtOriginalTransport) {
+ ConfigHelper helper;
+ rtc::scoped_refptr<AudioState> audio_state =
+ AudioState::Create(helper.config());
+
+ // Setup completed. Ensure call of original transport is forwarded to new.
+ uint32_t new_mic_level;
+ EXPECT_CALL(
+ helper.original_audio_transport(),
+ RecordedDataIsAvailable(nullptr, kSampleRate / 100, kBytesPerSample,
+ kNumberOfChannels, kSampleRate, 0, 0, 0, false,
+ testing::Ref(new_mic_level)));
+
+ helper.audio_transport_proxy()->RecordedDataIsAvailable(
+ nullptr, kSampleRate / 100, kBytesPerSample, kNumberOfChannels,
+ kSampleRate, 0, 0, 0, false, new_mic_level);
+}
+
+TEST(AudioStateAudioPathTest,
+ QueryingProxyForAudioShouldResultInGetAudioCallOnMixerSource) {
ConfigHelper helper;
- auto& voice_engine = helper.voice_engine();
- auto device =
- static_cast<MockAudioDeviceModule*>(voice_engine.audio_device_module());
-
- AudioTransport* audio_transport_proxy = nullptr;
- ON_CALL(*device, RegisterAudioCallback(_))
- .WillByDefault(
- testing::Invoke([&audio_transport_proxy](AudioTransport* transport) {
- audio_transport_proxy = transport;
- return 0;
- }));
- MockAudioTransport original_audio_transport;
- ON_CALL(voice_engine, audio_transport())
- .WillByDefault(testing::Return(&original_audio_transport));
+ rtc::scoped_refptr<AudioState> audio_state =
+ AudioState::Create(helper.config());
+
+ FakeAudioSource fake_source;
- EXPECT_CALL(voice_engine, audio_device_module());
- std::unique_ptr<internal::AudioState> audio_state(
- new internal::AudioState(helper.config()));
+ helper.mixer()->AddSource(&fake_source);
- // Setup completed. Ensure call of old transport is forwarded to new.
- uint32_t new_mic_level;
- EXPECT_CALL(original_audio_transport,
- RecordedDataIsAvailable(nullptr, 80, 2, 1, 8000, 0, 0, 0, false,
- testing::Ref(new_mic_level)));
+ EXPECT_CALL(fake_source, GetAudioFrameWithInfo(testing::_, testing::_))
+ .WillOnce(
+ testing::Invoke([](int sample_rate_hz, AudioFrame* audio_frame) {
+ audio_frame->sample_rate_hz_ = sample_rate_hz;
+ audio_frame->samples_per_channel_ = sample_rate_hz / 100;
+ audio_frame->num_channels_ = kNumberOfChannels;
+ return AudioMixer::Source::AudioFrameInfo::kNormal;
+ }));
- audio_transport_proxy->RecordedDataIsAvailable(nullptr, 80, 2, 1, 8000, 0, 0,
- 0, false, new_mic_level);
+ int16_t audio_buffer[kSampleRate / 100 * kNumberOfChannels];
+ size_t n_samples_out;
+ int64_t elapsed_time_ms;
+ int64_t ntp_time_ms;
+ helper.audio_transport_proxy()->NeedMorePlayData(
+ kSampleRate / 100, kBytesPerSample, kNumberOfChannels, kSampleRate,
+ audio_buffer, n_samples_out, &elapsed_time_ms, &ntp_time_ms);
}
} // namespace test
} // namespace webrtc
« no previous file with comments | « webrtc/audio/audio_receive_stream_unittest.cc ('k') | webrtc/audio/audio_transport_proxy.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698