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

Side by Side Diff: webrtc/modules/pacing/paced_sender.cc

Issue 2182603002: Bitrate prober and paced sender improvements (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Fix nits Created 4 years, 4 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/modules/pacing/paced_sender.h ('k') | no next file » | 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) 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
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after
243 } // namespace paced_sender 243 } // namespace paced_sender
244 244
245 const int64_t PacedSender::kMaxQueueLengthMs = 2000; 245 const int64_t PacedSender::kMaxQueueLengthMs = 2000;
246 const float PacedSender::kDefaultPaceMultiplier = 2.5f; 246 const float PacedSender::kDefaultPaceMultiplier = 2.5f;
247 247
248 PacedSender::PacedSender(Clock* clock, PacketSender* packet_sender) 248 PacedSender::PacedSender(Clock* clock, PacketSender* packet_sender)
249 : clock_(clock), 249 : clock_(clock),
250 packet_sender_(packet_sender), 250 packet_sender_(packet_sender),
251 critsect_(CriticalSectionWrapper::CreateCriticalSection()), 251 critsect_(CriticalSectionWrapper::CreateCriticalSection()),
252 paused_(false), 252 paused_(false),
253 probing_enabled_(true),
254 media_budget_(new paced_sender::IntervalBudget(0)), 253 media_budget_(new paced_sender::IntervalBudget(0)),
255 padding_budget_(new paced_sender::IntervalBudget(0)), 254 padding_budget_(new paced_sender::IntervalBudget(0)),
256 prober_(new BitrateProber()), 255 prober_(new BitrateProber()),
257 estimated_bitrate_bps_(0), 256 estimated_bitrate_bps_(0),
258 min_send_bitrate_kbps_(0u), 257 min_send_bitrate_kbps_(0u),
259 max_padding_bitrate_kbps_(0u), 258 max_padding_bitrate_kbps_(0u),
260 pacing_bitrate_kbps_(0), 259 pacing_bitrate_kbps_(0),
261 time_last_update_us_(clock->TimeInMicroseconds()), 260 time_last_update_us_(clock->TimeInMicroseconds()),
262 packets_(new paced_sender::PacketQueue(clock)), 261 packets_(new paced_sender::PacketQueue(clock)),
263 packet_counter_(0) { 262 packet_counter_(0) {
264 UpdateBytesPerInterval(kMinPacketLimitMs); 263 UpdateBytesPerInterval(kMinPacketLimitMs);
265 } 264 }
266 265
267 PacedSender::~PacedSender() {} 266 PacedSender::~PacedSender() {}
268 267
269 void PacedSender::Pause() { 268 void PacedSender::Pause() {
270 LOG(LS_INFO) << "PacedSender paused."; 269 LOG(LS_INFO) << "PacedSender paused.";
271 CriticalSectionScoped cs(critsect_.get()); 270 CriticalSectionScoped cs(critsect_.get());
272 paused_ = true; 271 paused_ = true;
273 } 272 }
274 273
275 void PacedSender::Resume() { 274 void PacedSender::Resume() {
276 LOG(LS_INFO) << "PacedSender resumed."; 275 LOG(LS_INFO) << "PacedSender resumed.";
277 CriticalSectionScoped cs(critsect_.get()); 276 CriticalSectionScoped cs(critsect_.get());
278 paused_ = false; 277 paused_ = false;
279 } 278 }
280 279
281 void PacedSender::SetProbingEnabled(bool enabled) { 280 void PacedSender::SetProbingEnabled(bool enabled) {
282 RTC_CHECK_EQ(0u, packet_counter_); 281 RTC_CHECK_EQ(0u, packet_counter_);
283 probing_enabled_ = enabled; 282 CriticalSectionScoped cs(critsect_.get());
283 prober_->SetEnabled(enabled);
284 } 284 }
285 285
286 void PacedSender::SetEstimatedBitrate(uint32_t bitrate_bps) { 286 void PacedSender::SetEstimatedBitrate(uint32_t bitrate_bps) {
287 if (bitrate_bps == 0) 287 if (bitrate_bps == 0)
288 LOG(LS_ERROR) << "PacedSender is not designed to handle 0 bitrate."; 288 LOG(LS_ERROR) << "PacedSender is not designed to handle 0 bitrate.";
289 CriticalSectionScoped cs(critsect_.get()); 289 CriticalSectionScoped cs(critsect_.get());
290 estimated_bitrate_bps_ = bitrate_bps; 290 estimated_bitrate_bps_ = bitrate_bps;
291 padding_budget_->set_target_rate_kbps( 291 padding_budget_->set_target_rate_kbps(
292 std::min(estimated_bitrate_bps_ / 1000, max_padding_bitrate_kbps_)); 292 std::min(estimated_bitrate_bps_ / 1000, max_padding_bitrate_kbps_));
293 pacing_bitrate_kbps_ = 293 pacing_bitrate_kbps_ =
(...skipping 16 matching lines...) Expand all
310 void PacedSender::InsertPacket(RtpPacketSender::Priority priority, 310 void PacedSender::InsertPacket(RtpPacketSender::Priority priority,
311 uint32_t ssrc, 311 uint32_t ssrc,
312 uint16_t sequence_number, 312 uint16_t sequence_number,
313 int64_t capture_time_ms, 313 int64_t capture_time_ms,
314 size_t bytes, 314 size_t bytes,
315 bool retransmission) { 315 bool retransmission) {
316 CriticalSectionScoped cs(critsect_.get()); 316 CriticalSectionScoped cs(critsect_.get());
317 RTC_DCHECK(estimated_bitrate_bps_ > 0) 317 RTC_DCHECK(estimated_bitrate_bps_ > 0)
318 << "SetEstimatedBitrate must be called before InsertPacket."; 318 << "SetEstimatedBitrate must be called before InsertPacket.";
319 319
320 if (probing_enabled_ && !prober_->IsProbing())
321 prober_->SetEnabled(true);
322 int64_t now_ms = clock_->TimeInMilliseconds(); 320 int64_t now_ms = clock_->TimeInMilliseconds();
323 prober_->OnIncomingPacket(estimated_bitrate_bps_, bytes, now_ms); 321 prober_->OnIncomingPacket(estimated_bitrate_bps_, bytes, now_ms);
324 322
325 if (capture_time_ms < 0) 323 if (capture_time_ms < 0)
326 capture_time_ms = now_ms; 324 capture_time_ms = now_ms;
327 325
328 packets_->Push(paced_sender::Packet(priority, ssrc, sequence_number, 326 packets_->Push(paced_sender::Packet(priority, ssrc, sequence_number,
329 capture_time_ms, now_ms, bytes, 327 capture_time_ms, now_ms, bytes,
330 retransmission, packet_counter_++)); 328 retransmission, packet_counter_++));
331 } 329 }
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
479 media_budget_->UseBudget(bytes_sent); 477 media_budget_->UseBudget(bytes_sent);
480 padding_budget_->UseBudget(bytes_sent); 478 padding_budget_->UseBudget(bytes_sent);
481 } 479 }
482 } 480 }
483 481
484 void PacedSender::UpdateBytesPerInterval(int64_t delta_time_ms) { 482 void PacedSender::UpdateBytesPerInterval(int64_t delta_time_ms) {
485 media_budget_->IncreaseBudget(delta_time_ms); 483 media_budget_->IncreaseBudget(delta_time_ms);
486 padding_budget_->IncreaseBudget(delta_time_ms); 484 padding_budget_->IncreaseBudget(delta_time_ms);
487 } 485 }
488 } // namespace webrtc 486 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/pacing/paced_sender.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698