Index: webrtc/modules/pacing/paced_sender.cc |
diff --git a/webrtc/modules/pacing/paced_sender.cc b/webrtc/modules/pacing/paced_sender.cc |
index 418c115c0c05666e067921bc73ef1ecc4f0a3a0e..b56d28510f2dc7c6cd377076506da81b987fd09f 100644 |
--- a/webrtc/modules/pacing/paced_sender.cc |
+++ b/webrtc/modules/pacing/paced_sender.cc |
@@ -246,21 +246,20 @@ const int64_t PacedSender::kMaxQueueLengthMs = 2000; |
const float PacedSender::kDefaultPaceMultiplier = 2.5f; |
PacedSender::PacedSender(Clock* clock, |
- PacketSender* packet_sender, |
- int estimated_bitrate_bps) |
+ Callback* callback, |
+ int bitrate_kbps, |
+ int max_bitrate_kbps, |
+ int min_bitrate_kbps) |
: clock_(clock), |
- packet_sender_(packet_sender), |
+ callback_(callback), |
critsect_(CriticalSectionWrapper::CreateCriticalSection()), |
paused_(false), |
probing_enabled_(true), |
- media_budget_(new paced_sender::IntervalBudget( |
- estimated_bitrate_bps / 1000 * kDefaultPaceMultiplier)), |
- padding_budget_(new paced_sender::IntervalBudget(0)), |
+ media_budget_(new paced_sender::IntervalBudget(max_bitrate_kbps)), |
+ padding_budget_(new paced_sender::IntervalBudget(min_bitrate_kbps)), |
prober_(new BitrateProber()), |
- estimated_bitrate_bps_(estimated_bitrate_bps), |
- min_send_bitrate_kbps_(0u), |
- pacing_bitrate_kbps_(estimated_bitrate_bps / 1000 * |
- kDefaultPaceMultiplier), |
+ bitrate_bps_(1000 * bitrate_kbps), |
+ max_bitrate_kbps_(max_bitrate_kbps), |
time_last_update_us_(clock->TimeInMicroseconds()), |
packets_(new paced_sender::PacketQueue(clock)), |
packet_counter_(0) { |
@@ -284,24 +283,16 @@ void PacedSender::SetProbingEnabled(bool enabled) { |
probing_enabled_ = enabled; |
} |
-void PacedSender::SetEstimatedBitrate(uint32_t bitrate_bps) { |
- LOG(LS_INFO) << "SetNetWorkEstimateTargetBitrate, bitrate " << bitrate_bps; |
- |
- CriticalSectionScoped cs(critsect_.get()); |
- estimated_bitrate_bps_ = bitrate_bps; |
- pacing_bitrate_kbps_ = |
- std::max(min_send_bitrate_kbps_, estimated_bitrate_bps_ / 1000) * |
- kDefaultPaceMultiplier; |
-} |
- |
-void PacedSender::SetAllocatedSendBitrate(int allocated_bitrate, |
- int padding_bitrate) { |
+void PacedSender::UpdateBitrate(int bitrate_kbps, |
+ int max_bitrate_kbps, |
+ int min_bitrate_kbps) { |
CriticalSectionScoped cs(critsect_.get()); |
- min_send_bitrate_kbps_ = allocated_bitrate / 1000; |
- pacing_bitrate_kbps_ = |
- std::max(min_send_bitrate_kbps_, estimated_bitrate_bps_ / 1000) * |
- kDefaultPaceMultiplier; |
- padding_budget_->set_target_rate_kbps(padding_bitrate / 1000); |
+ // Don't set media bitrate here as it may be boosted in order to meet max |
+ // queue time constraint. Just update max_bitrate_kbps_ and let media_budget_ |
+ // be updated in Process(). |
+ padding_budget_->set_target_rate_kbps(min_bitrate_kbps); |
+ bitrate_bps_ = 1000 * bitrate_kbps; |
+ max_bitrate_kbps_ = max_bitrate_kbps; |
} |
void PacedSender::InsertPacket(RtpPacketSender::Priority priority, |
@@ -315,7 +306,7 @@ void PacedSender::InsertPacket(RtpPacketSender::Priority priority, |
if (probing_enabled_ && !prober_->IsProbing()) |
prober_->SetEnabled(true); |
int64_t now_ms = clock_->TimeInMilliseconds(); |
- prober_->OnIncomingPacket(estimated_bitrate_bps_, bytes, now_ms); |
+ prober_->OnIncomingPacket(bitrate_bps_, bytes, now_ms); |
if (capture_time_ms < 0) |
capture_time_ms = now_ms; |
@@ -327,9 +318,8 @@ void PacedSender::InsertPacket(RtpPacketSender::Priority priority, |
int64_t PacedSender::ExpectedQueueTimeMs() const { |
CriticalSectionScoped cs(critsect_.get()); |
- RTC_DCHECK_GT(pacing_bitrate_kbps_, 0u); |
- return static_cast<int64_t>(packets_->SizeInBytes() * 8 / |
- pacing_bitrate_kbps_); |
+ RTC_DCHECK_GT(max_bitrate_kbps_, 0); |
+ return static_cast<int64_t>(packets_->SizeInBytes() * 8 / max_bitrate_kbps_); |
} |
size_t PacedSender::QueueSizePackets() const { |
@@ -370,7 +360,7 @@ void PacedSender::Process() { |
CriticalSectionScoped cs(critsect_.get()); |
int64_t elapsed_time_ms = (now_us - time_last_update_us_ + 500) / 1000; |
time_last_update_us_ = now_us; |
- int target_bitrate_kbps = pacing_bitrate_kbps_; |
+ int target_bitrate_kbps = max_bitrate_kbps_; |
// TODO(holmer): Remove the !paused_ check when issue 5307 has been fixed. |
if (!paused_ && elapsed_time_ms > 0) { |
size_t queue_size_bytes = packets_->SizeInBytes(); |
@@ -435,9 +425,10 @@ bool PacedSender::SendPacket(const paced_sender::Packet& packet) { |
if (paused_ && packet.priority != kHighPriority) |
return false; |
critsect_->Leave(); |
- const bool success = packet_sender_->TimeToSendPacket( |
- packet.ssrc, packet.sequence_number, packet.capture_time_ms, |
- packet.retransmission); |
+ const bool success = callback_->TimeToSendPacket(packet.ssrc, |
+ packet.sequence_number, |
+ packet.capture_time_ms, |
+ packet.retransmission); |
critsect_->Enter(); |
if (success) { |
@@ -456,7 +447,7 @@ bool PacedSender::SendPacket(const paced_sender::Packet& packet) { |
void PacedSender::SendPadding(size_t padding_needed) { |
critsect_->Leave(); |
- size_t bytes_sent = packet_sender_->TimeToSendPadding(padding_needed); |
+ size_t bytes_sent = callback_->TimeToSendPadding(padding_needed); |
critsect_->Enter(); |
if (bytes_sent > 0) { |