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 |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
47 lost_timestamps_ = 0; | 47 lost_timestamps_ = 0; |
48 timestamps_since_last_report_ = 0; | 48 timestamps_since_last_report_ = 0; |
49 } | 49 } |
50 | 50 |
51 void StatisticsCalculator::ResetWaitingTimeStatistics() { | 51 void StatisticsCalculator::ResetWaitingTimeStatistics() { |
52 memset(waiting_times_, 0, kLenWaitingTimes * sizeof(waiting_times_[0])); | 52 memset(waiting_times_, 0, kLenWaitingTimes * sizeof(waiting_times_[0])); |
53 len_waiting_times_ = 0; | 53 len_waiting_times_ = 0; |
54 next_waiting_time_index_ = 0; | 54 next_waiting_time_index_ = 0; |
55 } | 55 } |
56 | 56 |
57 void StatisticsCalculator::ExpandedVoiceSamples(int num_samples) { | 57 void StatisticsCalculator::ExpandedVoiceSamples(size_t num_samples) { |
58 expanded_speech_samples_ += num_samples; | 58 expanded_speech_samples_ += num_samples; |
59 } | 59 } |
60 | 60 |
61 void StatisticsCalculator::ExpandedNoiseSamples(int num_samples) { | 61 void StatisticsCalculator::ExpandedNoiseSamples(size_t num_samples) { |
62 expanded_noise_samples_ += num_samples; | 62 expanded_noise_samples_ += num_samples; |
63 } | 63 } |
64 | 64 |
65 void StatisticsCalculator::PreemptiveExpandedSamples(int num_samples) { | 65 void StatisticsCalculator::PreemptiveExpandedSamples(size_t num_samples) { |
66 preemptive_samples_ += num_samples; | 66 preemptive_samples_ += num_samples; |
67 } | 67 } |
68 | 68 |
69 void StatisticsCalculator::AcceleratedSamples(int num_samples) { | 69 void StatisticsCalculator::AcceleratedSamples(size_t num_samples) { |
70 accelerate_samples_ += num_samples; | 70 accelerate_samples_ += num_samples; |
71 } | 71 } |
72 | 72 |
73 void StatisticsCalculator::AddZeros(int num_samples) { | 73 void StatisticsCalculator::AddZeros(size_t num_samples) { |
74 added_zero_samples_ += num_samples; | 74 added_zero_samples_ += num_samples; |
75 } | 75 } |
76 | 76 |
77 void StatisticsCalculator::PacketsDiscarded(int num_packets) { | 77 void StatisticsCalculator::PacketsDiscarded(size_t num_packets) { |
78 discarded_packets_ += num_packets; | 78 discarded_packets_ += num_packets; |
79 } | 79 } |
80 | 80 |
81 void StatisticsCalculator::LostSamples(int num_samples) { | 81 void StatisticsCalculator::LostSamples(size_t num_samples) { |
82 lost_timestamps_ += num_samples; | 82 lost_timestamps_ += num_samples; |
83 } | 83 } |
84 | 84 |
85 void StatisticsCalculator::IncreaseCounter(int num_samples, int fs_hz) { | 85 void StatisticsCalculator::IncreaseCounter(size_t num_samples, int fs_hz) { |
86 timestamps_since_last_report_ += static_cast<uint32_t>(num_samples); | 86 timestamps_since_last_report_ += static_cast<uint32_t>(num_samples); |
87 if (timestamps_since_last_report_ > | 87 if (timestamps_since_last_report_ > |
88 static_cast<uint32_t>(fs_hz * kMaxReportPeriod)) { | 88 static_cast<uint32_t>(fs_hz * kMaxReportPeriod)) { |
89 lost_timestamps_ = 0; | 89 lost_timestamps_ = 0; |
90 timestamps_since_last_report_ = 0; | 90 timestamps_since_last_report_ = 0; |
91 discarded_packets_ = 0; | 91 discarded_packets_ = 0; |
92 } | 92 } |
93 } | 93 } |
94 | 94 |
95 void StatisticsCalculator::SecondaryDecodedSamples(int num_samples) { | 95 void StatisticsCalculator::SecondaryDecodedSamples(int num_samples) { |
96 secondary_decoded_samples_ += num_samples; | 96 secondary_decoded_samples_ += num_samples; |
97 } | 97 } |
98 | 98 |
99 void StatisticsCalculator::StoreWaitingTime(int waiting_time_ms) { | 99 void StatisticsCalculator::StoreWaitingTime(int waiting_time_ms) { |
100 assert(next_waiting_time_index_ < kLenWaitingTimes); | 100 assert(next_waiting_time_index_ < kLenWaitingTimes); |
101 waiting_times_[next_waiting_time_index_] = waiting_time_ms; | 101 waiting_times_[next_waiting_time_index_] = waiting_time_ms; |
102 next_waiting_time_index_++; | 102 next_waiting_time_index_++; |
103 if (next_waiting_time_index_ >= kLenWaitingTimes) { | 103 if (next_waiting_time_index_ >= kLenWaitingTimes) { |
104 next_waiting_time_index_ = 0; | 104 next_waiting_time_index_ = 0; |
105 } | 105 } |
106 if (len_waiting_times_ < kLenWaitingTimes) { | 106 if (len_waiting_times_ < kLenWaitingTimes) { |
107 len_waiting_times_++; | 107 len_waiting_times_++; |
108 } | 108 } |
109 } | 109 } |
110 | 110 |
111 void StatisticsCalculator::GetNetworkStatistics( | 111 void StatisticsCalculator::GetNetworkStatistics( |
112 int fs_hz, | 112 int fs_hz, |
113 int num_samples_in_buffers, | 113 size_t num_samples_in_buffers, |
114 int samples_per_packet, | 114 size_t samples_per_packet, |
115 const DelayManager& delay_manager, | 115 const DelayManager& delay_manager, |
116 const DecisionLogic& decision_logic, | 116 const DecisionLogic& decision_logic, |
117 NetEqNetworkStatistics *stats) { | 117 NetEqNetworkStatistics *stats) { |
118 if (fs_hz <= 0 || !stats) { | 118 if (fs_hz <= 0 || !stats) { |
119 assert(false); | 119 assert(false); |
120 return; | 120 return; |
121 } | 121 } |
122 | 122 |
123 stats->added_zero_samples = added_zero_samples_; | 123 stats->added_zero_samples = added_zero_samples_; |
124 stats->current_buffer_size_ms = | 124 stats->current_buffer_size_ms = |
125 static_cast<uint16_t>(num_samples_in_buffers * 1000 / fs_hz); | 125 static_cast<uint16_t>(num_samples_in_buffers * 1000 / fs_hz); |
126 const int ms_per_packet = decision_logic.packet_length_samples() / | 126 const int ms_per_packet = static_cast<int>( |
hlundin-webrtc
2015/08/10 11:30:01
rtc::checked_cast
Peter Kasting
2015/08/17 22:49:47
Done.
| |
127 (fs_hz / 1000); | 127 decision_logic.packet_length_samples() / (fs_hz / 1000)); |
128 stats->preferred_buffer_size_ms = (delay_manager.TargetLevel() >> 8) * | 128 stats->preferred_buffer_size_ms = (delay_manager.TargetLevel() >> 8) * |
129 ms_per_packet; | 129 ms_per_packet; |
130 stats->jitter_peaks_found = delay_manager.PeakFound(); | 130 stats->jitter_peaks_found = delay_manager.PeakFound(); |
131 stats->clockdrift_ppm = delay_manager.AverageIAT(); | 131 stats->clockdrift_ppm = delay_manager.AverageIAT(); |
132 | 132 |
133 stats->packet_loss_rate = | 133 stats->packet_loss_rate = |
134 CalculateQ14Ratio(lost_timestamps_, timestamps_since_last_report_); | 134 CalculateQ14Ratio(lost_timestamps_, timestamps_since_last_report_); |
135 | 135 |
136 const unsigned discarded_samples = discarded_packets_ * samples_per_packet; | 136 const size_t discarded_samples = discarded_packets_ * samples_per_packet; |
137 stats->packet_discard_rate = | 137 stats->packet_discard_rate = |
138 CalculateQ14Ratio(discarded_samples, timestamps_since_last_report_); | 138 CalculateQ14Ratio(discarded_samples, timestamps_since_last_report_); |
139 | 139 |
140 stats->accelerate_rate = | 140 stats->accelerate_rate = |
141 CalculateQ14Ratio(accelerate_samples_, timestamps_since_last_report_); | 141 CalculateQ14Ratio(accelerate_samples_, timestamps_since_last_report_); |
142 | 142 |
143 stats->preemptive_rate = | 143 stats->preemptive_rate = |
144 CalculateQ14Ratio(preemptive_samples_, timestamps_since_last_report_); | 144 CalculateQ14Ratio(preemptive_samples_, timestamps_since_last_report_); |
145 | 145 |
146 stats->expand_rate = | 146 stats->expand_rate = |
(...skipping 14 matching lines...) Expand all Loading... | |
161 } | 161 } |
162 | 162 |
163 void StatisticsCalculator::WaitingTimes(std::vector<int>* waiting_times) { | 163 void StatisticsCalculator::WaitingTimes(std::vector<int>* waiting_times) { |
164 if (!waiting_times) { | 164 if (!waiting_times) { |
165 return; | 165 return; |
166 } | 166 } |
167 waiting_times->assign(waiting_times_, waiting_times_ + len_waiting_times_); | 167 waiting_times->assign(waiting_times_, waiting_times_ + len_waiting_times_); |
168 ResetWaitingTimeStatistics(); | 168 ResetWaitingTimeStatistics(); |
169 } | 169 } |
170 | 170 |
171 uint16_t StatisticsCalculator::CalculateQ14Ratio(uint32_t numerator, | 171 uint16_t StatisticsCalculator::CalculateQ14Ratio(size_t numerator, |
172 uint32_t denominator) { | 172 uint32_t denominator) { |
173 if (numerator == 0) { | 173 if (numerator == 0) { |
174 return 0; | 174 return 0; |
175 } else if (numerator < denominator) { | 175 } else if (numerator < denominator) { |
176 // Ratio must be smaller than 1 in Q14. | 176 // Ratio must be smaller than 1 in Q14. |
177 assert((numerator << 14) / denominator < (1 << 14)); | 177 assert((numerator << 14) / denominator < (1 << 14)); |
178 return static_cast<uint16_t>((numerator << 14) / denominator); | 178 return static_cast<uint16_t>((numerator << 14) / denominator); |
179 } else { | 179 } else { |
180 // Will not produce a ratio larger than 1, since this is probably an error. | 180 // Will not produce a ratio larger than 1, since this is probably an error. |
181 return 1 << 14; | 181 return 1 << 14; |
182 } | 182 } |
183 } | 183 } |
184 | 184 |
185 } // namespace webrtc | 185 } // namespace webrtc |
OLD | NEW |