Home | History | Annotate | Download | only in remote_bitrate_estimator
      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 
     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