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;
     }
 }