OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2013 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 |
11 #include "webrtc/modules/remote_bitrate_estimator/inter_arrival.h" | 11 #include "webrtc/modules/remote_bitrate_estimator/inter_arrival.h" |
12 | 12 |
13 #include <algorithm> | 13 #include <algorithm> |
14 #include <cassert> | 14 #include <cassert> |
15 | 15 |
16 #include "webrtc/base/logging.h" | |
16 #include "webrtc/modules/interface/module_common_types.h" | 17 #include "webrtc/modules/interface/module_common_types.h" |
17 | 18 |
18 namespace webrtc { | 19 namespace webrtc { |
19 | 20 |
20 static const int kBurstDeltaThresholdMs = 5; | 21 static const int kBurstDeltaThresholdMs = 5; |
21 | 22 |
22 InterArrival::InterArrival(uint32_t timestamp_group_length_ticks, | 23 InterArrival::InterArrival(uint32_t timestamp_group_length_ticks, |
23 double timestamp_to_ms_coeff, | 24 double timestamp_to_ms_coeff, |
24 bool enable_burst_grouping) | 25 bool enable_burst_grouping) |
25 : kTimestampGroupLengthTicks(timestamp_group_length_ticks), | 26 : kTimestampGroupLengthTicks(timestamp_group_length_ticks), |
(...skipping 19 matching lines...) Expand all Loading... | |
45 current_timestamp_group_.first_timestamp = timestamp; | 46 current_timestamp_group_.first_timestamp = timestamp; |
46 } else if (!PacketInOrder(timestamp)) { | 47 } else if (!PacketInOrder(timestamp)) { |
47 return false; | 48 return false; |
48 } else if (NewTimestampGroup(arrival_time_ms, timestamp)) { | 49 } else if (NewTimestampGroup(arrival_time_ms, timestamp)) { |
49 // First packet of a later frame, the previous frame sample is ready. | 50 // First packet of a later frame, the previous frame sample is ready. |
50 if (prev_timestamp_group_.complete_time_ms >= 0) { | 51 if (prev_timestamp_group_.complete_time_ms >= 0) { |
51 *timestamp_delta = current_timestamp_group_.timestamp - | 52 *timestamp_delta = current_timestamp_group_.timestamp - |
52 prev_timestamp_group_.timestamp; | 53 prev_timestamp_group_.timestamp; |
53 *arrival_time_delta_ms = current_timestamp_group_.complete_time_ms - | 54 *arrival_time_delta_ms = current_timestamp_group_.complete_time_ms - |
54 prev_timestamp_group_.complete_time_ms; | 55 prev_timestamp_group_.complete_time_ms; |
56 if (*arrival_time_delta_ms < 0) { | |
57 // The group of packets has been reordered since receiving its local | |
58 // arrival timestamp. | |
59 LOG(LS_WARNING) << "Packets are being reordered on the path from the " | |
60 "socket to the bandwidth estimator. Ignoring this " | |
61 "packet for bandwidth estimation."; | |
62 return false; | |
63 } | |
55 assert(*arrival_time_delta_ms >= 0); | 64 assert(*arrival_time_delta_ms >= 0); |
pbos-webrtc
2015/07/24 09:04:37
Do you need this assert now? :D
| |
56 *packet_size_delta = static_cast<int>(current_timestamp_group_.size) - | 65 *packet_size_delta = static_cast<int>(current_timestamp_group_.size) - |
57 static_cast<int>(prev_timestamp_group_.size); | 66 static_cast<int>(prev_timestamp_group_.size); |
58 calculated_deltas = true; | 67 calculated_deltas = true; |
59 } | 68 } |
60 prev_timestamp_group_ = current_timestamp_group_; | 69 prev_timestamp_group_ = current_timestamp_group_; |
61 // The new timestamp is now the current frame. | 70 // The new timestamp is now the current frame. |
62 current_timestamp_group_.first_timestamp = timestamp; | 71 current_timestamp_group_.first_timestamp = timestamp; |
63 current_timestamp_group_.timestamp = timestamp; | 72 current_timestamp_group_.timestamp = timestamp; |
64 current_timestamp_group_.size = 0; | 73 current_timestamp_group_.size = 0; |
65 } | 74 } |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
112 current_timestamp_group_.complete_time_ms; | 121 current_timestamp_group_.complete_time_ms; |
113 uint32_t timestamp_diff = timestamp - current_timestamp_group_.timestamp; | 122 uint32_t timestamp_diff = timestamp - current_timestamp_group_.timestamp; |
114 int64_t ts_delta_ms = timestamp_to_ms_coeff_ * timestamp_diff + 0.5; | 123 int64_t ts_delta_ms = timestamp_to_ms_coeff_ * timestamp_diff + 0.5; |
115 if (ts_delta_ms == 0) | 124 if (ts_delta_ms == 0) |
116 return true; | 125 return true; |
117 int propagation_delta_ms = arrival_time_delta_ms - ts_delta_ms; | 126 int propagation_delta_ms = arrival_time_delta_ms - ts_delta_ms; |
118 return propagation_delta_ms < 0 && | 127 return propagation_delta_ms < 0 && |
119 arrival_time_delta_ms <= kBurstDeltaThresholdMs; | 128 arrival_time_delta_ms <= kBurstDeltaThresholdMs; |
120 } | 129 } |
121 } // namespace webrtc | 130 } // namespace webrtc |
OLD | NEW |