comparison resample2.c @ 4707:441cded6920c libavcodec

optimize linear filter coeff interpolation code, this also makes the code less prone to overflows
author michael
date Thu, 22 Mar 2007 11:10:30 +0000
parents 07f7ca450695
children 0ebf322d148e
comparison
equal deleted inserted replaced
4706:1d8b06947276 4707:441cded6920c
266 for(i=0; i<c->filter_length; i++) 266 for(i=0; i<c->filter_length; i++)
267 val += src[FFABS(sample_index + i) % src_size] * filter[i]; 267 val += src[FFABS(sample_index + i) % src_size] * filter[i];
268 }else if(sample_index + c->filter_length > src_size){ 268 }else if(sample_index + c->filter_length > src_size){
269 break; 269 break;
270 }else if(c->linear){ 270 }else if(c->linear){
271 int64_t v=0; 271 FELEM2 v2=0;
272 int sub_phase= (frac<<8) / c->src_incr;
273 for(i=0; i<c->filter_length; i++){ 272 for(i=0; i<c->filter_length; i++){
274 FELEML coeff= filter[i]*(256 - sub_phase) + filter[i + c->filter_length]*sub_phase; 273 val += src[sample_index + i] * (FELEM2)filter[i];
275 v += src[sample_index + i] * coeff; 274 v2 += src[sample_index + i] * (FELEM2)filter[i + c->filter_length];
276 } 275 }
277 val= v>>8; 276 val+=(v2-val)*(FELEML)frac / c->src_incr;
278 }else{ 277 }else{
279 for(i=0; i<c->filter_length; i++){ 278 for(i=0; i<c->filter_length; i++){
280 val += src[sample_index + i] * (FELEM2)filter[i]; 279 val += src[sample_index + i] * (FELEM2)filter[i];
281 } 280 }
282 } 281 }