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

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

Issue 2638083002: Attach TransportFeedbackPacketLossTracker to ANA (PLR only) (Closed)
Patch Set: Fix UT 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 228 matching lines...) Expand 10 before | Expand all | Expand 10 after
239 } 239 }
240 240
241 void SetTransportFeedbackObserver( 241 void SetTransportFeedbackObserver(
242 TransportFeedbackObserver* feedback_observer) { 242 TransportFeedbackObserver* feedback_observer) {
243 RTC_DCHECK(thread_checker_.CalledOnValidThread()); 243 RTC_DCHECK(thread_checker_.CalledOnValidThread());
244 rtc::CritScope lock(&crit_); 244 rtc::CritScope lock(&crit_);
245 feedback_observer_ = feedback_observer; 245 feedback_observer_ = feedback_observer;
246 } 246 }
247 247
248 // Implements TransportFeedbackObserver. 248 // Implements TransportFeedbackObserver.
249 void AddPacket(uint16_t sequence_number, 249 void AddPacket(uint32_t ssrc,
250 uint16_t sequence_number,
250 size_t length, 251 size_t length,
251 const PacedPacketInfo& pacing_info) override { 252 const PacedPacketInfo& pacing_info) override {
252 RTC_DCHECK(pacer_thread_.CalledOnValidThread()); 253 RTC_DCHECK(pacer_thread_.CalledOnValidThread());
253 rtc::CritScope lock(&crit_); 254 rtc::CritScope lock(&crit_);
254 if (feedback_observer_) 255 if (feedback_observer_)
255 feedback_observer_->AddPacket(sequence_number, length, pacing_info); 256 feedback_observer_->AddPacket(ssrc, sequence_number, length, pacing_info);
256 } 257 }
257 258
258 void OnTransportFeedback(const rtcp::TransportFeedback& feedback) override { 259 void OnTransportFeedback(const rtcp::TransportFeedback& feedback) override {
259 RTC_DCHECK(network_thread_.CalledOnValidThread()); 260 RTC_DCHECK(network_thread_.CalledOnValidThread());
260 rtc::CritScope lock(&crit_); 261 rtc::CritScope lock(&crit_);
261 if (feedback_observer_) 262 if (feedback_observer_)
262 feedback_observer_->OnTransportFeedback(feedback); 263 feedback_observer_->OnTransportFeedback(feedback);
263 } 264 }
264 std::vector<PacketFeedback> GetTransportFeedbackVector() const override { 265 std::vector<PacketFeedback> GetTransportFeedbackVector() const override {
265 RTC_NOTREACHED(); 266 RTC_NOTREACHED();
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
388 389
389 extended_max_sequence_number_[block_it->sourceSSRC] = 390 extended_max_sequence_number_[block_it->sourceSSRC] =
390 block_it->extendedHighSeqNum; 391 block_it->extendedHighSeqNum;
391 } 392 }
392 int weighted_fraction_lost = 0; 393 int weighted_fraction_lost = 0;
393 if (total_number_of_packets > 0) { 394 if (total_number_of_packets > 0) {
394 weighted_fraction_lost = 395 weighted_fraction_lost =
395 (fraction_lost_aggregate + total_number_of_packets / 2) / 396 (fraction_lost_aggregate + total_number_of_packets / 2) /
396 total_number_of_packets; 397 total_number_of_packets;
397 } 398 }
398 owner_->OnIncomingFractionLoss(weighted_fraction_lost); 399 owner_->OnUplinkPacketLossRate(weighted_fraction_lost / 255.0f);
399 } 400 }
400 401
401 private: 402 private:
402 Channel* owner_; 403 Channel* owner_;
403 // Maps remote side ssrc to extended highest sequence number received. 404 // Maps remote side ssrc to extended highest sequence number received.
404 std::map<uint32_t, uint32_t> extended_max_sequence_number_; 405 std::map<uint32_t, uint32_t> extended_max_sequence_number_;
405 rtc::CriticalSection crit_; 406 rtc::CriticalSection crit_;
406 RtcpBandwidthObserver* bandwidth_observer_ GUARDED_BY(crit_); 407 RtcpBandwidthObserver* bandwidth_observer_ GUARDED_BY(crit_);
407 }; 408 };
408 409
(...skipping 486 matching lines...) Expand 10 before | Expand all | Expand 10 after
895 _outputSpeechType(AudioFrame::kNormalSpeech), 896 _outputSpeechType(AudioFrame::kNormalSpeech),
896 restored_packet_in_use_(false), 897 restored_packet_in_use_(false),
897 rtcp_observer_(new VoERtcpObserver(this)), 898 rtcp_observer_(new VoERtcpObserver(this)),
898 associate_send_channel_(ChannelOwner(nullptr)), 899 associate_send_channel_(ChannelOwner(nullptr)),
899 pacing_enabled_(config.enable_voice_pacing), 900 pacing_enabled_(config.enable_voice_pacing),
900 feedback_observer_proxy_(new TransportFeedbackProxy()), 901 feedback_observer_proxy_(new TransportFeedbackProxy()),
901 seq_num_allocator_proxy_(new TransportSequenceNumberProxy()), 902 seq_num_allocator_proxy_(new TransportSequenceNumberProxy()),
902 rtp_packet_sender_proxy_(new RtpPacketSenderProxy()), 903 rtp_packet_sender_proxy_(new RtpPacketSenderProxy()),
903 retransmission_rate_limiter_(new RateLimiter(Clock::GetRealTimeClock(), 904 retransmission_rate_limiter_(new RateLimiter(Clock::GetRealTimeClock(),
904 kMaxRetransmissionWindowMs)), 905 kMaxRetransmissionWindowMs)),
905 decoder_factory_(config.acm_config.decoder_factory) { 906 decoder_factory_(config.acm_config.decoder_factory),
907 // TODO(elad.alon): Subsequent CL experiments with PLR source.
908 use_twcc_plr_for_ana_(false) {
906 WEBRTC_TRACE(kTraceMemory, kTraceVoice, VoEId(_instanceId, _channelId), 909 WEBRTC_TRACE(kTraceMemory, kTraceVoice, VoEId(_instanceId, _channelId),
907 "Channel::Channel() - ctor"); 910 "Channel::Channel() - ctor");
908 AudioCodingModule::Config acm_config(config.acm_config); 911 AudioCodingModule::Config acm_config(config.acm_config);
909 acm_config.id = VoEModuleId(instanceId, channelId); 912 acm_config.id = VoEModuleId(instanceId, channelId);
910 acm_config.neteq_config.enable_muted_state = true; 913 acm_config.neteq_config.enable_muted_state = true;
911 audio_coding_.reset(AudioCodingModule::Create(acm_config)); 914 audio_coding_.reset(AudioCodingModule::Create(acm_config));
912 915
913 _outputAudioLevel.Clear(); 916 _outputAudioLevel.Clear();
914 917
915 RtpRtcp::Configuration configuration; 918 RtpRtcp::Configuration configuration;
(...skipping 378 matching lines...) Expand 10 before | Expand all | Expand 10 after
1294 "Channel::SetBitRate(bitrate_bps=%d)", bitrate_bps); 1297 "Channel::SetBitRate(bitrate_bps=%d)", bitrate_bps);
1295 audio_coding_->ModifyEncoder([&](std::unique_ptr<AudioEncoder>* encoder) { 1298 audio_coding_->ModifyEncoder([&](std::unique_ptr<AudioEncoder>* encoder) {
1296 if (*encoder) { 1299 if (*encoder) {
1297 (*encoder)->OnReceivedUplinkBandwidth( 1300 (*encoder)->OnReceivedUplinkBandwidth(
1298 bitrate_bps, rtc::Optional<int64_t>(probing_interval_ms)); 1301 bitrate_bps, rtc::Optional<int64_t>(probing_interval_ms));
1299 } 1302 }
1300 }); 1303 });
1301 retransmission_rate_limiter_->SetMaxRate(bitrate_bps); 1304 retransmission_rate_limiter_->SetMaxRate(bitrate_bps);
1302 } 1305 }
1303 1306
1304 void Channel::OnIncomingFractionLoss(int fraction_lost) { 1307 void Channel::OnTwccBasedUplinkPacketLossRate(float packet_loss_rate) {
1308 if (!use_twcc_plr_for_ana_)
1309 return;
1305 audio_coding_->ModifyEncoder([&](std::unique_ptr<AudioEncoder>* encoder) { 1310 audio_coding_->ModifyEncoder([&](std::unique_ptr<AudioEncoder>* encoder) {
1306 if (*encoder) 1311 if (*encoder) {
1307 (*encoder)->OnReceivedUplinkPacketLossFraction(fraction_lost / 255.0f); 1312 (*encoder)->OnReceivedUplinkPacketLossFraction(packet_loss_rate);
1313 }
1308 }); 1314 });
1309 } 1315 }
1310 1316
1317 void Channel::OnUplinkPacketLossRate(float packet_loss_rate) {
1318 if (use_twcc_plr_for_ana_)
1319 return;
1320 audio_coding_->ModifyEncoder([&](std::unique_ptr<AudioEncoder>* encoder) {
1321 if (*encoder) {
1322 (*encoder)->OnReceivedUplinkPacketLossFraction(packet_loss_rate);
1323 }
1324 });
1325 }
1326
1311 int32_t Channel::SetVADStatus(bool enableVAD, 1327 int32_t Channel::SetVADStatus(bool enableVAD,
1312 ACMVADMode mode, 1328 ACMVADMode mode,
1313 bool disableDTX) { 1329 bool disableDTX) {
1314 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, _channelId), 1330 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, _channelId),
1315 "Channel::SetVADStatus(mode=%d)", mode); 1331 "Channel::SetVADStatus(mode=%d)", mode);
1316 RTC_DCHECK(!(disableDTX && enableVAD)); // disableDTX mode is deprecated. 1332 RTC_DCHECK(!(disableDTX && enableVAD)); // disableDTX mode is deprecated.
1317 if (!codec_manager_.SetVAD(enableVAD, mode) || 1333 if (!codec_manager_.SetVAD(enableVAD, mode) ||
1318 !codec_manager_.MakeEncoder(&rent_a_codec_, audio_coding_.get())) { 1334 !codec_manager_.MakeEncoder(&rent_a_codec_, audio_coding_.get())) {
1319 _engineStatisticsPtr->SetLastError(VE_AUDIO_CODING_MODULE_ERROR, 1335 _engineStatisticsPtr->SetLastError(VE_AUDIO_CODING_MODULE_ERROR,
1320 kTraceError, 1336 kTraceError,
(...skipping 1682 matching lines...) Expand 10 before | Expand all | Expand 10 after
3003 int64_t min_rtt = 0; 3019 int64_t min_rtt = 0;
3004 if (_rtpRtcpModule->RTT(remoteSSRC, &rtt, &avg_rtt, &min_rtt, &max_rtt) != 3020 if (_rtpRtcpModule->RTT(remoteSSRC, &rtt, &avg_rtt, &min_rtt, &max_rtt) !=
3005 0) { 3021 0) {
3006 return 0; 3022 return 0;
3007 } 3023 }
3008 return rtt; 3024 return rtt;
3009 } 3025 }
3010 3026
3011 } // namespace voe 3027 } // namespace voe
3012 } // namespace webrtc 3028 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698