Improving padding rules and breaking out bw allocation to ViEEncoder.

BUG=1837
TESTS=vie_auto_test --automated, trybots
R=mflodman@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/2170004

git-svn-id: http://webrtc.googlecode.com/svn/trunk@4693 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
stefan@webrtc.org
2013-09-06 13:58:01 +00:00
parent 7bb8f02274
commit b2c8a952a7
8 changed files with 85 additions and 35 deletions

View File

@@ -1254,42 +1254,35 @@ RtpVideoCodecTypes ModuleRtpRtcpImpl::SendVideoCodec() const {
return rtp_sender_.VideoCodecType();
}
void ModuleRtpRtcpImpl::SetTargetSendBitrate(const uint32_t bitrate) {
void ModuleRtpRtcpImpl::SetTargetSendBitrate(
const std::vector<uint32_t>& stream_bitrates) {
WEBRTC_TRACE(kTraceModuleCall, kTraceRtpRtcp, id_,
"SetTargetSendBitrate: %ubit", bitrate);
"SetTargetSendBitrate: %ld streams", stream_bitrates.size());
const bool have_child_modules(child_modules_.empty() ? false : true);
if (have_child_modules) {
CriticalSectionScoped lock(critical_section_module_ptrs_.get());
if (simulcast_) {
uint32_t bitrate_remainder = bitrate;
std::list<ModuleRtpRtcpImpl*>::iterator it = child_modules_.begin();
for (int i = 0; it != child_modules_.end() &&
i < send_video_codec_.numberOfSimulcastStreams; ++it) {
for (size_t i = 0;
it != child_modules_.end() && i < stream_bitrates.size(); ++it) {
if ((*it)->SendingMedia()) {
RTPSender& rtp_sender = (*it)->rtp_sender_;
if (send_video_codec_.simulcastStream[i].maxBitrate * 1000 >
bitrate_remainder) {
rtp_sender.SetTargetSendBitrate(bitrate_remainder);
bitrate_remainder = 0;
} else {
rtp_sender.SetTargetSendBitrate(
send_video_codec_.simulcastStream[i].maxBitrate * 1000);
bitrate_remainder -=
send_video_codec_.simulcastStream[i].maxBitrate * 1000;
}
rtp_sender.SetTargetSendBitrate(stream_bitrates[i]);
++i;
}
}
} else {
assert(stream_bitrates.size() == 1);
std::list<ModuleRtpRtcpImpl*>::iterator it = child_modules_.begin();
for (; it != child_modules_.end(); ++it) {
RTPSender& rtp_sender = (*it)->rtp_sender_;
rtp_sender.SetTargetSendBitrate(bitrate);
rtp_sender.SetTargetSendBitrate(stream_bitrates[0]);
}
}
} else {
rtp_sender_.SetTargetSendBitrate(bitrate);
assert(stream_bitrates.size() == 1);
rtp_sender_.SetTargetSendBitrate(stream_bitrates[0]);
}
}