Mercurial > libavformat.hg
comparison 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 |
comparison
equal
deleted
inserted
replaced
4651:2f6e99161450 | 4652:28b80bbf6288 |
---|---|
32 double feedback2_factor; | 32 double feedback2_factor; |
33 double feedback3_factor; | 33 double feedback3_factor; |
34 double integrator2_state; | 34 double integrator2_state; |
35 }; | 35 }; |
36 | 36 |
37 TimeFilter * ff_timefilter_new(double period, double feedback2_factor, double feedback3_factor) | 37 TimeFilter * ff_timefilter_new(double feedback2_factor, double feedback3_factor) |
38 { | 38 { |
39 TimeFilter *self = av_mallocz(sizeof(TimeFilter)); | 39 TimeFilter *self = av_mallocz(sizeof(TimeFilter)); |
40 self->integrator2_state = period; | 40 self->integrator2_state = 1.0; |
41 self->feedback2_factor = feedback2_factor; | 41 self->feedback2_factor = feedback2_factor; |
42 self->feedback3_factor = feedback3_factor; | 42 self->feedback3_factor = feedback3_factor; |
43 return self; | 43 return self; |
44 } | 44 } |
45 | 45 |
51 void ff_timefilter_reset(TimeFilter *self) | 51 void ff_timefilter_reset(TimeFilter *self) |
52 { | 52 { |
53 self->cycle_time = 0; | 53 self->cycle_time = 0; |
54 } | 54 } |
55 | 55 |
56 void ff_timefilter_update(TimeFilter *self, double system_time) | 56 void ff_timefilter_update(TimeFilter *self, double system_time, double period) |
57 { | 57 { |
58 if (!self->cycle_time) { | 58 if (!self->cycle_time) { |
59 /// init loop | 59 /// init loop |
60 self->cycle_time = system_time; | 60 self->cycle_time = system_time; |
61 } else { | 61 } else { |
62 double loop_error; | 62 double loop_error; |
63 self->cycle_time+= self->integrator2_state; | 63 self->cycle_time+= self->integrator2_state * period; |
64 /// calculate loop error | 64 /// calculate loop error |
65 loop_error = system_time - self->cycle_time; | 65 loop_error = system_time - self->cycle_time; |
66 | 66 |
67 /// update loop | 67 /// update loop |
68 self->cycle_time += self->feedback2_factor * loop_error; | 68 self->cycle_time += self->feedback2_factor * loop_error; |
69 self->integrator2_state += self->feedback3_factor * loop_error; | 69 self->integrator2_state += self->feedback3_factor * loop_error / period; |
70 } | 70 } |
71 } | 71 } |
72 | 72 |
73 double ff_timefilter_read(TimeFilter *self) | 73 double ff_timefilter_read(TimeFilter *self) |
74 { | 74 { |