• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *  Copyright (c) 2015 The WebRTC project authors. All Rights Reserved.
3  *
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
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS.  All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10 
11 #ifndef WEBRTC_MODULES_REMOTE_BITRATE_ESTIMATOR_REMOTE_ESTIMATOR_PROXY_H_
12 #define WEBRTC_MODULES_REMOTE_BITRATE_ESTIMATOR_REMOTE_ESTIMATOR_PROXY_H_
13 
14 #include <map>
15 #include <vector>
16 
17 #include "webrtc/base/criticalsection.h"
18 #include "webrtc/modules/include/module_common_types.h"
19 #include "webrtc/modules/remote_bitrate_estimator/include/remote_bitrate_estimator.h"
20 
21 namespace webrtc {
22 
23 class Clock;
24 class PacketRouter;
25 namespace rtcp {
26 class TransportFeedback;
27 }
28 
29 // Class used when send-side BWE is enabled: This proxy is instantiated on the
30 // receive side. It buffers a number of receive timestamps and then sends
31 // transport feedback messages back too the send side.
32 
33 class RemoteEstimatorProxy : public RemoteBitrateEstimator {
34  public:
35   RemoteEstimatorProxy(Clock* clock, PacketRouter* packet_router);
36   virtual ~RemoteEstimatorProxy();
37 
38   void IncomingPacketFeedbackVector(
39       const std::vector<PacketInfo>& packet_feedback_vector) override;
40   void IncomingPacket(int64_t arrival_time_ms,
41                       size_t payload_size,
42                       const RTPHeader& header,
43                       bool was_paced) override;
44   void RemoveStream(unsigned int ssrc) override;
45   bool LatestEstimate(std::vector<unsigned int>* ssrcs,
46                       unsigned int* bitrate_bps) const override;
47   bool GetStats(ReceiveBandwidthEstimatorStats* output) const override;
OnRttUpdate(int64_t avg_rtt_ms,int64_t max_rtt_ms)48   void OnRttUpdate(int64_t avg_rtt_ms, int64_t max_rtt_ms) override {}
SetMinBitrate(int min_bitrate_bps)49   void SetMinBitrate(int min_bitrate_bps) override {}
50   int64_t TimeUntilNextProcess() override;
51   int32_t Process() override;
52 
53   static const int kDefaultProcessIntervalMs;
54   static const int kBackWindowMs;
55 
56  private:
57   void OnPacketArrival(uint16_t sequence_number, int64_t arrival_time)
58       EXCLUSIVE_LOCKS_REQUIRED(&lock_);
59   bool BuildFeedbackPacket(rtcp::TransportFeedback* feedback_packetket);
60 
61   Clock* const clock_;
62   PacketRouter* const packet_router_;
63   int64_t last_process_time_ms_;
64 
65   rtc::CriticalSection lock_;
66 
67   uint32_t media_ssrc_ GUARDED_BY(&lock_);
68   uint8_t feedback_sequence_ GUARDED_BY(&lock_);
69   SequenceNumberUnwrapper unwrapper_ GUARDED_BY(&lock_);
70   int64_t window_start_seq_ GUARDED_BY(&lock_);
71   // Map unwrapped seq -> time.
72   std::map<int64_t, int64_t> packet_arrival_times_ GUARDED_BY(&lock_);
73 };
74 
75 }  // namespace webrtc
76 
77 #endif  //  WEBRTC_MODULES_REMOTE_BITRATE_ESTIMATOR_REMOTE_ESTIMATOR_PROXY_H_
78