123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- /*
- * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license
- * that can be found in the LICENSE file in the root of the source
- * tree. An additional intellectual property rights grant can be found
- * in the file PATENTS. All contributing project authors may
- * be found in the AUTHORS file in the root of the source tree.
- */
- #ifndef MODULES_AUDIO_CODING_TEST_RTPFILE_H_
- #define MODULES_AUDIO_CODING_TEST_RTPFILE_H_
- #include <stdio.h>
- #include <queue>
- #include "api/rtp_headers.h"
- #include "rtc_base/synchronization/rw_lock_wrapper.h"
- namespace webrtc {
- class RTPStream {
- public:
- virtual ~RTPStream() {}
- virtual void Write(const uint8_t payloadType,
- const uint32_t timeStamp,
- const int16_t seqNo,
- const uint8_t* payloadData,
- const size_t payloadSize,
- uint32_t frequency) = 0;
- // Returns the packet's payload size. Zero should be treated as an
- // end-of-stream (in the case that EndOfFile() is true) or an error.
- virtual size_t Read(RTPHeader* rtp_Header,
- uint8_t* payloadData,
- size_t payloadSize,
- uint32_t* offset) = 0;
- virtual bool EndOfFile() const = 0;
- protected:
- void MakeRTPheader(uint8_t* rtpHeader,
- uint8_t payloadType,
- int16_t seqNo,
- uint32_t timeStamp,
- uint32_t ssrc);
- void ParseRTPHeader(RTPHeader* rtp_header, const uint8_t* rtpHeader);
- };
- class RTPPacket {
- public:
- RTPPacket(uint8_t payloadType,
- uint32_t timeStamp,
- int16_t seqNo,
- const uint8_t* payloadData,
- size_t payloadSize,
- uint32_t frequency);
- ~RTPPacket();
- uint8_t payloadType;
- uint32_t timeStamp;
- int16_t seqNo;
- uint8_t* payloadData;
- size_t payloadSize;
- uint32_t frequency;
- };
- class RTPBuffer : public RTPStream {
- public:
- RTPBuffer();
- ~RTPBuffer();
- void Write(const uint8_t payloadType,
- const uint32_t timeStamp,
- const int16_t seqNo,
- const uint8_t* payloadData,
- const size_t payloadSize,
- uint32_t frequency) override;
- size_t Read(RTPHeader* rtp_header,
- uint8_t* payloadData,
- size_t payloadSize,
- uint32_t* offset) override;
- bool EndOfFile() const override;
- private:
- RWLockWrapper* _queueRWLock;
- std::queue<RTPPacket*> _rtpQueue;
- };
- class RTPFile : public RTPStream {
- public:
- ~RTPFile() {}
- RTPFile() : _rtpFile(NULL), _rtpEOF(false) {}
- void Open(const char* outFilename, const char* mode);
- void Close();
- void WriteHeader();
- void ReadHeader();
- void Write(const uint8_t payloadType,
- const uint32_t timeStamp,
- const int16_t seqNo,
- const uint8_t* payloadData,
- const size_t payloadSize,
- uint32_t frequency) override;
- size_t Read(RTPHeader* rtp_header,
- uint8_t* payloadData,
- size_t payloadSize,
- uint32_t* offset) override;
- bool EndOfFile() const override { return _rtpEOF; }
- private:
- FILE* _rtpFile;
- bool _rtpEOF;
- };
- } // namespace webrtc
- #endif // MODULES_AUDIO_CODING_TEST_RTPFILE_H_
|