• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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  
20  namespace webrtc {
21  enum RateControlRegion;
22  
23  bool AdaptiveThresholdExperimentIsEnabled();
24  
25  class 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