| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2012 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/audio_processing/agc/loudness_histogram.h" | 11 #include "webrtc/modules/audio_processing/agc/loudness_histogram.h" |
| 12 | 12 |
| 13 #include <cmath> | 13 #include <cmath> |
| 14 #include <cstring> | 14 #include <cstring> |
| 15 | 15 |
| 16 #include "webrtc/base/checks.h" |
| 16 #include "webrtc/modules/include/module_common_types.h" | 17 #include "webrtc/modules/include/module_common_types.h" |
| 17 | 18 |
| 18 namespace webrtc { | 19 namespace webrtc { |
| 19 | 20 |
| 20 static const double kHistBinCenters[] = { | 21 static const double kHistBinCenters[] = { |
| 21 7.59621091765857e-02, 9.02036021061016e-02, 1.07115112009343e-01, | 22 7.59621091765857e-02, 9.02036021061016e-02, 1.07115112009343e-01, |
| 22 1.27197217770508e-01, 1.51044347572047e-01, 1.79362373905283e-01, | 23 1.27197217770508e-01, 1.51044347572047e-01, 1.79362373905283e-01, |
| 23 2.12989507320644e-01, 2.52921107370304e-01, 3.00339145144454e-01, | 24 2.12989507320644e-01, 2.52921107370304e-01, 3.00339145144454e-01, |
| 24 3.56647189489147e-01, 4.23511952494003e-01, 5.02912623991786e-01, | 25 3.56647189489147e-01, 4.23511952494003e-01, 5.02912623991786e-01, |
| 25 5.97199455365749e-01, 7.09163326739184e-01, 8.42118356728544e-01, | 26 5.97199455365749e-01, 7.09163326739184e-01, 8.42118356728544e-01, |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 94 // Find the corresponding bin. | 95 // Find the corresponding bin. |
| 95 int hist_index = GetBinIndex(rms); | 96 int hist_index = GetBinIndex(rms); |
| 96 // To Q10 domain. | 97 // To Q10 domain. |
| 97 int prob_q10 = | 98 int prob_q10 = |
| 98 static_cast<int16_t>(floor(activity_probaility * kProbQDomain)); | 99 static_cast<int16_t>(floor(activity_probaility * kProbQDomain)); |
| 99 InsertNewestEntryAndUpdate(prob_q10, hist_index); | 100 InsertNewestEntryAndUpdate(prob_q10, hist_index); |
| 100 } | 101 } |
| 101 | 102 |
| 102 // Doing nothing if buffer is not full, yet. | 103 // Doing nothing if buffer is not full, yet. |
| 103 void LoudnessHistogram::RemoveOldestEntryAndUpdate() { | 104 void LoudnessHistogram::RemoveOldestEntryAndUpdate() { |
| 104 assert(len_circular_buffer_ > 0); | 105 RTC_DCHECK_GT(len_circular_buffer_, 0); |
| 105 // Do nothing if circular buffer is not full. | 106 // Do nothing if circular buffer is not full. |
| 106 if (!buffer_is_full_) | 107 if (!buffer_is_full_) |
| 107 return; | 108 return; |
| 108 | 109 |
| 109 int oldest_prob = activity_probability_[buffer_index_]; | 110 int oldest_prob = activity_probability_[buffer_index_]; |
| 110 int oldest_hist_index = hist_bin_index_[buffer_index_]; | 111 int oldest_hist_index = hist_bin_index_[buffer_index_]; |
| 111 UpdateHist(-oldest_prob, oldest_hist_index); | 112 UpdateHist(-oldest_prob, oldest_hist_index); |
| 112 } | 113 } |
| 113 | 114 |
| 114 void LoudnessHistogram::RemoveTransient() { | 115 void LoudnessHistogram::RemoveTransient() { |
| 115 // Don't expect to be here if high-activity region is longer than | 116 // Don't expect to be here if high-activity region is longer than |
| 116 // |kTransientWidthThreshold| or there has not been any transient. | 117 // |kTransientWidthThreshold| or there has not been any transient. |
| 117 assert(len_high_activity_ <= kTransientWidthThreshold); | 118 RTC_DCHECK_LE(len_high_activity_, kTransientWidthThreshold); |
| 118 int index = | 119 int index = |
| 119 (buffer_index_ > 0) ? (buffer_index_ - 1) : len_circular_buffer_ - 1; | 120 (buffer_index_ > 0) ? (buffer_index_ - 1) : len_circular_buffer_ - 1; |
| 120 while (len_high_activity_ > 0) { | 121 while (len_high_activity_ > 0) { |
| 121 UpdateHist(-activity_probability_[index], hist_bin_index_[index]); | 122 UpdateHist(-activity_probability_[index], hist_bin_index_[index]); |
| 122 activity_probability_[index] = 0; | 123 activity_probability_[index] = 0; |
| 123 index = (index > 0) ? (index - 1) : (len_circular_buffer_ - 1); | 124 index = (index > 0) ? (index - 1) : (len_circular_buffer_ - 1); |
| 124 len_high_activity_--; | 125 len_high_activity_--; |
| 125 } | 126 } |
| 126 } | 127 } |
| 127 | 128 |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 219 p = static_cast<double>(bin_count_q10_[n]) * p_total_inverse; | 220 p = static_cast<double>(bin_count_q10_[n]) * p_total_inverse; |
| 220 mean_val += p * kHistBinCenters[n]; | 221 mean_val += p * kHistBinCenters[n]; |
| 221 } | 222 } |
| 222 } else { | 223 } else { |
| 223 mean_val = kHistBinCenters[0]; | 224 mean_val = kHistBinCenters[0]; |
| 224 } | 225 } |
| 225 return mean_val; | 226 return mean_val; |
| 226 } | 227 } |
| 227 | 228 |
| 228 } // namespace webrtc | 229 } // namespace webrtc |
| OLD | NEW |