| Index: webrtc/video/payload_router.cc
|
| diff --git a/webrtc/video/payload_router.cc b/webrtc/video/payload_router.cc
|
| index 3be5882cdbf2172928fe312caf2a9b3401d1ea9b..3784215bc377ee6b9e442cb26ae37fea339401ee 100644
|
| --- a/webrtc/video/payload_router.cc
|
| +++ b/webrtc/video/payload_router.cc
|
| @@ -85,12 +85,19 @@ void CopyCodecSpecific(const CodecSpecificInfo* info, RTPVideoHeader* rtp) {
|
| }
|
| }
|
|
|
| +VideoCodec DefaultCodec() {
|
| + VideoCodec codec;
|
| + memset(&codec, 0, sizeof(VideoCodec));
|
| + return codec;
|
| +}
|
| +
|
| } // namespace
|
|
|
| PayloadRouter::PayloadRouter(const std::vector<RtpRtcp*>& rtp_modules,
|
| int payload_type)
|
| : active_(false),
|
| num_sending_modules_(1),
|
| + simulcast_state_(DefaultCodec()),
|
| rtp_modules_(rtp_modules),
|
| payload_type_(payload_type) {
|
| UpdateModuleSendingState();
|
| @@ -170,21 +177,20 @@ void PayloadRouter::SetTargetSendBitrate(uint32_t bitrate_bps) {
|
| rtc::CritScope lock(&crit_);
|
| RTC_DCHECK_LE(streams_.size(), rtp_modules_.size());
|
|
|
| - // TODO(sprang): Rebase https://codereview.webrtc.org/1913073002/ on top of
|
| - // this.
|
| - 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);
|
| + if (simulcast_state_.NumStreams() > 0) {
|
| + simulcast_state_.AllocateBitrate(bitrate_bps);
|
| + for (auto& stream : simulcast_state_.Streams())
|
| + rtp_modules_[stream.idx]->SetTargetSendBitrate(stream.allocated_rate_bps);
|
| + } else {
|
| + rtp_modules_[0]->SetTargetSendBitrate(bitrate_bps);
|
| }
|
| }
|
|
|
| +void PayloadRouter::UpdateSimulcastState(const SimulcastState& state) {
|
| + rtc::CritScope lock(&crit_);
|
| + simulcast_state_ = state;
|
| +}
|
| +
|
| size_t PayloadRouter::MaxPayloadLength() const {
|
| size_t min_payload_length = DefaultMaxPayloadLength();
|
| rtc::CritScope lock(&crit_);
|
|
|