comparison resample2.c @ 4699:4040ca52670a libavcodec

make kaiser windows with other beta than 16 available
author michael
date Wed, 21 Mar 2007 23:44:49 +0000
parents 8e460c6a85a7
children e210bbc7dd19
comparison
equal deleted inserted replaced
4698:9fad30d1230b 4699:4040ca52670a
78 78
79 /** 79 /**
80 * builds a polyphase filterbank. 80 * builds a polyphase filterbank.
81 * @param factor resampling factor 81 * @param factor resampling factor
82 * @param scale wanted sum of coefficients for each filter 82 * @param scale wanted sum of coefficients for each filter
83 * @param type 0->cubic, 1->blackman nuttall windowed sinc, 2->kaiser windowed sinc beta=16 83 * @param type 0->cubic, 1->blackman nuttall windowed sinc, 2..16->kaiser windowed sinc beta=2..16
84 */ 84 */
85 void av_build_filter(FELEM *filter, double factor, int tap_count, int phase_count, int scale, int type){ 85 void av_build_filter(FELEM *filter, double factor, int tap_count, int phase_count, int scale, int type){
86 int ph, i, v; 86 int ph, i, v;
87 double x, y, w, tab[tap_count]; 87 double x, y, w, tab[tap_count];
88 const int center= (tap_count-1)/2; 88 const int center= (tap_count-1)/2;
106 break;} 106 break;}
107 case 1: 107 case 1:
108 w = 2.0*x / (factor*tap_count) + M_PI; 108 w = 2.0*x / (factor*tap_count) + M_PI;
109 y *= 0.3635819 - 0.4891775 * cos(w) + 0.1365995 * cos(2*w) - 0.0106411 * cos(3*w); 109 y *= 0.3635819 - 0.4891775 * cos(w) + 0.1365995 * cos(2*w) - 0.0106411 * cos(3*w);
110 break; 110 break;
111 case 2: 111 default:
112 w = 2.0*x / (factor*tap_count*M_PI); 112 w = 2.0*x / (factor*tap_count*M_PI);
113 y *= bessel(16*sqrt(FFMAX(1-w*w, 0))); 113 y *= bessel(type*sqrt(FFMAX(1-w*w, 0)));
114 break; 114 break;
115 } 115 }
116 116
117 tab[i] = y; 117 tab[i] = y;
118 norm += y; 118 norm += y;