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

Side by Side Diff: webrtc/video/video_send_stream.cc

Issue 1663413003: Clean up of CongestionController. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: rebase. Created 4 years, 10 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
« no previous file with comments | « webrtc/video/video_send_stream.h ('k') | webrtc/video/vie_remb.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 10 matching lines...) Expand all
21 #include "webrtc/call/congestion_controller.h" 21 #include "webrtc/call/congestion_controller.h"
22 #include "webrtc/common_video/libyuv/include/webrtc_libyuv.h" 22 #include "webrtc/common_video/libyuv/include/webrtc_libyuv.h"
23 #include "webrtc/modules/bitrate_controller/include/bitrate_controller.h" 23 #include "webrtc/modules/bitrate_controller/include/bitrate_controller.h"
24 #include "webrtc/modules/pacing/packet_router.h" 24 #include "webrtc/modules/pacing/packet_router.h"
25 #include "webrtc/modules/utility/include/process_thread.h" 25 #include "webrtc/modules/utility/include/process_thread.h"
26 #include "webrtc/video/call_stats.h" 26 #include "webrtc/video/call_stats.h"
27 #include "webrtc/video/encoder_state_feedback.h" 27 #include "webrtc/video/encoder_state_feedback.h"
28 #include "webrtc/video/video_capture_input.h" 28 #include "webrtc/video/video_capture_input.h"
29 #include "webrtc/video/vie_channel.h" 29 #include "webrtc/video/vie_channel.h"
30 #include "webrtc/video/vie_encoder.h" 30 #include "webrtc/video/vie_encoder.h"
31 #include "webrtc/video/vie_remb.h"
31 #include "webrtc/video_send_stream.h" 32 #include "webrtc/video_send_stream.h"
32 33
33 namespace webrtc { 34 namespace webrtc {
34 35
35 class PacedSender; 36 class PacedSender;
36 class RtcpIntraFrameObserver; 37 class RtcpIntraFrameObserver;
37 class TransportFeedbackObserver; 38 class TransportFeedbackObserver;
38 39
39 std::string 40 std::string
40 VideoSendStream::Config::EncoderSettings::ToString() const { 41 VideoSendStream::Config::EncoderSettings::ToString() const {
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
118 return options; 119 return options;
119 } 120 }
120 } // namespace 121 } // namespace
121 122
122 namespace internal { 123 namespace internal {
123 VideoSendStream::VideoSendStream( 124 VideoSendStream::VideoSendStream(
124 int num_cpu_cores, 125 int num_cpu_cores,
125 ProcessThread* module_process_thread, 126 ProcessThread* module_process_thread,
126 CallStats* call_stats, 127 CallStats* call_stats,
127 CongestionController* congestion_controller, 128 CongestionController* congestion_controller,
129 VieRemb* remb,
128 BitrateAllocator* bitrate_allocator, 130 BitrateAllocator* bitrate_allocator,
129 const VideoSendStream::Config& config, 131 const VideoSendStream::Config& config,
130 const VideoEncoderConfig& encoder_config, 132 const VideoEncoderConfig& encoder_config,
131 const std::map<uint32_t, RtpState>& suspended_ssrcs) 133 const std::map<uint32_t, RtpState>& suspended_ssrcs)
132 : stats_proxy_(Clock::GetRealTimeClock(), 134 : stats_proxy_(Clock::GetRealTimeClock(),
133 config, 135 config,
134 encoder_config.content_type), 136 encoder_config.content_type),
135 transport_adapter_(config.send_transport), 137 transport_adapter_(config.send_transport),
136 encoded_frame_proxy_(config.post_encode_callback), 138 encoded_frame_proxy_(config.post_encode_callback),
137 config_(config), 139 config_(config),
138 suspended_ssrcs_(suspended_ssrcs), 140 suspended_ssrcs_(suspended_ssrcs),
139 module_process_thread_(module_process_thread), 141 module_process_thread_(module_process_thread),
140 call_stats_(call_stats), 142 call_stats_(call_stats),
141 congestion_controller_(congestion_controller), 143 congestion_controller_(congestion_controller),
144 remb_(remb),
142 overuse_detector_( 145 overuse_detector_(
143 Clock::GetRealTimeClock(), 146 Clock::GetRealTimeClock(),
144 GetCpuOveruseOptions(config.encoder_settings.full_overuse_time), 147 GetCpuOveruseOptions(config.encoder_settings.full_overuse_time),
145 this, 148 this,
146 config.post_encode_callback, 149 config.post_encode_callback,
147 &stats_proxy_), 150 &stats_proxy_),
148 encoder_feedback_(new EncoderStateFeedback()), 151 encoder_feedback_(new EncoderStateFeedback()),
149 use_config_bitrate_(true) { 152 use_config_bitrate_(true) {
150 LOG(LS_INFO) << "VideoSendStream: " << config_.ToString(); 153 LOG(LS_INFO) << "VideoSendStream: " << config_.ToString();
154
151 RTC_DCHECK(!config_.rtp.ssrcs.empty()); 155 RTC_DCHECK(!config_.rtp.ssrcs.empty());
156 RTC_DCHECK(module_process_thread_);
157 RTC_DCHECK(call_stats_);
158 RTC_DCHECK(congestion_controller_);
159 RTC_DCHECK(remb_);
152 160
153 // Set up Call-wide sequence numbers, if configured for this send stream. 161 // Set up Call-wide sequence numbers, if configured for this send stream.
154 TransportFeedbackObserver* transport_feedback_observer = nullptr; 162 TransportFeedbackObserver* transport_feedback_observer = nullptr;
155 for (const RtpExtension& extension : config.rtp.extensions) { 163 for (const RtpExtension& extension : config.rtp.extensions) {
156 if (extension.name == RtpExtension::kTransportSequenceNumber) { 164 if (extension.name == RtpExtension::kTransportSequenceNumber) {
157 transport_feedback_observer = 165 transport_feedback_observer =
158 congestion_controller_->GetTransportFeedbackObserver(); 166 congestion_controller_->GetTransportFeedbackObserver();
159 break; 167 break;
160 } 168 }
161 } 169 }
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
199 RTC_CHECK_EQ(0, vie_channel_->SetSendAbsoluteSendTimeStatus(true, id)); 207 RTC_CHECK_EQ(0, vie_channel_->SetSendAbsoluteSendTimeStatus(true, id));
200 } else if (extension == RtpExtension::kVideoRotation) { 208 } else if (extension == RtpExtension::kVideoRotation) {
201 RTC_CHECK_EQ(0, vie_channel_->SetSendVideoRotationStatus(true, id)); 209 RTC_CHECK_EQ(0, vie_channel_->SetSendVideoRotationStatus(true, id));
202 } else if (extension == RtpExtension::kTransportSequenceNumber) { 210 } else if (extension == RtpExtension::kTransportSequenceNumber) {
203 RTC_CHECK_EQ(0, vie_channel_->SetSendTransportSequenceNumber(true, id)); 211 RTC_CHECK_EQ(0, vie_channel_->SetSendTransportSequenceNumber(true, id));
204 } else { 212 } else {
205 RTC_NOTREACHED() << "Registering unsupported RTP extension."; 213 RTC_NOTREACHED() << "Registering unsupported RTP extension.";
206 } 214 }
207 } 215 }
208 216
209 congestion_controller_->SetChannelRembStatus(true, false, 217 RtpRtcp* rtp_module = vie_channel_->rtp_rtcp();
210 vie_channel_->rtp_rtcp()); 218 remb_->AddRembSender(rtp_module);
219 rtp_module->SetREMBStatus(true);
211 220
212 // Enable NACK, FEC or both. 221 // Enable NACK, FEC or both.
213 const bool enable_protection_nack = config_.rtp.nack.rtp_history_ms > 0; 222 const bool enable_protection_nack = config_.rtp.nack.rtp_history_ms > 0;
214 const bool enable_protection_fec = config_.rtp.fec.red_payload_type != -1; 223 const bool enable_protection_fec = config_.rtp.fec.red_payload_type != -1;
215 // TODO(changbin): Should set RTX for RED mapping in RTP sender in future. 224 // TODO(changbin): Should set RTX for RED mapping in RTP sender in future.
216 vie_channel_->SetProtectionMode(enable_protection_nack, enable_protection_fec, 225 vie_channel_->SetProtectionMode(enable_protection_nack, enable_protection_fec,
217 config_.rtp.fec.red_payload_type, 226 config_.rtp.fec.red_payload_type,
218 config_.rtp.fec.ulpfec_payload_type); 227 config_.rtp.fec.ulpfec_payload_type);
219 vie_encoder_->SetProtectionMethod(enable_protection_nack, 228 vie_encoder_->SetProtectionMethod(enable_protection_nack,
220 enable_protection_fec); 229 enable_protection_fec);
(...skipping 21 matching lines...) Expand all
242 RTC_CHECK(ReconfigureVideoEncoder(encoder_config)); 251 RTC_CHECK(ReconfigureVideoEncoder(encoder_config));
243 252
244 vie_channel_->RegisterSendSideDelayObserver(&stats_proxy_); 253 vie_channel_->RegisterSendSideDelayObserver(&stats_proxy_);
245 254
246 if (config_.post_encode_callback) 255 if (config_.post_encode_callback)
247 vie_encoder_->RegisterPostEncodeImageCallback(&encoded_frame_proxy_); 256 vie_encoder_->RegisterPostEncodeImageCallback(&encoded_frame_proxy_);
248 257
249 if (config_.suspend_below_min_bitrate) 258 if (config_.suspend_below_min_bitrate)
250 vie_encoder_->SuspendBelowMinBitrate(); 259 vie_encoder_->SuspendBelowMinBitrate();
251 260
252 congestion_controller_->AddEncoder(vie_encoder_.get());
253 encoder_feedback_->AddEncoder(ssrcs, vie_encoder_.get()); 261 encoder_feedback_->AddEncoder(ssrcs, vie_encoder_.get());
254 262
255 vie_channel_->RegisterSendChannelRtcpStatisticsCallback(&stats_proxy_); 263 vie_channel_->RegisterSendChannelRtcpStatisticsCallback(&stats_proxy_);
256 vie_channel_->RegisterSendChannelRtpStatisticsCallback(&stats_proxy_); 264 vie_channel_->RegisterSendChannelRtpStatisticsCallback(&stats_proxy_);
257 vie_channel_->RegisterRtcpPacketTypeCounterObserver(&stats_proxy_); 265 vie_channel_->RegisterRtcpPacketTypeCounterObserver(&stats_proxy_);
258 vie_channel_->RegisterSendBitrateObserver(&stats_proxy_); 266 vie_channel_->RegisterSendBitrateObserver(&stats_proxy_);
259 vie_channel_->RegisterSendFrameCountObserver(&stats_proxy_); 267 vie_channel_->RegisterSendFrameCountObserver(&stats_proxy_);
260 268
261 module_process_thread_->RegisterModule(&overuse_detector_); 269 module_process_thread_->RegisterModule(&overuse_detector_);
262 } 270 }
(...skipping 12 matching lines...) Expand all
275 vie_channel_->RegisterSendChannelRtcpStatisticsCallback(nullptr); 283 vie_channel_->RegisterSendChannelRtcpStatisticsCallback(nullptr);
276 284
277 // Remove capture input (thread) so that it's not running after the current 285 // Remove capture input (thread) so that it's not running after the current
278 // channel is deleted. 286 // channel is deleted.
279 input_.reset(); 287 input_.reset();
280 288
281 vie_encoder_->DeRegisterExternalEncoder( 289 vie_encoder_->DeRegisterExternalEncoder(
282 config_.encoder_settings.payload_type); 290 config_.encoder_settings.payload_type);
283 291
284 call_stats_->DeregisterStatsObserver(vie_channel_->GetStatsObserver()); 292 call_stats_->DeregisterStatsObserver(vie_channel_->GetStatsObserver());
285 congestion_controller_->SetChannelRembStatus(false, false, 293
286 vie_channel_->rtp_rtcp()); 294 RtpRtcp* rtp_module = vie_channel_->rtp_rtcp();
295 rtp_module->SetREMBStatus(false);
296 remb_->RemoveRembSender(rtp_module);
287 297
288 // Remove the feedback, stop all encoding threads and processing. This must be 298 // Remove the feedback, stop all encoding threads and processing. This must be
289 // done before deleting the channel. 299 // done before deleting the channel.
290 congestion_controller_->RemoveEncoder(vie_encoder_.get());
291 encoder_feedback_->RemoveEncoder(vie_encoder_.get()); 300 encoder_feedback_->RemoveEncoder(vie_encoder_.get());
292 301
293 uint32_t remote_ssrc = vie_channel_->GetRemoteSSRC(); 302 uint32_t remote_ssrc = vie_channel_->GetRemoteSSRC();
294 congestion_controller_->GetRemoteBitrateEstimator(false)->RemoveStream( 303 congestion_controller_->GetRemoteBitrateEstimator(false)->RemoveStream(
295 remote_ssrc); 304 remote_ssrc);
296 } 305 }
297 306
298 VideoCaptureInput* VideoSendStream::Input() { 307 VideoCaptureInput* VideoSendStream::Input() {
299 return input_.get(); 308 return input_.get();
300 } 309 }
(...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after
603 vie_encoder_->SetSsrcs(used_ssrcs); 612 vie_encoder_->SetSsrcs(used_ssrcs);
604 613
605 // Restart the media flow 614 // Restart the media flow
606 vie_encoder_->Restart(); 615 vie_encoder_->Restart();
607 616
608 return true; 617 return true;
609 } 618 }
610 619
611 } // namespace internal 620 } // namespace internal
612 } // namespace webrtc 621 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/video/video_send_stream.h ('k') | webrtc/video/vie_remb.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698