codec_timer.h 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. /*
  2. * Copyright (c) 2011 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 MODULES_VIDEO_CODING_CODEC_TIMER_H_
  11. #define MODULES_VIDEO_CODING_CODEC_TIMER_H_
  12. #include <queue>
  13. #include "rtc_base/numerics/percentile_filter.h"
  14. namespace webrtc {
  15. class VCMCodecTimer {
  16. public:
  17. VCMCodecTimer();
  18. ~VCMCodecTimer();
  19. // Add a new decode time to the filter.
  20. void AddTiming(int64_t new_decode_time_ms, int64_t now_ms);
  21. // Get the required decode time in ms. It is the 95th percentile observed
  22. // decode time within a time window.
  23. int64_t RequiredDecodeTimeMs() const;
  24. private:
  25. struct Sample {
  26. Sample(int64_t decode_time_ms, int64_t sample_time_ms);
  27. int64_t decode_time_ms;
  28. int64_t sample_time_ms;
  29. };
  30. // The number of samples ignored so far.
  31. int ignored_sample_count_;
  32. // Queue with history of latest decode time values.
  33. std::queue<Sample> history_;
  34. // |filter_| contains the same values as |history_|, but in a data structure
  35. // that allows efficient retrieval of the percentile value.
  36. PercentileFilter<int64_t> filter_;
  37. };
  38. } // namespace webrtc
  39. #endif // MODULES_VIDEO_CODING_CODEC_TIMER_H_