Line data Source code
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 :
11 : #ifndef WEBRTC_MODULES_VIDEO_CODING_CODEC_TIMER_H_
12 : #define WEBRTC_MODULES_VIDEO_CODING_CODEC_TIMER_H_
13 :
14 : #include <queue>
15 :
16 : #include "webrtc/base/numerics/percentile_filter.h"
17 : #include "webrtc/modules/include/module_common_types.h"
18 : #include "webrtc/typedefs.h"
19 :
20 : namespace webrtc {
21 :
22 0 : class VCMCodecTimer {
23 : public:
24 : VCMCodecTimer();
25 :
26 : // Add a new decode time to the filter.
27 : void AddTiming(int64_t new_decode_time_ms, int64_t now_ms);
28 :
29 : // Get the required decode time in ms. It is the 95th percentile observed
30 : // decode time within a time window.
31 : int64_t RequiredDecodeTimeMs() const;
32 :
33 : private:
34 : struct Sample {
35 : Sample(int64_t decode_time_ms, int64_t sample_time_ms);
36 : int64_t decode_time_ms;
37 : int64_t sample_time_ms;
38 : };
39 :
40 : // The number of samples ignored so far.
41 : int ignored_sample_count_;
42 : // Queue with history of latest decode time values.
43 : std::queue<Sample> history_;
44 : // |filter_| contains the same values as |history_|, but in a data structure
45 : // that allows efficient retrieval of the percentile value.
46 : PercentileFilter<int64_t> filter_;
47 : };
48 :
49 : } // namespace webrtc
50 :
51 : #endif // WEBRTC_MODULES_VIDEO_CODING_CODEC_TIMER_H_
|