1/*
2 *  Copyright (c) 2012 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#ifndef WEBRTC_MODULES_REMOTE_BITRATE_ESTIMATOR_OVERUSE_DETECTOR_H_
11#define WEBRTC_MODULES_REMOTE_BITRATE_ESTIMATOR_OVERUSE_DETECTOR_H_
12
13#include <list>
14
15#include "webrtc/base/constructormagic.h"
16#include "webrtc/modules/include/module_common_types.h"
17#include "webrtc/modules/remote_bitrate_estimator/include/bwe_defines.h"
18#include "webrtc/typedefs.h"
19
20namespace webrtc {
21enum RateControlRegion;
22
23bool AdaptiveThresholdExperimentIsEnabled();
24
25class OveruseDetector {
26 public:
27  explicit OveruseDetector(const OverUseDetectorOptions& options);
28  virtual ~OveruseDetector();
29
30  // Update the detection state based on the estimated inter-arrival time delta
31  // offset. |timestamp_delta| is the delta between the last timestamp which the
32  // estimated offset is based on and the last timestamp on which the last
33  // offset was based on, representing the time between detector updates.
34  // |num_of_deltas| is the number of deltas the offset estimate is based on.
35  // Returns the state after the detection update.
36  BandwidthUsage Detect(double offset,
37                        double timestamp_delta,
38                        int num_of_deltas,
39                        int64_t now_ms);
40
41  // Returns the current detector state.
42  BandwidthUsage State() const;
43
44 private:
45  void UpdateThreshold(double modified_offset, int64_t now_ms);
46  void InitializeExperiment();
47
48  const bool in_experiment_;
49  double k_up_;
50  double k_down_;
51  double overusing_time_threshold_;
52  // Must be first member variable. Cannot be const because we need to be
53  // copyable.
54  webrtc::OverUseDetectorOptions options_;
55  double threshold_;
56  int64_t last_update_ms_;
57  double prev_offset_;
58  double time_over_using_;
59  int overuse_counter_;
60  BandwidthUsage hypothesis_;
61
62  RTC_DISALLOW_COPY_AND_ASSIGN(OveruseDetector);
63};
64}  // namespace webrtc
65
66#endif  // WEBRTC_MODULES_REMOTE_BITRATE_ESTIMATOR_OVERUSE_DETECTOR_H_
67