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

Side by Side Diff: webrtc/modules/congestion_controller/include/congestion_controller.h

Issue 1958053002: Revert "Reland of Remove SendPacer from ViEEncoder (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Rebased Created 4 years, 7 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 unified diff | Download patch
OLDNEW
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 // Deprecated
57 // TODO(perkj): Remove once no other clients use this ctor.
58 CongestionController(Clock* clock, 42 CongestionController(Clock* clock,
59 BitrateObserver* bitrate_observer, 43 BitrateObserver* bitrate_observer,
60 RemoteBitrateObserver* remote_bitrate_observer); 44 RemoteBitrateObserver* remote_bitrate_observer);
61 CongestionController(Clock* clock,
62 Observer* observer,
63 RemoteBitrateObserver* remote_bitrate_observer);
64 CongestionController(Clock* clock,
65 Observer* observer,
66 RemoteBitrateObserver* remote_bitrate_observer,
67 std::unique_ptr<PacketRouter> packet_router,
68 std::unique_ptr<PacedSender> pacer);
69 virtual ~CongestionController(); 45 virtual ~CongestionController();
70 46
71 virtual void SetBweBitrates(int min_bitrate_bps, 47 virtual void SetBweBitrates(int min_bitrate_bps,
72 int start_bitrate_bps, 48 int start_bitrate_bps,
73 int max_bitrate_bps); 49 int max_bitrate_bps);
74 virtual void SignalNetworkState(NetworkState state); 50 virtual void SignalNetworkState(NetworkState state);
75 virtual BitrateController* GetBitrateController() const; 51 virtual BitrateController* GetBitrateController() const;
76 virtual RemoteBitrateEstimator* GetRemoteBitrateEstimator( 52 virtual RemoteBitrateEstimator* GetRemoteBitrateEstimator(
77 bool send_side_bwe); 53 bool send_side_bwe);
78 virtual int64_t GetPacerQueuingDelayMs() const; 54 virtual int64_t GetPacerQueuingDelayMs() const;
79 virtual PacedSender* pacer() { return pacer_.get(); } 55 virtual PacedSender* pacer() { return pacer_.get(); }
80 virtual PacketRouter* packet_router() { return packet_router_.get(); } 56 virtual PacketRouter* packet_router() { return &packet_router_; }
81 virtual TransportFeedbackObserver* GetTransportFeedbackObserver(); 57 virtual TransportFeedbackObserver* GetTransportFeedbackObserver();
82 58
83 void SetAllocatedSendBitrate(int allocated_bitrate_bps, 59 virtual void UpdatePacerBitrate(int bitrate_kbps,
84 int padding_bitrate_bps); 60 int max_bitrate_kbps,
61 int min_bitrate_kbps);
85 62
86 virtual void OnSentPacket(const rtc::SentPacket& sent_packet); 63 virtual void OnSentPacket(const rtc::SentPacket& sent_packet);
87 64
88 // Implements CallStatsObserver. 65 // Implements CallStatsObserver.
89 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;
90 67
91 // Implements Module. 68 // Implements Module.
92 int64_t TimeUntilNextProcess() override; 69 int64_t TimeUntilNextProcess() override;
93 void Process() override; 70 void Process() override;
94 71
95 private: 72 private:
96 void Init();
97 void MaybeTriggerOnNetworkChanged();
98 // Updates |send_queue_is_full_|. Returns true if |send_queue_is_full_|
99 // has changed.
100 bool UpdateSendQueueStatus(bool send_queue_is_full);
101
102 Clock* const clock_; 73 Clock* const clock_;
103 Observer* const observer_;
104 const std::unique_ptr<PacketRouter> packet_router_;
105 const std::unique_ptr<PacedSender> pacer_; 74 const std::unique_ptr<PacedSender> pacer_;
106 const std::unique_ptr<RemoteBitrateEstimator> remote_bitrate_estimator_; 75 const std::unique_ptr<RemoteBitrateEstimator> remote_bitrate_estimator_;
107 const std::unique_ptr<BitrateController> bitrate_controller_; 76 const std::unique_ptr<BitrateController> bitrate_controller_;
77 PacketRouter packet_router_;
108 RemoteEstimatorProxy remote_estimator_proxy_; 78 RemoteEstimatorProxy remote_estimator_proxy_;
109 TransportFeedbackAdapter transport_feedback_adapter_; 79 TransportFeedbackAdapter transport_feedback_adapter_;
110 int min_bitrate_bps_; 80 int min_bitrate_bps_;
111 rtc::CriticalSection critsect_;
112 bool send_queue_is_full_ GUARDED_BY(critsect_);
113 81
114 RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(CongestionController); 82 RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(CongestionController);
115 }; 83 };
116 84
117 } // namespace webrtc 85 } // namespace webrtc
118 86
119 #endif // WEBRTC_MODULES_CONGESTION_CONTROLLER_INCLUDE_CONGESTION_CONTROLLER_H_ 87 #endif // WEBRTC_MODULES_CONGESTION_CONTROLLER_INCLUDE_CONGESTION_CONTROLLER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698