git-svn-id: http://webrtc.googlecode.com/svn/trunk@4 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
105
modules/video_coding/main/test/jitter_estimate_test.h
Normal file
105
modules/video_coding/main/test/jitter_estimate_test.h
Normal file
@@ -0,0 +1,105 @@
|
||||
/*
|
||||
* 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_TEST_JITTER_ESTIMATE_TEST_H_
|
||||
#define WEBRTC_MODULES_VIDEO_CODING_TEST_JITTER_ESTIMATE_TEST_H_
|
||||
|
||||
#include "typedefs.h"
|
||||
#include "jitter_buffer.h"
|
||||
#include "jitter_estimator.h"
|
||||
#include <cstdlib>
|
||||
#include <cmath>
|
||||
|
||||
double const pi = 4*std::atan(1.0);
|
||||
|
||||
class GaussDist
|
||||
{
|
||||
public:
|
||||
GaussDist(double m, double v): _mu(m), _sigma(sqrt(v)) {}
|
||||
|
||||
double RandValue() // returns a single normally distributed number
|
||||
{
|
||||
double r1 = (std::rand() + 1.0)/(RAND_MAX + 1.0); // gives equal distribution in (0, 1]
|
||||
double r2 = (std::rand() + 1.0)/(RAND_MAX + 1.0);
|
||||
return _mu + _sigma * std::sqrt(-2*std::log(r1))*std::cos(2*pi*r2);
|
||||
}
|
||||
|
||||
double GetAverage()
|
||||
{
|
||||
return _mu;
|
||||
}
|
||||
|
||||
double GetVariance()
|
||||
{
|
||||
return _sigma*_sigma;
|
||||
}
|
||||
|
||||
void SetParams(double m, double v)
|
||||
{
|
||||
_mu = m;
|
||||
_sigma = sqrt(v);
|
||||
}
|
||||
|
||||
private:
|
||||
double _mu, _sigma;
|
||||
};
|
||||
|
||||
class JitterEstimateTestWrapper : public webrtc::VCMJitterEstimator
|
||||
{
|
||||
public:
|
||||
JitterEstimateTestWrapper() : VCMJitterEstimator() {}
|
||||
double GetTheta() { return _theta[0]; }
|
||||
double GetVarNoise() { return _varNoise; }
|
||||
};
|
||||
|
||||
class FrameSample
|
||||
{
|
||||
public:
|
||||
FrameSample() {FrameSample(0, 0, 0, false, false);}
|
||||
FrameSample(unsigned int ts, WebRtc_Word64 wallClk, unsigned int fs, bool _keyFrame, bool _resent):
|
||||
timestamp90Khz(ts), wallClockMs(wallClk), frameSize(fs), keyFrame(_keyFrame), resent(_resent) {}
|
||||
|
||||
unsigned int timestamp90Khz;
|
||||
WebRtc_Word64 wallClockMs;
|
||||
unsigned int frameSize;
|
||||
bool keyFrame;
|
||||
bool resent;
|
||||
};
|
||||
|
||||
class JitterEstimateTest
|
||||
{
|
||||
public:
|
||||
JitterEstimateTest(unsigned int frameRate);
|
||||
FrameSample GenerateFrameSample();
|
||||
void SetCapacity(unsigned int c);
|
||||
void SetRate(unsigned int r);
|
||||
void SetJitter(double m, double v);
|
||||
void SetFrameSizeStats(double m, double v);
|
||||
void SetKeyFrameRate(int rate);
|
||||
void SetLossRate(double rate);
|
||||
|
||||
private:
|
||||
double RandUniform() { return (std::rand() + 1.0)/(RAND_MAX + 1.0); }
|
||||
unsigned int _frameRate;
|
||||
unsigned int _capacity;
|
||||
unsigned int _rate;
|
||||
GaussDist _jitter;
|
||||
//GaussDist _noResend;
|
||||
GaussDist _deltaFrameSize;
|
||||
unsigned int _prevTimestamp;
|
||||
WebRtc_Word64 _prevWallClock;
|
||||
unsigned int _nextDelay;
|
||||
double _keyFrameRate;
|
||||
unsigned int _counter;
|
||||
unsigned int _seed;
|
||||
double _lossrate;
|
||||
};
|
||||
|
||||
#endif // WEBRTC_MODULES_VIDEO_CODING_TEST_JITTER_ESTIMATE_TEST_H_
|
||||
Reference in New Issue
Block a user