Chromium Code Reviews| 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); |
| } |
| } |