X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libswresample%2Fresample_template.c;h=ad840702ce05ebfbeec51dc0147fc96dd9dfd079;hb=fafd8443118565f4e06da2a8832e8d3fa3ffe41e;hp=0523add3aaf63deeb57437e4811e6c0e28911a48;hpb=6e6dd9995bd1df9948225a82f44327f94516d3af;p=ffmpeg diff --git a/libswresample/resample_template.c b/libswresample/resample_template.c index 0523add3aaf..ad840702ce0 100644 --- a/libswresample/resample_template.c +++ b/libswresample/resample_template.c @@ -48,9 +48,35 @@ int RENAME(swri_resample)(ResampleContext *c, DELEM *dst, const DELEM *src, int index += dst_index * dst_incr; index += (frac + dst_index * (int64_t)dst_incr_frac) / c->src_incr; frac = (frac + dst_index * (int64_t)dst_incr_frac) % c->src_incr; + }else if(compensation_distance == 0 && !c->linear && index >= 0){ + for(dst_index=0; dst_index < dst_size; dst_index++){ + FELEM *filter= ((FELEM*)c->filter_bank) + c->filter_alloc*(index & c->phase_mask); + int sample_index= index >> c->phase_shift; + + if(sample_index + c->filter_length > src_size){ + break; + }else{ +#ifdef COMMON_CORE + COMMON_CORE +#else + FELEM2 val=0; + for(i=0; ifilter_length; i++){ + val += src[sample_index + i] * (FELEM2)filter[i]; + } + OUT(dst[dst_index], val); +#endif + } + + frac += dst_incr_frac; + index += dst_incr; + if(frac >= c->src_incr){ + frac -= c->src_incr; + index++; + } + } }else{ for(dst_index=0; dst_index < dst_size; dst_index++){ - FELEM *filter= ((FELEM*)c->filter_bank) + c->filter_length*(index & c->phase_mask); + FELEM *filter= ((FELEM*)c->filter_bank) + c->filter_alloc*(index & c->phase_mask); int sample_index= index >> c->phase_shift; FELEM2 val=0; @@ -63,7 +89,7 @@ int RENAME(swri_resample)(ResampleContext *c, DELEM *dst, const DELEM *src, int FELEM2 v2=0; for(i=0; ifilter_length; i++){ val += src[sample_index + i] * (FELEM2)filter[i]; - v2 += src[sample_index + i] * (FELEM2)filter[i + c->filter_length]; + v2 += src[sample_index + i] * (FELEM2)filter[i + c->filter_alloc]; } val+=(v2-val)*(FELEML)frac / c->src_incr; }else{