OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2015 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 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
47 BitrateController* bitrate_controller) | 47 BitrateController* bitrate_controller) |
48 : send_side_bwe_with_overhead_(webrtc::field_trial::FindFullName( | 48 : send_side_bwe_with_overhead_(webrtc::field_trial::FindFullName( |
49 "WebRTC-SendSideBwe-WithOverhead") == | 49 "WebRTC-SendSideBwe-WithOverhead") == |
50 "Enabled"), | 50 "Enabled"), |
51 transport_overhead_bytes_per_packet_(0), | 51 transport_overhead_bytes_per_packet_(0), |
52 send_time_history_(clock, kSendTimeHistoryWindowMs), | 52 send_time_history_(clock, kSendTimeHistoryWindowMs), |
53 event_log_(event_log), | 53 event_log_(event_log), |
54 clock_(clock), | 54 clock_(clock), |
55 current_offset_ms_(kNoTimestamp), | 55 current_offset_ms_(kNoTimestamp), |
56 last_timestamp_us_(kNoTimestamp), | 56 last_timestamp_us_(kNoTimestamp), |
57 bitrate_controller_(bitrate_controller) {} | 57 bitrate_controller_(bitrate_controller) { |
58 packetizer_thread_checker_.DetachFromThread(); | |
59 module_process_thread_checker_.DetachFromThread(); | |
60 } | |
58 | 61 |
59 TransportFeedbackAdapter::~TransportFeedbackAdapter() {} | 62 TransportFeedbackAdapter::~TransportFeedbackAdapter() { |
63 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); | |
64 } | |
60 | 65 |
61 void TransportFeedbackAdapter::InitBwe() { | 66 void TransportFeedbackAdapter::InitBwe() { |
67 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); | |
62 rtc::CritScope cs(&bwe_lock_); | 68 rtc::CritScope cs(&bwe_lock_); |
63 delay_based_bwe_.reset(new DelayBasedBwe(event_log_, clock_)); | 69 delay_based_bwe_.reset(new DelayBasedBwe(event_log_, clock_)); |
64 } | 70 } |
65 | 71 |
66 void TransportFeedbackAdapter::AddPacket(uint16_t sequence_number, | 72 void TransportFeedbackAdapter::AddPacket(uint16_t sequence_number, |
67 size_t length, | 73 size_t length, |
68 const PacedPacketInfo& pacing_info) { | 74 const PacedPacketInfo& pacing_info) { |
75 RTC_DCHECK(packetizer_thread_checker_.CalledOnValidThread()); | |
stefan-webrtc
2017/02/24 14:48:53
Maybe the value of this is small? WDYT?
elad.alon_webrtc.org
2017/02/27 10:55:30
Hard for me to say. It does make sure no one ever
| |
69 rtc::CritScope cs(&lock_); | 76 rtc::CritScope cs(&lock_); |
70 if (send_side_bwe_with_overhead_) { | 77 if (send_side_bwe_with_overhead_) { |
71 length += transport_overhead_bytes_per_packet_; | 78 length += transport_overhead_bytes_per_packet_; |
72 } | 79 } |
73 send_time_history_.AddAndRemoveOld(sequence_number, length, pacing_info); | 80 send_time_history_.AddAndRemoveOld(sequence_number, length, pacing_info); |
74 } | 81 } |
75 | 82 |
76 void TransportFeedbackAdapter::OnSentPacket(uint16_t sequence_number, | 83 void TransportFeedbackAdapter::OnSentPacket(uint16_t sequence_number, |
77 int64_t send_time_ms) { | 84 int64_t send_time_ms) { |
85 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); | |
78 rtc::CritScope cs(&lock_); | 86 rtc::CritScope cs(&lock_); |
79 send_time_history_.OnSentPacket(sequence_number, send_time_ms); | 87 send_time_history_.OnSentPacket(sequence_number, send_time_ms); |
80 } | 88 } |
81 | 89 |
82 void TransportFeedbackAdapter::SetStartBitrate(int start_bitrate_bps) { | 90 void TransportFeedbackAdapter::SetStartBitrate(int start_bitrate_bps) { |
91 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); | |
83 rtc::CritScope cs(&bwe_lock_); | 92 rtc::CritScope cs(&bwe_lock_); |
84 delay_based_bwe_->SetStartBitrate(start_bitrate_bps); | 93 delay_based_bwe_->SetStartBitrate(start_bitrate_bps); |
85 } | 94 } |
86 | 95 |
87 void TransportFeedbackAdapter::SetMinBitrate(int min_bitrate_bps) { | 96 void TransportFeedbackAdapter::SetMinBitrate(int min_bitrate_bps) { |
97 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); | |
88 rtc::CritScope cs(&bwe_lock_); | 98 rtc::CritScope cs(&bwe_lock_); |
89 delay_based_bwe_->SetMinBitrate(min_bitrate_bps); | 99 delay_based_bwe_->SetMinBitrate(min_bitrate_bps); |
90 } | 100 } |
91 | 101 |
92 void TransportFeedbackAdapter::SetTransportOverhead( | 102 void TransportFeedbackAdapter::SetTransportOverhead( |
93 int transport_overhead_bytes_per_packet) { | 103 int transport_overhead_bytes_per_packet) { |
94 rtc::CritScope cs(&lock_); | 104 rtc::CritScope cs(&lock_); |
95 transport_overhead_bytes_per_packet_ = transport_overhead_bytes_per_packet; | 105 transport_overhead_bytes_per_packet_ = transport_overhead_bytes_per_packet; |
96 } | 106 } |
97 | 107 |
98 int64_t TransportFeedbackAdapter::GetProbingIntervalMs() const { | 108 int64_t TransportFeedbackAdapter::GetProbingIntervalMs() const { |
99 rtc::CritScope cs(&bwe_lock_); | 109 rtc::CritScope cs(&bwe_lock_); |
100 return delay_based_bwe_->GetProbingIntervalMs(); | 110 return delay_based_bwe_->GetProbingIntervalMs(); |
101 } | 111 } |
102 | 112 |
103 std::vector<PacketInfo> TransportFeedbackAdapter::GetPacketFeedbackVector( | 113 std::vector<PacketInfo> TransportFeedbackAdapter::GetPacketFeedbackVector( |
104 const rtcp::TransportFeedback& feedback) { | 114 const rtcp::TransportFeedback& feedback) { |
115 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); | |
105 int64_t timestamp_us = feedback.GetBaseTimeUs(); | 116 int64_t timestamp_us = feedback.GetBaseTimeUs(); |
106 // Add timestamp deltas to a local time base selected on first packet arrival. | 117 // Add timestamp deltas to a local time base selected on first packet arrival. |
107 // This won't be the true time base, but makes it easier to manually inspect | 118 // This won't be the true time base, but makes it easier to manually inspect |
108 // time stamps. | 119 // time stamps. |
109 if (last_timestamp_us_ == kNoTimestamp) { | 120 if (last_timestamp_us_ == kNoTimestamp) { |
110 current_offset_ms_ = clock_->TimeInMilliseconds(); | 121 current_offset_ms_ = clock_->TimeInMilliseconds(); |
111 } else { | 122 } else { |
112 int64_t delta = timestamp_us - last_timestamp_us_; | 123 int64_t delta = timestamp_us - last_timestamp_us_; |
113 | 124 |
114 // Detect and compensate for wrap-arounds in base time. | 125 // Detect and compensate for wrap-arounds in base time. |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
148 LOG(LS_WARNING) << "Failed to lookup send time for " << failed_lookups | 159 LOG(LS_WARNING) << "Failed to lookup send time for " << failed_lookups |
149 << " packet" << (failed_lookups > 1 ? "s" : "") | 160 << " packet" << (failed_lookups > 1 ? "s" : "") |
150 << ". Send time history too small?"; | 161 << ". Send time history too small?"; |
151 } | 162 } |
152 } | 163 } |
153 return packet_feedback_vector; | 164 return packet_feedback_vector; |
154 } | 165 } |
155 | 166 |
156 void TransportFeedbackAdapter::OnTransportFeedback( | 167 void TransportFeedbackAdapter::OnTransportFeedback( |
157 const rtcp::TransportFeedback& feedback) { | 168 const rtcp::TransportFeedback& feedback) { |
169 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); | |
158 last_packet_feedback_vector_ = GetPacketFeedbackVector(feedback); | 170 last_packet_feedback_vector_ = GetPacketFeedbackVector(feedback); |
159 DelayBasedBwe::Result result; | 171 DelayBasedBwe::Result result; |
160 { | 172 { |
161 rtc::CritScope cs(&bwe_lock_); | 173 rtc::CritScope cs(&bwe_lock_); |
162 result = delay_based_bwe_->IncomingPacketFeedbackVector( | 174 result = delay_based_bwe_->IncomingPacketFeedbackVector( |
163 last_packet_feedback_vector_); | 175 last_packet_feedback_vector_); |
164 } | 176 } |
165 if (result.updated) | 177 if (result.updated) |
166 bitrate_controller_->OnDelayBasedBweResult(result); | 178 bitrate_controller_->OnDelayBasedBweResult(result); |
167 } | 179 } |
168 | 180 |
169 std::vector<PacketInfo> TransportFeedbackAdapter::GetTransportFeedbackVector() | 181 std::vector<PacketInfo> TransportFeedbackAdapter::GetTransportFeedbackVector() |
170 const { | 182 const { |
183 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); | |
171 return last_packet_feedback_vector_; | 184 return last_packet_feedback_vector_; |
172 } | 185 } |
173 | 186 |
174 void TransportFeedbackAdapter::OnRttUpdate(int64_t avg_rtt_ms, | 187 void TransportFeedbackAdapter::OnRttUpdate(int64_t avg_rtt_ms, |
175 int64_t max_rtt_ms) { | 188 int64_t max_rtt_ms) { |
189 RTC_DCHECK(module_process_thread_checker_.CalledOnValidThread()); | |
176 rtc::CritScope cs(&bwe_lock_); | 190 rtc::CritScope cs(&bwe_lock_); |
177 delay_based_bwe_->OnRttUpdate(avg_rtt_ms, max_rtt_ms); | 191 delay_based_bwe_->OnRttUpdate(avg_rtt_ms, max_rtt_ms); |
178 } | 192 } |
179 | 193 |
180 } // namespace webrtc | 194 } // namespace webrtc |
OLD | NEW |