Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(610)

Unified Diff: webrtc/modules/bitrate_controller/bitrate_controller_impl.cc

Issue 1917793002: Remove SendPacer from ViEEncoder (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Rebased Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webrtc/modules/bitrate_controller/bitrate_controller_impl.cc
diff --git a/webrtc/modules/bitrate_controller/bitrate_controller_impl.cc b/webrtc/modules/bitrate_controller/bitrate_controller_impl.cc
index bf608789d5d7462110f9c6e434d4def02a09c79e..f270f17670b06ee4cf089a49a1fb46c0c8fbf7c6 100644
--- a/webrtc/modules/bitrate_controller/bitrate_controller_impl.cc
+++ b/webrtc/modules/bitrate_controller/bitrate_controller_impl.cc
@@ -15,6 +15,8 @@
#include <map>
#include <utility>
+#include "webrtc/base/checks.h"
+#include "webrtc/base/logging.h"
#include "webrtc/modules/rtp_rtcp/include/rtp_rtcp_defines.h"
namespace webrtc {
@@ -79,21 +81,27 @@ class BitrateControllerImpl::RtcpBandwidthObserverImpl
BitrateController* BitrateController::CreateBitrateController(
Clock* clock,
- BitrateObserver* observer) {
- return new BitrateControllerImpl(clock, observer);
+ BitrateObserver* observer,
+ PacedSender* pacer) {
+ return new BitrateControllerImpl(clock, observer, pacer);
}
BitrateControllerImpl::BitrateControllerImpl(Clock* clock,
- BitrateObserver* observer)
+ BitrateObserver* observer,
+ PacedSender* pacer)
: clock_(clock),
observer_(observer),
+ pacer_(pacer),
last_bitrate_update_ms_(clock_->TimeInMilliseconds()),
bandwidth_estimation_(),
reserved_bitrate_bps_(0),
last_bitrate_bps_(0),
last_fraction_loss_(0),
last_rtt_ms_(0),
- last_reserved_bitrate_bps_(0) {
+ last_reserved_bitrate_bps_(0),
+ send_queue_full_(false) {
+ RTC_DCHECK(observer_);
+ RTC_DCHECK(pacer_);
// This calls the observer_, which means that the observer provided by the
// user must be ready to accept a bitrate update when it constructs the
// controller. We do this to avoid having to keep synchronized initial values
@@ -187,11 +195,24 @@ void BitrateControllerImpl::OnReceivedRtcpReceiverReport(
}
void BitrateControllerImpl::MaybeTriggerOnNetworkChanged() {
- uint32_t bitrate;
+ uint32_t bitrate_bps;
uint8_t fraction_loss;
int64_t rtt;
- if (GetNetworkParameters(&bitrate, &fraction_loss, &rtt))
- observer_->OnNetworkChanged(bitrate, fraction_loss, rtt);
+
+ bool network_changed =
+ GetNetworkParameters(&bitrate_bps, &fraction_loss, &rtt);
+ if (network_changed) {
+ pacer_->SetNetWorkEstimateTargetBitrate(bitrate_bps);
stefan-webrtc 2016/04/29 10:48:38 I'd prefer keeping this in OnNetworkChanged and no
perkj_webrtc 2016/05/02 11:29:10 ok- as discussed.
+ }
+ bool send_queue_full =
+ pacer_->ExpectedQueueTimeMs() > PacedSender::kMaxQueueLengthMs;
+
+ bitrate_bps = send_queue_full ? 0 : bitrate_bps;
+ if (UpdateSendQueueStatus(send_queue_full) ||
+ (network_changed && !send_queue_full)) {
+ observer_->OnNetworkChanged(bitrate_bps, fraction_loss, rtt);
+ return;
+ }
}
bool BitrateControllerImpl::GetNetworkParameters(uint32_t* bitrate,
@@ -215,9 +236,21 @@ bool BitrateControllerImpl::GetNetworkParameters(uint32_t* bitrate,
last_reserved_bitrate_bps_ = reserved_bitrate_bps_;
new_bitrate = true;
}
+
return new_bitrate;
}
+bool BitrateControllerImpl::UpdateSendQueueStatus(bool is_full) {
+ rtc::CritScope cs(&critsect_);
+ bool changed = is_full != send_queue_full_;
+ send_queue_full_ = is_full;
+ if (changed) {
+ LOG(LS_INFO) << "Send queue status changed state. "
+ << " Queue is " << (changed ? "full" : "not full.");
+ }
+ return changed;
+}
+
bool BitrateControllerImpl::AvailableBandwidth(uint32_t* bandwidth) const {
rtc::CritScope cs(&critsect_);
int bitrate;

Powered by Google App Engine
This is Rietveld 408576698