From a4a8d4ad27bd0bd7a6cc5df697951d4531ddb4ee Mon Sep 17 00:00:00 2001 From: stefan Date: Wed, 15 Jul 2015 04:39:22 -0700 Subject: [PATCH] Base padding bitrate for an encoder on the bitrate allocated for that encoder, rather than the total bitrate of the channel group. Review URL: https://codereview.webrtc.org/1231273004 Cr-Commit-Position: refs/heads/master@{#9584} --- webrtc/video_engine/vie_channel_group.cc | 6 ++---- webrtc/video_engine/vie_encoder.cc | 9 ++++----- webrtc/video_engine/vie_encoder.h | 2 +- 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/webrtc/video_engine/vie_channel_group.cc b/webrtc/video_engine/vie_channel_group.cc index bf011373a2..055e1c3a19 100644 --- a/webrtc/video_engine/vie_channel_group.cc +++ b/webrtc/video_engine/vie_channel_group.cc @@ -479,10 +479,8 @@ void ChannelGroup::OnNetworkChanged(uint32_t target_bitrate_bps, int pad_up_to_bitrate_bps = 0; { CriticalSectionScoped lock(encoder_map_cs_.get()); - for (const auto& encoder : send_encoders_) { - pad_up_to_bitrate_bps += - encoder.second->GetPaddingNeededBps(target_bitrate_bps); - } + for (const auto& encoder : send_encoders_) + pad_up_to_bitrate_bps += encoder.second->GetPaddingNeededBps(); } pacer_->UpdateBitrate( target_bitrate_bps / 1000, diff --git a/webrtc/video_engine/vie_encoder.cc b/webrtc/video_engine/vie_encoder.cc index 26e76e7de8..173ca9684a 100644 --- a/webrtc/video_engine/vie_encoder.cc +++ b/webrtc/video_engine/vie_encoder.cc @@ -397,9 +397,10 @@ int32_t ViEEncoder::ScaleInputImage(bool enable) { return 0; } -int ViEEncoder::GetPaddingNeededBps(int bitrate_bps) const { +int ViEEncoder::GetPaddingNeededBps() const { int64_t time_of_last_frame_activity_ms; int min_transmit_bitrate_bps; + int bitrate_bps; { CriticalSectionScoped cs(data_cs_.get()); bool send_padding = @@ -408,15 +409,12 @@ int ViEEncoder::GetPaddingNeededBps(int bitrate_bps) const { return 0; time_of_last_frame_activity_ms = time_of_last_frame_activity_ms_; min_transmit_bitrate_bps = 1000 * min_transmit_bitrate_kbps_; + bitrate_bps = last_observed_bitrate_bps_; } VideoCodec send_codec; if (vcm_->SendCodec(&send_codec) != 0) return 0; - SimulcastStream* stream_configs = send_codec.simulcastStream; - // Allocate the bandwidth between the streams. - std::vector stream_bitrates = AllocateStreamBitrates( - bitrate_bps, stream_configs, send_codec.numberOfSimulcastStreams); bool video_is_suspended = vcm_->VideoSuspended(); @@ -427,6 +425,7 @@ int ViEEncoder::GetPaddingNeededBps(int bitrate_bps) const { if (send_codec.numberOfSimulcastStreams == 0) { pad_up_to_bitrate_bps = send_codec.minBitrate * 1000; } else { + SimulcastStream* stream_configs = send_codec.simulcastStream; pad_up_to_bitrate_bps = stream_configs[send_codec.numberOfSimulcastStreams - 1].minBitrate * 1000; diff --git a/webrtc/video_engine/vie_encoder.h b/webrtc/video_engine/vie_encoder.h index 44a555b5c7..6ecf6a7b31 100644 --- a/webrtc/video_engine/vie_encoder.h +++ b/webrtc/video_engine/vie_encoder.h @@ -177,7 +177,7 @@ class ViEEncoder : public RtcpIntraFrameObserver, int channel_id() const { return channel_id_; } - int GetPaddingNeededBps(int bitrate_bps) const; + int GetPaddingNeededBps() const; protected: // Called by BitrateObserver.