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 16 matching lines...) Expand all Loading... |
27 | 27 |
28 TransportFeedbackAdapter::TransportFeedbackAdapter(const Clock* clock) | 28 TransportFeedbackAdapter::TransportFeedbackAdapter(const Clock* clock) |
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 | 36 |
37 TransportFeedbackAdapter::~TransportFeedbackAdapter() {} | 37 TransportFeedbackAdapter::~TransportFeedbackAdapter() { |
| 38 RTC_DCHECK(observers_.empty()); |
| 39 } |
38 | 40 |
39 void TransportFeedbackAdapter::AddPacket(uint16_t sequence_number, | 41 void TransportFeedbackAdapter::RegisterTransportFeedbackAdapterObserver( |
| 42 TransportFeedbackAdapterObserver* observer) { |
| 43 rtc::CritScope cs(&observers_lock_); |
| 44 RTC_DCHECK(observer); |
| 45 if (std::find(observers_.begin(), observers_.end(), observer) == |
| 46 observers_.end()) { |
| 47 observers_.push_back(observer); |
| 48 } else { |
| 49 RTC_NOTREACHED(); |
| 50 } |
| 51 } |
| 52 |
| 53 void TransportFeedbackAdapter::DeRegisterTransportFeedbackAdapterObserver( |
| 54 TransportFeedbackAdapterObserver* observer) { |
| 55 rtc::CritScope cs(&observers_lock_); |
| 56 RTC_DCHECK(observer); |
| 57 auto elem = std::find(observers_.begin(), observers_.end(), observer); |
| 58 if (elem != observers_.end()) { |
| 59 observers_.erase(elem); |
| 60 } else { |
| 61 RTC_NOTREACHED(); |
| 62 } |
| 63 } |
| 64 |
| 65 void TransportFeedbackAdapter::AddPacket(uint32_t ssrc, |
| 66 uint16_t sequence_number, |
40 size_t length, | 67 size_t length, |
41 const PacedPacketInfo& pacing_info) { | 68 const PacedPacketInfo& pacing_info) { |
42 rtc::CritScope cs(&lock_); | 69 { |
43 if (send_side_bwe_with_overhead_) { | 70 rtc::CritScope cs(&lock_); |
44 length += transport_overhead_bytes_per_packet_; | 71 if (send_side_bwe_with_overhead_) { |
| 72 length += transport_overhead_bytes_per_packet_; |
| 73 } |
| 74 send_time_history_.AddAndRemoveOld(sequence_number, length, pacing_info); |
45 } | 75 } |
46 send_time_history_.AddAndRemoveOld(sequence_number, length, pacing_info); | 76 |
| 77 { |
| 78 rtc::CritScope cs(&observers_lock_); |
| 79 for (auto observer : observers_) { |
| 80 observer->OnPacketAdded(ssrc, sequence_number); |
| 81 } |
| 82 } |
47 } | 83 } |
48 | 84 |
49 void TransportFeedbackAdapter::OnSentPacket(uint16_t sequence_number, | 85 void TransportFeedbackAdapter::OnSentPacket(uint16_t sequence_number, |
50 int64_t send_time_ms) { | 86 int64_t send_time_ms) { |
51 rtc::CritScope cs(&lock_); | 87 rtc::CritScope cs(&lock_); |
52 send_time_history_.OnSentPacket(sequence_number, send_time_ms); | 88 send_time_history_.OnSentPacket(sequence_number, send_time_ms); |
53 } | 89 } |
54 | 90 |
55 void TransportFeedbackAdapter::SetTransportOverhead( | 91 void TransportFeedbackAdapter::SetTransportOverhead( |
56 int transport_overhead_bytes_per_packet) { | 92 int transport_overhead_bytes_per_packet) { |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
134 << " packet" << (failed_lookups > 1 ? "s" : "") | 170 << " packet" << (failed_lookups > 1 ? "s" : "") |
135 << ". Send time history too small?"; | 171 << ". Send time history too small?"; |
136 } | 172 } |
137 } | 173 } |
138 return packet_feedback_vector; | 174 return packet_feedback_vector; |
139 } | 175 } |
140 | 176 |
141 void TransportFeedbackAdapter::OnTransportFeedback( | 177 void TransportFeedbackAdapter::OnTransportFeedback( |
142 const rtcp::TransportFeedback& feedback) { | 178 const rtcp::TransportFeedback& feedback) { |
143 last_packet_feedback_vector_ = GetPacketFeedbackVector(feedback); | 179 last_packet_feedback_vector_ = GetPacketFeedbackVector(feedback); |
| 180 { |
| 181 rtc::CritScope cs(&observers_lock_); |
| 182 for (auto observer : observers_) { |
| 183 observer->OnTransportFeedback(feedback); |
| 184 } |
| 185 } |
144 } | 186 } |
145 | 187 |
146 std::vector<PacketFeedback> | 188 std::vector<PacketFeedback> |
147 TransportFeedbackAdapter::GetTransportFeedbackVector() const { | 189 TransportFeedbackAdapter::GetTransportFeedbackVector() const { |
148 return last_packet_feedback_vector_; | 190 return last_packet_feedback_vector_; |
149 } | 191 } |
150 } // namespace webrtc | 192 } // namespace webrtc |
OLD | NEW |