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 PRE_PACKED_STRUCTURE
00036 class SERVER_EXPORT JackTimer
00037 {
00038
00039 friend class JackFrameTimer;
00040
00041 private:
00042
00043 jack_nframes_t fFrames;
00044 jack_time_t fCurrentWakeup;
00045 jack_time_t fCurrentCallback;
00046 jack_time_t fNextWakeUp;
00047 float fSecondOrderIntegrator;
00048 float fFilterCoefficient;
00049 bool fInitialized;
00050
00051 public:
00052
00053 JackTimer();
00054 ~JackTimer()
00055 {}
00056
00057 jack_nframes_t Time2Frames(jack_time_t time, jack_nframes_t buffer_size);
00058 jack_time_t Frames2Time(jack_nframes_t frames, jack_nframes_t buffer_size);
00059 jack_nframes_t FramesSinceCycleStart(jack_time_t cur_time, jack_nframes_t frames_rate);
00060
00061 jack_nframes_t CurFrame()
00062 {
00063 return fFrames;
00064 }
00065
00066 jack_time_t CurTime()
00067 {
00068 return fCurrentWakeup;
00069 }
00070
00071 } POST_PACKED_STRUCTURE;
00072
00077 PRE_PACKED_STRUCTURE
00078 class SERVER_EXPORT JackFrameTimer : public JackAtomicState<JackTimer>
00079 {
00080
00081 private:
00082
00083 bool fFirstWakeUp;
00084 void IncFrameTimeAux(jack_nframes_t buffer_size, jack_time_t callback_usecs, jack_time_t period_usecs);
00085 void InitFrameTimeAux(jack_time_t callback_usecs, jack_time_t period_usecs);
00086
00087 public:
00088
00089 JackFrameTimer(): fFirstWakeUp(true)
00090 {}
00091 ~JackFrameTimer()
00092 {}
00093
00094 void InitFrameTime();
00095 void ResetFrameTime(jack_nframes_t frames_rate, jack_time_t callback_usecs, jack_time_t period_usecs);
00096 void IncFrameTime(jack_nframes_t buffer_size, jack_time_t callback_usecs, jack_time_t period_usecs);
00097 void ReadFrameTime(JackTimer* timer);
00098
00099 } POST_PACKED_STRUCTURE;
00100
00101
00102 }
00103
00104 #endif