diff options
author | Ronald S. Bultje <rsbultje@gmail.com> | 2014-06-13 19:06:30 -0400 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2014-06-14 14:36:18 +0200 |
commit | b785c62681a0a5a330b065e0754d27a313c44c8e (patch) | |
tree | 9fcafa9a2ff0fe1fa6f834c76019256b52058991 /libswresample/resample_template.c | |
parent | d77815eeaac309742818f53be6cd2f4c6fa76cf1 (diff) | |
download | ffmpeg-b785c62681a0a5a330b065e0754d27a313c44c8e.tar.gz |
swr: handle initial negative sample index outside DSP function.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libswresample/resample_template.c')
-rw-r--r-- | libswresample/resample_template.c | 55 |
1 files changed, 5 insertions, 50 deletions
diff --git a/libswresample/resample_template.c b/libswresample/resample_template.c index 65bde6e7e0..40def7a69c 100644 --- a/libswresample/resample_template.c +++ b/libswresample/resample_template.c @@ -107,7 +107,10 @@ #endif int RENAME(swri_resample)(ResampleContext *c, DELEM *dst, const DELEM *src, int *consumed, int src_size, int dst_size, int update_ctx){ - int dst_index, i; + int dst_index; +#if !defined(COMMON_CORE) || !defined(LINEAR_CORE) + int i; +#endif int index= c->index; int frac= c->frac; int dst_incr_frac= c->dst_incr % c->src_incr; @@ -133,7 +136,7 @@ int RENAME(swri_resample)(ResampleContext *c, DELEM *dst, const DELEM *src, int av_assert2(index >= 0); *consumed= index; index = 0; - } else if (index >= 0) { + } else { int64_t end_index = (1LL + src_size - c->filter_length) << c->phase_shift; int64_t delta_frac = (end_index - index) * c->src_incr - c->frac; int delta_n = (delta_frac + c->dst_incr - 1) / c->dst_incr; @@ -195,54 +198,6 @@ int RENAME(swri_resample)(ResampleContext *c, DELEM *dst, const DELEM *src, int } *consumed = sample_index; - } else { - int sample_index = 0; - for(dst_index=0; dst_index < dst_size; dst_index++){ - FELEM *filter; - FELEM2 val=0; - - sample_index += index >> c->phase_shift; - index &= c->phase_mask; - filter = ((FELEM*)c->filter_bank) + c->filter_alloc*index; - - if(sample_index + c->filter_length > src_size || -sample_index >= src_size){ - break; - }else if(sample_index < 0){ - for(i=0; i<c->filter_length; i++) - val += src[FFABS(sample_index + i)] * (FELEM2)filter[i]; - OUT(dst[dst_index], val); - }else if(c->linear){ - FELEM2 v2=0; -#ifdef LINEAR_CORE - LINEAR_CORE -#else - for(i=0; i<c->filter_length; i++){ - val += src[sample_index + i] * (FELEM2)filter[i]; - v2 += src[sample_index + i] * (FELEM2)filter[i + c->filter_alloc]; - } -#endif - val+=(v2-val)*(FELEML)frac / c->src_incr; - OUT(dst[dst_index], val); - }else{ -#ifdef COMMON_CORE - COMMON_CORE -#else - for(i=0; i<c->filter_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++; - } - } - *consumed= FFMAX(sample_index, 0); - index += FFMIN(sample_index, 0) << c->phase_shift; } if(update_ctx){ |