00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef __JackFrameTimer__
00022 #define __JackFrameTimer__
00023
00024 #include "JackAtomicState.h"
00025 #include "JackCompilerDeps.h"
00026 #include "types.h"
00027
00028 namespace Jack
00029 {
00030
00035 class SERVER_EXPORT JackTimer
00036 {
00037
00038 friend class JackFrameTimer;
00039
00040 private:
00041
00042 jack_nframes_t fFrames;
00043 jack_time_t fCurrentWakeup;
00044 jack_time_t fCurrentCallback;
00045 jack_time_t fNextWakeUp;
00046 float fSecondOrderIntegrator;
00047 bool fInitialized;
00048 float fFilterCoefficient;
00049
00050 public:
00051
00052 JackTimer();
00053 ~JackTimer()
00054 {}
00055
00056 jack_nframes_t Time2Frames(jack_time_t time, jack_nframes_t buffer_size);
00057 jack_time_t Frames2Time(jack_nframes_t frames, jack_nframes_t buffer_size);
00058 jack_nframes_t FramesSinceCycleStart(jack_time_t cur_time, jack_nframes_t frames_rate);
00059
00060 jack_nframes_t CurFrame()
00061 {
00062 return fFrames;
00063 }
00064
00065 jack_time_t CurTime()
00066 {
00067 return fCurrentWakeup;
00068 }
00069
00070 };
00071
00076 class JackFrameTimer : public JackAtomicState<JackTimer>
00077 {
00078
00079 private:
00080
00081 bool fFirstWakeUp;
00082 void IncFrameTimeAux(jack_nframes_t buffer_size, jack_time_t callback_usecs, jack_time_t period_usecs);
00083 void InitFrameTimeAux(jack_time_t callback_usecs, jack_time_t period_usecs);
00084
00085 public:
00086
00087 JackFrameTimer(): fFirstWakeUp(true)
00088 {}
00089 ~JackFrameTimer()
00090 {}
00091
00092 void InitFrameTime();
00093 void ResetFrameTime(jack_nframes_t frames_rate, jack_time_t callback_usecs, jack_time_t period_usecs);
00094 void IncFrameTime(jack_nframes_t buffer_size, jack_time_t callback_usecs, jack_time_t period_usecs);
00095 void ReadFrameTime(JackTimer* timer);
00096 };
00097
00098
00099 }
00100
00101 #endif