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

Side by Side Diff: webrtc/voice_engine/channel.cc

Issue 2638083002: Attach TransportFeedbackPacketLossTracker to ANA (PLR only) (Closed)
Patch Set: Rebased Created 3 years, 9 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2012 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
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after
240 } 240 }
241 241
242 void SetTransportFeedbackObserver( 242 void SetTransportFeedbackObserver(
243 TransportFeedbackObserver* feedback_observer) { 243 TransportFeedbackObserver* feedback_observer) {
244 RTC_DCHECK(thread_checker_.CalledOnValidThread()); 244 RTC_DCHECK(thread_checker_.CalledOnValidThread());
245 rtc::CritScope lock(&crit_); 245 rtc::CritScope lock(&crit_);
246 feedback_observer_ = feedback_observer; 246 feedback_observer_ = feedback_observer;
247 } 247 }
248 248
249 // Implements TransportFeedbackObserver. 249 // Implements TransportFeedbackObserver.
250 void AddPacket(uint16_t sequence_number, 250 void AddPacket(uint32_t ssrc,
251 uint16_t sequence_number,
251 size_t length, 252 size_t length,
252 const PacedPacketInfo& pacing_info) override { 253 const PacedPacketInfo& pacing_info) override {
253 RTC_DCHECK(pacer_thread_.CalledOnValidThread()); 254 RTC_DCHECK(pacer_thread_.CalledOnValidThread());
254 rtc::CritScope lock(&crit_); 255 rtc::CritScope lock(&crit_);
255 if (feedback_observer_) 256 if (feedback_observer_)
256 feedback_observer_->AddPacket(sequence_number, length, pacing_info); 257 feedback_observer_->AddPacket(ssrc, sequence_number, length, pacing_info);
257 } 258 }
258 259
259 void OnTransportFeedback(const rtcp::TransportFeedback& feedback) override { 260 void OnTransportFeedback(const rtcp::TransportFeedback& feedback) override {
260 RTC_DCHECK(network_thread_.CalledOnValidThread()); 261 RTC_DCHECK(network_thread_.CalledOnValidThread());
261 rtc::CritScope lock(&crit_); 262 rtc::CritScope lock(&crit_);
262 if (feedback_observer_) 263 if (feedback_observer_)
263 feedback_observer_->OnTransportFeedback(feedback); 264 feedback_observer_->OnTransportFeedback(feedback);
264 } 265 }
265 std::vector<PacketFeedback> GetTransportFeedbackVector() const override { 266 std::vector<PacketFeedback> GetTransportFeedbackVector() const override {
266 RTC_NOTREACHED(); 267 RTC_NOTREACHED();
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
389 390
390 extended_max_sequence_number_[block_it->sourceSSRC] = 391 extended_max_sequence_number_[block_it->sourceSSRC] =
391 block_it->extendedHighSeqNum; 392 block_it->extendedHighSeqNum;
392 } 393 }
393 int weighted_fraction_lost = 0; 394 int weighted_fraction_lost = 0;
394 if (total_number_of_packets > 0) { 395 if (total_number_of_packets > 0) {
395 weighted_fraction_lost = 396 weighted_fraction_lost =
396 (fraction_lost_aggregate + total_number_of_packets / 2) / 397 (fraction_lost_aggregate + total_number_of_packets / 2) /
397 total_number_of_packets; 398 total_number_of_packets;
398 } 399 }
399 owner_->OnIncomingFractionLoss(weighted_fraction_lost); 400 owner_->OnUplinkPacketLossRate(weighted_fraction_lost / 255.0f);
400 } 401 }
401 402
402 private: 403 private:
403 Channel* owner_; 404 Channel* owner_;
404 // Maps remote side ssrc to extended highest sequence number received. 405 // Maps remote side ssrc to extended highest sequence number received.
405 std::map<uint32_t, uint32_t> extended_max_sequence_number_; 406 std::map<uint32_t, uint32_t> extended_max_sequence_number_;
406 rtc::CriticalSection crit_; 407 rtc::CriticalSection crit_;
407 RtcpBandwidthObserver* bandwidth_observer_ GUARDED_BY(crit_); 408 RtcpBandwidthObserver* bandwidth_observer_ GUARDED_BY(crit_);
408 }; 409 };
409 410
(...skipping 486 matching lines...) Expand 10 before | Expand all | Expand 10 after
896 _outputSpeechType(AudioFrame::kNormalSpeech), 897 _outputSpeechType(AudioFrame::kNormalSpeech),
897 restored_packet_in_use_(false), 898 restored_packet_in_use_(false),
898 rtcp_observer_(new VoERtcpObserver(this)), 899 rtcp_observer_(new VoERtcpObserver(this)),
899 associate_send_channel_(ChannelOwner(nullptr)), 900 associate_send_channel_(ChannelOwner(nullptr)),
900 pacing_enabled_(config.enable_voice_pacing), 901 pacing_enabled_(config.enable_voice_pacing),
901 feedback_observer_proxy_(new TransportFeedbackProxy()), 902 feedback_observer_proxy_(new TransportFeedbackProxy()),
902 seq_num_allocator_proxy_(new TransportSequenceNumberProxy()), 903 seq_num_allocator_proxy_(new TransportSequenceNumberProxy()),
903 rtp_packet_sender_proxy_(new RtpPacketSenderProxy()), 904 rtp_packet_sender_proxy_(new RtpPacketSenderProxy()),
904 retransmission_rate_limiter_(new RateLimiter(Clock::GetRealTimeClock(), 905 retransmission_rate_limiter_(new RateLimiter(Clock::GetRealTimeClock(),
905 kMaxRetransmissionWindowMs)), 906 kMaxRetransmissionWindowMs)),
906 decoder_factory_(config.acm_config.decoder_factory) { 907 decoder_factory_(config.acm_config.decoder_factory),
908 // TODO(elad.alon): Subsequent CL experiments with PLR source.
909 use_twcc_plr_for_ana_(false) {
907 WEBRTC_TRACE(kTraceMemory, kTraceVoice, VoEId(_instanceId, _channelId), 910 WEBRTC_TRACE(kTraceMemory, kTraceVoice, VoEId(_instanceId, _channelId),
908 "Channel::Channel() - ctor"); 911 "Channel::Channel() - ctor");
909 AudioCodingModule::Config acm_config(config.acm_config); 912 AudioCodingModule::Config acm_config(config.acm_config);
910 acm_config.id = VoEModuleId(instanceId, channelId); 913 acm_config.id = VoEModuleId(instanceId, channelId);
911 acm_config.neteq_config.enable_muted_state = true; 914 acm_config.neteq_config.enable_muted_state = true;
912 audio_coding_.reset(AudioCodingModule::Create(acm_config)); 915 audio_coding_.reset(AudioCodingModule::Create(acm_config));
913 916
914 _outputAudioLevel.Clear(); 917 _outputAudioLevel.Clear();
915 918
916 RtpRtcp::Configuration configuration; 919 RtpRtcp::Configuration configuration;
(...skipping 366 matching lines...) Expand 10 before | Expand all | Expand 10 after
1283 "Channel::SetBitRate(bitrate_bps=%d)", bitrate_bps); 1286 "Channel::SetBitRate(bitrate_bps=%d)", bitrate_bps);
1284 audio_coding_->ModifyEncoder([&](std::unique_ptr<AudioEncoder>* encoder) { 1287 audio_coding_->ModifyEncoder([&](std::unique_ptr<AudioEncoder>* encoder) {
1285 if (*encoder) { 1288 if (*encoder) {
1286 (*encoder)->OnReceivedUplinkBandwidth( 1289 (*encoder)->OnReceivedUplinkBandwidth(
1287 bitrate_bps, rtc::Optional<int64_t>(probing_interval_ms)); 1290 bitrate_bps, rtc::Optional<int64_t>(probing_interval_ms));
1288 } 1291 }
1289 }); 1292 });
1290 retransmission_rate_limiter_->SetMaxRate(bitrate_bps); 1293 retransmission_rate_limiter_->SetMaxRate(bitrate_bps);
1291 } 1294 }
1292 1295
1293 void Channel::OnIncomingFractionLoss(int fraction_lost) { 1296 void Channel::OnTwccBasedUplinkPacketLossRate(
1297 const rtc::Optional<float>& packet_loss_rate) {
1298 if (!use_twcc_plr_for_ana_)
1299 return;
1294 audio_coding_->ModifyEncoder([&](std::unique_ptr<AudioEncoder>* encoder) { 1300 audio_coding_->ModifyEncoder([&](std::unique_ptr<AudioEncoder>* encoder) {
1295 if (*encoder) 1301 if (*encoder)
1296 (*encoder)->OnReceivedUplinkPacketLossFraction( 1302 (*encoder)->OnReceivedUplinkPacketLossFraction(
1297 rtc::Optional<float>(fraction_lost / 255.0f)); 1303 rtc::Optional<float>(packet_loss_rate));
1298 }); 1304 });
1299 } 1305 }
1300 1306
1307 void Channel::OnUplinkPacketLossRate(float packet_loss_rate) {
1308 if (use_twcc_plr_for_ana_)
1309 return;
1310 audio_coding_->ModifyEncoder([&](std::unique_ptr<AudioEncoder>* encoder) {
1311 if (*encoder) {
1312 (*encoder)->OnReceivedUplinkPacketLossFraction(
1313 rtc::Optional<float>(packet_loss_rate));
1314 }
1315 });
1316 }
1317
1301 int32_t Channel::SetVADStatus(bool enableVAD, 1318 int32_t Channel::SetVADStatus(bool enableVAD,
1302 ACMVADMode mode, 1319 ACMVADMode mode,
1303 bool disableDTX) { 1320 bool disableDTX) {
1304 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, _channelId), 1321 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, _channelId),
1305 "Channel::SetVADStatus(mode=%d)", mode); 1322 "Channel::SetVADStatus(mode=%d)", mode);
1306 RTC_DCHECK(!(disableDTX && enableVAD)); // disableDTX mode is deprecated. 1323 RTC_DCHECK(!(disableDTX && enableVAD)); // disableDTX mode is deprecated.
1307 if (!codec_manager_.SetVAD(enableVAD, mode) || 1324 if (!codec_manager_.SetVAD(enableVAD, mode) ||
1308 !codec_manager_.MakeEncoder(&rent_a_codec_, audio_coding_.get())) { 1325 !codec_manager_.MakeEncoder(&rent_a_codec_, audio_coding_.get())) {
1309 _engineStatisticsPtr->SetLastError(VE_AUDIO_CODING_MODULE_ERROR, 1326 _engineStatisticsPtr->SetLastError(VE_AUDIO_CODING_MODULE_ERROR,
1310 kTraceError, 1327 kTraceError,
(...skipping 1682 matching lines...) Expand 10 before | Expand all | Expand 10 after
2993 int64_t min_rtt = 0; 3010 int64_t min_rtt = 0;
2994 if (_rtpRtcpModule->RTT(remoteSSRC, &rtt, &avg_rtt, &min_rtt, &max_rtt) != 3011 if (_rtpRtcpModule->RTT(remoteSSRC, &rtt, &avg_rtt, &min_rtt, &max_rtt) !=
2995 0) { 3012 0) {
2996 return 0; 3013 return 0;
2997 } 3014 }
2998 return rtt; 3015 return rtt;
2999 } 3016 }
3000 3017
3001 } // namespace voe 3018 } // namespace voe
3002 } // namespace webrtc 3019 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698