Index: webrtc/voice_engine/channel.cc |
diff --git a/webrtc/voice_engine/channel.cc b/webrtc/voice_engine/channel.cc |
index 0eae821c8655c7f29c4ee3997198004ebc390866..b60ad416d51e257825572704ed00ac959e3311be 100644 |
--- a/webrtc/voice_engine/channel.cc |
+++ b/webrtc/voice_engine/channel.cc |
@@ -247,13 +247,14 @@ class TransportFeedbackProxy : public TransportFeedbackObserver { |
} |
// Implements TransportFeedbackObserver. |
- void AddPacket(uint16_t sequence_number, |
+ void AddPacket(uint32_t ssrc, |
+ uint16_t sequence_number, |
size_t length, |
const PacedPacketInfo& pacing_info) override { |
RTC_DCHECK(pacer_thread_.CalledOnValidThread()); |
rtc::CritScope lock(&crit_); |
if (feedback_observer_) |
- feedback_observer_->AddPacket(sequence_number, length, pacing_info); |
+ feedback_observer_->AddPacket(ssrc, sequence_number, length, pacing_info); |
} |
void OnTransportFeedback(const rtcp::TransportFeedback& feedback) override { |
@@ -396,7 +397,7 @@ class VoERtcpObserver : public RtcpBandwidthObserver { |
(fraction_lost_aggregate + total_number_of_packets / 2) / |
total_number_of_packets; |
} |
- owner_->OnIncomingFractionLoss(weighted_fraction_lost); |
+ owner_->OnUplinkPacketLossRate(weighted_fraction_lost / 255.0f); |
} |
private: |
@@ -903,7 +904,9 @@ Channel::Channel(int32_t channelId, |
rtp_packet_sender_proxy_(new RtpPacketSenderProxy()), |
retransmission_rate_limiter_(new RateLimiter(Clock::GetRealTimeClock(), |
kMaxRetransmissionWindowMs)), |
- decoder_factory_(config.acm_config.decoder_factory) { |
+ decoder_factory_(config.acm_config.decoder_factory), |
+ // TODO(elad.alon): Subsequent CL experiments with PLR source. |
+ use_twcc_plr_for_ana_(false) { |
WEBRTC_TRACE(kTraceMemory, kTraceVoice, VoEId(_instanceId, _channelId), |
"Channel::Channel() - ctor"); |
AudioCodingModule::Config acm_config(config.acm_config); |
@@ -1290,11 +1293,25 @@ void Channel::SetBitRate(int bitrate_bps, int64_t probing_interval_ms) { |
retransmission_rate_limiter_->SetMaxRate(bitrate_bps); |
} |
-void Channel::OnIncomingFractionLoss(int fraction_lost) { |
+void Channel::OnTwccBasedUplinkPacketLossRate( |
+ const rtc::Optional<float>& packet_loss_rate) { |
+ if (!use_twcc_plr_for_ana_) |
+ return; |
audio_coding_->ModifyEncoder([&](std::unique_ptr<AudioEncoder>* encoder) { |
if (*encoder) |
(*encoder)->OnReceivedUplinkPacketLossFraction( |
- rtc::Optional<float>(fraction_lost / 255.0f)); |
+ rtc::Optional<float>(packet_loss_rate)); |
+ }); |
+} |
+ |
+void Channel::OnUplinkPacketLossRate(float packet_loss_rate) { |
+ if (use_twcc_plr_for_ana_) |
+ return; |
+ audio_coding_->ModifyEncoder([&](std::unique_ptr<AudioEncoder>* encoder) { |
+ if (*encoder) { |
+ (*encoder)->OnReceivedUplinkPacketLossFraction( |
+ rtc::Optional<float>(packet_loss_rate)); |
+ } |
}); |
} |