| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2014 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 |
| 11 #include <string.h> | 11 #include <string.h> |
| 12 #include <vector> | 12 #include <vector> |
| 13 | 13 |
| 14 #include "testing/gtest/include/gtest/gtest.h" | 14 #include "testing/gtest/include/gtest/gtest.h" |
| 15 #include "webrtc/base/md5digest.h" | 15 #include "webrtc/base/md5digest.h" |
| 16 #include "webrtc/base/platform_thread.h" |
| 16 #include "webrtc/base/scoped_ptr.h" | 17 #include "webrtc/base/scoped_ptr.h" |
| 17 #include "webrtc/base/thread_annotations.h" | 18 #include "webrtc/base/thread_annotations.h" |
| 18 #include "webrtc/modules/audio_coding/codecs/audio_encoder.h" | 19 #include "webrtc/modules/audio_coding/codecs/audio_encoder.h" |
| 19 #include "webrtc/modules/audio_coding/codecs/g711/audio_decoder_pcm.h" | 20 #include "webrtc/modules/audio_coding/codecs/g711/audio_decoder_pcm.h" |
| 20 #include "webrtc/modules/audio_coding/codecs/g711/audio_encoder_pcm.h" | 21 #include "webrtc/modules/audio_coding/codecs/g711/audio_encoder_pcm.h" |
| 21 #include "webrtc/modules/audio_coding/codecs/isac/main/include/audio_encoder_isa
c.h" | 22 #include "webrtc/modules/audio_coding/codecs/isac/main/include/audio_encoder_isa
c.h" |
| 22 #include "webrtc/modules/audio_coding/codecs/mock/mock_audio_encoder.h" | 23 #include "webrtc/modules/audio_coding/codecs/mock/mock_audio_encoder.h" |
| 23 #include "webrtc/modules/audio_coding/main/acm2/acm_receive_test_oldapi.h" | 24 #include "webrtc/modules/audio_coding/main/acm2/acm_receive_test_oldapi.h" |
| 24 #include "webrtc/modules/audio_coding/main/acm2/acm_send_test_oldapi.h" | 25 #include "webrtc/modules/audio_coding/main/acm2/acm_send_test_oldapi.h" |
| 25 #include "webrtc/modules/audio_coding/main/include/audio_coding_module.h" | 26 #include "webrtc/modules/audio_coding/main/include/audio_coding_module.h" |
| 26 #include "webrtc/modules/audio_coding/main/include/audio_coding_module_typedefs.
h" | 27 #include "webrtc/modules/audio_coding/main/include/audio_coding_module_typedefs.
h" |
| 27 #include "webrtc/modules/audio_coding/neteq/audio_decoder_impl.h" | 28 #include "webrtc/modules/audio_coding/neteq/audio_decoder_impl.h" |
| 28 #include "webrtc/modules/audio_coding/neteq/mock/mock_audio_decoder.h" | 29 #include "webrtc/modules/audio_coding/neteq/mock/mock_audio_decoder.h" |
| 29 #include "webrtc/modules/audio_coding/neteq/tools/audio_checksum.h" | 30 #include "webrtc/modules/audio_coding/neteq/tools/audio_checksum.h" |
| 30 #include "webrtc/modules/audio_coding/neteq/tools/audio_loop.h" | 31 #include "webrtc/modules/audio_coding/neteq/tools/audio_loop.h" |
| 31 #include "webrtc/modules/audio_coding/neteq/tools/constant_pcm_packet_source.h" | 32 #include "webrtc/modules/audio_coding/neteq/tools/constant_pcm_packet_source.h" |
| 32 #include "webrtc/modules/audio_coding/neteq/tools/input_audio_file.h" | 33 #include "webrtc/modules/audio_coding/neteq/tools/input_audio_file.h" |
| 33 #include "webrtc/modules/audio_coding/neteq/tools/output_audio_file.h" | 34 #include "webrtc/modules/audio_coding/neteq/tools/output_audio_file.h" |
| 34 #include "webrtc/modules/audio_coding/neteq/tools/packet.h" | 35 #include "webrtc/modules/audio_coding/neteq/tools/packet.h" |
| 35 #include "webrtc/modules/audio_coding/neteq/tools/rtp_file_source.h" | 36 #include "webrtc/modules/audio_coding/neteq/tools/rtp_file_source.h" |
| 36 #include "webrtc/modules/include/module_common_types.h" | 37 #include "webrtc/modules/include/module_common_types.h" |
| 37 #include "webrtc/system_wrappers/include/clock.h" | 38 #include "webrtc/system_wrappers/include/clock.h" |
| 38 #include "webrtc/system_wrappers/include/critical_section_wrapper.h" | 39 #include "webrtc/system_wrappers/include/critical_section_wrapper.h" |
| 39 #include "webrtc/system_wrappers/include/event_wrapper.h" | 40 #include "webrtc/system_wrappers/include/event_wrapper.h" |
| 40 #include "webrtc/system_wrappers/include/sleep.h" | 41 #include "webrtc/system_wrappers/include/sleep.h" |
| 41 #include "webrtc/system_wrappers/include/thread_wrapper.h" | |
| 42 #include "webrtc/test/testsupport/fileutils.h" | 42 #include "webrtc/test/testsupport/fileutils.h" |
| 43 #include "webrtc/test/testsupport/gtest_disable.h" | 43 #include "webrtc/test/testsupport/gtest_disable.h" |
| 44 | 44 |
| 45 using ::testing::AtLeast; | 45 using ::testing::AtLeast; |
| 46 using ::testing::Invoke; | 46 using ::testing::Invoke; |
| 47 using ::testing::_; | 47 using ::testing::_; |
| 48 | 48 |
| 49 namespace webrtc { | 49 namespace webrtc { |
| 50 | 50 |
| 51 namespace { | 51 namespace { |
| (...skipping 398 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 450 | 450 |
| 451 // A multi-threaded test for ACM. This base class is using the PCM16b 16 kHz | 451 // A multi-threaded test for ACM. This base class is using the PCM16b 16 kHz |
| 452 // codec, while the derive class AcmIsacMtTest is using iSAC. | 452 // codec, while the derive class AcmIsacMtTest is using iSAC. |
| 453 class AudioCodingModuleMtTestOldApi : public AudioCodingModuleTestOldApi { | 453 class AudioCodingModuleMtTestOldApi : public AudioCodingModuleTestOldApi { |
| 454 protected: | 454 protected: |
| 455 static const int kNumPackets = 500; | 455 static const int kNumPackets = 500; |
| 456 static const int kNumPullCalls = 500; | 456 static const int kNumPullCalls = 500; |
| 457 | 457 |
| 458 AudioCodingModuleMtTestOldApi() | 458 AudioCodingModuleMtTestOldApi() |
| 459 : AudioCodingModuleTestOldApi(), | 459 : AudioCodingModuleTestOldApi(), |
| 460 send_thread_(ThreadWrapper::CreateThread(CbSendThread, this, "send")), | 460 send_thread_(PlatformThread::CreateThread(CbSendThread, this, "send")), |
| 461 insert_packet_thread_(ThreadWrapper::CreateThread( | 461 insert_packet_thread_(PlatformThread::CreateThread(CbInsertPacketThread, |
| 462 CbInsertPacketThread, this, "insert_packet")), | 462 this, |
| 463 pull_audio_thread_(ThreadWrapper::CreateThread( | 463 "insert_packet")), |
| 464 CbPullAudioThread, this, "pull_audio")), | 464 pull_audio_thread_(PlatformThread::CreateThread(CbPullAudioThread, |
| 465 this, |
| 466 "pull_audio")), |
| 465 test_complete_(EventWrapper::Create()), | 467 test_complete_(EventWrapper::Create()), |
| 466 send_count_(0), | 468 send_count_(0), |
| 467 insert_packet_count_(0), | 469 insert_packet_count_(0), |
| 468 pull_audio_count_(0), | 470 pull_audio_count_(0), |
| 469 crit_sect_(CriticalSectionWrapper::CreateCriticalSection()), | 471 crit_sect_(CriticalSectionWrapper::CreateCriticalSection()), |
| 470 next_insert_packet_time_ms_(0), | 472 next_insert_packet_time_ms_(0), |
| 471 fake_clock_(new SimulatedClock(0)) { | 473 fake_clock_(new SimulatedClock(0)) { |
| 472 clock_ = fake_clock_.get(); | 474 clock_ = fake_clock_.get(); |
| 473 } | 475 } |
| 474 | 476 |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 564 return true; | 566 return true; |
| 565 } | 567 } |
| 566 ++pull_audio_count_; | 568 ++pull_audio_count_; |
| 567 } | 569 } |
| 568 // Now we're not holding the crit sect when calling ACM. | 570 // Now we're not holding the crit sect when calling ACM. |
| 569 PullAudio(); | 571 PullAudio(); |
| 570 fake_clock_->AdvanceTimeMilliseconds(10); | 572 fake_clock_->AdvanceTimeMilliseconds(10); |
| 571 return true; | 573 return true; |
| 572 } | 574 } |
| 573 | 575 |
| 574 rtc::scoped_ptr<ThreadWrapper> send_thread_; | 576 rtc::scoped_ptr<PlatformThread> send_thread_; |
| 575 rtc::scoped_ptr<ThreadWrapper> insert_packet_thread_; | 577 rtc::scoped_ptr<PlatformThread> insert_packet_thread_; |
| 576 rtc::scoped_ptr<ThreadWrapper> pull_audio_thread_; | 578 rtc::scoped_ptr<PlatformThread> pull_audio_thread_; |
| 577 const rtc::scoped_ptr<EventWrapper> test_complete_; | 579 const rtc::scoped_ptr<EventWrapper> test_complete_; |
| 578 int send_count_; | 580 int send_count_; |
| 579 int insert_packet_count_; | 581 int insert_packet_count_; |
| 580 int pull_audio_count_ GUARDED_BY(crit_sect_); | 582 int pull_audio_count_ GUARDED_BY(crit_sect_); |
| 581 const rtc::scoped_ptr<CriticalSectionWrapper> crit_sect_; | 583 const rtc::scoped_ptr<CriticalSectionWrapper> crit_sect_; |
| 582 int64_t next_insert_packet_time_ms_ GUARDED_BY(crit_sect_); | 584 int64_t next_insert_packet_time_ms_ GUARDED_BY(crit_sect_); |
| 583 rtc::scoped_ptr<SimulatedClock> fake_clock_; | 585 rtc::scoped_ptr<SimulatedClock> fake_clock_; |
| 584 }; | 586 }; |
| 585 | 587 |
| 586 TEST_F(AudioCodingModuleMtTestOldApi, DISABLED_ON_IOS(DoTest)) { | 588 TEST_F(AudioCodingModuleMtTestOldApi, DISABLED_ON_IOS(DoTest)) { |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 694 class AcmReRegisterIsacMtTestOldApi : public AudioCodingModuleTestOldApi { | 696 class AcmReRegisterIsacMtTestOldApi : public AudioCodingModuleTestOldApi { |
| 695 protected: | 697 protected: |
| 696 static const int kRegisterAfterNumPackets = 5; | 698 static const int kRegisterAfterNumPackets = 5; |
| 697 static const int kNumPackets = 10; | 699 static const int kNumPackets = 10; |
| 698 static const int kPacketSizeMs = 30; | 700 static const int kPacketSizeMs = 30; |
| 699 static const int kPacketSizeSamples = kPacketSizeMs * 16; | 701 static const int kPacketSizeSamples = kPacketSizeMs * 16; |
| 700 | 702 |
| 701 AcmReRegisterIsacMtTestOldApi() | 703 AcmReRegisterIsacMtTestOldApi() |
| 702 : AudioCodingModuleTestOldApi(), | 704 : AudioCodingModuleTestOldApi(), |
| 703 receive_thread_( | 705 receive_thread_( |
| 704 ThreadWrapper::CreateThread(CbReceiveThread, this, "receive")), | 706 PlatformThread::CreateThread(CbReceiveThread, this, "receive")), |
| 705 codec_registration_thread_( | 707 codec_registration_thread_( |
| 706 ThreadWrapper::CreateThread(CbCodecRegistrationThread, | 708 PlatformThread::CreateThread(CbCodecRegistrationThread, |
| 707 this, | 709 this, |
| 708 "codec_registration")), | 710 "codec_registration")), |
| 709 test_complete_(EventWrapper::Create()), | 711 test_complete_(EventWrapper::Create()), |
| 710 crit_sect_(CriticalSectionWrapper::CreateCriticalSection()), | 712 crit_sect_(CriticalSectionWrapper::CreateCriticalSection()), |
| 711 codec_registered_(false), | 713 codec_registered_(false), |
| 712 receive_packet_count_(0), | 714 receive_packet_count_(0), |
| 713 next_insert_packet_time_ms_(0), | 715 next_insert_packet_time_ms_(0), |
| 714 fake_clock_(new SimulatedClock(0)) { | 716 fake_clock_(new SimulatedClock(0)) { |
| 715 AudioEncoderIsac::Config config; | 717 AudioEncoderIsac::Config config; |
| 716 config.payload_type = kPayloadType; | 718 config.payload_type = kPayloadType; |
| 717 isac_encoder_.reset(new AudioEncoderIsac(config)); | 719 isac_encoder_.reset(new AudioEncoderIsac(config)); |
| 718 clock_ = fake_clock_.get(); | 720 clock_ = fake_clock_.get(); |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 822 // Register the iSAC encoder. | 824 // Register the iSAC encoder. |
| 823 EXPECT_EQ(0, acm_->RegisterSendCodec(codec_)); | 825 EXPECT_EQ(0, acm_->RegisterSendCodec(codec_)); |
| 824 codec_registered_ = true; | 826 codec_registered_ = true; |
| 825 } | 827 } |
| 826 if (codec_registered_ && receive_packet_count_ > kNumPackets) { | 828 if (codec_registered_ && receive_packet_count_ > kNumPackets) { |
| 827 test_complete_->Set(); | 829 test_complete_->Set(); |
| 828 } | 830 } |
| 829 return true; | 831 return true; |
| 830 } | 832 } |
| 831 | 833 |
| 832 rtc::scoped_ptr<ThreadWrapper> receive_thread_; | 834 rtc::scoped_ptr<PlatformThread> receive_thread_; |
| 833 rtc::scoped_ptr<ThreadWrapper> codec_registration_thread_; | 835 rtc::scoped_ptr<PlatformThread> codec_registration_thread_; |
| 834 const rtc::scoped_ptr<EventWrapper> test_complete_; | 836 const rtc::scoped_ptr<EventWrapper> test_complete_; |
| 835 const rtc::scoped_ptr<CriticalSectionWrapper> crit_sect_; | 837 const rtc::scoped_ptr<CriticalSectionWrapper> crit_sect_; |
| 836 bool codec_registered_ GUARDED_BY(crit_sect_); | 838 bool codec_registered_ GUARDED_BY(crit_sect_); |
| 837 int receive_packet_count_ GUARDED_BY(crit_sect_); | 839 int receive_packet_count_ GUARDED_BY(crit_sect_); |
| 838 int64_t next_insert_packet_time_ms_ GUARDED_BY(crit_sect_); | 840 int64_t next_insert_packet_time_ms_ GUARDED_BY(crit_sect_); |
| 839 rtc::scoped_ptr<AudioEncoderIsac> isac_encoder_; | 841 rtc::scoped_ptr<AudioEncoderIsac> isac_encoder_; |
| 840 rtc::scoped_ptr<SimulatedClock> fake_clock_; | 842 rtc::scoped_ptr<SimulatedClock> fake_clock_; |
| 841 test::AudioLoop audio_loop_; | 843 test::AudioLoop audio_loop_; |
| 842 }; | 844 }; |
| 843 | 845 |
| (...skipping 922 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1766 Run(16000, 8000, 1000); | 1768 Run(16000, 8000, 1000); |
| 1767 } | 1769 } |
| 1768 | 1770 |
| 1769 TEST_F(AcmSwitchingOutputFrequencyOldApi, Toggle8KhzTo16Khz) { | 1771 TEST_F(AcmSwitchingOutputFrequencyOldApi, Toggle8KhzTo16Khz) { |
| 1770 Run(8000, 16000, 1000); | 1772 Run(8000, 16000, 1000); |
| 1771 } | 1773 } |
| 1772 | 1774 |
| 1773 #endif | 1775 #endif |
| 1774 | 1776 |
| 1775 } // namespace webrtc | 1777 } // namespace webrtc |
| OLD | NEW |