• 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_TRANSPORT_FEEDBACK_ADAPTER_H_
12 #define WEBRTC_MODULES_REMOTE_BITRATE_ESTIMATOR_TRANSPORT_FEEDBACK_ADAPTER_H_
13 
14 #include <vector>
15 
16 #include "webrtc/base/criticalsection.h"
17 #include "webrtc/base/thread_annotations.h"
18 #include "webrtc/modules/rtp_rtcp/include/rtp_rtcp_defines.h"
19 #include "webrtc/modules/include/module_common_types.h"
20 #include "webrtc/modules/remote_bitrate_estimator/include/remote_bitrate_estimator.h"
21 #include "webrtc/modules/remote_bitrate_estimator/include/send_time_history.h"
22 
23 namespace webrtc {
24 
25 class ProcessThread;
26 
27 class TransportFeedbackAdapter : public TransportFeedbackObserver,
28                                  public CallStatsObserver,
29                                  public RemoteBitrateObserver {
30  public:
31   TransportFeedbackAdapter(RtcpBandwidthObserver* bandwidth_observer,
32                            Clock* clock,
33                            ProcessThread* process_thread);
34   virtual ~TransportFeedbackAdapter();
35 
36   void AddPacket(uint16_t sequence_number,
37                  size_t length,
38                  bool was_paced) override;
39 
40   void OnSentPacket(uint16_t sequence_number, int64_t send_time_ms);
41 
42   void OnTransportFeedback(const rtcp::TransportFeedback& feedback) override;
43 
44   void SetBitrateEstimator(RemoteBitrateEstimator* rbe);
45 
GetBitrateEstimator()46   RemoteBitrateEstimator* GetBitrateEstimator() const {
47     return bitrate_estimator_.get();
48   }
49 
50  private:
51   void OnReceiveBitrateChanged(const std::vector<unsigned int>& ssrcs,
52                                unsigned int bitrate) override;
53   void OnRttUpdate(int64_t avg_rtt_ms, int64_t max_rtt_ms) override;
54 
55   rtc::CriticalSection lock_;
56   SendTimeHistory send_time_history_ GUARDED_BY(&lock_);
57   rtc::scoped_ptr<RtcpBandwidthObserver> rtcp_bandwidth_observer_;
58   rtc::scoped_ptr<RemoteBitrateEstimator> bitrate_estimator_;
59   ProcessThread* const process_thread_;
60   Clock* const clock_;
61   int64_t current_offset_ms_;
62   int64_t last_timestamp_us_;
63 };
64 
65 }  // namespace webrtc
66 
67 #endif  // WEBRTC_MODULES_REMOTE_BITRATE_ESTIMATOR_TRANSPORT_FEEDBACK_ADAPTER_H_
68