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 fPeriodUsecs;
00048 float fFilterOmega;
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 int GetCycleTimes(jack_nframes_t* current_frames, jack_time_t* current_usecs, jack_time_t* next_usecs, float* period_usecs);
00061
00062 jack_nframes_t CurFrame()
00063 {
00064 return fFrames;
00065 }
00066
00067 jack_time_t CurTime()
00068 {
00069 return fCurrentWakeup;
00070 }
00071
00072 } POST_PACKED_STRUCTURE;
00073
00078 PRE_PACKED_STRUCTURE
00079 class SERVER_EXPORT JackFrameTimer : public JackAtomicState<JackTimer>
00080 {
00081
00082 private:
00083
00084 bool fFirstWakeUp;
00085 void IncFrameTimeAux(jack_nframes_t buffer_size, jack_time_t callback_usecs, jack_time_t period_usecs);
00086 void InitFrameTimeAux(jack_time_t callback_usecs, jack_time_t period_usecs);
00087
00088 public:
00089
00090 JackFrameTimer(): fFirstWakeUp(true)
00091 {}
00092 ~JackFrameTimer()
00093 {}
00094
00095 void InitFrameTime();
00096 void ResetFrameTime(jack_time_t callback_usecs);
00097 void IncFrameTime(jack_nframes_t buffer_size, jack_time_t callback_usecs, jack_time_t period_usecs);
00098 void ReadFrameTime(JackTimer* timer);
00099
00100 } POST_PACKED_STRUCTURE;
00101
00102
00103 }
00104
00105 #endif