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

Unified Diff: webrtc/modules/audio_coding/main/acm2/acm_receiver.cc

Issue 1410073006: ACM: Move NACK functionality inside NetEq (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: rebase Created 5 years, 2 months 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/modules/audio_coding/main/acm2/acm_receiver.h ('k') | webrtc/modules/audio_coding/main/acm2/nack.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/modules/audio_coding/main/acm2/acm_receiver.cc
diff --git a/webrtc/modules/audio_coding/main/acm2/acm_receiver.cc b/webrtc/modules/audio_coding/main/acm2/acm_receiver.cc
index 611b06aa1f26af3e1d49db2337a153e7003b05d9..80b7071f8d4aec9b3bb84aba94729324d9226c19 100644
--- a/webrtc/modules/audio_coding/main/acm2/acm_receiver.cc
+++ b/webrtc/modules/audio_coding/main/acm2/acm_receiver.cc
@@ -24,7 +24,6 @@
#include "webrtc/modules/audio_coding/main/acm2/acm_common_defs.h"
#include "webrtc/modules/audio_coding/main/acm2/acm_resampler.h"
#include "webrtc/modules/audio_coding/main/acm2/call_statistics.h"
-#include "webrtc/modules/audio_coding/main/acm2/nack.h"
#include "webrtc/modules/audio_coding/neteq/include/neteq.h"
#include "webrtc/system_wrappers/include/clock.h"
#include "webrtc/system_wrappers/include/critical_section_wrapper.h"
@@ -37,8 +36,6 @@ namespace acm2 {
namespace {
-const int kNackThresholdPackets = 2;
-
// |vad_activity_| field of |audio_frame| is set to |previous_audio_activity_|
// before the call to this function.
void SetAudioFrameActivityAndType(bool vad_enabled,
@@ -130,8 +127,6 @@ AcmReceiver::AcmReceiver(const AudioCodingModule::Config& config)
current_sample_rate_hz_(config.neteq_config.sample_rate_hz),
audio_buffer_(new int16_t[AudioFrame::kMaxDataSizeSamples]),
last_audio_buffer_(new int16_t[AudioFrame::kMaxDataSizeSamples]),
- nack_(),
- nack_enabled_(false),
neteq_(NetEq::Create(config.neteq_config)),
vad_enabled_(true),
clock_(config.clock),
@@ -254,26 +249,11 @@ int AcmReceiver::InsertPacket(const WebRtcRTPHeader& rtp_header,
// Therefore, either NetEq buffer is empty or will be flushed when this
// packet is inserted.
new_codec = true;
-
- // Updating NACK'sampling rate is required, either first packet is
- // received or codec is changed. Furthermore, reset is required if codec
- // is changed (NetEq flushes its buffer so NACK should reset its list).
- if (nack_enabled_) {
- assert(nack_.get());
- nack_->Reset();
- nack_->UpdateSampleRate(sample_rate_hz);
- }
last_audio_decoder_ = decoder;
}
packet_type = InitialDelayManager::kAudioPacket;
}
- if (nack_enabled_) {
- assert(nack_.get());
- nack_->UpdateLastReceivedPacket(header->sequenceNumber,
- header->timestamp);
- }
-
if (av_sync_) {
assert(initial_delay_manager_.get());
assert(missing_packets_sync_stream_.get());
@@ -344,16 +324,6 @@ int AcmReceiver::GetAudio(int desired_freq_hz, AudioFrame* audio_frame) {
return -1;
}
- // Update NACK.
- int decoded_sequence_num = 0;
- uint32_t decoded_timestamp = 0;
- bool update_nack = nack_enabled_ && // Update NACK only if it is enabled.
- neteq_->DecodedRtpInfo(&decoded_sequence_num, &decoded_timestamp);
- if (update_nack) {
- assert(nack_.get());
- nack_->UpdateLastDecodedPacket(decoded_sequence_num, decoded_timestamp);
- }
-
// NetEq always returns 10 ms of audio.
current_sample_rate_hz_ = static_cast<int>(samples_per_channel * 100);
@@ -640,45 +610,17 @@ int AcmReceiver::DecoderByPayloadType(uint8_t payload_type,
}
int AcmReceiver::EnableNack(size_t max_nack_list_size) {
- // Don't do anything if |max_nack_list_size| is out of range.
- if (max_nack_list_size == 0 || max_nack_list_size > Nack::kNackListSizeLimit)
- return -1;
-
- CriticalSectionScoped lock(crit_sect_.get());
- if (!nack_enabled_) {
- nack_.reset(Nack::Create(kNackThresholdPackets));
- nack_enabled_ = true;
-
- // Sampling rate might need to be updated if we change from disable to
- // enable. Do it if the receive codec is valid.
- if (last_audio_decoder_) {
- nack_->UpdateSampleRate(
- ACMCodecDB::database_[last_audio_decoder_->acm_codec_id].plfreq);
- }
- }
- return nack_->SetMaxNackListSize(max_nack_list_size);
+ neteq_->EnableNack(max_nack_list_size);
+ return 0;
}
void AcmReceiver::DisableNack() {
- CriticalSectionScoped lock(crit_sect_.get());
- nack_.reset(); // Memory is released.
- nack_enabled_ = false;
+ neteq_->DisableNack();
}
std::vector<uint16_t> AcmReceiver::GetNackList(
int64_t round_trip_time_ms) const {
- CriticalSectionScoped lock(crit_sect_.get());
- if (round_trip_time_ms < 0) {
- WEBRTC_TRACE(webrtc::kTraceWarning, webrtc::kTraceAudioCoding, id_,
- "GetNackList: round trip time cannot be negative."
- " round_trip_time_ms=%" PRId64, round_trip_time_ms);
- }
- if (nack_enabled_ && round_trip_time_ms >= 0) {
- assert(nack_.get());
- return nack_->GetNackList(round_trip_time_ms);
- }
- std::vector<uint16_t> empty_list;
- return empty_list;
+ return neteq_->GetNackList(round_trip_time_ms);
}
void AcmReceiver::ResetInitialDelay() {
« no previous file with comments | « webrtc/modules/audio_coding/main/acm2/acm_receiver.h ('k') | webrtc/modules/audio_coding/main/acm2/nack.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698