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

Unified Diff: webrtc/media/engine/webrtcvoiceengine.cc

Issue 2060813002: Configure VoE NACK through AudioReceiveStream::Config. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@wvoe_config_nack
Patch Set: format Created 4 years, 6 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/media/engine/webrtcvoiceengine.h ('k') | webrtc/media/engine/webrtcvoiceengine_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/media/engine/webrtcvoiceengine.cc
diff --git a/webrtc/media/engine/webrtcvoiceengine.cc b/webrtc/media/engine/webrtcvoiceengine.cc
index 7b3e0ef8379194e0fb7d8017bf3592fdd4680952..a4a5e130d51cddfd0887fe65730a10be48ebc75f 100644
--- a/webrtc/media/engine/webrtcvoiceengine.cc
+++ b/webrtc/media/engine/webrtcvoiceengine.cc
@@ -61,9 +61,6 @@ const int kDefaultAudioDeviceId = -1;
const int kDefaultAudioDeviceId = 0;
#endif
-// Parameter used for NACK.
-// This value is equivalent to 5 seconds of audio data at 20 ms per packet.
-const int kNackMaxPackets = 250;
constexpr int kNackRtpHistoryMs = 5000;
// Codec parameters for Opus.
@@ -1267,6 +1264,7 @@ class WebRtcVoiceMediaChannel::WebRtcAudioReceiveStream {
uint32_t remote_ssrc,
uint32_t local_ssrc,
bool use_transport_cc,
+ bool use_nack,
const std::string& sync_group,
const std::vector<webrtc::RtpExtension>& extensions,
webrtc::Call* call,
@@ -1281,7 +1279,7 @@ class WebRtcVoiceMediaChannel::WebRtcAudioReceiveStream {
config_.voe_channel_id = ch;
config_.sync_group = sync_group;
config_.decoder_factory = decoder_factory;
- RecreateAudioReceiveStream(use_transport_cc, extensions);
+ RecreateAudioReceiveStream(use_transport_cc, use_nack, extensions);
}
~WebRtcAudioReceiveStream() {
@@ -1292,11 +1290,16 @@ class WebRtcVoiceMediaChannel::WebRtcAudioReceiveStream {
void RecreateAudioReceiveStream(
const std::vector<webrtc::RtpExtension>& extensions) {
RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
- RecreateAudioReceiveStream(config_.rtp.transport_cc, extensions);
+ RecreateAudioReceiveStream(config_.rtp.transport_cc,
+ config_.rtp.nack.rtp_history_ms != 0,
+ extensions);
}
- void RecreateAudioReceiveStream(bool use_transport_cc) {
+
+ void RecreateAudioReceiveStream(bool use_transport_cc, bool use_nack) {
RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
- RecreateAudioReceiveStream(use_transport_cc, config_.rtp.extensions);
+ RecreateAudioReceiveStream(use_transport_cc,
+ use_nack,
+ config_.rtp.extensions);
}
webrtc::AudioReceiveStream::Stats GetStats() const {
@@ -1318,14 +1321,16 @@ class WebRtcVoiceMediaChannel::WebRtcAudioReceiveStream {
private:
void RecreateAudioReceiveStream(
bool use_transport_cc,
+ bool use_nack,
const std::vector<webrtc::RtpExtension>& extensions) {
RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
if (stream_) {
call_->DestroyAudioReceiveStream(stream_);
stream_ = nullptr;
}
- config_.rtp.extensions = extensions;
config_.rtp.transport_cc = use_transport_cc;
+ config_.rtp.nack.rtp_history_ms = use_nack ? kNackRtpHistoryMs : 0;
+ config_.rtp.extensions = extensions;
RTC_DCHECK(!stream_);
stream_ = call_->CreateAudioReceiveStream(config_);
RTC_CHECK(stream_);
@@ -1730,19 +1735,17 @@ bool WebRtcVoiceMediaChannel::SetSendCodecs(
}
}
- // Set nack status on receive channels.
- for (const auto& kv : recv_streams_) {
- SetNack(kv.second->channel(), send_codec_spec_.nack_enabled);
- }
-
- // Check if the transport cc feedback has changed on the preferred send codec,
- // and in that case reconfigure all receive streams.
- if (recv_transport_cc_enabled_ != send_codec_spec_.transport_cc_enabled) {
+ // Check if the transport cc feedback or NACK status has changed on the
+ // preferred send codec, and in that case reconfigure all receive streams.
+ if (recv_transport_cc_enabled_ != send_codec_spec_.transport_cc_enabled ||
+ recv_nack_enabled_ != send_codec_spec_.nack_enabled) {
LOG(LS_INFO) << "Recreate all the receive streams because the send "
"codec has changed.";
recv_transport_cc_enabled_ = send_codec_spec_.transport_cc_enabled;
+ recv_nack_enabled_ = send_codec_spec_.nack_enabled;
for (auto& kv : recv_streams_) {
- kv.second->RecreateAudioReceiveStream(recv_transport_cc_enabled_);
+ kv.second->RecreateAudioReceiveStream(recv_transport_cc_enabled_,
+ recv_nack_enabled_);
}
}
@@ -1856,16 +1859,6 @@ bool WebRtcVoiceMediaChannel::SetSendCodecs(
return true;
}
-void WebRtcVoiceMediaChannel::SetNack(int channel, bool nack_enabled) {
- if (nack_enabled) {
- LOG(LS_INFO) << "Enabling NACK for channel " << channel;
- engine()->voe()->rtp()->SetNACKStatus(channel, true, kNackMaxPackets);
- } else {
- LOG(LS_INFO) << "Disabling NACK for channel " << channel;
- engine()->voe()->rtp()->SetNACKStatus(channel, false, 0);
- }
-}
-
bool WebRtcVoiceMediaChannel::SetSendCodec(
int channel, const webrtc::CodecInst& send_codec) {
LOG(LS_INFO) << "Send channel " << channel << " selected voice codec "
@@ -2137,11 +2130,10 @@ bool WebRtcVoiceMediaChannel::AddRecvStream(const StreamParams& sp) {
recv_streams_.insert(std::make_pair(
ssrc, new WebRtcAudioReceiveStream(channel, ssrc, receiver_reports_ssrc_,
recv_transport_cc_enabled_,
+ recv_nack_enabled_,
sp.sync_label, recv_rtp_extensions_,
call_, this,
engine()->decoder_factory_)));
-
- SetNack(channel, send_codec_spec_.nack_enabled);
SetPlayout(channel, playout_);
return true;
« no previous file with comments | « webrtc/media/engine/webrtcvoiceengine.h ('k') | webrtc/media/engine/webrtcvoiceengine_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698