| 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 |