Mercurial > mplayer.hg
diff libaf/af_resample.c @ 14433:95bb94a930a3
always cancel down fractions (frac_t) to avoid overflows and playback
problems (e.g. when using resample and equalizer filters together, see
http://mplayerhq.hu/pipermail/mplayer-users/2004-December/050058.html)
author | reimar |
---|---|
date | Sat, 08 Jan 2005 21:34:06 +0000 |
parents | de13fd557440 |
children | 934380353fd6 |
line wrap: on
line diff
--- a/libaf/af_resample.c Sat Jan 08 21:06:04 2005 +0000 +++ b/libaf/af_resample.c Sat Jan 08 21:34:06 2005 +0000 @@ -62,22 +62,6 @@ int setup; // Setup parameters cmdline or through postcreate } af_resample_t; -// Euclids algorithm for calculating Greatest Common Divisor GCD(a,b) -static inline int gcd(register int a, register int b) -{ - register int r = min(a,b); - a=max(a,b); - b=r; - - r=a%b; - while(r!=0){ - a=b; - b=r; - r=a%b; - } - return b; -} - // Fast linear interpolation resample with modest audio quality static int linint(af_data_t* c,af_data_t* l, af_resample_t* s) { @@ -202,11 +186,12 @@ s->step); af->mul.n = af->data->rate; af->mul.d = n->rate; + af_frac_cancel(&af->mul); return rv; } // Calculate up and down sampling factors - d=gcd(af->data->rate,n->rate); + d=af_gcd(af->data->rate,n->rate); // If sloppy resampling is enabled limit the upsampling factor if(((s->setup & FREQ_MASK) == FREQ_SLOPPY) && (af->data->rate/d > 5000)){ @@ -214,7 +199,7 @@ int dn=n->rate/2; int m=2; while(af->data->rate/(d*m) > 5000){ - d=gcd(up,dn); + d=af_gcd(up,dn); up/=2; dn/=2; m*=2; } d*=m;