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

Side by Side Diff: webrtc/modules/video_coding/jitter_estimator.h

Issue 1528503003: Lint enabled for webrtc/modules/video_coding folder. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Rebase Created 5 years 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
1 /* 1 /*
2 * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 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 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 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
11 #ifndef WEBRTC_MODULES_VIDEO_CODING_JITTER_ESTIMATOR_H_ 11 #ifndef WEBRTC_MODULES_VIDEO_CODING_JITTER_ESTIMATOR_H_
12 #define WEBRTC_MODULES_VIDEO_CODING_JITTER_ESTIMATOR_H_ 12 #define WEBRTC_MODULES_VIDEO_CODING_JITTER_ESTIMATOR_H_
13 13
14 #include "webrtc/base/rollingaccumulator.h" 14 #include "webrtc/base/rollingaccumulator.h"
15 #include "webrtc/modules/video_coding/rtt_filter.h" 15 #include "webrtc/modules/video_coding/rtt_filter.h"
16 #include "webrtc/typedefs.h" 16 #include "webrtc/typedefs.h"
17 17
18 namespace webrtc 18 namespace webrtc {
19 {
20 19
21 class Clock; 20 class Clock;
22 21
23 class VCMJitterEstimator 22 class VCMJitterEstimator {
24 { 23 public:
25 public: 24 VCMJitterEstimator(const Clock* clock,
26 VCMJitterEstimator(const Clock* clock, 25 int32_t vcmId = 0,
27 int32_t vcmId = 0, 26 int32_t receiverId = 0);
28 int32_t receiverId = 0); 27 virtual ~VCMJitterEstimator();
29 virtual ~VCMJitterEstimator(); 28 VCMJitterEstimator& operator=(const VCMJitterEstimator& rhs);
30 VCMJitterEstimator& operator=(const VCMJitterEstimator& rhs);
31 29
32 // Resets the estimate to the initial state 30 // Resets the estimate to the initial state
33 void Reset(); 31 void Reset();
34 void ResetNackCount(); 32 void ResetNackCount();
35 33
36 // Updates the jitter estimate with the new data. 34 // Updates the jitter estimate with the new data.
37 // 35 //
38 // Input: 36 // Input:
39 // - frameDelay : Delay-delta calculated by UTILDelayEstimate in milliseconds 37 // - frameDelay : Delay-delta calculated by UTILDelayEstimate in
40 // - frameSize : Frame size of the current frame. 38 // milliseconds
41 // - incompleteFrame : Flags if the frame is used to update the est imate before it 39 // - frameSize : Frame size of the current frame.
42 // was complete. Default is false. 40 // - incompleteFrame : Flags if the frame is used to update the
43 void UpdateEstimate(int64_t frameDelayMS, 41 // estimate before it
44 uint32_t frameSizeBytes, 42 // was complete. Default is false.
45 bool incompleteFrame = false); 43 void UpdateEstimate(int64_t frameDelayMS,
44 uint32_t frameSizeBytes,
45 bool incompleteFrame = false);
46 46
47 // Returns the current jitter estimate in milliseconds and adds 47 // Returns the current jitter estimate in milliseconds and adds
48 // also adds an RTT dependent term in cases of retransmission. 48 // also adds an RTT dependent term in cases of retransmission.
49 // Input: 49 // Input:
50 // - rttMultiplier : RTT param multiplier (when applicable). 50 // - rttMultiplier : RTT param multiplier (when applicable).
51 // 51 //
52 // Return value : Jitter estimate in milliseconds 52 // Return value : Jitter estimate in milliseconds
53 int GetJitterEstimate(double rttMultiplier); 53 int GetJitterEstimate(double rttMultiplier);
54 54
55 // Updates the nack counter. 55 // Updates the nack counter.
56 void FrameNacked(); 56 void FrameNacked();
57 57
58 // Updates the RTT filter. 58 // Updates the RTT filter.
59 // 59 //
60 // Input: 60 // Input:
61 // - rttMs : RTT in ms 61 // - rttMs : RTT in ms
62 void UpdateRtt(int64_t rttMs); 62 void UpdateRtt(int64_t rttMs);
63 63
64 void UpdateMaxFrameSize(uint32_t frameSizeBytes); 64 void UpdateMaxFrameSize(uint32_t frameSizeBytes);
65 65
66 // A constant describing the delay from the jitter buffer 66 // A constant describing the delay from the jitter buffer
67 // to the delay on the receiving side which is not accounted 67 // to the delay on the receiving side which is not accounted
68 // for by the jitter buffer nor the decoding delay estimate. 68 // for by the jitter buffer nor the decoding delay estimate.
69 static const uint32_t OPERATING_SYSTEM_JITTER = 10; 69 static const uint32_t OPERATING_SYSTEM_JITTER = 10;
70 70
71 protected: 71 protected:
72 // These are protected for better testing possibilities 72 // These are protected for better testing possibilities
73 double _theta[2]; // Estimated line parameters (slope, offset) 73 double _theta[2]; // Estimated line parameters (slope, offset)
74 double _varNoise; // Variance of the time-deviation from the li ne 74 double _varNoise; // Variance of the time-deviation from the line
75 75
76 virtual bool LowRateExperimentEnabled(); 76 virtual bool LowRateExperimentEnabled();
77 77
78 private: 78 private:
79 // Updates the Kalman filter for the line describing 79 // Updates the Kalman filter for the line describing
80 // the frame size dependent jitter. 80 // the frame size dependent jitter.
81 // 81 //
82 // Input: 82 // Input:
83 // - frameDelayMS : Delay-delta calculated by UTILDelayEstimate in milliseconds 83 // - frameDelayMS : Delay-delta calculated by UTILDelayEstimate in
84 // - deltaFSBytes : Frame size delta, i.e. 84 // milliseconds
85 // : frame size at time T minus frame size at tim e T-1 85 // - deltaFSBytes : Frame size delta, i.e.
86 void KalmanEstimateChannel(int64_t frameDelayMS, int32_t deltaFSBytes); 86 // : frame size at time T minus frame size at time
87 // T-1
88 void KalmanEstimateChannel(int64_t frameDelayMS, int32_t deltaFSBytes);
87 89
88 // Updates the random jitter estimate, i.e. the variance 90 // Updates the random jitter estimate, i.e. the variance
89 // of the time deviations from the line given by the Kalman filter. 91 // of the time deviations from the line given by the Kalman filter.
90 // 92 //
91 // Input: 93 // Input:
92 // - d_dT : The deviation from the kalman estimate 94 // - d_dT : The deviation from the kalman estimate
93 // - incompleteFrame : True if the frame used to update the estim ate 95 // - incompleteFrame : True if the frame used to update the
94 // with was incomplete 96 // estimate
95 void EstimateRandomJitter(double d_dT, bool incompleteFrame); 97 // with was incomplete
98 void EstimateRandomJitter(double d_dT, bool incompleteFrame);
96 99
97 double NoiseThreshold() const; 100 double NoiseThreshold() const;
98 101
99 // Calculates the current jitter estimate. 102 // Calculates the current jitter estimate.
100 // 103 //
101 // Return value : The current jitter estimate in millisecond s 104 // Return value : The current jitter estimate in milliseconds
102 double CalculateEstimate(); 105 double CalculateEstimate();
103 106
104 // Post process the calculated estimate 107 // Post process the calculated estimate
105 void PostProcessEstimate(); 108 void PostProcessEstimate();
106 109
107 // Calculates the difference in delay between a sample and the 110 // Calculates the difference in delay between a sample and the
108 // expected delay estimated by the Kalman filter. 111 // expected delay estimated by the Kalman filter.
109 // 112 //
110 // Input: 113 // Input:
111 // - frameDelayMS : Delay-delta calculated by UTILDelayEstimate in milliseconds 114 // - frameDelayMS : Delay-delta calculated by UTILDelayEstimate in
112 // - deltaFS : Frame size delta, i.e. frame size at time 115 // milliseconds
113 // T minus frame size at time T-1 116 // - deltaFS : Frame size delta, i.e. frame size at time
114 // 117 // T minus frame size at time T-1
115 // Return value : The difference in milliseconds 118 //
116 double DeviationFromExpectedDelay(int64_t frameDelayMS, 119 // Return value : The difference in milliseconds
117 int32_t deltaFSBytes) const; 120 double DeviationFromExpectedDelay(int64_t frameDelayMS,
121 int32_t deltaFSBytes) const;
118 122
119 double GetFrameRate() const; 123 double GetFrameRate() const;
120 124
121 // Constants, filter parameters 125 // Constants, filter parameters
122 int32_t _vcmId; 126 int32_t _vcmId;
123 int32_t _receiverId; 127 int32_t _receiverId;
124 const double _phi; 128 const double _phi;
125 const double _psi; 129 const double _psi;
126 const uint32_t _alphaCountMax; 130 const uint32_t _alphaCountMax;
127 const double _thetaLow; 131 const double _thetaLow;
128 const uint32_t _nackLimit; 132 const uint32_t _nackLimit;
129 const int32_t _numStdDevDelayOutlier; 133 const int32_t _numStdDevDelayOutlier;
130 const int32_t _numStdDevFrameSizeOutlier; 134 const int32_t _numStdDevFrameSizeOutlier;
131 const double _noiseStdDevs; 135 const double _noiseStdDevs;
132 const double _noiseStdDevOffset; 136 const double _noiseStdDevOffset;
133 137
134 double _thetaCov[2][2]; // Estimate covariance 138 double _thetaCov[2][2]; // Estimate covariance
135 double _Qcov[2][2]; // Process noise covariance 139 double _Qcov[2][2]; // Process noise covariance
136 double _avgFrameSize; // Average frame size 140 double _avgFrameSize; // Average frame size
137 double _varFrameSize; // Frame size variance 141 double _varFrameSize; // Frame size variance
138 double _maxFrameSize; // Largest frame size received (desce nding 142 double _maxFrameSize; // Largest frame size received (descending
139 // with a factor _psi) 143 // with a factor _psi)
140 uint32_t _fsSum; 144 uint32_t _fsSum;
141 uint32_t _fsCount; 145 uint32_t _fsCount;
142 146
143 int64_t _lastUpdateT; 147 int64_t _lastUpdateT;
144 double _prevEstimate; // The previously returned jitt er estimate 148 double _prevEstimate; // The previously returned jitter estimate
145 uint32_t _prevFrameSize; // Frame size of the previous frame 149 uint32_t _prevFrameSize; // Frame size of the previous frame
146 double _avgNoise; // Average of the random jitter 150 double _avgNoise; // Average of the random jitter
147 uint32_t _alphaCount; 151 uint32_t _alphaCount;
148 double _filterJitterEstimate; // The filtered sum of jitter e stimates 152 double _filterJitterEstimate; // The filtered sum of jitter estimates
149 153
150 uint32_t _startupCount; 154 uint32_t _startupCount;
151 155
152 int64_t _latestNackTimestamp; // Timestamp in ms when the latest na ck was seen 156 int64_t
153 uint32_t _nackCount; // Keeps track of the number of nacks received, 157 _latestNackTimestamp; // Timestamp in ms when the latest nack was seen
154 // but never goes above _nackLi mit 158 uint32_t _nackCount; // Keeps track of the number of nacks received,
155 VCMRttFilter _rttFilter; 159 // but never goes above _nackLimit
160 VCMRttFilter _rttFilter;
156 161
157 rtc::RollingAccumulator<uint64_t> fps_counter_; 162 rtc::RollingAccumulator<uint64_t> fps_counter_;
158 enum ExperimentFlag { kInit, kEnabled, kDisabled }; 163 enum ExperimentFlag { kInit, kEnabled, kDisabled };
159 ExperimentFlag low_rate_experiment_; 164 ExperimentFlag low_rate_experiment_;
160 const Clock* clock_; 165 const Clock* clock_;
161 }; 166 };
162 167
163 } // namespace webrtc 168 } // namespace webrtc
164 169
165 #endif // WEBRTC_MODULES_VIDEO_CODING_JITTER_ESTIMATOR_H_ 170 #endif // WEBRTC_MODULES_VIDEO_CODING_JITTER_ESTIMATOR_H_
OLDNEW
« no previous file with comments | « webrtc/modules/video_coding/jitter_buffer_unittest.cc ('k') | webrtc/modules/video_coding/jitter_estimator.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698