| 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 37026f18c74aa4ea1eb8f21ec69f21c56ee7ec25..4febe8c61fb88881e214cb09b15033a138f3d55b 100644
|
| --- a/media/cast/net/rtcp/rtcp_utility.cc
|
| +++ b/media/cast/net/rtcp/rtcp_utility.cc
|
| @@ -37,6 +37,14 @@ RtcpParser::RtcpParser(uint32_t local_ssrc, uint32_t remote_ssrc)
|
| RtcpParser::~RtcpParser() {}
|
|
|
| bool RtcpParser::Parse(base::BigEndianReader* reader) {
|
| + // Reset.
|
| + has_sender_report_ = false;
|
| + sender_report_ = RtcpSenderInfo();
|
| + has_last_report_ = false;
|
| + receiver_log_.clear();
|
| + has_cast_message_ = false;
|
| + has_receiver_reference_time_report_ = false;
|
| +
|
| while (reader->remaining()) {
|
| RtcpCommonHeader header;
|
| if (!ParseCommonHeader(reader, &header))
|
| @@ -122,14 +130,17 @@ bool RtcpParser::ParseSR(base::BigEndianReader* reader,
|
| if (sender_ssrc != remote_ssrc_)
|
| return true;
|
|
|
| - uint32_t tmp;
|
| + uint32_t truncated_rtp_timestamp;
|
| + uint32_t send_octet_count;
|
| if (!reader->ReadU32(&sender_report_.ntp_seconds) ||
|
| !reader->ReadU32(&sender_report_.ntp_fraction) ||
|
| - !reader->ReadU32(&sender_report_.rtp_timestamp) ||
|
| + !reader->ReadU32(&truncated_rtp_timestamp) ||
|
| !reader->ReadU32(&sender_report_.send_packet_count) ||
|
| - !reader->ReadU32(&tmp))
|
| + !reader->ReadU32(&send_octet_count))
|
| return false;
|
| - sender_report_.send_octet_count = tmp;
|
| + sender_report_.rtp_timestamp = last_parsed_sr_rtp_timestamp_ =
|
| + last_parsed_sr_rtp_timestamp_.Expand(truncated_rtp_timestamp);
|
| + sender_report_.send_octet_count = send_octet_count;
|
| has_sender_report_ = true;
|
|
|
| for (size_t block = 0; block < header.IC; block++)
|
| @@ -199,10 +210,9 @@ bool RtcpParser::ParseCastReceiverLogFrameItem(
|
| base::BigEndianReader* reader) {
|
|
|
| while (reader->remaining()) {
|
| - uint32_t rtp_timestamp;
|
| + uint32_t truncated_rtp_timestamp;
|
| uint32_t data;
|
| - if (!reader->ReadU32(&rtp_timestamp) ||
|
| - !reader->ReadU32(&data))
|
| + if (!reader->ReadU32(&truncated_rtp_timestamp) || !reader->ReadU32(&data))
|
| return false;
|
|
|
| // We have 24 LSB of the event timestamp base on the wire.
|
| @@ -211,7 +221,9 @@ bool RtcpParser::ParseCastReceiverLogFrameItem(
|
|
|
| size_t num_events = 1 + static_cast<uint8_t>(data >> 24);
|
|
|
| - RtcpReceiverFrameLogMessage frame_log(rtp_timestamp);
|
| + const RtpTimeTicks frame_log_rtp_timestamp =
|
| + last_parsed_frame_log_rtp_timestamp_.Expand(truncated_rtp_timestamp);
|
| + RtcpReceiverFrameLogMessage frame_log(frame_log_rtp_timestamp);
|
| for (size_t event = 0; event < num_events; event++) {
|
| uint16_t delay_delta_or_packet_id;
|
| uint16_t event_type_and_timestamp_delta;
|
| @@ -235,6 +247,7 @@ bool RtcpParser::ParseCastReceiverLogFrameItem(
|
| frame_log.event_log_messages_.push_back(event_log);
|
| }
|
|
|
| + last_parsed_frame_log_rtp_timestamp_ = frame_log_rtp_timestamp;
|
| receiver_log_.push_back(frame_log);
|
| }
|
|
|
|
|