tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

frame_rate_estimator.h (2150B)


      1 /*
      2 *  Copyright (c) 2019 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 COMMON_VIDEO_FRAME_RATE_ESTIMATOR_H_
     12 #define COMMON_VIDEO_FRAME_RATE_ESTIMATOR_H_
     13 
     14 #include <deque>
     15 #include <optional>
     16 
     17 #include "api/units/time_delta.h"
     18 #include "api/units/timestamp.h"
     19 
     20 namespace webrtc {
     21 
     22 // Class used to estimate a frame-rate using inter-frame intervals.
     23 // Some notes on usage:
     24 // This class is intended to accurately estimate the frame rate during a
     25 // continuous stream. Unlike a traditional rate estimator that looks at number
     26 // of data points within a time window, if the input stops this implementation
     27 // will not smoothly fall down towards 0. This is done so that the estimated
     28 // fps is not affected by edge conditions like if we sample just before or just
     29 // after the next frame.
     30 // To avoid problems if a stream is stopped and restarted (where estimated fps
     31 // could look too low), users of this class should explicitly call Reset() on
     32 // restart.
     33 // Also note that this class is not thread safe, it's up to the user to guard
     34 // against concurrent access.
     35 class FrameRateEstimator {
     36 public:
     37  explicit FrameRateEstimator(TimeDelta averaging_window);
     38 
     39  // Insert a frame, potentially culling old frames that falls outside the
     40  // averaging window.
     41  void OnFrame(Timestamp time);
     42 
     43  // Get the current average FPS, based on the frames currently in the window.
     44  std::optional<double> GetAverageFps() const;
     45 
     46  // Move the window so it ends at `now`, and return the new fps estimate.
     47  std::optional<double> GetAverageFps(Timestamp now);
     48 
     49  // Completely clear the averaging window.
     50  void Reset();
     51 
     52 private:
     53  void CullOld(Timestamp now);
     54  const TimeDelta averaging_window_;
     55  std::deque<Timestamp> frame_times_;
     56 };
     57 
     58 }  // namespace webrtc
     59 
     60 #endif  // COMMON_VIDEO_FRAME_RATE_ESTIMATOR_H_