43 return 1 - 1 / (1 + x * (1 + x / 2 * (1 + x / 3)));
51 double o = 2 *
M_PI * bandwidth * period * time_base;
56 self->clock_period = time_base;
58 self->feedback3_factor =
qexpneg(o * o) / period;
75 if (self->count == 1) {
76 self->cycle_time = system_time;
79 self->cycle_time +=
self->clock_period * period;
80 loop_error = system_time -
self->cycle_time;
82 self->cycle_time +=
FFMAX(self->feedback2_factor, 1.0 / self->count) * loop_error;
83 self->clock_period +=
self->feedback3_factor * loop_error;
85 return self->cycle_time;
90 return self->cycle_time +
self->clock_period *
delta;
void ff_timefilter_destroy(TimeFilter *self)
Free all resources associated with the filter.
memory handling functions
void ff_timefilter_reset(TimeFilter *self)
Reset the filter.
double ff_timefilter_eval(TimeFilter *self, double delta)
Evaluate the filter at a specified time.
Opaque type representing a time filter state.
static double qexpneg(double x)
TimeFilter * ff_timefilter_new(double time_base, double period, double bandwidth)
Create a new Delay Locked Loop time filter.
double ff_timefilter_update(TimeFilter *self, double system_time, double period)
Update the filter.
common internal and external API header
void * av_mallocz(size_t size)
Allocate a block of size bytes with alignment suitable for all memory accesses (including vectors if ...