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 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
65 nullptr, // NackSender | 65 nullptr, // NackSender |
66 nullptr) // KeyframeRequestSender | 66 nullptr) // KeyframeRequestSender |
67 {} | 67 {} |
68 | 68 |
69 VCMReceiver::VCMReceiver(VCMTiming* timing, | 69 VCMReceiver::VCMReceiver(VCMTiming* timing, |
70 Clock* clock, | 70 Clock* clock, |
71 std::unique_ptr<EventWrapper> receiver_event, | 71 std::unique_ptr<EventWrapper> receiver_event, |
72 std::unique_ptr<EventWrapper> jitter_buffer_event, | 72 std::unique_ptr<EventWrapper> jitter_buffer_event, |
73 NackSender* nack_sender, | 73 NackSender* nack_sender, |
74 KeyFrameRequestSender* keyframe_request_sender) | 74 KeyFrameRequestSender* keyframe_request_sender) |
75 : crit_sect_(CriticalSectionWrapper::CreateCriticalSection()), | 75 : clock_(clock), |
76 clock_(clock), | |
77 jitter_buffer_(clock_, | 76 jitter_buffer_(clock_, |
78 std::move(jitter_buffer_event), | 77 std::move(jitter_buffer_event), |
79 nack_sender, | 78 nack_sender, |
80 keyframe_request_sender), | 79 keyframe_request_sender), |
81 timing_(timing), | 80 timing_(timing), |
82 render_wait_event_(std::move(receiver_event)), | 81 render_wait_event_(std::move(receiver_event)), |
83 max_video_delay_ms_(kMaxVideoDelayMs) { | 82 max_video_delay_ms_(kMaxVideoDelayMs) { |
84 Reset(); | 83 Reset(); |
85 } | 84 } |
86 | 85 |
87 VCMReceiver::~VCMReceiver() { | 86 VCMReceiver::~VCMReceiver() { |
88 render_wait_event_->Set(); | 87 render_wait_event_->Set(); |
89 delete crit_sect_; | |
90 } | 88 } |
91 | 89 |
92 void VCMReceiver::Reset() { | 90 void VCMReceiver::Reset() { |
93 CriticalSectionScoped cs(crit_sect_); | 91 rtc::CritScope cs(&crit_sect_); |
94 if (!jitter_buffer_.Running()) { | 92 if (!jitter_buffer_.Running()) { |
95 jitter_buffer_.Start(); | 93 jitter_buffer_.Start(); |
96 } else { | 94 } else { |
97 jitter_buffer_.Flush(); | 95 jitter_buffer_.Flush(); |
98 } | 96 } |
99 } | 97 } |
100 | 98 |
101 void VCMReceiver::UpdateRtt(int64_t rtt) { | 99 void VCMReceiver::UpdateRtt(int64_t rtt) { |
102 jitter_buffer_.UpdateRtt(rtt); | 100 jitter_buffer_.UpdateRtt(rtt); |
103 } | 101 } |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
235 | 233 |
236 void VCMReceiver::ReceiveStatistics(uint32_t* bitrate, uint32_t* framerate) { | 234 void VCMReceiver::ReceiveStatistics(uint32_t* bitrate, uint32_t* framerate) { |
237 assert(bitrate); | 235 assert(bitrate); |
238 assert(framerate); | 236 assert(framerate); |
239 jitter_buffer_.IncomingRateStatistics(framerate, bitrate); | 237 jitter_buffer_.IncomingRateStatistics(framerate, bitrate); |
240 } | 238 } |
241 | 239 |
242 void VCMReceiver::SetNackMode(VCMNackMode nackMode, | 240 void VCMReceiver::SetNackMode(VCMNackMode nackMode, |
243 int64_t low_rtt_nack_threshold_ms, | 241 int64_t low_rtt_nack_threshold_ms, |
244 int64_t high_rtt_nack_threshold_ms) { | 242 int64_t high_rtt_nack_threshold_ms) { |
245 CriticalSectionScoped cs(crit_sect_); | 243 rtc::CritScope cs(&crit_sect_); |
246 // Default to always having NACK enabled in hybrid mode. | 244 // Default to always having NACK enabled in hybrid mode. |
247 jitter_buffer_.SetNackMode(nackMode, low_rtt_nack_threshold_ms, | 245 jitter_buffer_.SetNackMode(nackMode, low_rtt_nack_threshold_ms, |
248 high_rtt_nack_threshold_ms); | 246 high_rtt_nack_threshold_ms); |
249 } | 247 } |
250 | 248 |
251 void VCMReceiver::SetNackSettings(size_t max_nack_list_size, | 249 void VCMReceiver::SetNackSettings(size_t max_nack_list_size, |
252 int max_packet_age_to_nack, | 250 int max_packet_age_to_nack, |
253 int max_incomplete_time_ms) { | 251 int max_incomplete_time_ms) { |
254 jitter_buffer_.SetNackSettings(max_nack_list_size, max_packet_age_to_nack, | 252 jitter_buffer_.SetNackSettings(max_nack_list_size, max_packet_age_to_nack, |
255 max_incomplete_time_ms); | 253 max_incomplete_time_ms); |
256 } | 254 } |
257 | 255 |
258 VCMNackMode VCMReceiver::NackMode() const { | 256 VCMNackMode VCMReceiver::NackMode() const { |
259 CriticalSectionScoped cs(crit_sect_); | 257 rtc::CritScope cs(&crit_sect_); |
260 return jitter_buffer_.nack_mode(); | 258 return jitter_buffer_.nack_mode(); |
261 } | 259 } |
262 | 260 |
263 std::vector<uint16_t> VCMReceiver::NackList(bool* request_key_frame) { | 261 std::vector<uint16_t> VCMReceiver::NackList(bool* request_key_frame) { |
264 return jitter_buffer_.GetNackList(request_key_frame); | 262 return jitter_buffer_.GetNackList(request_key_frame); |
265 } | 263 } |
266 | 264 |
267 void VCMReceiver::SetDecodeErrorMode(VCMDecodeErrorMode decode_error_mode) { | 265 void VCMReceiver::SetDecodeErrorMode(VCMDecodeErrorMode decode_error_mode) { |
268 jitter_buffer_.SetDecodeErrorMode(decode_error_mode); | 266 jitter_buffer_.SetDecodeErrorMode(decode_error_mode); |
269 } | 267 } |
270 | 268 |
271 VCMDecodeErrorMode VCMReceiver::DecodeErrorMode() const { | 269 VCMDecodeErrorMode VCMReceiver::DecodeErrorMode() const { |
272 return jitter_buffer_.decode_error_mode(); | 270 return jitter_buffer_.decode_error_mode(); |
273 } | 271 } |
274 | 272 |
275 int VCMReceiver::SetMinReceiverDelay(int desired_delay_ms) { | 273 int VCMReceiver::SetMinReceiverDelay(int desired_delay_ms) { |
276 CriticalSectionScoped cs(crit_sect_); | 274 rtc::CritScope cs(&crit_sect_); |
277 if (desired_delay_ms < 0 || desired_delay_ms > kMaxReceiverDelayMs) { | 275 if (desired_delay_ms < 0 || desired_delay_ms > kMaxReceiverDelayMs) { |
278 return -1; | 276 return -1; |
279 } | 277 } |
280 max_video_delay_ms_ = desired_delay_ms + kMaxVideoDelayMs; | 278 max_video_delay_ms_ = desired_delay_ms + kMaxVideoDelayMs; |
281 // Initializing timing to the desired delay. | 279 // Initializing timing to the desired delay. |
282 timing_->set_min_playout_delay(desired_delay_ms); | 280 timing_->set_min_playout_delay(desired_delay_ms); |
283 return 0; | 281 return 0; |
284 } | 282 } |
285 | 283 |
286 void VCMReceiver::RegisterStatsCallback( | 284 void VCMReceiver::RegisterStatsCallback( |
287 VCMReceiveStatisticsCallback* callback) { | 285 VCMReceiveStatisticsCallback* callback) { |
288 jitter_buffer_.RegisterStatsCallback(callback); | 286 jitter_buffer_.RegisterStatsCallback(callback); |
289 } | 287 } |
290 | 288 |
291 } // namespace webrtc | 289 } // namespace webrtc |
OLD | NEW |