Index: media/cast/rtcp/rtcp_utility.h |
diff --git a/media/cast/rtcp/rtcp_utility.h b/media/cast/rtcp/rtcp_utility.h |
index ab7312ffb6adf80cc86c2f6deef6fdaab538659a..5cf55d91060a06f0e69a0da80f5b96b6dd3e7189 100644 |
--- a/media/cast/rtcp/rtcp_utility.h |
+++ b/media/cast/rtcp/rtcp_utility.h |
@@ -21,6 +21,13 @@ static const int kRtcpMaxNumberOfRembFeedbackSsrcs = 255; |
static const uint32 kRemb = ('R' << 24) + ('E' << 16) + ('M' << 8) + 'B'; |
static const uint32 kCast = ('C' << 24) + ('A' << 16) + ('S' << 8) + 'T'; |
+static const uint8 kSenderLogSubtype = 1; |
+static const uint8 kReceiverLogSubtype = 2; |
+ |
+static const size_t kRtcpMaxReceiverLogMessages = 256; |
+static const size_t kRtcpMaxNackFields = 253; |
+static const size_t kRtcpMaxCastLossFields = 100; |
+ |
struct RtcpFieldReceiverReport { |
// RFC 3550. |
uint32 sender_ssrc; |
@@ -139,6 +146,21 @@ struct RtcpFieldPayloadSpecificCastNackItem { |
uint8 bitmask; |
}; |
+struct RtcpFieldApplicationSpecificCastReceiverLogItem { |
+ uint32 sender_ssrc; |
+ uint32 rtp_timestamp; |
+ uint32 event_timestamp_base; |
+ uint8 event; |
+ uint16 delay_delta_or_packet_id; |
+ uint16 event_timestamp_delta; |
+}; |
+ |
+struct RtcpFieldApplicationSpecificCastSenderLogItem { |
+ uint32 sender_ssrc; |
+ uint8 status; |
+ uint32 rtp_timestamp; |
+}; |
+ |
union RtcpField { |
RtcpFieldReceiverReport receiver_report; |
RtcpFieldSenderReport sender_report; |
@@ -161,6 +183,9 @@ union RtcpField { |
RtcpFieldPayloadSpecificRembItem remb_item; |
RtcpFieldPayloadSpecificCastItem cast_item; |
RtcpFieldPayloadSpecificCastNackItem cast_nack_item; |
+ |
+ RtcpFieldApplicationSpecificCastReceiverLogItem cast_receiver_log; |
+ RtcpFieldApplicationSpecificCastSenderLogItem cast_sender_log; |
}; |
enum RtcpFieldTypes { |
@@ -189,10 +214,15 @@ enum RtcpFieldTypes { |
kRtcpPayloadSpecificRpsiCode, |
kRtcpPayloadSpecificAppCode, |
+ // Application specific. |
kRtcpPayloadSpecificRembCode, |
kRtcpPayloadSpecificRembItemCode, |
kRtcpPayloadSpecificCastCode, |
kRtcpPayloadSpecificCastNackItemCode, |
+ kRtcpApplicationSpecificCastReceiverLogCode, |
+ kRtcpApplicationSpecificCastReceiverLogFrameCode, |
+ kRtcpApplicationSpecificCastReceiverLogEventCode, |
+ kRtcpApplicationSpecificCastSenderLogCode, |
// RFC 5104. |
kRtcpPayloadSpecificFirCode, |
@@ -215,11 +245,11 @@ enum RtcpPacketTypes { |
kPacketTypeInterArrivalJitterReport = 195, |
kPacketTypeSenderReport = 200, |
kPacketTypeReceiverReport = 201, |
- kPacketTypeSdes= 202, |
+ kPacketTypeSdes = 202, |
kPacketTypeBye = 203, |
kPacketTypeApplicationDefined = 204, |
kPacketTypeGenericRtpFeedback = 205, |
- kPacketTypePayloadSpecific = 206, |
+ kPacketTypePayloadSpecific = 206, |
kPacketTypeXr = 207, |
kPacketTypeHigh = 210, // Port Mapping. |
}; |
@@ -243,6 +273,9 @@ class RtcpParser { |
kStateReportBlock, // Sender/Receiver report report blocks. |
kStateSdes, |
kStateBye, |
+ kStateApplicationSpecificCastReceiverFrameLog, |
+ kStateApplicationSpecificCastReceiverEventLog, |
+ kStateApplicationSpecificCastSenderLog, |
kStateExtendedReportBlock, |
kStateExtendedReportDelaySinceLastReceiverReport, |
kStateGenericRtpFeedbackNack, |
@@ -262,6 +295,9 @@ class RtcpParser { |
void IterateReportBlockItem(); |
void IterateSdesItem(); |
void IterateByeItem(); |
+ void IterateCastReceiverLogFrame(); |
+ void IterateCastReceiverLogEvent(); |
+ void IterateCastSenderLog(); |
void IterateExtendedReportItem(); |
void IterateExtendedReportDelaySinceLastReceiverReportItem(); |
void IterateNackItem(); |
@@ -284,6 +320,10 @@ class RtcpParser { |
bool ParseSdesTypes(); |
bool ParseBye(); |
bool ParseByeItem(); |
+ bool ParseApplicationDefined(uint8 subtype); |
+ bool ParseCastReceiverLogFrameItem(); |
+ bool ParseCastReceiverLogEventItem(); |
+ bool ParseCastSenderLogItem(); |
bool ParseExtendedReport(); |
bool ParseExtendedReportItem(); |