| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <algorithm> | 5 #include <algorithm> |
| 6 #include <limits> | 6 #include <limits> |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/big_endian.h" | 9 #include "base/big_endian.h" |
| 10 #include "base/time/time.h" | 10 #include "base/time/time.h" |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 72 return std::make_pair( | 72 return std::make_pair( |
| 73 value1, static_cast<uint64_t>(event_timestamp.ToInternalValue())); | 73 value1, static_cast<uint64_t>(event_timestamp.ToInternalValue())); |
| 74 } | 74 } |
| 75 | 75 |
| 76 } // namespace | 76 } // namespace |
| 77 | 77 |
| 78 SenderRtcpSession::SenderRtcpSession( | 78 SenderRtcpSession::SenderRtcpSession( |
| 79 const RtcpCastMessageCallback& cast_callback, | 79 const RtcpCastMessageCallback& cast_callback, |
| 80 const RtcpRttCallback& rtt_callback, | 80 const RtcpRttCallback& rtt_callback, |
| 81 const RtcpLogMessageCallback& log_callback, | 81 const RtcpLogMessageCallback& log_callback, |
| 82 const RtcpPliCallback pli_callback, |
| 82 base::TickClock* clock, | 83 base::TickClock* clock, |
| 83 PacedPacketSender* packet_sender, | 84 PacedPacketSender* packet_sender, |
| 84 uint32_t local_ssrc, | 85 uint32_t local_ssrc, |
| 85 uint32_t remote_ssrc) | 86 uint32_t remote_ssrc) |
| 86 : clock_(clock), | 87 : clock_(clock), |
| 87 packet_sender_(packet_sender), | 88 packet_sender_(packet_sender), |
| 88 local_ssrc_(local_ssrc), | 89 local_ssrc_(local_ssrc), |
| 89 remote_ssrc_(remote_ssrc), | 90 remote_ssrc_(remote_ssrc), |
| 90 cast_callback_(cast_callback), | 91 cast_callback_(cast_callback), |
| 91 rtt_callback_(rtt_callback), | 92 rtt_callback_(rtt_callback), |
| 92 log_callback_(log_callback), | 93 log_callback_(log_callback), |
| 94 pli_callback_(pli_callback), |
| 93 largest_seen_timestamp_(base::TimeTicks::FromInternalValue( | 95 largest_seen_timestamp_(base::TimeTicks::FromInternalValue( |
| 94 std::numeric_limits<int64_t>::min())), | 96 std::numeric_limits<int64_t>::min())), |
| 95 parser_(local_ssrc, remote_ssrc), | 97 parser_(local_ssrc, remote_ssrc), |
| 96 ack_frame_id_wrap_helper_(kFirstFrameId - 1) {} | 98 ack_frame_id_wrap_helper_(kFirstFrameId - 1) {} |
| 97 | 99 |
| 98 SenderRtcpSession::~SenderRtcpSession() {} | 100 SenderRtcpSession::~SenderRtcpSession() {} |
| 99 | 101 |
| 100 bool SenderRtcpSession::IncomingRtcpPacket(const uint8_t* data, size_t length) { | 102 bool SenderRtcpSession::IncomingRtcpPacket(const uint8_t* data, size_t length) { |
| 101 // Check if this is a valid RTCP packet. | 103 // Check if this is a valid RTCP packet. |
| 102 if (!IsRtcpPacket(data, length)) { | 104 if (!IsRtcpPacket(data, length)) { |
| 103 VLOG(1) << "Rtcp@" << this << "::IncomingRtcpPacket() -- " | 105 VLOG(1) << "Rtcp@" << this << "::IncomingRtcpPacket() -- " |
| 104 << "Received an invalid (non-RTCP?) packet."; | 106 << "Received an invalid (non-RTCP?) packet."; |
| 105 return false; | 107 return false; |
| 106 } | 108 } |
| 107 | 109 |
| 108 // Check if this packet is to us. | 110 // Check if this packet is to us. |
| 109 uint32_t ssrc_of_sender = GetSsrcOfSender(data, length); | 111 uint32_t ssrc_of_sender = GetSsrcOfSender(data, length); |
| 110 if (ssrc_of_sender != remote_ssrc_) { | 112 if (ssrc_of_sender != remote_ssrc_) { |
| 111 return false; | 113 return false; |
| 112 } | 114 } |
| 113 | 115 |
| 114 // Parse this packet. | 116 // Parse this packet. |
| 115 base::BigEndianReader reader(reinterpret_cast<const char*>(data), length); | 117 base::BigEndianReader reader(reinterpret_cast<const char*>(data), length); |
| 116 if (parser_.Parse(&reader)) { | 118 if (parser_.Parse(&reader)) { |
| 119 if (parser_.has_picture_loss_indicator()) { |
| 120 if (!pli_callback_.is_null()) |
| 121 pli_callback_.Run(); |
| 122 } |
| 117 if (parser_.has_receiver_reference_time_report()) { | 123 if (parser_.has_receiver_reference_time_report()) { |
| 118 base::TimeTicks t = ConvertNtpToTimeTicks( | 124 base::TimeTicks t = ConvertNtpToTimeTicks( |
| 119 parser_.receiver_reference_time_report().ntp_seconds, | 125 parser_.receiver_reference_time_report().ntp_seconds, |
| 120 parser_.receiver_reference_time_report().ntp_fraction); | 126 parser_.receiver_reference_time_report().ntp_fraction); |
| 121 if (t > largest_seen_timestamp_) { | 127 if (t > largest_seen_timestamp_) { |
| 122 largest_seen_timestamp_ = t; | 128 largest_seen_timestamp_ = t; |
| 123 } else if ((largest_seen_timestamp_ - t).InMilliseconds() > | 129 } else if ((largest_seen_timestamp_ - t).InMilliseconds() > |
| 124 kOutOfOrderMaxAgeMs) { | 130 kOutOfOrderMaxAgeMs) { |
| 125 // Reject packet, it is too old. | 131 // Reject packet, it is too old. |
| 126 VLOG(1) << "Rejecting RTCP packet as it is too old (" | 132 VLOG(1) << "Rejecting RTCP packet as it is too old (" |
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 262 | 268 |
| 263 void SenderRtcpSession::OnReceivedReceiverLog( | 269 void SenderRtcpSession::OnReceivedReceiverLog( |
| 264 const RtcpReceiverLogMessage& receiver_log) { | 270 const RtcpReceiverLogMessage& receiver_log) { |
| 265 if (log_callback_.is_null()) | 271 if (log_callback_.is_null()) |
| 266 return; | 272 return; |
| 267 log_callback_.Run(receiver_log); | 273 log_callback_.Run(receiver_log); |
| 268 } | 274 } |
| 269 | 275 |
| 270 } // namespace cast | 276 } // namespace cast |
| 271 } // namespace media | 277 } // namespace media |
| OLD | NEW |