Commit 0aa505b3 authored by Jan Kiene's avatar Jan Kiene
Browse files

use offset instead of pre-set pointer

parent 867217ee
Loading
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -162,6 +162,7 @@
/*#define FIX_I4_OL_PITCH*/                             /* fix open-loop pitch used for EVS core switching */
#define TMP_1342_WORKAROUND_DEC_FLUSH_BROKEN_IN_SR      /* FhG: Temporary workaround for incorrect implementation of decoder flush with split rendering */
#define NONBE_1122_KEEP_EVS_MODE_UNCHANGED              /* FhG: Disables fix for issue 1122 in EVS mode to keep BE tests green. This switch should be removed once the 1122 fix is added to EVS via a CR.  */
#define FIX_2272_OOB_INDEXING_IN_LTP_PIT_SEARCH         /* FhG: fix OOB index USAN error in TCX LTP pitch search */

/* #################### End BE switches ################################## */

+33 −0
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@
    EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0
  ====================================================================================*/

#include "cnst.h"
#include <stdint.h>
#include "options.h"
#ifdef DEBUGGING
@@ -112,7 +113,11 @@ static void tcx_ltp_pitch_search(
    const int16_t check_border_case,
    int16_t *border_case )
{
#ifdef FIX_2272_OOB_INDEXING_IN_LTP_PIT_SEARCH
    int16_t i, t, t0, cor_idx, t1, step, fraction, t0_min, t0_max, t_min, t_max, delta;
#else
    int16_t i, t, t0, t1, step, fraction, t0_min, t0_max, t_min, t_max, delta;
#endif
    float temp, cor_max, cor[256], *pt_cor;

    if ( pitres == 6 )
@@ -195,7 +200,11 @@ static void tcx_ltp_pitch_search(
     * the interpolated normalized correlation.
     *-----------------------------------------------------------------*/

#ifdef FIX_2272_OOB_INDEXING_IN_LTP_PIT_SEARCH
    cor_idx = L_INTERPOL1 - t0_min;
#else
    pt_cor = cor + L_INTERPOL1 - t0_min;
#endif
    t0 = t1;
    if ( t0 >= pitfr2 )
    {
@@ -211,15 +220,32 @@ static void tcx_ltp_pitch_search(
    if ( t0 == t0_min ) /* Limit case */
    {
        fraction = 0;
#ifdef FIX_2272_OOB_INDEXING_IN_LTP_PIT_SEARCH
        cor_max = interpolate_corr( &cor[cor_idx + t0], fraction, pitres );
#else
        cor_max = interpolate_corr( &pt_cor[t0], fraction, pitres );
#endif
    }
    else /* Process negative fractions */
    {
#ifdef FIX_2272_OOB_INDEXING_IN_LTP_PIT_SEARCH
        int16_t cor_idx_tmp;

        cor_idx_tmp = cor_idx + t0;
#endif
        t0--;
#ifdef FIX_2272_OOB_INDEXING_IN_LTP_PIT_SEARCH
        cor_max = interpolate_corr( &cor[cor_idx_tmp], fraction, pitres );
#else
        cor_max = interpolate_corr( &pt_cor[t0], fraction, pitres );
#endif
        for ( i = ( fraction + step ); i <= pitres - 1; i = i + step )
        {
#ifdef FIX_2272_OOB_INDEXING_IN_LTP_PIT_SEARCH
            temp = interpolate_corr( &cor[cor_idx_tmp], i, pitres );
#else
            temp = interpolate_corr( &pt_cor[t0], i, pitres );
#endif
            if ( temp > cor_max )
            {
                cor_max = temp;
@@ -228,9 +254,16 @@ static void tcx_ltp_pitch_search(
        }
    }

#ifdef FIX_2272_OOB_INDEXING_IN_LTP_PIT_SEARCH
    cor_idx = t1 + cor_idx;
#endif
    for ( i = 0; i <= pitres - 1; i = i + step ) /* Process positive fractions */
    {
#ifdef FIX_2272_OOB_INDEXING_IN_LTP_PIT_SEARCH
        temp = interpolate_corr( &cor[cor_idx], i, pitres );
#else
        temp = interpolate_corr( &pt_cor[t1], i, pitres );
#endif
        if ( temp > cor_max )
        {
            cor_max = temp;