3 using namespace Dasher
;
5 CFrameRate::CFrameRate(CSettingsUser
*pCreator
) :
6 CSettingsUserObserver(pCreator
) {
8 //Sampling parameters...
13 //try and carry on from where we left off at last run
14 HandleEvent(LP_X_LIMIT_SPEED
);
15 //Sets m_dBitsAtLimX and m_iSteps
18 void CFrameRate::RecordFrame(unsigned long Time
)
22 // Update values once enough samples have been collected
23 if(m_iFrames
== m_iSamples
) {
24 unsigned long m_iTime2
= Time
;
26 // If samples are collected in < 50ms, collect more
27 if(m_iTime2
- m_iTime
< 50)
29 // And if it's taking longer than > 80ms, collect fewer, down to a
31 else if(m_iTime2
- m_iTime
> 80) {
37 // Calculate the framerate and reset framerate statistics for next
39 if(m_iTime2
- m_iTime
> 0) {
40 double dFrNow
= m_iFrames
* 1000.0 / (m_iTime2
- m_iTime
);
41 //LP_FRAMERATE records a decaying average, smoothed 50:50 with previous value
42 SetLongParameter(LP_FRAMERATE
, long(GetLongParameter(LP_FRAMERATE
) + (dFrNow
*100))/2);
46 DASHER_TRACEOUTPUT("Fr %f Steps %d Samples %d Time2 %d\n", dFrNow
, m_iSteps
, m_iSamples
, m_iTime2
);
53 void CFrameRate::HandleEvent(int iParameter
) {
55 case LP_X_LIMIT_SPEED
:
56 m_dBitsAtLimX
= (log(static_cast<double>(CDasherModel::MAX_Y
)) - log (2.*GetLongParameter(LP_X_LIMIT_SPEED
)))/log(2.);
60 //Calculate m_iSteps from the decaying-average framerate, as the number
61 // of steps that, at the X limit, will cause LP_MAX_BITRATE bits to be
63 m_iSteps
= std::max(1,(int)(GetLongParameter(LP_FRAMERATE
)*m_dBitsAtLimX
/GetLongParameter(LP_MAX_BITRATE
)));