diff options
Diffstat (limited to 'webrtc/modules/video_coding/main/source/jitter_estimator.h')
-rw-r--r-- | webrtc/modules/video_coding/main/source/jitter_estimator.h | 165 |
1 files changed, 0 insertions, 165 deletions
diff --git a/webrtc/modules/video_coding/main/source/jitter_estimator.h b/webrtc/modules/video_coding/main/source/jitter_estimator.h deleted file mode 100644 index 46ed67ba1d..0000000000 --- a/webrtc/modules/video_coding/main/source/jitter_estimator.h +++ /dev/null @@ -1,165 +0,0 @@ -/* - * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -#ifndef WEBRTC_MODULES_VIDEO_CODING_JITTER_ESTIMATOR_H_ -#define WEBRTC_MODULES_VIDEO_CODING_JITTER_ESTIMATOR_H_ - -#include "webrtc/base/rollingaccumulator.h" -#include "webrtc/modules/video_coding/main/source/rtt_filter.h" -#include "webrtc/typedefs.h" - -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_; -}; - -} // namespace webrtc - -#endif // WEBRTC_MODULES_VIDEO_CODING_JITTER_ESTIMATOR_H_ |