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 14 matching lines...) Expand all Loading... | |
25 rtcp::TransportFeedback::kDeltaScaleFactor * (1 << 8); | 25 rtcp::TransportFeedback::kDeltaScaleFactor * (1 << 8); |
26 const int64_t kBaseTimestampRangeSizeUs = kBaseTimestampScaleFactor * (1 << 24); | 26 const int64_t kBaseTimestampRangeSizeUs = kBaseTimestampScaleFactor * (1 << 24); |
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 local_net_id_(0), | |
37 remote_net_id_(0) {} | |
36 | 38 |
37 TransportFeedbackAdapter::~TransportFeedbackAdapter() {} | 39 TransportFeedbackAdapter::~TransportFeedbackAdapter() {} |
38 | 40 |
39 void TransportFeedbackAdapter::AddPacket(uint16_t sequence_number, | 41 void TransportFeedbackAdapter::AddPacket(uint16_t sequence_number, |
40 size_t length, | 42 size_t length, |
41 const PacedPacketInfo& pacing_info) { | 43 const PacedPacketInfo& pacing_info) { |
42 rtc::CritScope cs(&lock_); | 44 rtc::CritScope cs(&lock_); |
43 if (send_side_bwe_with_overhead_) { | 45 if (send_side_bwe_with_overhead_) { |
44 length += transport_overhead_bytes_per_packet_; | 46 length += transport_overhead_bytes_per_packet_; |
45 } | 47 } |
46 send_time_history_.AddAndRemoveOld(sequence_number, length, pacing_info); | 48 constexpr int64_t kNoArrivalTimeMs = -1; // Arrival time is ignored. |
49 constexpr int64_t kNoSendTimeMs = -1; // Send time is set by OnSentPacket. | |
50 int64_t creation_time_ms = clock_->TimeInMilliseconds(); | |
51 send_time_history_.AddAndRemoveOld(PacketFeedback( | |
philipel
2017/03/15 10:38:37
I know it's more of a refactoring task, but having
stefan-webrtc
2017/03/15 10:51:39
Done.
| |
52 creation_time_ms, kNoArrivalTimeMs, kNoSendTimeMs, sequence_number, | |
53 length, local_net_id_, remote_net_id_, pacing_info)); | |
47 } | 54 } |
48 | 55 |
49 void TransportFeedbackAdapter::OnSentPacket(uint16_t sequence_number, | 56 void TransportFeedbackAdapter::OnSentPacket(uint16_t sequence_number, |
50 int64_t send_time_ms) { | 57 int64_t send_time_ms) { |
51 rtc::CritScope cs(&lock_); | 58 rtc::CritScope cs(&lock_); |
52 send_time_history_.OnSentPacket(sequence_number, send_time_ms); | 59 send_time_history_.OnSentPacket(sequence_number, send_time_ms); |
53 } | 60 } |
54 | 61 |
55 void TransportFeedbackAdapter::SetTransportOverhead( | 62 void TransportFeedbackAdapter::SetTransportOverhead( |
56 int transport_overhead_bytes_per_packet) { | 63 int transport_overhead_bytes_per_packet) { |
57 rtc::CritScope cs(&lock_); | 64 rtc::CritScope cs(&lock_); |
58 transport_overhead_bytes_per_packet_ = transport_overhead_bytes_per_packet; | 65 transport_overhead_bytes_per_packet_ = transport_overhead_bytes_per_packet; |
59 } | 66 } |
60 | 67 |
61 void TransportFeedbackAdapter::ClearSendTimeHistory() { | 68 void TransportFeedbackAdapter::SetNetworkIds(uint16_t local_id, |
69 uint16_t remote_id) { | |
62 rtc::CritScope cs(&lock_); | 70 rtc::CritScope cs(&lock_); |
63 send_time_history_.Clear(); | 71 local_net_id_ = local_id; |
72 remote_net_id_ = remote_id; | |
64 } | 73 } |
65 | 74 |
66 std::vector<PacketFeedback> TransportFeedbackAdapter::GetPacketFeedbackVector( | 75 std::vector<PacketFeedback> TransportFeedbackAdapter::GetPacketFeedbackVector( |
67 const rtcp::TransportFeedback& feedback) { | 76 const rtcp::TransportFeedback& feedback) { |
68 int64_t timestamp_us = feedback.GetBaseTimeUs(); | 77 int64_t timestamp_us = feedback.GetBaseTimeUs(); |
69 // Add timestamp deltas to a local time base selected on first packet arrival. | 78 // Add timestamp deltas to a local time base selected on first packet arrival. |
70 // This won't be the true time base, but makes it easier to manually inspect | 79 // This won't be the true time base, but makes it easier to manually inspect |
71 // time stamps. | 80 // time stamps. |
72 if (last_timestamp_us_ == kNoTimestamp) { | 81 if (last_timestamp_us_ == kNoTimestamp) { |
73 current_offset_ms_ = clock_->TimeInMilliseconds(); | 82 current_offset_ms_ = clock_->TimeInMilliseconds(); |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
108 uint16_t seq_num = feedback.GetBaseSequence(); | 117 uint16_t seq_num = feedback.GetBaseSequence(); |
109 for (const auto& packet : received_packets) { | 118 for (const auto& packet : received_packets) { |
110 // Insert into the vector those unreceived packets which precede this | 119 // Insert into the vector those unreceived packets which precede this |
111 // iteration's received packet. | 120 // iteration's received packet. |
112 for (; seq_num != packet.sequence_number(); ++seq_num) { | 121 for (; seq_num != packet.sequence_number(); ++seq_num) { |
113 PacketFeedback packet_feedback(PacketFeedback::kNotReceived, seq_num); | 122 PacketFeedback packet_feedback(PacketFeedback::kNotReceived, seq_num); |
114 // Note: Element not removed from history because it might be reported | 123 // Note: Element not removed from history because it might be reported |
115 // as received by another feedback. | 124 // as received by another feedback. |
116 if (!send_time_history_.GetFeedback(&packet_feedback, false)) | 125 if (!send_time_history_.GetFeedback(&packet_feedback, false)) |
117 ++failed_lookups; | 126 ++failed_lookups; |
118 packet_feedback_vector.push_back(packet_feedback); | 127 if (packet_feedback.local_net_id == local_net_id_ && |
128 packet_feedback.remote_net_id == remote_net_id_) { | |
129 packet_feedback_vector.push_back(packet_feedback); | |
130 } | |
119 } | 131 } |
120 | 132 |
121 // Handle this iteration's received packet. | 133 // Handle this iteration's received packet. |
122 offset_us += packet.delta_us(); | 134 offset_us += packet.delta_us(); |
123 timestamp_ms = current_offset_ms_ + (offset_us / 1000); | 135 timestamp_ms = current_offset_ms_ + (offset_us / 1000); |
124 PacketFeedback packet_feedback(timestamp_ms, packet.sequence_number()); | 136 PacketFeedback packet_feedback(timestamp_ms, packet.sequence_number()); |
125 if (!send_time_history_.GetFeedback(&packet_feedback, true)) | 137 if (!send_time_history_.GetFeedback(&packet_feedback, true)) |
126 ++failed_lookups; | 138 ++failed_lookups; |
127 packet_feedback_vector.push_back(packet_feedback); | 139 if (packet_feedback.local_net_id == local_net_id_ && |
140 packet_feedback.remote_net_id == remote_net_id_) { | |
141 packet_feedback_vector.push_back(packet_feedback); | |
142 } | |
128 | 143 |
129 ++seq_num; | 144 ++seq_num; |
130 } | 145 } |
131 | 146 |
132 if (failed_lookups > 0) { | 147 if (failed_lookups > 0) { |
133 LOG(LS_WARNING) << "Failed to lookup send time for " << failed_lookups | 148 LOG(LS_WARNING) << "Failed to lookup send time for " << failed_lookups |
134 << " packet" << (failed_lookups > 1 ? "s" : "") | 149 << " packet" << (failed_lookups > 1 ? "s" : "") |
135 << ". Send time history too small?"; | 150 << ". Send time history too small?"; |
136 } | 151 } |
137 } | 152 } |
138 return packet_feedback_vector; | 153 return packet_feedback_vector; |
139 } | 154 } |
140 | 155 |
141 void TransportFeedbackAdapter::OnTransportFeedback( | 156 void TransportFeedbackAdapter::OnTransportFeedback( |
142 const rtcp::TransportFeedback& feedback) { | 157 const rtcp::TransportFeedback& feedback) { |
143 last_packet_feedback_vector_ = GetPacketFeedbackVector(feedback); | 158 last_packet_feedback_vector_ = GetPacketFeedbackVector(feedback); |
144 } | 159 } |
145 | 160 |
146 std::vector<PacketFeedback> | 161 std::vector<PacketFeedback> |
147 TransportFeedbackAdapter::GetTransportFeedbackVector() const { | 162 TransportFeedbackAdapter::GetTransportFeedbackVector() const { |
148 return last_packet_feedback_vector_; | 163 return last_packet_feedback_vector_; |
149 } | 164 } |
150 } // namespace webrtc | 165 } // namespace webrtc |
OLD | NEW |