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

Unified Diff: webrtc/modules/congestion_controller/include/receive_side_congestion_controller.h

Issue 2752233002: Split CongestionController into send- and receive-side classes. (Closed)
Patch Set: Use variable names receive_side_cc and send_side_cc. Created 3 years, 9 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 side-by-side diff with in-line comments
Download patch
Index: webrtc/modules/congestion_controller/include/receive_side_congestion_controller.h
diff --git a/webrtc/modules/congestion_controller/include/receive_side_congestion_controller.h b/webrtc/modules/congestion_controller/include/receive_side_congestion_controller.h
new file mode 100644
index 0000000000000000000000000000000000000000..f6f9462394d3cad1c7a54a737f2010bbc905ab64
--- /dev/null
+++ b/webrtc/modules/congestion_controller/include/receive_side_congestion_controller.h
@@ -0,0 +1,106 @@
+/*
+ * Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.
+ *
+ * Use of this source code is governed by a BSD-style license
+ * that can be found in the LICENSE file in the root of the source
+ * tree. An additional intellectual property rights grant can be found
+ * in the file PATENTS. All contributing project authors may
+ * be found in the AUTHORS file in the root of the source tree.
+ */
+
+#ifndef WEBRTC_MODULES_CONGESTION_CONTROLLER_INCLUDE_RECEIVE_SIDE_CONGESTION_CONTROLLER_H_
+#define WEBRTC_MODULES_CONGESTION_CONTROLLER_INCLUDE_RECEIVE_SIDE_CONGESTION_CONTROLLER_H_
+
+#include <memory>
+#include <vector>
+
+#include "webrtc/base/constructormagic.h"
+#include "webrtc/base/criticalsection.h"
+#include "webrtc/modules/remote_bitrate_estimator/remote_estimator_proxy.h"
+
+namespace webrtc {
+class RemoteBitrateEstimator;
+class RemoteBitrateObserver;
+
+// This class represents the congestion control state for receive
+// streams. For send side bandwidth estimation, this is simply
+// relaying for each received RTP packet back to the sender. While for
+// receive side bandwidth estimation, we do the estimation locally and
+// send our results back to the sender.
+class ReceiveSideCongestionController : public CallStatsObserver,
+ public Module {
+ public:
+ ReceiveSideCongestionController(
+ const Clock* clock,
+ RemoteBitrateObserver* remote_bitrate_observer,
+ PacketRouter* packet_router);
+
+ virtual ~ReceiveSideCongestionController() {}
+
+ virtual void OnReceivedPacket(int64_t arrival_time_ms,
+ size_t payload_size,
+ const RTPHeader& header);
+
+ // TODO(nisse): Delete these methods, design a more specific interface.
+ virtual RemoteBitrateEstimator* GetRemoteBitrateEstimator(bool send_side_bwe);
+ virtual const RemoteBitrateEstimator* GetRemoteBitrateEstimator(
+ bool send_side_bwe) const;
+
+ // TODO(nisse): Called by CongestionController, but not otherwise wired up.
+ // Implements CallStatsObserver.
+ void OnRttUpdate(int64_t avg_rtt_ms, int64_t max_rtt_ms) override;
+
+ // This is send bitrate, used to control the rate of feedback messages.
+ void OnBitrateChanged(int bitrate_bps);
+
+ // Implements Module.
+ int64_t TimeUntilNextProcess() override;
+ void Process() 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);
+ };
+
+ WrappingBitrateEstimator remote_bitrate_estimator_;
+ RemoteEstimatorProxy remote_estimator_proxy_;
+};
+
+} // namespace webrtc
+
+#endif // WEBRTC_MODULES_CONGESTION_CONTROLLER_INCLUDE_RECEIVE_SIDE_CONGESTION_CONTROLLER_H_

Powered by Google App Engine
This is Rietveld 408576698