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