| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| (...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 253 RTC_DCHECK(info); | 253 RTC_DCHECK(info); |
| 254 rtc::CritScope lock(&rtcp_receiver_lock_); | 254 rtc::CritScope lock(&rtcp_receiver_lock_); |
| 255 if (!last_received_xr_ntp_.Valid()) | 255 if (!last_received_xr_ntp_.Valid()) |
| 256 return false; | 256 return false; |
| 257 | 257 |
| 258 info->ssrc = remote_time_info_.ssrc; | 258 info->ssrc = remote_time_info_.ssrc; |
| 259 info->last_rr = remote_time_info_.last_rr; | 259 info->last_rr = remote_time_info_.last_rr; |
| 260 | 260 |
| 261 // Get the delay since last received report (RFC 3611). | 261 // Get the delay since last received report (RFC 3611). |
| 262 uint32_t receive_time_ntp = CompactNtp(last_received_xr_ntp_); | 262 uint32_t receive_time_ntp = CompactNtp(last_received_xr_ntp_); |
| 263 uint32_t now_ntp = CompactNtp(NtpTime(*clock_)); | 263 uint32_t now_ntp = CompactNtp(clock_->CurrentNtpTime()); |
| 264 | 264 |
| 265 info->delay_since_last_rr = now_ntp - receive_time_ntp; | 265 info->delay_since_last_rr = now_ntp - receive_time_ntp; |
| 266 return true; | 266 return true; |
| 267 } | 267 } |
| 268 | 268 |
| 269 int32_t RTCPReceiver::SenderInfoReceived(RTCPSenderInfo* sender_info) const { | 269 int32_t RTCPReceiver::SenderInfoReceived(RTCPSenderInfo* sender_info) const { |
| 270 RTC_DCHECK(sender_info); | 270 RTC_DCHECK(sender_info); |
| 271 rtc::CritScope lock(&rtcp_receiver_lock_); | 271 rtc::CritScope lock(&rtcp_receiver_lock_); |
| 272 if (!last_received_sr_ntp_.Valid()) | 272 if (!last_received_sr_ntp_.Valid()) |
| 273 return -1; | 273 return -1; |
| (...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 416 // Only signal that we have received a SR when we accept one. | 416 // Only signal that we have received a SR when we accept one. |
| 417 packet_information->packet_type_flags |= kRtcpSr; | 417 packet_information->packet_type_flags |= kRtcpSr; |
| 418 | 418 |
| 419 // Save the NTP time of this report. | 419 // Save the NTP time of this report. |
| 420 remote_sender_info_.NTPseconds = sender_report.ntp().seconds(); | 420 remote_sender_info_.NTPseconds = sender_report.ntp().seconds(); |
| 421 remote_sender_info_.NTPfraction = sender_report.ntp().fractions(); | 421 remote_sender_info_.NTPfraction = sender_report.ntp().fractions(); |
| 422 remote_sender_info_.RTPtimeStamp = sender_report.rtp_timestamp(); | 422 remote_sender_info_.RTPtimeStamp = sender_report.rtp_timestamp(); |
| 423 remote_sender_info_.sendPacketCount = sender_report.sender_packet_count(); | 423 remote_sender_info_.sendPacketCount = sender_report.sender_packet_count(); |
| 424 remote_sender_info_.sendOctetCount = sender_report.sender_octet_count(); | 424 remote_sender_info_.sendOctetCount = sender_report.sender_octet_count(); |
| 425 | 425 |
| 426 last_received_sr_ntp_.SetCurrent(*clock_); | 426 last_received_sr_ntp_ = clock_->CurrentNtpTime(); |
| 427 } else { | 427 } else { |
| 428 // We will only store the send report from one source, but | 428 // We will only store the send report from one source, but |
| 429 // we will store all the receive blocks. | 429 // we will store all the receive blocks. |
| 430 packet_information->packet_type_flags |= kRtcpRr; | 430 packet_information->packet_type_flags |= kRtcpRr; |
| 431 } | 431 } |
| 432 | 432 |
| 433 for (const rtcp::ReportBlock report_block : sender_report.report_blocks()) | 433 for (const rtcp::ReportBlock report_block : sender_report.report_blocks()) |
| 434 HandleReportBlock(report_block, packet_information, remote_ssrc); | 434 HandleReportBlock(report_block, packet_information, remote_ssrc); |
| 435 } | 435 } |
| 436 | 436 |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 497 | 497 |
| 498 int64_t rtt_ms = 0; | 498 int64_t rtt_ms = 0; |
| 499 uint32_t send_time_ntp = report_block.last_sr(); | 499 uint32_t send_time_ntp = report_block.last_sr(); |
| 500 // RFC3550, section 6.4.1, LSR field discription states: | 500 // RFC3550, section 6.4.1, LSR field discription states: |
| 501 // If no SR has been received yet, the field is set to zero. | 501 // If no SR has been received yet, the field is set to zero. |
| 502 // Receiver rtp_rtcp module is not expected to calculate rtt using | 502 // Receiver rtp_rtcp module is not expected to calculate rtt using |
| 503 // Sender Reports even if it accidentally can. | 503 // Sender Reports even if it accidentally can. |
| 504 if (!receiver_only_ && send_time_ntp != 0) { | 504 if (!receiver_only_ && send_time_ntp != 0) { |
| 505 uint32_t delay_ntp = report_block.delay_since_last_sr(); | 505 uint32_t delay_ntp = report_block.delay_since_last_sr(); |
| 506 // Local NTP time. | 506 // Local NTP time. |
| 507 uint32_t receive_time_ntp = CompactNtp(NtpTime(*clock_)); | 507 uint32_t receive_time_ntp = CompactNtp(clock_->CurrentNtpTime()); |
| 508 | 508 |
| 509 // RTT in 1/(2^16) seconds. | 509 // RTT in 1/(2^16) seconds. |
| 510 uint32_t rtt_ntp = receive_time_ntp - delay_ntp - send_time_ntp; | 510 uint32_t rtt_ntp = receive_time_ntp - delay_ntp - send_time_ntp; |
| 511 // Convert to 1/1000 seconds (milliseconds). | 511 // Convert to 1/1000 seconds (milliseconds). |
| 512 rtt_ms = CompactNtpRttToMs(rtt_ntp); | 512 rtt_ms = CompactNtpRttToMs(rtt_ntp); |
| 513 if (rtt_ms > report_block_info->max_rtt_ms) | 513 if (rtt_ms > report_block_info->max_rtt_ms) |
| 514 report_block_info->max_rtt_ms = rtt_ms; | 514 report_block_info->max_rtt_ms = rtt_ms; |
| 515 | 515 |
| 516 if (report_block_info->num_rtts == 0 || | 516 if (report_block_info->num_rtts == 0 || |
| 517 rtt_ms < report_block_info->min_rtt_ms) | 517 rtt_ms < report_block_info->min_rtt_ms) |
| (...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 702 HandleXrDlrrReportBlock(time_info); | 702 HandleXrDlrrReportBlock(time_info); |
| 703 | 703 |
| 704 if (xr.target_bitrate()) | 704 if (xr.target_bitrate()) |
| 705 HandleXrTargetBitrate(*xr.target_bitrate(), packet_information); | 705 HandleXrTargetBitrate(*xr.target_bitrate(), packet_information); |
| 706 } | 706 } |
| 707 | 707 |
| 708 void RTCPReceiver::HandleXrReceiveReferenceTime(uint32_t sender_ssrc, | 708 void RTCPReceiver::HandleXrReceiveReferenceTime(uint32_t sender_ssrc, |
| 709 const rtcp::Rrtr& rrtr) { | 709 const rtcp::Rrtr& rrtr) { |
| 710 remote_time_info_.ssrc = sender_ssrc; | 710 remote_time_info_.ssrc = sender_ssrc; |
| 711 remote_time_info_.last_rr = CompactNtp(rrtr.ntp()); | 711 remote_time_info_.last_rr = CompactNtp(rrtr.ntp()); |
| 712 last_received_xr_ntp_.SetCurrent(*clock_); | 712 last_received_xr_ntp_ = clock_->CurrentNtpTime(); |
| 713 } | 713 } |
| 714 | 714 |
| 715 void RTCPReceiver::HandleXrDlrrReportBlock(const rtcp::ReceiveTimeInfo& rti) { | 715 void RTCPReceiver::HandleXrDlrrReportBlock(const rtcp::ReceiveTimeInfo& rti) { |
| 716 if (registered_ssrcs_.count(rti.ssrc) == 0) // Not to us. | 716 if (registered_ssrcs_.count(rti.ssrc) == 0) // Not to us. |
| 717 return; | 717 return; |
| 718 | 718 |
| 719 // Caller should explicitly enable rtt calculation using extended reports. | 719 // Caller should explicitly enable rtt calculation using extended reports. |
| 720 if (!xr_rrtr_status_) | 720 if (!xr_rrtr_status_) |
| 721 return; | 721 return; |
| 722 | 722 |
| 723 // The send_time and delay_rr fields are in units of 1/2^16 sec. | 723 // The send_time and delay_rr fields are in units of 1/2^16 sec. |
| 724 uint32_t send_time_ntp = rti.last_rr; | 724 uint32_t send_time_ntp = rti.last_rr; |
| 725 // RFC3611, section 4.5, LRR field discription states: | 725 // RFC3611, section 4.5, LRR field discription states: |
| 726 // If no such block has been received, the field is set to zero. | 726 // If no such block has been received, the field is set to zero. |
| 727 if (send_time_ntp == 0) | 727 if (send_time_ntp == 0) |
| 728 return; | 728 return; |
| 729 | 729 |
| 730 uint32_t delay_ntp = rti.delay_since_last_rr; | 730 uint32_t delay_ntp = rti.delay_since_last_rr; |
| 731 uint32_t now_ntp = CompactNtp(NtpTime(*clock_)); | 731 uint32_t now_ntp = CompactNtp(clock_->CurrentNtpTime()); |
| 732 | 732 |
| 733 uint32_t rtt_ntp = now_ntp - delay_ntp - send_time_ntp; | 733 uint32_t rtt_ntp = now_ntp - delay_ntp - send_time_ntp; |
| 734 xr_rr_rtt_ms_ = CompactNtpRttToMs(rtt_ntp); | 734 xr_rr_rtt_ms_ = CompactNtpRttToMs(rtt_ntp); |
| 735 } | 735 } |
| 736 | 736 |
| 737 void RTCPReceiver::HandleXrTargetBitrate( | 737 void RTCPReceiver::HandleXrTargetBitrate( |
| 738 const rtcp::TargetBitrate& target_bitrate, | 738 const rtcp::TargetBitrate& target_bitrate, |
| 739 PacketInformation* packet_information) { | 739 PacketInformation* packet_information) { |
| 740 BitrateAllocation bitrate_allocation; | 740 BitrateAllocation bitrate_allocation; |
| 741 for (const auto& item : target_bitrate.GetTargetBitrates()) { | 741 for (const auto& item : target_bitrate.GetTargetBitrates()) { |
| (...skipping 343 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1085 } else { | 1085 } else { |
| 1086 candidates.push_back(it->second.tmmbr_item); | 1086 candidates.push_back(it->second.tmmbr_item); |
| 1087 ++it; | 1087 ++it; |
| 1088 } | 1088 } |
| 1089 } | 1089 } |
| 1090 } | 1090 } |
| 1091 return candidates; | 1091 return candidates; |
| 1092 } | 1092 } |
| 1093 | 1093 |
| 1094 } // namespace webrtc | 1094 } // namespace webrtc |
| OLD | NEW |