| 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 315 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 326 // StatisticsUpdated calls are triggered from threads in the RTP module, | 326 // StatisticsUpdated calls are triggered from threads in the RTP module, |
| 327 // while GetStats calls can be triggered from the public voice engine API, | 327 // while GetStats calls can be triggered from the public voice engine API, |
| 328 // hence synchronization is needed. | 328 // hence synchronization is needed. |
| 329 rtc::CriticalSection stats_lock_; | 329 rtc::CriticalSection stats_lock_; |
| 330 const uint32_t ssrc_; | 330 const uint32_t ssrc_; |
| 331 ChannelStatistics stats_; | 331 ChannelStatistics stats_; |
| 332 }; | 332 }; |
| 333 | 333 |
| 334 class VoERtcpObserver : public RtcpBandwidthObserver { | 334 class VoERtcpObserver : public RtcpBandwidthObserver { |
| 335 public: | 335 public: |
| 336 explicit VoERtcpObserver(Channel* owner) : owner_(owner) {} | 336 explicit VoERtcpObserver(Channel* owner) |
| 337 : owner_(owner), bandwidth_observer_(nullptr) {} |
| 337 virtual ~VoERtcpObserver() {} | 338 virtual ~VoERtcpObserver() {} |
| 338 | 339 |
| 340 void SetBandwidthObserver(RtcpBandwidthObserver* bandwidth_observer) { |
| 341 rtc::CritScope lock(&crit_); |
| 342 bandwidth_observer_ = bandwidth_observer; |
| 343 } |
| 344 |
| 339 void OnReceivedEstimatedBitrate(uint32_t bitrate) override { | 345 void OnReceivedEstimatedBitrate(uint32_t bitrate) override { |
| 340 // Not used for Voice Engine. | 346 rtc::CritScope lock(&crit_); |
| 347 if (bandwidth_observer_) { |
| 348 bandwidth_observer_->OnReceivedEstimatedBitrate(bitrate); |
| 349 } |
| 341 } | 350 } |
| 342 | 351 |
| 343 void OnReceivedRtcpReceiverReport(const ReportBlockList& report_blocks, | 352 void OnReceivedRtcpReceiverReport(const ReportBlockList& report_blocks, |
| 344 int64_t rtt, | 353 int64_t rtt, |
| 345 int64_t now_ms) override { | 354 int64_t now_ms) override { |
| 355 { |
| 356 rtc::CritScope lock(&crit_); |
| 357 if (bandwidth_observer_) { |
| 358 bandwidth_observer_->OnReceivedRtcpReceiverReport(report_blocks, rtt, |
| 359 now_ms); |
| 360 } |
| 361 } |
| 346 // TODO(mflodman): Do we need to aggregate reports here or can we jut send | 362 // TODO(mflodman): Do we need to aggregate reports here or can we jut send |
| 347 // what we get? I.e. do we ever get multiple reports bundled into one RTCP | 363 // what we get? I.e. do we ever get multiple reports bundled into one RTCP |
| 348 // report for VoiceEngine? | 364 // report for VoiceEngine? |
| 349 if (report_blocks.empty()) | 365 if (report_blocks.empty()) |
| 350 return; | 366 return; |
| 351 | 367 |
| 352 int fraction_lost_aggregate = 0; | 368 int fraction_lost_aggregate = 0; |
| 353 int total_number_of_packets = 0; | 369 int total_number_of_packets = 0; |
| 354 | 370 |
| 355 // If receiving multiple report blocks, calculate the weighted average based | 371 // If receiving multiple report blocks, calculate the weighted average based |
| (...skipping 21 matching lines...) Expand all Loading... |
| 377 (fraction_lost_aggregate + total_number_of_packets / 2) / | 393 (fraction_lost_aggregate + total_number_of_packets / 2) / |
| 378 total_number_of_packets; | 394 total_number_of_packets; |
| 379 } | 395 } |
| 380 owner_->OnIncomingFractionLoss(weighted_fraction_lost); | 396 owner_->OnIncomingFractionLoss(weighted_fraction_lost); |
| 381 } | 397 } |
| 382 | 398 |
| 383 private: | 399 private: |
| 384 Channel* owner_; | 400 Channel* owner_; |
| 385 // Maps remote side ssrc to extended highest sequence number received. | 401 // Maps remote side ssrc to extended highest sequence number received. |
| 386 std::map<uint32_t, uint32_t> extended_max_sequence_number_; | 402 std::map<uint32_t, uint32_t> extended_max_sequence_number_; |
| 403 rtc::CriticalSection crit_; |
| 404 RtcpBandwidthObserver* bandwidth_observer_ GUARDED_BY(crit_); |
| 387 }; | 405 }; |
| 388 | 406 |
| 389 int32_t Channel::SendData(FrameType frameType, | 407 int32_t Channel::SendData(FrameType frameType, |
| 390 uint8_t payloadType, | 408 uint8_t payloadType, |
| 391 uint32_t timeStamp, | 409 uint32_t timeStamp, |
| 392 const uint8_t* payloadData, | 410 const uint8_t* payloadData, |
| 393 size_t payloadSize, | 411 size_t payloadSize, |
| 394 const RTPFragmentationHeader* fragmentation) { | 412 const RTPFragmentationHeader* fragmentation) { |
| 395 WEBRTC_TRACE(kTraceStream, kTraceVoice, VoEId(_instanceId, _channelId), | 413 WEBRTC_TRACE(kTraceStream, kTraceVoice, VoEId(_instanceId, _channelId), |
| 396 "Channel::SendData(frameType=%u, payloadType=%u, timeStamp=%u," | 414 "Channel::SendData(frameType=%u, payloadType=%u, timeStamp=%u," |
| (...skipping 2020 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2417 rtp_header_parser_->DeregisterRtpHeaderExtension( | 2435 rtp_header_parser_->DeregisterRtpHeaderExtension( |
| 2418 kRtpExtensionTransportSequenceNumber); | 2436 kRtpExtensionTransportSequenceNumber); |
| 2419 bool ret = rtp_header_parser_->RegisterRtpHeaderExtension( | 2437 bool ret = rtp_header_parser_->RegisterRtpHeaderExtension( |
| 2420 kRtpExtensionTransportSequenceNumber, id); | 2438 kRtpExtensionTransportSequenceNumber, id); |
| 2421 RTC_DCHECK(ret); | 2439 RTC_DCHECK(ret); |
| 2422 } | 2440 } |
| 2423 | 2441 |
| 2424 void Channel::RegisterSenderCongestionControlObjects( | 2442 void Channel::RegisterSenderCongestionControlObjects( |
| 2425 RtpPacketSender* rtp_packet_sender, | 2443 RtpPacketSender* rtp_packet_sender, |
| 2426 TransportFeedbackObserver* transport_feedback_observer, | 2444 TransportFeedbackObserver* transport_feedback_observer, |
| 2427 PacketRouter* packet_router) { | 2445 PacketRouter* packet_router, |
| 2446 RtcpBandwidthObserver* bandwidth_observer) { |
| 2428 RTC_DCHECK(rtp_packet_sender); | 2447 RTC_DCHECK(rtp_packet_sender); |
| 2429 RTC_DCHECK(transport_feedback_observer); | 2448 RTC_DCHECK(transport_feedback_observer); |
| 2430 RTC_DCHECK(packet_router && !packet_router_); | 2449 RTC_DCHECK(packet_router && !packet_router_); |
| 2450 rtcp_observer_->SetBandwidthObserver(bandwidth_observer); |
| 2431 feedback_observer_proxy_->SetTransportFeedbackObserver( | 2451 feedback_observer_proxy_->SetTransportFeedbackObserver( |
| 2432 transport_feedback_observer); | 2452 transport_feedback_observer); |
| 2433 seq_num_allocator_proxy_->SetSequenceNumberAllocator(packet_router); | 2453 seq_num_allocator_proxy_->SetSequenceNumberAllocator(packet_router); |
| 2434 rtp_packet_sender_proxy_->SetPacketSender(rtp_packet_sender); | 2454 rtp_packet_sender_proxy_->SetPacketSender(rtp_packet_sender); |
| 2435 _rtpRtcpModule->SetStorePacketsStatus(true, 600); | 2455 _rtpRtcpModule->SetStorePacketsStatus(true, 600); |
| 2436 packet_router->AddRtpModule(_rtpRtcpModule.get()); | 2456 packet_router->AddRtpModule(_rtpRtcpModule.get()); |
| 2437 packet_router_ = packet_router; | 2457 packet_router_ = packet_router; |
| 2438 } | 2458 } |
| 2439 | 2459 |
| 2440 void Channel::RegisterReceiverCongestionControlObjects( | 2460 void Channel::RegisterReceiverCongestionControlObjects( |
| 2441 PacketRouter* packet_router) { | 2461 PacketRouter* packet_router) { |
| 2442 RTC_DCHECK(packet_router && !packet_router_); | 2462 RTC_DCHECK(packet_router && !packet_router_); |
| 2443 packet_router->AddRtpModule(_rtpRtcpModule.get()); | 2463 packet_router->AddRtpModule(_rtpRtcpModule.get()); |
| 2444 packet_router_ = packet_router; | 2464 packet_router_ = packet_router; |
| 2445 } | 2465 } |
| 2446 | 2466 |
| 2447 void Channel::ResetCongestionControlObjects() { | 2467 void Channel::ResetCongestionControlObjects() { |
| 2448 RTC_DCHECK(packet_router_); | 2468 RTC_DCHECK(packet_router_); |
| 2449 _rtpRtcpModule->SetStorePacketsStatus(false, 600); | 2469 _rtpRtcpModule->SetStorePacketsStatus(false, 600); |
| 2470 rtcp_observer_->SetBandwidthObserver(nullptr); |
| 2450 feedback_observer_proxy_->SetTransportFeedbackObserver(nullptr); | 2471 feedback_observer_proxy_->SetTransportFeedbackObserver(nullptr); |
| 2451 seq_num_allocator_proxy_->SetSequenceNumberAllocator(nullptr); | 2472 seq_num_allocator_proxy_->SetSequenceNumberAllocator(nullptr); |
| 2452 packet_router_->RemoveRtpModule(_rtpRtcpModule.get()); | 2473 packet_router_->RemoveRtpModule(_rtpRtcpModule.get()); |
| 2453 packet_router_ = nullptr; | 2474 packet_router_ = nullptr; |
| 2454 rtp_packet_sender_proxy_->SetPacketSender(nullptr); | 2475 rtp_packet_sender_proxy_->SetPacketSender(nullptr); |
| 2455 } | 2476 } |
| 2456 | 2477 |
| 2457 void Channel::SetRTCPStatus(bool enable) { | 2478 void Channel::SetRTCPStatus(bool enable) { |
| 2458 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, _channelId), | 2479 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, _channelId), |
| 2459 "Channel::SetRTCPStatus()"); | 2480 "Channel::SetRTCPStatus()"); |
| (...skipping 843 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3303 int64_t min_rtt = 0; | 3324 int64_t min_rtt = 0; |
| 3304 if (_rtpRtcpModule->RTT(remoteSSRC, &rtt, &avg_rtt, &min_rtt, &max_rtt) != | 3325 if (_rtpRtcpModule->RTT(remoteSSRC, &rtt, &avg_rtt, &min_rtt, &max_rtt) != |
| 3305 0) { | 3326 0) { |
| 3306 return 0; | 3327 return 0; |
| 3307 } | 3328 } |
| 3308 return rtt; | 3329 return rtt; |
| 3309 } | 3330 } |
| 3310 | 3331 |
| 3311 } // namespace voe | 3332 } // namespace voe |
| 3312 } // namespace webrtc | 3333 } // namespace webrtc |
| OLD | NEW |