| Index: webrtc/video_engine/vie_channel_group.cc
|
| diff --git a/webrtc/video_engine/vie_channel_group.cc b/webrtc/video_engine/vie_channel_group.cc
|
| index 6553ce2e04dcea487b7d4338ec72d1d1ac48060a..ed4332ab08adc778581c142574912206b9a8140c 100644
|
| --- a/webrtc/video_engine/vie_channel_group.cc
|
| +++ b/webrtc/video_engine/vie_channel_group.cc
|
| @@ -43,12 +43,10 @@ class WrappingBitrateEstimator : public RemoteBitrateEstimator {
|
| : observer_(observer),
|
| clock_(clock),
|
| crit_sect_(CriticalSectionWrapper::CreateCriticalSection()),
|
| - min_bitrate_bps_(RemoteBitrateEstimator::kDefaultMinBitrateBps),
|
| - rbe_(new RemoteBitrateEstimatorSingleStream(observer_,
|
| - clock_,
|
| - min_bitrate_bps_)),
|
| + rbe_(new RemoteBitrateEstimatorSingleStream(observer_, clock_)),
|
| using_absolute_send_time_(false),
|
| - packets_since_absolute_send_time_(0) {}
|
| + packets_since_absolute_send_time_(0),
|
| + min_bitrate_bps_(RemoteBitrateEstimator::kDefaultMinBitrateBps) {}
|
|
|
| virtual ~WrappingBitrateEstimator() {}
|
|
|
| @@ -92,6 +90,12 @@ class WrappingBitrateEstimator : public RemoteBitrateEstimator {
|
| return rbe_->GetStats(output);
|
| }
|
|
|
| + void SetMinBitrate(int min_bitrate_bps) {
|
| + CriticalSectionScoped cs(crit_sect_.get());
|
| + rbe_->SetMinBitrate(min_bitrate_bps);
|
| + min_bitrate_bps_ = min_bitrate_bps;
|
| + }
|
| +
|
| private:
|
| void PickEstimatorFromHeader(const RTPHeader& header)
|
| EXCLUSIVE_LOCKS_REQUIRED(crit_sect_.get()) {
|
| @@ -121,21 +125,20 @@ class WrappingBitrateEstimator : public RemoteBitrateEstimator {
|
| // Instantiate RBE for Time Offset or Absolute Send Time extensions.
|
| void PickEstimator() EXCLUSIVE_LOCKS_REQUIRED(crit_sect_.get()) {
|
| if (using_absolute_send_time_) {
|
| - rbe_.reset(new RemoteBitrateEstimatorAbsSendTime(observer_, clock_,
|
| - min_bitrate_bps_));
|
| + rbe_.reset(new RemoteBitrateEstimatorAbsSendTime(observer_, clock_));
|
| } else {
|
| - rbe_.reset(new RemoteBitrateEstimatorSingleStream(observer_, clock_,
|
| - min_bitrate_bps_));
|
| + rbe_.reset(new RemoteBitrateEstimatorSingleStream(observer_, clock_));
|
| }
|
| + rbe_->SetMinBitrate(min_bitrate_bps_);
|
| }
|
|
|
| RemoteBitrateObserver* observer_;
|
| Clock* clock_;
|
| rtc::scoped_ptr<CriticalSectionWrapper> crit_sect_;
|
| - const uint32_t min_bitrate_bps_;
|
| rtc::scoped_ptr<RemoteBitrateEstimator> rbe_;
|
| bool using_absolute_send_time_;
|
| uint32_t packets_since_absolute_send_time_;
|
| + int min_bitrate_bps_;
|
|
|
| RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(WrappingBitrateEstimator);
|
| };
|
| @@ -165,7 +168,8 @@ ChannelGroup::ChannelGroup(ProcessThread* process_thread)
|
| // construction.
|
| bitrate_controller_(
|
| BitrateController::CreateBitrateController(Clock::GetRealTimeClock(),
|
| - this)) {
|
| + this)),
|
| + min_bitrate_bps_(RemoteBitrateEstimator::kDefaultMinBitrateBps) {
|
| call_stats_->RegisterStatsObserver(remote_bitrate_estimator_.get());
|
|
|
| pacer_thread_->RegisterModule(pacer_.get());
|
| @@ -213,8 +217,9 @@ bool ChannelGroup::CreateSendChannel(int channel_id,
|
| Clock::GetRealTimeClock(), process_thread_));
|
| transport_feedback_adapter_->SetBitrateEstimator(
|
| new RemoteBitrateEstimatorAbsSendTime(
|
| - transport_feedback_adapter_.get(), Clock::GetRealTimeClock(),
|
| - RemoteBitrateEstimator::kDefaultMinBitrateBps));
|
| + transport_feedback_adapter_.get(), Clock::GetRealTimeClock()));
|
| + transport_feedback_adapter_->GetBitrateEstimator()->SetMinBitrate(
|
| + min_bitrate_bps_);
|
| call_stats_->RegisterStatsObserver(transport_feedback_adapter_.get());
|
| }
|
| transport_feedback_observer = transport_feedback_adapter_.get();
|
| @@ -364,6 +369,20 @@ void ChannelGroup::SetSyncInterface(VoEVideoSync* sync_interface) {
|
| channel.second->SetVoiceChannel(-1, sync_interface);
|
| }
|
|
|
| +void ChannelGroup::SetBweBitrates(int min_bitrate_bps,
|
| + int start_bitrate_bps,
|
| + int max_bitrate_bps) {
|
| + if (start_bitrate_bps > 0)
|
| + bitrate_controller_->SetStartBitrate(start_bitrate_bps);
|
| + bitrate_controller_->SetMinMaxBitrate(min_bitrate_bps, max_bitrate_bps);
|
| + if (remote_bitrate_estimator_.get())
|
| + remote_bitrate_estimator_->SetMinBitrate(min_bitrate_bps);
|
| + if (transport_feedback_adapter_.get())
|
| + transport_feedback_adapter_->GetBitrateEstimator()->SetMinBitrate(
|
| + min_bitrate_bps);
|
| + min_bitrate_bps_ = min_bitrate_bps;
|
| +}
|
| +
|
| BitrateController* ChannelGroup::GetBitrateController() const {
|
| return bitrate_controller_.get();
|
| }
|
|
|