mirror of
https://github.com/mollyim/webrtc.git
synced 2025-05-13 22:00:47 +01:00

Change the way the forget factor converge to the steady state so that we don't overemphasize the first packets received. The logic is controlled by the delay histogram field trial which has an added parameter to control if emphasis should be even (c=1, default) or put on later packets (c>1) until we reach our steady state forget factor. Bug: webrtc:10411 Change-Id: Ia5d46c22d1a4a66994652f71c8cde664362bfacb Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/137050 Reviewed-by: Minyue Li <minyue@webrtc.org> Reviewed-by: Chen Xing <chxg@google.com> Commit-Queue: Jakob Ivarsson <jakobi@webrtc.org> Cr-Commit-Position: refs/heads/master@{#28039}
72 lines
2.2 KiB
C++
72 lines
2.2 KiB
C++
/*
|
|
* 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>
|
|
|
|
#include "absl/types/optional.h"
|
|
|
|
namespace webrtc {
|
|
|
|
class Histogram {
|
|
public:
|
|
// Creates histogram with capacity |num_buckets| and |forget_factor| in Q15.
|
|
Histogram(size_t num_buckets,
|
|
int forget_factor,
|
|
absl::optional<double> start_forget_weight = absl::nullopt);
|
|
|
|
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_; }
|
|
|
|
// Made public for testing.
|
|
static std::vector<int> ScaleBuckets(const std::vector<int>& buckets,
|
|
int old_bucket_width,
|
|
int new_bucket_width);
|
|
|
|
// Accessors only intended for testing purposes.
|
|
int base_forget_factor_for_testing() const { return base_forget_factor_; }
|
|
int forget_factor_for_testing() const { return forget_factor_; }
|
|
absl::optional<double> start_forget_weight_for_testing() const {
|
|
return start_forget_weight_;
|
|
}
|
|
|
|
private:
|
|
std::vector<int> buckets_;
|
|
int forget_factor_; // Q15
|
|
const int base_forget_factor_;
|
|
int add_count_;
|
|
const absl::optional<double> start_forget_weight_;
|
|
};
|
|
|
|
} // namespace webrtc
|
|
|
|
#endif // MODULES_AUDIO_CODING_NETEQ_HISTOGRAM_H_
|