Specific pacing configuration.
Allow configuration of pacing parameters, independently of ALR configuration.
Bug: webrtc:10038
Change-Id: I2a7f650d1e6d58f9936fc481988bc4bb6fba7220
Reviewed-on: https://webrtc-review.googlesource.com/c/112127
Reviewed-by: Erik Språng <sprang@webrtc.org>
Commit-Queue: Christoffer Rodbro <crodbro@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#25796}
diff --git a/video/video_send_stream_impl.cc b/video/video_send_stream_impl.cc
index bc35ab9..5dcf182 100644
--- a/video/video_send_stream_impl.cc
+++ b/video/video_send_stream_impl.cc
@@ -159,6 +159,16 @@
}
} // namespace
+PacingConfig::PacingConfig()
+ : pacing_factor("factor", PacedSender::kDefaultPaceMultiplier),
+ max_pacing_delay("max_delay",
+ TimeDelta::ms(PacedSender::kMaxQueueLengthMs)) {
+ ParseFieldTrial({&pacing_factor, &max_pacing_delay},
+ field_trial::FindFullName("WebRTC-Video-Pacing"));
+}
+PacingConfig::PacingConfig(const PacingConfig&) = default;
+PacingConfig::~PacingConfig() = default;
+
// CheckEncoderActivityTask is used for tracking when the encoder last produced
// and encoded video frame. If the encoder has not produced anything the last
// kEncoderTimeOutMs we also want to stop sending padding.
@@ -229,6 +239,7 @@
std::unique_ptr<FecController> fec_controller)
: has_alr_probing_(config->periodic_alr_bandwidth_probing ||
GetAlrSettings(content_type)),
+ pacing_config_(PacingConfig()),
stats_proxy_(stats_proxy),
config_(config),
worker_queue_(worker_queue),
@@ -302,9 +313,9 @@
transport->SetQueueTimeLimit(alr_settings->max_paced_queue_time);
} else {
transport->EnablePeriodicAlrProbing(false);
- transport->SetPacingFactor(PacedSender::kDefaultPaceMultiplier);
- configured_pacing_factor_ = PacedSender::kDefaultPaceMultiplier;
- transport->SetQueueTimeLimit(PacedSender::kMaxQueueLengthMs);
+ transport->SetPacingFactor(pacing_config_.pacing_factor);
+ configured_pacing_factor_ = pacing_config_.pacing_factor;
+ transport->SetQueueTimeLimit(pacing_config_.max_pacing_delay.Get().ms());
}
}
diff --git a/video/video_send_stream_impl.h b/video/video_send_stream_impl.h
index 5ef4a45..9caabac 100644
--- a/video/video_send_stream_impl.h
+++ b/video/video_send_stream_impl.h
@@ -29,6 +29,16 @@
namespace webrtc {
namespace internal {
+// Pacing buffer config; overridden by ALR config if provided.
+struct PacingConfig {
+ PacingConfig();
+ PacingConfig(const PacingConfig&);
+ PacingConfig& operator=(const PacingConfig&) = default;
+ ~PacingConfig();
+ FieldTrialParameter<double> pacing_factor;
+ FieldTrialParameter<TimeDelta> max_pacing_delay;
+};
+
// VideoSendStreamImpl implements internal::VideoSendStream.
// It is created and destroyed on |worker_queue|. The intent is to decrease the
// need for locking and to ensure methods are called in sequence.
@@ -111,6 +121,7 @@
void SignalEncoderActive();
const bool has_alr_probing_;
+ const PacingConfig pacing_config_;
SendStatisticsProxy* const stats_proxy_;
const VideoSendStream::Config* const config_;