Home | History | Annotate | Download | only in remote_bitrate_estimator
      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