/*
* Delay Locked Loop based time filter prototypes and declarations
* Copyright (c) 2009 Samalyse
+ * Copyright (c) 2009 Michael Niedermayer
* Author: Olivier Guilyardi <olivier samalyse com>
+ * Michael Niedermayer <michaelni gmx at>
*
* This file is part of FFmpeg.
*
/**
* Create a new Delay Locked Loop time filter
*
- * period is the device cycle duration in seconds. For example, at
- * 44.1Hz and a buffer size of 512 frames, period = 512 / 44100. The filter
- * only works if the cycle duration is fixed.
- *
* feedback2_factor and feedback3_factor are the factors used for the
* multiplications that are respectively performed in the second and third
* feedback paths of the loop.
* of the jitter, but also take a longer time for the loop to settle. A good
* starting point is something between 0.3 and 3 Hz.
*
+ * @param clock_period period of the hardware clock in seconds
+ * (for example 1.0/44100)
+ *
* For more details about these parameters and background concepts please see:
* http://www.kokkinizita.net/papers/usingdll.pdf
*/
-TimeFilter * ff_timefilter_new(double period, double feedback2_factor, double feedback3_factor);
+TimeFilter * ff_timefilter_new(double clock_period, double feedback2_factor, double feedback3_factor);
/**
* Update the filter
*
* This function must be called in real time, at each process cycle.
*
+ * @param period the device cycle duration in clock_periods. For example, at
+ * 44.1kHz and a buffer size of 512 frames, period = 512 when clock_period
+ * was 1.0/44100, or 512/44100 if clock_period was 1.
+ *
* system_time, in seconds, should be the value of the system clock time,
* at (or as close as possible to) the moment the device hardware interrupt
* occured (or any other event the device clock raises at the beginning of a
* cycle).
- */
-void ff_timefilter_update(TimeFilter *self, double system_time);
-
-/**
- * Retrieve the filtered time
- *
- * The returned value represents the filtered time, in seconds, of the
- * beginning of the current cycle as updated by the last call to
- * ff_timefilter_update()
- *
- * This is the value that should be used for timestamping.
*
- * Warning: you must call ff_timefilter_update() before this, otherwise the
- * result is undetermined.
+ * @return the filtered time, in seconds
*/
-double ff_timefilter_read(TimeFilter *);
+double ff_timefilter_update(TimeFilter *self, double system_time, double period);
/**
* Reset the filter