Commit b1903c30 authored by Sandesh Venkatesh's avatar Sandesh Venkatesh
Browse files

Fix for crash for stv stream occuring in GenTransition_WB_fixed

[x] In ivas_core_dec when Scaling from 16 -> 32 or 32 -> 16 was
done for some buffers, length and exponent were interchanged
which was leading to buffers having incorrect values.
[x] Code clean up in hf_synth_fx.c.
parent 02a63704
Loading
Loading
Loading
Loading
Loading
+1 −37
Original line number Diff line number Diff line
@@ -47,7 +47,7 @@ static void AdaptiveStartBand_fx( Word16 *start_band, const Word32 rate, const
 * - initialization of 400 Hz high pass filter
 * - initialization of band pass 6kHz to 7kHz FIR filter
 *-------------------------------------------------------------------*/
#ifdef IVAS_FLOAT_FIXED

void hf_synth_init_fx(
    ZERO_BWE_DEC_HANDLE hBWE_zero /* o  : zero BWE decoder handle */
)
@@ -75,41 +75,6 @@ void hf_synth_reset_fx(

    set16_fx(hBWE_zero->mem_hf_fx, 0, ( L_FIR - 1 ) );
    set16_fx(hBWE_zero->mem_syn_hf_fx, 0, M);
    set16_fx(hBWE_zero->mem_hp400_fx, 0, 4);

    set16_fx(hBWE_zero->delay_syn_hf_fx, 0, NS2SA(16000, DELAY_CLDFB_NS));
    set16_fx(hBWE_zero->mem_hp_interp_fx, 0, INTERP_3_1_MEM_LEN);

    return;
}
#else
void hf_synth_init_fx(
    ZERO_BWE_DEC_HANDLE hBWE_zero /* o  : zero BWE decoder handle */
)
{

    hBWE_zero->seed2 = RANDOM_INITSEED;
    set16_fx(hBWE_zero->mem_hf_fx, 0, 2 * L_FILT16k);
    set16_fx(hBWE_zero->mem_syn_hf_fx, 0, M);
    set16_fx(hBWE_zero->mem_hp400_fx, 0, 4);
    set16_fx(hBWE_zero->delay_syn_hf_fx, 0, NS2SA(16000, DELAY_CLDFB_NS));
    set16_fx(hBWE_zero->mem_hp_interp_fx, 0, INTERP_3_1_MEM_LEN);

    return;
}
void hf_synth_reset_fx(
    ZERO_BWE_DEC_HANDLE hBWE_zero /* o  : zero BWE decoder handle */
)
{
    Word16 i;

    FOR(i = 0; i < L_FRAME16k; i++)
    {
        Random(&hBWE_zero->seed2);
    }

    set16_fx(hBWE_zero->mem_hf_fx, 0, 2 * L_FILT16k);
    set16_fx(hBWE_zero->mem_syn_hf_fx, 0, M);
    set16_fx(hBWE_zero->mem_hp400_fx, 0, 4);  /* TBV -> mem_hp400_fx has a length of 6, but only 4 values initialized in EVS ??? */

    set16_fx(hBWE_zero->delay_syn_hf_fx, 0, NS2SA(16000, DELAY_CLDFB_NS));
@@ -117,7 +82,6 @@ void hf_synth_reset_fx(

    return;
}
#endif

/*---------------------------------------------------------------------*
 * hf_synth()
+11 −10
Original line number Diff line number Diff line
@@ -1361,21 +1361,21 @@ ivas_error ivas_core_dec(
            }

            /* Memories  Scaling */
            Copy_Scale_sig_32_16(st->hBWE_TD->syn_overlap_fx_32, st->hBWE_TD->syn_overlap_fx, sub(11, st->prev_Q_bwe_syn2), L_SHB_LAHEAD);
            Copy_Scale_sig_32_16(st->hBWE_TD->old_tbe_synth_fx_32, st->hBWE_TD->old_tbe_synth_fx, sub(11, st->prev_Qx), L_SHB_TRANSITION_LENGTH);
            Copy_Scale_sig_32_16(st->hBWE_TD->state_lsyn_filt_dwn_shb_fx_32, st->hBWE_TD->state_lsyn_filt_dwn_shb_fx, sub(11, st->prev_Qx), add(shl(ALLPASSSECTIONS_STEEP, 1), 1));
            Copy_Scale_sig_32_16(st->hBWE_TD->state_lsyn_filt_shb_fx_32, st->hBWE_TD->state_lsyn_filt_shb_fx, sub(11, st->prev_Qx), add(shl(ALLPASSSECTIONS_STEEP, 1), 1));
            Copy_Scale_sig_32_16(st->hBWE_TD->mem_resamp_HB_fx_32, st->hBWE_TD->mem_resamp_HB_fx, sub(11, st->prev_Qx), INTERP_3_1_MEM_LEN);
            Copy_Scale_sig_32_16(st->hBWE_TD->syn_overlap_fx_32, st->hBWE_TD->syn_overlap_fx, L_SHB_LAHEAD, st->prev_Q_bwe_syn2 - Q11);
            Copy_Scale_sig_32_16(st->hBWE_TD->old_tbe_synth_fx_32, st->hBWE_TD->old_tbe_synth_fx, L_SHB_TRANSITION_LENGTH, st->prev_Qx - Q11);
            Copy_Scale_sig_32_16(st->hBWE_TD->state_lsyn_filt_dwn_shb_fx_32, st->hBWE_TD->state_lsyn_filt_dwn_shb_fx, shl(ALLPASSSECTIONS_STEEP, 1), st->prev_Qx - Q11);
            Copy_Scale_sig_32_16(st->hBWE_TD->state_lsyn_filt_shb_fx_32, st->hBWE_TD->state_lsyn_filt_shb_fx, shl(ALLPASSSECTIONS_STEEP, 1), st->prev_Qx - Q11);
            Copy_Scale_sig_32_16(st->hBWE_TD->mem_resamp_HB_fx_32, st->hBWE_TD->mem_resamp_HB_fx, INTERP_3_1_MEM_LEN, st->prev_Qx - Q11);
        }

        /* Memories  Re-Scaling */
        IF(st->hBWE_TD != NULL)
        {
          Copy_Scale_sig_16_32(st->hBWE_TD->syn_overlap_fx, st->hBWE_TD->syn_overlap_fx_32, negate(sub(11, st->prev_Q_bwe_syn2)), L_SHB_LAHEAD);
          Copy_Scale_sig_16_32(st->hBWE_TD->old_tbe_synth_fx, st->hBWE_TD->old_tbe_synth_fx_32, negate(sub(11, st->prev_Qx)), L_SHB_TRANSITION_LENGTH);
          Copy_Scale_sig_16_32(st->hBWE_TD->state_lsyn_filt_dwn_shb_fx, st->hBWE_TD->state_lsyn_filt_dwn_shb_fx_32, negate(sub(11, st->prev_Qx)), add(shl(ALLPASSSECTIONS_STEEP, 1), 1));
          Copy_Scale_sig_16_32(st->hBWE_TD->state_lsyn_filt_shb_fx, st->hBWE_TD->state_lsyn_filt_shb_fx_32, negate(sub(11, st->prev_Qx)), add(shl(ALLPASSSECTIONS_STEEP, 1), 1));
          Copy_Scale_sig_16_32(st->hBWE_TD->mem_resamp_HB_fx, st->hBWE_TD->mem_resamp_HB_fx_32, sub(11, st->prev_Qx), INTERP_3_1_MEM_LEN);
          Copy_Scale_sig_16_32(st->hBWE_TD->syn_overlap_fx, st->hBWE_TD->syn_overlap_fx_32, L_SHB_LAHEAD, Q11 - st->prev_Q_bwe_syn2);
          Copy_Scale_sig_16_32(st->hBWE_TD->old_tbe_synth_fx, st->hBWE_TD->old_tbe_synth_fx_32, L_SHB_TRANSITION_LENGTH, Q11 - st->prev_Qx);
          Copy_Scale_sig_16_32(st->hBWE_TD->state_lsyn_filt_dwn_shb_fx, st->hBWE_TD->state_lsyn_filt_dwn_shb_fx_32, shl(ALLPASSSECTIONS_STEEP, 1), Q11 - st->prev_Qx);
          Copy_Scale_sig_16_32(st->hBWE_TD->state_lsyn_filt_shb_fx, st->hBWE_TD->state_lsyn_filt_shb_fx_32, shl(ALLPASSSECTIONS_STEEP, 1), Q11 - st->prev_Qx);
          Copy_Scale_sig_16_32(st->hBWE_TD->mem_resamp_HB_fx, st->hBWE_TD->mem_resamp_HB_fx_32, INTERP_3_1_MEM_LEN, Q11 - st->prev_Qx);
          Copy(st->hBWE_TD->mem_resamp_HB_fx, st->hBWE_TD->state_32and48k_WB_upsample_fx, 2 * ALLPASSSECTIONS_STEEP);
        }
        /*---------------------------------------------------------------------*
@@ -1535,6 +1535,7 @@ ivas_error ivas_core_dec(
            Q_hb_synth_fx = ivas_wb_bwe_dec_fx( st, output_fx_16[n], synth_fx_16[n], hb_synth_fx_16[n], use_cldfb_for_dft, output_frame, voice_factors_fx[n], pitch_buf_fx[n], &Q_synth_fx );
        }

        /* Memories  Re-Scaling */
        Copy_Scale_sig_16_32( hb_synth_fx_16[n], hb_synth_fx32, L_FRAME48k, Q11 - Q_hb_synth_fx );
        Copy_Scale_sig_16_32( output_fx_16[n], output_fx32, L_FRAME48k, Q11 - Q_input );
        Copy_Scale_sig_16_32( synth_fx_16[n], synth_fx32, L_FRAME48k, Q11 - Q_synth_fx );