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

Side by Side Diff: webrtc/call/call.cc

Issue 2685673003: Define RtpTransportControllerSendInterface. (Closed)
Patch Set: Fix dependency problem. Add accessors transport_feedback_observer and packet_sender. Created 3 years, 9 months 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) 2013 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2013 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 15 matching lines...) Expand all
26 #include "webrtc/base/location.h" 26 #include "webrtc/base/location.h"
27 #include "webrtc/base/logging.h" 27 #include "webrtc/base/logging.h"
28 #include "webrtc/base/optional.h" 28 #include "webrtc/base/optional.h"
29 #include "webrtc/base/task_queue.h" 29 #include "webrtc/base/task_queue.h"
30 #include "webrtc/base/thread_annotations.h" 30 #include "webrtc/base/thread_annotations.h"
31 #include "webrtc/base/thread_checker.h" 31 #include "webrtc/base/thread_checker.h"
32 #include "webrtc/base/trace_event.h" 32 #include "webrtc/base/trace_event.h"
33 #include "webrtc/call/bitrate_allocator.h" 33 #include "webrtc/call/bitrate_allocator.h"
34 #include "webrtc/call/call.h" 34 #include "webrtc/call/call.h"
35 #include "webrtc/call/flexfec_receive_stream_impl.h" 35 #include "webrtc/call/flexfec_receive_stream_impl.h"
36 #include "webrtc/call/rtp_transport_controller.h"
36 #include "webrtc/config.h" 37 #include "webrtc/config.h"
37 #include "webrtc/logging/rtc_event_log/rtc_event_log.h" 38 #include "webrtc/logging/rtc_event_log/rtc_event_log.h"
38 #include "webrtc/modules/bitrate_controller/include/bitrate_controller.h" 39 #include "webrtc/modules/bitrate_controller/include/bitrate_controller.h"
39 #include "webrtc/modules/congestion_controller/include/congestion_controller.h" 40 #include "webrtc/modules/congestion_controller/include/congestion_controller.h"
40 #include "webrtc/modules/pacing/paced_sender.h" 41 #include "webrtc/modules/pacing/paced_sender.h"
41 #include "webrtc/modules/rtp_rtcp/include/flexfec_receiver.h" 42 #include "webrtc/modules/rtp_rtcp/include/flexfec_receiver.h"
42 #include "webrtc/modules/rtp_rtcp/include/rtp_header_parser.h" 43 #include "webrtc/modules/rtp_rtcp/include/rtp_header_parser.h"
43 #include "webrtc/modules/rtp_rtcp/source/byte_io.h" 44 #include "webrtc/modules/rtp_rtcp/source/byte_io.h"
44 #include "webrtc/modules/rtp_rtcp/source/rtp_header_extension.h" 45 #include "webrtc/modules/rtp_rtcp/source/rtp_header_extension.h"
45 #include "webrtc/modules/rtp_rtcp/source/rtp_packet_received.h" 46 #include "webrtc/modules/rtp_rtcp/source/rtp_packet_received.h"
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
80 } 81 }
81 82
82 bool UseSendSideBwe(const AudioReceiveStream::Config& config) { 83 bool UseSendSideBwe(const AudioReceiveStream::Config& config) {
83 return UseSendSideBwe(config.rtp.extensions, config.rtp.transport_cc); 84 return UseSendSideBwe(config.rtp.extensions, config.rtp.transport_cc);
84 } 85 }
85 86
86 bool UseSendSideBwe(const FlexfecReceiveStream::Config& config) { 87 bool UseSendSideBwe(const FlexfecReceiveStream::Config& config) {
87 return UseSendSideBwe(config.rtp_header_extensions, config.transport_cc); 88 return UseSendSideBwe(config.rtp_header_extensions, config.transport_cc);
88 } 89 }
89 90
91 class RtpTransportController : public RtpTransportControllerSendInterface {
92 public:
93 RtpTransportController(Clock* clock, webrtc::RtcEventLog* event_log);
94 void InitCongestionControl(CongestionController::Observer* observer);
95 VieRemb* remb() override { return &remb_; }
96 PacketRouter* packet_router() override { return &packet_router_; }
97 CongestionController* congestion_controller() override {
98 return congestion_controller_.get();
99 }
100 TransportFeedbackObserver* transport_feedback_observer() override {
101 return congestion_controller_.get();
102 }
103 RtpPacketSender* packet_sender() override {
104 return congestion_controller_->pacer();
105 }
106
107 private:
108 Clock* const clock_;
109 webrtc::RtcEventLog* const event_log_;
110 VieRemb remb_;
111 PacketRouter packet_router_;
112 // Construction delayed until InitCongestionControl, since the
113 // CongestionController wants its observer as a construction time
114 // argument, and setting it later seems no-trivial.
115 std::unique_ptr<CongestionController> congestion_controller_;
116 };
117
118 RtpTransportController::RtpTransportController(Clock* clock,
119 webrtc::RtcEventLog* event_log)
120 : clock_(clock), event_log_(event_log), remb_(clock) {}
121
122 void RtpTransportController::InitCongestionControl(
123 CongestionController::Observer* observer) {
124 // Must be called only once.
125 RTC_CHECK(!congestion_controller_);
126 congestion_controller_.reset(new CongestionController(
127 clock_, observer, &remb_, event_log_, &packet_router_));
128 }
129
90 } // namespace 130 } // namespace
91 131
92 namespace internal { 132 namespace internal {
93 133
94 class Call : public webrtc::Call, 134 class Call : public webrtc::Call,
95 public PacketReceiver, 135 public PacketReceiver,
96 public RecoveredPacketReceiver, 136 public RecoveredPacketReceiver,
97 public CongestionController::Observer, 137 public CongestionController::Observer,
98 public BitrateAllocator::LimitObserver { 138 public BitrateAllocator::LimitObserver {
99 public: 139 public:
100 explicit Call(const Call::Config& config); 140 Call(const Call::Config& config,
141 std::unique_ptr<RtpTransportController> transport);
101 virtual ~Call(); 142 virtual ~Call();
102 143
103 // Implements webrtc::Call. 144 // Implements webrtc::Call.
104 PacketReceiver* Receiver() override; 145 PacketReceiver* Receiver() override;
105 146
106 webrtc::AudioSendStream* CreateAudioSendStream( 147 webrtc::AudioSendStream* CreateAudioSendStream(
107 const webrtc::AudioSendStream::Config& config) override; 148 const webrtc::AudioSendStream::Config& config) override;
108 void DestroyAudioSendStream(webrtc::AudioSendStream* send_stream) override; 149 void DestroyAudioSendStream(webrtc::AudioSendStream* send_stream) override;
109 150
110 webrtc::AudioReceiveStream* CreateAudioReceiveStream( 151 webrtc::AudioReceiveStream* CreateAudioReceiveStream(
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
264 // TODO(holmer): Remove this lock once BitrateController no longer calls 305 // TODO(holmer): Remove this lock once BitrateController no longer calls
265 // OnNetworkChanged from multiple threads. 306 // OnNetworkChanged from multiple threads.
266 rtc::CriticalSection bitrate_crit_; 307 rtc::CriticalSection bitrate_crit_;
267 uint32_t min_allocated_send_bitrate_bps_ GUARDED_BY(&bitrate_crit_); 308 uint32_t min_allocated_send_bitrate_bps_ GUARDED_BY(&bitrate_crit_);
268 uint32_t configured_max_padding_bitrate_bps_ GUARDED_BY(&bitrate_crit_); 309 uint32_t configured_max_padding_bitrate_bps_ GUARDED_BY(&bitrate_crit_);
269 AvgCounter estimated_send_bitrate_kbps_counter_ GUARDED_BY(&bitrate_crit_); 310 AvgCounter estimated_send_bitrate_kbps_counter_ GUARDED_BY(&bitrate_crit_);
270 AvgCounter pacer_bitrate_kbps_counter_ GUARDED_BY(&bitrate_crit_); 311 AvgCounter pacer_bitrate_kbps_counter_ GUARDED_BY(&bitrate_crit_);
271 312
272 std::map<std::string, rtc::NetworkRoute> network_routes_; 313 std::map<std::string, rtc::NetworkRoute> network_routes_;
273 314
274 VieRemb remb_; 315 std::unique_ptr<RtpTransportController> transport_;
275 PacketRouter packet_router_;
276 // TODO(nisse): Could be a direct member, except for constness
277 // issues with GetRemoteBitrateEstimator (and maybe others).
278 const std::unique_ptr<CongestionController> congestion_controller_;
279 const std::unique_ptr<SendDelayStats> video_send_delay_stats_; 316 const std::unique_ptr<SendDelayStats> video_send_delay_stats_;
280 const int64_t start_ms_; 317 const int64_t start_ms_;
281 // TODO(perkj): |worker_queue_| is supposed to replace 318 // TODO(perkj): |worker_queue_| is supposed to replace
282 // |module_process_thread_|. 319 // |module_process_thread_|.
283 // |worker_queue| is defined last to ensure all pending tasks are cancelled 320 // |worker_queue| is defined last to ensure all pending tasks are cancelled
284 // and deleted before any other members. 321 // and deleted before any other members.
285 rtc::TaskQueue worker_queue_; 322 rtc::TaskQueue worker_queue_;
286 323
287 RTC_DISALLOW_COPY_AND_ASSIGN(Call); 324 RTC_DISALLOW_COPY_AND_ASSIGN(Call);
288 }; 325 };
289 } // namespace internal 326 } // namespace internal
290 327
291 std::string Call::Stats::ToString(int64_t time_ms) const { 328 std::string Call::Stats::ToString(int64_t time_ms) const {
292 std::stringstream ss; 329 std::stringstream ss;
293 ss << "Call stats: " << time_ms << ", {"; 330 ss << "Call stats: " << time_ms << ", {";
294 ss << "send_bw_bps: " << send_bandwidth_bps << ", "; 331 ss << "send_bw_bps: " << send_bandwidth_bps << ", ";
295 ss << "recv_bw_bps: " << recv_bandwidth_bps << ", "; 332 ss << "recv_bw_bps: " << recv_bandwidth_bps << ", ";
296 ss << "max_pad_bps: " << max_padding_bitrate_bps << ", "; 333 ss << "max_pad_bps: " << max_padding_bitrate_bps << ", ";
297 ss << "pacer_delay_ms: " << pacer_delay_ms << ", "; 334 ss << "pacer_delay_ms: " << pacer_delay_ms << ", ";
298 ss << "rtt_ms: " << rtt_ms; 335 ss << "rtt_ms: " << rtt_ms;
299 ss << '}'; 336 ss << '}';
300 return ss.str(); 337 return ss.str();
301 } 338 }
302 339
303 Call* Call::Create(const Call::Config& config) { 340 Call* Call::Create(const Call::Config& config) {
304 return new internal::Call(config); 341 return new internal::Call(
342 config,
343 std::unique_ptr<RtpTransportController>(new RtpTransportController(
344 Clock::GetRealTimeClock(), config.event_log)));
305 } 345 }
306 346
307 namespace internal { 347 namespace internal {
308 348
309 Call::Call(const Call::Config& config) 349 Call::Call(const Call::Config& config,
350 std::unique_ptr<RtpTransportController> transport)
310 : clock_(Clock::GetRealTimeClock()), 351 : clock_(Clock::GetRealTimeClock()),
311 num_cpu_cores_(CpuInfo::DetectNumberOfCores()), 352 num_cpu_cores_(CpuInfo::DetectNumberOfCores()),
312 module_process_thread_(ProcessThread::Create("ModuleProcessThread")), 353 module_process_thread_(ProcessThread::Create("ModuleProcessThread")),
313 pacer_thread_(ProcessThread::Create("PacerThread")), 354 pacer_thread_(ProcessThread::Create("PacerThread")),
314 call_stats_(new CallStats(clock_)), 355 call_stats_(new CallStats(clock_)),
315 bitrate_allocator_(new BitrateAllocator(this)), 356 bitrate_allocator_(new BitrateAllocator(this)),
316 config_(config), 357 config_(config),
317 audio_network_state_(kNetworkDown), 358 audio_network_state_(kNetworkDown),
318 video_network_state_(kNetworkDown), 359 video_network_state_(kNetworkDown),
319 receive_crit_(RWLockWrapper::CreateRWLock()), 360 receive_crit_(RWLockWrapper::CreateRWLock()),
320 send_crit_(RWLockWrapper::CreateRWLock()), 361 send_crit_(RWLockWrapper::CreateRWLock()),
321 event_log_(config.event_log), 362 event_log_(config.event_log),
322 first_packet_sent_ms_(-1), 363 first_packet_sent_ms_(-1),
323 received_bytes_per_second_counter_(clock_, nullptr, true), 364 received_bytes_per_second_counter_(clock_, nullptr, true),
324 received_audio_bytes_per_second_counter_(clock_, nullptr, true), 365 received_audio_bytes_per_second_counter_(clock_, nullptr, true),
325 received_video_bytes_per_second_counter_(clock_, nullptr, true), 366 received_video_bytes_per_second_counter_(clock_, nullptr, true),
326 received_rtcp_bytes_per_second_counter_(clock_, nullptr, true), 367 received_rtcp_bytes_per_second_counter_(clock_, nullptr, true),
327 min_allocated_send_bitrate_bps_(0), 368 min_allocated_send_bitrate_bps_(0),
328 configured_max_padding_bitrate_bps_(0), 369 configured_max_padding_bitrate_bps_(0),
329 estimated_send_bitrate_kbps_counter_(clock_, nullptr, true), 370 estimated_send_bitrate_kbps_counter_(clock_, nullptr, true),
330 pacer_bitrate_kbps_counter_(clock_, nullptr, true), 371 pacer_bitrate_kbps_counter_(clock_, nullptr, true),
331 remb_(clock_), 372 transport_(std::move(transport)),
332 congestion_controller_(new CongestionController(clock_,
333 this,
334 &remb_,
335 event_log_,
336 &packet_router_)),
337 video_send_delay_stats_(new SendDelayStats(clock_)), 373 video_send_delay_stats_(new SendDelayStats(clock_)),
338 start_ms_(clock_->TimeInMilliseconds()), 374 start_ms_(clock_->TimeInMilliseconds()),
339 worker_queue_("call_worker_queue") { 375 worker_queue_("call_worker_queue") {
340 RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread()); 376 RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread());
341 RTC_DCHECK(config.event_log != nullptr); 377 RTC_DCHECK(config.event_log != nullptr);
342 RTC_DCHECK_GE(config.bitrate_config.min_bitrate_bps, 0); 378 RTC_DCHECK_GE(config.bitrate_config.min_bitrate_bps, 0);
343 RTC_DCHECK_GT(config.bitrate_config.start_bitrate_bps, 379 RTC_DCHECK_GT(config.bitrate_config.start_bitrate_bps,
344 config.bitrate_config.min_bitrate_bps); 380 config.bitrate_config.min_bitrate_bps);
345 if (config.bitrate_config.max_bitrate_bps != -1) { 381 if (config.bitrate_config.max_bitrate_bps != -1) {
346 RTC_DCHECK_GE(config.bitrate_config.max_bitrate_bps, 382 RTC_DCHECK_GE(config.bitrate_config.max_bitrate_bps,
347 config.bitrate_config.start_bitrate_bps); 383 config.bitrate_config.start_bitrate_bps);
348 } 384 }
349 Trace::CreateTrace(); 385 Trace::CreateTrace();
350 call_stats_->RegisterStatsObserver(congestion_controller_.get()); 386 transport_->InitCongestionControl(this);
351 387 transport_->congestion_controller()->SignalNetworkState(kNetworkDown);
352 congestion_controller_->SignalNetworkState(kNetworkDown); 388 transport_->congestion_controller()->SetBweBitrates(
353 congestion_controller_->SetBweBitrates(
354 config_.bitrate_config.min_bitrate_bps, 389 config_.bitrate_config.min_bitrate_bps,
355 config_.bitrate_config.start_bitrate_bps, 390 config_.bitrate_config.start_bitrate_bps,
356 config_.bitrate_config.max_bitrate_bps); 391 config_.bitrate_config.max_bitrate_bps);
392 call_stats_->RegisterStatsObserver(transport_->congestion_controller());
357 393
358 module_process_thread_->Start(); 394 module_process_thread_->Start();
359 module_process_thread_->RegisterModule(call_stats_.get(), RTC_FROM_HERE); 395 module_process_thread_->RegisterModule(call_stats_.get(), RTC_FROM_HERE);
360 module_process_thread_->RegisterModule(congestion_controller_.get(), 396 module_process_thread_->RegisterModule(transport_->congestion_controller(),
361 RTC_FROM_HERE); 397 RTC_FROM_HERE);
362 pacer_thread_->RegisterModule(congestion_controller_->pacer(), RTC_FROM_HERE); 398 pacer_thread_->RegisterModule(transport_->congestion_controller()->pacer(),
399 RTC_FROM_HERE);
363 pacer_thread_->RegisterModule( 400 pacer_thread_->RegisterModule(
364 congestion_controller_->GetRemoteBitrateEstimator(true), RTC_FROM_HERE); 401 transport_->congestion_controller()->GetRemoteBitrateEstimator(true),
402 RTC_FROM_HERE);
365 pacer_thread_->Start(); 403 pacer_thread_->Start();
366 } 404 }
367 405
368 Call::~Call() { 406 Call::~Call() {
369 RTC_DCHECK(!remb_.InUse()); 407 RTC_DCHECK(!transport_->remb()->InUse());
370 RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread()); 408 RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread());
371 409
372 RTC_CHECK(audio_send_ssrcs_.empty()); 410 RTC_CHECK(audio_send_ssrcs_.empty());
373 RTC_CHECK(video_send_ssrcs_.empty()); 411 RTC_CHECK(video_send_ssrcs_.empty());
374 RTC_CHECK(video_send_streams_.empty()); 412 RTC_CHECK(video_send_streams_.empty());
375 RTC_CHECK(audio_receive_ssrcs_.empty()); 413 RTC_CHECK(audio_receive_ssrcs_.empty());
376 RTC_CHECK(video_receive_ssrcs_.empty()); 414 RTC_CHECK(video_receive_ssrcs_.empty());
377 RTC_CHECK(video_receive_streams_.empty()); 415 RTC_CHECK(video_receive_streams_.empty());
378 416
379 pacer_thread_->Stop(); 417 pacer_thread_->Stop();
380 pacer_thread_->DeRegisterModule(congestion_controller_->pacer()); 418 pacer_thread_->DeRegisterModule(transport_->congestion_controller()->pacer());
381 pacer_thread_->DeRegisterModule( 419 pacer_thread_->DeRegisterModule(
382 congestion_controller_->GetRemoteBitrateEstimator(true)); 420 transport_->congestion_controller()->GetRemoteBitrateEstimator(true));
383 module_process_thread_->DeRegisterModule(congestion_controller_.get()); 421 module_process_thread_->DeRegisterModule(transport_->congestion_controller());
384 module_process_thread_->DeRegisterModule(call_stats_.get()); 422 module_process_thread_->DeRegisterModule(call_stats_.get());
385 module_process_thread_->Stop(); 423 module_process_thread_->Stop();
386 call_stats_->DeregisterStatsObserver(congestion_controller_.get()); 424 call_stats_->DeregisterStatsObserver(transport_->congestion_controller());
387 425
388 // Only update histograms after process threads have been shut down, so that 426 // Only update histograms after process threads have been shut down, so that
389 // they won't try to concurrently update stats. 427 // they won't try to concurrently update stats.
390 { 428 {
391 rtc::CritScope lock(&bitrate_crit_); 429 rtc::CritScope lock(&bitrate_crit_);
392 UpdateSendHistograms(); 430 UpdateSendHistograms();
393 } 431 }
394 UpdateReceiveHistograms(); 432 UpdateReceiveHistograms();
395 UpdateHistograms(); 433 UpdateHistograms();
396 434
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
494 // RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread()); 532 // RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread());
495 return this; 533 return this;
496 } 534 }
497 535
498 webrtc::AudioSendStream* Call::CreateAudioSendStream( 536 webrtc::AudioSendStream* Call::CreateAudioSendStream(
499 const webrtc::AudioSendStream::Config& config) { 537 const webrtc::AudioSendStream::Config& config) {
500 TRACE_EVENT0("webrtc", "Call::CreateAudioSendStream"); 538 TRACE_EVENT0("webrtc", "Call::CreateAudioSendStream");
501 RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread()); 539 RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread());
502 event_log_->LogAudioSendStreamConfig(config); 540 event_log_->LogAudioSendStreamConfig(config);
503 AudioSendStream* send_stream = new AudioSendStream( 541 AudioSendStream* send_stream = new AudioSendStream(
504 config, config_.audio_state, &worker_queue_, &packet_router_, 542 config, config_.audio_state, &worker_queue_, transport_.get(),
505 congestion_controller_.get(), bitrate_allocator_.get(), event_log_, 543 bitrate_allocator_.get(), event_log_, call_stats_->rtcp_rtt_stats());
506 call_stats_->rtcp_rtt_stats());
507 { 544 {
508 WriteLockScoped write_lock(*send_crit_); 545 WriteLockScoped write_lock(*send_crit_);
509 RTC_DCHECK(audio_send_ssrcs_.find(config.rtp.ssrc) == 546 RTC_DCHECK(audio_send_ssrcs_.find(config.rtp.ssrc) ==
510 audio_send_ssrcs_.end()); 547 audio_send_ssrcs_.end());
511 audio_send_ssrcs_[config.rtp.ssrc] = send_stream; 548 audio_send_ssrcs_[config.rtp.ssrc] = send_stream;
512 } 549 }
513 { 550 {
514 ReadLockScoped read_lock(*receive_crit_); 551 ReadLockScoped read_lock(*receive_crit_);
515 for (const auto& kv : audio_receive_ssrcs_) { 552 for (const auto& kv : audio_receive_ssrcs_) {
516 if (kv.second->config().rtp.local_ssrc == config.rtp.ssrc) { 553 if (kv.second->config().rtp.local_ssrc == config.rtp.ssrc) {
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
549 UpdateAggregateNetworkState(); 586 UpdateAggregateNetworkState();
550 delete audio_send_stream; 587 delete audio_send_stream;
551 } 588 }
552 589
553 webrtc::AudioReceiveStream* Call::CreateAudioReceiveStream( 590 webrtc::AudioReceiveStream* Call::CreateAudioReceiveStream(
554 const webrtc::AudioReceiveStream::Config& config) { 591 const webrtc::AudioReceiveStream::Config& config) {
555 TRACE_EVENT0("webrtc", "Call::CreateAudioReceiveStream"); 592 TRACE_EVENT0("webrtc", "Call::CreateAudioReceiveStream");
556 RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread()); 593 RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread());
557 event_log_->LogAudioReceiveStreamConfig(config); 594 event_log_->LogAudioReceiveStreamConfig(config);
558 AudioReceiveStream* receive_stream = new AudioReceiveStream( 595 AudioReceiveStream* receive_stream = new AudioReceiveStream(
559 &packet_router_, config, 596 transport_->packet_router(), config, config_.audio_state, event_log_);
560 config_.audio_state, event_log_);
561 { 597 {
562 WriteLockScoped write_lock(*receive_crit_); 598 WriteLockScoped write_lock(*receive_crit_);
563 RTC_DCHECK(audio_receive_ssrcs_.find(config.rtp.remote_ssrc) == 599 RTC_DCHECK(audio_receive_ssrcs_.find(config.rtp.remote_ssrc) ==
564 audio_receive_ssrcs_.end()); 600 audio_receive_ssrcs_.end());
565 audio_receive_ssrcs_[config.rtp.remote_ssrc] = receive_stream; 601 audio_receive_ssrcs_[config.rtp.remote_ssrc] = receive_stream;
566 receive_rtp_config_[config.rtp.remote_ssrc] = 602 receive_rtp_config_[config.rtp.remote_ssrc] =
567 ReceiveRtpConfig(config.rtp.extensions, UseSendSideBwe(config)); 603 ReceiveRtpConfig(config.rtp.extensions, UseSendSideBwe(config));
568 604
569 ConfigureSync(config.sync_group); 605 ConfigureSync(config.sync_group);
570 } 606 }
(...skipping 13 matching lines...) Expand all
584 webrtc::AudioReceiveStream* receive_stream) { 620 webrtc::AudioReceiveStream* receive_stream) {
585 TRACE_EVENT0("webrtc", "Call::DestroyAudioReceiveStream"); 621 TRACE_EVENT0("webrtc", "Call::DestroyAudioReceiveStream");
586 RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread()); 622 RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread());
587 RTC_DCHECK(receive_stream != nullptr); 623 RTC_DCHECK(receive_stream != nullptr);
588 webrtc::internal::AudioReceiveStream* audio_receive_stream = 624 webrtc::internal::AudioReceiveStream* audio_receive_stream =
589 static_cast<webrtc::internal::AudioReceiveStream*>(receive_stream); 625 static_cast<webrtc::internal::AudioReceiveStream*>(receive_stream);
590 { 626 {
591 WriteLockScoped write_lock(*receive_crit_); 627 WriteLockScoped write_lock(*receive_crit_);
592 const AudioReceiveStream::Config& config = audio_receive_stream->config(); 628 const AudioReceiveStream::Config& config = audio_receive_stream->config();
593 uint32_t ssrc = config.rtp.remote_ssrc; 629 uint32_t ssrc = config.rtp.remote_ssrc;
594 congestion_controller_->GetRemoteBitrateEstimator(UseSendSideBwe(config)) 630 transport_->congestion_controller()
631 ->GetRemoteBitrateEstimator(UseSendSideBwe(config))
595 ->RemoveStream(ssrc); 632 ->RemoveStream(ssrc);
596 size_t num_deleted = audio_receive_ssrcs_.erase(ssrc); 633 size_t num_deleted = audio_receive_ssrcs_.erase(ssrc);
597 RTC_DCHECK(num_deleted == 1); 634 RTC_DCHECK(num_deleted == 1);
598 const std::string& sync_group = audio_receive_stream->config().sync_group; 635 const std::string& sync_group = audio_receive_stream->config().sync_group;
599 const auto it = sync_stream_mapping_.find(sync_group); 636 const auto it = sync_stream_mapping_.find(sync_group);
600 if (it != sync_stream_mapping_.end() && 637 if (it != sync_stream_mapping_.end() &&
601 it->second == audio_receive_stream) { 638 it->second == audio_receive_stream) {
602 sync_stream_mapping_.erase(it); 639 sync_stream_mapping_.erase(it);
603 ConfigureSync(sync_group); 640 ConfigureSync(sync_group);
604 } 641 }
(...skipping 11 matching lines...) Expand all
616 653
617 video_send_delay_stats_->AddSsrcs(config); 654 video_send_delay_stats_->AddSsrcs(config);
618 event_log_->LogVideoSendStreamConfig(config); 655 event_log_->LogVideoSendStreamConfig(config);
619 656
620 // TODO(mflodman): Base the start bitrate on a current bandwidth estimate, if 657 // TODO(mflodman): Base the start bitrate on a current bandwidth estimate, if
621 // the call has already started. 658 // the call has already started.
622 // Copy ssrcs from |config| since |config| is moved. 659 // Copy ssrcs from |config| since |config| is moved.
623 std::vector<uint32_t> ssrcs = config.rtp.ssrcs; 660 std::vector<uint32_t> ssrcs = config.rtp.ssrcs;
624 VideoSendStream* send_stream = new VideoSendStream( 661 VideoSendStream* send_stream = new VideoSendStream(
625 num_cpu_cores_, module_process_thread_.get(), &worker_queue_, 662 num_cpu_cores_, module_process_thread_.get(), &worker_queue_,
626 call_stats_.get(), congestion_controller_.get(), &packet_router_, 663 call_stats_.get(), transport_.get(), bitrate_allocator_.get(),
627 bitrate_allocator_.get(), video_send_delay_stats_.get(), &remb_, 664 video_send_delay_stats_.get(), event_log_, std::move(config),
628 event_log_, std::move(config), std::move(encoder_config), 665 std::move(encoder_config), suspended_video_send_ssrcs_);
629 suspended_video_send_ssrcs_);
630 666
631 { 667 {
632 WriteLockScoped write_lock(*send_crit_); 668 WriteLockScoped write_lock(*send_crit_);
633 for (uint32_t ssrc : ssrcs) { 669 for (uint32_t ssrc : ssrcs) {
634 RTC_DCHECK(video_send_ssrcs_.find(ssrc) == video_send_ssrcs_.end()); 670 RTC_DCHECK(video_send_ssrcs_.find(ssrc) == video_send_ssrcs_.end());
635 video_send_ssrcs_[ssrc] = send_stream; 671 video_send_ssrcs_[ssrc] = send_stream;
636 } 672 }
637 video_send_streams_.insert(send_stream); 673 video_send_streams_.insert(send_stream);
638 } 674 }
639 send_stream->SignalNetworkState(video_network_state_); 675 send_stream->SignalNetworkState(video_network_state_);
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
676 UpdateAggregateNetworkState(); 712 UpdateAggregateNetworkState();
677 delete send_stream_impl; 713 delete send_stream_impl;
678 } 714 }
679 715
680 webrtc::VideoReceiveStream* Call::CreateVideoReceiveStream( 716 webrtc::VideoReceiveStream* Call::CreateVideoReceiveStream(
681 webrtc::VideoReceiveStream::Config configuration) { 717 webrtc::VideoReceiveStream::Config configuration) {
682 TRACE_EVENT0("webrtc", "Call::CreateVideoReceiveStream"); 718 TRACE_EVENT0("webrtc", "Call::CreateVideoReceiveStream");
683 RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread()); 719 RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread());
684 720
685 VideoReceiveStream* receive_stream = new VideoReceiveStream( 721 VideoReceiveStream* receive_stream = new VideoReceiveStream(
686 num_cpu_cores_, &packet_router_, std::move(configuration), 722 num_cpu_cores_, transport_->packet_router(),
687 module_process_thread_.get(), call_stats_.get(), &remb_); 723 std::move(configuration), module_process_thread_.get(), call_stats_.get(),
724 transport_->remb());
688 725
689 const webrtc::VideoReceiveStream::Config& config = receive_stream->config(); 726 const webrtc::VideoReceiveStream::Config& config = receive_stream->config();
690 ReceiveRtpConfig receive_config(config.rtp.extensions, 727 ReceiveRtpConfig receive_config(config.rtp.extensions,
691 UseSendSideBwe(config)); 728 UseSendSideBwe(config));
692 { 729 {
693 WriteLockScoped write_lock(*receive_crit_); 730 WriteLockScoped write_lock(*receive_crit_);
694 RTC_DCHECK(video_receive_ssrcs_.find(config.rtp.remote_ssrc) == 731 RTC_DCHECK(video_receive_ssrcs_.find(config.rtp.remote_ssrc) ==
695 video_receive_ssrcs_.end()); 732 video_receive_ssrcs_.end());
696 video_receive_ssrcs_[config.rtp.remote_ssrc] = receive_stream; 733 video_receive_ssrcs_[config.rtp.remote_ssrc] = receive_stream;
697 if (config.rtp.rtx_ssrc) { 734 if (config.rtp.rtx_ssrc) {
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
733 } else { 770 } else {
734 ++it; 771 ++it;
735 } 772 }
736 } 773 }
737 video_receive_streams_.erase(receive_stream_impl); 774 video_receive_streams_.erase(receive_stream_impl);
738 RTC_CHECK(receive_stream_impl != nullptr); 775 RTC_CHECK(receive_stream_impl != nullptr);
739 ConfigureSync(receive_stream_impl->config().sync_group); 776 ConfigureSync(receive_stream_impl->config().sync_group);
740 } 777 }
741 const VideoReceiveStream::Config& config = receive_stream_impl->config(); 778 const VideoReceiveStream::Config& config = receive_stream_impl->config();
742 779
743 congestion_controller_->GetRemoteBitrateEstimator(UseSendSideBwe(config)) 780 transport_->congestion_controller()
781 ->GetRemoteBitrateEstimator(UseSendSideBwe(config))
744 ->RemoveStream(config.rtp.remote_ssrc); 782 ->RemoveStream(config.rtp.remote_ssrc);
745 783
746 UpdateAggregateNetworkState(); 784 UpdateAggregateNetworkState();
747 delete receive_stream_impl; 785 delete receive_stream_impl;
748 } 786 }
749 787
750 FlexfecReceiveStream* Call::CreateFlexfecReceiveStream( 788 FlexfecReceiveStream* Call::CreateFlexfecReceiveStream(
751 const FlexfecReceiveStream::Config& config) { 789 const FlexfecReceiveStream::Config& config) {
752 TRACE_EVENT0("webrtc", "Call::CreateFlexfecReceiveStream"); 790 TRACE_EVENT0("webrtc", "Call::CreateFlexfecReceiveStream");
753 RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread()); 791 RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread());
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
809 ++prot_it; 847 ++prot_it;
810 } 848 }
811 auto media_it = flexfec_receive_ssrcs_media_.begin(); 849 auto media_it = flexfec_receive_ssrcs_media_.begin();
812 while (media_it != flexfec_receive_ssrcs_media_.end()) { 850 while (media_it != flexfec_receive_ssrcs_media_.end()) {
813 if (media_it->second == receive_stream_impl) 851 if (media_it->second == receive_stream_impl)
814 media_it = flexfec_receive_ssrcs_media_.erase(media_it); 852 media_it = flexfec_receive_ssrcs_media_.erase(media_it);
815 else 853 else
816 ++media_it; 854 ++media_it;
817 } 855 }
818 856
819 congestion_controller_->GetRemoteBitrateEstimator(UseSendSideBwe(config)) 857 transport_->congestion_controller()
858 ->GetRemoteBitrateEstimator(UseSendSideBwe(config))
820 ->RemoveStream(ssrc); 859 ->RemoveStream(ssrc);
821 860
822 flexfec_receive_streams_.erase(receive_stream_impl); 861 flexfec_receive_streams_.erase(receive_stream_impl);
823 } 862 }
824 863
825 delete receive_stream_impl; 864 delete receive_stream_impl;
826 } 865 }
827 866
828 Call::Stats Call::GetStats() const { 867 Call::Stats Call::GetStats() const {
829 // TODO(solenberg): Some test cases in EndToEndTest use this from a different 868 // TODO(solenberg): Some test cases in EndToEndTest use this from a different
830 // thread. Re-enable once that is fixed. 869 // thread. Re-enable once that is fixed.
831 // RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread()); 870 // RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread());
832 Stats stats; 871 Stats stats;
833 // Fetch available send/receive bitrates. 872 // Fetch available send/receive bitrates.
834 uint32_t send_bandwidth = 0; 873 uint32_t send_bandwidth = 0;
835 congestion_controller_->GetBitrateController()->AvailableBandwidth( 874 transport_->congestion_controller()
836 &send_bandwidth); 875 ->GetBitrateController()
876 ->AvailableBandwidth(&send_bandwidth);
837 std::vector<unsigned int> ssrcs; 877 std::vector<unsigned int> ssrcs;
838 uint32_t recv_bandwidth = 0; 878 uint32_t recv_bandwidth = 0;
839 congestion_controller_->GetRemoteBitrateEstimator(false)->LatestEstimate( 879 transport_->congestion_controller()
840 &ssrcs, &recv_bandwidth); 880 ->GetRemoteBitrateEstimator(false)
881 ->LatestEstimate(&ssrcs, &recv_bandwidth);
841 stats.send_bandwidth_bps = send_bandwidth; 882 stats.send_bandwidth_bps = send_bandwidth;
842 stats.recv_bandwidth_bps = recv_bandwidth; 883 stats.recv_bandwidth_bps = recv_bandwidth;
843 stats.pacer_delay_ms = congestion_controller_->GetPacerQueuingDelayMs(); 884 stats.pacer_delay_ms =
885 transport_->congestion_controller()->GetPacerQueuingDelayMs();
844 stats.rtt_ms = call_stats_->rtcp_rtt_stats()->LastProcessedRtt(); 886 stats.rtt_ms = call_stats_->rtcp_rtt_stats()->LastProcessedRtt();
845 { 887 {
846 rtc::CritScope cs(&bitrate_crit_); 888 rtc::CritScope cs(&bitrate_crit_);
847 stats.max_padding_bitrate_bps = configured_max_padding_bitrate_bps_; 889 stats.max_padding_bitrate_bps = configured_max_padding_bitrate_bps_;
848 } 890 }
849 return stats; 891 return stats;
850 } 892 }
851 893
852 void Call::SetBitrateConfig( 894 void Call::SetBitrateConfig(
853 const webrtc::Call::Config::BitrateConfig& bitrate_config) { 895 const webrtc::Call::Config::BitrateConfig& bitrate_config) {
(...skipping 12 matching lines...) Expand all
866 // Nothing new to set, early abort to avoid encoder reconfigurations. 908 // Nothing new to set, early abort to avoid encoder reconfigurations.
867 return; 909 return;
868 } 910 }
869 config_.bitrate_config.min_bitrate_bps = bitrate_config.min_bitrate_bps; 911 config_.bitrate_config.min_bitrate_bps = bitrate_config.min_bitrate_bps;
870 // Start bitrate of -1 means we should keep the old bitrate, which there is 912 // Start bitrate of -1 means we should keep the old bitrate, which there is
871 // no point in remembering for the future. 913 // no point in remembering for the future.
872 if (bitrate_config.start_bitrate_bps > 0) 914 if (bitrate_config.start_bitrate_bps > 0)
873 config_.bitrate_config.start_bitrate_bps = bitrate_config.start_bitrate_bps; 915 config_.bitrate_config.start_bitrate_bps = bitrate_config.start_bitrate_bps;
874 config_.bitrate_config.max_bitrate_bps = bitrate_config.max_bitrate_bps; 916 config_.bitrate_config.max_bitrate_bps = bitrate_config.max_bitrate_bps;
875 RTC_DCHECK_NE(bitrate_config.start_bitrate_bps, 0); 917 RTC_DCHECK_NE(bitrate_config.start_bitrate_bps, 0);
876 congestion_controller_->SetBweBitrates(bitrate_config.min_bitrate_bps, 918 transport_->congestion_controller()->SetBweBitrates(
877 bitrate_config.start_bitrate_bps, 919 bitrate_config.min_bitrate_bps, bitrate_config.start_bitrate_bps,
878 bitrate_config.max_bitrate_bps); 920 bitrate_config.max_bitrate_bps);
879 } 921 }
880 922
881 void Call::SignalChannelNetworkState(MediaType media, NetworkState state) { 923 void Call::SignalChannelNetworkState(MediaType media, NetworkState state) {
882 RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread()); 924 RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread());
883 switch (media) { 925 switch (media) {
884 case MediaType::AUDIO: 926 case MediaType::AUDIO:
885 audio_network_state_ = state; 927 audio_network_state_ = state;
886 break; 928 break;
887 case MediaType::VIDEO: 929 case MediaType::VIDEO:
888 video_network_state_ = state; 930 video_network_state_ = state;
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
963 kv->second = network_route; 1005 kv->second = network_route;
964 LOG(LS_INFO) << "Network route changed on transport " << transport_name 1006 LOG(LS_INFO) << "Network route changed on transport " << transport_name
965 << ": new local network id " << network_route.local_network_id 1007 << ": new local network id " << network_route.local_network_id
966 << " new remote network id " << network_route.remote_network_id 1008 << " new remote network id " << network_route.remote_network_id
967 << " Reset bitrates to min: " 1009 << " Reset bitrates to min: "
968 << config_.bitrate_config.min_bitrate_bps 1010 << config_.bitrate_config.min_bitrate_bps
969 << " bps, start: " << config_.bitrate_config.start_bitrate_bps 1011 << " bps, start: " << config_.bitrate_config.start_bitrate_bps
970 << " bps, max: " << config_.bitrate_config.start_bitrate_bps 1012 << " bps, max: " << config_.bitrate_config.start_bitrate_bps
971 << " bps."; 1013 << " bps.";
972 RTC_DCHECK_GT(config_.bitrate_config.start_bitrate_bps, 0); 1014 RTC_DCHECK_GT(config_.bitrate_config.start_bitrate_bps, 0);
973 congestion_controller_->ResetBweAndBitrates( 1015 transport_->congestion_controller()->ResetBweAndBitrates(
974 config_.bitrate_config.start_bitrate_bps, 1016 config_.bitrate_config.start_bitrate_bps,
975 config_.bitrate_config.min_bitrate_bps, 1017 config_.bitrate_config.min_bitrate_bps,
976 config_.bitrate_config.max_bitrate_bps); 1018 config_.bitrate_config.max_bitrate_bps);
977 } 1019 }
978 } 1020 }
979 1021
980 void Call::UpdateAggregateNetworkState() { 1022 void Call::UpdateAggregateNetworkState() {
981 RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread()); 1023 RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread());
982 1024
983 bool have_audio = false; 1025 bool have_audio = false;
(...skipping 15 matching lines...) Expand all
999 1041
1000 NetworkState aggregate_state = kNetworkDown; 1042 NetworkState aggregate_state = kNetworkDown;
1001 if ((have_video && video_network_state_ == kNetworkUp) || 1043 if ((have_video && video_network_state_ == kNetworkUp) ||
1002 (have_audio && audio_network_state_ == kNetworkUp)) { 1044 (have_audio && audio_network_state_ == kNetworkUp)) {
1003 aggregate_state = kNetworkUp; 1045 aggregate_state = kNetworkUp;
1004 } 1046 }
1005 1047
1006 LOG(LS_INFO) << "UpdateAggregateNetworkState: aggregate_state=" 1048 LOG(LS_INFO) << "UpdateAggregateNetworkState: aggregate_state="
1007 << (aggregate_state == kNetworkUp ? "up" : "down"); 1049 << (aggregate_state == kNetworkUp ? "up" : "down");
1008 1050
1009 congestion_controller_->SignalNetworkState(aggregate_state); 1051 transport_->congestion_controller()->SignalNetworkState(aggregate_state);
1010 } 1052 }
1011 1053
1012 void Call::OnSentPacket(const rtc::SentPacket& sent_packet) { 1054 void Call::OnSentPacket(const rtc::SentPacket& sent_packet) {
1013 if (first_packet_sent_ms_ == -1) 1055 if (first_packet_sent_ms_ == -1)
1014 first_packet_sent_ms_ = clock_->TimeInMilliseconds(); 1056 first_packet_sent_ms_ = clock_->TimeInMilliseconds();
1015 video_send_delay_stats_->OnSentPacket(sent_packet.packet_id, 1057 video_send_delay_stats_->OnSentPacket(sent_packet.packet_id,
1016 clock_->TimeInMilliseconds()); 1058 clock_->TimeInMilliseconds());
1017 congestion_controller_->OnSentPacket(sent_packet); 1059 transport_->congestion_controller()->OnSentPacket(sent_packet);
1018 } 1060 }
1019 1061
1020 void Call::OnNetworkChanged(uint32_t target_bitrate_bps, 1062 void Call::OnNetworkChanged(uint32_t target_bitrate_bps,
1021 uint8_t fraction_loss, 1063 uint8_t fraction_loss,
1022 int64_t rtt_ms, 1064 int64_t rtt_ms,
1023 int64_t probing_interval_ms) { 1065 int64_t probing_interval_ms) {
1024 // TODO(perkj): Consider making sure CongestionController operates on 1066 // TODO(perkj): Consider making sure CongestionController operates on
1025 // |worker_queue_|. 1067 // |worker_queue_|.
1026 if (!worker_queue_.IsCurrent()) { 1068 if (!worker_queue_.IsCurrent()) {
1027 worker_queue_.PostTask( 1069 worker_queue_.PostTask(
(...skipping 30 matching lines...) Expand all
1058 } 1100 }
1059 estimated_send_bitrate_kbps_counter_.Add(target_bitrate_bps / 1000); 1101 estimated_send_bitrate_kbps_counter_.Add(target_bitrate_bps / 1000);
1060 // Pacer bitrate may be higher than bitrate estimate if enforcing min bitrate. 1102 // Pacer bitrate may be higher than bitrate estimate if enforcing min bitrate.
1061 uint32_t pacer_bitrate_bps = 1103 uint32_t pacer_bitrate_bps =
1062 std::max(target_bitrate_bps, min_allocated_send_bitrate_bps_); 1104 std::max(target_bitrate_bps, min_allocated_send_bitrate_bps_);
1063 pacer_bitrate_kbps_counter_.Add(pacer_bitrate_bps / 1000); 1105 pacer_bitrate_kbps_counter_.Add(pacer_bitrate_bps / 1000);
1064 } 1106 }
1065 1107
1066 void Call::OnAllocationLimitsChanged(uint32_t min_send_bitrate_bps, 1108 void Call::OnAllocationLimitsChanged(uint32_t min_send_bitrate_bps,
1067 uint32_t max_padding_bitrate_bps) { 1109 uint32_t max_padding_bitrate_bps) {
1068 congestion_controller_->SetAllocatedSendBitrateLimits( 1110 transport_->congestion_controller()->SetAllocatedSendBitrateLimits(
1069 min_send_bitrate_bps, max_padding_bitrate_bps); 1111 min_send_bitrate_bps, max_padding_bitrate_bps);
1070 rtc::CritScope lock(&bitrate_crit_); 1112 rtc::CritScope lock(&bitrate_crit_);
1071 min_allocated_send_bitrate_bps_ = min_send_bitrate_bps; 1113 min_allocated_send_bitrate_bps_ = min_send_bitrate_bps;
1072 configured_max_padding_bitrate_bps_ = max_padding_bitrate_bps; 1114 configured_max_padding_bitrate_bps_ = max_padding_bitrate_bps;
1073 } 1115 }
1074 1116
1075 void Call::ConfigureSync(const std::string& sync_group) { 1117 void Call::ConfigureSync(const std::string& sync_group) {
1076 // Set sync only if there was no previous one. 1118 // Set sync only if there was no previous one.
1077 if (sync_group.empty()) 1119 if (sync_group.empty())
1078 return; 1120 return;
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after
1271 // module in the case that some, but not all, have RTCP feedback 1313 // module in the case that some, but not all, have RTCP feedback
1272 // enabled. 1314 // enabled.
1273 return; 1315 return;
1274 } 1316 }
1275 // For audio, we only support send side BWE. 1317 // For audio, we only support send side BWE.
1276 // TODO(nisse): Tests passes MediaType::ANY, see 1318 // TODO(nisse): Tests passes MediaType::ANY, see
1277 // FakeNetworkPipe::Process. We need to treat that as video. Tests 1319 // FakeNetworkPipe::Process. We need to treat that as video. Tests
1278 // should be fixed to use the same MediaType as the production code. 1320 // should be fixed to use the same MediaType as the production code.
1279 if (media_type != MediaType::AUDIO || 1321 if (media_type != MediaType::AUDIO ||
1280 (use_send_side_bwe && header.extension.hasTransportSequenceNumber)) { 1322 (use_send_side_bwe && header.extension.hasTransportSequenceNumber)) {
1281 congestion_controller_->OnReceivedPacket( 1323 transport_->congestion_controller()->OnReceivedPacket(
1282 packet.arrival_time_ms(), packet.payload_size() + packet.padding_size(), 1324 packet.arrival_time_ms(), packet.payload_size() + packet.padding_size(),
1283 header); 1325 header);
1284 } 1326 }
1285 } 1327 }
1286 1328
1287 } // namespace internal 1329 } // namespace internal
1330
1288 } // namespace webrtc 1331 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698