| 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 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 91 // Add received log messages into our log system. | 91 // Add received log messages into our log system. |
| 92 RtcpReceiverLogMessage::const_iterator it = receiver_log.begin(); | 92 RtcpReceiverLogMessage::const_iterator it = receiver_log.begin(); |
| 93 | 93 |
| 94 for (; it != receiver_log.end(); ++it) { | 94 for (; it != receiver_log.end(); ++it) { |
| 95 uint32 rtp_timestamp = it->rtp_timestamp_; | 95 uint32 rtp_timestamp = it->rtp_timestamp_; |
| 96 | 96 |
| 97 RtcpReceiverEventLogMessages::const_iterator event_it = | 97 RtcpReceiverEventLogMessages::const_iterator event_it = |
| 98 it->event_log_messages_.begin(); | 98 it->event_log_messages_.begin(); |
| 99 for (; event_it != it->event_log_messages_.end(); ++event_it) { | 99 for (; event_it != it->event_log_messages_.end(); ++event_it) { |
| 100 switch (event_it->type) { | 100 switch (event_it->type) { |
| 101 case kPacketReceived: | 101 case kAudioPacketReceived: |
| 102 case kVideoPacketReceived: |
| 102 case kDuplicatePacketReceived: | 103 case kDuplicatePacketReceived: |
| 103 cast_environment_->Logging()->InsertPacketEvent( | 104 cast_environment_->Logging()->InsertPacketEvent( |
| 104 event_it->event_timestamp, event_it->type, rtp_timestamp, | 105 event_it->event_timestamp, event_it->type, rtp_timestamp, |
| 105 kFrameIdUnknown, event_it->packet_id, 0, 0); | 106 kFrameIdUnknown, event_it->packet_id, 0, 0); |
| 106 break; | 107 break; |
| 107 case kAckSent: | 108 case kAudioAckSent: |
| 109 case kVideoAckSent: |
| 108 case kAudioFrameDecoded: | 110 case kAudioFrameDecoded: |
| 109 case kVideoFrameDecoded: | 111 case kVideoFrameDecoded: |
| 110 cast_environment_->Logging()->InsertFrameEvent( | 112 cast_environment_->Logging()->InsertFrameEvent( |
| 111 event_it->event_timestamp, event_it->type, rtp_timestamp, | 113 event_it->event_timestamp, event_it->type, rtp_timestamp, |
| 112 kFrameIdUnknown); | 114 kFrameIdUnknown); |
| 113 break; | 115 break; |
| 114 case kAudioPlayoutDelay: | 116 case kAudioPlayoutDelay: |
| 115 case kVideoRenderDelay: | 117 case kVideoRenderDelay: |
| 116 cast_environment_->Logging()->InsertFrameEventWithDelay( | 118 cast_environment_->Logging()->InsertFrameEventWithDelay( |
| 117 event_it->event_timestamp, event_it->type, rtp_timestamp, | 119 event_it->event_timestamp, event_it->type, rtp_timestamp, |
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 253 void Rtcp::SendRtcpFromRtpReceiver(const RtcpCastMessage* cast_message, | 255 void Rtcp::SendRtcpFromRtpReceiver(const RtcpCastMessage* cast_message, |
| 254 RtcpReceiverLogMessage* receiver_log) { | 256 RtcpReceiverLogMessage* receiver_log) { |
| 255 uint32 packet_type_flags = 0; | 257 uint32 packet_type_flags = 0; |
| 256 | 258 |
| 257 base::TimeTicks now = cast_environment_->Clock()->NowTicks(); | 259 base::TimeTicks now = cast_environment_->Clock()->NowTicks(); |
| 258 transport::RtcpReportBlock report_block; | 260 transport::RtcpReportBlock report_block; |
| 259 RtcpReceiverReferenceTimeReport rrtr; | 261 RtcpReceiverReferenceTimeReport rrtr; |
| 260 | 262 |
| 261 if (cast_message) { | 263 if (cast_message) { |
| 262 packet_type_flags |= RtcpSender::kRtcpCast; | 264 packet_type_flags |= RtcpSender::kRtcpCast; |
| 263 cast_environment_->Logging()->InsertGenericEvent(now, kAckSent, | |
| 264 cast_message->ack_frame_id_); | |
| 265 } | 265 } |
| 266 if (receiver_log) { | 266 if (receiver_log) { |
| 267 packet_type_flags |= RtcpSender::kRtcpReceiverLog; | 267 packet_type_flags |= RtcpSender::kRtcpReceiverLog; |
| 268 } | 268 } |
| 269 if (rtcp_mode_ == kRtcpCompound || now >= next_time_to_send_rtcp_) { | 269 if (rtcp_mode_ == kRtcpCompound || now >= next_time_to_send_rtcp_) { |
| 270 packet_type_flags |= RtcpSender::kRtcpRr; | 270 packet_type_flags |= RtcpSender::kRtcpRr; |
| 271 | 271 |
| 272 report_block.remote_ssrc = 0; // Not needed to set send side. | 272 report_block.remote_ssrc = 0; // Not needed to set send side. |
| 273 report_block.media_ssrc = remote_ssrc_; // SSRC of the RTP packet sender. | 273 report_block.media_ssrc = remote_ssrc_; // SSRC of the RTP packet sender. |
| 274 if (rtp_receiver_statistics_) { | 274 if (rtp_receiver_statistics_) { |
| 275 rtp_receiver_statistics_->GetStatistics( | 275 rtp_receiver_statistics_->GetStatistics( |
| 276 &report_block.fraction_lost, | 276 &report_block.fraction_lost, |
| 277 &report_block.cumulative_lost, | 277 &report_block.cumulative_lost, |
| 278 &report_block.extended_high_sequence_number, | 278 &report_block.extended_high_sequence_number, |
| 279 &report_block.jitter); | 279 &report_block.jitter); |
| 280 cast_environment_->Logging()->InsertGenericEvent(now, kJitterMs, | 280 cast_environment_->Logging()->InsertGenericEvent(now, kJitterMs, |
| 281 report_block.jitter); | 281 report_block.jitter); |
| 282 cast_environment_->Logging()->InsertGenericEvent(now, kPacketLoss, | 282 cast_environment_->Logging()->InsertGenericEvent(now, kPacketLoss, |
| 283 report_block.fraction_lost); | 283 report_block.fraction_lost); |
| 284 | |
| 285 } | 284 } |
| 286 | 285 |
| 287 report_block.last_sr = last_report_received_; | 286 report_block.last_sr = last_report_received_; |
| 288 if (!time_last_report_received_.is_null()) { | 287 if (!time_last_report_received_.is_null()) { |
| 289 uint32 delay_seconds = 0; | 288 uint32 delay_seconds = 0; |
| 290 uint32 delay_fraction = 0; | 289 uint32 delay_fraction = 0; |
| 291 base::TimeDelta delta = now - time_last_report_received_; | 290 base::TimeDelta delta = now - time_last_report_received_; |
| 292 ConvertTimeToFractions(delta.InMicroseconds(), | 291 ConvertTimeToFractions(delta.InMicroseconds(), |
| 293 &delay_seconds, | 292 &delay_seconds, |
| 294 &delay_fraction); | 293 &delay_fraction); |
| (...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 502 int random = base::RandInt(0, 999); | 501 int random = base::RandInt(0, 999); |
| 503 base::TimeDelta time_to_next = (rtcp_interval_ / 2) + | 502 base::TimeDelta time_to_next = (rtcp_interval_ / 2) + |
| 504 (rtcp_interval_ * random / 1000); | 503 (rtcp_interval_ * random / 1000); |
| 505 | 504 |
| 506 base::TimeTicks now = cast_environment_->Clock()->NowTicks(); | 505 base::TimeTicks now = cast_environment_->Clock()->NowTicks(); |
| 507 next_time_to_send_rtcp_ = now + time_to_next; | 506 next_time_to_send_rtcp_ = now + time_to_next; |
| 508 } | 507 } |
| 509 | 508 |
| 510 } // namespace cast | 509 } // namespace cast |
| 511 } // namespace media | 510 } // namespace media |
| OLD | NEW |