Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(346)

Unified Diff: media/cast/net/rtcp/rtcp_utility.cc

Issue 427733002: Cast: Remove unused RTCP messages (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: merged Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/cast/net/rtcp/rtcp_utility.h ('k') | media/cast/net/rtcp/test_rtcp_packet_builder.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/cast/net/rtcp/rtcp_utility.cc
diff --git a/media/cast/net/rtcp/rtcp_utility.cc b/media/cast/net/rtcp/rtcp_utility.cc
index 91fccc1968b2394b84e2372b584cfc0fca31d72a..4f99cd4174b5c05a4bf5555cb43a1b50a921c2d3 100644
--- a/media/cast/net/rtcp/rtcp_utility.cc
+++ b/media/cast/net/rtcp/rtcp_utility.cc
@@ -49,12 +49,6 @@ RtcpFieldTypes RtcpParser::Iterate() {
case kStateReportBlock:
IterateReportBlockItem();
break;
- case kStateSdes:
- IterateSdesItem();
- break;
- case kStateBye:
- IterateByeItem();
- break;
case kStateApplicationSpecificCastReceiverFrameLog:
IterateCastReceiverLogFrame();
break;
@@ -67,21 +61,9 @@ RtcpFieldTypes RtcpParser::Iterate() {
case kStateExtendedReportDelaySinceLastReceiverReport:
IterateExtendedReportDelaySinceLastReceiverReportItem();
break;
- case kStateGenericRtpFeedbackNack:
- IterateNackItem();
- break;
- case kStatePayloadSpecificRpsi:
- IterateRpsiItem();
- break;
- case kStatePayloadSpecificFir:
- IterateFirItem();
- break;
case kStatePayloadSpecificApplication:
IteratePayloadSpecificAppItem();
break;
- case kStatePayloadSpecificRemb:
- IteratePayloadSpecificRembItem();
- break;
case kStatePayloadSpecificCast:
IteratePayloadSpecificCastItem();
break;
@@ -116,20 +98,6 @@ void RtcpParser::IterateTopLevel() {
number_of_blocks_ = header.IC;
ParseRR();
return;
- case kPacketTypeSdes:
- // number of Sdes blocks
- number_of_blocks_ = header.IC;
- if (!ParseSdes()) {
- break; // Nothing supported found, continue to next block!
- }
- return;
- case kPacketTypeBye:
- number_of_blocks_ = header.IC;
- if (!ParseBye()) {
- // Nothing supported found, continue to next block!
- break;
- }
- return;
case kPacketTypeApplicationDefined:
if (!ParseApplicationDefined(header.IC)) {
// Nothing supported found, continue to next block!
@@ -162,18 +130,6 @@ void RtcpParser::IterateReportBlockItem() {
Iterate();
}
-void RtcpParser::IterateSdesItem() {
- bool success = ParseSdesItem();
- if (!success)
- Iterate();
-}
-
-void RtcpParser::IterateByeItem() {
- bool success = ParseByeItem();
- if (!success)
- Iterate();
-}
-
void RtcpParser::IterateExtendedReportItem() {
bool success = ParseExtendedReportItem();
if (!success)
@@ -186,36 +142,12 @@ void RtcpParser::IterateExtendedReportDelaySinceLastReceiverReportItem() {
Iterate();
}
-void RtcpParser::IterateNackItem() {
- bool success = ParseNackItem();
- if (!success)
- Iterate();
-}
-
-void RtcpParser::IterateRpsiItem() {
- bool success = ParseRpsiItem();
- if (!success)
- Iterate();
-}
-
-void RtcpParser::IterateFirItem() {
- bool success = ParseFirItem();
- if (!success)
- Iterate();
-}
-
void RtcpParser::IteratePayloadSpecificAppItem() {
bool success = ParsePayloadSpecificAppItem();
if (!success)
Iterate();
}
-void RtcpParser::IteratePayloadSpecificRembItem() {
- bool success = ParsePayloadSpecificRembItem();
- if (!success)
- Iterate();
-}
-
void RtcpParser::IteratePayloadSpecificCastItem() {
bool success = ParsePayloadSpecificCastItem();
if (!success)
@@ -379,139 +311,6 @@ bool RtcpParser::ParseReportBlockItem() {
return true;
}
-bool RtcpParser::ParseSdes() {
- ptrdiff_t length = rtcp_block_end_ - rtcp_data_;
-
- if (length < 8) {
- state_ = kStateTopLevel;
- EndCurrentBlock();
- return false;
- }
- rtcp_data_ += 4; // Skip header
-
- state_ = kStateSdes;
- field_type_ = kRtcpSdesCode;
- return true;
-}
-
-bool RtcpParser::ParseSdesItem() {
- if (number_of_blocks_ <= 0) {
- state_ = kStateTopLevel;
- EndCurrentBlock();
- return false;
- }
- number_of_blocks_--;
-
- // Find c_name item in a Sdes chunk.
- while (rtcp_data_ < rtcp_block_end_) {
- ptrdiff_t data_length = rtcp_block_end_ - rtcp_data_;
- if (data_length < 4) {
- state_ = kStateTopLevel;
- EndCurrentBlock();
- return false;
- }
-
- uint32 ssrc;
- base::BigEndianReader big_endian_reader(
- reinterpret_cast<const char*>(rtcp_data_), data_length);
- big_endian_reader.ReadU32(&ssrc);
- rtcp_data_ += 4;
-
- bool found_c_name = ParseSdesTypes();
- if (found_c_name) {
- field_.c_name.sender_ssrc = ssrc;
- return true;
- }
- }
- state_ = kStateTopLevel;
- EndCurrentBlock();
- return false;
-}
-
-bool RtcpParser::ParseSdesTypes() {
- // Only the c_name item is mandatory. RFC 3550 page 46.
- bool found_c_name = false;
- ptrdiff_t length = rtcp_block_end_ - rtcp_data_;
- base::BigEndianReader big_endian_reader(
- reinterpret_cast<const char*>(rtcp_data_), length);
-
- while (big_endian_reader.remaining() > 0) {
- uint8 tag;
- big_endian_reader.ReadU8(&tag);
-
- if (tag == 0) {
- // End tag! 4 octet aligned.
- rtcp_data_ = rtcp_block_end_;
- return found_c_name;
- }
-
- if (big_endian_reader.remaining() > 0) {
- uint8 len;
- big_endian_reader.ReadU8(&len);
-
- if (tag == 1) { // c_name.
- // Sanity check.
- if (big_endian_reader.remaining() < len) {
- state_ = kStateTopLevel;
- EndCurrentBlock();
- return false;
- }
- int i = 0;
- for (; i < len; ++i) {
- uint8 c;
- big_endian_reader.ReadU8(&c);
- if ((c < ' ') || (c > '{') || (c == '%') || (c == '\\')) {
- // Illegal char.
- state_ = kStateTopLevel;
- EndCurrentBlock();
- return false;
- }
- field_.c_name.name[i] = c;
- }
- // Make sure we are null terminated.
- field_.c_name.name[i] = 0;
- field_type_ = kRtcpSdesChunkCode;
- found_c_name = true;
- } else {
- big_endian_reader.Skip(len);
- }
- }
- }
- // No end tag found!
- state_ = kStateTopLevel;
- EndCurrentBlock();
- return false;
-}
-
-bool RtcpParser::ParseBye() {
- rtcp_data_ += 4; // Skip header.
- state_ = kStateBye;
- return ParseByeItem();
-}
-
-bool RtcpParser::ParseByeItem() {
- ptrdiff_t length = rtcp_block_end_ - rtcp_data_;
- if (length < 4 || number_of_blocks_ == 0) {
- state_ = kStateTopLevel;
- EndCurrentBlock();
- return false;
- }
-
- field_type_ = kRtcpByeCode;
-
- base::BigEndianReader big_endian_reader(
- reinterpret_cast<const char*>(rtcp_data_), length);
- big_endian_reader.ReadU32(&field_.bye.sender_ssrc);
- rtcp_data_ += 4;
-
- // We can have several CSRCs attached.
- if (length >= 4 * number_of_blocks_) {
- rtcp_data_ += (number_of_blocks_ - 1) * 4;
- }
- number_of_blocks_ = 0;
- return true;
-}
-
bool RtcpParser::ParseApplicationDefined(uint8 subtype) {
ptrdiff_t length = rtcp_block_end_ - rtcp_data_;
if (length < 16 || subtype != kReceiverLogSubtype) {
@@ -630,61 +429,20 @@ bool RtcpParser::ParseFeedBackCommon(const RtcpCommonHeader& header) {
rtcp_data_ += 12;
- if (header.PT == kPacketTypeGenericRtpFeedback) {
- // Transport layer feedback
- switch (header.IC) {
- case 1:
- // Nack
- field_type_ = kRtcpGenericRtpFeedbackNackCode;
- field_.nack.sender_ssrc = sender_ssrc;
- field_.nack.media_ssrc = media_ssrc;
- state_ = kStateGenericRtpFeedbackNack;
- return true;
- case 2:
- // Used to be ACK is this code point, which is removed conficts with
- // http://tools.ietf.org/html/draft-levin-avt-rtcp-burst-00
- break;
- case 3:
- // Tmmbr
- break;
- case 4:
- // Tmmbn
- break;
- case 5:
- // RFC 6051 RTCP-sender_report-REQ Rapid Synchronisation of RTP Flows
- // Trigger a new Rtcp sender_report
- field_type_ = kRtcpGenericRtpFeedbackSrReqCode;
-
- // Note: No state transition, sender report REQ is empty!
- return true;
- default:
- break;
- }
- EndCurrentBlock();
- return false;
-
- } else if (header.PT == kPacketTypePayloadSpecific) {
+ if (header.PT == kPacketTypePayloadSpecific) {
// Payload specific feedback
switch (header.IC) {
case 1:
// PLI
- field_type_ = kRtcpPayloadSpecificPliCode;
- field_.pli.sender_ssrc = sender_ssrc;
- field_.pli.media_ssrc = media_ssrc;
-
- // Note: No state transition, PLI FCI is empty!
- return true;
+ break;
case 2:
- // Sli
+ // SLI.
break;
case 3:
- field_type_ = kRtcpPayloadSpecificRpsiCode;
- field_.rpsi.sender_ssrc = sender_ssrc;
- field_.rpsi.media_ssrc = media_ssrc;
- state_ = kStatePayloadSpecificRpsi;
- return true;
+ // RPSI.
+ break;
case 4:
- // fir
+ // FIR.
break;
case 15:
field_type_ = kRtcpPayloadSpecificAppCode;
@@ -705,65 +463,6 @@ bool RtcpParser::ParseFeedBackCommon(const RtcpCommonHeader& header) {
}
}
-bool RtcpParser::ParseRpsiItem() {
- // RFC 4585 6.3.3. Reference Picture Selection Indication (rpsi)
- /*
- 0 1 2 3
- 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- | PB |0| Payload Type| Native rpsi bit string |
- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- | defined per codec ... | Padding (0) |
- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- */
- ptrdiff_t length = rtcp_block_end_ - rtcp_data_;
-
- if (length < 4) {
- state_ = kStateTopLevel;
- EndCurrentBlock();
- return false;
- }
- if (length > 2 + kRtcpRpsiDataSize) {
- state_ = kStateTopLevel;
- EndCurrentBlock();
- return false;
- }
-
- field_type_ = kRtcpPayloadSpecificRpsiCode;
-
- uint8 padding_bits;
- base::BigEndianReader big_endian_reader(
- reinterpret_cast<const char*>(rtcp_data_), length);
- big_endian_reader.ReadU8(&padding_bits);
- big_endian_reader.ReadU8(&field_.rpsi.payload_type);
- big_endian_reader.ReadBytes(&field_.rpsi.native_bit_string, length - 2);
- field_.rpsi.number_of_valid_bits =
- static_cast<uint16>(length - 2) * 8 - padding_bits;
-
- rtcp_data_ += length;
- return true;
-}
-
-bool RtcpParser::ParseNackItem() {
- // RFC 4585 6.2.1. Generic Nack
-
- ptrdiff_t length = rtcp_block_end_ - rtcp_data_;
- if (length < 4) {
- state_ = kStateTopLevel;
- EndCurrentBlock();
- return false;
- }
-
- field_type_ = kRtcpGenericRtpFeedbackNackItemCode;
-
- base::BigEndianReader big_endian_reader(
- reinterpret_cast<const char*>(rtcp_data_), length);
- big_endian_reader.ReadU16(&field_.nack_item.packet_id);
- big_endian_reader.ReadU16(&field_.nack_item.bitmask);
- rtcp_data_ += 4;
- return true;
-}
-
bool RtcpParser::ParsePayloadSpecificAppItem() {
ptrdiff_t length = rtcp_block_end_ - rtcp_data_;
@@ -778,11 +477,7 @@ bool RtcpParser::ParsePayloadSpecificAppItem() {
big_endian_reader.ReadU32(&name);
rtcp_data_ += 4;
- if (name == kRemb) {
- field_type_ = kRtcpPayloadSpecificRembCode;
- state_ = kStatePayloadSpecificRemb;
- return true;
- } else if (name == kCast) {
+ if (name == kCast) {
field_type_ = kRtcpPayloadSpecificCastCode;
state_ = kStatePayloadSpecificCast;
return true;
@@ -792,46 +487,6 @@ bool RtcpParser::ParsePayloadSpecificAppItem() {
return false;
}
-bool RtcpParser::ParsePayloadSpecificRembItem() {
- ptrdiff_t length = rtcp_block_end_ - rtcp_data_;
-
- if (length < 4) {
- state_ = kStateTopLevel;
- EndCurrentBlock();
- return false;
- }
-
- base::BigEndianReader big_endian_reader(
- reinterpret_cast<const char*>(rtcp_data_), length);
- big_endian_reader.ReadU8(&field_.remb_item.number_of_ssrcs);
-
- uint8 byte_1;
- uint8 byte_2;
- uint8 byte_3;
- big_endian_reader.ReadU8(&byte_1);
- big_endian_reader.ReadU8(&byte_2);
- big_endian_reader.ReadU8(&byte_3);
- rtcp_data_ += 4;
-
- uint8 br_exp = (byte_1 >> 2) & 0x3F;
- uint32 br_mantissa = ((byte_1 & 0x03) << 16) + (byte_2 << 8) + byte_3;
- field_.remb_item.bitrate = (br_mantissa << br_exp);
-
- ptrdiff_t length_ssrcs = rtcp_block_end_ - rtcp_data_;
- if (length_ssrcs < 4 * field_.remb_item.number_of_ssrcs) {
- state_ = kStateTopLevel;
- EndCurrentBlock();
- return false;
- }
-
- field_type_ = kRtcpPayloadSpecificRembItemCode;
-
- for (int i = 0; i < field_.remb_item.number_of_ssrcs; i++) {
- big_endian_reader.ReadU32(&field_.remb_item.ssrcs[i]);
- }
- return true;
-}
-
bool RtcpParser::ParsePayloadSpecificCastItem() {
ptrdiff_t length = rtcp_block_end_ - rtcp_data_;
if (length < 4) {
@@ -879,26 +534,6 @@ bool RtcpParser::ParsePayloadSpecificCastNackItem() {
return true;
}
-bool RtcpParser::ParseFirItem() {
- // RFC 5104 4.3.1. Full Intra Request (fir)
- ptrdiff_t length = rtcp_block_end_ - rtcp_data_;
-
- if (length < 8) {
- state_ = kStateTopLevel;
- EndCurrentBlock();
- return false;
- }
- field_type_ = kRtcpPayloadSpecificFirItemCode;
-
- base::BigEndianReader big_endian_reader(
- reinterpret_cast<const char*>(rtcp_data_), length);
- big_endian_reader.ReadU32(&field_.fir_item.ssrc);
- big_endian_reader.ReadU8(&field_.fir_item.command_sequence_number);
-
- rtcp_data_ += 8;
- return true;
-}
-
bool RtcpParser::ParseExtendedReport() {
ptrdiff_t length = rtcp_block_end_ - rtcp_data_;
if (length < 8)
@@ -936,7 +571,7 @@ bool RtcpParser::ParseExtendedReportItem() {
rtcp_data_ += 4;
switch (block_type) {
- case 4:
+ case 4: // RRTR. RFC3611 Section 4.4.
if (block_length != 2) {
// Invalid block length.
state_ = kStateTopLevel;
@@ -944,7 +579,7 @@ bool RtcpParser::ParseExtendedReportItem() {
return false;
}
return ParseExtendedReportReceiverReferenceTimeReport();
- case 5:
+ case 5: // DLRR. RFC3611 Section 4.5.
if (block_length % 3 != 0) {
// Invalid block length.
state_ = kStateTopLevel;
« no previous file with comments | « media/cast/net/rtcp/rtcp_utility.h ('k') | media/cast/net/rtcp/test_rtcp_packet_builder.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698