diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2012-02-11 01:22:22 +0100 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2012-02-11 01:22:22 +0100 |
commit | a78f6b8cb98611a846a68f4bbb77e78fd5c175bf (patch) | |
tree | 45d4339cefc60f61310bd23b8d7cf7d0bf1f88b6 /libavdevice | |
parent | 394d41ee30b0c4a38a8d33b65e28facfef15d465 (diff) | |
parent | f98ede7e610da644d3e5d553fc5d7102cf1ccde7 (diff) | |
download | ffmpeg-a78f6b8cb98611a846a68f4bbb77e78fd5c175bf.tar.gz |
Merge remote-tracking branch 'qatar/master'
* qatar/master: (38 commits)
v210enc: remove redundant check for pix_fmt
wavpack: allow user to disable CRC checking
v210enc: Use Bytestream2 functions
cafdec: Check return value of avio_seek and avoid modifying state if it fails
yop: Check return value of avio_seek and avoid modifying state if it fails
tta: Check return value of avio_seek and avoid modifying state if it fails
tmv: Check return value of avio_seek and avoid modifying state if it fails
r3d: Check return value of avio_seek and avoid modifying state if it fails
nsvdec: Check return value of avio_seek and avoid modifying state if it fails
mpc8: Check return value of avio_seek and avoid modifying state if it fails
jvdec: Check return value of avio_seek and avoid modifying state if it fails
filmstripdec: Check return value of avio_seek and avoid modifying state if it fails
ffmdec: Check return value of avio_seek and avoid modifying state if it fails
dv: Check return value of avio_seek and avoid modifying state if it fails
bink: Check return value of avio_seek and avoid modifying state if it fails
Check AVCodec.pix_fmts in avcodec_open2()
svq3: Prevent illegal reads while parsing extradata.
remove ParseContext1
vc1: use ff_parse_close
mpegvideo parser: move specific fields into private context
...
Conflicts:
libavcodec/4xm.c
libavcodec/aacdec.c
libavcodec/h264.c
libavcodec/h264.h
libavcodec/h264_cabac.c
libavcodec/h264_cavlc.c
libavcodec/mpeg4video_parser.c
libavcodec/svq3.c
libavcodec/v210enc.c
libavformat/cafdec.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavdevice')
-rw-r--r-- | libavdevice/timefilter.c | 94 |
1 files changed, 48 insertions, 46 deletions
diff --git a/libavdevice/timefilter.c b/libavdevice/timefilter.c index d0f49260db..ff6552f7d7 100644 --- a/libavdevice/timefilter.c +++ b/libavdevice/timefilter.c @@ -22,10 +22,9 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ - +#include "libavutil/mem.h" #include "config.h" #include "timefilter.h" -#include "libavutil/mem.h" struct TimeFilter { /// Delay Locked Loop data. These variables refer to mathematical @@ -37,12 +36,14 @@ struct TimeFilter { int count; }; -TimeFilter * ff_timefilter_new(double clock_period, double feedback2_factor, double feedback3_factor) +TimeFilter *ff_timefilter_new(double clock_period, + double feedback2_factor, + double feedback3_factor) { - TimeFilter *self = av_mallocz(sizeof(TimeFilter)); - self->clock_period = clock_period; - self->feedback2_factor = feedback2_factor; - self->feedback3_factor = feedback3_factor; + TimeFilter *self = av_mallocz(sizeof(TimeFilter)); + self->clock_period = clock_period; + self->feedback2_factor = feedback2_factor; + self->feedback3_factor = feedback3_factor; return self; } @@ -53,20 +54,20 @@ void ff_timefilter_destroy(TimeFilter *self) void ff_timefilter_reset(TimeFilter *self) { - self->count = 0; + self->count = 0; } double ff_timefilter_update(TimeFilter *self, double system_time, double period) { self->count++; - if (self->count==1) { + if (self->count == 1) { /// init loop - self->cycle_time = system_time; + self->cycle_time = system_time; } else { double loop_error; - self->cycle_time += self->clock_period * period; + self->cycle_time += self->clock_period * period; /// calculate loop error - loop_error = system_time - self->cycle_time; + loop_error = system_time - self->cycle_time; /// update loop self->cycle_time += FFMAX(self->feedback2_factor, 1.0 / self->count) * loop_error; @@ -84,60 +85,61 @@ double ff_timefilter_update(TimeFilter *self, double system_time, double period) int main(void) { AVLFG prng; - double n0,n1; + double n0, n1; #define SAMPLES 1000 double ideal[SAMPLES]; double samples[SAMPLES]; #if 1 - for(n0= 0; n0<40; n0=2*n0+1){ - for(n1= 0; n1<10; n1=2*n1+1){ + for (n0 = 0; n0 < 40; n0 = 2 * n0 + 1) { + for (n1 = 0; n1 < 10; n1 = 2 * n1 + 1) { #else - {{ - n0=7; - n1=1; + { + { + n0 = 7; + n1 = 1; #endif - double best_error= 1000000000; - double bestpar0=1; - double bestpar1=0.001; + double best_error = 1000000000; + double bestpar0 = 1; + double bestpar1 = 0.001; int better, i; av_lfg_init(&prng, 123); - for(i=0; i<SAMPLES; i++){ - ideal[i] = 10 + i + n1*i/(1000); - samples[i] = ideal[i] + n0 * (av_lfg_get(&prng) - LFG_MAX / 2) - / (LFG_MAX * 10LL); + for (i = 0; i < SAMPLES; i++) { + ideal[i] = 10 + i + n1 * i / (1000); + samples[i] = ideal[i] + n0 * (av_lfg_get(&prng) - LFG_MAX / 2) / (LFG_MAX * 10LL); } - do{ + do { double par0, par1; - better=0; - for(par0= bestpar0*0.8; par0<=bestpar0*1.21; par0+=bestpar0*0.05){ - for(par1= bestpar1*0.8; par1<=bestpar1*1.21; par1+=bestpar1*0.05){ - double error=0; - TimeFilter *tf= ff_timefilter_new(1, par0, par1); - for(i=0; i<SAMPLES; i++){ + better = 0; + for (par0 = bestpar0 * 0.8; par0 <= bestpar0 * 1.21; par0 += bestpar0 * 0.05) { + for (par1 = bestpar1 * 0.8; par1 <= bestpar1 * 1.21; par1 += bestpar1 * 0.05) { + double error = 0; + TimeFilter *tf = ff_timefilter_new(1, par0, par1); + for (i = 0; i < SAMPLES; i++) { double filtered; - filtered= ff_timefilter_update(tf, samples[i], 1); - error += (filtered - ideal[i]) * (filtered - ideal[i]); + filtered = ff_timefilter_update(tf, samples[i], 1); + error += (filtered - ideal[i]) * (filtered - ideal[i]); } ff_timefilter_destroy(tf); - if(error < best_error){ - best_error= error; - bestpar0= par0; - bestpar1= par1; - better=1; + if (error < best_error) { + best_error = error; + bestpar0 = par0; + bestpar1 = par1; + better = 1; } } } - }while(better); + } while (better); #if 0 - double lastfil=9; - TimeFilter *tf= ff_timefilter_new(1, bestpar0, bestpar1); - for(i=0; i<SAMPLES; i++){ + double lastfil = 9; + TimeFilter *tf = ff_timefilter_new(1, bestpar0, bestpar1); + for (i = 0; i < SAMPLES; i++) { double filtered; - filtered= ff_timefilter_update(tf, samples[i], 1); - printf("%f %f %f %f\n", i - samples[i] + 10, filtered - samples[i], samples[FFMAX(i, 1)] - samples[FFMAX(i-1, 0)], filtered - lastfil); - lastfil= filtered; + filtered = ff_timefilter_update(tf, samples[i], 1); + printf("%f %f %f %f\n", i - samples[i] + 10, filtered - samples[i], + samples[FFMAX(i, 1)] - samples[FFMAX(i - 1, 0)], filtered - lastfil); + lastfil = filtered; } ff_timefilter_destroy(tf); #else |