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_INTERFACE_RTP_RTCP_DEFINES_H_
12b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define WEBRTC_MODULES_RTP_RTCP_INTERFACE_RTP_RTCP_DEFINES_H_
13b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
147fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org#include <stddef.h>
157485573a0f9547055f66584680e10909c6906017stefan@webrtc.org#include <list>
167fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org
17cbd78ae09f44b003a9969536b78f08cd1ff513e8pbos@webrtc.org#include "webrtc/modules/interface/module_common_types.h"
189858fc8df331a4111dc996469bcf027c4f986556stefan@webrtc.org#include "webrtc/system_wrappers/interface/clock.h"
19cbd78ae09f44b003a9969536b78f08cd1ff513e8pbos@webrtc.org#include "webrtc/typedefs.h"
20b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
21b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define RTCP_CNAME_SIZE 256    // RFC 3550 page 44, including null termination
22b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define IP_PACKET_SIZE 1500    // we assume ethernet
23b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define MAX_NUMBER_OF_PARALLEL_TELEPHONE_EVENTS 10
24b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define TIMEOUT_SEI_MESSAGES_MS 30000   // in milliseconds
25b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
267fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.orgnamespace webrtc {
277d91c10c601030978979529a17edbc51784866cephoglund@webrtc.org
287fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.orgconst int kVideoPayloadTypeFrequency = 90000;
297fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org
303e4cdeca70f8a9499fb746fa4e9a094a449dda86sprang@webrtc.org// Minimum RTP header size in bytes.
313e4cdeca70f8a9499fb746fa4e9a094a449dda86sprang@webrtc.orgconst uint8_t kRtpHeaderSize = 12;
323e4cdeca70f8a9499fb746fa4e9a094a449dda86sprang@webrtc.org
337fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.orgstruct AudioPayload
347fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org{
357fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org    uint32_t    frequency;
367fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org    uint8_t     channels;
377fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org    uint32_t    rate;
387fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org};
397fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org
407fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.orgstruct VideoPayload
417fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org{
427fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org    RtpVideoCodecTypes   videoCodecType;
437fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org    uint32_t       maxRate;
447fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org};
457fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org
467fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.orgunion PayloadUnion
477fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org{
487fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org    AudioPayload Audio;
497fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org    VideoPayload Video;
507fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org};
5168950e576072fa05c5056177e16aedb430a4cb2aphoglund@webrtc.org
52b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgenum RTCPMethod
53b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{
54b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    kRtcpOff          = 0,
55b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    kRtcpCompound     = 1,
56b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    kRtcpNonCompound = 2
57b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org};
58b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
59b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgenum RTPAliveType
60b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{
61b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    kRtpDead   = 0,
62b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    kRtpNoRtp = 1,
63b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    kRtpAlive  = 2
64b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org};
65b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
66b7fb080fab9a42241324a0dfc238de51ba5f911apbos@webrtc.orgenum ProtectionType {
67b7fb080fab9a42241324a0dfc238de51ba5f911apbos@webrtc.org  kUnprotectedPacket,
68b7fb080fab9a42241324a0dfc238de51ba5f911apbos@webrtc.org  kProtectedPacket
69b7fb080fab9a42241324a0dfc238de51ba5f911apbos@webrtc.org};
70b7fb080fab9a42241324a0dfc238de51ba5f911apbos@webrtc.org
71b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgenum StorageType {
72b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  kDontStore,
73b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  kDontRetransmit,
74b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  kAllowRetransmission
75b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org};
76b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
77b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgenum RTPExtensionType
78b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{
79b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org   kRtpExtensionNone,
80b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org   kRtpExtensionTransmissionTimeOffset,
81b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org   kRtpExtensionAudioLevel,
82a0b002541771f0fe945ab33493a4da940f95b7c0solenberg@webrtc.org   kRtpExtensionAbsoluteSendTime
83b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org};
84b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
85b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgenum RTCPAppSubTypes
86b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{
87b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    kAppSubtypeBwe     = 0x00
88b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org};
89b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
90b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgenum RTCPPacketType
91b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{
92b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    kRtcpReport         = 0x0001,
93b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    kRtcpSr             = 0x0002,
94b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    kRtcpRr             = 0x0004,
95b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    kRtcpBye            = 0x0008,
96b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    kRtcpPli            = 0x0010,
97b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    kRtcpNack           = 0x0020,
98b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    kRtcpFir            = 0x0040,
99b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    kRtcpTmmbr          = 0x0080,
100b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    kRtcpTmmbn          = 0x0100,
101b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    kRtcpSrReq          = 0x0200,
102b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    kRtcpXrVoipMetric   = 0x0400,
103b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    kRtcpApp            = 0x0800,
104b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    kRtcpSli            = 0x4000,
105b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    kRtcpRpsi           = 0x8000,
106b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    kRtcpRemb           = 0x10000,
107d6da239905c84110a7c90789df70238afd0f64b6asapersson@webrtc.org    kRtcpTransmissionTimeOffset = 0x20000,
108d6da239905c84110a7c90789df70238afd0f64b6asapersson@webrtc.org    kRtcpXrReceiverReferenceTime = 0x40000,
109d6da239905c84110a7c90789df70238afd0f64b6asapersson@webrtc.org    kRtcpXrDlrrReportBlock = 0x80000
110b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org};
111b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
112b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgenum KeyFrameRequestMethod
113b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{
114b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    kKeyFrameReqFirRtp    = 1,
115b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    kKeyFrameReqPliRtcp   = 2,
116b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    kKeyFrameReqFirRtcp   = 3
117b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org};
118b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
119b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgenum RtpRtcpPacketType
120b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{
121b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    kPacketRtp        = 0,
122b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    kPacketKeepAlive = 1
123b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org};
124b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
125b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgenum NACKMethod
126b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{
127b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    kNackOff      = 0,
128b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    kNackRtcp     = 2
129b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org};
130b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
131b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgenum RetransmissionMode {
132b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  kRetransmitOff          = 0x0,
133b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  kRetransmitFECPackets   = 0x1,
134b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  kRetransmitBaseLayer    = 0x2,
135b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  kRetransmitHigherLayers = 0x4,
136b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  kRetransmitAllPackets   = 0xFF
137b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org};
138b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
139946d2407699745b512dc969150e01b1c034db0bcmikhal@webrtc.orgenum RtxMode {
14047f0c4192df67999055b47f6a5d5314ce6a4ac4bstefan@webrtc.org  kRtxOff                 = 0x0,
14147f0c4192df67999055b47f6a5d5314ce6a4ac4bstefan@webrtc.org  kRtxRetransmitted       = 0x1,  // Only send retransmissions over RTX.
14247f0c4192df67999055b47f6a5d5314ce6a4ac4bstefan@webrtc.org  kRtxRedundantPayloads   = 0x2   // Preventively send redundant payloads
14347f0c4192df67999055b47f6a5d5314ce6a4ac4bstefan@webrtc.org                                  // instead of padding.
144946d2407699745b512dc969150e01b1c034db0bcmikhal@webrtc.org};
145946d2407699745b512dc969150e01b1c034db0bcmikhal@webrtc.org
1467bc7e02c4aadc8acb8fdc35a555a0cb33e566b16mflodman@webrtc.orgconst int kRtxHeaderSize = 2;
1477bc7e02c4aadc8acb8fdc35a555a0cb33e566b16mflodman@webrtc.org
148b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgstruct RTCPSenderInfo
149b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{
150b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org    uint32_t NTPseconds;
151b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org    uint32_t NTPfraction;
152b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org    uint32_t RTPtimeStamp;
153b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org    uint32_t sendPacketCount;
154b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org    uint32_t sendOctetCount;
155b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org};
156b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
1577485573a0f9547055f66584680e10909c6906017stefan@webrtc.orgstruct RTCPReportBlock {
1587485573a0f9547055f66584680e10909c6906017stefan@webrtc.org  RTCPReportBlock()
1597485573a0f9547055f66584680e10909c6906017stefan@webrtc.org      : remoteSSRC(0), sourceSSRC(0), fractionLost(0), cumulativeLost(0),
1607485573a0f9547055f66584680e10909c6906017stefan@webrtc.org        extendedHighSeqNum(0), jitter(0), lastSR(0),
1617485573a0f9547055f66584680e10909c6906017stefan@webrtc.org        delaySinceLastSR(0) {}
1627485573a0f9547055f66584680e10909c6906017stefan@webrtc.org
1637485573a0f9547055f66584680e10909c6906017stefan@webrtc.org  RTCPReportBlock(uint32_t remote_ssrc,
1647485573a0f9547055f66584680e10909c6906017stefan@webrtc.org                  uint32_t source_ssrc,
1657485573a0f9547055f66584680e10909c6906017stefan@webrtc.org                  uint8_t fraction_lost,
1667485573a0f9547055f66584680e10909c6906017stefan@webrtc.org                  uint32_t cumulative_lost,
1677485573a0f9547055f66584680e10909c6906017stefan@webrtc.org                  uint32_t extended_high_sequence_number,
1687485573a0f9547055f66584680e10909c6906017stefan@webrtc.org                  uint32_t jitter,
1697485573a0f9547055f66584680e10909c6906017stefan@webrtc.org                  uint32_t last_sender_report,
1707485573a0f9547055f66584680e10909c6906017stefan@webrtc.org                  uint32_t delay_since_last_sender_report)
1717485573a0f9547055f66584680e10909c6906017stefan@webrtc.org      : remoteSSRC(remote_ssrc),
1727485573a0f9547055f66584680e10909c6906017stefan@webrtc.org        sourceSSRC(source_ssrc),
1737485573a0f9547055f66584680e10909c6906017stefan@webrtc.org        fractionLost(fraction_lost),
1747485573a0f9547055f66584680e10909c6906017stefan@webrtc.org        cumulativeLost(cumulative_lost),
1757485573a0f9547055f66584680e10909c6906017stefan@webrtc.org        extendedHighSeqNum(extended_high_sequence_number),
1767485573a0f9547055f66584680e10909c6906017stefan@webrtc.org        jitter(jitter),
1777485573a0f9547055f66584680e10909c6906017stefan@webrtc.org        lastSR(last_sender_report),
1787485573a0f9547055f66584680e10909c6906017stefan@webrtc.org        delaySinceLastSR(delay_since_last_sender_report) {}
1797485573a0f9547055f66584680e10909c6906017stefan@webrtc.org
180b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  // Fields as described by RFC 3550 6.4.2.
1817485573a0f9547055f66584680e10909c6906017stefan@webrtc.org  uint32_t remoteSSRC;  // SSRC of sender of this report.
1827485573a0f9547055f66584680e10909c6906017stefan@webrtc.org  uint32_t sourceSSRC;  // SSRC of the RTP packet sender.
1837485573a0f9547055f66584680e10909c6906017stefan@webrtc.org  uint8_t fractionLost;
1847485573a0f9547055f66584680e10909c6906017stefan@webrtc.org  uint32_t cumulativeLost;  // 24 bits valid.
1857485573a0f9547055f66584680e10909c6906017stefan@webrtc.org  uint32_t extendedHighSeqNum;
1867485573a0f9547055f66584680e10909c6906017stefan@webrtc.org  uint32_t jitter;
1877485573a0f9547055f66584680e10909c6906017stefan@webrtc.org  uint32_t lastSR;
1887485573a0f9547055f66584680e10909c6906017stefan@webrtc.org  uint32_t delaySinceLastSR;
189b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org};
190b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
191d6da239905c84110a7c90789df70238afd0f64b6asapersson@webrtc.orgstruct RtcpReceiveTimeInfo {
192d6da239905c84110a7c90789df70238afd0f64b6asapersson@webrtc.org  // Fields as described by RFC 3611 4.5.
193d6da239905c84110a7c90789df70238afd0f64b6asapersson@webrtc.org  uint32_t sourceSSRC;
194d6da239905c84110a7c90789df70238afd0f64b6asapersson@webrtc.org  uint32_t lastRR;
195d6da239905c84110a7c90789df70238afd0f64b6asapersson@webrtc.org  uint32_t delaySinceLastRR;
196d6da239905c84110a7c90789df70238afd0f64b6asapersson@webrtc.org};
197d6da239905c84110a7c90789df70238afd0f64b6asapersson@webrtc.org
1987485573a0f9547055f66584680e10909c6906017stefan@webrtc.orgtypedef std::list<RTCPReportBlock> ReportBlockList;
1997485573a0f9547055f66584680e10909c6906017stefan@webrtc.org
2002fd91bd35094b909b4b3cce636454426fc893ac2pbos@webrtc.orgstruct RtpState {
2012fd91bd35094b909b4b3cce636454426fc893ac2pbos@webrtc.org  RtpState()
2022fd91bd35094b909b4b3cce636454426fc893ac2pbos@webrtc.org      : sequence_number(0),
2032fd91bd35094b909b4b3cce636454426fc893ac2pbos@webrtc.org        start_timestamp(0),
2042fd91bd35094b909b4b3cce636454426fc893ac2pbos@webrtc.org        timestamp(0),
2052fd91bd35094b909b4b3cce636454426fc893ac2pbos@webrtc.org        capture_time_ms(-1),
206f147639fcf3f45fdf764480834a483eb88b1cf2astefan@webrtc.org        last_timestamp_time_ms(-1),
207f147639fcf3f45fdf764480834a483eb88b1cf2astefan@webrtc.org        media_has_been_sent(false) {}
2082fd91bd35094b909b4b3cce636454426fc893ac2pbos@webrtc.org  uint16_t sequence_number;
2092fd91bd35094b909b4b3cce636454426fc893ac2pbos@webrtc.org  uint32_t start_timestamp;
2102fd91bd35094b909b4b3cce636454426fc893ac2pbos@webrtc.org  uint32_t timestamp;
2112fd91bd35094b909b4b3cce636454426fc893ac2pbos@webrtc.org  int64_t capture_time_ms;
2122fd91bd35094b909b4b3cce636454426fc893ac2pbos@webrtc.org  int64_t last_timestamp_time_ms;
213f147639fcf3f45fdf764480834a483eb88b1cf2astefan@webrtc.org  bool media_has_been_sent;
2142fd91bd35094b909b4b3cce636454426fc893ac2pbos@webrtc.org};
2152fd91bd35094b909b4b3cce636454426fc893ac2pbos@webrtc.org
216b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass RtpData
217b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{
218b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgpublic:
219aa445e7b214e654e680158e78cba82376198ee4fstefan@webrtc.org    virtual ~RtpData() {}
220aa445e7b214e654e680158e78cba82376198ee4fstefan@webrtc.org
221b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org    virtual int32_t OnReceivedPayloadData(
222b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org        const uint8_t* payloadData,
223b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org        const uint16_t payloadSize,
224b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        const WebRtcRTPHeader* rtpHeader) = 0;
2257fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org
2267fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org    virtual bool OnRecoveredPacket(const uint8_t* packet,
2277fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org                                   int packet_length) = 0;
228b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org};
229b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
230b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass RtcpFeedback
231b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{
232b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgpublic:
233b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org    virtual void OnApplicationDataReceived(const int32_t /*id*/,
234b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org                                           const uint8_t /*subType*/,
235b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org                                           const uint32_t /*name*/,
236b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org                                           const uint16_t /*length*/,
237b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org                                           const uint8_t* /*data*/)  {};
238b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
239b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    virtual void OnXRVoIPMetricReceived(
240b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org        const int32_t /*id*/,
241b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        const RTCPVoIPMetric* /*metric*/)  {};
242b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
243b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org    virtual void OnReceiveReportReceived(const int32_t id,
244b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org                                         const uint32_t senderSSRC)  {};
245b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
246b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgprotected:
247b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    virtual ~RtcpFeedback() {}
248b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org};
249b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
250b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass RtpFeedback
251b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{
252b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgpublic:
253aa445e7b214e654e680158e78cba82376198ee4fstefan@webrtc.org    virtual ~RtpFeedback() {}
254aa445e7b214e654e680158e78cba82376198ee4fstefan@webrtc.org
255b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    // Receiving payload change or SSRC change. (return success!)
256b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    /*
257b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    *   channels    - number of channels in codec (1 = mono, 2 = stereo)
258b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    */
259b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org    virtual int32_t OnInitializeDecoder(
260b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org        const int32_t id,
261b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org        const int8_t payloadType,
262b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        const char payloadName[RTP_PAYLOAD_NAME_SIZE],
263b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        const int frequency,
264b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org        const uint8_t channels,
265b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org        const uint32_t rate) = 0;
266b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
267b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org    virtual void OnIncomingSSRCChanged( const int32_t id,
268a20e2d4c9ae860db62de6e304bfdf517c049ec3dstefan@webrtc.org                                        const uint32_t ssrc) = 0;
269b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
270b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org    virtual void OnIncomingCSRCChanged( const int32_t id,
271b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org                                        const uint32_t CSRC,
272b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                                        const bool added) = 0;
273b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
274a20e2d4c9ae860db62de6e304bfdf517c049ec3dstefan@webrtc.org    virtual void ResetStatistics(uint32_t ssrc) = 0;
275b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org};
276b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
277b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass RtpAudioFeedback {
278b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org public:
279b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
280b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org  virtual void OnPlayTelephoneEvent(const int32_t id,
281b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org                                    const uint8_t event,
282b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org                                    const uint16_t lengthMs,
283b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org                                    const uint8_t volume) = 0;
284b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org protected:
285b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  virtual ~RtpAudioFeedback() {}
286b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org};
287b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
288b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass RtcpIntraFrameObserver {
289b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org public:
290b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  virtual void OnReceivedIntraFrameRequest(uint32_t ssrc) = 0;
291b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
292b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  virtual void OnReceivedSLI(uint32_t ssrc,
293b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                             uint8_t picture_id) = 0;
294b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
295b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  virtual void OnReceivedRPSI(uint32_t ssrc,
296b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                              uint64_t picture_id) = 0;
297b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
298b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  virtual void OnLocalSsrcChanged(uint32_t old_ssrc, uint32_t new_ssrc) = 0;
299b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
300b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  virtual ~RtcpIntraFrameObserver() {}
301b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org};
302b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
303b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass RtcpBandwidthObserver {
304b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org public:
305b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  // REMB or TMMBR
306b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  virtual void OnReceivedEstimatedBitrate(const uint32_t bitrate) = 0;
307b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
308b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  virtual void OnReceivedRtcpReceiverReport(
3097485573a0f9547055f66584680e10909c6906017stefan@webrtc.org      const ReportBlockList& report_blocks,
3107485573a0f9547055f66584680e10909c6906017stefan@webrtc.org      uint16_t rtt,
3117485573a0f9547055f66584680e10909c6906017stefan@webrtc.org      int64_t now_ms) = 0;
312b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
313b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  virtual ~RtcpBandwidthObserver() {}
314b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org};
315b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
316c4af4cf7814bb773d838aefa476c196e5f1bc360asapersson@webrtc.orgclass RtcpRttStats {
317e296783ae1fd7fa8a52582c8bb63a570e625532amflodman@webrtc.org public:
318e296783ae1fd7fa8a52582c8bb63a570e625532amflodman@webrtc.org  virtual void OnRttUpdate(uint32_t rtt) = 0;
319e296783ae1fd7fa8a52582c8bb63a570e625532amflodman@webrtc.org
320c4af4cf7814bb773d838aefa476c196e5f1bc360asapersson@webrtc.org  virtual uint32_t LastProcessedRtt() const = 0;
321c4af4cf7814bb773d838aefa476c196e5f1bc360asapersson@webrtc.org
322c4af4cf7814bb773d838aefa476c196e5f1bc360asapersson@webrtc.org  virtual ~RtcpRttStats() {};
323e296783ae1fd7fa8a52582c8bb63a570e625532amflodman@webrtc.org};
324e296783ae1fd7fa8a52582c8bb63a570e625532amflodman@webrtc.org
325cd29867e6b49df11e565dcb1d64dbe92751b509cphoglund@webrtc.org// Null object version of RtpFeedback.
326cd29867e6b49df11e565dcb1d64dbe92751b509cphoglund@webrtc.orgclass NullRtpFeedback : public RtpFeedback {
327cd29867e6b49df11e565dcb1d64dbe92751b509cphoglund@webrtc.org public:
328cd29867e6b49df11e565dcb1d64dbe92751b509cphoglund@webrtc.org  virtual ~NullRtpFeedback() {}
329cd29867e6b49df11e565dcb1d64dbe92751b509cphoglund@webrtc.org
330b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org  virtual int32_t OnInitializeDecoder(
331b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org      const int32_t id,
332b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org      const int8_t payloadType,
333cd29867e6b49df11e565dcb1d64dbe92751b509cphoglund@webrtc.org      const char payloadName[RTP_PAYLOAD_NAME_SIZE],
334cd29867e6b49df11e565dcb1d64dbe92751b509cphoglund@webrtc.org      const int frequency,
335b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org      const uint8_t channels,
3369d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org      const uint32_t rate) OVERRIDE {
337db74c61ddfa26c23d3e392b241c983010e10b1c5stefan@webrtc.org    return 0;
338db74c61ddfa26c23d3e392b241c983010e10b1c5stefan@webrtc.org  }
339cd29867e6b49df11e565dcb1d64dbe92751b509cphoglund@webrtc.org
3407fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org  virtual void OnIncomingSSRCChanged(const int32_t id,
341a20e2d4c9ae860db62de6e304bfdf517c049ec3dstefan@webrtc.org                                     const uint32_t ssrc) OVERRIDE {}
342cd29867e6b49df11e565dcb1d64dbe92751b509cphoglund@webrtc.org
343db74c61ddfa26c23d3e392b241c983010e10b1c5stefan@webrtc.org  virtual void OnIncomingCSRCChanged(const int32_t id,
344db74c61ddfa26c23d3e392b241c983010e10b1c5stefan@webrtc.org                                     const uint32_t CSRC,
345db74c61ddfa26c23d3e392b241c983010e10b1c5stefan@webrtc.org                                     const bool added) OVERRIDE {}
3467fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org
347db74c61ddfa26c23d3e392b241c983010e10b1c5stefan@webrtc.org  virtual void ResetStatistics(uint32_t ssrc) OVERRIDE {}
348cd29867e6b49df11e565dcb1d64dbe92751b509cphoglund@webrtc.org};
349cd29867e6b49df11e565dcb1d64dbe92751b509cphoglund@webrtc.org
350cd29867e6b49df11e565dcb1d64dbe92751b509cphoglund@webrtc.org// Null object version of RtpData.
351cd29867e6b49df11e565dcb1d64dbe92751b509cphoglund@webrtc.orgclass NullRtpData : public RtpData {
352cd29867e6b49df11e565dcb1d64dbe92751b509cphoglund@webrtc.org public:
353cd29867e6b49df11e565dcb1d64dbe92751b509cphoglund@webrtc.org  virtual ~NullRtpData() {}
3547fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org
355b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org  virtual int32_t OnReceivedPayloadData(
356b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org      const uint8_t* payloadData,
357b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org      const uint16_t payloadSize,
3589d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org      const WebRtcRTPHeader* rtpHeader) OVERRIDE {
3597fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org    return 0;
3607fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org  }
3617fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org
3627fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org  virtual bool OnRecoveredPacket(const uint8_t* packet,
3636dc729b3239305d0f8edd2ecf6bef2e2f6bd661astefan@webrtc.org                                 int packet_length) OVERRIDE {
3647fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org    return true;
3657fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org  }
366cd29867e6b49df11e565dcb1d64dbe92751b509cphoglund@webrtc.org};
367cd29867e6b49df11e565dcb1d64dbe92751b509cphoglund@webrtc.org
368cd29867e6b49df11e565dcb1d64dbe92751b509cphoglund@webrtc.org// Null object version of RtpAudioFeedback.
369cd29867e6b49df11e565dcb1d64dbe92751b509cphoglund@webrtc.orgclass NullRtpAudioFeedback : public RtpAudioFeedback {
370cd29867e6b49df11e565dcb1d64dbe92751b509cphoglund@webrtc.org public:
371cd29867e6b49df11e565dcb1d64dbe92751b509cphoglund@webrtc.org  virtual ~NullRtpAudioFeedback() {}
372cd29867e6b49df11e565dcb1d64dbe92751b509cphoglund@webrtc.org
373b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org  virtual void OnPlayTelephoneEvent(const int32_t id,
374b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org                                    const uint8_t event,
375b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org                                    const uint16_t lengthMs,
3769d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org                                    const uint8_t volume) OVERRIDE {}
377cd29867e6b49df11e565dcb1d64dbe92751b509cphoglund@webrtc.org};
378cd29867e6b49df11e565dcb1d64dbe92751b509cphoglund@webrtc.org
3793b89e10f31160da35b408fd00cb8f89d2b08862dpbos@webrtc.org}  // namespace webrtc
380b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif // WEBRTC_MODULES_RTP_RTCP_INTERFACE_RTP_RTCP_DEFINES_H_
381