Allow configuring pacer burst through RtcConfiguration

This allow exernal applications to control how many packets can be sent relative current BWE.

This is a partial revert of https://webrtc-review.googlesource.com/c/src/+/311102

Bug: chromium:1354491
Change-Id: Ia236aaacc468ddac12341efa555041bb2dfdde62
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/330580
Commit-Queue: Per Kjellander <perkj@webrtc.org>
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Reviewed-by: Erik Språng <sprang@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#41343}
diff --git a/api/peer_connection_interface.h b/api/peer_connection_interface.h
index e8dc3dd..c44e741 100644
--- a/api/peer_connection_interface.h
+++ b/api/peer_connection_interface.h
@@ -686,7 +686,6 @@
     PortAllocatorConfig port_allocator_config;
 
     // The burst interval of the pacer, see TaskQueuePacedSender constructor.
-    // TODO(hbos): Deprecated, Remove once Chromium is not setting it.
     absl::optional<TimeDelta> pacer_burst_interval;
 
     //
diff --git a/call/call_config.cc b/call/call_config.cc
index 5f77714..ae4ff86 100644
--- a/call/call_config.cc
+++ b/call/call_config.cc
@@ -31,6 +31,7 @@
       network_state_predictor_factory;
   transportConfig.task_queue_factory = &env.task_queue_factory();
   transportConfig.trials = &env.field_trials();
+  transportConfig.pacer_burst_interval = pacer_burst_interval;
 
   return transportConfig;
 }
diff --git a/call/call_config.h b/call/call_config.h
index 0642cc2..b99c644 100644
--- a/call/call_config.h
+++ b/call/call_config.h
@@ -70,6 +70,9 @@
 
   Metronome* decode_metronome = nullptr;
 
+  // The burst interval of the pacer, see TaskQueuePacedSender constructor.
+  absl::optional<TimeDelta> pacer_burst_interval;
+
   // Enables send packet batching from the egress RTP sender.
   bool enable_send_packet_batching = false;
 };
diff --git a/call/rtp_transport_config.h b/call/rtp_transport_config.h
index f2030b3..6c94f7d 100644
--- a/call/rtp_transport_config.h
+++ b/call/rtp_transport_config.h
@@ -44,6 +44,9 @@
   // Key-value mapping of internal configurations to apply,
   // e.g. field trials.
   const FieldTrialsView* trials = nullptr;
+
+  // The burst interval of the pacer, see TaskQueuePacedSender constructor.
+  absl::optional<TimeDelta> pacer_burst_interval;
 };
 }  // namespace webrtc
 
diff --git a/call/rtp_transport_controller_send.cc b/call/rtp_transport_controller_send.cc
index 8d24f75..afe6cb0 100644
--- a/call/rtp_transport_controller_send.cc
+++ b/call/rtp_transport_controller_send.cc
@@ -111,6 +111,10 @@
   pacer_.SetPacingRates(
       DataRate::BitsPerSec(config.bitrate_config.start_bitrate_bps),
       DataRate::Zero());
+  if (config.pacer_burst_interval) {
+    // Default burst interval overriden by config.
+    pacer_.SetSendBurstInterval(*config.pacer_burst_interval);
+  }
 }
 
 RtpTransportControllerSend::~RtpTransportControllerSend() {
diff --git a/pc/peer_connection_factory.cc b/pc/peer_connection_factory.cc
index 951da5f..06ca790 100644
--- a/pc/peer_connection_factory.cc
+++ b/pc/peer_connection_factory.cc
@@ -344,6 +344,7 @@
   call_config.rtp_transport_controller_send_factory =
       transport_controller_send_factory_.get();
   call_config.decode_metronome = decode_metronome_.get();
+  call_config.pacer_burst_interval = configuration.pacer_burst_interval;
   return context_->call_factory()->CreateCall(call_config);
 }