OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "media/cast/rtcp/rtcp.h" | 5 #include "media/cast/rtcp/rtcp.h" |
6 | 6 |
7 #include "base/rand_util.h" | 7 #include "base/rand_util.h" |
8 #include "media/cast/cast_config.h" | 8 #include "media/cast/cast_config.h" |
9 #include "media/cast/cast_defines.h" | 9 #include "media/cast/cast_defines.h" |
10 #include "media/cast/cast_environment.h" | 10 #include "media/cast/cast_environment.h" |
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
172 RtcpParser rtcp_parser(rtcp_buffer, length); | 172 RtcpParser rtcp_parser(rtcp_buffer, length); |
173 if (!rtcp_parser.IsValid()) { | 173 if (!rtcp_parser.IsValid()) { |
174 // Silently ignore packet. | 174 // Silently ignore packet. |
175 DLOG(ERROR) << "Received invalid RTCP packet"; | 175 DLOG(ERROR) << "Received invalid RTCP packet"; |
176 return; | 176 return; |
177 } | 177 } |
178 rtcp_receiver_->IncomingRtcpPacket(&rtcp_parser); | 178 rtcp_receiver_->IncomingRtcpPacket(&rtcp_parser); |
179 } | 179 } |
180 | 180 |
181 void Rtcp::SendRtcpFromRtpReceiver(const RtcpCastMessage* cast_message, | 181 void Rtcp::SendRtcpFromRtpReceiver(const RtcpCastMessage* cast_message, |
182 const RtcpReceiverLogMessage* receiver_log) { | 182 RtcpReceiverLogMessage* receiver_log) { |
183 uint32 packet_type_flags = 0; | 183 uint32 packet_type_flags = 0; |
184 | 184 |
185 base::TimeTicks now = cast_environment_->Clock()->NowTicks(); | 185 base::TimeTicks now = cast_environment_->Clock()->NowTicks(); |
186 RtcpReportBlock report_block; | 186 RtcpReportBlock report_block; |
187 RtcpReceiverReferenceTimeReport rrtr; | 187 RtcpReceiverReferenceTimeReport rrtr; |
188 | 188 |
189 if (cast_message) { | 189 if (cast_message) { |
190 packet_type_flags |= RtcpSender::kRtcpCast; | 190 packet_type_flags |= RtcpSender::kRtcpCast; |
191 cast_environment_->Logging()->InsertGenericEvent(kAckSent, | 191 cast_environment_->Logging()->InsertGenericEvent(kAckSent, |
192 cast_message->ack_frame_id_); | 192 cast_message->ack_frame_id_); |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
232 UpdateNextTimeToSendRtcp(); | 232 UpdateNextTimeToSendRtcp(); |
233 } | 233 } |
234 rtcp_sender_->SendRtcpFromRtpReceiver(packet_type_flags, | 234 rtcp_sender_->SendRtcpFromRtpReceiver(packet_type_flags, |
235 &report_block, | 235 &report_block, |
236 &rrtr, | 236 &rrtr, |
237 cast_message, | 237 cast_message, |
238 receiver_log); | 238 receiver_log); |
239 } | 239 } |
240 | 240 |
241 void Rtcp::SendRtcpFromRtpSender( | 241 void Rtcp::SendRtcpFromRtpSender( |
242 const RtcpSenderLogMessage* sender_log_message) { | 242 RtcpSenderLogMessage* sender_log_message) { |
243 uint32 packet_type_flags = RtcpSender::kRtcpSr; | 243 uint32 packet_type_flags = RtcpSender::kRtcpSr; |
244 base::TimeTicks now = cast_environment_->Clock()->NowTicks(); | 244 base::TimeTicks now = cast_environment_->Clock()->NowTicks(); |
245 | 245 |
| 246 if (sender_log_message) { |
| 247 packet_type_flags |= RtcpSender::kRtcpSenderLog; |
| 248 } |
| 249 |
246 RtcpSenderInfo sender_info; | 250 RtcpSenderInfo sender_info; |
247 RtcpDlrrReportBlock dlrr; | |
248 | |
249 if (sender_log_message) packet_type_flags |= RtcpSender::kRtcpSenderLog; | |
250 | |
251 if (rtp_sender_statistics_) { | 251 if (rtp_sender_statistics_) { |
252 rtp_sender_statistics_->GetStatistics(now, &sender_info); | 252 rtp_sender_statistics_->GetStatistics(now, &sender_info); |
253 } else { | 253 } else { |
254 memset(&sender_info, 0, sizeof(sender_info)); | 254 memset(&sender_info, 0, sizeof(sender_info)); |
255 } | 255 } |
256 SaveLastSentNtpTime(now, sender_info.ntp_seconds, sender_info.ntp_fraction); | 256 SaveLastSentNtpTime(now, sender_info.ntp_seconds, sender_info.ntp_fraction); |
257 | 257 |
| 258 RtcpDlrrReportBlock dlrr; |
258 if (!time_last_report_received_.is_null()) { | 259 if (!time_last_report_received_.is_null()) { |
259 packet_type_flags |= RtcpSender::kRtcpDlrr; | 260 packet_type_flags |= RtcpSender::kRtcpDlrr; |
260 dlrr.last_rr = last_report_received_; | 261 dlrr.last_rr = last_report_received_; |
261 uint32 delay_seconds = 0; | 262 uint32 delay_seconds = 0; |
262 uint32 delay_fraction = 0; | 263 uint32 delay_fraction = 0; |
263 base::TimeDelta delta = now - time_last_report_received_; | 264 base::TimeDelta delta = now - time_last_report_received_; |
264 ConvertTimeToFractions(delta.InMicroseconds(), | 265 ConvertTimeToFractions(delta.InMicroseconds(), |
265 &delay_seconds, | 266 &delay_seconds, |
266 &delay_fraction); | 267 &delay_fraction); |
267 | 268 |
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
427 int random = base::RandInt(0, 999); | 428 int random = base::RandInt(0, 999); |
428 base::TimeDelta time_to_next = (rtcp_interval_ / 2) + | 429 base::TimeDelta time_to_next = (rtcp_interval_ / 2) + |
429 (rtcp_interval_ * random / 1000); | 430 (rtcp_interval_ * random / 1000); |
430 | 431 |
431 base::TimeTicks now = cast_environment_->Clock()->NowTicks(); | 432 base::TimeTicks now = cast_environment_->Clock()->NowTicks(); |
432 next_time_to_send_rtcp_ = now + time_to_next; | 433 next_time_to_send_rtcp_ = now + time_to_next; |
433 } | 434 } |
434 | 435 |
435 } // namespace cast | 436 } // namespace cast |
436 } // namespace media | 437 } // namespace media |
OLD | NEW |