Index: webrtc/modules/congestion_controller/include/congestion_controller.h |
diff --git a/webrtc/modules/congestion_controller/include/congestion_controller.h b/webrtc/modules/congestion_controller/include/congestion_controller.h |
index 6b85f42b15a5695419f21c49202faa67bb40b86a..e962f9fda2e18300f46d6a286ad07bc7a541c4a4 100644 |
--- a/webrtc/modules/congestion_controller/include/congestion_controller.h |
+++ b/webrtc/modules/congestion_controller/include/congestion_controller.h |
@@ -12,6 +12,7 @@ |
#define WEBRTC_MODULES_CONGESTION_CONTROLLER_INCLUDE_CONGESTION_CONTROLLER_H_ |
#include <memory> |
+#include <utility> |
#include <vector> |
#include "webrtc/base/constructormagic.h" |
@@ -20,12 +21,13 @@ |
#include "webrtc/base/thread_checker.h" |
#include "webrtc/common_types.h" |
#include "webrtc/modules/congestion_controller/delay_based_bwe.h" |
+#include "webrtc/modules/congestion_controller/include/receive_side_congestion_controller.h" |
+#include "webrtc/modules/congestion_controller/include/send_side_congestion_controller.h" |
#include "webrtc/modules/congestion_controller/transport_feedback_adapter.h" |
#include "webrtc/modules/include/module.h" |
#include "webrtc/modules/include/module_common_types.h" |
#include "webrtc/modules/pacing/paced_sender.h" |
#include "webrtc/modules/pacing/packet_router.h" |
-#include "webrtc/modules/remote_bitrate_estimator/remote_estimator_proxy.h" |
namespace rtc { |
struct SentPacket; |
@@ -45,33 +47,25 @@ class CongestionController : public CallStatsObserver, |
public Module, |
public TransportFeedbackObserver { |
public: |
- // Observer class for bitrate changes announced due to change in bandwidth |
- // estimate or due to that the send pacer is full. Fraction loss and rtt is |
- // also part of this callback to allow the observer to optimize its settings |
- // for different types of network environments. The bitrate does not include |
- // packet headers and is measured in bits per second. |
- class Observer { |
- public: |
- virtual void OnNetworkChanged(uint32_t bitrate_bps, |
- uint8_t fraction_loss, // 0 - 255. |
- int64_t rtt_ms, |
- int64_t probing_interval_ms) = 0; |
- |
- protected: |
- virtual ~Observer() {} |
- }; |
+ using Observer = SendSideCongestionController::Observer; |
+ |
CongestionController(const Clock* clock, |
Observer* observer, |
RemoteBitrateObserver* remote_bitrate_observer, |
RtcEventLog* event_log, |
- PacketRouter* packet_router); |
+ PacketRouter* packet_router) |
+ : send_side_cc_(clock, observer, event_log, packet_router), |
+ receive_side_cc_(clock, remote_bitrate_observer, packet_router) {} |
CongestionController(const Clock* clock, |
Observer* observer, |
RemoteBitrateObserver* remote_bitrate_observer, |
RtcEventLog* event_log, |
PacketRouter* packet_router, |
- std::unique_ptr<PacedSender> pacer); |
- virtual ~CongestionController(); |
+ std::unique_ptr<PacedSender> pacer) |
+ : send_side_cc_(clock, observer, event_log, std::move(pacer)), |
+ receive_side_cc_(clock, remote_bitrate_observer, packet_router) {} |
+ |
+ virtual ~CongestionController() {} |
virtual void OnReceivedPacket(int64_t arrival_time_ms, |
size_t payload_size, |
@@ -95,7 +89,7 @@ class CongestionController : public CallStatsObserver, |
virtual int64_t GetPacerQueuingDelayMs() const; |
// TODO(nisse): Delete this accessor function. The pacer should be |
// internal to the congestion controller. |
- virtual PacedSender* pacer() { return pacer_.get(); } |
+ virtual PacedSender* pacer() { return send_side_cc_.pacer(); } |
virtual TransportFeedbackObserver* GetTransportFeedbackObserver() { |
return this; |
} |
@@ -132,73 +126,8 @@ class CongestionController : public CallStatsObserver, |
std::vector<PacketFeedback> GetTransportFeedbackVector() const override; |
private: |
- class WrappingBitrateEstimator : public RemoteBitrateEstimator { |
- public: |
- WrappingBitrateEstimator(RemoteBitrateObserver* observer, |
- const Clock* clock); |
- |
- virtual ~WrappingBitrateEstimator() {} |
- |
- void IncomingPacket(int64_t arrival_time_ms, |
- size_t payload_size, |
- const RTPHeader& header) override; |
- |
- void Process() override; |
- |
- int64_t TimeUntilNextProcess() override; |
- |
- void OnRttUpdate(int64_t avg_rtt_ms, int64_t max_rtt_ms) override; |
- |
- void RemoveStream(unsigned int ssrc) override; |
- |
- bool LatestEstimate(std::vector<unsigned int>* ssrcs, |
- unsigned int* bitrate_bps) const override; |
- |
- void SetMinBitrate(int min_bitrate_bps) override; |
- |
- private: |
- void PickEstimatorFromHeader(const RTPHeader& header) |
- EXCLUSIVE_LOCKS_REQUIRED(crit_sect_); |
- void PickEstimator() EXCLUSIVE_LOCKS_REQUIRED(crit_sect_); |
- RemoteBitrateObserver* observer_; |
- const Clock* const clock_; |
- rtc::CriticalSection crit_sect_; |
- std::unique_ptr<RemoteBitrateEstimator> rbe_; |
- bool using_absolute_send_time_; |
- uint32_t packets_since_absolute_send_time_; |
- int min_bitrate_bps_; |
- |
- RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(WrappingBitrateEstimator); |
- }; |
- |
- void MaybeTriggerOnNetworkChanged(); |
- |
- bool IsSendQueueFull() const; |
- bool IsNetworkDown() const; |
- bool HasNetworkParametersToReportChanged(uint32_t bitrate_bps, |
- uint8_t fraction_loss, |
- int64_t rtt); |
- const Clock* const clock_; |
- Observer* const observer_; |
- RtcEventLog* const event_log_; |
- PacketRouter* const packet_router_; |
- const std::unique_ptr<PacedSender> pacer_; |
- const std::unique_ptr<BitrateController> bitrate_controller_; |
- const std::unique_ptr<ProbeController> probe_controller_; |
- const std::unique_ptr<RateLimiter> retransmission_rate_limiter_; |
- WrappingBitrateEstimator remote_bitrate_estimator_; |
- RemoteEstimatorProxy remote_estimator_proxy_; |
- TransportFeedbackAdapter transport_feedback_adapter_; |
- rtc::CriticalSection network_state_lock_; |
- uint32_t last_reported_bitrate_bps_ GUARDED_BY(network_state_lock_); |
- uint8_t last_reported_fraction_loss_ GUARDED_BY(network_state_lock_); |
- int64_t last_reported_rtt_ GUARDED_BY(network_state_lock_); |
- NetworkState network_state_ GUARDED_BY(network_state_lock_); |
- rtc::CriticalSection bwe_lock_; |
- int min_bitrate_bps_ GUARDED_BY(bwe_lock_); |
- std::unique_ptr<DelayBasedBwe> delay_based_bwe_ GUARDED_BY(bwe_lock_); |
- |
- rtc::ThreadChecker worker_thread_checker_; |
+ SendSideCongestionController send_side_cc_; |
+ ReceiveSideCongestionController receive_side_cc_; |
RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(CongestionController); |
}; |