Line data Source code
1 : /*
2 : * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
3 : *
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
6 : * tree. An additional intellectual property rights grant can be found
7 : * in the file PATENTS. All contributing project authors may
8 : * be found in the AUTHORS file in the root of the source tree.
9 : */
10 :
11 : #ifndef WEBRTC_VIDEO_QUALITY_THRESHOLD_H_
12 : #define WEBRTC_VIDEO_QUALITY_THRESHOLD_H_
13 :
14 : #include <memory>
15 :
16 : #include "webrtc/base/optional.h"
17 :
18 : namespace webrtc {
19 :
20 0 : class QualityThreshold {
21 : public:
22 : // Both thresholds are inclusive, i.e. measurement >= high signifies a high
23 : // state, while measurement <= low signifies a low state.
24 : QualityThreshold(int low_threshold,
25 : int high_threshold,
26 : float fraction,
27 : int max_measurements);
28 :
29 : void AddMeasurement(int measurement);
30 : rtc::Optional<bool> IsHigh() const;
31 : rtc::Optional<double> CalculateVariance() const;
32 : rtc::Optional<double> FractionHigh(int min_required_samples) const;
33 :
34 : private:
35 : const std::unique_ptr<int[]> buffer_;
36 : const int max_measurements_;
37 : const float fraction_;
38 : const int low_threshold_;
39 : const int high_threshold_;
40 : int until_full_;
41 : int next_index_;
42 : rtc::Optional<bool> is_high_;
43 : int sum_;
44 : int count_low_;
45 : int count_high_;
46 : int num_high_states_;
47 : int num_certain_states_;
48 : };
49 :
50 : } // namespace webrtc
51 :
52 : #endif // WEBRTC_VIDEO_QUALITY_THRESHOLD_H_
|