JackFrameTimer.h

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 General Public License as published by
00007 the Free Software Foundation; either version 2 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 General Public License for more details.
00014 
00015 You should have received a copy of the GNU General Public License
00016 along with this program; if not, write to the Free Software
00017 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
00018 
00019 */
00020 
00021 #ifndef __JackFrameTimer__
00022 #define __JackFrameTimer__
00023 
00024 #include "JackAtomicState.h"
00025 #include "types.h"
00026 
00027 namespace Jack
00028 {
00029 
00034 struct JackTimer
00035 {
00036     jack_nframes_t fFrames;
00037     jack_time_t fCurrentWakeup;
00038     jack_time_t fCurrentCallback;
00039     jack_time_t fNextWakeUp;
00040     float fSecondOrderIntegrator;
00041     bool fInitialized;
00042 
00043     /* not accessed by clients */
00044 
00045     float fFilterCoefficient;   /* set once, never altered */
00046 
00047     JackTimer();
00048     ~JackTimer()
00049     {}
00050         
00051 };
00052 
00057 class JackFrameTimer : public JackAtomicState<JackTimer>
00058 {
00059     private:
00060 
00061         bool fFirstWakeUp;
00062         void IncFrameTimeAux(jack_nframes_t nframes, jack_time_t callback_usecs, jack_time_t period_usecs);
00063                 void InitFrameTimeAux(jack_time_t callback_usecs, jack_time_t period_usecs);
00064 
00065     public:
00066 
00067         JackFrameTimer(): fFirstWakeUp(true)
00068         {}
00069         ~JackFrameTimer()
00070         {}
00071 
00072         void InitFrameTime();
00073         void ResetFrameTime(jack_nframes_t frames_rate, jack_time_t callback_usecs, jack_time_t period_usecs);
00074         void IncFrameTime(jack_nframes_t nframes, jack_time_t callback_usecs, jack_time_t period_usecs);
00075         void ReadFrameTime(JackTimer* timer);
00076 };
00077 
00078 
00079 } // end of namespace
00080 
00081 #endif

Generated on Thu Feb 14 11:16:01 2008 for Jackdmp by  doxygen 1.5.1