1/*
2 *  Copyright (c) 2012 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_AUDIO_CODING_NETEQ_TOOLS_RTP_GENERATOR_H_
12#define WEBRTC_MODULES_AUDIO_CODING_NETEQ_TOOLS_RTP_GENERATOR_H_
13
14#include "webrtc/base/constructormagic.h"
15#include "webrtc/modules/interface/module_common_types.h"
16#include "webrtc/typedefs.h"
17
18namespace webrtc {
19namespace test {
20
21// Class for generating RTP headers.
22class RtpGenerator {
23 public:
24  RtpGenerator(int samples_per_ms,
25               uint16_t start_seq_number = 0,
26               uint32_t start_timestamp = 0,
27               uint32_t start_send_time_ms = 0,
28               uint32_t ssrc = 0x12345678)
29      : seq_number_(start_seq_number),
30        timestamp_(start_timestamp),
31        next_send_time_ms_(start_send_time_ms),
32        ssrc_(ssrc),
33        samples_per_ms_(samples_per_ms),
34        drift_factor_(0.0) {
35  }
36
37  virtual ~RtpGenerator() {}
38
39  // Writes the next RTP header to |rtp_header|, which will be of type
40  // |payload_type|. Returns the send time for this packet (in ms). The value of
41  // |payload_length_samples| determines the send time for the next packet.
42  virtual uint32_t GetRtpHeader(uint8_t payload_type,
43                                size_t payload_length_samples,
44                                WebRtcRTPHeader* rtp_header);
45
46  void set_drift_factor(double factor);
47
48 protected:
49  uint16_t seq_number_;
50  uint32_t timestamp_;
51  uint32_t next_send_time_ms_;
52  const uint32_t ssrc_;
53  const int samples_per_ms_;
54  double drift_factor_;
55
56 private:
57  DISALLOW_COPY_AND_ASSIGN(RtpGenerator);
58};
59
60class TimestampJumpRtpGenerator : public RtpGenerator {
61 public:
62  TimestampJumpRtpGenerator(int samples_per_ms,
63                            uint16_t start_seq_number,
64                            uint32_t start_timestamp,
65                            uint32_t jump_from_timestamp,
66                            uint32_t jump_to_timestamp)
67      : RtpGenerator(samples_per_ms, start_seq_number, start_timestamp),
68        jump_from_timestamp_(jump_from_timestamp),
69        jump_to_timestamp_(jump_to_timestamp) {}
70
71  uint32_t GetRtpHeader(uint8_t payload_type,
72                        size_t payload_length_samples,
73                        WebRtcRTPHeader* rtp_header) OVERRIDE;
74
75 private:
76  uint32_t jump_from_timestamp_;
77  uint32_t jump_to_timestamp_;
78  DISALLOW_COPY_AND_ASSIGN(TimestampJumpRtpGenerator);
79};
80
81}  // namespace test
82}  // namespace webrtc
83#endif  // WEBRTC_MODULES_AUDIO_CODING_NETEQ_TOOLS_RTP_GENERATOR_H_
84