diff --git a/webrtc/modules/remote_bitrate_estimator/include/remote_bitrate_estimator.h b/webrtc/modules/remote_bitrate_estimator/include/remote_bitrate_estimator.h index 5bf8af972d..170ec765c1 100644 --- a/webrtc/modules/remote_bitrate_estimator/include/remote_bitrate_estimator.h +++ b/webrtc/modules/remote_bitrate_estimator/include/remote_bitrate_estimator.h @@ -69,7 +69,8 @@ struct RemoteBitrateEstimatorFactory { virtual RemoteBitrateEstimator* Create( RemoteBitrateObserver* observer, - Clock* clock) const; + Clock* clock, + uint32_t min_bitrate_bps) const; }; struct AbsoluteSendTimeRemoteBitrateEstimatorFactory @@ -79,7 +80,8 @@ struct AbsoluteSendTimeRemoteBitrateEstimatorFactory virtual RemoteBitrateEstimator* Create( RemoteBitrateObserver* observer, - Clock* clock) const; + Clock* clock, + uint32_t min_bitrate_bps) const; }; } // namespace webrtc diff --git a/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_single_stream.cc b/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_single_stream.cc index 69ebab45f1..69b35c5789 100644 --- a/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_single_stream.cc +++ b/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_single_stream.cc @@ -24,7 +24,8 @@ namespace { class RemoteBitrateEstimatorSingleStream : public RemoteBitrateEstimator { public: RemoteBitrateEstimatorSingleStream(RemoteBitrateObserver* observer, - Clock* clock); + Clock* clock, + uint32_t min_bitrate_bps); virtual ~RemoteBitrateEstimatorSingleStream() {} // Called for each incoming packet. If this is a new SSRC, a new @@ -72,9 +73,11 @@ class RemoteBitrateEstimatorSingleStream : public RemoteBitrateEstimator { RemoteBitrateEstimatorSingleStream::RemoteBitrateEstimatorSingleStream( RemoteBitrateObserver* observer, - Clock* clock) + Clock* clock, + uint32_t min_bitrate_bps) : clock_(clock), incoming_bitrate_(500, 8000), + remote_rate_(min_bitrate_bps), observer_(observer), crit_sect_(CriticalSectionWrapper::CreateCriticalSection()), last_process_time_(-1) { @@ -220,13 +223,17 @@ void RemoteBitrateEstimatorSingleStream::GetSsrcs( RemoteBitrateEstimator* RemoteBitrateEstimatorFactory::Create( RemoteBitrateObserver* observer, - Clock* clock) const { - return new RemoteBitrateEstimatorSingleStream(observer, clock); + Clock* clock, + uint32_t min_bitrate_bps) const { + return new RemoteBitrateEstimatorSingleStream(observer, clock, + min_bitrate_bps); } RemoteBitrateEstimator* AbsoluteSendTimeRemoteBitrateEstimatorFactory::Create( RemoteBitrateObserver* observer, - Clock* clock) const { - return new RemoteBitrateEstimatorSingleStream(observer, clock); + Clock* clock, + uint32_t min_bitrate_bps) const { + return new RemoteBitrateEstimatorSingleStream(observer, clock, + min_bitrate_bps); } } // namespace webrtc diff --git a/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_single_stream_unittest.cc b/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_single_stream_unittest.cc index 69cb38a7c8..a3e44d87ef 100644 --- a/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_single_stream_unittest.cc +++ b/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_single_stream_unittest.cc @@ -17,11 +17,14 @@ namespace webrtc { class RemoteBitrateEstimatorSingleTest : public RemoteBitrateEstimatorTest { public: + static const uint32_t kRemoteBitrateEstimatorMinBitrateBps = 30000; + RemoteBitrateEstimatorSingleTest() {} virtual void SetUp() { bitrate_estimator_.reset(RemoteBitrateEstimatorFactory().Create( bitrate_observer_.get(), - &clock_)); + &clock_, + kRemoteBitrateEstimatorMinBitrateBps)); } protected: DISALLOW_COPY_AND_ASSIGN(RemoteBitrateEstimatorSingleTest); diff --git a/webrtc/modules/remote_bitrate_estimator/remote_rate_control.cc b/webrtc/modules/remote_bitrate_estimator/remote_rate_control.cc index 1f5fe42bce..994abdbee8 100644 --- a/webrtc/modules/remote_bitrate_estimator/remote_rate_control.cc +++ b/webrtc/modules/remote_bitrate_estimator/remote_rate_control.cc @@ -22,8 +22,8 @@ namespace webrtc { const unsigned int kDefaultRttMs = 200; -RemoteRateControl::RemoteRateControl() - : min_configured_bit_rate_(30000), +RemoteRateControl::RemoteRateControl(uint32_t min_bitrate_bps) + : min_configured_bit_rate_(min_bitrate_bps), max_configured_bit_rate_(30000000), current_bit_rate_(max_configured_bit_rate_), max_hold_rate_(0), @@ -45,7 +45,7 @@ RemoteRateControl::RemoteRateControl() } void RemoteRateControl::Reset() { - *this = RemoteRateControl(); + *this = RemoteRateControl(min_configured_bit_rate_); came_from_state_ = kRcHold; } diff --git a/webrtc/modules/remote_bitrate_estimator/remote_rate_control.h b/webrtc/modules/remote_bitrate_estimator/remote_rate_control.h index 87a57217a5..b525834eca 100644 --- a/webrtc/modules/remote_bitrate_estimator/remote_rate_control.h +++ b/webrtc/modules/remote_bitrate_estimator/remote_rate_control.h @@ -17,7 +17,7 @@ namespace webrtc { class RemoteRateControl { public: - RemoteRateControl(); + explicit RemoteRateControl(uint32_t min_bitrate_bps); ~RemoteRateControl() {} void Reset(); diff --git a/webrtc/modules/remote_bitrate_estimator/test/bwe_test.cc b/webrtc/modules/remote_bitrate_estimator/test/bwe_test.cc index e04328cac3..20f9f55b5d 100644 --- a/webrtc/modules/remote_bitrate_estimator/test/bwe_test.cc +++ b/webrtc/modules/remote_bitrate_estimator/test/bwe_test.cc @@ -36,6 +36,8 @@ template void DeleteElements(T* container) { class BweTest::TestedEstimator : public RemoteBitrateObserver { public: + static const uint32_t kRemoteBitrateEstimatorMinBitrateBps = 30000; + TestedEstimator(const string& test_name, const BweTestConfig::EstimatorConfig& config) : debug_name_(config.debug_name), @@ -43,7 +45,8 @@ class BweTest::TestedEstimator : public RemoteBitrateObserver { stats_(), relative_estimator_stats_(), latest_estimate_bps_(-1), - estimator_(config.estimator_factory->Create(this, &clock_)), + estimator_(config.estimator_factory->Create( + this, &clock_, kRemoteBitrateEstimatorMinBitrateBps)), relative_estimator_(NULL), baseline_(BaseLineFileInterface::Create(test_name + "_" + debug_name_, config.update_baseline)) { diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_format_remb_unittest.cc b/webrtc/modules/rtp_rtcp/source/rtcp_format_remb_unittest.cc index cbd899394f..68f6137139 100644 --- a/webrtc/modules/rtp_rtcp/source/rtcp_format_remb_unittest.cc +++ b/webrtc/modules/rtp_rtcp/source/rtcp_format_remb_unittest.cc @@ -58,6 +58,8 @@ class TestTransport : public Transport { class RtcpFormatRembTest : public ::testing::Test { protected: + static const uint32_t kRemoteBitrateEstimatorMinBitrateBps = 30000; + RtcpFormatRembTest() : over_use_detector_options_(), system_clock_(Clock::GetRealTimeClock()), @@ -66,7 +68,8 @@ class RtcpFormatRembTest : public ::testing::Test { remote_bitrate_estimator_( RemoteBitrateEstimatorFactory().Create( &remote_bitrate_observer_, - system_clock_)) {} + system_clock_, + kRemoteBitrateEstimatorMinBitrateBps)) {} virtual void SetUp(); virtual void TearDown(); diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_receiver_unittest.cc b/webrtc/modules/rtp_rtcp/source/rtcp_receiver_unittest.cc index 47befea301..b3f15bb966 100644 --- a/webrtc/modules/rtp_rtcp/source/rtcp_receiver_unittest.cc +++ b/webrtc/modules/rtp_rtcp/source/rtcp_receiver_unittest.cc @@ -251,6 +251,8 @@ class TestTransport : public Transport, class RtcpReceiverTest : public ::testing::Test { protected: + static const uint32_t kRemoteBitrateEstimatorMinBitrateBps = 30000; + RtcpReceiverTest() : over_use_detector_options_(), system_clock_(1335900000), @@ -258,7 +260,8 @@ class RtcpReceiverTest : public ::testing::Test { remote_bitrate_estimator_( RemoteBitrateEstimatorFactory().Create( &remote_bitrate_observer_, - &system_clock_)) { + &system_clock_, + kRemoteBitrateEstimatorMinBitrateBps)) { test_transport_ = new TestTransport(); RtpRtcp::Configuration configuration; diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_sender_unittest.cc b/webrtc/modules/rtp_rtcp/source/rtcp_sender_unittest.cc index 45ef1ec64d..a8b5275fa2 100644 --- a/webrtc/modules/rtp_rtcp/source/rtcp_sender_unittest.cc +++ b/webrtc/modules/rtp_rtcp/source/rtcp_sender_unittest.cc @@ -272,6 +272,8 @@ class TestTransport : public Transport, class RtcpSenderTest : public ::testing::Test { protected: + static const uint32_t kRemoteBitrateEstimatorMinBitrateBps = 30000; + RtcpSenderTest() : over_use_detector_options_(), clock_(1335900000), @@ -281,7 +283,8 @@ class RtcpSenderTest : public ::testing::Test { remote_bitrate_estimator_( RemoteBitrateEstimatorFactory().Create( &remote_bitrate_observer_, - &clock_)), + &clock_, + kRemoteBitrateEstimatorMinBitrateBps)), receive_statistics_(ReceiveStatistics::Create(&clock_)) { test_transport_ = new TestTransport(); diff --git a/webrtc/video/rampup_tests.cc b/webrtc/video/rampup_tests.cc index 562e648863..08676a23e9 100644 --- a/webrtc/video/rampup_tests.cc +++ b/webrtc/video/rampup_tests.cc @@ -77,7 +77,9 @@ class StreamObserver : public newapi::Transport, public RemoteBitrateObserver { rtp_parser_->RegisterRtpHeaderExtension(kRtpExtensionTransmissionTimeOffset, kTOffsetExtensionId); AbsoluteSendTimeRemoteBitrateEstimatorFactory rbe_factory; - remote_bitrate_estimator_.reset(rbe_factory.Create(this, clock)); + const uint32_t kRemoteBitrateEstimatorMinBitrateBps = 30000; + remote_bitrate_estimator_.reset( + rbe_factory.Create(this, clock, kRemoteBitrateEstimatorMinBitrateBps)); } virtual void OnReceiveBitrateChanged(const std::vector& ssrcs, diff --git a/webrtc/video_engine/vie_channel_group.cc b/webrtc/video_engine/vie_channel_group.cc index 50527fe362..d90d7c2da7 100644 --- a/webrtc/video_engine/vie_channel_group.cc +++ b/webrtc/video_engine/vie_channel_group.cc @@ -33,7 +33,9 @@ class WrappingBitrateEstimator : public RemoteBitrateEstimator { clock_(clock), process_thread_(process_thread), crit_sect_(CriticalSectionWrapper::CreateCriticalSection()), - rbe_(RemoteBitrateEstimatorFactory().Create(observer_, clock_)), + min_bitrate_bps_(30000), + rbe_(RemoteBitrateEstimatorFactory().Create(observer_, clock_, + min_bitrate_bps_)), receive_absolute_send_time_(false) { assert(process_thread_ != NULL); process_thread_->RegisterModule(rbe_.get()); @@ -51,9 +53,10 @@ class WrappingBitrateEstimator : public RemoteBitrateEstimator { process_thread_->DeRegisterModule(rbe_.get()); if (enable) { rbe_.reset(AbsoluteSendTimeRemoteBitrateEstimatorFactory().Create( - observer_, clock_)); + observer_, clock_, min_bitrate_bps_)); } else { - rbe_.reset(RemoteBitrateEstimatorFactory().Create(observer_, clock_)); + rbe_.reset(RemoteBitrateEstimatorFactory().Create(observer_, clock_, + min_bitrate_bps_)); } process_thread_->RegisterModule(rbe_.get()); @@ -98,6 +101,7 @@ class WrappingBitrateEstimator : public RemoteBitrateEstimator { Clock* clock_; ProcessThread* process_thread_; scoped_ptr crit_sect_; + const uint32_t min_bitrate_bps_; scoped_ptr rbe_; bool receive_absolute_send_time_;