OLD | NEW |
---|---|
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 |
OLD | NEW |