summaryrefslogtreecommitdiff
path: root/libavformat
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2009-03-06 00:20:55 +0000
committerMichael Niedermayer <michaelni@gmx.at>2009-03-06 00:20:55 +0000
commit494065ca36c75e4c6d8eb1340770f5eff4ebafaf (patch)
tree6fa50ed34cb20411c428ca25cecf2aa8d89e4521 /libavformat
parent55b58598676d192d62ceb54a4be173ea22c0739e (diff)
Adapt first factor.
Originally committed as revision 17842 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavformat')
-rw-r--r--libavformat/timefilter.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/libavformat/timefilter.c b/libavformat/timefilter.c
index a90371f2c2..7109a0a27f 100644
--- a/libavformat/timefilter.c
+++ b/libavformat/timefilter.c
@@ -32,6 +32,7 @@ struct TimeFilter {
double feedback2_factor;
double feedback3_factor;
double integrator2_state;
+ int count;
};
TimeFilter * ff_timefilter_new(double feedback2_factor, double feedback3_factor)
@@ -51,10 +52,12 @@ void ff_timefilter_destroy(TimeFilter *self)
void ff_timefilter_reset(TimeFilter *self)
{
self->cycle_time = 0;
+ self->count = 0;
}
double ff_timefilter_update(TimeFilter *self, double system_time, double period)
{
+ self->count++;
if (!self->cycle_time) {
/// init loop
self->cycle_time = system_time;
@@ -65,7 +68,7 @@ double ff_timefilter_update(TimeFilter *self, double system_time, double period)
loop_error = system_time - self->cycle_time;
/// update loop
- self->cycle_time += self->feedback2_factor * loop_error;
+ self->cycle_time += FFMAX(self->feedback2_factor, 1.0/(self->count)) * loop_error;
self->integrator2_state += self->feedback3_factor * loop_error / period;
}
return self->cycle_time;