From 3fcc5be59da9f8229e985842b7a3c9c6356f5275 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=85sa=20Persson?= Date: Thu, 4 Apr 2019 09:40:27 +0200 Subject: [PATCH] Remove unused members in VCMJitterEstimator. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bug: none Change-Id: I0b6649906d4e73ef0819e00884b5a17d317c7619 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/131260 Reviewed-by: Erik Språng Commit-Queue: Åsa Persson Cr-Commit-Position: refs/heads/master@{#27484} --- modules/video_coding/jitter_estimator.cc | 70 ++++++++----------- modules/video_coding/jitter_estimator.h | 66 ++++++++--------- .../video_coding/jitter_estimator_tests.cc | 6 +- test/fuzzers/frame_buffer2_fuzzer.cc | 2 +- 4 files changed, 65 insertions(+), 79 deletions(-) diff --git a/modules/video_coding/jitter_estimator.cc b/modules/video_coding/jitter_estimator.cc index 424f86a296..e380f9ea96 100644 --- a/modules/video_coding/jitter_estimator.cc +++ b/modules/video_coding/jitter_estimator.cc @@ -32,12 +32,8 @@ static constexpr int64_t kNackCountTimeoutMs = 60000; static constexpr double kDefaultMaxTimestampDeviationInSigmas = 3.5; } // namespace -VCMJitterEstimator::VCMJitterEstimator(Clock* clock, - int32_t vcmId, - int32_t receiverId) - : _vcmId(vcmId), - _receiverId(receiverId), - _phi(0.97), +VCMJitterEstimator::VCMJitterEstimator(Clock* clock) + : _phi(0.97), _psi(0.9999), _alphaCountMax(400), _thetaLow(0.000001), @@ -65,8 +61,6 @@ VCMJitterEstimator& VCMJitterEstimator::operator=( memcpy(_thetaCov, rhs._thetaCov, sizeof(_thetaCov)); memcpy(_Qcov, rhs._Qcov, sizeof(_Qcov)); - _vcmId = rhs._vcmId; - _receiverId = rhs._receiverId; _avgFrameSize = rhs._avgFrameSize; _varFrameSize = rhs._varFrameSize; _maxFrameSize = rhs._maxFrameSize; @@ -87,7 +81,7 @@ VCMJitterEstimator& VCMJitterEstimator::operator=( return *this; } -// Resets the JitterEstimate +// Resets the JitterEstimate. void VCMJitterEstimator::Reset() { _theta[0] = 1 / (512e3 / 8); _theta[1] = 0; @@ -122,7 +116,7 @@ void VCMJitterEstimator::ResetNackCount() { _nackCount = 0; } -// Updates the estimates with the new measurements +// Updates the estimates with the new measurements. void VCMJitterEstimator::UpdateEstimate(int64_t frameDelayMS, uint32_t frameSizeBytes, bool incompleteFrame /* = false */) { @@ -134,27 +128,25 @@ void VCMJitterEstimator::UpdateEstimate(int64_t frameDelayMS, _fsSum += frameSizeBytes; _fsCount++; } else if (_fsCount == kFsAccuStartupSamples) { - // Give the frame size filter + // Give the frame size filter. _avgFrameSize = static_cast(_fsSum) / static_cast(_fsCount); _fsCount++; } if (!incompleteFrame || frameSizeBytes > _avgFrameSize) { double avgFrameSize = _phi * _avgFrameSize + (1 - _phi) * frameSizeBytes; if (frameSizeBytes < _avgFrameSize + 2 * sqrt(_varFrameSize)) { - // Only update the average frame size if this sample wasn't a - // key frame + // Only update the average frame size if this sample wasn't a key frame. _avgFrameSize = avgFrameSize; } // Update the variance anyway since we want to capture cases where we only - // get - // key frames. + // get key frames. _varFrameSize = VCM_MAX( _phi * _varFrameSize + (1 - _phi) * (frameSizeBytes - avgFrameSize) * (frameSizeBytes - avgFrameSize), 1.0); } - // Update max frameSize estimate + // Update max frameSize estimate. _maxFrameSize = VCM_MAX(_psi * _maxFrameSize, static_cast(frameSizeBytes)); @@ -170,24 +162,24 @@ void VCMJitterEstimator::UpdateEstimate(int64_t frameDelayMS, frameDelayMS = std::max(std::min(frameDelayMS, max_time_deviation_ms), -max_time_deviation_ms); - // Only update the Kalman filter if the sample is not considered - // an extreme outlier. Even if it is an extreme outlier from a - // delay point of view, if the frame size also is large the - // deviation is probably due to an incorrect line slope. + // Only update the Kalman filter if the sample is not considered an extreme + // outlier. Even if it is an extreme outlier from a delay point of view, if + // the frame size also is large the deviation is probably due to an incorrect + // line slope. double deviation = DeviationFromExpectedDelay(frameDelayMS, deltaFS); if (fabs(deviation) < _numStdDevDelayOutlier * sqrt(_varNoise) || frameSizeBytes > _avgFrameSize + _numStdDevFrameSizeOutlier * sqrt(_varFrameSize)) { - // Update the variance of the deviation from the - // line given by the Kalman filter + // Update the variance of the deviation from the line given by the Kalman + // filter. EstimateRandomJitter(deviation, incompleteFrame); - // Prevent updating with frames which have been congested by a large - // frame, and therefore arrives almost at the same time as that frame. - // This can occur when we receive a large frame (key frame) which - // has been delayed. The next frame is of normal size (delta frame), - // and thus deltaFS will be << 0. This removes all frame samples - // which arrives after a key frame. + // Prevent updating with frames which have been congested by a large frame, + // and therefore arrives almost at the same time as that frame. + // This can occur when we receive a large frame (key frame) which has been + // delayed. The next frame is of normal size (delta frame), and thus deltaFS + // will be << 0. This removes all frame samples which arrives after a key + // frame. if ((!incompleteFrame || deviation >= 0.0) && static_cast(deltaFS) > -0.25 * _maxFrameSize) { // Update the Kalman filter with the new data @@ -206,7 +198,7 @@ void VCMJitterEstimator::UpdateEstimate(int64_t frameDelayMS, } } -// Updates the nack/packet ratio +// Updates the nack/packet ratio. void VCMJitterEstimator::FrameNacked() { if (_nackCount < _nackLimit) { _nackCount++; @@ -214,7 +206,7 @@ void VCMJitterEstimator::FrameNacked() { _latestNackTimestamp = clock_->TimeInMicroseconds(); } -// Updates Kalman estimate of the channel +// Updates Kalman estimate of the channel. // The caller is expected to sanity check the inputs. void VCMJitterEstimator::KalmanEstimateChannel(int64_t frameDelayMS, int32_t deltaFSBytes) { @@ -283,7 +275,7 @@ void VCMJitterEstimator::KalmanEstimateChannel(int64_t frameDelayMS, _thetaCov[1][1] = _thetaCov[1][1] * (1 - kalmanGain[1]) - kalmanGain[1] * deltaFSBytes * t01; - // Covariance matrix, must be positive semi-definite + // Covariance matrix, must be positive semi-definite. assert(_thetaCov[0][0] + _thetaCov[1][1] >= 0 && _thetaCov[0][0] * _thetaCov[1][1] - _thetaCov[0][1] * _thetaCov[1][0] >= @@ -291,16 +283,16 @@ void VCMJitterEstimator::KalmanEstimateChannel(int64_t frameDelayMS, _thetaCov[0][0] >= 0); } -// Calculate difference in delay between a sample and the -// expected delay estimated by the Kalman filter +// Calculate difference in delay between a sample and the expected delay +// estimated by the Kalman filter double VCMJitterEstimator::DeviationFromExpectedDelay( int64_t frameDelayMS, int32_t deltaFSBytes) const { return frameDelayMS - (_theta[0] * deltaFSBytes + _theta[1]); } -// Estimates the random jitter by calculating the variance of the -// sample distance from the line given by theta. +// Estimates the random jitter by calculating the variance of the sample +// distance from the line given by theta. void VCMJitterEstimator::EstimateRandomJitter(double d_dT, bool incompleteFrame) { uint64_t now = clock_->TimeInMicroseconds(); @@ -343,8 +335,8 @@ void VCMJitterEstimator::EstimateRandomJitter(double d_dT, _varNoise = varNoise; } if (_varNoise < 1.0) { - // The variance should never be zero, since we might get - // stuck and consider all samples as outliers. + // The variance should never be zero, since we might get stuck and consider + // all samples as outliers. _varNoise = 1.0; } } @@ -357,11 +349,11 @@ double VCMJitterEstimator::NoiseThreshold() const { return noiseThreshold; } -// Calculates the current jitter estimate from the filtered estimates +// Calculates the current jitter estimate from the filtered estimates. double VCMJitterEstimator::CalculateEstimate() { double ret = _theta[0] * (_maxFrameSize - _avgFrameSize) + NoiseThreshold(); - // A very low estimate (or negative) is neglected + // A very low estimate (or negative) is neglected. if (ret < 1.0) { if (_prevEstimate <= 0.01) { ret = 1.0; diff --git a/modules/video_coding/jitter_estimator.h b/modules/video_coding/jitter_estimator.h index c6500da782..8bffa05f4a 100644 --- a/modules/video_coding/jitter_estimator.h +++ b/modules/video_coding/jitter_estimator.h @@ -20,13 +20,11 @@ class Clock; class VCMJitterEstimator { public: - explicit VCMJitterEstimator(Clock* clock, - int32_t vcmId = 0, - int32_t receiverId = 0); + explicit VCMJitterEstimator(Clock* clock); virtual ~VCMJitterEstimator(); VCMJitterEstimator& operator=(const VCMJitterEstimator& rhs); - // Resets the estimate to the initial state + // Resets the estimate to the initial state. void Reset(); void ResetNackCount(); @@ -34,21 +32,21 @@ class VCMJitterEstimator { // // Input: // - frameDelay : Delay-delta calculated by UTILDelayEstimate in - // milliseconds + // 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. + // 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. + // Returns the current jitter estimate in milliseconds and adds an RTT + // dependent term in cases of retransmission. // Input: // - rttMultiplier : RTT param multiplier (when applicable). // - // Return value : Jitter estimate in milliseconds + // Return value : Jitter estimate in milliseconds. virtual int GetJitterEstimate(double rttMultiplier); // Updates the nack counter. @@ -57,71 +55,67 @@ class VCMJitterEstimator { // Updates the RTT filter. // // Input: - // - rttMs : RTT in ms + // - 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. + // 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 + // 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 private: - // Updates the Kalman filter for the line describing - // the frame size dependent jitter. + // 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 + // 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. + // 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 + // - d_dT : The deviation from the kalman estimate. // - incompleteFrame : True if the frame used to update the - // estimate - // with was incomplete + // 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 + // Return value : The current jitter estimate in milliseconds. double CalculateEstimate(); - // Post process the calculated estimate + // Post process the calculated estimate. void PostProcessEstimate(); - // Calculates the difference in delay between a sample and the - // expected delay estimated by the Kalman filter. + // 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 + // milliseconds. // - deltaFS : Frame size delta, i.e. frame size at time - // T minus frame size at time T-1 + // T minus frame size at time T-1. // - // Return value : The difference in milliseconds + // 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; + // Constants, filter parameters. const double _phi; const double _psi; const uint32_t _alphaCountMax; diff --git a/modules/video_coding/jitter_estimator_tests.cc b/modules/video_coding/jitter_estimator_tests.cc index e696f0e02f..fba2bf7fec 100644 --- a/modules/video_coding/jitter_estimator_tests.cc +++ b/modules/video_coding/jitter_estimator_tests.cc @@ -30,7 +30,7 @@ class TestVCMJitterEstimator : public ::testing::Test { TestVCMJitterEstimator() : fake_clock_(0) {} virtual void SetUp() { - estimator_ = absl::make_unique(&fake_clock_, 0, 0); + estimator_ = absl::make_unique(&fake_clock_); } void AdvanceClock(int64_t microseconds) { @@ -48,9 +48,9 @@ class ValueGenerator { : amplitude_(amplitude), counter_(0) {} virtual ~ValueGenerator() {} - int64_t Delay() { return ((counter_ % 11) - 5) * amplitude_; } + int64_t Delay() const { return ((counter_ % 11) - 5) * amplitude_; } - uint32_t FrameSize() { return 1000 + Delay(); } + uint32_t FrameSize() const { return 1000 + Delay(); } void Advance() { ++counter_; } diff --git a/test/fuzzers/frame_buffer2_fuzzer.cc b/test/fuzzers/frame_buffer2_fuzzer.cc index 6f7c6f6852..579a2d7b5b 100644 --- a/test/fuzzers/frame_buffer2_fuzzer.cc +++ b/test/fuzzers/frame_buffer2_fuzzer.cc @@ -67,7 +67,7 @@ void FuzzOneInput(const uint8_t* data, size_t size) { } DataReader reader(data, size); Clock* clock = Clock::GetRealTimeClock(); - VCMJitterEstimator jitter_estimator(clock, 0, 0); + VCMJitterEstimator jitter_estimator(clock); VCMTiming timing(clock); video_coding::FrameBuffer frame_buffer(clock, &jitter_estimator, &timing, nullptr);