| OLD | NEW | 
|    1 /* |    1 /* | 
|    2  *  Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. |    2  *  Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | 
|    3  * |    3  * | 
|    4  *  Use of this source code is governed by a BSD-style license |    4  *  Use of this source code is governed by a BSD-style license | 
|    5  *  that can be found in the LICENSE file in the root of the source |    5  *  that can be found in the LICENSE file in the root of the source | 
|    6  *  tree. An additional intellectual property rights grant can be found |    6  *  tree. An additional intellectual property rights grant can be found | 
|    7  *  in the file PATENTS.  All contributing project authors may |    7  *  in the file PATENTS.  All contributing project authors may | 
|    8  *  be found in the AUTHORS file in the root of the source tree. |    8  *  be found in the AUTHORS file in the root of the source tree. | 
|    9  */ |    9  */ | 
|   10  |   10  | 
|   11 #ifndef WEBRTC_MODULES_CONGESTION_CONTROLLER_INCLUDE_CONGESTION_CONTROLLER_H_ |   11 #ifndef WEBRTC_MODULES_CONGESTION_CONTROLLER_INCLUDE_CONGESTION_CONTROLLER_H_ | 
|   12 #define WEBRTC_MODULES_CONGESTION_CONTROLLER_INCLUDE_CONGESTION_CONTROLLER_H_ |   12 #define WEBRTC_MODULES_CONGESTION_CONTROLLER_INCLUDE_CONGESTION_CONTROLLER_H_ | 
|   13  |   13  | 
|   14 #include <memory> |   14 #include <memory> | 
|   15  |   15  | 
|   16 #include "webrtc/base/constructormagic.h" |   16 #include "webrtc/base/constructormagic.h" | 
|   17 #include "webrtc/base/scoped_ptr.h" |   17 #include "webrtc/base/scoped_ptr.h" | 
|   18 #include "webrtc/common_types.h" |   18 #include "webrtc/common_types.h" | 
|   19 #include "webrtc/modules/include/module.h" |   19 #include "webrtc/modules/include/module.h" | 
|   20 #include "webrtc/modules/include/module_common_types.h" |   20 #include "webrtc/modules/include/module_common_types.h" | 
|   21 #include "webrtc/modules/pacing/packet_router.h" |   21 #include "webrtc/modules/pacing/packet_router.h" | 
|   22 #include "webrtc/modules/pacing/paced_sender.h" |  | 
|   23 #include "webrtc/modules/remote_bitrate_estimator/remote_estimator_proxy.h" |   22 #include "webrtc/modules/remote_bitrate_estimator/remote_estimator_proxy.h" | 
|   24 #include "webrtc/modules/remote_bitrate_estimator/transport_feedback_adapter.h" |   23 #include "webrtc/modules/remote_bitrate_estimator/transport_feedback_adapter.h" | 
|   25  |   24  | 
|   26 namespace rtc { |   25 namespace rtc { | 
|   27 struct SentPacket; |   26 struct SentPacket; | 
|   28 } |   27 } | 
|   29  |   28  | 
|   30 namespace webrtc { |   29 namespace webrtc { | 
|   31  |   30  | 
|   32 class BitrateController; |   31 class BitrateController; | 
|   33 class BitrateObserver; |   32 class BitrateObserver; | 
|   34 class Clock; |   33 class Clock; | 
 |   34 class PacedSender; | 
|   35 class ProcessThread; |   35 class ProcessThread; | 
|   36 class RemoteBitrateEstimator; |   36 class RemoteBitrateEstimator; | 
|   37 class RemoteBitrateObserver; |   37 class RemoteBitrateObserver; | 
|   38 class TransportFeedbackObserver; |   38 class TransportFeedbackObserver; | 
|   39  |   39  | 
|   40 class CongestionController : public CallStatsObserver, public Module { |   40 class CongestionController : public CallStatsObserver, public Module { | 
|   41  public: |   41  public: | 
|   42   // Observer class for bitrate changes announced due to change in bandwidth |  | 
|   43   // estimate or due to that the send pacer is full. Fraction loss and rtt is |  | 
|   44   // also part of this callback to allow the observer to optimize its settings |  | 
|   45   // for different types of network environments. The bitrate does not include |  | 
|   46   // packet headers and is measured in bits per second. |  | 
|   47   class Observer { |  | 
|   48    public: |  | 
|   49     virtual void OnNetworkChanged(uint32_t bitrate_bps, |  | 
|   50                                   uint8_t fraction_loss,  // 0 - 255. |  | 
|   51                                   int64_t rtt_ms) = 0; |  | 
|   52  |  | 
|   53    protected: |  | 
|   54     virtual ~Observer() {} |  | 
|   55   }; |  | 
|   56  |  | 
|   57   CongestionController(Clock* clock, |   42   CongestionController(Clock* clock, | 
|   58                        Observer* observer, |   43                        BitrateObserver* bitrate_observer, | 
|   59                        RemoteBitrateObserver* remote_bitrate_observer); |   44                        RemoteBitrateObserver* remote_bitrate_observer); | 
|   60   CongestionController(Clock* clock, |  | 
|   61                        Observer* observer, |  | 
|   62                        RemoteBitrateObserver* remote_bitrate_observer, |  | 
|   63                        std::unique_ptr<PacketRouter> packet_router, |  | 
|   64                        std::unique_ptr<PacedSender> pacer); |  | 
|   65   virtual ~CongestionController(); |   45   virtual ~CongestionController(); | 
|   66  |   46  | 
|   67   virtual void SetBweBitrates(int min_bitrate_bps, |   47   virtual void SetBweBitrates(int min_bitrate_bps, | 
|   68                               int start_bitrate_bps, |   48                               int start_bitrate_bps, | 
|   69                               int max_bitrate_bps); |   49                               int max_bitrate_bps); | 
|   70   virtual void SignalNetworkState(NetworkState state); |   50   virtual void SignalNetworkState(NetworkState state); | 
|   71   virtual BitrateController* GetBitrateController() const; |   51   virtual BitrateController* GetBitrateController() const; | 
|   72   virtual RemoteBitrateEstimator* GetRemoteBitrateEstimator( |   52   virtual RemoteBitrateEstimator* GetRemoteBitrateEstimator( | 
|   73       bool send_side_bwe); |   53       bool send_side_bwe); | 
|   74   virtual int64_t GetPacerQueuingDelayMs() const; |   54   virtual int64_t GetPacerQueuingDelayMs() const; | 
|   75   virtual PacedSender* pacer() { return pacer_.get(); } |   55   virtual PacedSender* pacer() { return pacer_.get(); } | 
|   76   virtual PacketRouter* packet_router() { return packet_router_.get(); } |   56   virtual PacketRouter* packet_router() { return &packet_router_; } | 
|   77   virtual TransportFeedbackObserver* GetTransportFeedbackObserver(); |   57   virtual TransportFeedbackObserver* GetTransportFeedbackObserver(); | 
|   78  |   58  | 
|   79   void SetAllocatedSendBitrate(int allocated_bitrate_bps, |   59   virtual void UpdatePacerBitrate(int bitrate_kbps, | 
|   80                                int padding_bitrate_bps); |   60                                   int max_bitrate_kbps, | 
 |   61                                   int min_bitrate_kbps); | 
|   81  |   62  | 
|   82   virtual void OnSentPacket(const rtc::SentPacket& sent_packet); |   63   virtual void OnSentPacket(const rtc::SentPacket& sent_packet); | 
|   83  |   64  | 
|   84   // Implements CallStatsObserver. |   65   // Implements CallStatsObserver. | 
|   85   void OnRttUpdate(int64_t avg_rtt_ms, int64_t max_rtt_ms) override; |   66   void OnRttUpdate(int64_t avg_rtt_ms, int64_t max_rtt_ms) override; | 
|   86  |   67  | 
|   87   // Implements Module. |   68   // Implements Module. | 
|   88   int64_t TimeUntilNextProcess() override; |   69   int64_t TimeUntilNextProcess() override; | 
|   89   void Process() override; |   70   void Process() override; | 
|   90  |   71  | 
|   91  private: |   72  private: | 
|   92   void Init(); |  | 
|   93   void MaybeTriggerOnNetworkChanged(); |  | 
|   94   // Updates |send_queue_is_full_|. Returns true if |send_queue_is_full_| |  | 
|   95   // has changed. |  | 
|   96   bool UpdateSendQueueStatus(bool send_queue_is_full); |  | 
|   97  |  | 
|   98   Clock* const clock_; |   73   Clock* const clock_; | 
|   99   Observer* const observer_; |  | 
|  100   const std::unique_ptr<PacketRouter> packet_router_; |  | 
|  101   const std::unique_ptr<PacedSender> pacer_; |   74   const std::unique_ptr<PacedSender> pacer_; | 
|  102   const std::unique_ptr<RemoteBitrateEstimator> remote_bitrate_estimator_; |   75   const std::unique_ptr<RemoteBitrateEstimator> remote_bitrate_estimator_; | 
|  103   const std::unique_ptr<BitrateController> bitrate_controller_; |   76   const std::unique_ptr<BitrateController> bitrate_controller_; | 
 |   77   PacketRouter packet_router_; | 
|  104   RemoteEstimatorProxy remote_estimator_proxy_; |   78   RemoteEstimatorProxy remote_estimator_proxy_; | 
|  105   TransportFeedbackAdapter transport_feedback_adapter_; |   79   TransportFeedbackAdapter transport_feedback_adapter_; | 
|  106   int min_bitrate_bps_; |   80   int min_bitrate_bps_; | 
|  107   rtc::CriticalSection critsect_; |  | 
|  108   bool send_queue_is_full_ GUARDED_BY(critsect_); |  | 
|  109  |   81  | 
|  110   RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(CongestionController); |   82   RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(CongestionController); | 
|  111 }; |   83 }; | 
|  112  |   84  | 
|  113 }  // namespace webrtc |   85 }  // namespace webrtc | 
|  114  |   86  | 
|  115 #endif  // WEBRTC_MODULES_CONGESTION_CONTROLLER_INCLUDE_CONGESTION_CONTROLLER_H_ |   87 #endif  // WEBRTC_MODULES_CONGESTION_CONTROLLER_INCLUDE_CONGESTION_CONTROLLER_H_ | 
| OLD | NEW |