Mercurial > libavcodec.hg
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; |