| /* |
| * Copyright (c) 2019 The WebRTC project authors. All Rights Reserved. |
| * |
| * Use of this source code is governed by a BSD-style license |
| * that can be found in the LICENSE file in the root of the source |
| * tree. An additional intellectual property rights grant can be found |
| * in the file PATENTS. All contributing project authors may |
| * be found in the AUTHORS file in the root of the source tree. |
| */ |
| |
| #ifndef MODULES_AUDIO_CODING_NETEQ_HISTOGRAM_H_ |
| #define MODULES_AUDIO_CODING_NETEQ_HISTOGRAM_H_ |
| |
| #include <string.h> // Provide access to size_t. |
| |
| #include <vector> |
| |
| namespace webrtc { |
| |
| class Histogram { |
| public: |
| // Creates histogram with capacity |num_buckets| and |forget_factor| in Q15. |
| Histogram(size_t num_buckets, int forget_factor); |
| |
| virtual ~Histogram(); |
| |
| // Resets the histogram to the default start distribution. |
| virtual void Reset(); |
| |
| // Add entry in bucket |index|. |
| virtual void Add(int index); |
| |
| // Calculates the quantile at |probability| (in Q30) of the histogram |
| // distribution. |
| virtual int Quantile(int probability); |
| |
| // Apply compression or stretching to the histogram. |
| virtual void Scale(int old_bucket_width, int new_bucket_width); |
| |
| // Returns the number of buckets in the histogram. |
| virtual int NumBuckets() const; |
| |
| // Returns the probability for each bucket in Q30. |
| std::vector<int> buckets() const { return buckets_; } |
| |
| int forget_factor() const { return base_forget_factor_; } |
| |
| // Made public for testing. |
| static std::vector<int> ScaleBuckets(const std::vector<int>& buckets, |
| int old_bucket_width, |
| int new_bucket_width); |
| |
| private: |
| std::vector<int> buckets_; |
| int forget_factor_; // Q15 |
| const int base_forget_factor_; |
| }; |
| |
| } // namespace webrtc |
| |
| #endif // MODULES_AUDIO_CODING_NETEQ_HISTOGRAM_H_ |