summaryrefslogtreecommitdiffstats
path: root/debian/transcode/transcode-1.1.7/libtc/tctimer.h
diff options
context:
space:
mode:
Diffstat (limited to 'debian/transcode/transcode-1.1.7/libtc/tctimer.h')
-rw-r--r--debian/transcode/transcode-1.1.7/libtc/tctimer.h154
1 files changed, 154 insertions, 0 deletions
diff --git a/debian/transcode/transcode-1.1.7/libtc/tctimer.h b/debian/transcode/transcode-1.1.7/libtc/tctimer.h
new file mode 100644
index 00000000..ee6aecbd
--- /dev/null
+++ b/debian/transcode/transcode-1.1.7/libtc/tctimer.h
@@ -0,0 +1,154 @@
+/*
+ * tctimer.h -- simple timer code for transcode.
+ * (C) 2006-2010 - Francesco Romani <fromani -at- gmail -dot- com>
+ *
+ * This file is part of transcode, a video stream processing tool.
+ *
+ * transcode 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.
+ *
+ * transcode 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, see <http://www.gnu.org/licenses/>.
+ */
+
+
+#ifndef TCTIMER_H
+#define TCTIMER_H
+
+#include "config.h"
+
+#include <stdint.h>
+
+
+
+typedef union tctimestamp_ TCTimestamp;
+union tctimestamp_ {
+ uint64_t u;
+ double d;
+};
+
+
+/*
+ * Quick Summary:
+ *
+ * At time of writing, {import,demultiplex}_x11 is the only
+ * piece of transcode that uses timers.
+ * I've chosen to factorize such code and put here on libtc
+ * in order to make it more visible and to promote reviews.
+ *
+ * This code may look overengineered, I'd like to make it generic
+ * in order to easily introduce further, platform-specific, timing
+ * support (i.e. Linux RTC). They aren't yet ready since the overall
+ * X11 source support is still on work. More will follow soon.
+ *
+ */
+
+/*
+ * Time unit used: microseconds (1e-6)
+ * It's EXPECTED that client code requires a timing resolution at least
+ * one order of magnitude LESS precise than internal resolution, I.e.
+ * milliseconds.
+ */
+
+
+/*
+ * tc_gettime:
+ * return the current time using the best avalaible time source.
+ *
+ * Parameters:
+ * None.
+ * Return Value:
+ * time units elapsed since EPOCH.
+ */
+uint64_t tc_gettime(void);
+
+/*************************************************************************/
+
+
+typedef struct tctimer_ TCTimer;
+struct tctimer_ {
+ uint64_t last_time;
+ /* timestamp of last timer reading */
+
+ int (*fini)(TCTimer *timer);
+ uint64_t (*elapsed)(TCTimer *timer);
+ int (*sleep)(TCTimer *timer, uint64_t amount);
+};
+
+int tc_timer_init_soft(TCTimer *timer, uint16_t frequency);
+
+/*
+ * tc_timer_fini:
+ * finalize given timer by freeing all resources acquired.
+ *
+ * Parameters:
+ * timer: timer to finalize.
+ * Return Value:
+ * 0 : succesfull.
+ * -1: error.
+ */
+#ifdef HAVE_GCC_ATTRIBUTES
+__attribute__((unused))
+#endif
+static int tc_timer_fini(TCTimer *timer)
+{
+ return timer->fini(timer);
+}
+
+/*
+ * tc_timer_elapsed:
+ * read timer status and get the amount of time units
+ * elapsed *SINCE LAST READ*.
+ * First read automagically delivers right results,
+ * so client code hasn't to worry about this.
+ *
+ * Parameters:
+ * timer: timer to read.
+ * Return Value:
+ * time units elapsed since last reading.
+ * Side Effects:
+ * Update internal timestamp.
+ */
+#ifdef HAVE_GCC_ATTRIBUTES
+__attribute__((unused))
+#endif
+static uint64_t tc_timer_elapsed(TCTimer *timer)
+{
+ return timer->elapsed(timer);
+}
+
+/*
+ * tc_timer_sleep:
+ * blocks caller (thread) for given amount of time units.
+ *
+ * *PLEASE NOTE*
+ * that this function CAN'T guarantee STRICT observancy of
+ * sleeping time. It is very likely that blocking time is
+ * different (usually greater) than wanted.
+ * Providing more guarantees involve deeper interaction with
+ * host OS that is out of the scope of this code, yet.
+ *
+ * Parameters:
+ * timer: timer to use.
+ * amount: (try to) block caller for this amount of time units.
+ * Return Value:
+ * 0: succesfully. Blocked for given amount of time units
+ * (see note above)
+ * -1: failed: an error has caused premature return.
+ */
+#ifdef HAVE_GCC_ATTRIBUTES
+__attribute__((unused))
+#endif
+static int tc_timer_sleep(TCTimer *timer, uint64_t amount)
+{
+ return timer->sleep(timer, amount);
+}
+
+#endif /* TCTIMER_H */