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 WEBRTC_VOICE_ENGINE_VOE_RTP_RTCP_IMPL_H
12#define WEBRTC_VOICE_ENGINE_VOE_RTP_RTCP_IMPL_H
13
14#include "webrtc/voice_engine/include/voe_rtp_rtcp.h"
15
16#include "webrtc/voice_engine/shared_data.h"
17
18namespace webrtc {
19
20class VoERTP_RTCPImpl : public VoERTP_RTCP
21{
22public:
23    // RTCP
24    virtual int SetRTCPStatus(int channel, bool enable);
25
26    virtual int GetRTCPStatus(int channel, bool& enabled);
27
28    virtual int SetRTCP_CNAME(int channel, const char cName[256]);
29
30    virtual int GetRemoteRTCP_CNAME(int channel, char cName[256]);
31
32    virtual int GetRemoteRTCPData(int channel,
33                                  unsigned int& NTPHigh,
34                                  unsigned int& NTPLow,
35                                  unsigned int& timestamp,
36                                  unsigned int& playoutTimestamp,
37                                  unsigned int* jitter = NULL,
38                                  unsigned short* fractionLost = NULL);
39
40    // SSRC
41    virtual int SetLocalSSRC(int channel, unsigned int ssrc);
42
43    virtual int GetLocalSSRC(int channel, unsigned int& ssrc);
44
45    virtual int GetRemoteSSRC(int channel, unsigned int& ssrc);
46
47    // RTP Header Extension for Client-to-Mixer Audio Level Indication
48    virtual int SetSendAudioLevelIndicationStatus(int channel,
49                                                  bool enable,
50                                                  unsigned char id);
51    virtual int SetReceiveAudioLevelIndicationStatus(int channel,
52                                                     bool enable,
53                                                     unsigned char id);
54
55    // RTP Header Extension for Absolute Sender Time
56    virtual int SetSendAbsoluteSenderTimeStatus(int channel,
57                                                bool enable,
58                                                unsigned char id);
59    virtual int SetReceiveAbsoluteSenderTimeStatus(int channel,
60                                                   bool enable,
61                                                   unsigned char id);
62
63    // Statistics
64    virtual int GetRTPStatistics(int channel,
65                                 unsigned int& averageJitterMs,
66                                 unsigned int& maxJitterMs,
67                                 unsigned int& discardedPackets);
68
69    virtual int GetRTCPStatistics(int channel, CallStatistics& stats);
70
71    virtual int GetRemoteRTCPReportBlocks(
72        int channel, std::vector<ReportBlock>* report_blocks);
73
74    // RED
75    virtual int SetREDStatus(int channel,
76                             bool enable,
77                             int redPayloadtype = -1);
78
79    virtual int GetREDStatus(int channel, bool& enabled, int& redPayloadtype);
80
81    //NACK
82    virtual int SetNACKStatus(int channel,
83                              bool enable,
84                              int maxNoPackets);
85
86    // Store RTP and RTCP packets and dump to file (compatible with rtpplay)
87    virtual int StartRTPDump(int channel,
88                             const char fileNameUTF8[1024],
89                             RTPDirections direction = kRtpIncoming);
90
91    virtual int StopRTPDump(int channel,
92                            RTPDirections direction = kRtpIncoming);
93
94    virtual int RTPDumpIsActive(int channel,
95                                RTPDirections direction = kRtpIncoming);
96
97    virtual int SetVideoEngineBWETarget(int channel, ViENetwork* vie_network,
98                                        int video_channel);
99protected:
100    VoERTP_RTCPImpl(voe::SharedData* shared);
101    virtual ~VoERTP_RTCPImpl();
102
103private:
104    voe::SharedData* _shared;
105};
106
107}  // namespace webrtc
108
109#endif    // WEBRTC_VOICE_ENGINE_VOE_RTP_RTCP_IMPL_H
110