blob: a142d4e7167fee5f42fd2eca2af98e631d593500 [file] [log] [blame]
palmkvist349092b2016-12-13 02:45:57 -08001/*
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
kwiberg84f6a3f2017-09-05 08:43:13 -070016#include "webrtc/api/optional.h"
palmkvist349092b2016-12-13 02:45:57 -080017
18namespace webrtc {
19
20class 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;
palmkvista40672a2017-01-13 05:58:34 -080032 rtc::Optional<double> FractionHigh(int min_required_samples) const;
palmkvist349092b2016-12-13 02:45:57 -080033
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_;
palmkvista40672a2017-01-13 05:58:34 -080046 int num_high_states_;
47 int num_certain_states_;
palmkvist349092b2016-12-13 02:45:57 -080048};
49
50} // namespace webrtc
51
52#endif // WEBRTC_VIDEO_QUALITY_THRESHOLD_H_