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
19namespace webrtc {
20namespace testing {
21namespace bwe {
22
23class 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
51class 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