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