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 18 matching lines...) Expand all Loading... | |
29 : send_side_bwe_with_overhead_( | 29 : send_side_bwe_with_overhead_( |
30 webrtc::field_trial::IsEnabled("WebRTC-SendSideBwe-WithOverhead")), | 30 webrtc::field_trial::IsEnabled("WebRTC-SendSideBwe-WithOverhead")), |
31 transport_overhead_bytes_per_packet_(0), | 31 transport_overhead_bytes_per_packet_(0), |
32 send_time_history_(clock, kSendTimeHistoryWindowMs), | 32 send_time_history_(clock, kSendTimeHistoryWindowMs), |
33 clock_(clock), | 33 clock_(clock), |
34 current_offset_ms_(kNoTimestamp), | 34 current_offset_ms_(kNoTimestamp), |
35 last_timestamp_us_(kNoTimestamp), | 35 last_timestamp_us_(kNoTimestamp), |
36 local_net_id_(0), | 36 local_net_id_(0), |
37 remote_net_id_(0) {} | 37 remote_net_id_(0) {} |
38 | 38 |
39 TransportFeedbackAdapter::~TransportFeedbackAdapter() {} | 39 TransportFeedbackAdapter::~TransportFeedbackAdapter() { |
40 RTC_DCHECK(observers_.empty()); | |
41 } | |
40 | 42 |
41 void TransportFeedbackAdapter::AddPacket(uint16_t sequence_number, | 43 void TransportFeedbackAdapter::RegisterTransportFeedbackAdapterObserver( |
44 TransportFeedbackAdapterObserver* observer) { | |
45 rtc::CritScope cs(&observers_lock_); | |
46 RTC_DCHECK(observer); | |
47 RTC_DCHECK(std::find(observers_.begin(), observers_.end(), observer) == | |
48 observers_.end()); | |
49 observers_.push_back(observer); | |
50 } | |
51 | |
52 void TransportFeedbackAdapter::DeRegisterTransportFeedbackAdapterObserver( | |
53 TransportFeedbackAdapterObserver* observer) { | |
54 rtc::CritScope cs(&observers_lock_); | |
55 RTC_DCHECK(observer); | |
56 const auto it = std::find(observers_.begin(), observers_.end(), observer); | |
57 RTC_DCHECK(it != observers_.end()); | |
58 observers_.erase(it); | |
minyue-webrtc
2017/03/21 09:22:58
extra check
RTC_DCHECK(std::find(observers_.begi
elad.alon_webrtc.org
2017/03/21 10:44:23
Done.
| |
59 } | |
60 | |
61 void TransportFeedbackAdapter::AddPacket(uint32_t ssrc, | |
62 uint16_t sequence_number, | |
42 size_t length, | 63 size_t length, |
43 const PacedPacketInfo& pacing_info) { | 64 const PacedPacketInfo& pacing_info) { |
44 rtc::CritScope cs(&lock_); | 65 { |
45 if (send_side_bwe_with_overhead_) { | 66 rtc::CritScope cs(&lock_); |
46 length += transport_overhead_bytes_per_packet_; | 67 if (send_side_bwe_with_overhead_) { |
68 length += transport_overhead_bytes_per_packet_; | |
69 } | |
70 const int64_t creation_time_ms = clock_->TimeInMilliseconds(); | |
71 send_time_history_.AddAndRemoveOld( | |
72 PacketFeedback(creation_time_ms, sequence_number, length, local_net_id_, | |
73 remote_net_id_, pacing_info)); | |
47 } | 74 } |
48 const int64_t creation_time_ms = clock_->TimeInMilliseconds(); | 75 |
49 send_time_history_.AddAndRemoveOld( | 76 { |
50 PacketFeedback(creation_time_ms, sequence_number, length, local_net_id_, | 77 rtc::CritScope cs(&observers_lock_); |
51 remote_net_id_, pacing_info)); | 78 for (auto observer : observers_) { |
79 observer->OnPacketAdded(ssrc, sequence_number); | |
80 } | |
81 } | |
52 } | 82 } |
53 | 83 |
54 void TransportFeedbackAdapter::OnSentPacket(uint16_t sequence_number, | 84 void TransportFeedbackAdapter::OnSentPacket(uint16_t sequence_number, |
55 int64_t send_time_ms) { | 85 int64_t send_time_ms) { |
56 rtc::CritScope cs(&lock_); | 86 rtc::CritScope cs(&lock_); |
57 send_time_history_.OnSentPacket(sequence_number, send_time_ms); | 87 send_time_history_.OnSentPacket(sequence_number, send_time_ms); |
58 } | 88 } |
59 | 89 |
60 void TransportFeedbackAdapter::SetTransportOverhead( | 90 void TransportFeedbackAdapter::SetTransportOverhead( |
61 int transport_overhead_bytes_per_packet) { | 91 int transport_overhead_bytes_per_packet) { |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
147 << " packet" << (failed_lookups > 1 ? "s" : "") | 177 << " packet" << (failed_lookups > 1 ? "s" : "") |
148 << ". Send time history too small?"; | 178 << ". Send time history too small?"; |
149 } | 179 } |
150 } | 180 } |
151 return packet_feedback_vector; | 181 return packet_feedback_vector; |
152 } | 182 } |
153 | 183 |
154 void TransportFeedbackAdapter::OnTransportFeedback( | 184 void TransportFeedbackAdapter::OnTransportFeedback( |
155 const rtcp::TransportFeedback& feedback) { | 185 const rtcp::TransportFeedback& feedback) { |
156 last_packet_feedback_vector_ = GetPacketFeedbackVector(feedback); | 186 last_packet_feedback_vector_ = GetPacketFeedbackVector(feedback); |
187 { | |
188 rtc::CritScope cs(&observers_lock_); | |
189 for (auto observer : observers_) { | |
190 observer->OnNewTransportFeedbacks(last_packet_feedback_vector_); | |
191 } | |
192 } | |
157 } | 193 } |
158 | 194 |
159 std::vector<PacketFeedback> | 195 std::vector<PacketFeedback> |
160 TransportFeedbackAdapter::GetTransportFeedbackVector() const { | 196 TransportFeedbackAdapter::GetTransportFeedbackVector() const { |
161 return last_packet_feedback_vector_; | 197 return last_packet_feedback_vector_; |
162 } | 198 } |
163 } // namespace webrtc | 199 } // namespace webrtc |
OLD | NEW |