| Index: silk/fixed/autocorr_FIX.c
|
| diff --git a/silk/fixed/autocorr_FIX.c b/silk/fixed/autocorr_FIX.c
|
| index c2ebb6a9b39ee668f090526d3e5265be35a8adfa..dec3cc0bf48a1c774a72e7d166699433c1f8bcd2 100644
|
| --- a/silk/fixed/autocorr_FIX.c
|
| +++ b/silk/fixed/autocorr_FIX.c
|
| @@ -8,11 +8,11 @@ this list of conditions and the following disclaimer.
|
| - Redistributions in binary form must reproduce the above copyright
|
| notice, this list of conditions and the following disclaimer in the
|
| documentation and/or other materials provided with the distribution.
|
| -- Neither the name of Internet Society, IETF or IETF Trust, nor the
|
| +- Neither the name of Internet Society, IETF or IETF Trust, nor the
|
| names of specific contributors, may be used to endorse or promote
|
| products derived from this software without specific prior written
|
| permission.
|
| -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS IS”
|
| +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
| AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
| IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
| ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
| @@ -30,6 +30,7 @@ POSSIBILITY OF SUCH DAMAGE.
|
| #endif
|
|
|
| #include "SigProc_FIX.h"
|
| +#include "celt_lpc.h"
|
|
|
| /* Compute autocorrelation */
|
| void silk_autocorr(
|
| @@ -40,37 +41,7 @@ void silk_autocorr(
|
| const opus_int correlationCount /* I Number of correlation taps to compute */
|
| )
|
| {
|
| - opus_int i, lz, nRightShifts, corrCount;
|
| - opus_int64 corr64;
|
| -
|
| + opus_int corrCount;
|
| corrCount = silk_min_int( inputDataSize, correlationCount );
|
| -
|
| - /* compute energy (zero-lag correlation) */
|
| - corr64 = silk_inner_prod16_aligned_64( inputData, inputData, inputDataSize );
|
| -
|
| - /* deal with all-zero input data */
|
| - corr64 += 1;
|
| -
|
| - /* number of leading zeros */
|
| - lz = silk_CLZ64( corr64 );
|
| -
|
| - /* scaling: number of right shifts applied to correlations */
|
| - nRightShifts = 35 - lz;
|
| - *scale = nRightShifts;
|
| -
|
| - if( nRightShifts <= 0 ) {
|
| - results[ 0 ] = silk_LSHIFT( (opus_int32)silk_CHECK_FIT32( corr64 ), -nRightShifts );
|
| -
|
| - /* compute remaining correlations based on int32 inner product */
|
| - for( i = 1; i < corrCount; i++ ) {
|
| - results[ i ] = silk_LSHIFT( silk_inner_prod_aligned( inputData, inputData + i, inputDataSize - i ), -nRightShifts );
|
| - }
|
| - } else {
|
| - results[ 0 ] = (opus_int32)silk_CHECK_FIT32( silk_RSHIFT64( corr64, nRightShifts ) );
|
| -
|
| - /* compute remaining correlations based on int64 inner product */
|
| - for( i = 1; i < corrCount; i++ ) {
|
| - results[ i ] = (opus_int32)silk_CHECK_FIT32( silk_RSHIFT64( silk_inner_prod16_aligned_64( inputData, inputData + i, inputDataSize - i ), nRightShifts ) );
|
| - }
|
| - }
|
| + *scale = _celt_autocorr(inputData, results, NULL, 0, corrCount-1, inputDataSize);
|
| }
|
|
|