Jack2 1.9.10
|
00001 /* 00002 Copyright (C) 2001 Paul Davis 00003 Copyright (C) 2004-2008 Grame 00004 00005 This program is free software; you can redistribute it and/or modify 00006 it under the terms of the GNU Lesser General Public License as published by 00007 the Free Software Foundation; either version 2.1 of the License, or 00008 (at your option) any later version. 00009 00010 This program is distributed in the hope that it will be useful, 00011 but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00013 GNU Lesser General Public License for more details. 00014 00015 You should have received a copy of the GNU Lesser General Public License 00016 along with this program; if not, write to the Free Software 00017 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 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; /* set once, never altered */ 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 } // end of namespace 00104 00105 #endif