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 "webrtc/modules/include/module_common_types.h"
15 #include "webrtc/typedefs.h"
16 
17 namespace webrtc {
18 
19 // MAX_HISTORY_SIZE * SHORT_FILTER_MS defines the window size in milliseconds
20 #define MAX_HISTORY_SIZE 10
21 #define SHORT_FILTER_MS 1000
22 
23 class VCMShortMaxSample {
24  public:
VCMShortMaxSample()25   VCMShortMaxSample() : shortMax(0), timeMs(-1) {}
26 
27   int32_t shortMax;
28   int64_t timeMs;
29 };
30 
31 class VCMCodecTimer {
32  public:
33   VCMCodecTimer();
34 
35   // Updates the max filtered decode time.
36   void MaxFilter(int32_t newDecodeTimeMs, int64_t nowMs);
37 
38   // Empty the list of timers.
39   void Reset();
40 
41   // Get the required decode time in ms.
42   int32_t RequiredDecodeTimeMs(FrameType frameType) const;
43 
44  private:
45   void UpdateMaxHistory(int32_t decodeTime, int64_t now);
46   void ProcessHistory(int64_t nowMs);
47 
48   int32_t _filteredMax;
49   // The number of samples ignored so far.
50   int32_t _ignoredSampleCount;
51   int32_t _shortMax;
52   VCMShortMaxSample _history[MAX_HISTORY_SIZE];
53 };
54 
55 }  // namespace webrtc
56 
57 #endif  // WEBRTC_MODULES_VIDEO_CODING_CODEC_TIMER_H_
58