Mercurial > mplayer.hg
changeset 26350:07abe94a9cc4
Fix illegal identifier: Rename _ftype_t macro to FLOAT_TYPE.
author | diego |
---|---|
date | Thu, 10 Apr 2008 10:01:54 +0000 |
parents | 971eca6fdcc8 |
children | bc5a23b6ca2d |
files | libaf/dsp.h libaf/filter.c libaf/filter.h libaf/window.c libaf/window.h |
diffstat | 5 files changed, 93 insertions(+), 74 deletions(-) [+] |
line wrap: on
line diff
--- a/libaf/dsp.h Wed Apr 09 21:49:27 2008 +0000 +++ b/libaf/dsp.h Thu Apr 10 10:01:54 2008 +0000 @@ -14,7 +14,7 @@ /* Implementation of routines used for DSP */ /* Size of floating point type used in routines */ -#define _ftype_t float +#define FLOAT_TYPE float #include "window.h" #include "filter.h"
--- a/libaf/filter.c Wed Apr 09 21:49:27 2008 +0000 +++ b/libaf/filter.c Thu Apr 10 10:01:54 2008 +0000 @@ -25,9 +25,10 @@ w filter taps x input signal must be a circular buffer which is indexed backwards */ -inline _ftype_t af_filter_fir(register unsigned int n, _ftype_t* w, _ftype_t* x) +inline FLOAT_TYPE af_filter_fir(register unsigned int n, FLOAT_TYPE* w, + FLOAT_TYPE* x) { - register _ftype_t y; // Output + register FLOAT_TYPE y; // Output y = 0.0; do{ n--; @@ -46,10 +47,12 @@ y output buffer s output buffer stride */ -_ftype_t* af_filter_pfir(unsigned int n, unsigned int d, unsigned int xi, _ftype_t** w, _ftype_t** x, _ftype_t* y, unsigned int s) +FLOAT_TYPE* af_filter_pfir(unsigned int n, unsigned int d, unsigned int xi, + FLOAT_TYPE** w, FLOAT_TYPE** x, FLOAT_TYPE* y, + unsigned int s) { - register _ftype_t* xt = *x + xi; - register _ftype_t* wt = *w; + register FLOAT_TYPE* xt = *x + xi; + register FLOAT_TYPE* wt = *w; register int nt = 2*n; while(d-- > 0){ *y = af_filter_fir(n,wt,xt); @@ -65,9 +68,10 @@ at the new samples, xi current index in xq and n the length of the filter. xq must be n*2 by k big, s is the index for in. */ -int af_filter_updatepq(unsigned int n, unsigned int d, unsigned int xi, _ftype_t** xq, _ftype_t* in, unsigned int s) +int af_filter_updatepq(unsigned int n, unsigned int d, unsigned int xi, + FLOAT_TYPE** xq, FLOAT_TYPE* in, unsigned int s) { - register _ftype_t* txq = *xq + xi; + register FLOAT_TYPE* txq = *xq + xi; register int nt = n*2; while(d-- >0){ @@ -95,18 +99,19 @@ returns 0 if OK, -1 if fail */ -int af_filter_design_fir(unsigned int n, _ftype_t* w, _ftype_t* fc, unsigned int flags, _ftype_t opt) +int af_filter_design_fir(unsigned int n, FLOAT_TYPE* w, FLOAT_TYPE* fc, + unsigned int flags, FLOAT_TYPE opt) { unsigned int o = n & 1; // Indicator for odd filter length unsigned int end = ((n + 1) >> 1) - o; // Loop end unsigned int i; // Loop index - _ftype_t k1 = 2 * M_PI; // 2*pi*fc1 - _ftype_t k2 = 0.5 * (_ftype_t)(1 - o);// Constant used if the filter has even length - _ftype_t k3; // 2*pi*fc2 Constant used in BP and BS design - _ftype_t g = 0.0; // Gain - _ftype_t t1,t2,t3; // Temporary variables - _ftype_t fc1,fc2; // Cutoff frequencies + FLOAT_TYPE k1 = 2 * M_PI; // 2*pi*fc1 + FLOAT_TYPE k2 = 0.5 * (FLOAT_TYPE)(1 - o);// Constant used if the filter has even length + FLOAT_TYPE k3; // 2*pi*fc2 Constant used in BP and BS design + FLOAT_TYPE g = 0.0; // Gain + FLOAT_TYPE t1,t2,t3; // Temporary variables + FLOAT_TYPE fc1,fc2; // Cutoff frequencies // Sanity check if(!w || (n == 0)) return -1; @@ -150,7 +155,7 @@ // Create filter for (i=0 ; i<end ; i++){ - t1 = (_ftype_t)(i+1) - k2; + t1 = (FLOAT_TYPE)(i+1) - k2; w[end-i-1] = w[n-end+i] = w[end-i-1] * sin(k1 * t1)/(M_PI * t1); // Sinc g += 2*w[end-i-1]; // Total gain in filter } @@ -163,7 +168,7 @@ // Create filter for (i=0 ; i<end ; i++){ - t1 = (_ftype_t)(i+1); + t1 = (FLOAT_TYPE)(i+1); w[end-i-1] = w[n-end+i] = -1 * w[end-i-1] * sin(k1 * t1)/(M_PI * t1); // Sinc g += ((i&1) ? (2*w[end-i-1]) : (-2*w[end-i-1])); // Total gain in filter } @@ -188,7 +193,7 @@ // Create filter for (i=0 ; i<end ; i++){ - t1 = (_ftype_t)(i+1) - k2; + t1 = (FLOAT_TYPE)(i+1) - k2; t2 = sin(k3 * t1)/(M_PI * t1); // Sinc fc2 t3 = sin(k1 * t1)/(M_PI * t1); // Sinc fc1 g += w[end-i-1] * (t3 + t2); // Total gain in filter @@ -203,7 +208,7 @@ // Create filter for (i=0 ; i<end ; i++){ - t1 = (_ftype_t)(i+1); + t1 = (FLOAT_TYPE)(i+1); t2 = sin(k1 * t1)/(M_PI * t1); // Sinc fc1 t3 = sin(k3 * t1)/(M_PI * t1); // Sinc fc2 w[end-i-1] = w[n-end+i] = w[end-i-1] * (t2 - t3); @@ -233,12 +238,13 @@ returns 0 if OK, -1 if fail */ -int af_filter_design_pfir(unsigned int n, unsigned int k, _ftype_t* w, _ftype_t** pw, _ftype_t g, unsigned int flags) +int af_filter_design_pfir(unsigned int n, unsigned int k, FLOAT_TYPE* w, + FLOAT_TYPE** pw, FLOAT_TYPE g, unsigned int flags) { int l = (int)n/k; // Length of individual FIR filters int i; // Counters int j; - _ftype_t t; // g * w[i] + FLOAT_TYPE t; // g * w[i] // Sanity check if(l<1 || k<1 || !w || !pw) @@ -274,9 +280,9 @@ Note that a0 is assumed to be 1, so there is no wrapping of it. */ -static void af_filter_prewarp(_ftype_t* a, _ftype_t fc, _ftype_t fs) +static void af_filter_prewarp(FLOAT_TYPE* a, FLOAT_TYPE fc, FLOAT_TYPE fs) { - _ftype_t wp; + FLOAT_TYPE wp; wp = 2.0 * fs * tan(M_PI * fc / fs); a[2] = a[2]/(wp * wp); a[1] = a[1]/wp; @@ -310,9 +316,10 @@ Return: On return, set coef z-domain coefficients and k to the gain required to maintain overall gain = 1.0; */ -static void af_filter_bilinear(_ftype_t* a, _ftype_t* b, _ftype_t* k, _ftype_t fs, _ftype_t *coef) +static void af_filter_bilinear(FLOAT_TYPE* a, FLOAT_TYPE* b, FLOAT_TYPE* k, + FLOAT_TYPE fs, FLOAT_TYPE *coef) { - _ftype_t ad, bd; + FLOAT_TYPE ad, bd; /* alpha (Numerator in s-domain) */ ad = 4. * a[2] * fs * fs + 2. * a[1] * fs + a[0]; @@ -410,16 +417,17 @@ return -1 if fail 0 if success. */ -int af_filter_szxform(_ftype_t* a, _ftype_t* b, _ftype_t Q, _ftype_t fc, _ftype_t fs, _ftype_t *k, _ftype_t *coef) +int af_filter_szxform(FLOAT_TYPE* a, FLOAT_TYPE* b, FLOAT_TYPE Q, FLOAT_TYPE fc, + FLOAT_TYPE fs, FLOAT_TYPE *k, FLOAT_TYPE *coef) { - _ftype_t at[3]; - _ftype_t bt[3]; + FLOAT_TYPE at[3]; + FLOAT_TYPE bt[3]; if(!a || !b || !k || !coef || (Q>1000.0 || Q< 1.0)) return -1; - memcpy(at,a,3*sizeof(_ftype_t)); - memcpy(bt,b,3*sizeof(_ftype_t)); + memcpy(at,a,3*sizeof(FLOAT_TYPE)); + memcpy(bt,b,3*sizeof(FLOAT_TYPE)); bt[1]/=Q;
--- a/libaf/filter.h Wed Apr 09 21:49:27 2008 +0000 +++ b/libaf/filter.h Thu Apr 10 10:01:54 2008 +0000 @@ -44,18 +44,28 @@ #define ODD 0x00000010 // Make filter HP // Exported functions -extern _ftype_t af_filter_fir(unsigned int n, _ftype_t* w, _ftype_t* x); +extern FLOAT_TYPE af_filter_fir(unsigned int n, FLOAT_TYPE* w, FLOAT_TYPE* x); -extern _ftype_t* af_filter_pfir(unsigned int n, unsigned int k, unsigned int xi, _ftype_t** w, _ftype_t** x, _ftype_t* y, unsigned int s); +extern FLOAT_TYPE* af_filter_pfir(unsigned int n, unsigned int k, + unsigned int xi, FLOAT_TYPE** w, + FLOAT_TYPE** x, FLOAT_TYPE* y, + unsigned int s); -//extern int af_filter_updateq(unsigned int n, unsigned int xi, _ftype_t* xq, _ftype_t* in); -extern int af_filter_updatepq(unsigned int n, unsigned int k, unsigned int xi, _ftype_t** xq, _ftype_t* in, unsigned int s); +//extern int af_filter_updateq(unsigned int n, unsigned int xi, +// FLOAT_TYPE* xq, FLOAT_TYPE* in); +extern int af_filter_updatepq(unsigned int n, unsigned int k, unsigned int xi, + FLOAT_TYPE** xq, FLOAT_TYPE* in, unsigned int s); + +extern int af_filter_design_fir(unsigned int n, FLOAT_TYPE* w, FLOAT_TYPE* fc, + unsigned int flags, FLOAT_TYPE opt); -extern int af_filter_design_fir(unsigned int n, _ftype_t* w, _ftype_t* fc, unsigned int flags, _ftype_t opt); +extern int af_filter_design_pfir(unsigned int n, unsigned int k, FLOAT_TYPE* w, + FLOAT_TYPE** pw, FLOAT_TYPE g, + unsigned int flags); -extern int af_filter_design_pfir(unsigned int n, unsigned int k, _ftype_t* w, _ftype_t** pw, _ftype_t g, unsigned int flags); - -extern int af_filter_szxform(_ftype_t* a, _ftype_t* b, _ftype_t Q, _ftype_t fc, _ftype_t fs, _ftype_t *k, _ftype_t *coef); +extern int af_filter_szxform(FLOAT_TYPE* a, FLOAT_TYPE* b, FLOAT_TYPE Q, + FLOAT_TYPE fc, FLOAT_TYPE fs, FLOAT_TYPE *k, + FLOAT_TYPE *coef); /* Add new data to circular queue designed to be used with a FIR filter. xq is the circular queue, in pointing at the new sample, xi
--- a/libaf/window.c Wed Apr 09 21:49:27 2008 +0000 +++ b/libaf/window.c Thu Apr 10 10:01:54 2008 +0000 @@ -24,7 +24,7 @@ // n window length // w buffer for the window parameters */ -void af_window_boxcar(int n, _ftype_t* w) +void af_window_boxcar(int n, FLOAT_TYPE* w) { int i; // Calculate window coefficients @@ -44,16 +44,16 @@ // n window length // w buffer for the window parameters */ -void af_window_triang(int n, _ftype_t* w) +void af_window_triang(int n, FLOAT_TYPE* w) { - _ftype_t k1 = (_ftype_t)(n & 1); - _ftype_t k2 = 1/((_ftype_t)n + k1); + FLOAT_TYPE k1 = (FLOAT_TYPE)(n & 1); + FLOAT_TYPE k2 = 1/((FLOAT_TYPE)n + k1); int end = (n + 1) >> 1; int i; // Calculate window coefficients for (i=0 ; i<end ; i++) - w[i] = w[n-i-1] = (2.0*((_ftype_t)(i+1))-(1.0-k1))*k2; + w[i] = w[n-i-1] = (2.0*((FLOAT_TYPE)(i+1))-(1.0-k1))*k2; } @@ -65,14 +65,14 @@ // n window length // w buffer for the window parameters */ -void af_window_hanning(int n, _ftype_t* w) +void af_window_hanning(int n, FLOAT_TYPE* w) { int i; - _ftype_t k = 2*M_PI/((_ftype_t)(n+1)); // 2*pi/(N+1) + FLOAT_TYPE k = 2*M_PI/((FLOAT_TYPE)(n+1)); // 2*pi/(N+1) // Calculate window coefficients for (i=0; i<n; i++) - *w++ = 0.5*(1.0 - cos(k*(_ftype_t)(i+1))); + *w++ = 0.5*(1.0 - cos(k*(FLOAT_TYPE)(i+1))); } /* @@ -84,14 +84,14 @@ // n window length // w buffer for the window parameters */ -void af_window_hamming(int n,_ftype_t* w) +void af_window_hamming(int n,FLOAT_TYPE* w) { int i; - _ftype_t k = 2*M_PI/((_ftype_t)(n-1)); // 2*pi/(N-1) + FLOAT_TYPE k = 2*M_PI/((FLOAT_TYPE)(n-1)); // 2*pi/(N-1) // Calculate window coefficients for (i=0; i<n; i++) - *w++ = 0.54 - 0.46*cos(k*(_ftype_t)i); + *w++ = 0.54 - 0.46*cos(k*(FLOAT_TYPE)i); } /* @@ -103,15 +103,15 @@ // n window length // w buffer for the window parameters */ -void af_window_blackman(int n,_ftype_t* w) +void af_window_blackman(int n,FLOAT_TYPE* w) { int i; - _ftype_t k1 = 2*M_PI/((_ftype_t)(n-1)); // 2*pi/(N-1) - _ftype_t k2 = 2*k1; // 4*pi/(N-1) + FLOAT_TYPE k1 = 2*M_PI/((FLOAT_TYPE)(n-1)); // 2*pi/(N-1) + FLOAT_TYPE k2 = 2*k1; // 4*pi/(N-1) // Calculate window coefficients for (i=0; i<n; i++) - *w++ = 0.42 - 0.50*cos(k1*(_ftype_t)i) + 0.08*cos(k2*(_ftype_t)i); + *w++ = 0.42 - 0.50*cos(k1*(FLOAT_TYPE)i) + 0.08*cos(k2*(FLOAT_TYPE)i); } /* @@ -123,15 +123,16 @@ // n window length // w buffer for the window parameters */ -void af_window_flattop(int n,_ftype_t* w) +void af_window_flattop(int n,FLOAT_TYPE* w) { int i; - _ftype_t k1 = 2*M_PI/((_ftype_t)(n-1)); // 2*pi/(N-1) - _ftype_t k2 = 2*k1; // 4*pi/(N-1) + FLOAT_TYPE k1 = 2*M_PI/((FLOAT_TYPE)(n-1)); // 2*pi/(N-1) + FLOAT_TYPE k2 = 2*k1; // 4*pi/(N-1) // Calculate window coefficients for (i=0; i<n; i++) - *w++ = 0.2810638602 - 0.5208971735*cos(k1*(_ftype_t)i) + 0.1980389663*cos(k2*(_ftype_t)i); + *w++ = 0.2810638602 - 0.5208971735*cos(k1*(FLOAT_TYPE)i) + + 0.1980389663*cos(k2*(FLOAT_TYPE)i); } /* Computes the 0th order modified Bessel function of the first kind. @@ -142,16 +143,16 @@ */ #define BIZ_EPSILON 1E-21 // Max error acceptable -static _ftype_t besselizero(_ftype_t x) +static FLOAT_TYPE besselizero(FLOAT_TYPE x) { - _ftype_t temp; - _ftype_t sum = 1.0; - _ftype_t u = 1.0; - _ftype_t halfx = x/2.0; + FLOAT_TYPE temp; + FLOAT_TYPE sum = 1.0; + FLOAT_TYPE u = 1.0; + FLOAT_TYPE halfx = x/2.0; int n = 1; do { - temp = halfx/(_ftype_t)n; + temp = halfx/(FLOAT_TYPE)n; u *=temp * temp; sum += u; n++; @@ -186,17 +187,17 @@ // 8.960 5.7 0.000275 -90 // 10.056 6.4 0.000087 -100 */ -void af_window_kaiser(int n, _ftype_t* w, _ftype_t b) +void af_window_kaiser(int n, FLOAT_TYPE* w, FLOAT_TYPE b) { - _ftype_t tmp; - _ftype_t k1 = 1.0/besselizero(b); + FLOAT_TYPE tmp; + FLOAT_TYPE k1 = 1.0/besselizero(b); int k2 = 1 - (n & 1); int end = (n + 1) >> 1; int i; // Calculate window coefficients for (i=0 ; i<end ; i++){ - tmp = (_ftype_t)(2*i + k2) / ((_ftype_t)n - 1.0); + tmp = (FLOAT_TYPE)(2*i + k2) / ((FLOAT_TYPE)n - 1.0); w[end-(1&(!k2))+i] = w[end-1-i] = k1 * besselizero(b*sqrt(1.0 - tmp*tmp)); } }
--- a/libaf/window.h Wed Apr 09 21:49:27 2008 +0000 +++ b/libaf/window.h Thu Apr 10 10:01:54 2008 +0000 @@ -22,12 +22,12 @@ #ifndef MPLAYER_WINDOW_H #define MPLAYER_WINDOW_H -extern void af_window_boxcar(int n, _ftype_t* w); -extern void af_window_triang(int n, _ftype_t* w); -extern void af_window_hanning(int n, _ftype_t* w); -extern void af_window_hamming(int n,_ftype_t* w); -extern void af_window_blackman(int n,_ftype_t* w); -extern void af_window_flattop(int n,_ftype_t* w); -extern void af_window_kaiser(int n, _ftype_t* w,_ftype_t b); +extern void af_window_boxcar(int n, FLOAT_TYPE* w); +extern void af_window_triang(int n, FLOAT_TYPE* w); +extern void af_window_hanning(int n, FLOAT_TYPE* w); +extern void af_window_hamming(int n, FLOAT_TYPE* w); +extern void af_window_blackman(int n, FLOAT_TYPE* w); +extern void af_window_flattop(int n, FLOAT_TYPE* w); +extern void af_window_kaiser(int n, FLOAT_TYPE* w, FLOAT_TYPE b); #endif /* MPLAYER_WINDOW_H */