+ return p_date->date;
+}
+
+/**
+ * Decrement the date and return the result, taking into account
+ * rounding errors.
+ *
+ * \param date to decrement
+ * \param decrementation in number of samples
+ * \return date value
+ */
+mtime_t date_Decrement( date_t *p_date, uint32_t i_nb_samples )
+{
+ mtime_t i_dividend = (mtime_t)i_nb_samples * 1000000 * p_date->i_divider_den;
+ p_date->date -= i_dividend / p_date->i_divider_num;
+ unsigned i_rem_adjust = i_dividend % p_date->i_divider_num;
+
+ if( p_date->i_remainder < i_rem_adjust )
+ {
+ /* This is Bresenham algorithm. */
+ assert( p_date->i_remainder > -p_date->i_divider_num);
+ p_date->date -= 1;
+ p_date->i_remainder += p_date->i_divider_num;
+ }
+
+ p_date->i_remainder -= i_rem_adjust;
+
+ return p_date->date;
+}
+
+#ifndef HAVE_GETTIMEOFDAY
+
+#ifdef WIN32
+
+/*
+ * Number of micro-seconds between the beginning of the Windows epoch
+ * (Jan. 1, 1601) and the Unix epoch (Jan. 1, 1970).
+ *
+ * This assumes all Win32 compilers have 64-bit support.
+ */
+#if defined(_MSC_VER) || defined(_MSC_EXTENSIONS) || defined(__WATCOMC__)
+# define DELTA_EPOCH_IN_USEC 11644473600000000Ui64