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