Go to the source code of this file.
Typedefs | |
typedef struct TimeFilter | TimeFilter |
Opaque type representing a time filter state. | |
Functions | |
TimeFilter * | ff_timefilter_new (double clock_period, double feedback2_factor, double feedback3_factor) |
Create a new Delay Locked Loop time filter. | |
double | ff_timefilter_update (TimeFilter *self, double system_time, double period) |
Update the filter. | |
void | ff_timefilter_reset (TimeFilter *) |
Reset the filter. | |
void | ff_timefilter_destroy (TimeFilter *) |
Free all resources associated with the filter. |
typedef struct TimeFilter TimeFilter |
Opaque type representing a time filter state.
The purpose of this filter is to provide a way to compute accurate time stamps that can be compared to wall clock time, especially when dealing with two clocks: the system clock and a hardware device clock, such as a soundcard.
Definition at line 36 of file timefilter.h.
void ff_timefilter_destroy | ( | TimeFilter * | ) |
Free all resources associated with the filter.
Definition at line 49 of file timefilter.c.
Referenced by stop_jack().
TimeFilter* ff_timefilter_new | ( | double | clock_period, | |
double | feedback2_factor, | |||
double | feedback3_factor | |||
) |
Create a new Delay Locked Loop time filter.
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.
Unless you know what you are doing, you should set these as follow:
o = 2 * M_PI * bandwidth * period feedback2_factor = sqrt(2 * o) feedback3_factor = o * o
Where bandwidth is up to you to choose. Smaller values will filter out more 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.
clock_period | period of the hardware clock in seconds (for example 1.0/44100) |
Definition at line 40 of file timefilter.c.
Referenced by start_jack().
void ff_timefilter_reset | ( | TimeFilter * | ) |
Reset the filter.
This function should mainly be called in case of XRUN.
Warning: after calling this, the filter is in an undetermined state until the next call to ff_timefilter_update()
Definition at line 54 of file timefilter.c.
Referenced by xrun_callback().
double ff_timefilter_update | ( | TimeFilter * | self, | |
double | system_time, | |||
double | period | |||
) |
Update the filter.
This function must be called in real time, at each process cycle.
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. |
init loop
calculate loop error
update loop
Definition at line 59 of file timefilter.c.
Referenced by process_callback().