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

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

Issue 2838233002: Add PeerConnectionInterface::UpdateCallBitrate with call tests. (Closed)
Patch Set: Created 3 years, 7 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 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
84 } 84 }
85 85
86 bool UseSendSideBwe(const FlexfecReceiveStream::Config& config) { 86 bool UseSendSideBwe(const FlexfecReceiveStream::Config& config) {
87 return UseSendSideBwe(config.rtp_header_extensions, config.transport_cc); 87 return UseSendSideBwe(config.rtp_header_extensions, config.transport_cc);
88 } 88 }
89 89
90 class RtpTransportControllerSend : public RtpTransportControllerSendInterface { 90 class RtpTransportControllerSend : public RtpTransportControllerSendInterface {
91 public: 91 public:
92 RtpTransportControllerSend(Clock* clock, webrtc::RtcEventLog* event_log); 92 RtpTransportControllerSend(Clock* clock, webrtc::RtcEventLog* event_log);
93 93
94 void RegisterNetworkObserver(
95 SendSideCongestionController::Observer* observer);
96
97 // Implements RtpTransportControllerSendInterface 94 // Implements RtpTransportControllerSendInterface
98 PacketRouter* packet_router() override { return &packet_router_; } 95 PacketRouter* packet_router() override { return &packet_router_; }
99 SendSideCongestionController* send_side_cc() override { 96 SendSideCongestionController* send_side_cc() override {
100 return &send_side_cc_; 97 return &send_side_cc_;
101 } 98 }
102 TransportFeedbackObserver* transport_feedback_observer() override { 99 TransportFeedbackObserver* transport_feedback_observer() override {
103 return &send_side_cc_; 100 return &send_side_cc_;
104 } 101 }
105 RtpPacketSender* packet_sender() override { return send_side_cc_.pacer(); } 102 RtpPacketSender* packet_sender() override { return send_side_cc_.pacer(); }
106 103
107 private: 104 private:
108 PacketRouter packet_router_; 105 PacketRouter packet_router_;
109 SendSideCongestionController send_side_cc_; 106 SendSideCongestionController send_side_cc_;
110 }; 107 };
111 108
112 RtpTransportControllerSend::RtpTransportControllerSend( 109 RtpTransportControllerSend::RtpTransportControllerSend(
113 Clock* clock, 110 Clock* clock,
114 webrtc::RtcEventLog* event_log) 111 webrtc::RtcEventLog* event_log)
115 : send_side_cc_(clock, nullptr /* observer */, event_log, &packet_router_) { 112 : send_side_cc_(clock, nullptr /* observer */, event_log, &packet_router_) {
116 } 113 }
117 114
118 void RtpTransportControllerSend::RegisterNetworkObserver(
119 SendSideCongestionController::Observer* observer) {
120 // Must be called only once.
121 send_side_cc_.RegisterNetworkObserver(observer);
122 }
123
124 } // namespace 115 } // namespace
125 116
126 namespace internal { 117 namespace internal {
127 118
128 class Call : public webrtc::Call, 119 class Call : public webrtc::Call,
129 public PacketReceiver, 120 public PacketReceiver,
130 public RecoveredPacketReceiver, 121 public RecoveredPacketReceiver,
131 public SendSideCongestionController::Observer, 122 public SendSideCongestionController::Observer,
132 public BitrateAllocator::LimitObserver { 123 public BitrateAllocator::LimitObserver {
133 public: 124 public:
134 Call(const Call::Config& config, 125 Call(const Call::Config& config,
135 std::unique_ptr<RtpTransportControllerSend> transport_send); 126 std::unique_ptr<RtpTransportControllerSendInterface> transport_send);
136 virtual ~Call(); 127 virtual ~Call();
137 128
138 // Implements webrtc::Call. 129 // Implements webrtc::Call.
139 PacketReceiver* Receiver() override; 130 PacketReceiver* Receiver() override;
140 131
141 webrtc::AudioSendStream* CreateAudioSendStream( 132 webrtc::AudioSendStream* CreateAudioSendStream(
142 const webrtc::AudioSendStream::Config& config) override; 133 const webrtc::AudioSendStream::Config& config) override;
143 void DestroyAudioSendStream(webrtc::AudioSendStream* send_stream) override; 134 void DestroyAudioSendStream(webrtc::AudioSendStream* send_stream) override;
144 135
145 webrtc::AudioReceiveStream* CreateAudioReceiveStream( 136 webrtc::AudioReceiveStream* CreateAudioReceiveStream(
(...skipping 23 matching lines...) Expand all
169 const uint8_t* packet, 160 const uint8_t* packet,
170 size_t length, 161 size_t length,
171 const PacketTime& packet_time) override; 162 const PacketTime& packet_time) override;
172 163
173 // Implements RecoveredPacketReceiver. 164 // Implements RecoveredPacketReceiver.
174 bool OnRecoveredPacket(const uint8_t* packet, size_t length) override; 165 bool OnRecoveredPacket(const uint8_t* packet, size_t length) override;
175 166
176 void SetBitrateConfig( 167 void SetBitrateConfig(
177 const webrtc::Call::Config::BitrateConfig& bitrate_config) override; 168 const webrtc::Call::Config::BitrateConfig& bitrate_config) override;
178 169
170 RTCError SetBitrateConfigMask(
171 const webrtc::Call::Config::BitrateConfigMask& bitrate_config) override;
172
179 void SignalChannelNetworkState(MediaType media, NetworkState state) override; 173 void SignalChannelNetworkState(MediaType media, NetworkState state) override;
180 174
181 void OnTransportOverheadChanged(MediaType media, 175 void OnTransportOverheadChanged(MediaType media,
182 int transport_overhead_per_packet) override; 176 int transport_overhead_per_packet) override;
183 177
184 void OnNetworkRouteChanged(const std::string& transport_name, 178 void OnNetworkRouteChanged(const std::string& transport_name,
185 const rtc::NetworkRoute& network_route) override; 179 const rtc::NetworkRoute& network_route) override;
186 180
187 void OnSentPacket(const rtc::SentPacket& sent_packet) override; 181 void OnSentPacket(const rtc::SentPacket& sent_packet) override;
188 182
(...skipping 26 matching lines...) Expand all
215 size_t length, 209 size_t length,
216 const PacketTime& packet_time) 210 const PacketTime& packet_time)
217 SHARED_LOCKS_REQUIRED(receive_crit_); 211 SHARED_LOCKS_REQUIRED(receive_crit_);
218 212
219 void UpdateSendHistograms(int64_t first_sent_packet_ms) 213 void UpdateSendHistograms(int64_t first_sent_packet_ms)
220 EXCLUSIVE_LOCKS_REQUIRED(&bitrate_crit_); 214 EXCLUSIVE_LOCKS_REQUIRED(&bitrate_crit_);
221 void UpdateReceiveHistograms(); 215 void UpdateReceiveHistograms();
222 void UpdateHistograms(); 216 void UpdateHistograms();
223 void UpdateAggregateNetworkState(); 217 void UpdateAggregateNetworkState();
224 218
219 // Updates the BitrateConfig cached in |config_| by combining
220 // |base_bitrate_config_| and |bitrate_config_mask_| and updates the
221 // congestion controller if the combined config changed or if
222 // |force_update| is true.
223 RTCError UpdateCurrentBitrateConfig(bool force_update);
224
225 // UpdateCurrentBitrateConfig, but doesn't verify BitrateConfig invariants.
226 void UpdateCurrentBitrateConfigUnchecked();
227
225 Clock* const clock_; 228 Clock* const clock_;
226 229
227 const int num_cpu_cores_; 230 const int num_cpu_cores_;
228 const std::unique_ptr<ProcessThread> module_process_thread_; 231 const std::unique_ptr<ProcessThread> module_process_thread_;
229 const std::unique_ptr<ProcessThread> pacer_thread_; 232 const std::unique_ptr<ProcessThread> pacer_thread_;
230 const std::unique_ptr<CallStats> call_stats_; 233 const std::unique_ptr<CallStats> call_stats_;
231 const std::unique_ptr<BitrateAllocator> bitrate_allocator_; 234 const std::unique_ptr<BitrateAllocator> bitrate_allocator_;
232 Call::Config config_; 235 Call::Config config_;
233 rtc::ThreadChecker configuration_thread_checker_; 236 rtc::ThreadChecker configuration_thread_checker_;
234 237
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
309 std::unique_ptr<RtpTransportControllerSendInterface> transport_send_; 312 std::unique_ptr<RtpTransportControllerSendInterface> transport_send_;
310 ReceiveSideCongestionController receive_side_cc_; 313 ReceiveSideCongestionController receive_side_cc_;
311 const std::unique_ptr<SendDelayStats> video_send_delay_stats_; 314 const std::unique_ptr<SendDelayStats> video_send_delay_stats_;
312 const int64_t start_ms_; 315 const int64_t start_ms_;
313 // TODO(perkj): |worker_queue_| is supposed to replace 316 // TODO(perkj): |worker_queue_| is supposed to replace
314 // |module_process_thread_|. 317 // |module_process_thread_|.
315 // |worker_queue| is defined last to ensure all pending tasks are cancelled 318 // |worker_queue| is defined last to ensure all pending tasks are cancelled
316 // and deleted before any other members. 319 // and deleted before any other members.
317 rtc::TaskQueue worker_queue_; 320 rtc::TaskQueue worker_queue_;
318 321
322 // The config mask set by SetBitrateConfigMask.
323 // 0 <= min <= start <= max
324 Config::BitrateConfigMask bitrate_config_mask_;
325
326 // The config set by SetBitrateConfig.
327 // min >= 0, start != 0, max == -1 || max > 0
328 Config::BitrateConfig base_bitrate_config_;
329
319 RTC_DISALLOW_COPY_AND_ASSIGN(Call); 330 RTC_DISALLOW_COPY_AND_ASSIGN(Call);
320 }; 331 };
321 } // namespace internal 332 } // namespace internal
322 333
323 std::string Call::Stats::ToString(int64_t time_ms) const { 334 std::string Call::Stats::ToString(int64_t time_ms) const {
324 std::stringstream ss; 335 std::stringstream ss;
325 ss << "Call stats: " << time_ms << ", {"; 336 ss << "Call stats: " << time_ms << ", {";
326 ss << "send_bw_bps: " << send_bandwidth_bps << ", "; 337 ss << "send_bw_bps: " << send_bandwidth_bps << ", ";
327 ss << "recv_bw_bps: " << recv_bandwidth_bps << ", "; 338 ss << "recv_bw_bps: " << recv_bandwidth_bps << ", ";
328 ss << "max_pad_bps: " << max_padding_bitrate_bps << ", "; 339 ss << "max_pad_bps: " << max_padding_bitrate_bps << ", ";
329 ss << "pacer_delay_ms: " << pacer_delay_ms << ", "; 340 ss << "pacer_delay_ms: " << pacer_delay_ms << ", ";
330 ss << "rtt_ms: " << rtt_ms; 341 ss << "rtt_ms: " << rtt_ms;
331 ss << '}'; 342 ss << '}';
332 return ss.str(); 343 return ss.str();
333 } 344 }
334 345
335 Call* Call::Create(const Call::Config& config) { 346 Call* Call::Create(const Call::Config& config) {
336 return new internal::Call( 347 return new internal::Call(
337 config, std::unique_ptr<RtpTransportControllerSend>( 348 config, std::unique_ptr<RtpTransportControllerSend>(
338 new RtpTransportControllerSend(Clock::GetRealTimeClock(), 349 new RtpTransportControllerSend(Clock::GetRealTimeClock(),
339 config.event_log))); 350 config.event_log)));
340 } 351 }
341 352
353 Call* Call::Create(
354 const Call::Config& config,
355 std::unique_ptr<RtpTransportControllerSendInterface> transport_send) {
356 return new internal::Call(config, std::move(transport_send));
357 }
358
342 namespace internal { 359 namespace internal {
343 360
344 Call::Call(const Call::Config& config, 361 Call::Call(const Call::Config& config,
345 std::unique_ptr<RtpTransportControllerSend> transport_send) 362 std::unique_ptr<RtpTransportControllerSendInterface> transport_send)
346 : clock_(Clock::GetRealTimeClock()), 363 : clock_(Clock::GetRealTimeClock()),
347 num_cpu_cores_(CpuInfo::DetectNumberOfCores()), 364 num_cpu_cores_(CpuInfo::DetectNumberOfCores()),
348 module_process_thread_(ProcessThread::Create("ModuleProcessThread")), 365 module_process_thread_(ProcessThread::Create("ModuleProcessThread")),
349 pacer_thread_(ProcessThread::Create("PacerThread")), 366 pacer_thread_(ProcessThread::Create("PacerThread")),
350 call_stats_(new CallStats(clock_)), 367 call_stats_(new CallStats(clock_)),
351 bitrate_allocator_(new BitrateAllocator(this)), 368 bitrate_allocator_(new BitrateAllocator(this)),
352 config_(config), 369 config_(config),
353 audio_network_state_(kNetworkDown), 370 audio_network_state_(kNetworkDown),
354 video_network_state_(kNetworkDown), 371 video_network_state_(kNetworkDown),
355 receive_crit_(RWLockWrapper::CreateRWLock()), 372 receive_crit_(RWLockWrapper::CreateRWLock()),
356 send_crit_(RWLockWrapper::CreateRWLock()), 373 send_crit_(RWLockWrapper::CreateRWLock()),
357 event_log_(config.event_log), 374 event_log_(config.event_log),
358 received_bytes_per_second_counter_(clock_, nullptr, true), 375 received_bytes_per_second_counter_(clock_, nullptr, true),
359 received_audio_bytes_per_second_counter_(clock_, nullptr, true), 376 received_audio_bytes_per_second_counter_(clock_, nullptr, true),
360 received_video_bytes_per_second_counter_(clock_, nullptr, true), 377 received_video_bytes_per_second_counter_(clock_, nullptr, true),
361 received_rtcp_bytes_per_second_counter_(clock_, nullptr, true), 378 received_rtcp_bytes_per_second_counter_(clock_, nullptr, true),
362 min_allocated_send_bitrate_bps_(0), 379 min_allocated_send_bitrate_bps_(0),
363 configured_max_padding_bitrate_bps_(0), 380 configured_max_padding_bitrate_bps_(0),
364 estimated_send_bitrate_kbps_counter_(clock_, nullptr, true), 381 estimated_send_bitrate_kbps_counter_(clock_, nullptr, true),
365 pacer_bitrate_kbps_counter_(clock_, nullptr, true), 382 pacer_bitrate_kbps_counter_(clock_, nullptr, true),
366 receive_side_cc_(clock_, transport_send->packet_router()), 383 receive_side_cc_(clock_, transport_send->packet_router()),
367 video_send_delay_stats_(new SendDelayStats(clock_)), 384 video_send_delay_stats_(new SendDelayStats(clock_)),
368 start_ms_(clock_->TimeInMilliseconds()), 385 start_ms_(clock_->TimeInMilliseconds()),
369 worker_queue_("call_worker_queue") { 386 worker_queue_("call_worker_queue"),
387 base_bitrate_config_(config.bitrate_config) {
370 RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread()); 388 RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread());
371 RTC_DCHECK(config.event_log != nullptr); 389 RTC_DCHECK(config.event_log != nullptr);
372 RTC_DCHECK_GE(config.bitrate_config.min_bitrate_bps, 0); 390 RTC_DCHECK_GE(config.bitrate_config.min_bitrate_bps, 0);
373 RTC_DCHECK_GE(config.bitrate_config.start_bitrate_bps, 391 RTC_DCHECK_GE(config.bitrate_config.start_bitrate_bps,
374 config.bitrate_config.min_bitrate_bps); 392 config.bitrate_config.min_bitrate_bps);
375 if (config.bitrate_config.max_bitrate_bps != -1) { 393 if (config.bitrate_config.max_bitrate_bps != -1) {
376 RTC_DCHECK_GE(config.bitrate_config.max_bitrate_bps, 394 RTC_DCHECK_GE(config.bitrate_config.max_bitrate_bps,
377 config.bitrate_config.start_bitrate_bps); 395 config.bitrate_config.start_bitrate_bps);
378 } 396 }
379 Trace::CreateTrace(); 397 Trace::CreateTrace();
380 transport_send->RegisterNetworkObserver(this); 398 transport_send->send_side_cc()->RegisterNetworkObserver(this);
381 transport_send_ = std::move(transport_send); 399 transport_send_ = std::move(transport_send);
382 transport_send_->send_side_cc()->SignalNetworkState(kNetworkDown); 400 transport_send_->send_side_cc()->SignalNetworkState(kNetworkDown);
383 transport_send_->send_side_cc()->SetBweBitrates( 401 transport_send_->send_side_cc()->SetBweBitrates(
384 config_.bitrate_config.min_bitrate_bps, 402 config_.bitrate_config.min_bitrate_bps,
385 config_.bitrate_config.start_bitrate_bps, 403 config_.bitrate_config.start_bitrate_bps,
386 config_.bitrate_config.max_bitrate_bps); 404 config_.bitrate_config.max_bitrate_bps);
387 call_stats_->RegisterStatsObserver(&receive_side_cc_); 405 call_stats_->RegisterStatsObserver(&receive_side_cc_);
388 call_stats_->RegisterStatsObserver(transport_send_->send_side_cc()); 406 call_stats_->RegisterStatsObserver(transport_send_->send_side_cc());
389 407
390 module_process_thread_->Start(); 408 module_process_thread_->Start();
(...skipping 493 matching lines...) Expand 10 before | Expand all | Expand 10 after
884 rtc::CritScope cs(&bitrate_crit_); 902 rtc::CritScope cs(&bitrate_crit_);
885 stats.max_padding_bitrate_bps = configured_max_padding_bitrate_bps_; 903 stats.max_padding_bitrate_bps = configured_max_padding_bitrate_bps_;
886 } 904 }
887 return stats; 905 return stats;
888 } 906 }
889 907
890 void Call::SetBitrateConfig( 908 void Call::SetBitrateConfig(
891 const webrtc::Call::Config::BitrateConfig& bitrate_config) { 909 const webrtc::Call::Config::BitrateConfig& bitrate_config) {
892 TRACE_EVENT0("webrtc", "Call::SetBitrateConfig"); 910 TRACE_EVENT0("webrtc", "Call::SetBitrateConfig");
893 RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread()); 911 RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread());
912
894 RTC_DCHECK_GE(bitrate_config.min_bitrate_bps, 0); 913 RTC_DCHECK_GE(bitrate_config.min_bitrate_bps, 0);
895 if (bitrate_config.max_bitrate_bps != -1) 914 RTC_DCHECK_NE(bitrate_config.start_bitrate_bps, 0);
915 if (bitrate_config.max_bitrate_bps != -1) {
896 RTC_DCHECK_GT(bitrate_config.max_bitrate_bps, 0); 916 RTC_DCHECK_GT(bitrate_config.max_bitrate_bps, 0);
897 if (config_.bitrate_config.min_bitrate_bps == 917 }
898 bitrate_config.min_bitrate_bps && 918
899 (bitrate_config.start_bitrate_bps <= 0 || 919 const bool same_min =
900 config_.bitrate_config.start_bitrate_bps == 920 base_bitrate_config_.min_bitrate_bps == bitrate_config.min_bitrate_bps;
901 bitrate_config.start_bitrate_bps) && 921 const bool same_start = base_bitrate_config_.start_bitrate_bps ==
902 config_.bitrate_config.max_bitrate_bps == 922 bitrate_config.start_bitrate_bps;
903 bitrate_config.max_bitrate_bps) { 923 const bool same_max =
924 base_bitrate_config_.max_bitrate_bps == bitrate_config.max_bitrate_bps;
925 // TODO(zstein): s/same_max/bitrate_config.max_bitrate_bps == -1 || same_max/
926 if (same_min && (bitrate_config.start_bitrate_bps <= 0 || same_start) &&
927 same_max) {
904 // Nothing new to set, early abort to avoid encoder reconfigurations. 928 // Nothing new to set, early abort to avoid encoder reconfigurations.
905 return; 929 return;
906 } 930 }
907 config_.bitrate_config.min_bitrate_bps = bitrate_config.min_bitrate_bps; 931
932 base_bitrate_config_.min_bitrate_bps = bitrate_config.min_bitrate_bps;
908 // Start bitrate of -1 means we should keep the old bitrate, which there is 933 // Start bitrate of -1 means we should keep the old bitrate, which there is
909 // no point in remembering for the future. 934 // no point in remembering for the future.
910 if (bitrate_config.start_bitrate_bps > 0) 935 if (bitrate_config.start_bitrate_bps > 0) {
911 config_.bitrate_config.start_bitrate_bps = bitrate_config.start_bitrate_bps; 936 base_bitrate_config_.start_bitrate_bps = bitrate_config.start_bitrate_bps;
912 config_.bitrate_config.max_bitrate_bps = bitrate_config.max_bitrate_bps; 937 }
913 RTC_DCHECK_NE(bitrate_config.start_bitrate_bps, 0); 938 base_bitrate_config_.max_bitrate_bps = bitrate_config.max_bitrate_bps;
939
940 UpdateCurrentBitrateConfigUnchecked();
941 }
942
943 RTCError Call::SetBitrateConfigMask(
944 const webrtc::Call::Config::BitrateConfigMask& mask) {
945 TRACE_EVENT0("webrtc", "Call::SetBitrateConfigMask");
946 RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread());
947
948 bitrate_config_mask_ = mask;
949
950 const bool force_update = static_cast<bool>(mask.start_bitrate_bps);
951
952 return UpdateCurrentBitrateConfig(force_update);
953 }
954
955 Call::Config::BitrateConfig ComputeMasked(
956 const Call::Config::BitrateConfig& base,
957 const Call::Config::BitrateConfigMask& mask) {
958 Call::Config::BitrateConfig masked;
959 masked.min_bitrate_bps = mask.min_bitrate_bps.value_or(base.min_bitrate_bps);
960 masked.start_bitrate_bps =
961 mask.start_bitrate_bps.value_or(base.start_bitrate_bps);
962
963 const rtc::Optional<int>& mask_max = mask.max_bitrate_bps;
964 const int base_max = base.max_bitrate_bps;
965 const bool mask_has_max = static_cast<bool>(mask_max);
966 const bool base_has_max = base_max != -1;
967 if (mask_has_max && base_has_max) {
968 masked.max_bitrate_bps = std::min(*mask_max, base_max);
969 } else if (mask_has_max) {
970 masked.max_bitrate_bps = *mask_max;
971 } else if (base_has_max) {
972 masked.max_bitrate_bps = base_max;
973 } else {
974 masked.max_bitrate_bps = -1;
975 }
976
977 return masked;
978 }
979
980 void Call::UpdateCurrentBitrateConfigUnchecked() {
981 Config::BitrateConfig masked =
982 ComputeMasked(base_bitrate_config_, bitrate_config_mask_);
983
984 // We only get here if SetBitrateConfig changed something.
985
986 config_.bitrate_config = masked;
914 transport_send_->send_side_cc()->SetBweBitrates( 987 transport_send_->send_side_cc()->SetBweBitrates(
915 bitrate_config.min_bitrate_bps, bitrate_config.start_bitrate_bps, 988 masked.min_bitrate_bps, masked.start_bitrate_bps, masked.max_bitrate_bps);
916 bitrate_config.max_bitrate_bps); 989 }
990
991 RTCError Call::UpdateCurrentBitrateConfig(bool force_update) {
992 Config::BitrateConfig masked =
993 ComputeMasked(base_bitrate_config_, bitrate_config_mask_);
994
995 Config::BitrateConfig& current = config_.bitrate_config;
996 if (!force_update && masked.min_bitrate_bps == current.min_bitrate_bps &&
997 masked.start_bitrate_bps == current.start_bitrate_bps &&
998 masked.max_bitrate_bps == current.max_bitrate_bps) {
999 return RTCError::OK();
1000 }
1001
1002 RTC_DCHECK_GE(masked.min_bitrate_bps, 0);
1003 if (masked.start_bitrate_bps > 0 &&
1004 masked.start_bitrate_bps < masked.min_bitrate_bps) {
1005 LOG_AND_RETURN_ERROR(
1006 RTCErrorType::INVALID_STATE,
1007 "effective start_bitrate_bps < effective min_bitrate_bps");
1008 }
1009 if (masked.max_bitrate_bps != -1 && masked.start_bitrate_bps > 0 &&
1010 masked.max_bitrate_bps < masked.start_bitrate_bps) {
1011 LOG_AND_RETURN_ERROR(
1012 RTCErrorType::INVALID_STATE,
1013 "effective max_bitrate_bps < effective start_bitrate_bps");
1014 }
1015 if (masked.max_bitrate_bps != -1 &&
1016 masked.max_bitrate_bps < masked.min_bitrate_bps) {
1017 LOG_AND_RETURN_ERROR(
1018 RTCErrorType::INVALID_STATE,
1019 "effective max_bitrate_bps < effective min_bitrate_bps");
1020 }
1021
1022 current = masked;
1023 transport_send_->send_side_cc()->SetBweBitrates(current.min_bitrate_bps,
1024 current.start_bitrate_bps,
1025 current.max_bitrate_bps);
1026 return RTCError::OK();
917 } 1027 }
Taylor_Brandstetter 2017/04/26 15:46:11 I still think the code in this file could be simpl
Zach Stein 2017/05/04 22:32:43 Acknowledged.
918 1028
919 void Call::SignalChannelNetworkState(MediaType media, NetworkState state) { 1029 void Call::SignalChannelNetworkState(MediaType media, NetworkState state) {
920 RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread()); 1030 RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread());
921 switch (media) { 1031 switch (media) {
922 case MediaType::AUDIO: 1032 case MediaType::AUDIO:
923 audio_network_state_ = state; 1033 audio_network_state_ = state;
924 break; 1034 break;
925 case MediaType::VIDEO: 1035 case MediaType::VIDEO:
926 video_network_state_ = state; 1036 video_network_state_ = state;
927 break; 1037 break;
(...skipping 389 matching lines...) Expand 10 before | Expand all | Expand 10 after
1317 (use_send_side_bwe && header.extension.hasTransportSequenceNumber)) { 1427 (use_send_side_bwe && header.extension.hasTransportSequenceNumber)) {
1318 receive_side_cc_.OnReceivedPacket( 1428 receive_side_cc_.OnReceivedPacket(
1319 packet.arrival_time_ms(), packet.payload_size() + packet.padding_size(), 1429 packet.arrival_time_ms(), packet.payload_size() + packet.padding_size(),
1320 header); 1430 header);
1321 } 1431 }
1322 } 1432 }
1323 1433
1324 } // namespace internal 1434 } // namespace internal
1325 1435
1326 } // namespace webrtc 1436 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698