summaryrefslogtreecommitdiff
path: root/common/JackFrameTimer.h
diff options
context:
space:
mode:
Diffstat (limited to 'common/JackFrameTimer.h')
-rw-r--r--common/JackFrameTimer.h81
1 files changed, 81 insertions, 0 deletions
diff --git a/common/JackFrameTimer.h b/common/JackFrameTimer.h
new file mode 100644
index 00000000..552bc11e
--- /dev/null
+++ b/common/JackFrameTimer.h
@@ -0,0 +1,81 @@
+/*
+Copyright (C) 2001 Paul Davis
+Copyright (C) 2004-2006 Grame
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#ifndef __JackFrameTimer__
+#define __JackFrameTimer__
+
+#include "JackAtomicState.h"
+#include "types.h"
+
+namespace Jack
+{
+
+/*!
+\brief A structure used for time management.
+*/
+
+struct JackTimer
+{
+ jack_nframes_t fFrames;
+ jack_time_t fCurrentWakeup;
+ jack_time_t fCurrentCallback;
+ jack_time_t fNextWakeUp;
+ float fSecondOrderIntegrator;
+ bool fInitialized;
+
+ /* not accessed by clients */
+
+ float fFilterCoefficient; /* set once, never altered */
+
+ JackTimer();
+ ~JackTimer()
+ {}
+
+};
+
+/*!
+\brief A class using the JackAtomicState to manage jack time.
+*/
+
+class JackFrameTimer : public JackAtomicState<JackTimer>
+{
+ private:
+
+ bool fFirstWakeUp;
+ void IncFrameTimeAux(jack_nframes_t nframes, jack_time_t callback_usecs, jack_time_t period_usecs);
+
+ public:
+
+ JackFrameTimer(): fFirstWakeUp(true)
+ {}
+ ~JackFrameTimer()
+ {}
+
+ void Init();
+ void InitFrameTime(jack_time_t callback_usecs, jack_time_t period_usecs);
+ void ResetFrameTime(jack_nframes_t frames_rate, jack_time_t callback_usecs, jack_time_t period_usecs);
+ void IncFrameTime(jack_nframes_t nframes, jack_time_t callback_usecs, jack_time_t period_usecs);
+ void ReadFrameTime(JackTimer* timer);
+};
+
+
+} // end of namespace
+
+#endif