tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

rtp_generator.h (2900B)


      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 MODULES_AUDIO_CODING_NETEQ_TOOLS_RTP_GENERATOR_H_
     12 #define MODULES_AUDIO_CODING_NETEQ_TOOLS_RTP_GENERATOR_H_
     13 
     14 #include <cstddef>
     15 #include <cstdint>
     16 
     17 #include "api/rtp_headers.h"
     18 
     19 namespace webrtc {
     20 namespace test {
     21 
     22 // Class for generating RTP headers.
     23 class RtpGenerator {
     24 public:
     25  RtpGenerator(int samples_per_ms,
     26               uint16_t start_seq_number = 0,
     27               uint32_t start_timestamp = 0,
     28               uint32_t start_send_time_ms = 0,
     29               uint32_t ssrc = 0x12345678)
     30      : seq_number_(start_seq_number),
     31        timestamp_(start_timestamp),
     32        next_send_time_ms_(start_send_time_ms),
     33        ssrc_(ssrc),
     34        samples_per_ms_(samples_per_ms),
     35        drift_factor_(0.0) {}
     36 
     37  virtual ~RtpGenerator() {}
     38 
     39  RtpGenerator(const RtpGenerator&) = delete;
     40  RtpGenerator& operator=(const RtpGenerator&) = delete;
     41 
     42  // Writes the next RTP header to `rtp_header`, which will be of type
     43  // `payload_type`. Returns the send time for this packet (in ms). The value of
     44  // `payload_length_samples` determines the send time for the next packet.
     45  virtual uint32_t GetRtpHeader(uint8_t payload_type,
     46                                size_t payload_length_samples,
     47                                RTPHeader* rtp_header);
     48 
     49  void set_drift_factor(double factor);
     50 
     51 protected:
     52  uint16_t seq_number_;
     53  uint32_t timestamp_;
     54  uint32_t next_send_time_ms_;
     55  const uint32_t ssrc_;
     56  const int samples_per_ms_;
     57  double drift_factor_;
     58 };
     59 
     60 class 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  TimestampJumpRtpGenerator(const TimestampJumpRtpGenerator&) = delete;
     72  TimestampJumpRtpGenerator& operator=(const TimestampJumpRtpGenerator&) =
     73      delete;
     74 
     75  uint32_t GetRtpHeader(uint8_t payload_type,
     76                        size_t payload_length_samples,
     77                        RTPHeader* rtp_header) override;
     78 
     79 private:
     80  uint32_t jump_from_timestamp_;
     81  uint32_t jump_to_timestamp_;
     82 };
     83 
     84 }  // namespace test
     85 }  // namespace webrtc
     86 #endif  // MODULES_AUDIO_CODING_NETEQ_TOOLS_RTP_GENERATOR_H_