diff --git a/src/voice_engine/main/test/auto_test/fakes/fake_media_process.h b/src/voice_engine/main/test/auto_test/fakes/fake_media_process.h new file mode 100644 index 0000000000..ee0ebd6d79 --- /dev/null +++ b/src/voice_engine/main/test/auto_test/fakes/fake_media_process.h @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +#ifndef FAKE_MEDIA_PROCESS_H_ +#define FAKE_MEDIA_PROCESS_H_ + +#include + +class FakeMediaProcess : public webrtc::VoEMediaProcess { + public: + virtual void Process(const int channel, + const webrtc::ProcessingTypes type, + WebRtc_Word16 audio_10ms[], + const int length, + const int sampling_freq_hz, + const bool stereo) { + for (int i = 0; i < length; i++) { + if (!stereo) { + audio_10ms[i] = static_cast(audio_10ms[i] * + sin(2.0 * 3.14 * frequency * 400.0 / sampling_freq_hz)); + } else { + // Interleaved stereo. + audio_10ms[2 * i] = static_cast ( + audio_10ms[2 * i] * sin(2.0 * 3.14 * + frequency * 400.0 / sampling_freq_hz)); + audio_10ms[2 * i + 1] = static_cast ( + audio_10ms[2 * i + 1] * sin(2.0 * 3.14 * + frequency * 400.0 / sampling_freq_hz)); + } + frequency++; + } + } + + private: + int frequency; +}; + +#endif // FAKE_MEDIA_PROCESS_H_ diff --git a/src/voice_engine/main/test/auto_test/fixtures/after_streaming_fixture.cc b/src/voice_engine/main/test/auto_test/fixtures/after_streaming_fixture.cc index e1a4820757..c12c806972 100644 --- a/src/voice_engine/main/test/auto_test/fixtures/after_streaming_fixture.cc +++ b/src/voice_engine/main/test/auto_test/fixtures/after_streaming_fixture.cc @@ -39,7 +39,7 @@ void AfterStreamingFixture::SwitchToManualMicrophone() { TEST_LOG("You need to speak manually into the microphone for this test.\n"); TEST_LOG("Please start speaking now.\n"); - Sleep(2000); + Sleep(1000); } void AfterStreamingFixture::RestartFakeMicrophone() { diff --git a/src/voice_engine/main/test/auto_test/standard/external_media_test.cc b/src/voice_engine/main/test/auto_test/standard/external_media_test.cc new file mode 100644 index 0000000000..559fada64e --- /dev/null +++ b/src/voice_engine/main/test/auto_test/standard/external_media_test.cc @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#include "voice_engine/main/interface/voe_external_media.h" +#include "voice_engine/main/test/auto_test/fakes/fake_media_process.h" +#include "voice_engine/main/test/auto_test/fixtures/after_streaming_fixture.h" + +class ExternalMediaTest : public AfterStreamingFixture { + protected: + void TestRegisterExternalMedia(int channel, webrtc::ProcessingTypes type) { + FakeMediaProcess fake_media_process; + EXPECT_EQ(0, voe_xmedia_->RegisterExternalMediaProcessing( + channel, type, fake_media_process)); + Sleep(2000); + + TEST_LOG("Back to normal.\n"); + EXPECT_EQ(0, voe_xmedia_->DeRegisterExternalMediaProcessing( + channel, type)); + Sleep(2000); + } +}; + +TEST_F(ExternalMediaTest, ManualCanRecordAndPlaybackUsingExternalPlayout) { + SwitchToManualMicrophone(); + + EXPECT_EQ(0, voe_base_->StopSend(channel_)); + EXPECT_EQ(0, voe_base_->StopPlayout(channel_)); + EXPECT_EQ(0, voe_xmedia_->SetExternalPlayoutStatus(true)); + EXPECT_EQ(0, voe_base_->StartPlayout(channel_)); + EXPECT_EQ(0, voe_base_->StartSend(channel_)); + + TEST_LOG("Recording data for 2 seconds starting now: please speak.\n"); + int16_t recording[32000]; + for (int i = 0; i < 200; i++) { + int sample_length = 0; + EXPECT_EQ(0, voe_xmedia_->ExternalPlayoutGetData( + &(recording[i * 160]), 16000, 100, sample_length)); + EXPECT_EQ(160, sample_length); + Sleep(10); + } + + EXPECT_EQ(0, voe_base_->StopSend(channel_)); + EXPECT_EQ(0, voe_base_->StopPlayout(channel_)); + EXPECT_EQ(0, voe_xmedia_->SetExternalPlayoutStatus(false)); + EXPECT_EQ(0, voe_base_->StartPlayout(channel_)); + EXPECT_EQ(0, voe_xmedia_->SetExternalRecordingStatus(true)); + EXPECT_EQ(0, voe_base_->StartSend(channel_)); + + TEST_LOG("Playing back recording, you should hear what you said earlier.\n"); + for (int i = 0; i < 200; i++) { + EXPECT_EQ(0, voe_xmedia_->ExternalRecordingInsertData( + &(recording[i * 160]), 160, 16000, 20)); + Sleep(10); + } + + EXPECT_EQ(0, voe_base_->StopSend(channel_)); + EXPECT_EQ(0, voe_xmedia_->SetExternalRecordingStatus(false)); +} + +TEST_F(ExternalMediaTest, + ManualRegisterExternalMediaProcessingOnAllChannelsAffectsPlayout) { + TEST_LOG("Enabling external media processing: audio should be affected.\n"); + TestRegisterExternalMedia(-1, webrtc::kPlaybackAllChannelsMixed); +} + +TEST_F(ExternalMediaTest, + ManualRegisterExternalMediaOnSingleChannelAffectsPlayout) { + TEST_LOG("Enabling external media processing: audio should be affected.\n"); + TestRegisterExternalMedia(channel_, webrtc::kRecordingPerChannel); +} + +TEST_F(ExternalMediaTest, + ManualRegisterExternalMediaOnAllChannelsMixedAffectsRecording) { + SwitchToManualMicrophone(); + TEST_LOG("Speak and verify your voice is distorted.\n"); + TestRegisterExternalMedia(-1, webrtc::kRecordingAllChannelsMixed); +} diff --git a/src/voice_engine/main/test/auto_test/voe_standard_test.cc b/src/voice_engine/main/test/auto_test/voe_standard_test.cc index ed05425a6c..bcbafb2068 100644 --- a/src/voice_engine/main/test/auto_test/voe_standard_test.cc +++ b/src/voice_engine/main/test/auto_test/voe_standard_test.cc @@ -188,31 +188,6 @@ void MyDeadOrAlive::OnPeriodicDeadOrAlive(const int /*channel*/, fflush(NULL); } -#ifdef WEBRTC_VOICE_ENGINE_EXTERNAL_MEDIA_API -void MyMedia::Process(const int channel, - const ProcessingTypes type, - WebRtc_Word16 audio_10ms[], - const int length, - const int samplingFreqHz, - const bool stereo) { - for (int i = 0; i < length; i++) { - if (!stereo) { - audio_10ms[i] = (WebRtc_Word16) (audio_10ms[i] * - sin(2.0 * 3.14 * f * 400.0 / samplingFreqHz)); - } else { - // interleaved stereo - audio_10ms[2 * i] = (WebRtc_Word16) (audio_10ms[2 * i] * - sin(2.0 * 3.14 * f * 400.0 / samplingFreqHz)); - audio_10ms[2 * i + 1] = (WebRtc_Word16) (audio_10ms[2 * i + 1] * - sin(2.0 * 3.14 * f * 400.0 / samplingFreqHz)); - } - f++; - } -} -#endif - -MyMedia mobj; - FakeExternalTransport::FakeExternalTransport(VoENetwork* ptr) : my_network_(ptr), thread_(NULL), @@ -942,100 +917,6 @@ int VoETestManager::DoStandardTest() { if (TestStartStreaming(channel0_transport) != 0) return -1; if (TestStartPlaying() != 0) return -1; - ////////////////// - // External media - -#ifdef _TEST_XMEDIA_ - TEST_LOG("\n\n+++ External media tests +++\n\n"); - -#ifdef WEBRTC_VOE_EXTERNAL_REC_AND_PLAYOUT - TEST_LOG("Stop playing file as microphone \n"); - TEST_LOG("==> Talk into the microphone \n"); - TEST_MUSTPASS(voe_file_->StopPlayingFileAsMicrophone(0)); - - TEST_LOG("Enabling external playout\n"); - TEST_MUSTPASS(voe_base_->StopSend(0)); - TEST_MUSTPASS(voe_base_->StopPlayout(0)); - TEST_MUSTPASS(voe_xmedia_->SetExternalPlayoutStatus(true)); - TEST_MUSTPASS(voe_base_->StartPlayout(0)); - TEST_MUSTPASS(voe_base_->StartSend(0)); - - TEST_LOG("Writing 2 secs of play data to vector\n"); - int getLen; - WebRtc_Word16 speechData[32000]; - for (int i = 0; i < 200; i++) { - TEST_MUSTPASS(voe_xmedia_->ExternalPlayoutGetData(speechData+i*160, - 16000, - 100, - getLen)); - TEST_MUSTPASS(160 != getLen); - SLEEP(10); - } - - TEST_LOG("Disabling external playout\n"); - TEST_MUSTPASS(voe_base_->StopSend(0)); - TEST_MUSTPASS(voe_base_->StopPlayout(0)); - TEST_MUSTPASS(voe_xmedia_->SetExternalPlayoutStatus(false)); - TEST_MUSTPASS(voe_base_->StartPlayout(0)); - - TEST_LOG("Enabling external recording\n"); - TEST_MUSTPASS(voe_xmedia_->SetExternalRecordingStatus(true)); - TEST_MUSTPASS(voe_base_->StartSend(0)); - - TEST_LOG("Inserting record data from vector\n"); - for (int i = 0; i < 200; i++) { - TEST_MUSTPASS(voe_xmedia_->ExternalRecordingInsertData(speechData+i*160, - 160, - 16000, - 20)); - SLEEP(10); - } - - TEST_LOG("Disabling external recording\n"); - TEST_MUSTPASS(voe_base_->StopSend(0)); - TEST_MUSTPASS(voe_xmedia_->SetExternalRecordingStatus(false)); - TEST_MUSTPASS(voe_base_->StartSend(0)); - - TEST_LOG("==> Start playing a file as microphone again \n"); - TEST_MUSTPASS(voe_file_->StartPlayingFileAsMicrophone(0, AudioFilename(), - true, true)); -#else - TEST_LOG("Skipping external rec and playout tests - \ - WEBRTC_VOE_EXTERNAL_REC_AND_PLAYOUT not defined \n"); -#endif // WEBRTC_VOE_EXTERNAL_REC_AND_PLAYOUT - TEST_LOG("Enabling playout external media processing => " - "played audio should now be affected \n"); - TEST_MUSTPASS(voe_xmedia_->RegisterExternalMediaProcessing( - -1, kPlaybackAllChannelsMixed, mobj)); - SLEEP(2000); - TEST_LOG("Back to normal again \n"); - TEST_MUSTPASS(voe_xmedia_->DeRegisterExternalMediaProcessing( - -1, kPlaybackAllChannelsMixed)); - SLEEP(2000); - // Note that we must do per channel here because PlayFileAsMicrophone - // is only done on ch 0. - TEST_LOG("Enabling recording external media processing => " - "played audio should now be affected \n"); - TEST_MUSTPASS(voe_xmedia_->RegisterExternalMediaProcessing( - 0, kRecordingPerChannel, mobj)); - SLEEP(2000); - TEST_LOG("Back to normal again \n"); - TEST_MUSTPASS(voe_xmedia_->DeRegisterExternalMediaProcessing( - 0, kRecordingPerChannel)); - SLEEP(2000); - TEST_LOG("Enabling recording external media processing => " - "speak and make sure that voice is affected \n"); - TEST_MUSTPASS(voe_xmedia_->RegisterExternalMediaProcessing( - -1, kRecordingAllChannelsMixed, mobj)); - SLEEP(2000); - TEST_LOG("Back to normal again \n"); - TEST_MUSTPASS(voe_xmedia_->DeRegisterExternalMediaProcessing( - -1, kRecordingAllChannelsMixed)); - SLEEP(2000); -#else - TEST_LOG("\n\n+++ External media tests NOT ENABLED +++\n"); -#endif // #ifdef _TEST_XMEDIA_ - ////////////////// // Stop streaming TEST_LOG("\n\n+++ Stop streaming +++\n\n"); diff --git a/src/voice_engine/main/test/auto_test/voe_standard_test.h b/src/voice_engine/main/test/auto_test/voe_standard_test.h index 4512e5dc58..ce4135fa8b 100644 --- a/src/voice_engine/main/test/auto_test/voe_standard_test.h +++ b/src/voice_engine/main/test/auto_test/voe_standard_test.h @@ -166,20 +166,6 @@ class RxCallback : public VoERxVadCallback { int _vadDecision; }; -#ifdef WEBRTC_VOICE_ENGINE_EXTERNAL_MEDIA_API -class MyMedia : public VoEMediaProcess { - public: - virtual void Process(const int channel, - const ProcessingTypes type, - WebRtc_Word16 audio_10ms[], - const int length, - const int samplingFreqHz, - const bool stereo); - private: - int f; -}; -#endif - class SubAPIManager { public: SubAPIManager() diff --git a/src/voice_engine/main/test/auto_test/voe_unit_test.cc b/src/voice_engine/main/test/auto_test/voe_unit_test.cc index 2c1e5c541f..d3a6e7293b 100644 --- a/src/voice_engine/main/test/auto_test/voe_unit_test.cc +++ b/src/voice_engine/main/test/auto_test/voe_unit_test.cc @@ -8,6 +8,8 @@ * be found in the AUTHORS file in the root of the source tree. */ +#include "voe_unit_test.h" + #include #include #include @@ -16,10 +18,9 @@ #include #endif -#include "voe_unit_test.h" - -#include "../../source/voice_engine_defines.h" -#include "thread_wrapper.h" +#include "system_wrappers/interface/thread_wrapper.h" +#include "voice_engine/main/source/voice_engine_defines.h" +#include "voice_engine/main/test/auto_test/fakes/fake_media_process.h" using namespace webrtc; @@ -180,7 +181,7 @@ void VoEUnitTest::SetStereoExternalEncryption(int channel, bool onOff, } // VoEVEMediaProcess -MyMedia mpobj; +FakeMediaProcess mpobj; // ---------------------------------------------------------------------------- // VoEUnitTest diff --git a/src/voice_engine/main/test/voice_engine_tests.gypi b/src/voice_engine/main/test/voice_engine_tests.gypi index 94f940a1e5..554e68ad26 100644 --- a/src/voice_engine/main/test/voice_engine_tests.gypi +++ b/src/voice_engine/main/test/voice_engine_tests.gypi @@ -42,6 +42,7 @@ 'auto_test/standard/codec_test.cc', 'auto_test/standard/dtmf_test.cc', 'auto_test/standard/encryption_test.cc', + 'auto_test/standard/external_media_test.cc', 'auto_test/standard/file_test.cc', 'auto_test/standard/hardware_before_initializing_test.cc', 'auto_test/standard/hardware_before_streaming_test.cc',