blob: b6bbf87c76741ad856d736c077a98016422373d0 [file] [log] [blame]
niklase@google.com470e71d2011-07-07 08:21:25 +00001/*
tina.legrand@webrtc.org16b6b902012-04-12 11:02:38 +00002 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
niklase@google.com470e71d2011-07-07 08:21:25 +00003 *
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 RTPFILE_H
12#define RTPFILE_H
13
14#include "audio_coding_module.h"
15#include "module_common_types.h"
16#include "typedefs.h"
17#include "rw_lock_wrapper.h"
18#include <stdio.h>
19#include <queue>
20
tina.legrand@webrtc.org554ae1a2011-12-16 10:09:04 +000021namespace webrtc {
niklase@google.com470e71d2011-07-07 08:21:25 +000022
23class RTPStream
24{
25public:
26 virtual ~RTPStream(){}
andrew@webrtc.org975e4a32012-01-17 19:27:33 +000027
pbos@webrtc.org0946a562013-04-09 00:28:06 +000028 virtual void Write(const uint8_t payloadType, const uint32_t timeStamp,
29 const int16_t seqNo, const uint8_t* payloadData,
30 const uint16_t payloadSize, uint32_t frequency) = 0;
andrew@webrtc.org975e4a32012-01-17 19:27:33 +000031
32 // Returns the packet's payload size. Zero should be treated as an
33 // end-of-stream (in the case that EndOfFile() is true) or an error.
pbos@webrtc.org0946a562013-04-09 00:28:06 +000034 virtual uint16_t Read(WebRtcRTPHeader* rtpInfo,
35 uint8_t* payloadData,
36 uint16_t payloadSize,
37 uint32_t* offset) = 0;
niklase@google.com470e71d2011-07-07 08:21:25 +000038 virtual bool EndOfFile() const = 0;
39
40protected:
pbos@webrtc.org0946a562013-04-09 00:28:06 +000041 void MakeRTPheader(uint8_t* rtpHeader,
42 uint8_t payloadType, int16_t seqNo,
43 uint32_t timeStamp, uint32_t ssrc);
44 void ParseRTPHeader(WebRtcRTPHeader* rtpInfo, const uint8_t* rtpHeader);
niklase@google.com470e71d2011-07-07 08:21:25 +000045};
46
47class RTPPacket
48{
49public:
pbos@webrtc.org0946a562013-04-09 00:28:06 +000050 RTPPacket(uint8_t payloadType, uint32_t timeStamp,
51 int16_t seqNo, const uint8_t* payloadData,
52 uint16_t payloadSize, uint32_t frequency);
niklase@google.com470e71d2011-07-07 08:21:25 +000053 ~RTPPacket();
pbos@webrtc.org0946a562013-04-09 00:28:06 +000054 uint8_t payloadType;
55 uint32_t timeStamp;
56 int16_t seqNo;
57 uint8_t* payloadData;
58 uint16_t payloadSize;
59 uint32_t frequency;
niklase@google.com470e71d2011-07-07 08:21:25 +000060};
61
62class RTPBuffer : public RTPStream
63{
64public:
65 RTPBuffer();
66 ~RTPBuffer();
pbos@webrtc.org0946a562013-04-09 00:28:06 +000067 void Write(const uint8_t payloadType, const uint32_t timeStamp,
68 const int16_t seqNo, const uint8_t* payloadData,
69 const uint16_t payloadSize, uint32_t frequency);
70 uint16_t Read(WebRtcRTPHeader* rtpInfo,
71 uint8_t* payloadData,
72 uint16_t payloadSize,
73 uint32_t* offset);
niklase@google.com470e71d2011-07-07 08:21:25 +000074 virtual bool EndOfFile() const;
75private:
76 RWLockWrapper* _queueRWLock;
77 std::queue<RTPPacket *> _rtpQueue;
78};
79
80class RTPFile : public RTPStream
81{
82public:
83 ~RTPFile(){}
84 RTPFile() : _rtpFile(NULL),_rtpEOF(false) {}
kjellander@webrtc.org5490c712011-12-21 13:34:18 +000085 void Open(const char *outFilename, const char *mode);
niklase@google.com470e71d2011-07-07 08:21:25 +000086 void Close();
87 void WriteHeader();
88 void ReadHeader();
pbos@webrtc.org0946a562013-04-09 00:28:06 +000089 void Write(const uint8_t payloadType, const uint32_t timeStamp,
90 const int16_t seqNo, const uint8_t* payloadData,
91 const uint16_t payloadSize, uint32_t frequency);
92 uint16_t Read(WebRtcRTPHeader* rtpInfo,
93 uint8_t* payloadData,
94 uint16_t payloadSize,
95 uint32_t* offset);
niklase@google.com470e71d2011-07-07 08:21:25 +000096 bool EndOfFile() const { return _rtpEOF; }
97private:
98 FILE* _rtpFile;
99 bool _rtpEOF;
100};
101
tina.legrand@webrtc.org554ae1a2011-12-16 10:09:04 +0000102} // namespace webrtc
niklase@google.com470e71d2011-07-07 08:21:25 +0000103#endif