Originally committed as revision 17842 to svn://svn.ffmpeg.org/ffmpeg/trunk
| ... | ... |
@@ -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; |