Chromium Code Reviews

Side by Side Diff: webrtc/video_engine/vie_channel_group.cc

Issue 1247293002: Add support for transport wide sequence numbers (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Moved SendTimeHistory, comment Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff |
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
11 #include "webrtc/video_engine/vie_channel_group.h" 11 #include "webrtc/video_engine/vie_channel_group.h"
12 12
13 #include "webrtc/base/checks.h" 13 #include "webrtc/base/checks.h"
14 #include "webrtc/base/thread_annotations.h" 14 #include "webrtc/base/thread_annotations.h"
15 #include "webrtc/common.h" 15 #include "webrtc/common.h"
16 #include "webrtc/experiments.h" 16 #include "webrtc/experiments.h"
17 #include "webrtc/modules/pacing/include/paced_sender.h" 17 #include "webrtc/modules/pacing/include/paced_sender.h"
18 #include "webrtc/modules/pacing/include/packet_router.h" 18 #include "webrtc/modules/pacing/include/packet_router.h"
19 #include "webrtc/modules/remote_bitrate_estimator/include/send_time_history.h"
19 #include "webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_s end_time.h" 20 #include "webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_s end_time.h"
20 #include "webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_singl e_stream.h" 21 #include "webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_singl e_stream.h"
21 #include "webrtc/modules/rtp_rtcp/interface/rtp_rtcp.h" 22 #include "webrtc/modules/rtp_rtcp/interface/rtp_rtcp.h"
22 #include "webrtc/modules/utility/interface/process_thread.h" 23 #include "webrtc/modules/utility/interface/process_thread.h"
23 #include "webrtc/system_wrappers/interface/critical_section_wrapper.h" 24 #include "webrtc/system_wrappers/interface/critical_section_wrapper.h"
24 #include "webrtc/system_wrappers/interface/logging.h" 25 #include "webrtc/system_wrappers/interface/logging.h"
25 #include "webrtc/video_engine/call_stats.h" 26 #include "webrtc/video_engine/call_stats.h"
26 #include "webrtc/video_engine/encoder_state_feedback.h" 27 #include "webrtc/video_engine/encoder_state_feedback.h"
27 #include "webrtc/video_engine/payload_router.h" 28 #include "webrtc/video_engine/payload_router.h"
28 #include "webrtc/video_engine/vie_channel.h" 29 #include "webrtc/video_engine/vie_channel.h"
(...skipping 103 matching lines...)
132 RemoteBitrateObserver* observer_; 133 RemoteBitrateObserver* observer_;
133 Clock* clock_; 134 Clock* clock_;
134 rtc::scoped_ptr<CriticalSectionWrapper> crit_sect_; 135 rtc::scoped_ptr<CriticalSectionWrapper> crit_sect_;
135 const uint32_t min_bitrate_bps_; 136 const uint32_t min_bitrate_bps_;
136 rtc::scoped_ptr<RemoteBitrateEstimator> rbe_; 137 rtc::scoped_ptr<RemoteBitrateEstimator> rbe_;
137 bool using_absolute_send_time_; 138 bool using_absolute_send_time_;
138 uint32_t packets_since_absolute_send_time_; 139 uint32_t packets_since_absolute_send_time_;
139 140
140 DISALLOW_IMPLICIT_CONSTRUCTORS(WrappingBitrateEstimator); 141 DISALLOW_IMPLICIT_CONSTRUCTORS(WrappingBitrateEstimator);
141 }; 142 };
143
144 static const int64_t kSendTimeHistoryWindowMs = 2000;
145
142 } // namespace 146 } // namespace
143 147
148 class AdaptedSendTimeHistory : public SendTimeHistory, public SendTimeObserver {
149 public:
150 AdaptedSendTimeHistory() : SendTimeHistory(kSendTimeHistoryWindowMs) {}
151 virtual ~AdaptedSendTimeHistory() {}
152
153 void OnPacketSent(uint16_t sequence_number, int64_t send_time) override {
154 SendTimeHistory::AddAndRemoveOldSendTimes(sequence_number, send_time);
155 }
156
157 // Populate PacketInfo.send_time_ms, by looking up the send time in the
158 // stored history index by sequence number. Returns the number of PacketInfo
159 // instances for which the lookup was successful.
160 size_t PopulateSendTimes(std::vector<PacketInfo>* packet_info) {
161 return 0;
162 /*
163 * rtc::CritScope cs(&history_lock_);
164 if (!send_time_history_.get())
165 return 0;
166
167 size_t successful_lookups = 0;
168 for (PacketInfo& info : *packet_info) {
169 if (send_time_history_->GetSendTime(info.sequence_number,
170 &info.send_time_ms, true)) {
171 ++successful_lookups;
172 }
173 }
174 return successful_lookups;
175 */
stefan-webrtc 2015/07/29 09:04:11 Probably want to remove this comment? :)
sprang_webrtc 2015/07/29 10:03:25 Yes, even the whole method. Moved to a different C
176 }
177 };
178
144 ChannelGroup::ChannelGroup(ProcessThread* process_thread) 179 ChannelGroup::ChannelGroup(ProcessThread* process_thread)
145 : remb_(new VieRemb()), 180 : remb_(new VieRemb()),
146 bitrate_allocator_(new BitrateAllocator()), 181 bitrate_allocator_(new BitrateAllocator()),
147 call_stats_(new CallStats()), 182 call_stats_(new CallStats()),
148 encoder_state_feedback_(new EncoderStateFeedback()), 183 encoder_state_feedback_(new EncoderStateFeedback()),
149 packet_router_(new PacketRouter()), 184 packet_router_(new PacketRouter()),
150 pacer_(new PacedSender(Clock::GetRealTimeClock(), 185 pacer_(new PacedSender(Clock::GetRealTimeClock(),
151 packet_router_.get(), 186 packet_router_.get(),
152 BitrateController::kDefaultStartBitrateKbps, 187 BitrateController::kDefaultStartBitrateKbps,
153 PacedSender::kDefaultPaceMultiplier * 188 PacedSender::kDefaultPaceMultiplier *
154 BitrateController::kDefaultStartBitrateKbps, 189 BitrateController::kDefaultStartBitrateKbps,
155 0)), 190 0)),
156 encoder_map_cs_(CriticalSectionWrapper::CreateCriticalSection()), 191 encoder_map_cs_(CriticalSectionWrapper::CreateCriticalSection()),
157 config_(new Config), 192 config_(new Config),
158 process_thread_(process_thread), 193 process_thread_(process_thread),
159 pacer_thread_(ProcessThread::Create()), 194 pacer_thread_(ProcessThread::Create()),
160 // Constructed last as this object calls the provided callback on 195 // Constructed last as this object calls the provided callback on
161 // construction. 196 // construction.
162 bitrate_controller_( 197 bitrate_controller_(
163 BitrateController::CreateBitrateController(Clock::GetRealTimeClock(), 198 BitrateController::CreateBitrateController(Clock::GetRealTimeClock(),
164 this)) { 199 this)),
200 send_time_history_(new AdaptedSendTimeHistory()) {
165 remote_bitrate_estimator_.reset(new WrappingBitrateEstimator( 201 remote_bitrate_estimator_.reset(new WrappingBitrateEstimator(
166 remb_.get(), Clock::GetRealTimeClock(), *config_.get())); 202 remb_.get(), Clock::GetRealTimeClock(), *config_.get()));
167 203
168 call_stats_->RegisterStatsObserver(remote_bitrate_estimator_.get()); 204 call_stats_->RegisterStatsObserver(remote_bitrate_estimator_.get());
169 205
170 pacer_thread_->RegisterModule(pacer_.get()); 206 pacer_thread_->RegisterModule(pacer_.get());
171 pacer_thread_->Start(); 207 pacer_thread_->Start();
172 208
173 process_thread->RegisterModule(remote_bitrate_estimator_.get()); 209 process_thread->RegisterModule(remote_bitrate_estimator_.get());
174 process_thread->RegisterModule(call_stats_.get()); 210 process_thread->RegisterModule(call_stats_.get());
(...skipping 67 matching lines...)
242 ViEEncoder* vie_encoder, 278 ViEEncoder* vie_encoder,
243 size_t max_rtp_streams, 279 size_t max_rtp_streams,
244 bool sender, 280 bool sender,
245 bool disable_default_encoder) { 281 bool disable_default_encoder) {
246 DCHECK(vie_encoder); 282 DCHECK(vie_encoder);
247 283
248 rtc::scoped_ptr<ViEChannel> channel(new ViEChannel( 284 rtc::scoped_ptr<ViEChannel> channel(new ViEChannel(
249 channel_id, engine_id, number_of_cores, *config_.get(), transport, 285 channel_id, engine_id, number_of_cores, *config_.get(), transport,
250 process_thread_, encoder_state_feedback_->GetRtcpIntraFrameObserver(), 286 process_thread_, encoder_state_feedback_->GetRtcpIntraFrameObserver(),
251 bitrate_controller_->CreateRtcpBandwidthObserver(), 287 bitrate_controller_->CreateRtcpBandwidthObserver(),
252 remote_bitrate_estimator_.get(), call_stats_->rtcp_rtt_stats(), 288 send_time_history_.get(), remote_bitrate_estimator_.get(),
253 pacer_.get(), packet_router_.get(), max_rtp_streams, sender, 289 call_stats_->rtcp_rtt_stats(), pacer_.get(), packet_router_.get(),
254 disable_default_encoder)); 290 max_rtp_streams, sender, disable_default_encoder));
255 if (channel->Init() != 0) { 291 if (channel->Init() != 0) {
256 return false; 292 return false;
257 } 293 }
258 if (!disable_default_encoder) { 294 if (!disable_default_encoder) {
259 VideoCodec encoder; 295 VideoCodec encoder;
260 if (vie_encoder->GetEncoder(&encoder) != 0) { 296 if (vie_encoder->GetEncoder(&encoder) != 0) {
261 return false; 297 return false;
262 } 298 }
263 if (sender && channel->SetSendCodec(encoder) != 0) { 299 if (sender && channel->SetSendCodec(encoder) != 0) {
264 return false; 300 return false;
(...skipping 215 matching lines...)
480 CriticalSectionScoped lock(encoder_map_cs_.get()); 516 CriticalSectionScoped lock(encoder_map_cs_.get());
481 for (const auto& encoder : send_encoders_) 517 for (const auto& encoder : send_encoders_)
482 pad_up_to_bitrate_bps += encoder.second->GetPaddingNeededBps(); 518 pad_up_to_bitrate_bps += encoder.second->GetPaddingNeededBps();
483 } 519 }
484 pacer_->UpdateBitrate( 520 pacer_->UpdateBitrate(
485 target_bitrate_bps / 1000, 521 target_bitrate_bps / 1000,
486 PacedSender::kDefaultPaceMultiplier * target_bitrate_bps / 1000, 522 PacedSender::kDefaultPaceMultiplier * target_bitrate_bps / 1000,
487 pad_up_to_bitrate_bps / 1000); 523 pad_up_to_bitrate_bps / 1000);
488 } 524 }
489 } // namespace webrtc 525 } // namespace webrtc
OLDNEW

Powered by Google App Engine