aboutsummaryrefslogtreecommitdiff
path: root/modules/audio_coding/acm2
diff options
context:
space:
mode:
Diffstat (limited to 'modules/audio_coding/acm2')
-rw-r--r--modules/audio_coding/acm2/acm_receiver.cc14
-rw-r--r--modules/audio_coding/acm2/acm_send_test.cc9
-rw-r--r--modules/audio_coding/acm2/audio_coding_module_unittest.cc110
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, &current_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()) {