Index: webrtc/video/payload_router.cc |
diff --git a/webrtc/video/payload_router.cc b/webrtc/video/payload_router.cc |
index abe476f276b8a83532446dab87be9f27a6ae7ceb..7ed9955d2da88b6f72de97d572c8a83c0735a64f 100644 |
--- a/webrtc/video/payload_router.cc |
+++ b/webrtc/video/payload_router.cc |
@@ -84,6 +84,7 @@ void CopyCodecSpecific(const CodecSpecificInfo* info, RTPVideoHeader* rtp) { |
return; |
} |
} |
+ |
} // namespace |
PayloadRouter::PayloadRouter(const std::vector<RtpRtcp*>& rtp_modules, |
@@ -115,10 +116,11 @@ bool PayloadRouter::active() { |
return active_ && !rtp_modules_.empty(); |
} |
-void PayloadRouter::SetSendingRtpModules(size_t num_sending_modules) { |
- RTC_DCHECK_LE(num_sending_modules, rtp_modules_.size()); |
+void PayloadRouter::SetSendStreams(const std::vector<VideoStream>& streams) { |
+ RTC_DCHECK_LE(streams.size(), rtp_modules_.size()); |
rtc::CritScope lock(&crit_); |
- num_sending_modules_ = num_sending_modules; |
+ num_sending_modules_ = streams.size(); |
+ streams_ = streams; |
pbos-webrtc
2016/05/02 00:45:44
Perhaps this one should also reallocate bitrates,
perkj_webrtc
2016/05/02 12:33:19
Done.
|
UpdateModuleSendingState(); |
} |
@@ -163,12 +165,23 @@ int32_t PayloadRouter::Encoded(const EncodedImage& encoded_image, |
encoded_image._length, fragmentation, &rtp_video_header); |
} |
-void PayloadRouter::SetTargetSendBitrates( |
- const std::vector<uint32_t>& stream_bitrates) { |
+void PayloadRouter::SetTargetSendBitrate(uint32_t bitrate_bps) { |
rtc::CritScope lock(&crit_); |
- RTC_DCHECK_LE(stream_bitrates.size(), rtp_modules_.size()); |
- for (size_t i = 0; i < stream_bitrates.size(); ++i) { |
- rtp_modules_[i]->SetTargetSendBitrate(stream_bitrates[i]); |
+ RTC_DCHECK_LE(streams_.size(), rtp_modules_.size()); |
+ |
+ // Allocate the bandwidth between the streams. |
pbos-webrtc
2016/05/02 00:45:44
I think this should be target_bitrate_bps for all
perkj_webrtc
2016/05/02 12:33:19
Done.
|
+ // TODO(perkj): Why are we allocating bitrates here as well as in the |
+ // VCM. It should be done once, in the BitrateAllocator? |
+ int bitrate_remainder = bitrate_bps; |
+ for (size_t i = 0; i < streams_.size() && bitrate_remainder > 0; ++i) { |
+ int stream_bitrate = 0; |
+ if (streams_[i].max_bitrate_bps > bitrate_remainder) { |
+ stream_bitrate = bitrate_remainder; |
+ } else { |
+ stream_bitrate = streams_[i].max_bitrate_bps; |
+ } |
+ bitrate_remainder -= stream_bitrate; |
+ rtp_modules_[i]->SetTargetSendBitrate(stream_bitrate); |
} |
} |