Commit 9b4a1492 authored by vaillancour's avatar vaillancour
Browse files

possible fix for 1803

parent de430f5e
Loading
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -144,4 +144,6 @@

#define NONBE_FIX_TCX5_INTERLEAVING_FOR_FS_IN_UNEQUAL_FS_OUT /* FhG: apply correct TCX5 grouping/interleaving when input_fs != output_fs */

#define FIX_1803_PRED_CAUSING_BWE_OVERSHOOT     /* VA: Reduces complexity and improve precision of pred_ivas, solve 1803 */

#endif
+20 −4
Original line number Diff line number Diff line
@@ -51,27 +51,43 @@ void pred_lt4_ivas_fx(

    FOR( j = 0; j < L_subfr; j++ )
    {
#ifdef FIX_1803_PRED_CAUSING_BWE_OVERSHOOT
        Word64 s64 = 0;
        move64();
#endif
        x1 = x0++;                       /* Q_exc */
        x2 = x1 + 1;                     /* Q_exc */
        c1 = ( &win[frac] );             /* Q14 */
        c2 = ( &win[up_sample - frac] ); /* Q14 */

#ifndef FIX_1803_PRED_CAUSING_BWE_OVERSHOOT
         {
            Word64 s64 = 0;
            move64();
#endif
            FOR( i = 0; i < nb_coef; i++ )
            {
#ifdef FIX_1803_PRED_CAUSING_BWE_OVERSHOOT
                /*s += (*x1--) * (*c1) + (*x2++) * (*c2);*/
                s64 = W_mac_32_16( s64, *c1, *x1 ); /* Q_exc + Q32 */
                s64 = W_mac_32_16( s64, *c2, *x2 ); /* Q_exc + Q32 */
                x1--;
                x2++;
#else
                /*s += (*x1--) * (*c1) + (*x2++) * (*c2);*/
                s64 = W_mac_32_32( s64, L_deposit_l( *x1-- ), ( *c1 ) ); /* Q_exc + Q32 */
                s64 = W_mac_32_32( s64, L_deposit_l( *x2++ ), ( *c2 ) ); /* Q_exc + Q32 */

#endif
                c1 += up_sample;
                c2 += up_sample;
            }
#ifndef FIX_1803_PRED_CAUSING_BWE_OVERSHOOT
            s = W_sat_l( W_shr( s64, 16 ) ); /* Q_exc + Q16 */
        }

        excO[j] = round_fx_o( s, &Overflow ); /* Q_exc */
#else
        excO[j] = extract_h( W_round48_L_o( s64, &Overflow ) );      /*W_round48_L_o is saturating if needed, the Overflow is sent out is case specific implementation has a different W_round48_L_o*/
#endif

        move16();
    }
    return;
+20 −0
Original line number Diff line number Diff line
@@ -1311,6 +1311,7 @@ const Word16 inter4_2_fx[] =
/* 1/4 resolution interpolation filter (-3 dB at 0.856*fs/2) */
const Word32 L_pitch_inter4_2[PIT_FIR_SIZE2] = { /* Q31 */
#ifndef FIX_1803_PRED_CAUSING_BWE_OVERSHOOT
    2018634624, 1839083520, 1357785216, 724904576, 126856152, -281447072,
    -428193216, -340524320, -121030032, 102233104, 229241728, 222704784,
    111802296, -32603096, -136805440, -158183648, -99851544, -2110976,
@@ -1321,6 +1322,25 @@ const Word32 L_pitch_inter4_2[PIT_FIR_SIZE2] = { /* Q31 */
    -6833293, 5003637, 12101070, 11944304, 6107443, -1346472, -6427418,
    -7219840, -4389456, -249108, 2823941, 3633542, 2471753, 556198,
    -895500, -1327144, -932007, -285615, 135291, 210453, 103079, 15032, 0
#else
    2018634629,			
    1839083521,	1357785191,	724904580,	126856154,
    -281447059,	-428193207,	-340524335,	-121030031,
    102233107,	229241732,	222704792,	111802294,
    -32603097,	-136805446,	-158183646,	-99851547,
    -2110976,	82091857,	114123724,	86026047,
    19988778,	-46544561,	-81104015,	-71266392,
    -27977417,	22982370,	55621974,	56517475,
    29680371,	-7827578,	-36105643,	-42638288,
    -27414776,	-1138166,	21646635,	30326764,
    22885733,	5570573,	-11516955,	-20066087,
    -17396765,	-6833293,	5003637,	12101070,
    11944304,	6107443,	-1346472,	-6427419,
    -7219840,	-4389457,	-249108,	2823941,
    3633542,	2471754,	556198,	-895501,
    -1327145,	-932008,	-285615,	135291,
    210453,	103079,	15032,	0
#endif
};
const Word16 pitch_inter4_2[PIT_FIR_SIZE2] =
{