Index: webrtc/modules/rtp_rtcp/source/rtcp_receiver.cc |
diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_receiver.cc b/webrtc/modules/rtp_rtcp/source/rtcp_receiver.cc |
index 0259b73ff4e12fd666fda20d4b986df85d9d22bd..bd57c8fb5de39c7d3806f5fdeda100a5210c09c7 100644 |
--- a/webrtc/modules/rtp_rtcp/source/rtcp_receiver.cc |
+++ b/webrtc/modules/rtp_rtcp/source/rtcp_receiver.cc |
@@ -25,9 +25,9 @@ |
#include "webrtc/system_wrappers/include/ntp_time.h" |
namespace webrtc { |
+using rtcp::ReportBlockInformation; |
using RTCPHelp::RTCPPacketInformation; |
using RTCPHelp::RTCPReceiveInformation; |
-using RTCPHelp::RTCPReportBlockInformation; |
using RTCPUtility::kBtVoipMetric; |
using RTCPUtility::RTCPCnameInformation; |
using RTCPUtility::RTCPPacketReportBlockItem; |
@@ -170,23 +170,23 @@ int32_t RTCPReceiver::RTT(uint32_t remoteSSRC, |
int64_t* maxRTT) const { |
CriticalSectionScoped lock(_criticalSectionRTCPReceiver); |
- RTCPReportBlockInformation* reportBlock = |
+ const ReportBlockInformation* report_block = |
GetReportBlockInformation(remoteSSRC, main_ssrc_); |
- if (reportBlock == NULL) { |
+ if (!report_block || !report_block->HasRtt()) { |
return -1; |
} |
if (RTT) { |
- *RTT = reportBlock->RTT; |
+ *RTT = report_block->LastRttMs(); |
} |
if (avgRTT) { |
- *avgRTT = reportBlock->avgRTT; |
+ *avgRTT = report_block->AvgRttMs(); |
} |
if (minRTT) { |
- *minRTT = reportBlock->minRTT; |
+ *minRTT = report_block->MinRttMs(); |
} |
if (maxRTT) { |
- *maxRTT = reportBlock->maxRTT; |
+ *maxRTT = report_block->MaxRttMs(); |
} |
return 0; |
} |
@@ -277,7 +277,7 @@ int32_t RTCPReceiver::StatisticsReceived( |
const ReportBlockInfoMap* info_map = &(it->second); |
ReportBlockInfoMap::const_iterator it_info = info_map->begin(); |
for (; it_info != info_map->end(); ++it_info) { |
- receiveBlocks->push_back(it_info->second->remoteReceiveBlock); |
+ receiveBlocks->push_back(it_info->second->LastBlock()); |
} |
} |
return 0; |
@@ -488,9 +488,9 @@ void RTCPReceiver::HandleReportBlock( |
return; |
} |
- RTCPReportBlockInformation* reportBlock = |
- CreateOrGetReportBlockInformation(remoteSSRC, |
- rtcpPacket.ReportBlockItem.SSRC); |
+ ReportBlockInformation* reportBlock = CreateOrGetReportBlockInformation( |
+ remoteSSRC, rtcpPacket.ReportBlockItem.SSRC); |
+ |
if (reportBlock == NULL) { |
LOG(LS_WARNING) << "Failed to CreateReportBlockInformation(" |
<< remoteSSRC << ")"; |
@@ -499,86 +499,30 @@ void RTCPReceiver::HandleReportBlock( |
_lastReceivedRrMs = _clock->TimeInMilliseconds(); |
const RTCPPacketReportBlockItem& rb = rtcpPacket.ReportBlockItem; |
- reportBlock->remoteReceiveBlock.remoteSSRC = remoteSSRC; |
- reportBlock->remoteReceiveBlock.sourceSSRC = rb.SSRC; |
- reportBlock->remoteReceiveBlock.fractionLost = rb.FractionLost; |
- reportBlock->remoteReceiveBlock.cumulativeLost = |
- rb.CumulativeNumOfPacketsLost; |
if (rb.ExtendedHighestSequenceNumber > |
- reportBlock->remoteReceiveBlock.extendedHighSeqNum) { |
+ reportBlock->LastBlock().extendedHighSeqNum) { |
// We have successfully delivered new RTP packets to the remote side after |
// the last RR was sent from the remote side. |
_lastIncreasedSequenceNumberMs = _lastReceivedRrMs; |
} |
- reportBlock->remoteReceiveBlock.extendedHighSeqNum = |
- rb.ExtendedHighestSequenceNumber; |
- reportBlock->remoteReceiveBlock.jitter = rb.Jitter; |
- reportBlock->remoteReceiveBlock.delaySinceLastSR = rb.DelayLastSR; |
- reportBlock->remoteReceiveBlock.lastSR = rb.LastSR; |
- |
- if (rtcpPacket.ReportBlockItem.Jitter > reportBlock->remoteMaxJitter) { |
- reportBlock->remoteMaxJitter = rtcpPacket.ReportBlockItem.Jitter; |
- } |
- |
- uint32_t send_time = rtcpPacket.ReportBlockItem.LastSR; |
- uint32_t rtt = 0; |
- |
- if (send_time > 0) { |
- uint32_t delay = rtcpPacket.ReportBlockItem.DelayLastSR; |
- // Local NTP time. |
- uint32_t receive_time = CompactNtp(NtpTime(*_clock)); |
- |
- // RTT in 1/(2^16) seconds. |
- uint32_t rtt_ntp = receive_time - delay - send_time; |
- // Convert to 1/1000 seconds (milliseconds). |
- uint32_t rtt_ms = CompactNtpIntervalToMs(rtt_ntp); |
- rtt = std::max<uint32_t>(rtt_ms, 1); |
- if (rtt > reportBlock->maxRTT) { |
- // Store max RTT. |
- reportBlock->maxRTT = rtt; |
- } |
- if (reportBlock->minRTT == 0) { |
- // First RTT. |
- reportBlock->minRTT = rtt; |
- } else if (rtt < reportBlock->minRTT) { |
- // Store min RTT. |
- reportBlock->minRTT = rtt; |
- } |
- // Store last RTT. |
- reportBlock->RTT = rtt; |
- |
- // store average RTT |
- if (reportBlock->numAverageCalcs != 0) { |
- float ac = static_cast<float>(reportBlock->numAverageCalcs); |
- float newAverage = |
- ((ac / (ac + 1)) * reportBlock->avgRTT) + ((1 / (ac + 1)) * rtt); |
- reportBlock->avgRTT = static_cast<int64_t>(newAverage + 0.5f); |
- } else { |
- // First RTT. |
- reportBlock->avgRTT = rtt; |
- } |
- reportBlock->numAverageCalcs++; |
- } |
- TRACE_COUNTER_ID1(TRACE_DISABLED_BY_DEFAULT("webrtc_rtp"), "RR_RTT", rb.SSRC, |
- rtt); |
+ reportBlock->AddBlock(rb, remoteSSRC, NtpTime(*_clock)); |
rtcpPacketInformation.AddReportInfo(*reportBlock); |
} |
-RTCPReportBlockInformation* RTCPReceiver::CreateOrGetReportBlockInformation( |
+ReportBlockInformation* RTCPReceiver::CreateOrGetReportBlockInformation( |
uint32_t remote_ssrc, |
uint32_t source_ssrc) { |
- RTCPReportBlockInformation* info = |
- GetReportBlockInformation(remote_ssrc, source_ssrc); |
- if (info == NULL) { |
- info = new RTCPReportBlockInformation; |
- _receivedReportBlockMap[source_ssrc][remote_ssrc] = info; |
+ ReportBlockInformation** info = |
+ &_receivedReportBlockMap[source_ssrc][remote_ssrc]; |
+ if (!*info) { |
+ *info = new ReportBlockInformation; |
} |
- return info; |
+ return *info; |
} |
-RTCPReportBlockInformation* RTCPReceiver::GetReportBlockInformation( |
+const ReportBlockInformation* RTCPReceiver::GetReportBlockInformation( |
uint32_t remote_ssrc, |
uint32_t source_ssrc) const { |
ReportBlockMap::const_iterator it = _receivedReportBlockMap.find(source_ssrc); |