Mercurial > libavformat.hg
diff timefilter.c @ 4652:28b80bbf6288 libavformat
Allow timespans to vary.
No change in performance if they do not vary.
| author | michael |
|---|---|
| date | Fri, 06 Mar 2009 00:09:14 +0000 |
| parents | 2f6e99161450 |
| children | 34a843f958b7 |
line wrap: on
line diff
--- a/timefilter.c Thu Mar 05 23:57:42 2009 +0000 +++ b/timefilter.c Fri Mar 06 00:09:14 2009 +0000 @@ -34,10 +34,10 @@ double integrator2_state; }; -TimeFilter * ff_timefilter_new(double period, double feedback2_factor, double feedback3_factor) +TimeFilter * ff_timefilter_new(double feedback2_factor, double feedback3_factor) { TimeFilter *self = av_mallocz(sizeof(TimeFilter)); - self->integrator2_state = period; + self->integrator2_state = 1.0; self->feedback2_factor = feedback2_factor; self->feedback3_factor = feedback3_factor; return self; @@ -53,20 +53,20 @@ self->cycle_time = 0; } -void ff_timefilter_update(TimeFilter *self, double system_time) +void ff_timefilter_update(TimeFilter *self, double system_time, double period) { if (!self->cycle_time) { /// init loop self->cycle_time = system_time; } else { double loop_error; - self->cycle_time+= self->integrator2_state; + self->cycle_time+= self->integrator2_state * period; /// calculate loop error loop_error = system_time - self->cycle_time; /// update loop self->cycle_time += self->feedback2_factor * loop_error; - self->integrator2_state += self->feedback3_factor * loop_error; + self->integrator2_state += self->feedback3_factor * loop_error / period; } }
