Browse code

Adapt first factor.

Originally committed as revision 17842 to svn://svn.ffmpeg.org/ffmpeg/trunk

Michael Niedermayer authored on 2009/03/06 09:20:55
Showing 1 changed files
... ...
@@ -32,6 +32,7 @@ struct TimeFilter {
32 32
     double feedback2_factor;
33 33
     double feedback3_factor;
34 34
     double integrator2_state;
35
+    int count;
35 36
 };
36 37
 
37 38
 TimeFilter * ff_timefilter_new(double feedback2_factor, double feedback3_factor)
... ...
@@ -51,10 +52,12 @@ void ff_timefilter_destroy(TimeFilter *self)
51 51
 void ff_timefilter_reset(TimeFilter *self)
52 52
 {
53 53
     self->cycle_time = 0;
54
+    self->count      = 0;
54 55
 }
55 56
 
56 57
 double ff_timefilter_update(TimeFilter *self, double system_time, double period)
57 58
 {
59
+    self->count++;
58 60
     if (!self->cycle_time) {
59 61
         /// init loop
60 62
         self->cycle_time        = system_time;
... ...
@@ -65,7 +68,7 @@ double ff_timefilter_update(TimeFilter *self, double system_time, double period)
65 65
         loop_error = system_time - self->cycle_time;
66 66
 
67 67
         /// update loop
68
-        self->cycle_time        += self->feedback2_factor * loop_error;
68
+        self->cycle_time        += FFMAX(self->feedback2_factor, 1.0/(self->count)) * loop_error;
69 69
         self->integrator2_state += self->feedback3_factor * loop_error / period;
70 70
     }
71 71
     return self->cycle_time;