Home | History | Annotate | Download | only in estimators
      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_TEST_ESTIMATORS_REMB_H_
     12 #define WEBRTC_MODULES_REMOTE_BITRATE_ESTIMATOR_TEST_ESTIMATORS_REMB_H_
     13 
     14 #include <string>
     15 #include <vector>
     16 
     17 #include "webrtc/modules/remote_bitrate_estimator/test/bwe.h"
     18 
     19 namespace webrtc {
     20 
     21 class BitrateObserver;
     22 class BitrateController;
     23 class ReceiveStatistics;
     24 class StreamStatistician;
     25 
     26 namespace testing {
     27 namespace bwe {
     28 
     29 class RembBweSender : public BweSender {
     30  public:
     31   RembBweSender(int kbps, BitrateObserver* observer, Clock* clock);
     32   virtual ~RembBweSender();
     33 
     34   int GetFeedbackIntervalMs() const override;
     35   void GiveFeedback(const FeedbackPacket& feedback) override;
     36   void OnPacketsSent(const Packets& packets) override {}
     37   int64_t TimeUntilNextProcess() override;
     38   int Process() override;
     39 
     40  protected:
     41   rtc::scoped_ptr<BitrateController> bitrate_controller_;
     42   rtc::scoped_ptr<RtcpBandwidthObserver> feedback_observer_;
     43 
     44  private:
     45   Clock* clock_;
     46 
     47   RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(RembBweSender);
     48 };
     49 
     50 class RembReceiver : public BweReceiver, public RemoteBitrateObserver {
     51  public:
     52   static const uint32_t kRemoteBitrateEstimatorMinBitrateBps = 30000;
     53 
     54   RembReceiver(int flow_id, bool plot);
     55   virtual ~RembReceiver();
     56 
     57   void ReceivePacket(int64_t arrival_time_ms,
     58                      const MediaPacket& media_packet) override;
     59   FeedbackPacket* GetFeedback(int64_t now_ms) override;
     60   // Implements RemoteBitrateObserver.
     61   void OnReceiveBitrateChanged(const std::vector<unsigned int>& ssrcs,
     62                                unsigned int bitrate) override;
     63 
     64  private:
     65   static RTCPReportBlock BuildReportBlock(StreamStatistician* statistician);
     66   bool LatestEstimate(uint32_t* estimate_bps);
     67 
     68   std::string estimate_log_prefix_;
     69   bool plot_estimate_;
     70   SimulatedClock clock_;
     71   rtc::scoped_ptr<ReceiveStatistics> recv_stats_;
     72   int64_t latest_estimate_bps_;
     73   int64_t last_feedback_ms_;
     74   rtc::scoped_ptr<RemoteBitrateEstimator> estimator_;
     75 
     76   RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(RembReceiver);
     77 };
     78 
     79 }  // namespace bwe
     80 }  // namespace testing
     81 }  // namespace webrtc
     82 
     83 #endif  // WEBRTC_MODULES_REMOTE_BITRATE_ESTIMATOR_TEST_ESTIMATORS_REMB_H_
     84