1b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/*
2b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *
4b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  Use of this source code is governed by a BSD-style license
5b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  that can be found in the LICENSE file in the root of the source
6b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  tree. An additional intellectual property rights grant can be found
7b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  in the file PATENTS.  All contributing project authors may
8b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  be found in the AUTHORS file in the root of the source tree.
9b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */
10b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
11b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifndef WEBRTC_MODULES_RTP_RTCP_SOURCE_RTP_RTCP_IMPL_H_
12b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define WEBRTC_MODULES_RTP_RTCP_SOURCE_RTP_RTCP_IMPL_H_
13b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
14b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <list>
15937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org#include <vector>
16b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
17937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org#include "webrtc/modules/rtp_rtcp/interface/rtp_rtcp.h"
18937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org#include "webrtc/modules/rtp_rtcp/source/rtcp_receiver.h"
19937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org#include "webrtc/modules/rtp_rtcp/source/rtcp_sender.h"
20937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org#include "webrtc/modules/rtp_rtcp/source/rtp_sender.h"
21937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org#include "webrtc/system_wrappers/interface/scoped_ptr.h"
22c4af4cf7814bb773d838aefa476c196e5f1bc360asapersson@webrtc.org#include "webrtc/test/testsupport/gtest_prod_util.h"
23b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
24b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgnamespace webrtc {
25b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
26b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass ModuleRtpRtcpImpl : public RtpRtcp {
27b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org public:
28937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  explicit ModuleRtpRtcpImpl(const RtpRtcp::Configuration& configuration);
29b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
30937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  virtual ~ModuleRtpRtcpImpl();
31b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
32937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  // Returns the number of milliseconds until the module want a worker thread to
33937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  // call Process.
349d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org  virtual int32_t TimeUntilNextProcess() OVERRIDE;
35b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
36937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  // Process any pending tasks such as timeouts.
379d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org  virtual int32_t Process() OVERRIDE;
38b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
39937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  // Receiver part.
40b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
416696fba9388a386f7d0e3e0d93df48d43f05cd95stefan@webrtc.org  // Called when we receive an RTCP packet.
426696fba9388a386f7d0e3e0d93df48d43f05cd95stefan@webrtc.org  virtual int32_t IncomingRtcpPacket(const uint8_t* incoming_packet,
439d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org                                     uint16_t incoming_packet_length) OVERRIDE;
44b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
456b0dab1b84bb8b6cccd9cffa15067099c1fcfa51henrik.lundin@webrtc.org  virtual void SetRemoteSSRC(const uint32_t ssrc) OVERRIDE;
467fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org
47937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  // Sender part.
48b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
499d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org  virtual int32_t RegisterSendPayload(const CodecInst& voice_codec) OVERRIDE;
50b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
519d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org  virtual int32_t RegisterSendPayload(const VideoCodec& video_codec) OVERRIDE;
52b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
539d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org  virtual int32_t DeRegisterSendPayload(const int8_t payload_type) OVERRIDE;
54b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
556b0dab1b84bb8b6cccd9cffa15067099c1fcfa51henrik.lundin@webrtc.org  int8_t SendPayloadType() const;
56b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
57937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  // Register RTP header extension.
58b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org  virtual int32_t RegisterSendRtpHeaderExtension(
59937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org      const RTPExtensionType type,
609d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org      const uint8_t id) OVERRIDE;
61b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
62b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org  virtual int32_t DeregisterSendRtpHeaderExtension(
639d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org      const RTPExtensionType type) OVERRIDE;
64b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
65937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  // Get start timestamp.
669d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org  virtual uint32_t StartTimestamp() const OVERRIDE;
67b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
68937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  // Configure start timestamp, default is a random number.
699d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org  virtual int32_t SetStartTimestamp(const uint32_t timestamp) OVERRIDE;
70b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
719d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org  virtual uint16_t SequenceNumber() const OVERRIDE;
72b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
73937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  // Set SequenceNumber, default is a random number.
749d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org  virtual int32_t SetSequenceNumber(const uint16_t seq) OVERRIDE;
75b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
762fd91bd35094b909b4b3cce636454426fc893ac2pbos@webrtc.org  virtual void SetRtpStateForSsrc(uint32_t ssrc,
772fd91bd35094b909b4b3cce636454426fc893ac2pbos@webrtc.org                                  const RtpState& rtp_state) OVERRIDE;
782fd91bd35094b909b4b3cce636454426fc893ac2pbos@webrtc.org  virtual bool GetRtpStateForSsrc(uint32_t ssrc, RtpState* rtp_state) OVERRIDE;
792fd91bd35094b909b4b3cce636454426fc893ac2pbos@webrtc.org
809d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org  virtual uint32_t SSRC() const OVERRIDE;
81b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
82937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  // Configure SSRC, default is a random number.
83903e746cc9a73da17bfa3f6110293582fa6ee3bestefan@webrtc.org  virtual void SetSSRC(const uint32_t ssrc) OVERRIDE;
84b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
859d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org  virtual int32_t CSRCs(uint32_t arr_of_csrc[kRtpCsrcSize]) const OVERRIDE;
86b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
87b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org  virtual int32_t SetCSRCs(const uint32_t arr_of_csrc[kRtpCsrcSize],
889d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org                           const uint8_t arr_length) OVERRIDE;
89b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
909d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org  virtual int32_t SetCSRCStatus(const bool include) OVERRIDE;
91b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
926b0dab1b84bb8b6cccd9cffa15067099c1fcfa51henrik.lundin@webrtc.org  RTCPSender::FeedbackState GetFeedbackState();
93b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
946b0dab1b84bb8b6cccd9cffa15067099c1fcfa51henrik.lundin@webrtc.org  int CurrentSendFrequencyHz() const;
95b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
96903e746cc9a73da17bfa3f6110293582fa6ee3bestefan@webrtc.org  virtual void SetRTXSendStatus(const int mode) OVERRIDE;
97b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
98903e746cc9a73da17bfa3f6110293582fa6ee3bestefan@webrtc.org  virtual void RTXSendStatus(int* mode, uint32_t* ssrc,
99903e746cc9a73da17bfa3f6110293582fa6ee3bestefan@webrtc.org                             int* payloadType) const OVERRIDE;
1007bc7e02c4aadc8acb8fdc35a555a0cb33e566b16mflodman@webrtc.org
101903e746cc9a73da17bfa3f6110293582fa6ee3bestefan@webrtc.org  virtual void SetRtxSsrc(uint32_t ssrc) OVERRIDE;
1027bc7e02c4aadc8acb8fdc35a555a0cb33e566b16mflodman@webrtc.org
1039d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org  virtual void SetRtxSendPayloadType(int payload_type) OVERRIDE;
104b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
105937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  // Sends kRtcpByeCode when going from true to false.
1069d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org  virtual int32_t SetSendingStatus(const bool sending) OVERRIDE;
107b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
1089d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org  virtual bool Sending() const OVERRIDE;
109b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
110937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  // Drops or relays media packets.
1119d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org  virtual int32_t SetSendingMediaStatus(const bool sending) OVERRIDE;
112b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
1139d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org  virtual bool SendingMedia() const OVERRIDE;
114b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
115937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  // Used by the codec module to deliver a video or audio frame for
116937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  // packetization.
117b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org  virtual int32_t SendOutgoingData(
118937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org      const FrameType frame_type,
119b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org      const int8_t payload_type,
120b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org      const uint32_t time_stamp,
121937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org      int64_t capture_time_ms,
122b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org      const uint8_t* payload_data,
123b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org      const uint32_t payload_size,
124937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org      const RTPFragmentationHeader* fragmentation = NULL,
1259d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org      const RTPVideoHeader* rtp_video_hdr = NULL) OVERRIDE;
126b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
127b748c9d2022042b2cc04eaf89052945ba7149ba6stefan@webrtc.org  virtual bool TimeToSendPacket(uint32_t ssrc,
128b748c9d2022042b2cc04eaf89052945ba7149ba6stefan@webrtc.org                                uint16_t sequence_number,
129b748c9d2022042b2cc04eaf89052945ba7149ba6stefan@webrtc.org                                int64_t capture_time_ms,
130b748c9d2022042b2cc04eaf89052945ba7149ba6stefan@webrtc.org                                bool retransmission) OVERRIDE;
13169f76054f5dc242b313e7e0642c8657a885682bastefan@webrtc.org  // Returns the number of padding bytes actually sent, which can be more or
13269f76054f5dc242b313e7e0642c8657a885682bastefan@webrtc.org  // less than |bytes|.
1339d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org  virtual int TimeToSendPadding(int bytes) OVERRIDE;
134ee234be7908840221b78e6489d42ea792d4ce87dstefan@webrtc.org
135ee234be7908840221b78e6489d42ea792d4ce87dstefan@webrtc.org  virtual bool GetSendSideDelay(int* avg_send_delay_ms,
136ee234be7908840221b78e6489d42ea792d4ce87dstefan@webrtc.org                                int* max_send_delay_ms) const OVERRIDE;
137ee234be7908840221b78e6489d42ea792d4ce87dstefan@webrtc.org
138937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  // RTCP part.
139b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
140937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  // Get RTCP status.
1419d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org  virtual RTCPMethod RTCP() const OVERRIDE;
142b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
143937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  // Configure RTCP status i.e on/off.
1449d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org  virtual int32_t SetRTCPStatus(const RTCPMethod method) OVERRIDE;
145b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
146937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  // Set RTCP CName.
1479d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org  virtual int32_t SetCNAME(const char c_name[RTCP_CNAME_SIZE]) OVERRIDE;
148b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
149937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  // Get remote CName.
150b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org  virtual int32_t RemoteCNAME(const uint32_t remote_ssrc,
1519d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org                              char c_name[RTCP_CNAME_SIZE]) const OVERRIDE;
152b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
153937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  // Get remote NTP.
154b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org  virtual int32_t RemoteNTP(uint32_t* received_ntp_secs,
155b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org                            uint32_t* received_ntp_frac,
156b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org                            uint32_t* rtcp_arrival_time_secs,
157b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org                            uint32_t* rtcp_arrival_time_frac,
1589d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org                            uint32_t* rtcp_timestamp) const OVERRIDE;
159b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
160b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org  virtual int32_t AddMixedCNAME(const uint32_t ssrc,
1619d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org                                const char c_name[RTCP_CNAME_SIZE]) OVERRIDE;
162b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
1639d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org  virtual int32_t RemoveMixedCNAME(const uint32_t ssrc) OVERRIDE;
164b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
165937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  // Get RoundTripTime.
166b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org  virtual int32_t RTT(const uint32_t remote_ssrc,
167b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org                      uint16_t* rtt,
168b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org                      uint16_t* avg_rtt,
169b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org                      uint16_t* min_rtt,
1709d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org                      uint16_t* max_rtt) const OVERRIDE;
17178696d33d7711eb8208400908237c384b235bf74mflodman@webrtc.org
172937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  // Reset RoundTripTime statistics.
1739d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org  virtual int32_t ResetRTT(const uint32_t remote_ssrc) OVERRIDE;
174b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
175937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  // Force a send of an RTCP packet.
176937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  // Normal SR and RR are triggered via the process function.
1779d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org  virtual int32_t SendRTCP(uint32_t rtcp_packet_type = kRtcpReport) OVERRIDE;
178b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
1799d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org  virtual int32_t ResetSendDataCountersRTP() OVERRIDE;
180b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
181937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  // Statistics of the amount of data sent and received.
182b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org  virtual int32_t DataCountersRTP(uint32_t* bytes_sent,
1837fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org                                  uint32_t* packets_sent) const OVERRIDE;
184b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
185937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  // Get received RTCP report, sender info.
1869d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org  virtual int32_t RemoteRTCPStat(RTCPSenderInfo* sender_info) OVERRIDE;
187b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
188937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  // Get received RTCP report, report block.
189b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org  virtual int32_t RemoteRTCPStat(
1909d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org      std::vector<RTCPReportBlock>* receive_blocks) const OVERRIDE;
191b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
192937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  // Set received RTCP report block.
193b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org  virtual int32_t AddRTCPReportBlock(
1944a1556017653ef7702585897b071872e83bd95b9asapersson@webrtc.org      const uint32_t ssrc, const RTCPReportBlock* receive_block) OVERRIDE;
195b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
1969d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org  virtual int32_t RemoveRTCPReportBlock(const uint32_t ssrc) OVERRIDE;
197b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
1984a1556017653ef7702585897b071872e83bd95b9asapersson@webrtc.org  virtual void GetRtcpPacketTypeCounters(
1994a1556017653ef7702585897b071872e83bd95b9asapersson@webrtc.org      RtcpPacketTypeCounter* packets_sent,
2004a1556017653ef7702585897b071872e83bd95b9asapersson@webrtc.org      RtcpPacketTypeCounter* packets_received) const OVERRIDE;
2014a1556017653ef7702585897b071872e83bd95b9asapersson@webrtc.org
202937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  // (REMB) Receiver Estimated Max Bitrate.
2039d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org  virtual bool REMB() const OVERRIDE;
204b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
2059d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org  virtual int32_t SetREMBStatus(const bool enable) OVERRIDE;
206b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
207b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org  virtual int32_t SetREMBData(const uint32_t bitrate,
208b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org                              const uint8_t number_of_ssrc,
2099d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org                              const uint32_t* ssrc) OVERRIDE;
210b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
211937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  // (IJ) Extended jitter report.
2129d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org  virtual bool IJ() const OVERRIDE;
213b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
2149d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org  virtual int32_t SetIJStatus(const bool enable) OVERRIDE;
215b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
216937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  // (TMMBR) Temporary Max Media Bit Rate.
2179d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org  virtual bool TMMBR() const OVERRIDE;
218b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
2199d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org  virtual int32_t SetTMMBRStatus(const bool enable) OVERRIDE;
220b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
221b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org  int32_t SetTMMBN(const TMMBRSet* bounding_set);
222b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
2239d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org  virtual uint16_t MaxPayloadLength() const OVERRIDE;
224b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
2259d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org  virtual uint16_t MaxDataPayloadLength() const OVERRIDE;
226b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
2279d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org  virtual int32_t SetMaxTransferUnit(const uint16_t size) OVERRIDE;
228b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
229b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org  virtual int32_t SetTransportOverhead(
230937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org      const bool tcp,
231937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org      const bool ipv6,
2329d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org      const uint8_t authentication_overhead = 0) OVERRIDE;
233b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
234937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  // (NACK) Negative acknowledgment part.
235b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
2369d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org  virtual int SelectiveRetransmissions() const OVERRIDE;
237b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
2389d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org  virtual int SetSelectiveRetransmissions(uint8_t settings) OVERRIDE;
239b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
240937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  // Send a Negative acknowledgment packet.
2419d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org  virtual int32_t SendNACK(const uint16_t* nack_list,
2429d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org                           const uint16_t size) OVERRIDE;
243b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
244937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  // Store the sent packets, needed to answer to a negative acknowledgment
245937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  // requests.
246b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org  virtual int32_t SetStorePacketsStatus(
2479d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org      const bool enable, const uint16_t number_to_store) OVERRIDE;
248b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
2497fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org  virtual bool StorePackets() const OVERRIDE;
2507fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org
2519b30fd3991cf4fdbab0141e297c5b2e55fc65937sprang@webrtc.org  // Called on receipt of RTCP report block from remote side.
2529b30fd3991cf4fdbab0141e297c5b2e55fc65937sprang@webrtc.org  virtual void RegisterSendChannelRtcpStatisticsCallback(
2539b30fd3991cf4fdbab0141e297c5b2e55fc65937sprang@webrtc.org      RtcpStatisticsCallback* callback) OVERRIDE;
2549b30fd3991cf4fdbab0141e297c5b2e55fc65937sprang@webrtc.org  virtual RtcpStatisticsCallback*
2559b30fd3991cf4fdbab0141e297c5b2e55fc65937sprang@webrtc.org      GetSendChannelRtcpStatisticsCallback() OVERRIDE;
2569b30fd3991cf4fdbab0141e297c5b2e55fc65937sprang@webrtc.org
257937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  // (APP) Application specific data.
258b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org  virtual int32_t SetRTCPApplicationSpecificData(
259b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org      const uint8_t sub_type,
260b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org      const uint32_t name,
261b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org      const uint8_t* data,
2629d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org      const uint16_t length) OVERRIDE;
263b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
264937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  // (XR) VOIP metric.
2659d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org  virtual int32_t SetRTCPVoIPMetrics(const RTCPVoIPMetric* VoIPMetric) OVERRIDE;
266b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
26772cc32a68bcb9b2aa32f751dc6d120716d220a10asapersson@webrtc.org  // (XR) Receiver reference time report.
26872cc32a68bcb9b2aa32f751dc6d120716d220a10asapersson@webrtc.org  virtual void SetRtcpXrRrtrStatus(bool enable) OVERRIDE;
26972cc32a68bcb9b2aa32f751dc6d120716d220a10asapersson@webrtc.org
2703dc7ff30185a2d7a597acb69183fca73bd1004d8asapersson@webrtc.org  virtual bool RtcpXrRrtrStatus() const OVERRIDE;
2713dc7ff30185a2d7a597acb69183fca73bd1004d8asapersson@webrtc.org
272937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  // Audio part.
273b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
274937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  // Set audio packet size, used to determine when it's time to send a DTMF
275937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  // packet in silence (CNG).
276b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org  virtual int32_t SetAudioPacketSize(
2779d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org      const uint16_t packet_size_samples) OVERRIDE;
278b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
2799d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org  virtual bool SendTelephoneEventActive(int8_t& telephone_event) const OVERRIDE;
280937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org
281937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  // Send a TelephoneEvent tone using RFC 2833 (4733).
282b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org  virtual int32_t SendTelephoneEventOutband(const uint8_t key,
283b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org                                            const uint16_t time_ms,
2849d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org                                            const uint8_t level) OVERRIDE;
285b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
286937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  // Set payload type for Redundant Audio Data RFC 2198.
2879d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org  virtual int32_t SetSendREDPayloadType(const int8_t payload_type) OVERRIDE;
288937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org
289937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  // Get payload type for Redundant Audio Data RFC 2198.
2909d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org  virtual int32_t SendREDPayloadType(int8_t& payload_type) const OVERRIDE;
291b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
292937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  // Store the audio level in d_bov for header-extension-for-audio-level-
293937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  // indication.
2949d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org  virtual int32_t SetAudioLevel(const uint8_t level_d_bov) OVERRIDE;
295b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
296937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  // Video part.
297b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
298b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org  virtual int32_t SendRTCPSliceLossIndication(
2999d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org      const uint8_t picture_id) OVERRIDE;
300b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
301937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  // Set method for requestion a new key frame.
302b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org  virtual int32_t SetKeyFrameRequestMethod(
3039d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org      const KeyFrameRequestMethod method) OVERRIDE;
304b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
305937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  // Send a request for a keyframe.
3069d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org  virtual int32_t RequestKeyFrame() OVERRIDE;
307b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
3089d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org  virtual int32_t SetCameraDelay(const int32_t delay_ms) OVERRIDE;
30973ebe67b3e6f0a65efed02efd4eee4dfb1b7729estefan@webrtc.org
3107dc17903111cf74bc28f45d87e595c628481f1acstefan@webrtc.org  virtual void SetTargetSendBitrate(
3117dc17903111cf74bc28f45d87e595c628481f1acstefan@webrtc.org      const std::vector<uint32_t>& stream_bitrates) OVERRIDE;
312b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
313b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org  virtual int32_t SetGenericFECStatus(
314937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org      const bool enable,
315b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org      const uint8_t payload_type_red,
3169d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org      const uint8_t payload_type_fec) OVERRIDE;
317b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
318b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org  virtual int32_t GenericFECStatus(
319937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org      bool& enable,
320b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org      uint8_t& payload_type_red,
3219d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org      uint8_t& payload_type_fec) OVERRIDE;
322b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
323b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org  virtual int32_t SetFecParameters(
324937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org      const FecProtectionParams* delta_params,
3259d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org      const FecProtectionParams* key_params) OVERRIDE;
326b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
3276b0dab1b84bb8b6cccd9cffa15067099c1fcfa51henrik.lundin@webrtc.org  bool LastReceivedNTP(uint32_t* NTPsecs,
3286b0dab1b84bb8b6cccd9cffa15067099c1fcfa51henrik.lundin@webrtc.org                       uint32_t* NTPfrac,
3296b0dab1b84bb8b6cccd9cffa15067099c1fcfa51henrik.lundin@webrtc.org                       uint32_t* remote_sr) const;
330b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
3316b0dab1b84bb8b6cccd9cffa15067099c1fcfa51henrik.lundin@webrtc.org  bool LastReceivedXrReferenceTimeInfo(RtcpReceiveTimeInfo* info) const;
332d6da239905c84110a7c90789df70238afd0f64b6asapersson@webrtc.org
333b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org  virtual int32_t BoundingSet(bool& tmmbr_owner, TMMBRSet*& bounding_set_rec);
334b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
335b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org  virtual void BitrateSent(uint32_t* total_rate,
336b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org                           uint32_t* video_rate,
337b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org                           uint32_t* fec_rate,
3389d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org                           uint32_t* nackRate) const OVERRIDE;
339b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
3406b0dab1b84bb8b6cccd9cffa15067099c1fcfa51henrik.lundin@webrtc.org  uint32_t SendTimeOfSendReport(const uint32_t send_report);
341b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
3426b0dab1b84bb8b6cccd9cffa15067099c1fcfa51henrik.lundin@webrtc.org  bool SendTimeOfXrRrReport(uint32_t mid_ntp, int64_t* time_ms) const;
343d6da239905c84110a7c90789df70238afd0f64b6asapersson@webrtc.org
344937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  // Good state of RTP receiver inform sender.
345b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org  virtual int32_t SendRTCPReferencePictureSelection(
3469d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org      const uint64_t picture_id) OVERRIDE;
347b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
348b113981639e341ed642be9ca74c22a83d2b33a28sprang@webrtc.org  virtual void RegisterSendChannelRtpStatisticsCallback(
3496b0dab1b84bb8b6cccd9cffa15067099c1fcfa51henrik.lundin@webrtc.org      StreamDataCountersCallback* callback) OVERRIDE;
350b113981639e341ed642be9ca74c22a83d2b33a28sprang@webrtc.org  virtual StreamDataCountersCallback*
3516b0dab1b84bb8b6cccd9cffa15067099c1fcfa51henrik.lundin@webrtc.org      GetSendChannelRtpStatisticsCallback() const OVERRIDE;
352b113981639e341ed642be9ca74c22a83d2b33a28sprang@webrtc.org
353937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  void OnReceivedTMMBR();
354b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
355937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  // Bad state of RTP receiver request a keyframe.
356937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  void OnRequestIntraFrame();
357b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
358937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  // Received a request for a new SLI.
359b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org  void OnReceivedSliceLossIndication(const uint8_t picture_id);
360b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
361937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  // Received a new reference frame.
362937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  void OnReceivedReferencePictureSelectionIndication(
363b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org      const uint64_t picture_id);
364b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
3657fff32c808707eb6810d1057747069d7afce9939stefan@webrtc.org  void OnReceivedNACK(const std::list<uint16_t>& nack_sequence_numbers);
366b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
367937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  void OnRequestSendReport();
368b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
369937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org protected:
370937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  void RegisterChildModule(RtpRtcp* module);
371b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
372937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  void DeRegisterChildModule(RtpRtcp* module);
373b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
374937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  bool UpdateRTCPReceiveInformationTimers();
375b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
376b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org  uint32_t BitrateReceivedNow() const;
377b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
378937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  // Get remote SequenceNumber.
379b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org  uint16_t RemoteSequenceNumber() const;
380b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
381937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  // Only for internal testing.
382b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org  uint32_t LastSendReport(uint32_t& last_rtcptime);
383b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
384937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  RTPSender                 rtp_sender_;
385b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
386937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  RTCPSender                rtcp_sender_;
387937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  RTCPReceiver              rtcp_receiver_;
388b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
3891bb2146351979b6610107419b2a9c86cca2692a3stefan@webrtc.org  Clock*                    clock_;
3908e9767d9395e565a363fbe30b2bcea596f8df36cmflodman@webrtc.org
391937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org private:
3925041831648212bfd5b68e91e1ff39e2b420f679easapersson@webrtc.org  FRIEND_TEST_ALL_PREFIXES(RtpRtcpImplTest, Rtt);
393c4af4cf7814bb773d838aefa476c196e5f1bc360asapersson@webrtc.org  FRIEND_TEST_ALL_PREFIXES(RtpRtcpImplTest, RttForReceiverOnly);
394937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  int64_t RtcpReportInterval();
3957485573a0f9547055f66584680e10909c6906017stefan@webrtc.org  void SetRtcpReceiverSsrcs(uint32_t main_ssrc);
396b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
397c4af4cf7814bb773d838aefa476c196e5f1bc360asapersson@webrtc.org  void set_rtt_ms(uint32_t rtt_ms);
398c4af4cf7814bb773d838aefa476c196e5f1bc360asapersson@webrtc.org  uint32_t rtt_ms() const;
399c4af4cf7814bb773d838aefa476c196e5f1bc360asapersson@webrtc.org
400202d38d3640f5fde06d192924585672acdea3192mflodman@webrtc.org  bool IsDefaultModule() const;
401202d38d3640f5fde06d192924585672acdea3192mflodman@webrtc.org
402b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org  int32_t             id_;
403937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  const bool                audio_;
404937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  bool                      collision_detected_;
405b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org  int64_t             last_process_time_;
406b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org  int64_t             last_bitrate_process_time_;
407b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org  int64_t             last_rtt_process_time_;
408b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org  uint16_t            packet_overhead_;
409b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
410937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  scoped_ptr<CriticalSectionWrapper> critical_section_module_ptrs_;
411937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  scoped_ptr<CriticalSectionWrapper> critical_section_module_ptrs_feedback_;
412937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  ModuleRtpRtcpImpl*            default_module_;
4137e87822cf6f75bb60c3d47cfb7d76c98b0ad6d6astefan@webrtc.org  std::vector<ModuleRtpRtcpImpl*> child_modules_;
4147e87822cf6f75bb60c3d47cfb7d76c98b0ad6d6astefan@webrtc.org  size_t padding_index_;
415b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
416937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  // Send side
417937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  NACKMethod            nack_method_;
418b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org  uint32_t        nack_last_time_sent_full_;
419b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org  uint16_t        nack_last_seq_number_sent_;
420b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
421937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  bool                  simulcast_;
422937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  VideoCodec            send_video_codec_;
423937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  KeyFrameRequestMethod key_frame_req_method_;
424b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
425937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org  RemoteBitrateEstimator* remote_bitrate_;
426937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org
427c4af4cf7814bb773d838aefa476c196e5f1bc360asapersson@webrtc.org  RtcpRttStats* rtt_stats_;
428c4af4cf7814bb773d838aefa476c196e5f1bc360asapersson@webrtc.org
429c4af4cf7814bb773d838aefa476c196e5f1bc360asapersson@webrtc.org  // The processed RTT from RtcpRttStats.
430c4af4cf7814bb773d838aefa476c196e5f1bc360asapersson@webrtc.org  scoped_ptr<CriticalSectionWrapper> critical_section_rtt_;
431c4af4cf7814bb773d838aefa476c196e5f1bc360asapersson@webrtc.org  uint32_t rtt_ms_;
432b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org};
433937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org
434937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org}  // namespace webrtc
435937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org
436937634675cd05832ef69c6e376f36b413ef13bcaphoglund@webrtc.org#endif  // WEBRTC_MODULES_RTP_RTCP_SOURCE_RTP_RTCP_IMPL_H_
437