comparison resample2.c @ 2405:21c5ef8a4ff7 libavcodec

faster and slightly less accurate nearest neighbor resampler
author michael
date Fri, 31 Dec 2004 17:37:23 +0000
parents 6d53608cf2cf
children 1ee03f2a6cd5
comparison
equal deleted inserted replaced
2404:2e90350ff8bc 2405:21c5ef8a4ff7
191 int index= c->index; 191 int index= c->index;
192 int frac= c->frac; 192 int frac= c->frac;
193 int dst_incr_frac= c->dst_incr % c->src_incr; 193 int dst_incr_frac= c->dst_incr % c->src_incr;
194 int dst_incr= c->dst_incr / c->src_incr; 194 int dst_incr= c->dst_incr / c->src_incr;
195 int compensation_distance= c->compensation_distance; 195 int compensation_distance= c->compensation_distance;
196 196
197 if(compensation_distance == 0 && c->filter_length == 1 && c->phase_shift==0){ 197 if(compensation_distance == 0 && c->filter_length == 1 && c->phase_shift==0){
198 assert(index >= 0); 198 int64_t index2= ((int64_t)index)<<32;
199 int64_t incr= (1LL<<32) * c->dst_incr / c->src_incr;
200 dst_size= FFMIN(dst_size, (src_size-1-index) * (int64_t)c->src_incr / c->dst_incr);
201
199 for(dst_index=0; dst_index < dst_size; dst_index++){ 202 for(dst_index=0; dst_index < dst_size; dst_index++){
200 if(index < src_size) 203 dst[dst_index] = src[index2>>32];
201 dst[dst_index] = src[index]; 204 index2 += incr;
202 else 205 }
203 break; 206 frac += dst_index * dst_incr_frac;
204 207 index += dst_index * dst_incr;
205 frac += dst_incr_frac; 208 index += frac / c->src_incr;
206 index += dst_incr; 209 frac %= c->src_incr;
207 if(frac >= c->src_incr){
208 frac -= c->src_incr;
209 index++;
210 }
211 }
212 }else{ 210 }else{
213 for(dst_index=0; dst_index < dst_size; dst_index++){ 211 for(dst_index=0; dst_index < dst_size; dst_index++){
214 FELEM *filter= c->filter_bank + c->filter_length*(index & c->phase_mask); 212 FELEM *filter= c->filter_bank + c->filter_length*(index & c->phase_mask);
215 int sample_index= index >> c->phase_shift; 213 int sample_index= index >> c->phase_shift;
216 FELEM2 val=0; 214 FELEM2 val=0;