tor-browser

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

RTPFile.h (3437B)


      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_TEST_RTPFILE_H_
     12 #define MODULES_AUDIO_CODING_TEST_RTPFILE_H_
     13 
     14 #include <stdio.h>
     15 
     16 #include <cstdint>
     17 #include <queue>
     18 
     19 #include "absl/strings/string_view.h"
     20 #include "api/rtp_headers.h"
     21 #include "rtc_base/synchronization/mutex.h"
     22 #include "rtc_base/thread_annotations.h"
     23 
     24 namespace webrtc {
     25 
     26 class RTPStream {
     27 public:
     28  virtual ~RTPStream() {}
     29 
     30  virtual void Write(uint8_t payloadType,
     31                     uint32_t timeStamp,
     32                     int16_t seqNo,
     33                     const uint8_t* payloadData,
     34                     size_t payloadSize,
     35                     uint32_t frequency) = 0;
     36 
     37  // Returns the packet's payload size. Zero should be treated as an
     38  // end-of-stream (in the case that EndOfFile() is true) or an error.
     39  virtual size_t Read(RTPHeader* rtp_Header,
     40                      uint8_t* payloadData,
     41                      size_t payloadSize,
     42                      uint32_t* offset) = 0;
     43  virtual bool EndOfFile() const = 0;
     44 
     45 protected:
     46  void MakeRTPheader(uint8_t* rtpHeader,
     47                     uint8_t payloadType,
     48                     int16_t seqNo,
     49                     uint32_t timeStamp,
     50                     uint32_t ssrc);
     51 
     52  void ParseRTPHeader(RTPHeader* rtp_header, const uint8_t* rtpHeader);
     53 };
     54 
     55 class RTPPacket {
     56 public:
     57  RTPPacket(uint8_t payloadType,
     58            uint32_t timeStamp,
     59            int16_t seqNo,
     60            const uint8_t* payloadData,
     61            size_t payloadSize,
     62            uint32_t frequency);
     63 
     64  ~RTPPacket();
     65 
     66  uint8_t payloadType;
     67  uint32_t timeStamp;
     68  int16_t seqNo;
     69  uint8_t* payloadData;
     70  size_t payloadSize;
     71  uint32_t frequency;
     72 };
     73 
     74 class RTPBuffer : public RTPStream {
     75 public:
     76  RTPBuffer() = default;
     77 
     78  ~RTPBuffer() = default;
     79 
     80  void Write(uint8_t payloadType,
     81             uint32_t timeStamp,
     82             int16_t seqNo,
     83             const uint8_t* payloadData,
     84             size_t payloadSize,
     85             uint32_t frequency) override;
     86 
     87  size_t Read(RTPHeader* rtp_header,
     88              uint8_t* payloadData,
     89              size_t payloadSize,
     90              uint32_t* offset) override;
     91 
     92  bool EndOfFile() const override;
     93 
     94 private:
     95  mutable Mutex mutex_;
     96  std::queue<RTPPacket*> _rtpQueue RTC_GUARDED_BY(&mutex_);
     97 };
     98 
     99 class RTPFile : public RTPStream {
    100 public:
    101  ~RTPFile() {}
    102 
    103  RTPFile() : _rtpFile(NULL), _rtpEOF(false) {}
    104 
    105  void Open(absl::string_view outFilename, absl::string_view mode);
    106 
    107  void Close();
    108 
    109  void WriteHeader();
    110 
    111  void ReadHeader();
    112 
    113  void Write(uint8_t payloadType,
    114             uint32_t timeStamp,
    115             int16_t seqNo,
    116             const uint8_t* payloadData,
    117             size_t payloadSize,
    118             uint32_t frequency) override;
    119 
    120  size_t Read(RTPHeader* rtp_header,
    121              uint8_t* payloadData,
    122              size_t payloadSize,
    123              uint32_t* offset) override;
    124 
    125  bool EndOfFile() const override { return _rtpEOF; }
    126 
    127 private:
    128  FILE* _rtpFile;
    129  bool _rtpEOF;
    130 };
    131 
    132 }  // namespace webrtc
    133 
    134 #endif  // MODULES_AUDIO_CODING_TEST_RTPFILE_H_