diff options
Diffstat (limited to 'modules/audio_coding/acm2')
-rw-r--r-- | modules/audio_coding/acm2/acm_receiver.cc | 14 | ||||
-rw-r--r-- | modules/audio_coding/acm2/acm_send_test.cc | 9 | ||||
-rw-r--r-- | modules/audio_coding/acm2/audio_coding_module_unittest.cc | 110 |
3 files changed, 57 insertions, 76 deletions
diff --git a/modules/audio_coding/acm2/acm_receiver.cc b/modules/audio_coding/acm2/acm_receiver.cc index 0e615cae82..3214ce6f7b 100644 --- a/modules/audio_coding/acm2/acm_receiver.cc +++ b/modules/audio_coding/acm2/acm_receiver.cc @@ -146,20 +146,22 @@ int AcmReceiver::GetAudio(int desired_freq_hz, AudioFrame* audio_frame, bool* muted) { RTC_DCHECK(muted); - // Accessing members, take the lock. - MutexLock lock(&mutex_); - if (neteq_->GetAudio(audio_frame, muted) != NetEq::kOK) { + int current_sample_rate_hz = 0; + if (neteq_->GetAudio(audio_frame, muted, ¤t_sample_rate_hz) != + NetEq::kOK) { RTC_LOG(LERROR) << "AcmReceiver::GetAudio - NetEq Failed."; return -1; } - const int current_sample_rate_hz = neteq_->last_output_sample_rate_hz(); + RTC_DCHECK_NE(current_sample_rate_hz, 0); // Update if resampling is required. const bool need_resampling = (desired_freq_hz != -1) && (current_sample_rate_hz != desired_freq_hz); + // Accessing members, take the lock. + MutexLock lock(&mutex_); if (need_resampling && !resampled_last_output_frame_) { // Prime the resampler with the last frame. int16_t temp_output[AudioFrame::kMaxDataSizeSamples]; @@ -174,8 +176,8 @@ int AcmReceiver::GetAudio(int desired_freq_hz, } } - // TODO(henrik.lundin) Glitches in the output may appear if the output rate - // from NetEq changes. See WebRTC issue 3923. + // TODO(bugs.webrtc.org/3923) Glitches in the output may appear if the output + // rate from NetEq changes. if (need_resampling) { // TODO(yujo): handle this more efficiently for muted frames. int samples_per_channel_int = resampler_.Resample10Msec( diff --git a/modules/audio_coding/acm2/acm_send_test.cc b/modules/audio_coding/acm2/acm_send_test.cc index b3e1e1ecb2..6f395d6073 100644 --- a/modules/audio_coding/acm2/acm_send_test.cc +++ b/modules/audio_coding/acm2/acm_send_test.cc @@ -140,8 +140,9 @@ int32_t AcmSendTestOldApi::SendData(AudioFrameType frame_type, std::unique_ptr<Packet> AcmSendTestOldApi::CreatePacket() { const size_t kRtpHeaderSize = 12; - size_t allocated_bytes = last_payload_vec_.size() + kRtpHeaderSize; - uint8_t* packet_memory = new uint8_t[allocated_bytes]; + rtc::CopyOnWriteBuffer packet_buffer(last_payload_vec_.size() + + kRtpHeaderSize); + uint8_t* packet_memory = packet_buffer.MutableData(); // Populate the header bytes. packet_memory[0] = 0x80; packet_memory[1] = static_cast<uint8_t>(payload_type_); @@ -162,8 +163,8 @@ std::unique_ptr<Packet> AcmSendTestOldApi::CreatePacket() { // Copy the payload data. memcpy(packet_memory + kRtpHeaderSize, &last_payload_vec_[0], last_payload_vec_.size()); - std::unique_ptr<Packet> packet( - new Packet(packet_memory, allocated_bytes, clock_.TimeInMilliseconds())); + auto packet = std::make_unique<Packet>(std::move(packet_buffer), + clock_.TimeInMilliseconds()); RTC_DCHECK(packet); RTC_DCHECK(packet->valid_header()); return packet; diff --git a/modules/audio_coding/acm2/audio_coding_module_unittest.cc b/modules/audio_coding/acm2/audio_coding_module_unittest.cc index 28899aaf84..5b0577745c 100644 --- a/modules/audio_coding/acm2/audio_coding_module_unittest.cc +++ b/modules/audio_coding/acm2/audio_coding_module_unittest.cc @@ -429,15 +429,6 @@ class AudioCodingModuleMtTestOldApi : public AudioCodingModuleTestOldApi { AudioCodingModuleMtTestOldApi() : AudioCodingModuleTestOldApi(), - send_thread_(CbSendThread, this, "send", rtc::kRealtimePriority), - insert_packet_thread_(CbInsertPacketThread, - this, - "insert_packet", - rtc::kRealtimePriority), - pull_audio_thread_(CbPullAudioThread, - this, - "pull_audio", - rtc::kRealtimePriority), send_count_(0), insert_packet_count_(0), pull_audio_count_(0), @@ -454,17 +445,38 @@ class AudioCodingModuleMtTestOldApi : public AudioCodingModuleTestOldApi { void StartThreads() { quit_.store(false); - send_thread_.Start(); - insert_packet_thread_.Start(); - pull_audio_thread_.Start(); + + const auto attributes = + rtc::ThreadAttributes().SetPriority(rtc::ThreadPriority::kRealtime); + send_thread_ = rtc::PlatformThread::SpawnJoinable( + [this] { + while (!quit_.load()) { + CbSendImpl(); + } + }, + "send", attributes); + insert_packet_thread_ = rtc::PlatformThread::SpawnJoinable( + [this] { + while (!quit_.load()) { + CbInsertPacketImpl(); + } + }, + "insert_packet", attributes); + pull_audio_thread_ = rtc::PlatformThread::SpawnJoinable( + [this] { + while (!quit_.load()) { + CbPullAudioImpl(); + } + }, + "pull_audio", attributes); } void TearDown() { AudioCodingModuleTestOldApi::TearDown(); quit_.store(true); - pull_audio_thread_.Stop(); - send_thread_.Stop(); - insert_packet_thread_.Stop(); + pull_audio_thread_.Finalize(); + send_thread_.Finalize(); + insert_packet_thread_.Finalize(); } bool RunTest() { @@ -482,14 +494,6 @@ class AudioCodingModuleMtTestOldApi : public AudioCodingModuleTestOldApi { return false; } - static void CbSendThread(void* context) { - AudioCodingModuleMtTestOldApi* fixture = - reinterpret_cast<AudioCodingModuleMtTestOldApi*>(context); - while (!fixture->quit_.load()) { - fixture->CbSendImpl(); - } - } - // The send thread doesn't have to care about the current simulated time, // since only the AcmReceiver is using the clock. void CbSendImpl() { @@ -505,14 +509,6 @@ class AudioCodingModuleMtTestOldApi : public AudioCodingModuleTestOldApi { } } - static void CbInsertPacketThread(void* context) { - AudioCodingModuleMtTestOldApi* fixture = - reinterpret_cast<AudioCodingModuleMtTestOldApi*>(context); - while (!fixture->quit_.load()) { - fixture->CbInsertPacketImpl(); - } - } - void CbInsertPacketImpl() { SleepMs(1); { @@ -527,14 +523,6 @@ class AudioCodingModuleMtTestOldApi : public AudioCodingModuleTestOldApi { InsertPacket(); } - static void CbPullAudioThread(void* context) { - AudioCodingModuleMtTestOldApi* fixture = - reinterpret_cast<AudioCodingModuleMtTestOldApi*>(context); - while (!fixture->quit_.load()) { - fixture->CbPullAudioImpl(); - } - } - void CbPullAudioImpl() { SleepMs(1); { @@ -693,14 +681,6 @@ class AcmReRegisterIsacMtTestOldApi : public AudioCodingModuleTestOldApi { AcmReRegisterIsacMtTestOldApi() : AudioCodingModuleTestOldApi(), - receive_thread_(CbReceiveThread, - this, - "receive", - rtc::kRealtimePriority), - codec_registration_thread_(CbCodecRegistrationThread, - this, - "codec_registration", - rtc::kRealtimePriority), codec_registered_(false), receive_packet_count_(0), next_insert_packet_time_ms_(0), @@ -732,28 +712,34 @@ class AcmReRegisterIsacMtTestOldApi : public AudioCodingModuleTestOldApi { void StartThreads() { quit_.store(false); - receive_thread_.Start(); - codec_registration_thread_.Start(); + const auto attributes = + rtc::ThreadAttributes().SetPriority(rtc::ThreadPriority::kRealtime); + receive_thread_ = rtc::PlatformThread::SpawnJoinable( + [this] { + while (!quit_.load() && CbReceiveImpl()) { + } + }, + "receive", attributes); + codec_registration_thread_ = rtc::PlatformThread::SpawnJoinable( + [this] { + while (!quit_.load()) { + CbCodecRegistrationImpl(); + } + }, + "codec_registration", attributes); } void TearDown() override { AudioCodingModuleTestOldApi::TearDown(); quit_.store(true); - receive_thread_.Stop(); - codec_registration_thread_.Stop(); + receive_thread_.Finalize(); + codec_registration_thread_.Finalize(); } bool RunTest() { return test_complete_.Wait(10 * 60 * 1000); // 10 minutes' timeout. } - static void CbReceiveThread(void* context) { - AcmReRegisterIsacMtTestOldApi* fixture = - reinterpret_cast<AcmReRegisterIsacMtTestOldApi*>(context); - while (!fixture->quit_.load() && fixture->CbReceiveImpl()) { - } - } - bool CbReceiveImpl() { SleepMs(1); rtc::Buffer encoded; @@ -799,14 +785,6 @@ class AcmReRegisterIsacMtTestOldApi : public AudioCodingModuleTestOldApi { return true; } - static void CbCodecRegistrationThread(void* context) { - AcmReRegisterIsacMtTestOldApi* fixture = - reinterpret_cast<AcmReRegisterIsacMtTestOldApi*>(context); - while (!fixture->quit_.load()) { - fixture->CbCodecRegistrationImpl(); - } - } - void CbCodecRegistrationImpl() { SleepMs(1); if (HasFatalFailure()) { |