Refactor RTCP sender

The main purpose of this CL is to clean up RTCPSender::PrepareRTCP, but
it has quite a few ramifications. Notable changes:

* Removed the rtcpPacketTypeFlags bit vector and don't assume
  RTCPPacketType values have a single unique bit set. This will allow
  making this an enum class once rtcp_receiver has been overhauled.

* Flags are now stored in a map that is a member of the class. This
  meant we could remove some bool flags (eg send_remb_) which was
  previously masked into rtcpPacketTypeFlags and then masked out again
  when testing if a remb packet should be sent.

* Make all build methods, eg. BuildREMB(), have the same signature.
  An RtcpContext struct was introduced for this purpose. This allowed
  the use of a map from RTCPPacketType to method pointer. Instead of
  18 consecutive if-statements, there is now a single loop.
  The context class also allowed some simplifications in the build
  methods themselves.

* A few minor simplifications and cleanups.

The next step is to gradually replace the builder methods with the
builders from the new RtcpPacket classes.

BUG=2450
R=asapersson@webrtc.org, pbos@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/48329004

Cr-Commit-Position: refs/heads/master@{#9166}
This commit is contained in:
Erik Språng
2015-05-11 10:17:43 +02:00
parent 1f629232d5
commit 242e22b055
15 changed files with 1508 additions and 1681 deletions

View File

@ -49,9 +49,9 @@ RTCPUtility::RTCPParserV2::RTCPParserV2(const uint8_t* rtcpData,
_validPacket(false),
_ptrRTCPData(rtcpData),
_ptrRTCPBlockEnd(NULL),
_state(State_TopLevel),
_state(ParseState::State_TopLevel),
_numberOfBlocks(0),
_packetType(kRtcpNotValidCode) {
_packetType(RTCPPacketTypes::kInvalid) {
Validate();
}
@ -88,58 +88,58 @@ RTCPUtility::RTCPPacketTypes
RTCPUtility::RTCPParserV2::Iterate()
{
// Reset packet type
_packetType = kRtcpNotValidCode;
_packetType = RTCPPacketTypes::kInvalid;
if (IsValid())
{
switch (_state)
{
case State_TopLevel:
case ParseState::State_TopLevel:
IterateTopLevel();
break;
case State_ReportBlockItem:
case ParseState::State_ReportBlockItem:
IterateReportBlockItem();
break;
case State_SDESChunk:
case ParseState::State_SDESChunk:
IterateSDESChunk();
break;
case State_BYEItem:
case ParseState::State_BYEItem:
IterateBYEItem();
break;
case State_ExtendedJitterItem:
case ParseState::State_ExtendedJitterItem:
IterateExtendedJitterItem();
break;
case State_RTPFB_NACKItem:
case ParseState::State_RTPFB_NACKItem:
IterateNACKItem();
break;
case State_RTPFB_TMMBRItem:
case ParseState::State_RTPFB_TMMBRItem:
IterateTMMBRItem();
break;
case State_RTPFB_TMMBNItem:
case ParseState::State_RTPFB_TMMBNItem:
IterateTMMBNItem();
break;
case State_PSFB_SLIItem:
case ParseState::State_PSFB_SLIItem:
IterateSLIItem();
break;
case State_PSFB_RPSIItem:
case ParseState::State_PSFB_RPSIItem:
IterateRPSIItem();
break;
case State_PSFB_FIRItem:
case ParseState::State_PSFB_FIRItem:
IterateFIRItem();
break;
case State_PSFB_AppItem:
case ParseState::State_PSFB_AppItem:
IteratePsfbAppItem();
break;
case State_PSFB_REMBItem:
case ParseState::State_PSFB_REMBItem:
IteratePsfbREMBItem();
break;
case State_XRItem:
case ParseState::State_XRItem:
IterateXrItem();
break;
case State_XR_DLLRItem:
case ParseState::State_XR_DLLRItem:
IterateXrDlrrItem();
break;
case State_AppItem:
case ParseState::State_AppItem:
IterateAppItem();
break;
default:
@ -515,7 +515,7 @@ RTCPUtility::RTCPParserV2::ParseRR()
_ptrRTCPData += 4; // Skip header
_packetType = kRtcpRrCode;
_packetType = RTCPPacketTypes::kRr;
_packet.RR.SenderSSRC = *_ptrRTCPData++ << 24;
_packet.RR.SenderSSRC += *_ptrRTCPData++ << 16;
@ -525,7 +525,7 @@ RTCPUtility::RTCPParserV2::ParseRR()
_packet.RR.NumberOfReportBlocks = _numberOfBlocks;
// State transition
_state = State_ReportBlockItem;
_state = ParseState::State_ReportBlockItem;
return true;
}
@ -543,7 +543,7 @@ RTCPUtility::RTCPParserV2::ParseSR()
_ptrRTCPData += 4; // Skip header
_packetType = kRtcpSrCode;
_packetType = RTCPPacketTypes::kSr;
_packet.SR.SenderSSRC = *_ptrRTCPData++ << 24;
_packet.SR.SenderSSRC += *_ptrRTCPData++ << 16;
@ -580,11 +580,11 @@ RTCPUtility::RTCPParserV2::ParseSR()
// State transition
if(_numberOfBlocks != 0)
{
_state = State_ReportBlockItem;
_state = ParseState::State_ReportBlockItem;
}else
{
// don't go to state report block item if 0 report blocks
_state = State_TopLevel;
_state = ParseState::State_TopLevel;
EndCurrentBlock();
}
return true;
@ -597,7 +597,7 @@ RTCPUtility::RTCPParserV2::ParseReportBlockItem()
if (length < 24 || _numberOfBlocks <= 0)
{
_state = State_TopLevel;
_state = ParseState::State_TopLevel;
EndCurrentBlock();
return false;
@ -634,7 +634,7 @@ RTCPUtility::RTCPParserV2::ParseReportBlockItem()
_packet.ReportBlockItem.DelayLastSR += *_ptrRTCPData++;
_numberOfBlocks--;
_packetType = kRtcpReportBlockItemCode;
_packetType = RTCPPacketTypes::kReportBlockItem;
return true;
}
@ -665,10 +665,10 @@ RTCPUtility::RTCPParserV2::ParseIJ()
_ptrRTCPData += 4; // Skip header
_packetType = kRtcpExtendedIjCode;
_packetType = RTCPPacketTypes::kExtendedIj;
// State transition
_state = State_ExtendedJitterItem;
_state = ParseState::State_ExtendedJitterItem;
return true;
}
@ -679,7 +679,7 @@ RTCPUtility::RTCPParserV2::ParseIJItem()
if (length < 4 || _numberOfBlocks <= 0)
{
_state = State_TopLevel;
_state = ParseState::State_TopLevel;
EndCurrentBlock();
return false;
}
@ -690,7 +690,7 @@ RTCPUtility::RTCPParserV2::ParseIJItem()
_packet.ExtendedJitterReportItem.Jitter += *_ptrRTCPData++;
_numberOfBlocks--;
_packetType = kRtcpExtendedIjItemCode;
_packetType = RTCPPacketTypes::kExtendedIjItem;
return true;
}
@ -701,15 +701,15 @@ RTCPUtility::RTCPParserV2::ParseSDES()
if (length < 8)
{
_state = State_TopLevel;
_state = ParseState::State_TopLevel;
EndCurrentBlock();
return false;
}
_ptrRTCPData += 4; // Skip header
_state = State_SDESChunk;
_packetType = kRtcpSdesCode;
_state = ParseState::State_SDESChunk;
_packetType = RTCPPacketTypes::kSdes;
return true;
}
@ -718,7 +718,7 @@ RTCPUtility::RTCPParserV2::ParseSDESChunk()
{
if(_numberOfBlocks <= 0)
{
_state = State_TopLevel;
_state = ParseState::State_TopLevel;
EndCurrentBlock();
return false;
@ -731,7 +731,7 @@ RTCPUtility::RTCPParserV2::ParseSDESChunk()
const ptrdiff_t dataLen = _ptrRTCPBlockEnd - _ptrRTCPData;
if (dataLen < 4)
{
_state = State_TopLevel;
_state = ParseState::State_TopLevel;
EndCurrentBlock();
return false;
@ -749,7 +749,7 @@ RTCPUtility::RTCPParserV2::ParseSDESChunk()
return true;
}
}
_state = State_TopLevel;
_state = ParseState::State_TopLevel;
EndCurrentBlock();
return false;
@ -790,7 +790,7 @@ RTCPUtility::RTCPParserV2::ParseSDESItem()
// Sanity
if ((_ptrRTCPData + len) >= _ptrRTCPBlockEnd)
{
_state = State_TopLevel;
_state = ParseState::State_TopLevel;
EndCurrentBlock();
return false;
@ -802,7 +802,7 @@ RTCPUtility::RTCPParserV2::ParseSDESItem()
if ((c < ' ') || (c > '{') || (c == '%') || (c == '\\'))
{
// Illegal char
_state = State_TopLevel;
_state = ParseState::State_TopLevel;
EndCurrentBlock();
return false;
@ -811,7 +811,7 @@ RTCPUtility::RTCPParserV2::ParseSDESItem()
}
// Make sure we are null terminated.
_packet.CName.CName[i] = 0;
_packetType = kRtcpSdesChunkCode;
_packetType = RTCPPacketTypes::kSdesChunk;
foundCName = true;
}
@ -821,7 +821,7 @@ RTCPUtility::RTCPParserV2::ParseSDESItem()
}
// No end tag found!
_state = State_TopLevel;
_state = ParseState::State_TopLevel;
EndCurrentBlock();
return false;
@ -832,7 +832,7 @@ RTCPUtility::RTCPParserV2::ParseBYE()
{
_ptrRTCPData += 4; // Skip header
_state = State_BYEItem;
_state = ParseState::State_BYEItem;
return ParseBYEItem();
}
@ -843,13 +843,13 @@ RTCPUtility::RTCPParserV2::ParseBYEItem()
const ptrdiff_t length = _ptrRTCPBlockEnd - _ptrRTCPData;
if (length < 4 || _numberOfBlocks == 0)
{
_state = State_TopLevel;
_state = ParseState::State_TopLevel;
EndCurrentBlock();
return false;
}
_packetType = kRtcpByeCode;
_packetType = RTCPPacketTypes::kBye;
_packet.BYE.SenderSSRC = *_ptrRTCPData++ << 24;
_packet.BYE.SenderSSRC += *_ptrRTCPData++ << 16;
@ -894,8 +894,8 @@ bool RTCPUtility::RTCPParserV2::ParseXr()
_packet.XR.OriginatorSSRC += *_ptrRTCPData++ << 8;
_packet.XR.OriginatorSSRC += *_ptrRTCPData++;
_packetType = kRtcpXrHeaderCode;
_state = State_XRItem;
_packetType = RTCPPacketTypes::kXrHeader;
_state = ParseState::State_XRItem;
return true;
}
@ -915,7 +915,7 @@ bool RTCPUtility::RTCPParserV2::ParseXrItem() {
const int kBlockHeaderLengthInBytes = 4;
const ptrdiff_t length = _ptrRTCPBlockEnd - _ptrRTCPData;
if (length < kBlockHeaderLengthInBytes) {
_state = State_TopLevel;
_state = ParseState::State_TopLevel;
EndCurrentBlock();
return false;
}
@ -956,7 +956,7 @@ bool RTCPUtility::RTCPParserV2::ParseXrReceiverReferenceTimeItem(
const ptrdiff_t length = _ptrRTCPBlockEnd - _ptrRTCPData;
if (block_length_4bytes != kBlockLengthIn4Bytes ||
length < kBlockLengthInBytes) {
_state = State_TopLevel;
_state = ParseState::State_TopLevel;
EndCurrentBlock();
return false;
}
@ -971,8 +971,8 @@ bool RTCPUtility::RTCPParserV2::ParseXrReceiverReferenceTimeItem(
_packet.XRReceiverReferenceTimeItem.NTPLeastSignificant+= *_ptrRTCPData++<<8;
_packet.XRReceiverReferenceTimeItem.NTPLeastSignificant+= *_ptrRTCPData++;
_packetType = kRtcpXrReceiverReferenceTimeCode;
_state = State_XRItem;
_packetType = RTCPPacketTypes::kXrReceiverReferenceTime;
_state = ParseState::State_XRItem;
return true;
}
@ -997,25 +997,25 @@ bool RTCPUtility::RTCPParserV2::ParseXrDlrr(int block_length_4bytes) {
const int kSubBlockLengthIn4Bytes = 3;
if (block_length_4bytes < 0 ||
(block_length_4bytes % kSubBlockLengthIn4Bytes) != 0) {
_state = State_TopLevel;
_state = ParseState::State_TopLevel;
EndCurrentBlock();
return false;
}
_packetType = kRtcpXrDlrrReportBlockCode;
_state = State_XR_DLLRItem;
_packetType = RTCPPacketTypes::kXrDlrrReportBlock;
_state = ParseState::State_XR_DLLRItem;
_numberOfBlocks = block_length_4bytes / kSubBlockLengthIn4Bytes;
return true;
}
bool RTCPUtility::RTCPParserV2::ParseXrDlrrItem() {
if (_numberOfBlocks == 0) {
_state = State_XRItem;
_state = ParseState::State_XRItem;
return false;
}
const int kSubBlockLengthInBytes = 12;
const ptrdiff_t length = _ptrRTCPBlockEnd - _ptrRTCPData;
if (length < kSubBlockLengthInBytes) {
_state = State_TopLevel;
_state = ParseState::State_TopLevel;
EndCurrentBlock();
return false;
}
@ -1035,9 +1035,9 @@ bool RTCPUtility::RTCPParserV2::ParseXrDlrrItem() {
_packet.XRDLRRReportBlockItem.DelayLastRR += *_ptrRTCPData++ << 8;
_packet.XRDLRRReportBlockItem.DelayLastRR += *_ptrRTCPData++;
_packetType = kRtcpXrDlrrReportBlockItemCode;
_packetType = RTCPPacketTypes::kXrDlrrReportBlockItem;
--_numberOfBlocks;
_state = State_XR_DLLRItem;
_state = ParseState::State_XR_DLLRItem;
return true;
}
/* VoIP Metrics Report Block.
@ -1070,7 +1070,7 @@ bool RTCPUtility::RTCPParserV2::ParseXrVoipMetricItem(int block_length_4bytes) {
const ptrdiff_t length = _ptrRTCPBlockEnd - _ptrRTCPData;
if (block_length_4bytes != kBlockLengthIn4Bytes ||
length < kBlockLengthInBytes) {
_state = State_TopLevel;
_state = ParseState::State_TopLevel;
EndCurrentBlock();
return false;
}
@ -1117,8 +1117,8 @@ bool RTCPUtility::RTCPParserV2::ParseXrVoipMetricItem(int block_length_4bytes) {
_packet.XRVOIPMetricItem.JBabsMax = *_ptrRTCPData++ << 8;
_packet.XRVOIPMetricItem.JBabsMax += *_ptrRTCPData++;
_packetType = kRtcpXrVoipMetricCode;
_state = State_XRItem;
_packetType = RTCPPacketTypes::kXrVoipMetric;
_state = ParseState::State_XRItem;
return true;
}
@ -1127,13 +1127,13 @@ bool RTCPUtility::RTCPParserV2::ParseXrUnsupportedBlockType(
const int32_t kBlockLengthInBytes = block_length_4bytes * 4;
const ptrdiff_t length = _ptrRTCPBlockEnd - _ptrRTCPData;
if (length < kBlockLengthInBytes) {
_state = State_TopLevel;
_state = ParseState::State_TopLevel;
EndCurrentBlock();
return false;
}
// Skip block.
_ptrRTCPData += kBlockLengthInBytes;
_state = State_XRItem;
_state = ParseState::State_XRItem;
return false;
}
@ -1171,11 +1171,11 @@ RTCPUtility::RTCPParserV2::ParseFBCommon(const RTCPCommonHeader& header)
case 1:
{
// NACK
_packetType = kRtcpRtpfbNackCode;
_packetType = RTCPPacketTypes::kRtpfbNack;
_packet.NACK.SenderSSRC = senderSSRC;
_packet.NACK.MediaSSRC = mediaSSRC;
_state = State_RTPFB_NACKItem;
_state = ParseState::State_RTPFB_NACKItem;
return true;
}
@ -1188,22 +1188,22 @@ RTCPUtility::RTCPParserV2::ParseFBCommon(const RTCPCommonHeader& header)
case 3:
{
// TMMBR
_packetType = kRtcpRtpfbTmmbrCode;
_packetType = RTCPPacketTypes::kRtpfbTmmbr;
_packet.TMMBR.SenderSSRC = senderSSRC;
_packet.TMMBR.MediaSSRC = mediaSSRC;
_state = State_RTPFB_TMMBRItem;
_state = ParseState::State_RTPFB_TMMBRItem;
return true;
}
case 4:
{
// TMMBN
_packetType = kRtcpRtpfbTmmbnCode;
_packetType = RTCPPacketTypes::kRtpfbTmmbn;
_packet.TMMBN.SenderSSRC = senderSSRC;
_packet.TMMBN.MediaSSRC = mediaSSRC;
_state = State_RTPFB_TMMBNItem;
_state = ParseState::State_RTPFB_TMMBNItem;
return true;
}
@ -1212,7 +1212,7 @@ RTCPUtility::RTCPParserV2::ParseFBCommon(const RTCPCommonHeader& header)
// RTCP-SR-REQ Rapid Synchronisation of RTP Flows
// draft-perkins-avt-rapid-rtp-sync-03.txt
// trigger a new RTCP SR
_packetType = kRtcpRtpfbSrReqCode;
_packetType = RTCPPacketTypes::kRtpfbSrReq;
// Note: No state transition, SR REQ is empty!
return true;
@ -1230,7 +1230,7 @@ RTCPUtility::RTCPParserV2::ParseFBCommon(const RTCPCommonHeader& header)
{
case 1:
// PLI
_packetType = kRtcpPsfbPliCode;
_packetType = RTCPPacketTypes::kPsfbPli;
_packet.PLI.SenderSSRC = senderSSRC;
_packet.PLI.MediaSSRC = mediaSSRC;
@ -1238,34 +1238,34 @@ RTCPUtility::RTCPParserV2::ParseFBCommon(const RTCPCommonHeader& header)
return true;
case 2:
// SLI
_packetType = kRtcpPsfbSliCode;
_packetType = RTCPPacketTypes::kPsfbSli;
_packet.SLI.SenderSSRC = senderSSRC;
_packet.SLI.MediaSSRC = mediaSSRC;
_state = State_PSFB_SLIItem;
_state = ParseState::State_PSFB_SLIItem;
return true;
case 3:
_packetType = kRtcpPsfbRpsiCode;
_packetType = RTCPPacketTypes::kPsfbRpsi;
_packet.RPSI.SenderSSRC = senderSSRC;
_packet.RPSI.MediaSSRC = mediaSSRC;
_state = State_PSFB_RPSIItem;
_state = ParseState::State_PSFB_RPSIItem;
return true;
case 4:
// FIR
_packetType = kRtcpPsfbFirCode;
_packetType = RTCPPacketTypes::kPsfbFir;
_packet.FIR.SenderSSRC = senderSSRC;
_packet.FIR.MediaSSRC = mediaSSRC;
_state = State_PSFB_FIRItem;
_state = ParseState::State_PSFB_FIRItem;
return true;
case 15:
_packetType = kRtcpPsfbAppCode;
_packetType = RTCPPacketTypes::kPsfbApp;
_packet.PSFBAPP.SenderSSRC = senderSSRC;
_packet.PSFBAPP.MediaSSRC = mediaSSRC;
_state = State_PSFB_AppItem;
_state = ParseState::State_PSFB_AppItem;
return true;
default:
break;
@ -1298,19 +1298,19 @@ bool RTCPUtility::RTCPParserV2::ParseRPSIItem() {
const ptrdiff_t length = _ptrRTCPBlockEnd - _ptrRTCPData;
if (length < 4) {
_state = State_TopLevel;
_state = ParseState::State_TopLevel;
EndCurrentBlock();
return false;
}
if (length > 2 + RTCP_RPSI_DATA_SIZE) {
_state = State_TopLevel;
_state = ParseState::State_TopLevel;
EndCurrentBlock();
return false;
}
_packetType = kRtcpPsfbRpsiCode;
_packetType = RTCPPacketTypes::kPsfbRpsi;
uint8_t padding_bits = *_ptrRTCPData++;
_packet.RPSI.PayloadType = *_ptrRTCPData++;
@ -1332,13 +1332,13 @@ RTCPUtility::RTCPParserV2::ParseNACKItem()
if (length < 4)
{
_state = State_TopLevel;
_state = ParseState::State_TopLevel;
EndCurrentBlock();
return false;
}
_packetType = kRtcpRtpfbNackItemCode;
_packetType = RTCPPacketTypes::kRtpfbNackItem;
_packet.NACKItem.PacketID = *_ptrRTCPData++ << 8;
_packet.NACKItem.PacketID += *_ptrRTCPData++;
@ -1356,41 +1356,41 @@ RTCPUtility::RTCPParserV2::ParsePsfbAppItem()
if (length < 4)
{
_state = State_TopLevel;
_state = ParseState::State_TopLevel;
EndCurrentBlock();
return false;
}
if(*_ptrRTCPData++ != 'R')
{
_state = State_TopLevel;
_state = ParseState::State_TopLevel;
EndCurrentBlock();
return false;
}
if(*_ptrRTCPData++ != 'E')
{
_state = State_TopLevel;
_state = ParseState::State_TopLevel;
EndCurrentBlock();
return false;
}
if(*_ptrRTCPData++ != 'M')
{
_state = State_TopLevel;
_state = ParseState::State_TopLevel;
EndCurrentBlock();
return false;
}
if(*_ptrRTCPData++ != 'B')
{
_state = State_TopLevel;
_state = ParseState::State_TopLevel;
EndCurrentBlock();
return false;
}
_packetType = kRtcpPsfbRembCode;
_state = State_PSFB_REMBItem;
_packetType = RTCPPacketTypes::kPsfbRemb;
_state = ParseState::State_PSFB_REMBItem;
return true;
}
@ -1401,7 +1401,7 @@ RTCPUtility::RTCPParserV2::ParsePsfbREMBItem()
if (length < 4)
{
_state = State_TopLevel;
_state = ParseState::State_TopLevel;
EndCurrentBlock();
return false;
@ -1420,13 +1420,13 @@ RTCPUtility::RTCPParserV2::ParsePsfbREMBItem()
const ptrdiff_t length_ssrcs = _ptrRTCPBlockEnd - _ptrRTCPData;
if (length_ssrcs < 4 * _packet.REMBItem.NumberOfSSRCs)
{
_state = State_TopLevel;
_state = ParseState::State_TopLevel;
EndCurrentBlock();
return false;
}
_packetType = kRtcpPsfbRembItemCode;
_packetType = RTCPPacketTypes::kPsfbRembItem;
for (int i = 0; i < _packet.REMBItem.NumberOfSSRCs; i++)
{
@ -1447,13 +1447,13 @@ RTCPUtility::RTCPParserV2::ParseTMMBRItem()
if (length < 8)
{
_state = State_TopLevel;
_state = ParseState::State_TopLevel;
EndCurrentBlock();
return false;
}
_packetType = kRtcpRtpfbTmmbrItemCode;
_packetType = RTCPPacketTypes::kRtpfbTmmbrItem;
_packet.TMMBRItem.SSRC = *_ptrRTCPData++ << 24;
_packet.TMMBRItem.SSRC += *_ptrRTCPData++ << 16;
@ -1486,13 +1486,13 @@ RTCPUtility::RTCPParserV2::ParseTMMBNItem()
if (length < 8)
{
_state = State_TopLevel;
_state = ParseState::State_TopLevel;
EndCurrentBlock();
return false;
}
_packetType = kRtcpRtpfbTmmbnItemCode;
_packetType = RTCPPacketTypes::kRtpfbTmmbnItem;
_packet.TMMBNItem.SSRC = *_ptrRTCPData++ << 24;
_packet.TMMBNItem.SSRC += *_ptrRTCPData++ << 16;
@ -1532,12 +1532,12 @@ RTCPUtility::RTCPParserV2::ParseSLIItem()
if (length < 4)
{
_state = State_TopLevel;
_state = ParseState::State_TopLevel;
EndCurrentBlock();
return false;
}
_packetType = kRtcpPsfbSliItemCode;
_packetType = RTCPPacketTypes::kPsfbSliItem;
uint32_t buffer;
buffer = *_ptrRTCPData++ << 24;
@ -1561,13 +1561,13 @@ RTCPUtility::RTCPParserV2::ParseFIRItem()
if (length < 8)
{
_state = State_TopLevel;
_state = ParseState::State_TopLevel;
EndCurrentBlock();
return false;
}
_packetType = kRtcpPsfbFirItemCode;
_packetType = RTCPPacketTypes::kPsfbFirItem;
_packet.FIRItem.SSRC = *_ptrRTCPData++ << 24;
_packet.FIRItem.SSRC += *_ptrRTCPData++ << 16;
@ -1604,12 +1604,12 @@ RTCPUtility::RTCPParserV2::ParseAPP( const RTCPCommonHeader& header)
length = _ptrRTCPBlockEnd - _ptrRTCPData;
_packetType = kRtcpAppCode;
_packetType = RTCPPacketTypes::kApp;
_packet.APP.SubType = header.IC;
_packet.APP.Name = name;
_state = State_AppItem;
_state = ParseState::State_AppItem;
return true;
}
@ -1619,12 +1619,12 @@ RTCPUtility::RTCPParserV2::ParseAPPItem()
const ptrdiff_t length = _ptrRTCPBlockEnd - _ptrRTCPData;
if (length < 4)
{
_state = State_TopLevel;
_state = ParseState::State_TopLevel;
EndCurrentBlock();
return false;
}
_packetType = kRtcpAppItemCode;
_packetType = RTCPPacketTypes::kAppItem;
if(length > kRtcpAppCode_DATA_SIZE)
{