Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / third_party / webrtc / modules / audio_coding / neteq4 / test / NETEQTEST_RTPpacket.h
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 NETEQTEST_RTPPACKET_H
12 #define NETEQTEST_RTPPACKET_H
13
14 #include <map>
15 #include <stdio.h>
16 #include "webrtc/typedefs.h"
17 #include "webrtc/modules/interface/module_common_types.h"
18
19 enum stereoModes {
20     stereoModeMono,
21     stereoModeSample1,
22     stereoModeSample2,
23     stereoModeFrame,
24     stereoModeDuplicate
25 };
26
27 class NETEQTEST_RTPpacket
28 {
29 public:
30     NETEQTEST_RTPpacket();
31     bool operator !() const { return (dataLen() < 0); };
32     virtual ~NETEQTEST_RTPpacket();
33     void reset();
34     static int skipFileHeader(FILE *fp);
35     virtual int readFromFile(FILE *fp);
36     int readFixedFromFile(FILE *fp, size_t len);
37     virtual int writeToFile(FILE *fp);
38     void blockPT(uint8_t pt);
39     //int16_t payloadType();
40     virtual void parseHeader();
41     void parseHeader(webrtc::WebRtcRTPHeader* rtp_header);
42     const webrtc::WebRtcRTPHeader* RTPinfo() const;
43     uint8_t * datagram() const;
44     uint8_t * payload() const;
45     int16_t payloadLen();
46     int16_t dataLen() const;
47     bool isParsed() const;
48     bool isLost() const;
49     uint32_t time() const { return _receiveTime; };
50
51     uint8_t  payloadType() const;
52     uint16_t sequenceNumber() const;
53     uint32_t timeStamp() const;
54     uint32_t SSRC() const;
55     uint8_t  markerBit() const;
56
57     int setPayloadType(uint8_t pt);
58     int setSequenceNumber(uint16_t sn);
59     int setTimeStamp(uint32_t ts);
60     int setSSRC(uint32_t ssrc);
61     int setMarkerBit(uint8_t mb);
62     void setTime(uint32_t receiveTime) { _receiveTime = receiveTime; };
63
64     int setRTPheader(const webrtc::WebRtcRTPHeader* RTPinfo);
65
66     int splitStereo(NETEQTEST_RTPpacket* slaveRtp, enum stereoModes mode);
67
68     int extractRED(int index, webrtc::WebRtcRTPHeader& red);
69
70     void scramblePayload(void);
71
72     uint8_t *       _datagram;
73     uint8_t *       _payloadPtr;
74     int                 _memSize;
75     int16_t         _datagramLen;
76     int16_t         _payloadLen;
77     webrtc::WebRtcRTPHeader _rtpInfo;
78     bool                _rtpParsed;
79     uint32_t        _receiveTime;
80     bool                _lost;
81     std::map<uint8_t, bool> _blockList;
82
83 protected:
84     static const int _kRDHeaderLen;
85     static const int _kBasicHeaderLen;
86
87     void parseBasicHeader(webrtc::WebRtcRTPHeader* RTPinfo, int *i_P, int *i_X,
88                           int *i_CC) const;
89     int calcHeaderLength(int i_X, int i_CC) const;
90
91 private:
92     void makeRTPheader(unsigned char* rtp_data, uint8_t payloadType,
93                        uint16_t seqNo, uint32_t timestamp,
94                        uint32_t ssrc, uint8_t markerBit) const;
95     uint16_t parseRTPheader(webrtc::WebRtcRTPHeader* RTPinfo,
96                             uint8_t **payloadPtr = NULL) const;
97     uint16_t parseRTPheader(uint8_t **payloadPtr = NULL)
98         { return parseRTPheader(&_rtpInfo, payloadPtr);};
99     int calcPadLength(int i_P) const;
100     void splitStereoSample(NETEQTEST_RTPpacket* slaveRtp, int stride);
101     void splitStereoFrame(NETEQTEST_RTPpacket* slaveRtp);
102     void splitStereoDouble(NETEQTEST_RTPpacket* slaveRtp);
103 };
104
105 #endif //NETEQTEST_RTPPACKET_H