| /* |
| * Copyright (c) 2011 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 RTPFILE_H |
| #define RTPFILE_H |
| |
| #include "audio_coding_module.h" |
| #include "module_common_types.h" |
| #include "typedefs.h" |
| #include "rw_lock_wrapper.h" |
| #include <stdio.h> |
| #include <queue> |
| |
| namespace webrtc { |
| |
| class RTPStream |
| { |
| public: |
| virtual ~RTPStream(){} |
| |
| virtual void Write(const WebRtc_UWord8 payloadType, const WebRtc_UWord32 timeStamp, |
| const WebRtc_Word16 seqNo, const WebRtc_UWord8* payloadData, |
| const WebRtc_UWord16 payloadSize, WebRtc_UWord32 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 WebRtc_UWord16 Read(WebRtcRTPHeader* rtpInfo, |
| WebRtc_Word8* payloadData, |
| WebRtc_UWord16 payloadSize, |
| WebRtc_UWord32* offset) = 0; |
| virtual bool EndOfFile() const = 0; |
| |
| protected: |
| void MakeRTPheader(WebRtc_UWord8* rtpHeader, |
| WebRtc_UWord8 payloadType, WebRtc_Word16 seqNo, |
| WebRtc_UWord32 timeStamp, WebRtc_UWord32 ssrc); |
| void ParseRTPHeader(WebRtcRTPHeader* rtpInfo, const WebRtc_UWord8* rtpHeader); |
| }; |
| |
| class RTPPacket |
| { |
| public: |
| RTPPacket(WebRtc_UWord8 payloadType, WebRtc_UWord32 timeStamp, |
| WebRtc_Word16 seqNo, const WebRtc_UWord8* payloadData, |
| WebRtc_UWord16 payloadSize, WebRtc_UWord32 frequency); |
| ~RTPPacket(); |
| WebRtc_UWord8 payloadType; |
| WebRtc_UWord32 timeStamp; |
| WebRtc_Word16 seqNo; |
| WebRtc_UWord8* payloadData; |
| WebRtc_UWord16 payloadSize; |
| WebRtc_UWord32 frequency; |
| }; |
| |
| class RTPBuffer : public RTPStream |
| { |
| public: |
| RTPBuffer(); |
| ~RTPBuffer(); |
| void Write(const WebRtc_UWord8 payloadType, const WebRtc_UWord32 timeStamp, |
| const WebRtc_Word16 seqNo, const WebRtc_UWord8* payloadData, |
| const WebRtc_UWord16 payloadSize, WebRtc_UWord32 frequency); |
| WebRtc_UWord16 Read(WebRtcRTPHeader* rtpInfo, |
| WebRtc_Word8* payloadData, |
| WebRtc_UWord16 payloadSize, |
| WebRtc_UWord32* offset); |
| virtual bool EndOfFile() const; |
| 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 WebRtc_UWord8 payloadType, const WebRtc_UWord32 timeStamp, |
| const WebRtc_Word16 seqNo, const WebRtc_UWord8* payloadData, |
| const WebRtc_UWord16 payloadSize, WebRtc_UWord32 frequency); |
| WebRtc_UWord16 Read(WebRtcRTPHeader* rtpInfo, |
| WebRtc_Word8* payloadData, |
| WebRtc_UWord16 payloadSize, |
| WebRtc_UWord32* offset); |
| bool EndOfFile() const { return _rtpEOF; } |
| private: |
| FILE* _rtpFile; |
| bool _rtpEOF; |
| }; |
| |
| } // namespace webrtc |
| #endif |