libavdevice/timefilter.c File Reference

#include "libavutil/common.h"
#include "libavutil/mem.h"
#include "config.h"
#include "timefilter.h"

Go to the source code of this file.

Data Structures

struct  TimeFilter

Functions

static double qexpneg (double x)
TimeFilterff_timefilter_new (double time_base, double period, double bandwidth)
 Create a new Delay Locked Loop time filter.
void ff_timefilter_destroy (TimeFilter *self)
 Free all resources associated with the filter.
void ff_timefilter_reset (TimeFilter *self)
 Reset the filter.
double ff_timefilter_update (TimeFilter *self, double system_time, double period)
 Update the filter.
double ff_timefilter_eval (TimeFilter *self, double delta)
 Evaluate the filter at a specified time.


Function Documentation

void ff_timefilter_destroy ( TimeFilter self  ) 

Free all resources associated with the filter.

Definition at line 58 of file timefilter.c.

Referenced by ff_alsa_close(), and stop_jack().

double ff_timefilter_eval ( TimeFilter self,
double  delta 
)

Evaluate the filter at a specified time.

Parameters:
delta difference between the requested time and the current time (last call to ff_timefilter_update).
Returns:
the filtered time

Definition at line 87 of file timefilter.c.

Referenced by convert_timestamp().

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_in_seconds 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.

Parameters:
time_base period of the hardware clock in seconds (for example 1.0/44100)
period expected update interval, in input units
brandwidth filtering bandwidth, in Hz
For more details about these parameters and background concepts please see: http://www.kokkinizita.net/papers/usingdll.pdf

Definition at line 46 of file timefilter.c.

Referenced by audio_read_header(), init_convert_timestamp(), and 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 63 of file timefilter.c.

Referenced by audio_read_packet(), and 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.

Parameters:
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 occurred (or any other event the device clock raises at the beginning of a cycle).

Returns:
the filtered time, in seconds

init loop

calculate loop error

update loop

Definition at line 68 of file timefilter.c.

Referenced by audio_read_packet(), convert_timestamp(), and process_callback().

static double qexpneg ( double  x  )  [static]

Definition at line 41 of file timefilter.c.

Referenced by ff_timefilter_new().


Generated on Fri Oct 26 02:50:09 2012 for FFmpeg by  doxygen 1.5.8