Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(220)

Side by Side Diff: webrtc/modules/video_coding/main/source/codec_timer.cc

Issue 1417283007: modules/video_coding refactorings (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Fix the other copy of the mock include header Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
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 #include "webrtc/modules/video_coding/main/source/codec_timer.h"
12
13 #include <assert.h>
14
15 namespace webrtc
16 {
17
18 // The first kIgnoredSampleCount samples will be ignored.
19 static const int32_t kIgnoredSampleCount = 5;
20
21 VCMCodecTimer::VCMCodecTimer()
22 :
23 _filteredMax(0),
24 _ignoredSampleCount(0),
25 _shortMax(0),
26 _history()
27 {
28 Reset();
29 }
30
31 void VCMCodecTimer::Reset()
32 {
33 _filteredMax = 0;
34 _ignoredSampleCount = 0;
35 _shortMax = 0;
36 for (int i=0; i < MAX_HISTORY_SIZE; i++)
37 {
38 _history[i].shortMax = 0;
39 _history[i].timeMs = -1;
40 }
41 }
42
43 // Update the max-value filter
44 void VCMCodecTimer::MaxFilter(int32_t decodeTime, int64_t nowMs)
45 {
46 if (_ignoredSampleCount >= kIgnoredSampleCount)
47 {
48 UpdateMaxHistory(decodeTime, nowMs);
49 ProcessHistory(nowMs);
50 }
51 else
52 {
53 _ignoredSampleCount++;
54 }
55 }
56
57 void
58 VCMCodecTimer::UpdateMaxHistory(int32_t decodeTime, int64_t now)
59 {
60 if (_history[0].timeMs >= 0 &&
61 now - _history[0].timeMs < SHORT_FILTER_MS)
62 {
63 if (decodeTime > _shortMax)
64 {
65 _shortMax = decodeTime;
66 }
67 }
68 else
69 {
70 // Only add a new value to the history once a second
71 if(_history[0].timeMs == -1)
72 {
73 // First, no shift
74 _shortMax = decodeTime;
75 }
76 else
77 {
78 // Shift
79 for(int i = (MAX_HISTORY_SIZE - 2); i >= 0 ; i--)
80 {
81 _history[i+1].shortMax = _history[i].shortMax;
82 _history[i+1].timeMs = _history[i].timeMs;
83 }
84 }
85 if (_shortMax == 0)
86 {
87 _shortMax = decodeTime;
88 }
89
90 _history[0].shortMax = _shortMax;
91 _history[0].timeMs = now;
92 _shortMax = 0;
93 }
94 }
95
96 void
97 VCMCodecTimer::ProcessHistory(int64_t nowMs)
98 {
99 _filteredMax = _shortMax;
100 if (_history[0].timeMs == -1)
101 {
102 return;
103 }
104 for (int i=0; i < MAX_HISTORY_SIZE; i++)
105 {
106 if (_history[i].timeMs == -1)
107 {
108 break;
109 }
110 if (nowMs - _history[i].timeMs > MAX_HISTORY_SIZE * SHORT_FILTER_MS)
111 {
112 // This sample (and all samples after this) is too old
113 break;
114 }
115 if (_history[i].shortMax > _filteredMax)
116 {
117 // This sample is the largest one this far into the history
118 _filteredMax = _history[i].shortMax;
119 }
120 }
121 }
122
123 // Get the maximum observed time within a time window
124 int32_t VCMCodecTimer::RequiredDecodeTimeMs(FrameType /*frameType*/) const
125 {
126 return _filteredMax;
127 }
128
129 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698