| 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 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 65 return std::make_pair( | 65 return std::make_pair( |
| 66 value1, static_cast<uint64_t>(event_timestamp.ToInternalValue())); | 66 value1, static_cast<uint64_t>(event_timestamp.ToInternalValue())); |
| 67 } | 67 } |
| 68 | 68 |
| 69 } // namespace | 69 } // namespace |
| 70 | 70 |
| 71 SenderRtcpSession::SenderRtcpSession( | 71 SenderRtcpSession::SenderRtcpSession( |
| 72 const RtcpCastMessageCallback& cast_callback, | 72 const RtcpCastMessageCallback& cast_callback, |
| 73 const RtcpRttCallback& rtt_callback, | 73 const RtcpRttCallback& rtt_callback, |
| 74 const RtcpLogMessageCallback& log_callback, | 74 const RtcpLogMessageCallback& log_callback, |
| 75 const RtcpPliCallback pli_callback, |
| 75 base::TickClock* clock, | 76 base::TickClock* clock, |
| 76 PacedPacketSender* packet_sender, | 77 PacedPacketSender* packet_sender, |
| 77 uint32_t local_ssrc, | 78 uint32_t local_ssrc, |
| 78 uint32_t remote_ssrc) | 79 uint32_t remote_ssrc) |
| 79 : clock_(clock), | 80 : clock_(clock), |
| 80 packet_sender_(packet_sender), | 81 packet_sender_(packet_sender), |
| 81 local_ssrc_(local_ssrc), | 82 local_ssrc_(local_ssrc), |
| 82 remote_ssrc_(remote_ssrc), | 83 remote_ssrc_(remote_ssrc), |
| 83 cast_callback_(cast_callback), | 84 cast_callback_(cast_callback), |
| 84 rtt_callback_(rtt_callback), | 85 rtt_callback_(rtt_callback), |
| 85 log_callback_(log_callback), | 86 log_callback_(log_callback), |
| 87 pli_callback_(pli_callback), |
| 86 largest_seen_timestamp_(base::TimeTicks::FromInternalValue( | 88 largest_seen_timestamp_(base::TimeTicks::FromInternalValue( |
| 87 std::numeric_limits<int64_t>::min())), | 89 std::numeric_limits<int64_t>::min())), |
| 88 parser_(local_ssrc, remote_ssrc), | 90 parser_(local_ssrc, remote_ssrc), |
| 89 ack_frame_id_wrap_helper_(kFirstFrameId - 1) {} | 91 ack_frame_id_wrap_helper_(kFirstFrameId - 1) {} |
| 90 | 92 |
| 91 SenderRtcpSession::~SenderRtcpSession() {} | 93 SenderRtcpSession::~SenderRtcpSession() {} |
| 92 | 94 |
| 93 bool SenderRtcpSession::IncomingRtcpPacket(const uint8_t* data, size_t length) { | 95 bool SenderRtcpSession::IncomingRtcpPacket(const uint8_t* data, size_t length) { |
| 94 // Check if this is a valid RTCP packet. | 96 // Check if this is a valid RTCP packet. |
| 95 if (!IsRtcpPacket(data, length)) { | 97 if (!IsRtcpPacket(data, length)) { |
| 96 VLOG(1) << "Rtcp@" << this << "::IncomingRtcpPacket() -- " | 98 VLOG(1) << "Rtcp@" << this << "::IncomingRtcpPacket() -- " |
| 97 << "Received an invalid (non-RTCP?) packet."; | 99 << "Received an invalid (non-RTCP?) packet."; |
| 98 return false; | 100 return false; |
| 99 } | 101 } |
| 100 | 102 |
| 101 // Check if this packet is to us. | 103 // Check if this packet is to us. |
| 102 uint32_t ssrc_of_sender = GetSsrcOfSender(data, length); | 104 uint32_t ssrc_of_sender = GetSsrcOfSender(data, length); |
| 103 if (ssrc_of_sender != remote_ssrc_) { | 105 if (ssrc_of_sender != remote_ssrc_) { |
| 104 return false; | 106 return false; |
| 105 } | 107 } |
| 106 | 108 |
| 107 // Parse this packet. | 109 // Parse this packet. |
| 108 base::BigEndianReader reader(reinterpret_cast<const char*>(data), length); | 110 base::BigEndianReader reader(reinterpret_cast<const char*>(data), length); |
| 109 if (parser_.Parse(&reader)) { | 111 if (parser_.Parse(&reader)) { |
| 112 if (parser_.has_picture_loss_indicator()) { |
| 113 if (!pli_callback_.is_null()) |
| 114 pli_callback_.Run(); |
| 115 } |
| 110 if (parser_.has_receiver_reference_time_report()) { | 116 if (parser_.has_receiver_reference_time_report()) { |
| 111 base::TimeTicks t = ConvertNtpToTimeTicks( | 117 base::TimeTicks t = ConvertNtpToTimeTicks( |
| 112 parser_.receiver_reference_time_report().ntp_seconds, | 118 parser_.receiver_reference_time_report().ntp_seconds, |
| 113 parser_.receiver_reference_time_report().ntp_fraction); | 119 parser_.receiver_reference_time_report().ntp_fraction); |
| 114 if (t > largest_seen_timestamp_) { | 120 if (t > largest_seen_timestamp_) { |
| 115 largest_seen_timestamp_ = t; | 121 largest_seen_timestamp_ = t; |
| 116 } else if ((largest_seen_timestamp_ - t).InMilliseconds() > | 122 } else if ((largest_seen_timestamp_ - t).InMilliseconds() > |
| 117 kOutOfOrderMaxAgeMs) { | 123 kOutOfOrderMaxAgeMs) { |
| 118 // Reject packet, it is too old. | 124 // Reject packet, it is too old. |
| 119 VLOG(1) << "Rejecting RTCP packet as it is too old (" | 125 VLOG(1) << "Rejecting RTCP packet as it is too old (" |
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 255 | 261 |
| 256 void SenderRtcpSession::OnReceivedReceiverLog( | 262 void SenderRtcpSession::OnReceivedReceiverLog( |
| 257 const RtcpReceiverLogMessage& receiver_log) { | 263 const RtcpReceiverLogMessage& receiver_log) { |
| 258 if (log_callback_.is_null()) | 264 if (log_callback_.is_null()) |
| 259 return; | 265 return; |
| 260 log_callback_.Run(receiver_log); | 266 log_callback_.Run(receiver_log); |
| 261 } | 267 } |
| 262 | 268 |
| 263 } // namespace cast | 269 } // namespace cast |
| 264 } // namespace media | 270 } // namespace media |
| OLD | NEW |