Index: webrtc/video/video_send_stream.cc |
diff --git a/webrtc/video/video_send_stream.cc b/webrtc/video/video_send_stream.cc |
index 9a3b51e278a0c4f69608e9ea5966f9b82e7f76d2..1fc6948633d2705ed303b89536e109e3db6adc68 100644 |
--- a/webrtc/video/video_send_stream.cc |
+++ b/webrtc/video/video_send_stream.cc |
@@ -276,6 +276,19 @@ int CalculateMaxPadBitrateBps(std::vector<VideoStream> streams, |
return pad_up_to_bitrate_bps; |
} |
+uint32_t CalculateOverheadRateBps(uint32_t bitrate_bps, |
+ size_t packet_size_bytes, |
+ size_t overhead_bytes_per_packet, |
+ uint32_t max_overhead_bps) { |
+ if (webrtc::field_trial::FindFullName("WebRTC-SendSideBwe-WithOverhead") != |
+ "Enabled") |
+ return 0; |
+ int packets_per_second = std::ceil(bitrate_bps / (8 * packet_size_bytes)); |
+ uint32_t overhead_bps = |
+ static_cast<uint32_t>(8 * overhead_bytes_per_packet * packets_per_second); |
+ return overhead_bps > max_overhead_bps ? max_overhead_bps : overhead_bps; |
+} |
+ |
} // namespace |
namespace internal { |
@@ -1186,23 +1199,28 @@ uint32_t VideoSendStreamImpl::OnBitrateUpdated(uint32_t bitrate_bps, |
RTC_DCHECK(payload_router_.IsActive()) |
<< "VideoSendStream::Start has not been called."; |
- if (webrtc::field_trial::FindFullName("WebRTC-SendSideBwe-WithOverhead") == |
- "Enabled") { |
- // Substract overhead from bitrate. |
- rtc::CritScope lock(&overhead_bytes_per_packet_crit_); |
- int packets_per_second = |
- std::ceil(bitrate_bps / (8 * (config_->rtp.max_packet_size + |
- transport_overhead_bytes_per_packet_))); |
- uint32_t overhead_bps = static_cast<uint32_t>( |
- 8 * overhead_bytes_per_packet_ * packets_per_second); |
- bitrate_bps = overhead_bps > bitrate_bps ? 0u : bitrate_bps - overhead_bps; |
- } |
+ // Substract overhead from bitrate. |
+ rtc::CritScope lock(&overhead_bytes_per_packet_crit_); |
+ uint32_t payload_bitrate_bps = |
+ bitrate_bps - CalculateOverheadRateBps( |
+ bitrate_bps, config_->rtp.max_packet_size + |
+ transport_overhead_bytes_per_packet_, |
+ overhead_bytes_per_packet_, bitrate_bps); |
// Get the encoder target rate. It is the estimated network rate - |
// protection overhead. |
encoder_target_rate_bps_ = protection_bitrate_calculator_.SetTargetRates( |
- bitrate_bps, stats_proxy_->GetSendFrameRate(), fraction_loss, rtt); |
- uint32_t protection_bitrate = bitrate_bps - encoder_target_rate_bps_; |
+ payload_bitrate_bps, stats_proxy_->GetSendFrameRate(), fraction_loss, |
+ rtt); |
+ |
+ uint32_t encoder_overhead_rate_bps = CalculateOverheadRateBps( |
+ encoder_target_rate_bps_, |
+ config_->rtp.max_packet_size + transport_overhead_bytes_per_packet_ - |
+ overhead_bytes_per_packet_, |
+ overhead_bytes_per_packet_, bitrate_bps - encoder_target_rate_bps_); |
+ |
+ uint32_t protection_bitrate = |
stefan-webrtc
2016/12/22 11:38:41
So this is the protection bitrate including overhe
michaelt
2016/12/22 14:14:14
I'm not sure about this since it would just includ
stefan-webrtc
2017/01/10 15:28:13
Yes, please add a comment in that case.
michaelt
2017/01/10 16:31:53
Done.
|
+ bitrate_bps - (encoder_target_rate_bps_ + encoder_overhead_rate_bps); |
encoder_target_rate_bps_ = |
std::min(encoder_max_bitrate_bps_, encoder_target_rate_bps_); |