Index: webrtc/modules/video_coding/jitter_estimator.h |
diff --git a/webrtc/modules/video_coding/jitter_estimator.h b/webrtc/modules/video_coding/jitter_estimator.h |
index 580e114458ccd7680d1f0209fd01d681b4e149bb..a7b4b3e3df4ae2ecf7023eb9fae7f571c15378fa 100644 |
--- a/webrtc/modules/video_coding/jitter_estimator.h |
+++ b/webrtc/modules/video_coding/jitter_estimator.h |
@@ -15,151 +15,156 @@ |
#include "webrtc/modules/video_coding/rtt_filter.h" |
#include "webrtc/typedefs.h" |
-namespace webrtc |
-{ |
+namespace webrtc { |
class Clock; |
-class VCMJitterEstimator |
-{ |
-public: |
- VCMJitterEstimator(const Clock* clock, |
- int32_t vcmId = 0, |
- int32_t receiverId = 0); |
- virtual ~VCMJitterEstimator(); |
- VCMJitterEstimator& operator=(const VCMJitterEstimator& rhs); |
- |
- // Resets the estimate to the initial state |
- void Reset(); |
- void ResetNackCount(); |
- |
- // Updates the jitter estimate with the new data. |
- // |
- // Input: |
- // - frameDelay : Delay-delta calculated by UTILDelayEstimate in milliseconds |
- // - frameSize : Frame size of the current frame. |
- // - incompleteFrame : Flags if the frame is used to update the estimate before it |
- // was complete. Default is false. |
- void UpdateEstimate(int64_t frameDelayMS, |
- uint32_t frameSizeBytes, |
- bool incompleteFrame = false); |
- |
- // Returns the current jitter estimate in milliseconds and adds |
- // also adds an RTT dependent term in cases of retransmission. |
- // Input: |
- // - rttMultiplier : RTT param multiplier (when applicable). |
- // |
- // Return value : Jitter estimate in milliseconds |
- int GetJitterEstimate(double rttMultiplier); |
- |
- // Updates the nack counter. |
- void FrameNacked(); |
- |
- // Updates the RTT filter. |
- // |
- // Input: |
- // - rttMs : RTT in ms |
- void UpdateRtt(int64_t rttMs); |
- |
- void UpdateMaxFrameSize(uint32_t frameSizeBytes); |
- |
- // A constant describing the delay from the jitter buffer |
- // to the delay on the receiving side which is not accounted |
- // for by the jitter buffer nor the decoding delay estimate. |
- static const uint32_t OPERATING_SYSTEM_JITTER = 10; |
- |
-protected: |
- // These are protected for better testing possibilities |
- double _theta[2]; // Estimated line parameters (slope, offset) |
- double _varNoise; // Variance of the time-deviation from the line |
- |
- virtual bool LowRateExperimentEnabled(); |
- |
-private: |
- // Updates the Kalman filter for the line describing |
- // the frame size dependent jitter. |
- // |
- // Input: |
- // - frameDelayMS : Delay-delta calculated by UTILDelayEstimate in milliseconds |
- // - deltaFSBytes : Frame size delta, i.e. |
- // : frame size at time T minus frame size at time T-1 |
- void KalmanEstimateChannel(int64_t frameDelayMS, int32_t deltaFSBytes); |
- |
- // Updates the random jitter estimate, i.e. the variance |
- // of the time deviations from the line given by the Kalman filter. |
- // |
- // Input: |
- // - d_dT : The deviation from the kalman estimate |
- // - incompleteFrame : True if the frame used to update the estimate |
- // with was incomplete |
- void EstimateRandomJitter(double d_dT, bool incompleteFrame); |
- |
- double NoiseThreshold() const; |
- |
- // Calculates the current jitter estimate. |
- // |
- // Return value : The current jitter estimate in milliseconds |
- double CalculateEstimate(); |
- |
- // Post process the calculated estimate |
- void PostProcessEstimate(); |
- |
- // Calculates the difference in delay between a sample and the |
- // expected delay estimated by the Kalman filter. |
- // |
- // Input: |
- // - frameDelayMS : Delay-delta calculated by UTILDelayEstimate in milliseconds |
- // - deltaFS : Frame size delta, i.e. frame size at time |
- // T minus frame size at time T-1 |
- // |
- // Return value : The difference in milliseconds |
- double DeviationFromExpectedDelay(int64_t frameDelayMS, |
- int32_t deltaFSBytes) const; |
- |
- double GetFrameRate() const; |
- |
- // Constants, filter parameters |
- int32_t _vcmId; |
- int32_t _receiverId; |
- const double _phi; |
- const double _psi; |
- const uint32_t _alphaCountMax; |
- const double _thetaLow; |
- const uint32_t _nackLimit; |
- const int32_t _numStdDevDelayOutlier; |
- const int32_t _numStdDevFrameSizeOutlier; |
- const double _noiseStdDevs; |
- const double _noiseStdDevOffset; |
- |
- double _thetaCov[2][2]; // Estimate covariance |
- double _Qcov[2][2]; // Process noise covariance |
- double _avgFrameSize; // Average frame size |
- double _varFrameSize; // Frame size variance |
- double _maxFrameSize; // Largest frame size received (descending |
- // with a factor _psi) |
- uint32_t _fsSum; |
- uint32_t _fsCount; |
- |
- int64_t _lastUpdateT; |
- double _prevEstimate; // The previously returned jitter estimate |
- uint32_t _prevFrameSize; // Frame size of the previous frame |
- double _avgNoise; // Average of the random jitter |
- uint32_t _alphaCount; |
- double _filterJitterEstimate; // The filtered sum of jitter estimates |
- |
- uint32_t _startupCount; |
- |
- int64_t _latestNackTimestamp; // Timestamp in ms when the latest nack was seen |
- uint32_t _nackCount; // Keeps track of the number of nacks received, |
- // but never goes above _nackLimit |
- VCMRttFilter _rttFilter; |
- |
- rtc::RollingAccumulator<uint64_t> fps_counter_; |
- enum ExperimentFlag { kInit, kEnabled, kDisabled }; |
- ExperimentFlag low_rate_experiment_; |
- const Clock* clock_; |
+class VCMJitterEstimator { |
+ public: |
+ VCMJitterEstimator(const Clock* clock, |
+ int32_t vcmId = 0, |
+ int32_t receiverId = 0); |
+ virtual ~VCMJitterEstimator(); |
+ VCMJitterEstimator& operator=(const VCMJitterEstimator& rhs); |
+ |
+ // Resets the estimate to the initial state |
+ void Reset(); |
+ void ResetNackCount(); |
+ |
+ // Updates the jitter estimate with the new data. |
+ // |
+ // Input: |
+ // - frameDelay : Delay-delta calculated by UTILDelayEstimate in |
+ // milliseconds |
+ // - frameSize : Frame size of the current frame. |
+ // - incompleteFrame : Flags if the frame is used to update the |
+ // estimate before it |
+ // was complete. Default is false. |
+ void UpdateEstimate(int64_t frameDelayMS, |
+ uint32_t frameSizeBytes, |
+ bool incompleteFrame = false); |
+ |
+ // Returns the current jitter estimate in milliseconds and adds |
+ // also adds an RTT dependent term in cases of retransmission. |
+ // Input: |
+ // - rttMultiplier : RTT param multiplier (when applicable). |
+ // |
+ // Return value : Jitter estimate in milliseconds |
+ int GetJitterEstimate(double rttMultiplier); |
+ |
+ // Updates the nack counter. |
+ void FrameNacked(); |
+ |
+ // Updates the RTT filter. |
+ // |
+ // Input: |
+ // - rttMs : RTT in ms |
+ void UpdateRtt(int64_t rttMs); |
+ |
+ void UpdateMaxFrameSize(uint32_t frameSizeBytes); |
+ |
+ // A constant describing the delay from the jitter buffer |
+ // to the delay on the receiving side which is not accounted |
+ // for by the jitter buffer nor the decoding delay estimate. |
+ static const uint32_t OPERATING_SYSTEM_JITTER = 10; |
+ |
+ protected: |
+ // These are protected for better testing possibilities |
+ double _theta[2]; // Estimated line parameters (slope, offset) |
+ double _varNoise; // Variance of the time-deviation from the line |
+ |
+ virtual bool LowRateExperimentEnabled(); |
+ |
+ private: |
+ // Updates the Kalman filter for the line describing |
+ // the frame size dependent jitter. |
+ // |
+ // Input: |
+ // - frameDelayMS : Delay-delta calculated by UTILDelayEstimate in |
+ // milliseconds |
+ // - deltaFSBytes : Frame size delta, i.e. |
+ // : frame size at time T minus frame size at time |
+ // T-1 |
+ void KalmanEstimateChannel(int64_t frameDelayMS, int32_t deltaFSBytes); |
+ |
+ // Updates the random jitter estimate, i.e. the variance |
+ // of the time deviations from the line given by the Kalman filter. |
+ // |
+ // Input: |
+ // - d_dT : The deviation from the kalman estimate |
+ // - incompleteFrame : True if the frame used to update the |
+ // estimate |
+ // with was incomplete |
+ void EstimateRandomJitter(double d_dT, bool incompleteFrame); |
+ |
+ double NoiseThreshold() const; |
+ |
+ // Calculates the current jitter estimate. |
+ // |
+ // Return value : The current jitter estimate in milliseconds |
+ double CalculateEstimate(); |
+ |
+ // Post process the calculated estimate |
+ void PostProcessEstimate(); |
+ |
+ // Calculates the difference in delay between a sample and the |
+ // expected delay estimated by the Kalman filter. |
+ // |
+ // Input: |
+ // - frameDelayMS : Delay-delta calculated by UTILDelayEstimate in |
+ // milliseconds |
+ // - deltaFS : Frame size delta, i.e. frame size at time |
+ // T minus frame size at time T-1 |
+ // |
+ // Return value : The difference in milliseconds |
+ double DeviationFromExpectedDelay(int64_t frameDelayMS, |
+ int32_t deltaFSBytes) const; |
+ |
+ double GetFrameRate() const; |
+ |
+ // Constants, filter parameters |
+ int32_t _vcmId; |
+ int32_t _receiverId; |
+ const double _phi; |
+ const double _psi; |
+ const uint32_t _alphaCountMax; |
+ const double _thetaLow; |
+ const uint32_t _nackLimit; |
+ const int32_t _numStdDevDelayOutlier; |
+ const int32_t _numStdDevFrameSizeOutlier; |
+ const double _noiseStdDevs; |
+ const double _noiseStdDevOffset; |
+ |
+ double _thetaCov[2][2]; // Estimate covariance |
+ double _Qcov[2][2]; // Process noise covariance |
+ double _avgFrameSize; // Average frame size |
+ double _varFrameSize; // Frame size variance |
+ double _maxFrameSize; // Largest frame size received (descending |
+ // with a factor _psi) |
+ uint32_t _fsSum; |
+ uint32_t _fsCount; |
+ |
+ int64_t _lastUpdateT; |
+ double _prevEstimate; // The previously returned jitter estimate |
+ uint32_t _prevFrameSize; // Frame size of the previous frame |
+ double _avgNoise; // Average of the random jitter |
+ uint32_t _alphaCount; |
+ double _filterJitterEstimate; // The filtered sum of jitter estimates |
+ |
+ uint32_t _startupCount; |
+ |
+ int64_t |
+ _latestNackTimestamp; // Timestamp in ms when the latest nack was seen |
+ uint32_t _nackCount; // Keeps track of the number of nacks received, |
+ // but never goes above _nackLimit |
+ VCMRttFilter _rttFilter; |
+ |
+ rtc::RollingAccumulator<uint64_t> fps_counter_; |
+ enum ExperimentFlag { kInit, kEnabled, kDisabled }; |
+ ExperimentFlag low_rate_experiment_; |
+ const Clock* clock_; |
}; |
} // namespace webrtc |
-#endif // WEBRTC_MODULES_VIDEO_CODING_JITTER_ESTIMATOR_H_ |
+#endif // WEBRTC_MODULES_VIDEO_CODING_JITTER_ESTIMATOR_H_ |