Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(596)

Side by Side Diff: webrtc/modules/rtp_rtcp/source/rtcp_receiver.cc

Issue 2588753002: Style renames in RTCPReceiver implementation (Closed)
Patch Set: added _ntp suffix to compact ntp times Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
11 #include "webrtc/modules/rtp_rtcp/source/rtcp_receiver.h" 11 #include "webrtc/modules/rtp_rtcp/source/rtcp_receiver.h"
12 12
13 #include <assert.h>
14 #include <string.h> 13 #include <string.h>
15 14
16 #include <limits> 15 #include <limits>
17 #include <map> 16 #include <map>
18 #include <memory> 17 #include <memory>
19 #include <utility> 18 #include <utility>
20 #include <vector> 19 #include <vector>
21 20
22 #include "webrtc/base/checks.h" 21 #include "webrtc/base/checks.h"
23 #include "webrtc/base/logging.h" 22 #include "webrtc/base/logging.h"
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
101 100
102 RTCPReceiver::RTCPReceiver( 101 RTCPReceiver::RTCPReceiver(
103 Clock* clock, 102 Clock* clock,
104 bool receiver_only, 103 bool receiver_only,
105 RtcpPacketTypeCounterObserver* packet_type_counter_observer, 104 RtcpPacketTypeCounterObserver* packet_type_counter_observer,
106 RtcpBandwidthObserver* rtcp_bandwidth_observer, 105 RtcpBandwidthObserver* rtcp_bandwidth_observer,
107 RtcpIntraFrameObserver* rtcp_intra_frame_observer, 106 RtcpIntraFrameObserver* rtcp_intra_frame_observer,
108 TransportFeedbackObserver* transport_feedback_observer, 107 TransportFeedbackObserver* transport_feedback_observer,
109 VideoBitrateAllocationObserver* bitrate_allocation_observer, 108 VideoBitrateAllocationObserver* bitrate_allocation_observer,
110 ModuleRtpRtcp* owner) 109 ModuleRtpRtcp* owner)
111 : _clock(clock), 110 : clock_(clock),
112 receiver_only_(receiver_only), 111 receiver_only_(receiver_only),
113 _rtpRtcp(*owner), 112 rtp_rtcp_(owner),
114 rtcp_bandwidth_observer_(rtcp_bandwidth_observer), 113 rtcp_bandwidth_observer_(rtcp_bandwidth_observer),
115 rtcp_intra_frame_observer_(rtcp_intra_frame_observer), 114 rtcp_intra_frame_observer_(rtcp_intra_frame_observer),
116 transport_feedback_observer_(transport_feedback_observer), 115 transport_feedback_observer_(transport_feedback_observer),
117 bitrate_allocation_observer_(bitrate_allocation_observer), 116 bitrate_allocation_observer_(bitrate_allocation_observer),
118 main_ssrc_(0), 117 main_ssrc_(0),
119 _remoteSSRC(0), 118 remote_ssrc_(0),
120 _remoteSenderInfo(),
121 xr_rrtr_status_(false), 119 xr_rrtr_status_(false),
122 xr_rr_rtt_ms_(0), 120 xr_rr_rtt_ms_(0),
123 _lastReceivedRrMs(0), 121 last_received_rr_ms_(0),
124 _lastIncreasedSequenceNumberMs(0), 122 last_increased_sequence_number_ms_(0),
125 stats_callback_(nullptr), 123 stats_callback_(nullptr),
126 packet_type_counter_observer_(packet_type_counter_observer), 124 packet_type_counter_observer_(packet_type_counter_observer),
127 num_skipped_packets_(0), 125 num_skipped_packets_(0),
128 last_skipped_packets_warning_(clock->TimeInMilliseconds()) { 126 last_skipped_packets_warning_ms_(clock->TimeInMilliseconds()) {
129 memset(&_remoteSenderInfo, 0, sizeof(_remoteSenderInfo)); 127 RTC_DCHECK(owner);
128 memset(&remote_sender_info_, 0, sizeof(remote_sender_info_));
130 } 129 }
131 130
132 RTCPReceiver::~RTCPReceiver() {} 131 RTCPReceiver::~RTCPReceiver() {}
133 132
134 bool RTCPReceiver::IncomingPacket(const uint8_t* packet, size_t packet_size) { 133 bool RTCPReceiver::IncomingPacket(const uint8_t* packet, size_t packet_size) {
135 if (packet_size == 0) { 134 if (packet_size == 0) {
136 LOG(LS_WARNING) << "Incoming empty RTCP packet"; 135 LOG(LS_WARNING) << "Incoming empty RTCP packet";
137 return false; 136 return false;
138 } 137 }
139 138
140 PacketInformation packet_information; 139 PacketInformation packet_information;
141 if (!ParseCompoundPacket(packet, packet + packet_size, &packet_information)) 140 if (!ParseCompoundPacket(packet, packet + packet_size, &packet_information))
142 return false; 141 return false;
143 TriggerCallbacksFromRTCPPacket(packet_information); 142 TriggerCallbacksFromRtcpPacket(packet_information);
144 return true; 143 return true;
145 } 144 }
146 145
147 int64_t RTCPReceiver::LastReceivedReceiverReport() const { 146 int64_t RTCPReceiver::LastReceivedReceiverReport() const {
148 rtc::CritScope lock(&_criticalSectionRTCPReceiver); 147 rtc::CritScope lock(&rtcp_receiver_lock_);
149 int64_t last_received_rr = -1; 148 int64_t last_received_rr = -1;
150 for (const auto& kv : received_infos_) 149 for (const auto& kv : received_infos_)
151 if (kv.second.last_time_received_ms > last_received_rr) 150 if (kv.second.last_time_received_ms > last_received_rr)
152 last_received_rr = kv.second.last_time_received_ms; 151 last_received_rr = kv.second.last_time_received_ms;
153 return last_received_rr; 152 return last_received_rr;
154 } 153 }
155 154
156 void RTCPReceiver::SetRemoteSSRC(uint32_t ssrc) { 155 void RTCPReceiver::SetRemoteSSRC(uint32_t ssrc) {
157 rtc::CritScope lock(&_criticalSectionRTCPReceiver); 156 rtc::CritScope lock(&rtcp_receiver_lock_);
158 157 // New SSRC reset old reports.
159 // new SSRC reset old reports 158 memset(&remote_sender_info_, 0, sizeof(remote_sender_info_));
160 memset(&_remoteSenderInfo, 0, sizeof(_remoteSenderInfo));
161 last_received_sr_ntp_.Reset(); 159 last_received_sr_ntp_.Reset();
162 160 remote_ssrc_ = ssrc;
163 _remoteSSRC = ssrc;
164 } 161 }
165 162
166 uint32_t RTCPReceiver::RemoteSSRC() const { 163 uint32_t RTCPReceiver::RemoteSSRC() const {
167 rtc::CritScope lock(&_criticalSectionRTCPReceiver); 164 rtc::CritScope lock(&rtcp_receiver_lock_);
168 return _remoteSSRC; 165 return remote_ssrc_;
169 } 166 }
170 167
171 void RTCPReceiver::SetSsrcs(uint32_t main_ssrc, 168 void RTCPReceiver::SetSsrcs(uint32_t main_ssrc,
172 const std::set<uint32_t>& registered_ssrcs) { 169 const std::set<uint32_t>& registered_ssrcs) {
173 rtc::CritScope lock(&_criticalSectionRTCPReceiver); 170 rtc::CritScope lock(&rtcp_receiver_lock_);
174 main_ssrc_ = main_ssrc; 171 main_ssrc_ = main_ssrc;
175 registered_ssrcs_ = registered_ssrcs; 172 registered_ssrcs_ = registered_ssrcs;
176 } 173 }
177 174
178 int32_t RTCPReceiver::RTT(uint32_t remote_ssrc, 175 int32_t RTCPReceiver::RTT(uint32_t remote_ssrc,
179 int64_t* last_rtt_ms, 176 int64_t* last_rtt_ms,
180 int64_t* avg_rtt_ms, 177 int64_t* avg_rtt_ms,
181 int64_t* min_rtt_ms, 178 int64_t* min_rtt_ms,
182 int64_t* max_rtt_ms) const { 179 int64_t* max_rtt_ms) const {
183 rtc::CritScope lock(&_criticalSectionRTCPReceiver); 180 rtc::CritScope lock(&rtcp_receiver_lock_);
184 181
185 auto it = received_report_blocks_.find(main_ssrc_); 182 auto it = received_report_blocks_.find(main_ssrc_);
186 if (it == received_report_blocks_.end()) 183 if (it == received_report_blocks_.end())
187 return -1; 184 return -1;
188 185
189 auto it_info = it->second.find(remote_ssrc); 186 auto it_info = it->second.find(remote_ssrc);
190 if (it_info == it->second.end()) 187 if (it_info == it->second.end())
191 return -1; 188 return -1;
192 189
193 const ReportBlockWithRtt* report_block = &it_info->second; 190 const ReportBlockWithRtt* report_block = &it_info->second;
(...skipping 10 matching lines...) Expand all
204 if (min_rtt_ms) 201 if (min_rtt_ms)
205 *min_rtt_ms = report_block->min_rtt_ms; 202 *min_rtt_ms = report_block->min_rtt_ms;
206 203
207 if (max_rtt_ms) 204 if (max_rtt_ms)
208 *max_rtt_ms = report_block->max_rtt_ms; 205 *max_rtt_ms = report_block->max_rtt_ms;
209 206
210 return 0; 207 return 0;
211 } 208 }
212 209
213 void RTCPReceiver::SetRtcpXrRrtrStatus(bool enable) { 210 void RTCPReceiver::SetRtcpXrRrtrStatus(bool enable) {
214 rtc::CritScope lock(&_criticalSectionRTCPReceiver); 211 rtc::CritScope lock(&rtcp_receiver_lock_);
215 xr_rrtr_status_ = enable; 212 xr_rrtr_status_ = enable;
216 } 213 }
217 214
218 bool RTCPReceiver::GetAndResetXrRrRtt(int64_t* rtt_ms) { 215 bool RTCPReceiver::GetAndResetXrRrRtt(int64_t* rtt_ms) {
219 assert(rtt_ms); 216 RTC_DCHECK(rtt_ms);
220 rtc::CritScope lock(&_criticalSectionRTCPReceiver); 217 rtc::CritScope lock(&rtcp_receiver_lock_);
221 if (xr_rr_rtt_ms_ == 0) { 218 if (xr_rr_rtt_ms_ == 0) {
222 return false; 219 return false;
223 } 220 }
224 *rtt_ms = xr_rr_rtt_ms_; 221 *rtt_ms = xr_rr_rtt_ms_;
225 xr_rr_rtt_ms_ = 0; 222 xr_rr_rtt_ms_ = 0;
226 return true; 223 return true;
227 } 224 }
228 225
229 bool RTCPReceiver::NTP(uint32_t* ReceivedNTPsecs, 226 bool RTCPReceiver::NTP(uint32_t* received_ntp_secs,
230 uint32_t* ReceivedNTPfrac, 227 uint32_t* received_ntp_frac,
231 uint32_t* RTCPArrivalTimeSecs, 228 uint32_t* rtcp_arrival_time_secs,
232 uint32_t* RTCPArrivalTimeFrac, 229 uint32_t* rtcp_arrival_time_frac,
233 uint32_t* rtcp_timestamp) const { 230 uint32_t* rtcp_timestamp) const {
234 rtc::CritScope lock(&_criticalSectionRTCPReceiver); 231 rtc::CritScope lock(&rtcp_receiver_lock_);
235 if (!last_received_sr_ntp_.Valid()) 232 if (!last_received_sr_ntp_.Valid())
236 return false; 233 return false;
237 234
238 // NTP from incoming SenderReport. 235 // NTP from incoming SenderReport.
239 if (ReceivedNTPsecs) 236 if (received_ntp_secs)
240 *ReceivedNTPsecs = _remoteSenderInfo.NTPseconds; 237 *received_ntp_secs = remote_sender_info_.NTPseconds;
241 if (ReceivedNTPfrac) 238 if (received_ntp_frac)
242 *ReceivedNTPfrac = _remoteSenderInfo.NTPfraction; 239 *received_ntp_frac = remote_sender_info_.NTPfraction;
243 240
244 // Rtp time from incoming SenderReport. 241 // Rtp time from incoming SenderReport.
245 if (rtcp_timestamp) 242 if (rtcp_timestamp)
246 *rtcp_timestamp = _remoteSenderInfo.RTPtimeStamp; 243 *rtcp_timestamp = remote_sender_info_.RTPtimeStamp;
247 244
248 // Local NTP time when we received a RTCP packet with a send block. 245 // Local NTP time when we received a RTCP packet with a send block.
249 if (RTCPArrivalTimeSecs) 246 if (rtcp_arrival_time_secs)
250 *RTCPArrivalTimeSecs = last_received_sr_ntp_.seconds(); 247 *rtcp_arrival_time_secs = last_received_sr_ntp_.seconds();
251 if (RTCPArrivalTimeFrac) 248 if (rtcp_arrival_time_frac)
252 *RTCPArrivalTimeFrac = last_received_sr_ntp_.fractions(); 249 *rtcp_arrival_time_frac = last_received_sr_ntp_.fractions();
253 250
254 return true; 251 return true;
255 } 252 }
256 253
257 bool RTCPReceiver::LastReceivedXrReferenceTimeInfo( 254 bool RTCPReceiver::LastReceivedXrReferenceTimeInfo(
258 rtcp::ReceiveTimeInfo* info) const { 255 rtcp::ReceiveTimeInfo* info) const {
259 RTC_DCHECK(info); 256 RTC_DCHECK(info);
260 rtc::CritScope lock(&_criticalSectionRTCPReceiver); 257 rtc::CritScope lock(&rtcp_receiver_lock_);
261 if (!last_received_xr_ntp_.Valid()) 258 if (!last_received_xr_ntp_.Valid())
262 return false; 259 return false;
263 260
264 info->ssrc = remote_time_info_.ssrc; 261 info->ssrc = remote_time_info_.ssrc;
265 info->last_rr = remote_time_info_.last_rr; 262 info->last_rr = remote_time_info_.last_rr;
266 263
267 // Get the delay since last received report (RFC 3611). 264 // Get the delay since last received report (RFC 3611).
268 uint32_t receive_time = CompactNtp(last_received_xr_ntp_); 265 uint32_t receive_time_ntp = CompactNtp(last_received_xr_ntp_);
269 uint32_t now = CompactNtp(NtpTime(*_clock)); 266 uint32_t now_ntp = CompactNtp(NtpTime(*clock_));
270 267
271 info->delay_since_last_rr = now - receive_time; 268 info->delay_since_last_rr = now_ntp - receive_time_ntp;
272 return true; 269 return true;
273 } 270 }
274 271
275 int32_t RTCPReceiver::SenderInfoReceived(RTCPSenderInfo* senderInfo) const { 272 int32_t RTCPReceiver::SenderInfoReceived(RTCPSenderInfo* sender_info) const {
276 assert(senderInfo); 273 RTC_DCHECK(sender_info);
277 rtc::CritScope lock(&_criticalSectionRTCPReceiver); 274 rtc::CritScope lock(&rtcp_receiver_lock_);
278 if (!last_received_sr_ntp_.Valid()) 275 if (!last_received_sr_ntp_.Valid())
279 return -1; 276 return -1;
280 277
281 memcpy(senderInfo, &(_remoteSenderInfo), sizeof(RTCPSenderInfo)); 278 memcpy(sender_info, &remote_sender_info_, sizeof(RTCPSenderInfo));
282 return 0; 279 return 0;
283 } 280 }
284 281
285 // We can get multiple receive reports when we receive the report from a CE. 282 // We can get multiple receive reports when we receive the report from a CE.
286 int32_t RTCPReceiver::StatisticsReceived( 283 int32_t RTCPReceiver::StatisticsReceived(
287 std::vector<RTCPReportBlock>* receive_blocks) const { 284 std::vector<RTCPReportBlock>* receive_blocks) const {
288 RTC_DCHECK(receive_blocks); 285 RTC_DCHECK(receive_blocks);
289 rtc::CritScope lock(&_criticalSectionRTCPReceiver); 286 rtc::CritScope lock(&rtcp_receiver_lock_);
290 for (const auto& reports_per_receiver : received_report_blocks_) 287 for (const auto& reports_per_receiver : received_report_blocks_)
291 for (const auto& report : reports_per_receiver.second) 288 for (const auto& report : reports_per_receiver.second)
292 receive_blocks->push_back(report.second.report_block); 289 receive_blocks->push_back(report.second.report_block);
293 return 0; 290 return 0;
294 } 291 }
295 292
296 bool RTCPReceiver::ParseCompoundPacket(const uint8_t* packet_begin, 293 bool RTCPReceiver::ParseCompoundPacket(const uint8_t* packet_begin,
297 const uint8_t* packet_end, 294 const uint8_t* packet_end,
298 PacketInformation* packet_information) { 295 PacketInformation* packet_information) {
299 rtc::CritScope lock(&_criticalSectionRTCPReceiver); 296 rtc::CritScope lock(&rtcp_receiver_lock_);
300 297
301 CommonHeader rtcp_block; 298 CommonHeader rtcp_block;
302 for (const uint8_t* next_block = packet_begin; next_block != packet_end; 299 for (const uint8_t* next_block = packet_begin; next_block != packet_end;
303 next_block = rtcp_block.NextPacket()) { 300 next_block = rtcp_block.NextPacket()) {
304 ptrdiff_t remaining_blocks_size = packet_end - next_block; 301 ptrdiff_t remaining_blocks_size = packet_end - next_block;
305 RTC_DCHECK_GT(remaining_blocks_size, 0); 302 RTC_DCHECK_GT(remaining_blocks_size, 0);
306 if (!rtcp_block.Parse(next_block, remaining_blocks_size)) { 303 if (!rtcp_block.Parse(next_block, remaining_blocks_size)) {
307 if (next_block == packet_begin) { 304 if (next_block == packet_begin) {
308 // Failed to parse 1st header, nothing was extracted from this packet. 305 // Failed to parse 1st header, nothing was extracted from this packet.
309 LOG(LS_WARNING) << "Incoming invalid RTCP packet"; 306 LOG(LS_WARNING) << "Incoming invalid RTCP packet";
310 return false; 307 return false;
311 } 308 }
312 ++num_skipped_packets_; 309 ++num_skipped_packets_;
313 break; 310 break;
314 } 311 }
315 312
316 if (packet_type_counter_.first_packet_time_ms == -1) 313 if (packet_type_counter_.first_packet_time_ms == -1)
317 packet_type_counter_.first_packet_time_ms = _clock->TimeInMilliseconds(); 314 packet_type_counter_.first_packet_time_ms = clock_->TimeInMilliseconds();
318 315
319 switch (rtcp_block.type()) { 316 switch (rtcp_block.type()) {
320 case rtcp::SenderReport::kPacketType: 317 case rtcp::SenderReport::kPacketType:
321 HandleSenderReport(rtcp_block, packet_information); 318 HandleSenderReport(rtcp_block, packet_information);
322 break; 319 break;
323 case rtcp::ReceiverReport::kPacketType: 320 case rtcp::ReceiverReport::kPacketType:
324 HandleReceiverReport(rtcp_block, packet_information); 321 HandleReceiverReport(rtcp_block, packet_information);
325 break; 322 break;
326 case rtcp::Sdes::kPacketType: 323 case rtcp::Sdes::kPacketType:
327 HandleSDES(rtcp_block, packet_information); 324 HandleSdes(rtcp_block, packet_information);
328 break; 325 break;
329 case rtcp::ExtendedReports::kPacketType: 326 case rtcp::ExtendedReports::kPacketType:
330 HandleXr(rtcp_block, packet_information); 327 HandleXr(rtcp_block, packet_information);
331 break; 328 break;
332 case rtcp::Bye::kPacketType: 329 case rtcp::Bye::kPacketType:
333 HandleBYE(rtcp_block); 330 HandleBye(rtcp_block);
334 break; 331 break;
335 case rtcp::Rtpfb::kPacketType: 332 case rtcp::Rtpfb::kPacketType:
336 switch (rtcp_block.fmt()) { 333 switch (rtcp_block.fmt()) {
337 case rtcp::Nack::kFeedbackMessageType: 334 case rtcp::Nack::kFeedbackMessageType:
338 HandleNACK(rtcp_block, packet_information); 335 HandleNack(rtcp_block, packet_information);
339 break; 336 break;
340 case rtcp::Tmmbr::kFeedbackMessageType: 337 case rtcp::Tmmbr::kFeedbackMessageType:
341 HandleTMMBR(rtcp_block, packet_information); 338 HandleTmmbr(rtcp_block, packet_information);
342 break; 339 break;
343 case rtcp::Tmmbn::kFeedbackMessageType: 340 case rtcp::Tmmbn::kFeedbackMessageType:
344 HandleTMMBN(rtcp_block, packet_information); 341 HandleTmmbn(rtcp_block, packet_information);
345 break; 342 break;
346 case rtcp::RapidResyncRequest::kFeedbackMessageType: 343 case rtcp::RapidResyncRequest::kFeedbackMessageType:
347 HandleSR_REQ(rtcp_block, packet_information); 344 HandleSrReq(rtcp_block, packet_information);
348 break; 345 break;
349 case rtcp::TransportFeedback::kFeedbackMessageType: 346 case rtcp::TransportFeedback::kFeedbackMessageType:
350 HandleTransportFeedback(rtcp_block, packet_information); 347 HandleTransportFeedback(rtcp_block, packet_information);
351 break; 348 break;
352 default: 349 default:
353 ++num_skipped_packets_; 350 ++num_skipped_packets_;
354 break; 351 break;
355 } 352 }
356 break; 353 break;
357 case rtcp::Psfb::kPacketType: 354 case rtcp::Psfb::kPacketType:
358 switch (rtcp_block.fmt()) { 355 switch (rtcp_block.fmt()) {
359 case rtcp::Pli::kFeedbackMessageType: 356 case rtcp::Pli::kFeedbackMessageType:
360 HandlePLI(rtcp_block, packet_information); 357 HandlePli(rtcp_block, packet_information);
361 break; 358 break;
362 case rtcp::Sli::kFeedbackMessageType: 359 case rtcp::Sli::kFeedbackMessageType:
363 HandleSLI(rtcp_block, packet_information); 360 HandleSli(rtcp_block, packet_information);
364 break; 361 break;
365 case rtcp::Rpsi::kFeedbackMessageType: 362 case rtcp::Rpsi::kFeedbackMessageType:
366 HandleRPSI(rtcp_block, packet_information); 363 HandleRpsi(rtcp_block, packet_information);
367 break; 364 break;
368 case rtcp::Fir::kFeedbackMessageType: 365 case rtcp::Fir::kFeedbackMessageType:
369 HandleFIR(rtcp_block, packet_information); 366 HandleFir(rtcp_block, packet_information);
370 break; 367 break;
371 case rtcp::Remb::kFeedbackMessageType: 368 case rtcp::Remb::kFeedbackMessageType:
372 HandlePsfbApp(rtcp_block, packet_information); 369 HandlePsfbApp(rtcp_block, packet_information);
373 break; 370 break;
374 default: 371 default:
375 ++num_skipped_packets_; 372 ++num_skipped_packets_;
376 break; 373 break;
377 } 374 }
378 break; 375 break;
379 default: 376 default:
380 ++num_skipped_packets_; 377 ++num_skipped_packets_;
381 break; 378 break;
382 } 379 }
383 } 380 }
384 381
385 if (packet_type_counter_observer_ != NULL) { 382 if (packet_type_counter_observer_) {
386 packet_type_counter_observer_->RtcpPacketTypesCounterUpdated( 383 packet_type_counter_observer_->RtcpPacketTypesCounterUpdated(
387 main_ssrc_, packet_type_counter_); 384 main_ssrc_, packet_type_counter_);
388 } 385 }
389 386
390 int64_t now = _clock->TimeInMilliseconds(); 387 int64_t now_ms = clock_->TimeInMilliseconds();
391 if (now - last_skipped_packets_warning_ >= kMaxWarningLogIntervalMs && 388 if (now_ms - last_skipped_packets_warning_ms_ >= kMaxWarningLogIntervalMs &&
392 num_skipped_packets_ > 0) { 389 num_skipped_packets_ > 0) {
393 last_skipped_packets_warning_ = now; 390 last_skipped_packets_warning_ms_ = now_ms;
394 LOG(LS_WARNING) << num_skipped_packets_ 391 LOG(LS_WARNING) << num_skipped_packets_
395 << " RTCP blocks were skipped due to being malformed or of " 392 << " RTCP blocks were skipped due to being malformed or of "
396 "unrecognized/unsupported type, during the past " 393 "unrecognized/unsupported type, during the past "
397 << (kMaxWarningLogIntervalMs / 1000) << " second period."; 394 << (kMaxWarningLogIntervalMs / 1000) << " second period.";
398 } 395 }
399 396
400 return true; 397 return true;
401 } 398 }
402 399
403 void RTCPReceiver::HandleSenderReport(const CommonHeader& rtcp_block, 400 void RTCPReceiver::HandleSenderReport(const CommonHeader& rtcp_block,
404 PacketInformation* packet_information) { 401 PacketInformation* packet_information) {
405 rtcp::SenderReport sender_report; 402 rtcp::SenderReport sender_report;
406 if (!sender_report.Parse(rtcp_block)) { 403 if (!sender_report.Parse(rtcp_block)) {
407 ++num_skipped_packets_; 404 ++num_skipped_packets_;
408 return; 405 return;
409 } 406 }
410 407
411 const uint32_t remoteSSRC = sender_report.sender_ssrc(); 408 const uint32_t remote_ssrc = sender_report.sender_ssrc();
412 409
413 packet_information->remote_ssrc = remoteSSRC; 410 packet_information->remote_ssrc = remote_ssrc;
414 411
415 CreateReceiveInformation(remoteSSRC); 412 CreateReceiveInformation(remote_ssrc);
416 413
417 TRACE_EVENT_INSTANT2(TRACE_DISABLED_BY_DEFAULT("webrtc_rtp"), "SR", 414 TRACE_EVENT_INSTANT2(TRACE_DISABLED_BY_DEFAULT("webrtc_rtp"), "SR",
418 "remote_ssrc", remoteSSRC, "ssrc", main_ssrc_); 415 "remote_ssrc", remote_ssrc, "ssrc", main_ssrc_);
419 416
420 // Have I received RTP packets from this party? 417 // Have I received RTP packets from this party?
421 if (_remoteSSRC == remoteSSRC) { 418 if (remote_ssrc_ == remote_ssrc) {
422 // Only signal that we have received a SR when we accept one. 419 // Only signal that we have received a SR when we accept one.
423 packet_information->packet_type_flags |= kRtcpSr; 420 packet_information->packet_type_flags |= kRtcpSr;
424 421
425 // Save the NTP time of this report. 422 // Save the NTP time of this report.
426 _remoteSenderInfo.NTPseconds = sender_report.ntp().seconds(); 423 remote_sender_info_.NTPseconds = sender_report.ntp().seconds();
427 _remoteSenderInfo.NTPfraction = sender_report.ntp().fractions(); 424 remote_sender_info_.NTPfraction = sender_report.ntp().fractions();
428 _remoteSenderInfo.RTPtimeStamp = sender_report.rtp_timestamp(); 425 remote_sender_info_.RTPtimeStamp = sender_report.rtp_timestamp();
429 _remoteSenderInfo.sendPacketCount = sender_report.sender_packet_count(); 426 remote_sender_info_.sendPacketCount = sender_report.sender_packet_count();
430 _remoteSenderInfo.sendOctetCount = sender_report.sender_octet_count(); 427 remote_sender_info_.sendOctetCount = sender_report.sender_octet_count();
431 428
432 last_received_sr_ntp_.SetCurrent(*_clock); 429 last_received_sr_ntp_.SetCurrent(*clock_);
433 } else { 430 } else {
434 // We will only store the send report from one source, but 431 // We will only store the send report from one source, but
435 // we will store all the receive blocks. 432 // we will store all the receive blocks.
436 packet_information->packet_type_flags |= kRtcpRr; 433 packet_information->packet_type_flags |= kRtcpRr;
437 } 434 }
438 435
439 for (const rtcp::ReportBlock report_block : sender_report.report_blocks()) 436 for (const rtcp::ReportBlock report_block : sender_report.report_blocks())
440 HandleReportBlock(report_block, packet_information, remoteSSRC); 437 HandleReportBlock(report_block, packet_information, remote_ssrc);
441 } 438 }
442 439
443 void RTCPReceiver::HandleReceiverReport(const CommonHeader& rtcp_block, 440 void RTCPReceiver::HandleReceiverReport(const CommonHeader& rtcp_block,
444 PacketInformation* packet_information) { 441 PacketInformation* packet_information) {
445 rtcp::ReceiverReport receiver_report; 442 rtcp::ReceiverReport receiver_report;
446 if (!receiver_report.Parse(rtcp_block)) { 443 if (!receiver_report.Parse(rtcp_block)) {
447 ++num_skipped_packets_; 444 ++num_skipped_packets_;
448 return; 445 return;
449 } 446 }
450 447
451 const uint32_t remoteSSRC = receiver_report.sender_ssrc(); 448 const uint32_t remote_ssrc = receiver_report.sender_ssrc();
452 449
453 packet_information->remote_ssrc = remoteSSRC; 450 packet_information->remote_ssrc = remote_ssrc;
454 451
455 CreateReceiveInformation(remoteSSRC); 452 CreateReceiveInformation(remote_ssrc);
456 453
457 TRACE_EVENT_INSTANT2(TRACE_DISABLED_BY_DEFAULT("webrtc_rtp"), "RR", 454 TRACE_EVENT_INSTANT2(TRACE_DISABLED_BY_DEFAULT("webrtc_rtp"), "RR",
458 "remote_ssrc", remoteSSRC, "ssrc", main_ssrc_); 455 "remote_ssrc", remote_ssrc, "ssrc", main_ssrc_);
459 456
460 packet_information->packet_type_flags |= kRtcpRr; 457 packet_information->packet_type_flags |= kRtcpRr;
461 458
462 for (const ReportBlock& report_block : receiver_report.report_blocks()) 459 for (const ReportBlock& report_block : receiver_report.report_blocks())
463 HandleReportBlock(report_block, packet_information, remoteSSRC); 460 HandleReportBlock(report_block, packet_information, remote_ssrc);
464 } 461 }
465 462
466 void RTCPReceiver::HandleReportBlock(const ReportBlock& report_block, 463 void RTCPReceiver::HandleReportBlock(const ReportBlock& report_block,
467 PacketInformation* packet_information, 464 PacketInformation* packet_information,
468 uint32_t remote_ssrc) { 465 uint32_t remote_ssrc) {
469 // This will be called once per report block in the RTCP packet. 466 // This will be called once per report block in the RTCP packet.
470 // We filter out all report blocks that are not for us. 467 // We filter out all report blocks that are not for us.
471 // Each packet has max 31 RR blocks. 468 // Each packet has max 31 RR blocks.
472 // 469 //
473 // We can calc RTT if we send a send report and get a report block back. 470 // We can calc RTT if we send a send report and get a report block back.
474 471
475 // |report_block.source_ssrc()| is the SSRC identifier of the source to 472 // |report_block.source_ssrc()| is the SSRC identifier of the source to
476 // which the information in this reception report block pertains. 473 // which the information in this reception report block pertains.
477 474
478 // Filter out all report blocks that are not for us. 475 // Filter out all report blocks that are not for us.
479 if (registered_ssrcs_.count(report_block.source_ssrc()) == 0) 476 if (registered_ssrcs_.count(report_block.source_ssrc()) == 0)
480 return; 477 return;
481 478
482 ReportBlockWithRtt* report_block_info = 479 ReportBlockWithRtt* report_block_info =
483 &received_report_blocks_[report_block.source_ssrc()][remote_ssrc]; 480 &received_report_blocks_[report_block.source_ssrc()][remote_ssrc];
484 481
485 _lastReceivedRrMs = _clock->TimeInMilliseconds(); 482 last_received_rr_ms_ = clock_->TimeInMilliseconds();
486 report_block_info->report_block.remoteSSRC = remote_ssrc; 483 report_block_info->report_block.remoteSSRC = remote_ssrc;
487 report_block_info->report_block.sourceSSRC = report_block.source_ssrc(); 484 report_block_info->report_block.sourceSSRC = report_block.source_ssrc();
488 report_block_info->report_block.fractionLost = report_block.fraction_lost(); 485 report_block_info->report_block.fractionLost = report_block.fraction_lost();
489 report_block_info->report_block.cumulativeLost = 486 report_block_info->report_block.cumulativeLost =
490 report_block.cumulative_lost(); 487 report_block.cumulative_lost();
491 if (report_block.extended_high_seq_num() > 488 if (report_block.extended_high_seq_num() >
492 report_block_info->report_block.extendedHighSeqNum) { 489 report_block_info->report_block.extendedHighSeqNum) {
493 // We have successfully delivered new RTP packets to the remote side after 490 // We have successfully delivered new RTP packets to the remote side after
494 // the last RR was sent from the remote side. 491 // the last RR was sent from the remote side.
495 _lastIncreasedSequenceNumberMs = _lastReceivedRrMs; 492 last_increased_sequence_number_ms_ = last_received_rr_ms_;
496 } 493 }
497 report_block_info->report_block.extendedHighSeqNum = 494 report_block_info->report_block.extendedHighSeqNum =
498 report_block.extended_high_seq_num(); 495 report_block.extended_high_seq_num();
499 report_block_info->report_block.jitter = report_block.jitter(); 496 report_block_info->report_block.jitter = report_block.jitter();
500 report_block_info->report_block.delaySinceLastSR = 497 report_block_info->report_block.delaySinceLastSR =
501 report_block.delay_since_last_sr(); 498 report_block.delay_since_last_sr();
502 report_block_info->report_block.lastSR = report_block.last_sr(); 499 report_block_info->report_block.lastSR = report_block.last_sr();
503 500
504 int64_t rtt_ms = 0; 501 int64_t rtt_ms = 0;
505 uint32_t send_time = report_block.last_sr(); 502 uint32_t send_time_ntp = report_block.last_sr();
506 // RFC3550, section 6.4.1, LSR field discription states: 503 // RFC3550, section 6.4.1, LSR field discription states:
507 // If no SR has been received yet, the field is set to zero. 504 // If no SR has been received yet, the field is set to zero.
508 // Receiver rtp_rtcp module is not expected to calculate rtt using 505 // Receiver rtp_rtcp module is not expected to calculate rtt using
509 // Sender Reports even if it accidentally can. 506 // Sender Reports even if it accidentally can.
510 if (!receiver_only_ && send_time != 0) { 507 if (!receiver_only_ && send_time_ntp != 0) {
511 uint32_t delay = report_block.delay_since_last_sr(); 508 uint32_t delay_ntp = report_block.delay_since_last_sr();
512 // Local NTP time. 509 // Local NTP time.
513 uint32_t receive_time = CompactNtp(NtpTime(*_clock)); 510 uint32_t receive_time_ntp = CompactNtp(NtpTime(*clock_));
514 511
515 // RTT in 1/(2^16) seconds. 512 // RTT in 1/(2^16) seconds.
516 uint32_t rtt_ntp = receive_time - delay - send_time; 513 uint32_t rtt_ntp = receive_time_ntp - delay_ntp - send_time_ntp;
517 // Convert to 1/1000 seconds (milliseconds). 514 // Convert to 1/1000 seconds (milliseconds).
518 rtt_ms = CompactNtpRttToMs(rtt_ntp); 515 rtt_ms = CompactNtpRttToMs(rtt_ntp);
519 if (rtt_ms > report_block_info->max_rtt_ms) 516 if (rtt_ms > report_block_info->max_rtt_ms)
520 report_block_info->max_rtt_ms = rtt_ms; 517 report_block_info->max_rtt_ms = rtt_ms;
521 518
522 if (report_block_info->num_rtts == 0 || 519 if (report_block_info->num_rtts == 0 ||
523 rtt_ms < report_block_info->min_rtt_ms) 520 rtt_ms < report_block_info->min_rtt_ms)
524 report_block_info->min_rtt_ms = rtt_ms; 521 report_block_info->min_rtt_ms = rtt_ms;
525 522
526 report_block_info->last_rtt_ms = rtt_ms; 523 report_block_info->last_rtt_ms = rtt_ms;
527 report_block_info->sum_rtt_ms += rtt_ms; 524 report_block_info->sum_rtt_ms += rtt_ms;
528 ++report_block_info->num_rtts; 525 ++report_block_info->num_rtts;
529 } 526 }
530 527
531 TRACE_COUNTER_ID1(TRACE_DISABLED_BY_DEFAULT("webrtc_rtp"), "RR_RTT", 528 TRACE_COUNTER_ID1(TRACE_DISABLED_BY_DEFAULT("webrtc_rtp"), "RR_RTT",
532 report_block.source_ssrc(), rtt_ms); 529 report_block.source_ssrc(), rtt_ms);
533 530
534 packet_information->rtt_ms = rtt_ms; 531 packet_information->rtt_ms = rtt_ms;
535 packet_information->report_blocks.push_back(report_block_info->report_block); 532 packet_information->report_blocks.push_back(report_block_info->report_block);
536 } 533 }
537 534
538 void RTCPReceiver::CreateReceiveInformation(uint32_t remote_ssrc) { 535 void RTCPReceiver::CreateReceiveInformation(uint32_t remote_ssrc) {
539 // Create or find receive information. 536 // Create or find receive information.
540 ReceiveInformation* receive_info = &received_infos_[remote_ssrc]; 537 ReceiveInformation* receive_info = &received_infos_[remote_ssrc];
541 // Update that this remote is alive. 538 // Update that this remote is alive.
542 receive_info->last_time_received_ms = _clock->TimeInMilliseconds(); 539 receive_info->last_time_received_ms = clock_->TimeInMilliseconds();
543 } 540 }
544 541
545 RTCPReceiver::ReceiveInformation* RTCPReceiver::GetReceiveInformation( 542 RTCPReceiver::ReceiveInformation* RTCPReceiver::GetReceiveInformation(
546 uint32_t remote_ssrc) { 543 uint32_t remote_ssrc) {
547 auto it = received_infos_.find(remote_ssrc); 544 auto it = received_infos_.find(remote_ssrc);
548 if (it == received_infos_.end()) 545 if (it == received_infos_.end())
549 return nullptr; 546 return nullptr;
550 return &it->second; 547 return &it->second;
551 } 548 }
552 549
553 bool RTCPReceiver::RtcpRrTimeout(int64_t rtcp_interval_ms) { 550 bool RTCPReceiver::RtcpRrTimeout(int64_t rtcp_interval_ms) {
554 rtc::CritScope lock(&_criticalSectionRTCPReceiver); 551 rtc::CritScope lock(&rtcp_receiver_lock_);
555 if (_lastReceivedRrMs == 0) 552 if (last_received_rr_ms_ == 0)
556 return false; 553 return false;
557 554
558 int64_t time_out_ms = kRrTimeoutIntervals * rtcp_interval_ms; 555 int64_t time_out_ms = kRrTimeoutIntervals * rtcp_interval_ms;
559 if (_clock->TimeInMilliseconds() > _lastReceivedRrMs + time_out_ms) { 556 if (clock_->TimeInMilliseconds() > last_received_rr_ms_ + time_out_ms) {
560 // Reset the timer to only trigger one log. 557 // Reset the timer to only trigger one log.
561 _lastReceivedRrMs = 0; 558 last_received_rr_ms_ = 0;
562 return true; 559 return true;
563 } 560 }
564 return false; 561 return false;
565 } 562 }
566 563
567 bool RTCPReceiver::RtcpRrSequenceNumberTimeout(int64_t rtcp_interval_ms) { 564 bool RTCPReceiver::RtcpRrSequenceNumberTimeout(int64_t rtcp_interval_ms) {
568 rtc::CritScope lock(&_criticalSectionRTCPReceiver); 565 rtc::CritScope lock(&rtcp_receiver_lock_);
569 if (_lastIncreasedSequenceNumberMs == 0) 566 if (last_increased_sequence_number_ms_ == 0)
570 return false; 567 return false;
571 568
572 int64_t time_out_ms = kRrTimeoutIntervals * rtcp_interval_ms; 569 int64_t time_out_ms = kRrTimeoutIntervals * rtcp_interval_ms;
573 if (_clock->TimeInMilliseconds() > 570 if (clock_->TimeInMilliseconds() >
574 _lastIncreasedSequenceNumberMs + time_out_ms) { 571 last_increased_sequence_number_ms_ + time_out_ms) {
575 // Reset the timer to only trigger one log. 572 // Reset the timer to only trigger one log.
576 _lastIncreasedSequenceNumberMs = 0; 573 last_increased_sequence_number_ms_ = 0;
577 return true; 574 return true;
578 } 575 }
579 return false; 576 return false;
580 } 577 }
581 578
582 bool RTCPReceiver::UpdateRTCPReceiveInformationTimers() { 579 bool RTCPReceiver::UpdateRTCPReceiveInformationTimers() {
583 rtc::CritScope lock(&_criticalSectionRTCPReceiver); 580 rtc::CritScope lock(&rtcp_receiver_lock_);
584 581
585 bool update_bounding_set = false; 582 bool update_bounding_set = false;
586 int64_t now_ms = _clock->TimeInMilliseconds(); 583 int64_t now_ms = clock_->TimeInMilliseconds();
587 // Use audio define since we don't know what interval the remote peer use. 584 // Use audio define since we don't know what interval the remote peer use.
588 int64_t timeouted_ms = now_ms - 5 * RTCP_INTERVAL_AUDIO_MS; 585 int64_t timeouted_ms = now_ms - 5 * RTCP_INTERVAL_AUDIO_MS;
589 586
590 for (auto receive_info_it = received_infos_.begin(); 587 for (auto receive_info_it = received_infos_.begin();
591 receive_info_it != received_infos_.end();) { 588 receive_info_it != received_infos_.end();) {
592 ReceiveInformation* receive_info = &receive_info_it->second; 589 ReceiveInformation* receive_info = &receive_info_it->second;
593 if (receive_info->last_time_received_ms > 0) { 590 if (receive_info->last_time_received_ms > 0) {
594 if (receive_info->last_time_received_ms < timeouted_ms) { 591 if (receive_info->last_time_received_ms < timeouted_ms) {
595 // No rtcp packet for the last 5 regular intervals, reset limitations. 592 // No rtcp packet for the last 5 regular intervals, reset limitations.
596 receive_info->tmmbr.clear(); 593 receive_info->tmmbr.clear();
597 // Prevent that we call this over and over again. 594 // Prevent that we call this over and over again.
598 receive_info->last_time_received_ms = 0; 595 receive_info->last_time_received_ms = 0;
599 // Send new TMMBN to all channels using the default codec. 596 // Send new TMMBN to all channels using the default codec.
600 update_bounding_set = true; 597 update_bounding_set = true;
601 } 598 }
602 ++receive_info_it; 599 ++receive_info_it;
603 } else if (receive_info->ready_for_delete) { 600 } else if (receive_info->ready_for_delete) {
604 // When we dont have a last_time_received_ms and the object is marked 601 // When we dont have a last_time_received_ms and the object is marked
605 // ready_for_delete it's removed from the map. 602 // ready_for_delete it's removed from the map.
606 receive_info_it = received_infos_.erase(receive_info_it); 603 receive_info_it = received_infos_.erase(receive_info_it);
607 } else { 604 } else {
608 ++receive_info_it; 605 ++receive_info_it;
609 } 606 }
610 } 607 }
611 return update_bounding_set; 608 return update_bounding_set;
612 } 609 }
613 610
614 std::vector<rtcp::TmmbItem> RTCPReceiver::BoundingSet(bool* tmmbr_owner) { 611 std::vector<rtcp::TmmbItem> RTCPReceiver::BoundingSet(bool* tmmbr_owner) {
615 rtc::CritScope lock(&_criticalSectionRTCPReceiver); 612 rtc::CritScope lock(&rtcp_receiver_lock_);
616 ReceiveInformation* receive_info = GetReceiveInformation(_remoteSSRC); 613 ReceiveInformation* receive_info = GetReceiveInformation(remote_ssrc_);
617 if (!receive_info) 614 if (!receive_info)
618 return std::vector<rtcp::TmmbItem>(); 615 return std::vector<rtcp::TmmbItem>();
619 616
620 *tmmbr_owner = TMMBRHelp::IsOwner(receive_info->tmmbn, main_ssrc_); 617 *tmmbr_owner = TMMBRHelp::IsOwner(receive_info->tmmbn, main_ssrc_);
621 return receive_info->tmmbn; 618 return receive_info->tmmbn;
622 } 619 }
623 620
624 void RTCPReceiver::HandleSDES(const CommonHeader& rtcp_block, 621 void RTCPReceiver::HandleSdes(const CommonHeader& rtcp_block,
625 PacketInformation* packet_information) { 622 PacketInformation* packet_information) {
626 rtcp::Sdes sdes; 623 rtcp::Sdes sdes;
627 if (!sdes.Parse(rtcp_block)) { 624 if (!sdes.Parse(rtcp_block)) {
628 ++num_skipped_packets_; 625 ++num_skipped_packets_;
629 return; 626 return;
630 } 627 }
631 628
632 for (const rtcp::Sdes::Chunk& chunk : sdes.chunks()) { 629 for (const rtcp::Sdes::Chunk& chunk : sdes.chunks()) {
633 received_cnames_[chunk.ssrc] = chunk.cname; 630 received_cnames_[chunk.ssrc] = chunk.cname;
634 { 631 {
635 rtc::CritScope lock(&feedbacks_lock_); 632 rtc::CritScope lock(&feedbacks_lock_);
636 if (stats_callback_) 633 if (stats_callback_)
637 stats_callback_->CNameChanged(chunk.cname.c_str(), chunk.ssrc); 634 stats_callback_->CNameChanged(chunk.cname.c_str(), chunk.ssrc);
638 } 635 }
639 } 636 }
640 packet_information->packet_type_flags |= kRtcpSdes; 637 packet_information->packet_type_flags |= kRtcpSdes;
641 } 638 }
642 639
643 void RTCPReceiver::HandleNACK(const CommonHeader& rtcp_block, 640 void RTCPReceiver::HandleNack(const CommonHeader& rtcp_block,
644 PacketInformation* packet_information) { 641 PacketInformation* packet_information) {
645 rtcp::Nack nack; 642 rtcp::Nack nack;
646 if (!nack.Parse(rtcp_block)) { 643 if (!nack.Parse(rtcp_block)) {
647 ++num_skipped_packets_; 644 ++num_skipped_packets_;
648 return; 645 return;
649 } 646 }
650 647
651 if (receiver_only_ || main_ssrc_ != nack.media_ssrc()) // Not to us. 648 if (receiver_only_ || main_ssrc_ != nack.media_ssrc()) // Not to us.
652 return; 649 return;
653 650
654 packet_information->nack_sequence_numbers.insert( 651 packet_information->nack_sequence_numbers.insert(
655 packet_information->nack_sequence_numbers.end(), 652 packet_information->nack_sequence_numbers.end(),
656 nack.packet_ids().begin(), nack.packet_ids().end()); 653 nack.packet_ids().begin(), nack.packet_ids().end());
657 for (uint16_t packet_id : nack.packet_ids()) 654 for (uint16_t packet_id : nack.packet_ids())
658 nack_stats_.ReportRequest(packet_id); 655 nack_stats_.ReportRequest(packet_id);
659 656
660 if (!nack.packet_ids().empty()) { 657 if (!nack.packet_ids().empty()) {
661 packet_information->packet_type_flags |= kRtcpNack; 658 packet_information->packet_type_flags |= kRtcpNack;
662 ++packet_type_counter_.nack_packets; 659 ++packet_type_counter_.nack_packets;
663 packet_type_counter_.nack_requests = nack_stats_.requests(); 660 packet_type_counter_.nack_requests = nack_stats_.requests();
664 packet_type_counter_.unique_nack_requests = nack_stats_.unique_requests(); 661 packet_type_counter_.unique_nack_requests = nack_stats_.unique_requests();
665 } 662 }
666 } 663 }
667 664
668 void RTCPReceiver::HandleBYE(const CommonHeader& rtcp_block) { 665 void RTCPReceiver::HandleBye(const CommonHeader& rtcp_block) {
669 rtcp::Bye bye; 666 rtcp::Bye bye;
670 if (!bye.Parse(rtcp_block)) { 667 if (!bye.Parse(rtcp_block)) {
671 ++num_skipped_packets_; 668 ++num_skipped_packets_;
672 return; 669 return;
673 } 670 }
674 671
675 // clear our lists 672 // Clear our lists.
676 for (auto& reports_per_receiver : received_report_blocks_) 673 for (auto& reports_per_receiver : received_report_blocks_)
677 reports_per_receiver.second.erase(bye.sender_ssrc()); 674 reports_per_receiver.second.erase(bye.sender_ssrc());
678 675
679 // We can't delete it due to TMMBR. 676 // We can't delete it due to TMMBR.
680 ReceiveInformation* receive_info = GetReceiveInformation(bye.sender_ssrc()); 677 ReceiveInformation* receive_info = GetReceiveInformation(bye.sender_ssrc());
681 if (receive_info) 678 if (receive_info)
682 receive_info->ready_for_delete = true; 679 receive_info->ready_for_delete = true;
683 680
684 received_cnames_.erase(bye.sender_ssrc()); 681 received_cnames_.erase(bye.sender_ssrc());
685 xr_rr_rtt_ms_ = 0; 682 xr_rr_rtt_ms_ = 0;
(...skipping 10 matching lines...) Expand all
696 if (xr.rrtr()) 693 if (xr.rrtr())
697 HandleXrReceiveReferenceTime(xr.sender_ssrc(), *xr.rrtr()); 694 HandleXrReceiveReferenceTime(xr.sender_ssrc(), *xr.rrtr());
698 695
699 for (const rtcp::ReceiveTimeInfo& time_info : xr.dlrr().sub_blocks()) 696 for (const rtcp::ReceiveTimeInfo& time_info : xr.dlrr().sub_blocks())
700 HandleXrDlrrReportBlock(time_info); 697 HandleXrDlrrReportBlock(time_info);
701 698
702 if (xr.target_bitrate()) 699 if (xr.target_bitrate())
703 HandleXrTargetBitrate(*xr.target_bitrate(), packet_information); 700 HandleXrTargetBitrate(*xr.target_bitrate(), packet_information);
704 } 701 }
705 702
706 void RTCPReceiver::HandleXrReceiveReferenceTime( 703 void RTCPReceiver::HandleXrReceiveReferenceTime(uint32_t sender_ssrc,
707 uint32_t sender_ssrc, 704 const rtcp::Rrtr& rrtr) {
708 const rtcp::Rrtr& rrtr) {
709 remote_time_info_.ssrc = sender_ssrc; 705 remote_time_info_.ssrc = sender_ssrc;
710 remote_time_info_.last_rr = CompactNtp(rrtr.ntp()); 706 remote_time_info_.last_rr = CompactNtp(rrtr.ntp());
711 last_received_xr_ntp_.SetCurrent(*_clock); 707 last_received_xr_ntp_.SetCurrent(*clock_);
712 } 708 }
713 709
714 void RTCPReceiver::HandleXrDlrrReportBlock(const rtcp::ReceiveTimeInfo& rti) { 710 void RTCPReceiver::HandleXrDlrrReportBlock(const rtcp::ReceiveTimeInfo& rti) {
715 if (registered_ssrcs_.count(rti.ssrc) == 0) // Not to us. 711 if (registered_ssrcs_.count(rti.ssrc) == 0) // Not to us.
716 return; 712 return;
717 713
718 // Caller should explicitly enable rtt calculation using extended reports. 714 // Caller should explicitly enable rtt calculation using extended reports.
719 if (!xr_rrtr_status_) 715 if (!xr_rrtr_status_)
720 return; 716 return;
721 717
722 // The send_time and delay_rr fields are in units of 1/2^16 sec. 718 // The send_time and delay_rr fields are in units of 1/2^16 sec.
723 uint32_t send_time = rti.last_rr; 719 uint32_t send_time_ntp = rti.last_rr;
724 // RFC3611, section 4.5, LRR field discription states: 720 // RFC3611, section 4.5, LRR field discription states:
725 // If no such block has been received, the field is set to zero. 721 // If no such block has been received, the field is set to zero.
726 if (send_time == 0) 722 if (send_time_ntp == 0)
727 return; 723 return;
728 724
729 uint32_t delay_rr = rti.delay_since_last_rr; 725 uint32_t delay_ntp = rti.delay_since_last_rr;
730 uint32_t now = CompactNtp(NtpTime(*_clock)); 726 uint32_t now_ntp = CompactNtp(NtpTime(*clock_));
731 727
732 uint32_t rtt_ntp = now - delay_rr - send_time; 728 uint32_t rtt_ntp = now_ntp - delay_ntp - send_time_ntp;
733 xr_rr_rtt_ms_ = CompactNtpRttToMs(rtt_ntp); 729 xr_rr_rtt_ms_ = CompactNtpRttToMs(rtt_ntp);
734 } 730 }
735 731
736 void RTCPReceiver::HandleXrTargetBitrate( 732 void RTCPReceiver::HandleXrTargetBitrate(
737 const rtcp::TargetBitrate& target_bitrate, 733 const rtcp::TargetBitrate& target_bitrate,
738 PacketInformation* packet_information) { 734 PacketInformation* packet_information) {
739 BitrateAllocation bitrate_allocation; 735 BitrateAllocation bitrate_allocation;
740 for (const auto& item : target_bitrate.GetTargetBitrates()) { 736 for (const auto& item : target_bitrate.GetTargetBitrates()) {
741 if (item.spatial_layer >= kMaxSpatialLayers || 737 if (item.spatial_layer >= kMaxSpatialLayers ||
742 item.temporal_layer >= kMaxTemporalStreams) { 738 item.temporal_layer >= kMaxTemporalStreams) {
743 LOG(LS_WARNING) 739 LOG(LS_WARNING)
744 << "Invalid layer in XR target bitrate pack: spatial index " 740 << "Invalid layer in XR target bitrate pack: spatial index "
745 << item.spatial_layer << ", temporal index " << item.temporal_layer 741 << item.spatial_layer << ", temporal index " << item.temporal_layer
746 << ", dropping."; 742 << ", dropping.";
747 } else { 743 } else {
748 bitrate_allocation.SetBitrate(item.spatial_layer, item.temporal_layer, 744 bitrate_allocation.SetBitrate(item.spatial_layer, item.temporal_layer,
749 item.target_bitrate_kbps * 1000); 745 item.target_bitrate_kbps * 1000);
750 } 746 }
751 } 747 }
752 packet_information->target_bitrate_allocation.emplace(bitrate_allocation); 748 packet_information->target_bitrate_allocation.emplace(bitrate_allocation);
753 } 749 }
754 750
755 void RTCPReceiver::HandlePLI(const CommonHeader& rtcp_block, 751 void RTCPReceiver::HandlePli(const CommonHeader& rtcp_block,
756 PacketInformation* packet_information) { 752 PacketInformation* packet_information) {
757 rtcp::Pli pli; 753 rtcp::Pli pli;
758 if (!pli.Parse(rtcp_block)) { 754 if (!pli.Parse(rtcp_block)) {
759 ++num_skipped_packets_; 755 ++num_skipped_packets_;
760 return; 756 return;
761 } 757 }
762 758
763 if (main_ssrc_ == pli.media_ssrc()) { 759 if (main_ssrc_ == pli.media_ssrc()) {
764 TRACE_EVENT_INSTANT0(TRACE_DISABLED_BY_DEFAULT("webrtc_rtp"), "PLI"); 760 TRACE_EVENT_INSTANT0(TRACE_DISABLED_BY_DEFAULT("webrtc_rtp"), "PLI");
765 761
766 ++packet_type_counter_.pli_packets; 762 ++packet_type_counter_.pli_packets;
767 // Received a signal that we need to send a new key frame. 763 // Received a signal that we need to send a new key frame.
768 packet_information->packet_type_flags |= kRtcpPli; 764 packet_information->packet_type_flags |= kRtcpPli;
769 } 765 }
770 } 766 }
771 767
772 void RTCPReceiver::HandleTMMBR(const CommonHeader& rtcp_block, 768 void RTCPReceiver::HandleTmmbr(const CommonHeader& rtcp_block,
773 PacketInformation* packet_information) { 769 PacketInformation* packet_information) {
774 rtcp::Tmmbr tmmbr; 770 rtcp::Tmmbr tmmbr;
775 if (!tmmbr.Parse(rtcp_block)) { 771 if (!tmmbr.Parse(rtcp_block)) {
776 ++num_skipped_packets_; 772 ++num_skipped_packets_;
777 return; 773 return;
778 } 774 }
779 775
780 uint32_t sender_ssrc = tmmbr.sender_ssrc(); 776 uint32_t sender_ssrc = tmmbr.sender_ssrc();
781 ReceiveInformation* receive_info = GetReceiveInformation(sender_ssrc); 777 ReceiveInformation* receive_info = GetReceiveInformation(sender_ssrc);
782 if (!receive_info) // This remote SSRC must be saved before. 778 if (!receive_info) // This remote SSRC must be saved before.
783 return; 779 return;
784 780
785 if (tmmbr.media_ssrc()) { 781 if (tmmbr.media_ssrc()) {
786 // media_ssrc() SHOULD be 0 if same as SenderSSRC. 782 // media_ssrc() SHOULD be 0 if same as SenderSSRC.
787 // In relay mode this is a valid number. 783 // In relay mode this is a valid number.
788 sender_ssrc = tmmbr.media_ssrc(); 784 sender_ssrc = tmmbr.media_ssrc();
789 } 785 }
790 786
791 for (const rtcp::TmmbItem& request : tmmbr.requests()) { 787 for (const rtcp::TmmbItem& request : tmmbr.requests()) {
792 if (main_ssrc_ == request.ssrc() && request.bitrate_bps()) { 788 if (main_ssrc_ == request.ssrc() && request.bitrate_bps()) {
793 auto* entry = &receive_info->tmmbr[sender_ssrc]; 789 auto* entry = &receive_info->tmmbr[sender_ssrc];
794 entry->tmmbr_item = rtcp::TmmbItem(sender_ssrc, 790 entry->tmmbr_item = rtcp::TmmbItem(sender_ssrc,
795 request.bitrate_bps(), 791 request.bitrate_bps(),
796 request.packet_overhead()); 792 request.packet_overhead());
797 entry->last_updated_ms = _clock->TimeInMilliseconds(); 793 entry->last_updated_ms = clock_->TimeInMilliseconds();
798 794
799 packet_information->packet_type_flags |= kRtcpTmmbr; 795 packet_information->packet_type_flags |= kRtcpTmmbr;
800 } 796 }
801 } 797 }
802 } 798 }
803 799
804 void RTCPReceiver::HandleTMMBN(const CommonHeader& rtcp_block, 800 void RTCPReceiver::HandleTmmbn(const CommonHeader& rtcp_block,
805 PacketInformation* packet_information) { 801 PacketInformation* packet_information) {
806 rtcp::Tmmbn tmmbn; 802 rtcp::Tmmbn tmmbn;
807 if (!tmmbn.Parse(rtcp_block)) { 803 if (!tmmbn.Parse(rtcp_block)) {
808 ++num_skipped_packets_; 804 ++num_skipped_packets_;
809 return; 805 return;
810 } 806 }
811 807
812 ReceiveInformation* receive_info = GetReceiveInformation(tmmbn.sender_ssrc()); 808 ReceiveInformation* receive_info = GetReceiveInformation(tmmbn.sender_ssrc());
813 if (!receive_info) // This remote SSRC must be saved before. 809 if (!receive_info) // This remote SSRC must be saved before.
814 return; 810 return;
815 811
816 packet_information->packet_type_flags |= kRtcpTmmbn; 812 packet_information->packet_type_flags |= kRtcpTmmbn;
817 813
818 for (const auto& item : tmmbn.items()) 814 for (const auto& item : tmmbn.items())
819 receive_info->tmmbn.push_back(item); 815 receive_info->tmmbn.push_back(item);
820 } 816 }
821 817
822 void RTCPReceiver::HandleSR_REQ(const CommonHeader& rtcp_block, 818 void RTCPReceiver::HandleSrReq(const CommonHeader& rtcp_block,
823 PacketInformation* packet_information) { 819 PacketInformation* packet_information) {
824 rtcp::RapidResyncRequest sr_req; 820 rtcp::RapidResyncRequest sr_req;
825 if (!sr_req.Parse(rtcp_block)) { 821 if (!sr_req.Parse(rtcp_block)) {
826 ++num_skipped_packets_; 822 ++num_skipped_packets_;
827 return; 823 return;
828 } 824 }
829 825
830 packet_information->packet_type_flags |= kRtcpSrReq; 826 packet_information->packet_type_flags |= kRtcpSrReq;
831 } 827 }
832 828
833 void RTCPReceiver::HandleSLI(const CommonHeader& rtcp_block, 829 void RTCPReceiver::HandleSli(const CommonHeader& rtcp_block,
834 PacketInformation* packet_information) { 830 PacketInformation* packet_information) {
835 rtcp::Sli sli; 831 rtcp::Sli sli;
836 if (!sli.Parse(rtcp_block)) { 832 if (!sli.Parse(rtcp_block)) {
837 ++num_skipped_packets_; 833 ++num_skipped_packets_;
838 return; 834 return;
839 } 835 }
840 836
841 for (const rtcp::Sli::Macroblocks& item : sli.macroblocks()) { 837 for (const rtcp::Sli::Macroblocks& item : sli.macroblocks()) {
842 // In theory there could be multiple slices lost. 838 // In theory there could be multiple slices lost.
843 // Received signal that we need to refresh a slice. 839 // Received signal that we need to refresh a slice.
844 packet_information->packet_type_flags |= kRtcpSli; 840 packet_information->packet_type_flags |= kRtcpSli;
845 packet_information->sli_picture_id = item.picture_id(); 841 packet_information->sli_picture_id = item.picture_id();
846 } 842 }
847 } 843 }
848 844
849 void RTCPReceiver::HandleRPSI(const CommonHeader& rtcp_block, 845 void RTCPReceiver::HandleRpsi(const CommonHeader& rtcp_block,
850 PacketInformation* packet_information) { 846 PacketInformation* packet_information) {
851 rtcp::Rpsi rpsi; 847 rtcp::Rpsi rpsi;
852 if (!rpsi.Parse(rtcp_block)) { 848 if (!rpsi.Parse(rtcp_block)) {
853 ++num_skipped_packets_; 849 ++num_skipped_packets_;
854 return; 850 return;
855 } 851 }
856 852
857 // Received signal that we have a confirmed reference picture. 853 // Received signal that we have a confirmed reference picture.
858 packet_information->packet_type_flags |= kRtcpRpsi; 854 packet_information->packet_type_flags |= kRtcpRpsi;
859 packet_information->rpsi_picture_id = rpsi.picture_id(); 855 packet_information->rpsi_picture_id = rpsi.picture_id();
860 } 856 }
861 857
862 void RTCPReceiver::HandlePsfbApp(const CommonHeader& rtcp_block, 858 void RTCPReceiver::HandlePsfbApp(const CommonHeader& rtcp_block,
863 PacketInformation* packet_information) { 859 PacketInformation* packet_information) {
864 rtcp::Remb remb; 860 rtcp::Remb remb;
865 if (remb.Parse(rtcp_block)) { 861 if (remb.Parse(rtcp_block)) {
866 packet_information->packet_type_flags |= kRtcpRemb; 862 packet_information->packet_type_flags |= kRtcpRemb;
867 packet_information->receiver_estimated_max_bitrate_bps = remb.bitrate_bps(); 863 packet_information->receiver_estimated_max_bitrate_bps = remb.bitrate_bps();
868 return; 864 return;
869 } 865 }
870 866
871 ++num_skipped_packets_; 867 ++num_skipped_packets_;
872 } 868 }
873 869
874 void RTCPReceiver::HandleFIR(const CommonHeader& rtcp_block, 870 void RTCPReceiver::HandleFir(const CommonHeader& rtcp_block,
875 PacketInformation* packet_information) { 871 PacketInformation* packet_information) {
876 rtcp::Fir fir; 872 rtcp::Fir fir;
877 if (!fir.Parse(rtcp_block)) { 873 if (!fir.Parse(rtcp_block)) {
878 ++num_skipped_packets_; 874 ++num_skipped_packets_;
879 return; 875 return;
880 } 876 }
881 877
882 ReceiveInformation* receive_info = GetReceiveInformation(fir.sender_ssrc()); 878 ReceiveInformation* receive_info = GetReceiveInformation(fir.sender_ssrc());
883 879
884 for (const rtcp::Fir::Request& fir_request : fir.requests()) { 880 for (const rtcp::Fir::Request& fir_request : fir.requests()) {
885 // Is it our sender that is requested to generate a new keyframe 881 // Is it our sender that is requested to generate a new keyframe.
886 if (main_ssrc_ != fir_request.ssrc) 882 if (main_ssrc_ != fir_request.ssrc)
887 continue; 883 continue;
888 884
889 ++packet_type_counter_.fir_packets; 885 ++packet_type_counter_.fir_packets;
890 886
891 if (receive_info) { 887 if (receive_info) {
892 // Check if we have reported this FIRSequenceNumber before. 888 // Check if we have reported this FIRSequenceNumber before.
893 if (fir_request.seq_nr == receive_info->last_fir_sequence_number) 889 if (fir_request.seq_nr == receive_info->last_fir_sequence_number)
894 continue; 890 continue;
895 891
896 int64_t now_ms = _clock->TimeInMilliseconds(); 892 int64_t now_ms = clock_->TimeInMilliseconds();
897 // Sanity: don't go crazy with the callbacks. 893 // Sanity: don't go crazy with the callbacks.
898 if (now_ms - receive_info->last_fir_request_ms < RTCP_MIN_FRAME_LENGTH_MS) 894 if (now_ms - receive_info->last_fir_request_ms < RTCP_MIN_FRAME_LENGTH_MS)
899 continue; 895 continue;
900 896
901 receive_info->last_fir_request_ms = now_ms; 897 receive_info->last_fir_request_ms = now_ms;
902 receive_info->last_fir_sequence_number = fir_request.seq_nr; 898 receive_info->last_fir_sequence_number = fir_request.seq_nr;
903 } 899 }
904 // Received signal that we need to send a new key frame. 900 // Received signal that we need to send a new key frame.
905 packet_information->packet_type_flags |= kRtcpFir; 901 packet_information->packet_type_flags |= kRtcpFir;
906 } 902 }
(...skipping 19 matching lines...) Expand all
926 TMMBRHelp::FindBoundingSet(TmmbrReceived()); 922 TMMBRHelp::FindBoundingSet(TmmbrReceived());
927 923
928 if (!bounding.empty() && rtcp_bandwidth_observer_) { 924 if (!bounding.empty() && rtcp_bandwidth_observer_) {
929 // We have a new bandwidth estimate on this channel. 925 // We have a new bandwidth estimate on this channel.
930 uint64_t bitrate_bps = TMMBRHelp::CalcMinBitrateBps(bounding); 926 uint64_t bitrate_bps = TMMBRHelp::CalcMinBitrateBps(bounding);
931 if (bitrate_bps <= std::numeric_limits<uint32_t>::max()) 927 if (bitrate_bps <= std::numeric_limits<uint32_t>::max())
932 rtcp_bandwidth_observer_->OnReceivedEstimatedBitrate(bitrate_bps); 928 rtcp_bandwidth_observer_->OnReceivedEstimatedBitrate(bitrate_bps);
933 } 929 }
934 930
935 // Set bounding set: inform remote clients about the new bandwidth. 931 // Set bounding set: inform remote clients about the new bandwidth.
936 _rtpRtcp.SetTmmbn(std::move(bounding)); 932 rtp_rtcp_->SetTmmbn(std::move(bounding));
937 } 933 }
938 934
939 void RTCPReceiver::RegisterRtcpStatisticsCallback( 935 void RTCPReceiver::RegisterRtcpStatisticsCallback(
940 RtcpStatisticsCallback* callback) { 936 RtcpStatisticsCallback* callback) {
941 rtc::CritScope cs(&feedbacks_lock_); 937 rtc::CritScope cs(&feedbacks_lock_);
942 stats_callback_ = callback; 938 stats_callback_ = callback;
943 } 939 }
944 940
945 RtcpStatisticsCallback* RTCPReceiver::GetRtcpStatisticsCallback() { 941 RtcpStatisticsCallback* RTCPReceiver::GetRtcpStatisticsCallback() {
946 rtc::CritScope cs(&feedbacks_lock_); 942 rtc::CritScope cs(&feedbacks_lock_);
947 return stats_callback_; 943 return stats_callback_;
948 } 944 }
949 945
950 // Holding no Critical section 946 // Holding no Critical section.
951 void RTCPReceiver::TriggerCallbacksFromRTCPPacket( 947 void RTCPReceiver::TriggerCallbacksFromRtcpPacket(
952 const PacketInformation& packet_information) { 948 const PacketInformation& packet_information) {
953 // Process TMMBR and REMB first to avoid multiple callbacks 949 // Process TMMBR and REMB first to avoid multiple callbacks
954 // to OnNetworkChanged. 950 // to OnNetworkChanged.
955 if (packet_information.packet_type_flags & kRtcpTmmbr) { 951 if (packet_information.packet_type_flags & kRtcpTmmbr) {
956 // Might trigger a OnReceivedBandwidthEstimateUpdate. 952 // Might trigger a OnReceivedBandwidthEstimateUpdate.
957 UpdateTmmbr(); 953 UpdateTmmbr();
958 } 954 }
959 uint32_t local_ssrc; 955 uint32_t local_ssrc;
960 std::set<uint32_t> registered_ssrcs; 956 std::set<uint32_t> registered_ssrcs;
961 { 957 {
962 // We don't want to hold this critsect when triggering the callbacks below. 958 // We don't want to hold this critsect when triggering the callbacks below.
963 rtc::CritScope lock(&_criticalSectionRTCPReceiver); 959 rtc::CritScope lock(&rtcp_receiver_lock_);
964 local_ssrc = main_ssrc_; 960 local_ssrc = main_ssrc_;
965 registered_ssrcs = registered_ssrcs_; 961 registered_ssrcs = registered_ssrcs_;
966 } 962 }
967 if (!receiver_only_ && (packet_information.packet_type_flags & kRtcpSrReq)) { 963 if (!receiver_only_ && (packet_information.packet_type_flags & kRtcpSrReq)) {
968 _rtpRtcp.OnRequestSendReport(); 964 rtp_rtcp_->OnRequestSendReport();
969 } 965 }
970 if (!receiver_only_ && (packet_information.packet_type_flags & kRtcpNack)) { 966 if (!receiver_only_ && (packet_information.packet_type_flags & kRtcpNack)) {
971 if (!packet_information.nack_sequence_numbers.empty()) { 967 if (!packet_information.nack_sequence_numbers.empty()) {
972 LOG(LS_VERBOSE) << "Incoming NACK length: " 968 LOG(LS_VERBOSE) << "Incoming NACK length: "
973 << packet_information.nack_sequence_numbers.size(); 969 << packet_information.nack_sequence_numbers.size();
974 _rtpRtcp.OnReceivedNack(packet_information.nack_sequence_numbers); 970 rtp_rtcp_->OnReceivedNack(packet_information.nack_sequence_numbers);
975 } 971 }
976 } 972 }
977 973
978 // We need feedback that we have received a report block(s) so that we 974 // We need feedback that we have received a report block(s) so that we
979 // can generate a new packet in a conference relay scenario, one received 975 // can generate a new packet in a conference relay scenario, one received
980 // report can generate several RTCP packets, based on number relayed/mixed 976 // report can generate several RTCP packets, based on number relayed/mixed
981 // a send report block should go out to all receivers. 977 // a send report block should go out to all receivers.
982 if (rtcp_intra_frame_observer_) { 978 if (rtcp_intra_frame_observer_) {
983 RTC_DCHECK(!receiver_only_); 979 RTC_DCHECK(!receiver_only_);
984 if ((packet_information.packet_type_flags & kRtcpPli) || 980 if ((packet_information.packet_type_flags & kRtcpPli) ||
(...skipping 19 matching lines...) Expand all
1004 if (rtcp_bandwidth_observer_) { 1000 if (rtcp_bandwidth_observer_) {
1005 RTC_DCHECK(!receiver_only_); 1001 RTC_DCHECK(!receiver_only_);
1006 if (packet_information.packet_type_flags & kRtcpRemb) { 1002 if (packet_information.packet_type_flags & kRtcpRemb) {
1007 LOG(LS_VERBOSE) << "Incoming REMB: " 1003 LOG(LS_VERBOSE) << "Incoming REMB: "
1008 << packet_information.receiver_estimated_max_bitrate_bps; 1004 << packet_information.receiver_estimated_max_bitrate_bps;
1009 rtcp_bandwidth_observer_->OnReceivedEstimatedBitrate( 1005 rtcp_bandwidth_observer_->OnReceivedEstimatedBitrate(
1010 packet_information.receiver_estimated_max_bitrate_bps); 1006 packet_information.receiver_estimated_max_bitrate_bps);
1011 } 1007 }
1012 if ((packet_information.packet_type_flags & kRtcpSr) || 1008 if ((packet_information.packet_type_flags & kRtcpSr) ||
1013 (packet_information.packet_type_flags & kRtcpRr)) { 1009 (packet_information.packet_type_flags & kRtcpRr)) {
1014 int64_t now = _clock->TimeInMilliseconds(); 1010 int64_t now_ms = clock_->TimeInMilliseconds();
1015 rtcp_bandwidth_observer_->OnReceivedRtcpReceiverReport( 1011 rtcp_bandwidth_observer_->OnReceivedRtcpReceiverReport(
1016 packet_information.report_blocks, packet_information.rtt_ms, now); 1012 packet_information.report_blocks, packet_information.rtt_ms, now_ms);
1017 } 1013 }
1018 } 1014 }
1019 if ((packet_information.packet_type_flags & kRtcpSr) || 1015 if ((packet_information.packet_type_flags & kRtcpSr) ||
1020 (packet_information.packet_type_flags & kRtcpRr)) { 1016 (packet_information.packet_type_flags & kRtcpRr)) {
1021 _rtpRtcp.OnReceivedRtcpReportBlocks(packet_information.report_blocks); 1017 rtp_rtcp_->OnReceivedRtcpReportBlocks(packet_information.report_blocks);
1022 } 1018 }
1023 1019
1024 if (transport_feedback_observer_ && 1020 if (transport_feedback_observer_ &&
1025 (packet_information.packet_type_flags & kRtcpTransportFeedback)) { 1021 (packet_information.packet_type_flags & kRtcpTransportFeedback)) {
1026 uint32_t media_source_ssrc = 1022 uint32_t media_source_ssrc =
1027 packet_information.transport_feedback->media_ssrc(); 1023 packet_information.transport_feedback->media_ssrc();
1028 if (media_source_ssrc == local_ssrc || 1024 if (media_source_ssrc == local_ssrc ||
1029 registered_ssrcs.find(media_source_ssrc) != registered_ssrcs.end()) { 1025 registered_ssrcs.find(media_source_ssrc) != registered_ssrcs.end()) {
1030 transport_feedback_observer_->OnTransportFeedback( 1026 transport_feedback_observer_->OnTransportFeedback(
1031 *packet_information.transport_feedback); 1027 *packet_information.transport_feedback);
(...skipping 19 matching lines...) Expand all
1051 stats_callback_->StatisticsUpdated(stats, report_block.sourceSSRC); 1047 stats_callback_->StatisticsUpdated(stats, report_block.sourceSSRC);
1052 } 1048 }
1053 } 1049 }
1054 } 1050 }
1055 } 1051 }
1056 1052
1057 int32_t RTCPReceiver::CNAME(uint32_t remoteSSRC, 1053 int32_t RTCPReceiver::CNAME(uint32_t remoteSSRC,
1058 char cName[RTCP_CNAME_SIZE]) const { 1054 char cName[RTCP_CNAME_SIZE]) const {
1059 RTC_DCHECK(cName); 1055 RTC_DCHECK(cName);
1060 1056
1061 rtc::CritScope lock(&_criticalSectionRTCPReceiver); 1057 rtc::CritScope lock(&rtcp_receiver_lock_);
1062 auto received_cname_it = received_cnames_.find(remoteSSRC); 1058 auto received_cname_it = received_cnames_.find(remoteSSRC);
1063 if (received_cname_it == received_cnames_.end()) 1059 if (received_cname_it == received_cnames_.end())
1064 return -1; 1060 return -1;
1065 1061
1066 size_t length = received_cname_it->second.copy(cName, RTCP_CNAME_SIZE - 1); 1062 size_t length = received_cname_it->second.copy(cName, RTCP_CNAME_SIZE - 1);
1067 cName[length] = 0; 1063 cName[length] = 0;
1068 return 0; 1064 return 0;
1069 } 1065 }
1070 1066
1071 std::vector<rtcp::TmmbItem> RTCPReceiver::TmmbrReceived() { 1067 std::vector<rtcp::TmmbItem> RTCPReceiver::TmmbrReceived() {
1072 rtc::CritScope lock(&_criticalSectionRTCPReceiver); 1068 rtc::CritScope lock(&rtcp_receiver_lock_);
1073 std::vector<rtcp::TmmbItem> candidates; 1069 std::vector<rtcp::TmmbItem> candidates;
1074 1070
1075 int64_t now_ms = _clock->TimeInMilliseconds(); 1071 int64_t now_ms = clock_->TimeInMilliseconds();
1076 // Use audio define since we don't know what interval the remote peer use. 1072 // Use audio define since we don't know what interval the remote peer use.
1077 int64_t timeouted_ms = now_ms - 5 * RTCP_INTERVAL_AUDIO_MS; 1073 int64_t timeouted_ms = now_ms - 5 * RTCP_INTERVAL_AUDIO_MS;
1078 1074
1079 for (auto& kv : received_infos_) { 1075 for (auto& kv : received_infos_) {
1080 for (auto it = kv.second.tmmbr.begin(); it != kv.second.tmmbr.end();) { 1076 for (auto it = kv.second.tmmbr.begin(); it != kv.second.tmmbr.end();) {
1081 if (it->second.last_updated_ms < timeouted_ms) { 1077 if (it->second.last_updated_ms < timeouted_ms) {
1082 // Erase timeout entries. 1078 // Erase timeout entries.
1083 it = kv.second.tmmbr.erase(it); 1079 it = kv.second.tmmbr.erase(it);
1084 } else { 1080 } else {
1085 candidates.push_back(it->second.tmmbr_item); 1081 candidates.push_back(it->second.tmmbr_item);
1086 ++it; 1082 ++it;
1087 } 1083 }
1088 } 1084 }
1089 } 1085 }
1090 return candidates; 1086 return candidates;
1091 } 1087 }
1092 1088
1093 } // namespace webrtc 1089 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/rtp_rtcp/source/rtcp_receiver.h ('k') | webrtc/modules/rtp_rtcp/source/rtcp_sender.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698