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 OnReceivedPli(); | |
Irfan
2016/02/29 16:01:23
For readability, perhaps a few of these OnReceived
xjz
2016/02/29 19:48:58
Done.
| |
117 if (parser_.has_receiver_reference_time_report()) { | 121 if (parser_.has_receiver_reference_time_report()) { |
118 base::TimeTicks t = ConvertNtpToTimeTicks( | 122 base::TimeTicks t = ConvertNtpToTimeTicks( |
119 parser_.receiver_reference_time_report().ntp_seconds, | 123 parser_.receiver_reference_time_report().ntp_seconds, |
120 parser_.receiver_reference_time_report().ntp_fraction); | 124 parser_.receiver_reference_time_report().ntp_fraction); |
121 if (t > largest_seen_timestamp_) { | 125 if (t > largest_seen_timestamp_) { |
122 largest_seen_timestamp_ = t; | 126 largest_seen_timestamp_ = t; |
123 } else if ((largest_seen_timestamp_ - t).InMilliseconds() > | 127 } else if ((largest_seen_timestamp_ - t).InMilliseconds() > |
124 kOutOfOrderMaxAgeMs) { | 128 kOutOfOrderMaxAgeMs) { |
125 // Reject packet, it is too old. | 129 // Reject packet, it is too old. |
126 VLOG(1) << "Rejecting RTCP packet as it is too old (" | 130 VLOG(1) << "Rejecting RTCP packet as it is too old (" |
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
260 cast_callback_.Run(cast_message); | 264 cast_callback_.Run(cast_message); |
261 } | 265 } |
262 | 266 |
263 void SenderRtcpSession::OnReceivedReceiverLog( | 267 void SenderRtcpSession::OnReceivedReceiverLog( |
264 const RtcpReceiverLogMessage& receiver_log) { | 268 const RtcpReceiverLogMessage& receiver_log) { |
265 if (log_callback_.is_null()) | 269 if (log_callback_.is_null()) |
266 return; | 270 return; |
267 log_callback_.Run(receiver_log); | 271 log_callback_.Run(receiver_log); |
268 } | 272 } |
269 | 273 |
274 void SenderRtcpSession::OnReceivedPli() { | |
275 if (pli_callback_.is_null()) | |
276 return; | |
277 pli_callback_.Run(); | |
278 } | |
279 | |
270 } // namespace cast | 280 } // namespace cast |
271 } // namespace media | 281 } // namespace media |
OLD | NEW |