114b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org/*
214b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org *  Copyright (c) 2015 The WebRTC project authors. All Rights Reserved.
314b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org *
414b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org *  Use of this source code is governed by a BSD-style license
514b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org *  that can be found in the LICENSE file in the root of the source
614b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org *  tree. An additional intellectual property rights grant can be found
714b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org *  in the file PATENTS.  All contributing project authors may
814b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org *  be found in the AUTHORS file in the root of the source tree.
914b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org */
1014b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org
1114b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org#ifndef WEBRTC_MODULES_REMOTE_BITRATE_ESTIMATOR_TEST_PACKET_H_
1214b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org#define WEBRTC_MODULES_REMOTE_BITRATE_ESTIMATOR_TEST_PACKET_H_
1314b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org
1414b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org#include <list>
1514b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org#include <map>
1614b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org#include <vector>
1714b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org
1814b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org#include "webrtc/common_types.h"
19ff761fba8274d93bd73e76c8b8a1f2d0776dd840Henrik Kjellander#include "webrtc/modules/rtp_rtcp/include/rtp_rtcp_defines.h"
2014b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org#include "webrtc/modules/remote_bitrate_estimator/include/remote_bitrate_estimator.h"
2114b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org
2214b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.orgnamespace webrtc {
2314b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.orgnamespace testing {
2414b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.orgnamespace bwe {
2514b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org
2614b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.orgclass Packet {
2714b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org public:
2814b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org  enum Type { kMedia, kFeedback };
2914b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org
3014b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org  Packet();
3114b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org  Packet(int flow_id, int64_t send_time_us, size_t payload_size);
3214b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org  virtual ~Packet();
3314b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org
3414b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org  virtual bool operator<(const Packet& rhs) const;
3514b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org
3614b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org  virtual int flow_id() const { return flow_id_; }
3714b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org  virtual void set_send_time_us(int64_t send_time_us);
3814b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org  virtual int64_t send_time_us() const { return send_time_us_; }
39bf40b42af585128a5b22299bdfaff706659774bdCesar Magalhaes  virtual int64_t sender_timestamp_us() const { return sender_timestamp_us_; }
4014b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org  virtual size_t payload_size() const { return payload_size_; }
4114b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org  virtual Packet::Type GetPacketType() const = 0;
429c261f2d13793fbb5a0d07b26bec4154bc38342bCesar Magalhaes  virtual void set_sender_timestamp_us(int64_t sender_timestamp_us) {
43c81591d63f5e441bd26025a5e986bb2ebfd9fdfdCesar Magalhaes    sender_timestamp_us_ = sender_timestamp_us;
44c81591d63f5e441bd26025a5e986bb2ebfd9fdfdCesar Magalhaes  }
45318673cf5a1b230d445a50fdc4869f4b8f99c85dsprang  virtual void set_paced(bool paced) { paced_ = paced; }
46318673cf5a1b230d445a50fdc4869f4b8f99c85dsprang  virtual bool paced() const { return paced_; }
479c261f2d13793fbb5a0d07b26bec4154bc38342bCesar Magalhaes  virtual int64_t creation_time_ms() const {
489c261f2d13793fbb5a0d07b26bec4154bc38342bCesar Magalhaes    return (creation_time_us_ + 500) / 1000;
499c261f2d13793fbb5a0d07b26bec4154bc38342bCesar Magalhaes  }
509c261f2d13793fbb5a0d07b26bec4154bc38342bCesar Magalhaes  virtual int64_t sender_timestamp_ms() const {
519c261f2d13793fbb5a0d07b26bec4154bc38342bCesar Magalhaes    return (sender_timestamp_us_ + 500) / 1000;
529c261f2d13793fbb5a0d07b26bec4154bc38342bCesar Magalhaes  }
539c261f2d13793fbb5a0d07b26bec4154bc38342bCesar Magalhaes  virtual int64_t send_time_ms() const { return (send_time_us_ + 500) / 1000; }
5414b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org
55c81591d63f5e441bd26025a5e986bb2ebfd9fdfdCesar Magalhaes protected:
5614b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org  int flow_id_;
5714b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org  int64_t creation_time_us_;  // Time when the packet was created.
5814b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org  int64_t send_time_us_;  // Time the packet left last processor touching it.
59c81591d63f5e441bd26025a5e986bb2ebfd9fdfdCesar Magalhaes  int64_t sender_timestamp_us_;  // Time the packet left the Sender.
60c81591d63f5e441bd26025a5e986bb2ebfd9fdfdCesar Magalhaes  size_t payload_size_;  // Size of the (non-existent, simulated) payload.
61318673cf5a1b230d445a50fdc4869f4b8f99c85dsprang  bool paced_;           // True if sent through paced sender.
6214b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org};
6314b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org
6414b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.orgclass MediaPacket : public Packet {
6514b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org public:
6614b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org  MediaPacket();
6714b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org  MediaPacket(int flow_id,
6814b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org              int64_t send_time_us,
6914b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org              size_t payload_size,
70379593792082a86f389df9b1b790cc0fe9eb9975Stefan Holmer              uint16_t sequence_number);
71379593792082a86f389df9b1b790cc0fe9eb9975Stefan Holmer  MediaPacket(int flow_id,
72379593792082a86f389df9b1b790cc0fe9eb9975Stefan Holmer              int64_t send_time_us,
73379593792082a86f389df9b1b790cc0fe9eb9975Stefan Holmer              size_t payload_size,
7414b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org              const RTPHeader& header);
75fb19f49c149018c02bd929cbb962aad4b3118000Cesar Magalhaes  MediaPacket(int64_t send_time_us, uint16_t sequence_number);
769c261f2d13793fbb5a0d07b26bec4154bc38342bCesar Magalhaes
7714b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org  virtual ~MediaPacket() {}
7814b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org
794346d92578e5acbf3c40c89967c548e8f72e7543stefan@webrtc.org  int64_t GetAbsSendTimeInMs() const {
804346d92578e5acbf3c40c89967c548e8f72e7543stefan@webrtc.org    int64_t timestamp = header_.extension.absoluteSendTime
814346d92578e5acbf3c40c89967c548e8f72e7543stefan@webrtc.org                        << kAbsSendTimeInterArrivalUpshift;
824346d92578e5acbf3c40c89967c548e8f72e7543stefan@webrtc.org    return 1000.0 * timestamp / static_cast<double>(1 << kInterArrivalShift);
834346d92578e5acbf3c40c89967c548e8f72e7543stefan@webrtc.org  }
8414b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org  void SetAbsSendTimeMs(int64_t abs_send_time_ms);
8514b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org  const RTPHeader& header() const { return header_; }
8614b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org  virtual Packet::Type GetPacketType() const { return kMedia; }
87c81591d63f5e441bd26025a5e986bb2ebfd9fdfdCesar Magalhaes  uint16_t sequence_number() const { return header_.sequenceNumber; }
8814b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org
8914b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org private:
904346d92578e5acbf3c40c89967c548e8f72e7543stefan@webrtc.org  static const int kAbsSendTimeFraction = 18;
914346d92578e5acbf3c40c89967c548e8f72e7543stefan@webrtc.org  static const int kAbsSendTimeInterArrivalUpshift = 8;
924346d92578e5acbf3c40c89967c548e8f72e7543stefan@webrtc.org  static const int kInterArrivalShift =
934346d92578e5acbf3c40c89967c548e8f72e7543stefan@webrtc.org      kAbsSendTimeFraction + kAbsSendTimeInterArrivalUpshift;
944346d92578e5acbf3c40c89967c548e8f72e7543stefan@webrtc.org
9514b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org  RTPHeader header_;
9614b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org};
9714b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org
9814b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.orgclass FeedbackPacket : public Packet {
9914b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org public:
100c81591d63f5e441bd26025a5e986bb2ebfd9fdfdCesar Magalhaes  FeedbackPacket(int flow_id,
101c81591d63f5e441bd26025a5e986bb2ebfd9fdfdCesar Magalhaes                 int64_t this_send_time_us,
102c81591d63f5e441bd26025a5e986bb2ebfd9fdfdCesar Magalhaes                 int64_t latest_send_time_ms)
103c81591d63f5e441bd26025a5e986bb2ebfd9fdfdCesar Magalhaes      : Packet(flow_id, this_send_time_us, 0),
104c81591d63f5e441bd26025a5e986bb2ebfd9fdfdCesar Magalhaes        latest_send_time_ms_(latest_send_time_ms) {}
10514b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org  virtual ~FeedbackPacket() {}
10614b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org
10714b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org  virtual Packet::Type GetPacketType() const { return kFeedback; }
108c81591d63f5e441bd26025a5e986bb2ebfd9fdfdCesar Magalhaes  int64_t latest_send_time_ms() const { return latest_send_time_ms_; }
109c81591d63f5e441bd26025a5e986bb2ebfd9fdfdCesar Magalhaes
110c81591d63f5e441bd26025a5e986bb2ebfd9fdfdCesar Magalhaes private:
1119c261f2d13793fbb5a0d07b26bec4154bc38342bCesar Magalhaes  int64_t latest_send_time_ms_;  // Time stamp for the latest sent FbPacket.
11214b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org};
11314b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org
11414b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.orgclass RembFeedback : public FeedbackPacket {
11514b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org public:
11614b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org  RembFeedback(int flow_id,
11714b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org               int64_t send_time_us,
118c81591d63f5e441bd26025a5e986bb2ebfd9fdfdCesar Magalhaes               int64_t latest_send_time_ms,
11914b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org               uint32_t estimated_bps,
12014b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org               RTCPReportBlock report_block);
12114b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org  virtual ~RembFeedback() {}
12214b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org
12314b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org  uint32_t estimated_bps() const { return estimated_bps_; }
12414b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org  RTCPReportBlock report_block() const { return report_block_; }
12514b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org
12614b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org private:
12714b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org  const uint32_t estimated_bps_;
12814b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org  const RTCPReportBlock report_block_;
12914b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org};
13014b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org
13114b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.orgclass SendSideBweFeedback : public FeedbackPacket {
13214b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org public:
13314b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org  typedef std::map<uint16_t, int64_t> ArrivalTimesMap;
13414b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org  SendSideBweFeedback(int flow_id,
13514b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org                      int64_t send_time_us,
136c81591d63f5e441bd26025a5e986bb2ebfd9fdfdCesar Magalhaes                      int64_t latest_send_time_ms,
13714b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org                      const std::vector<PacketInfo>& packet_feedback_vector);
13814b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org  virtual ~SendSideBweFeedback() {}
13914b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org
14014b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org  const std::vector<PacketInfo>& packet_feedback_vector() const {
14114b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org    return packet_feedback_vector_;
14214b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org  }
14314b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org
14414b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org private:
14514b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org  const std::vector<PacketInfo> packet_feedback_vector_;
14614b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org};
14714b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org
148766368425890f267f99bbf03fb298a9575a755c4stefan@webrtc.orgclass NadaFeedback : public FeedbackPacket {
149766368425890f267f99bbf03fb298a9575a755c4stefan@webrtc.org public:
150766368425890f267f99bbf03fb298a9575a755c4stefan@webrtc.org  NadaFeedback(int flow_id,
151c81591d63f5e441bd26025a5e986bb2ebfd9fdfdCesar Magalhaes               int64_t this_send_time_us,
152c81591d63f5e441bd26025a5e986bb2ebfd9fdfdCesar Magalhaes               int64_t exp_smoothed_delay_ms,
153c81591d63f5e441bd26025a5e986bb2ebfd9fdfdCesar Magalhaes               int64_t est_queuing_delay_signal_ms,
154766368425890f267f99bbf03fb298a9575a755c4stefan@webrtc.org               int64_t congestion_signal,
155c81591d63f5e441bd26025a5e986bb2ebfd9fdfdCesar Magalhaes               float derivative,
156c81591d63f5e441bd26025a5e986bb2ebfd9fdfdCesar Magalhaes               float receiving_rate,
157c81591d63f5e441bd26025a5e986bb2ebfd9fdfdCesar Magalhaes               int64_t latest_send_time_ms)
158c81591d63f5e441bd26025a5e986bb2ebfd9fdfdCesar Magalhaes      : FeedbackPacket(flow_id, this_send_time_us, latest_send_time_ms),
159c81591d63f5e441bd26025a5e986bb2ebfd9fdfdCesar Magalhaes        exp_smoothed_delay_ms_(exp_smoothed_delay_ms),
160c81591d63f5e441bd26025a5e986bb2ebfd9fdfdCesar Magalhaes        est_queuing_delay_signal_ms_(est_queuing_delay_signal_ms),
161766368425890f267f99bbf03fb298a9575a755c4stefan@webrtc.org        congestion_signal_(congestion_signal),
162c81591d63f5e441bd26025a5e986bb2ebfd9fdfdCesar Magalhaes        derivative_(derivative),
163c81591d63f5e441bd26025a5e986bb2ebfd9fdfdCesar Magalhaes        receiving_rate_(receiving_rate) {}
164766368425890f267f99bbf03fb298a9575a755c4stefan@webrtc.org  virtual ~NadaFeedback() {}
165766368425890f267f99bbf03fb298a9575a755c4stefan@webrtc.org
166c81591d63f5e441bd26025a5e986bb2ebfd9fdfdCesar Magalhaes  int64_t exp_smoothed_delay_ms() const { return exp_smoothed_delay_ms_; }
167c81591d63f5e441bd26025a5e986bb2ebfd9fdfdCesar Magalhaes  int64_t est_queuing_delay_signal_ms() const {
168c81591d63f5e441bd26025a5e986bb2ebfd9fdfdCesar Magalhaes    return est_queuing_delay_signal_ms_;
169c81591d63f5e441bd26025a5e986bb2ebfd9fdfdCesar Magalhaes  }
170766368425890f267f99bbf03fb298a9575a755c4stefan@webrtc.org  int64_t congestion_signal() const { return congestion_signal_; }
171766368425890f267f99bbf03fb298a9575a755c4stefan@webrtc.org  float derivative() const { return derivative_; }
172c81591d63f5e441bd26025a5e986bb2ebfd9fdfdCesar Magalhaes  float receiving_rate() const { return receiving_rate_; }
173766368425890f267f99bbf03fb298a9575a755c4stefan@webrtc.org
174766368425890f267f99bbf03fb298a9575a755c4stefan@webrtc.org private:
175c81591d63f5e441bd26025a5e986bb2ebfd9fdfdCesar Magalhaes  int64_t exp_smoothed_delay_ms_;        // Referred as d_hat_n.
176c81591d63f5e441bd26025a5e986bb2ebfd9fdfdCesar Magalhaes  int64_t est_queuing_delay_signal_ms_;  // Referred as d_tilde_n.
177c81591d63f5e441bd26025a5e986bb2ebfd9fdfdCesar Magalhaes  int64_t congestion_signal_;            // Referred as x_n.
178c81591d63f5e441bd26025a5e986bb2ebfd9fdfdCesar Magalhaes  float derivative_;                     // Referred as x'_n.
179c81591d63f5e441bd26025a5e986bb2ebfd9fdfdCesar Magalhaes  float receiving_rate_;                 // Referred as R_r.
180766368425890f267f99bbf03fb298a9575a755c4stefan@webrtc.org};
181766368425890f267f99bbf03fb298a9575a755c4stefan@webrtc.org
182379593792082a86f389df9b1b790cc0fe9eb9975Stefan Holmerclass TcpFeedback : public FeedbackPacket {
183379593792082a86f389df9b1b790cc0fe9eb9975Stefan Holmer public:
184379593792082a86f389df9b1b790cc0fe9eb9975Stefan Holmer  TcpFeedback(int flow_id,
185379593792082a86f389df9b1b790cc0fe9eb9975Stefan Holmer              int64_t send_time_us,
186c81591d63f5e441bd26025a5e986bb2ebfd9fdfdCesar Magalhaes              int64_t latest_send_time_ms,
187379593792082a86f389df9b1b790cc0fe9eb9975Stefan Holmer              const std::vector<uint16_t>& acked_packets)
188c81591d63f5e441bd26025a5e986bb2ebfd9fdfdCesar Magalhaes      : FeedbackPacket(flow_id, send_time_us, latest_send_time_ms),
189c81591d63f5e441bd26025a5e986bb2ebfd9fdfdCesar Magalhaes        acked_packets_(acked_packets) {}
190379593792082a86f389df9b1b790cc0fe9eb9975Stefan Holmer  virtual ~TcpFeedback() {}
191379593792082a86f389df9b1b790cc0fe9eb9975Stefan Holmer
192379593792082a86f389df9b1b790cc0fe9eb9975Stefan Holmer  const std::vector<uint16_t>& acked_packets() const { return acked_packets_; }
193379593792082a86f389df9b1b790cc0fe9eb9975Stefan Holmer
194379593792082a86f389df9b1b790cc0fe9eb9975Stefan Holmer private:
195379593792082a86f389df9b1b790cc0fe9eb9975Stefan Holmer  const std::vector<uint16_t> acked_packets_;
196379593792082a86f389df9b1b790cc0fe9eb9975Stefan Holmer};
197379593792082a86f389df9b1b790cc0fe9eb9975Stefan Holmer
19814b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.orgtypedef std::list<Packet*> Packets;
19914b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.orgtypedef std::list<Packet*>::iterator PacketsIt;
20014b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.orgtypedef std::list<Packet*>::const_iterator PacketsConstIt;
201c81591d63f5e441bd26025a5e986bb2ebfd9fdfdCesar Magalhaes
20214b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org}  // namespace bwe
20314b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org}  // namespace testing
20414b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org}  // namespace webrtc
20514b0279416c4916534c1e76939b0b8927a208a04stefan@webrtc.org#endif  // WEBRTC_MODULES_REMOTE_BITRATE_ESTIMATOR_TEST_PACKET_H_
206