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 12 matching lines...) Expand all Loading... |
23 #include "webrtc/modules/video_coding/media_opt_util.h" | 23 #include "webrtc/modules/video_coding/media_opt_util.h" |
24 #include "webrtc/system_wrappers/include/clock.h" | 24 #include "webrtc/system_wrappers/include/clock.h" |
25 | 25 |
26 namespace webrtc { | 26 namespace webrtc { |
27 | 27 |
28 enum { kMaxReceiverDelayMs = 10000 }; | 28 enum { kMaxReceiverDelayMs = 10000 }; |
29 | 29 |
30 VCMReceiver::VCMReceiver(VCMTiming* timing, | 30 VCMReceiver::VCMReceiver(VCMTiming* timing, |
31 Clock* clock, | 31 Clock* clock, |
32 EventFactory* event_factory) | 32 EventFactory* event_factory) |
| 33 : VCMReceiver::VCMReceiver(timing, |
| 34 clock, |
| 35 event_factory, |
| 36 nullptr, // NackSender |
| 37 nullptr) // KeyframeRequestSender |
| 38 {} |
| 39 |
| 40 VCMReceiver::VCMReceiver(VCMTiming* timing, |
| 41 Clock* clock, |
| 42 EventFactory* event_factory, |
| 43 NackSender* nack_sender, |
| 44 KeyFrameRequestSender* keyframe_request_sender) |
33 : VCMReceiver(timing, | 45 : VCMReceiver(timing, |
34 clock, | 46 clock, |
35 std::unique_ptr<EventWrapper>(event_factory->CreateEvent()), | 47 std::unique_ptr<EventWrapper>(event_factory->CreateEvent()), |
36 std::unique_ptr<EventWrapper>(event_factory->CreateEvent())) { | 48 std::unique_ptr<EventWrapper>(event_factory->CreateEvent()), |
37 } | 49 nack_sender, |
| 50 keyframe_request_sender) {} |
38 | 51 |
39 VCMReceiver::VCMReceiver(VCMTiming* timing, | 52 VCMReceiver::VCMReceiver(VCMTiming* timing, |
40 Clock* clock, | 53 Clock* clock, |
41 std::unique_ptr<EventWrapper> receiver_event, | 54 std::unique_ptr<EventWrapper> receiver_event, |
42 std::unique_ptr<EventWrapper> jitter_buffer_event) | 55 std::unique_ptr<EventWrapper> jitter_buffer_event) |
| 56 : VCMReceiver::VCMReceiver(timing, |
| 57 clock, |
| 58 std::move(receiver_event), |
| 59 std::move(jitter_buffer_event), |
| 60 nullptr, // NackSender |
| 61 nullptr) // KeyframeRequestSender |
| 62 {} |
| 63 |
| 64 VCMReceiver::VCMReceiver(VCMTiming* timing, |
| 65 Clock* clock, |
| 66 std::unique_ptr<EventWrapper> receiver_event, |
| 67 std::unique_ptr<EventWrapper> jitter_buffer_event, |
| 68 NackSender* nack_sender, |
| 69 KeyFrameRequestSender* keyframe_request_sender) |
43 : crit_sect_(CriticalSectionWrapper::CreateCriticalSection()), | 70 : crit_sect_(CriticalSectionWrapper::CreateCriticalSection()), |
44 clock_(clock), | 71 clock_(clock), |
45 jitter_buffer_(clock_, std::move(jitter_buffer_event)), | 72 jitter_buffer_(clock_, |
| 73 std::move(jitter_buffer_event), |
| 74 nack_sender, |
| 75 keyframe_request_sender), |
46 timing_(timing), | 76 timing_(timing), |
47 render_wait_event_(std::move(receiver_event)), | 77 render_wait_event_(std::move(receiver_event)), |
48 max_video_delay_ms_(kMaxVideoDelayMs) { | 78 max_video_delay_ms_(kMaxVideoDelayMs) { |
49 Reset(); | 79 Reset(); |
50 } | 80 } |
51 | 81 |
52 VCMReceiver::~VCMReceiver() { | 82 VCMReceiver::~VCMReceiver() { |
53 render_wait_event_->Set(); | 83 render_wait_event_->Set(); |
54 delete crit_sect_; | 84 delete crit_sect_; |
55 } | 85 } |
56 | 86 |
57 void VCMReceiver::Reset() { | 87 void VCMReceiver::Reset() { |
58 CriticalSectionScoped cs(crit_sect_); | 88 CriticalSectionScoped cs(crit_sect_); |
59 if (!jitter_buffer_.Running()) { | 89 if (!jitter_buffer_.Running()) { |
60 jitter_buffer_.Start(); | 90 jitter_buffer_.Start(); |
61 } else { | 91 } else { |
62 jitter_buffer_.Flush(); | 92 jitter_buffer_.Flush(); |
63 } | 93 } |
64 } | 94 } |
65 | 95 |
66 void VCMReceiver::UpdateRtt(int64_t rtt) { | 96 void VCMReceiver::UpdateRtt(int64_t rtt) { |
67 jitter_buffer_.UpdateRtt(rtt); | 97 jitter_buffer_.UpdateRtt(rtt); |
68 } | 98 } |
69 | 99 |
| 100 int64_t VCMReceiver::TimeUntilNextProcess() { |
| 101 return jitter_buffer_.TimeUntilNextProcess(); |
| 102 } |
| 103 |
| 104 void VCMReceiver::Process() { |
| 105 jitter_buffer_.Process(); |
| 106 } |
| 107 |
70 int32_t VCMReceiver::InsertPacket(const VCMPacket& packet, | 108 int32_t VCMReceiver::InsertPacket(const VCMPacket& packet, |
71 uint16_t frame_width, | 109 uint16_t frame_width, |
72 uint16_t frame_height) { | 110 uint16_t frame_height) { |
73 // Insert the packet into the jitter buffer. The packet can either be empty or | 111 // Insert the packet into the jitter buffer. The packet can either be empty or |
74 // contain media at this point. | 112 // contain media at this point. |
75 bool retransmitted = false; | 113 bool retransmitted = false; |
76 const VCMFrameBufferEnum ret = | 114 const VCMFrameBufferEnum ret = |
77 jitter_buffer_.InsertPacket(packet, &retransmitted); | 115 jitter_buffer_.InsertPacket(packet, &retransmitted); |
78 if (ret == kOldPacket) { | 116 if (ret == kOldPacket) { |
79 return VCM_OK; | 117 return VCM_OK; |
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
260 uint32_t render_end = timing_->RenderTimeMs(timestamp_end, now_ms); | 298 uint32_t render_end = timing_->RenderTimeMs(timestamp_end, now_ms); |
261 return render_end - render_start; | 299 return render_end - render_start; |
262 } | 300 } |
263 | 301 |
264 void VCMReceiver::RegisterStatsCallback( | 302 void VCMReceiver::RegisterStatsCallback( |
265 VCMReceiveStatisticsCallback* callback) { | 303 VCMReceiveStatisticsCallback* callback) { |
266 jitter_buffer_.RegisterStatsCallback(callback); | 304 jitter_buffer_.RegisterStatsCallback(callback); |
267 } | 305 } |
268 | 306 |
269 } // namespace webrtc | 307 } // namespace webrtc |
OLD | NEW |