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_SEND_SIDE_H_
12 #define WEBRTC_MODULES_REMOTE_BITRATE_ESTIMATOR_TEST_ESTIMATORS_SEND_SIDE_H_
13 
14 #include <vector>
15 
16 #include "webrtc/modules/remote_bitrate_estimator/include/send_time_history.h"
17 #include "webrtc/modules/remote_bitrate_estimator/test/bwe.h"
18 
19 namespace webrtc {
20 namespace testing {
21 namespace bwe {
22 
23 class FullBweSender : public BweSender, public RemoteBitrateObserver {
24  public:
25   FullBweSender(int kbps, BitrateObserver* observer, Clock* clock);
26   virtual ~FullBweSender();
27 
28   int GetFeedbackIntervalMs() const override;
29   void GiveFeedback(const FeedbackPacket& feedback) override;
30   void OnPacketsSent(const Packets& packets) override;
31   void OnReceiveBitrateChanged(const std::vector<unsigned int>& ssrcs,
32                                unsigned int bitrate) override;
33   int64_t TimeUntilNextProcess() override;
34   int Process() override;
35 
36  protected:
37   rtc::scoped_ptr<BitrateController> bitrate_controller_;
38   rtc::scoped_ptr<RemoteBitrateEstimator> rbe_;
39   rtc::scoped_ptr<RtcpBandwidthObserver> feedback_observer_;
40 
41  private:
42   Clock* const clock_;
43   RTCPReportBlock report_block_;
44   SendTimeHistory send_time_history_;
45   bool has_received_ack_;
46   uint16_t last_acked_seq_num_;
47 
48   RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(FullBweSender);
49 };
50 
51 class SendSideBweReceiver : public BweReceiver {
52  public:
53   explicit SendSideBweReceiver(int flow_id);
54   virtual ~SendSideBweReceiver();
55 
56   void ReceivePacket(int64_t arrival_time_ms,
57                      const MediaPacket& media_packet) override;
58   FeedbackPacket* GetFeedback(int64_t now_ms) override;
59 
60  private:
61   int64_t last_feedback_ms_;
62   std::vector<PacketInfo> packet_feedback_vector_;
63 };
64 
65 }  // namespace bwe
66 }  // namespace testing
67 }  // namespace webrtc
68 
69 #endif  // WEBRTC_MODULES_REMOTE_BITRATE_ESTIMATOR_TEST_ESTIMATORS_SEND_SIDE_H_
70