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 |