diff options
author | Jean-Marc Valin <jmvalin@jmvalin.ca> | 2013-05-26 20:08:35 -0400 |
---|---|---|
committer | Jean-Marc Valin <jmvalin@jmvalin.ca> | 2013-05-26 20:11:44 -0400 |
commit | 068cbd89bf57d7d268b23a6b22f37b569467046d (patch) | |
tree | 2722332f8889fe766f27fb433c27615fba3648a3 /celt/pitch.c | |
parent | 2fe4700f761e21788dd3c23c7eca9dc0d436ef10 (diff) | |
download | libopus-068cbd89bf57d7d268b23a6b22f37b569467046d.tar.gz |
Creates xcorr_kernel() that gets used by pitch_xcorr, celt_fir and celt_iir.
Diffstat (limited to 'celt/pitch.c')
-rw-r--r-- | celt/pitch.c | 86 |
1 files changed, 10 insertions, 76 deletions
diff --git a/celt/pitch.c b/celt/pitch.c index cffee19c..f8115c2f 100644 --- a/celt/pitch.c +++ b/celt/pitch.c @@ -258,83 +258,17 @@ pitch_xcorr(opus_val16 *_x, opus_val16 *_y, opus_val32 *xcorr, int len, int max_ #endif for (i=0;i<max_pitch-3;i+=4) { - /* Compute correlation*/ - /*corr[nb_pitch-1-i]=inner_prod(x, _y+i, len);*/ - opus_val32 sum1=0; - opus_val32 sum2=0; - opus_val32 sum3=0; - opus_val32 sum4=0; - const opus_val16 *y = _y+i; - const opus_val16 *x = _x; - opus_val16 y_0, y_1, y_2, y_3; - y_3=0; /* gcc doesn't realize that y_3 can't be used uninitialized */ - y_0=*y++; - y_1=*y++; - y_2=*y++; - for (j=0;j<len-3;j+=4) - { - opus_val16 tmp; - tmp = *x++; - y_3=*y++; - sum1 = MAC16_16(sum1,tmp,y_0); - sum2 = MAC16_16(sum2,tmp,y_1); - sum3 = MAC16_16(sum3,tmp,y_2); - sum4 = MAC16_16(sum4,tmp,y_3); - tmp=*x++; - y_0=*y++; - sum1 = MAC16_16(sum1,tmp,y_1); - sum2 = MAC16_16(sum2,tmp,y_2); - sum3 = MAC16_16(sum3,tmp,y_3); - sum4 = MAC16_16(sum4,tmp,y_0); - tmp=*x++; - y_1=*y++; - sum1 = MAC16_16(sum1,tmp,y_2); - sum2 = MAC16_16(sum2,tmp,y_3); - sum3 = MAC16_16(sum3,tmp,y_0); - sum4 = MAC16_16(sum4,tmp,y_1); - tmp=*x++; - y_2=*y++; - sum1 = MAC16_16(sum1,tmp,y_3); - sum2 = MAC16_16(sum2,tmp,y_0); - sum3 = MAC16_16(sum3,tmp,y_1); - sum4 = MAC16_16(sum4,tmp,y_2); - } - if (j++<len) - { - opus_val16 tmp = *x++; - y_3=*y++; - sum1 = MAC16_16(sum1,tmp,y_0); - sum2 = MAC16_16(sum2,tmp,y_1); - sum3 = MAC16_16(sum3,tmp,y_2); - sum4 = MAC16_16(sum4,tmp,y_3); - } - if (j++<len) - { - opus_val16 tmp=*x++; - y_0=*y++; - sum1 = MAC16_16(sum1,tmp,y_1); - sum2 = MAC16_16(sum2,tmp,y_2); - sum3 = MAC16_16(sum3,tmp,y_3); - sum4 = MAC16_16(sum4,tmp,y_0); - } - if (j<len) - { - opus_val16 tmp=*x++; - y_1=*y++; - sum1 = MAC16_16(sum1,tmp,y_2); - sum2 = MAC16_16(sum2,tmp,y_3); - sum3 = MAC16_16(sum3,tmp,y_0); - sum4 = MAC16_16(sum4,tmp,y_1); - } - xcorr[i]=sum1; - xcorr[i+1]=sum2; - xcorr[i+2]=sum3; - xcorr[i+3]=sum4; + opus_val32 sum[4]={0,0,0,0}; + xcorr_kernel(_x, _y+i, sum, len); + xcorr[i]=sum[0]; + xcorr[i+1]=sum[1]; + xcorr[i+2]=sum[2]; + xcorr[i+3]=sum[3]; #ifdef FIXED_POINT - sum1 = MAX32(sum1, sum2); - sum3 = MAX32(sum3, sum4); - sum1 = MAX32(sum1, sum3); - maxcorr = MAX32(maxcorr, sum1); + sum[0] = MAX32(sum[0], sum[1]); + sum[2] = MAX32(sum[2], sum[3]); + sum[0] = MAX32(sum[0], sum[2]); + maxcorr = MAX32(maxcorr, sum[0]); #endif } /* In case max_pitch isn't a multiple of 4, do non-unrolled version. */ |