Commit bc579bf3 authored by vaillancour's avatar vaillancour
Browse files

[Fix-038] Fix a potential decoder crash during frame lost

parent c6fdb542
Loading
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -157,6 +157,8 @@
#define SBA_CLEANING                                    /* SBA maintenance related to ticket #45 */ 


#define FIX_038_TV_FIX_DEC_CRASH_DURING_FEC             /* IVAS-038 Fixed potential decoder crash on frame lost, due to loss of synchronisation between encoder and decoder */

/* ################## End DEVELOPMENT switches ######################### */
/* clang-format on */
#endif
+8 −1
Original line number Diff line number Diff line
@@ -75,7 +75,9 @@ ivas_error ivas_cpe_dec(
    float res_buf[STEREO_DFT_N_8k];
    CPE_DEC_HANDLE hCPE;
    Decoder_State **sts;
#ifndef FIX_038_TV_FIX_DEC_CRASH_DURING_FEC
    int16_t last_tdm_LRTD_flag;
#endif
    int32_t ivas_total_brate;
    ivas_error error;

@@ -94,12 +96,13 @@ ivas_error ivas_cpe_dec(
    sts[0]->BER_detect |= st_ivas->BER_detect;
    sts[1]->BER_detect |= st_ivas->BER_detect;

#ifndef FIX_038_TV_FIX_DEC_CRASH_DURING_FEC
    last_tdm_LRTD_flag = 0;
    if ( hCPE->hStereoTD != NULL )
    {
        last_tdm_LRTD_flag = hCPE->hStereoTD->tdm_LRTD_flag;
    }

#endif
    /*------------------------------------------------------------------*
     * Read stereo technology info & audio bandwidth
     *-----------------------------------------------------------------*/
@@ -186,7 +189,11 @@ ivas_error ivas_cpe_dec(
        }
    }

#ifdef FIX_038_TV_FIX_DEC_CRASH_DURING_FEC
    if ( hCPE->element_mode == IVAS_CPE_TD )
#else
    if ( hCPE->element_mode == IVAS_CPE_TD && last_tdm_LRTD_flag != hCPE->hStereoTD->tdm_LRTD_flag )
#endif
    {
        if ( hCPE->hStereoTD->tdm_LRTD_flag )
        {
+12 −2
Original line number Diff line number Diff line
@@ -87,7 +87,11 @@ ivas_error ivas_cpe_enc(
    float currFlatness[CPE_CHANNELS];                                        /* flatness parameter                       */
    float fft_buff[CPE_CHANNELS][2 * L_FFT];                                 /* FFT buffer                               */
    int16_t tdm_ratio_idx, tdm_ratio_idx_SM;                                 /* temp. TD stereo parameters               */
#ifdef FIX_038_TV_FIX_DEC_CRASH_DURING_FEC
    int16_t tdm_SM_or_LRTD_Pri;                                              /* temp. TD stereo parameters               */
#else
    int16_t tdm_SM_or_LRTD_Pri, last_tdm_LRTD_flag;                          /* temp. TD stereo parameters               */
#endif
    float tdm_last_ratio;                                                    /* temp. TD stereo parameters               */
    int16_t nb_bits;                                                         /* number of DFT stereo side bits           */
    float fr_bands[CPE_CHANNELS][2 * NB_BANDS];                              /* energy in frequency bands                 */
@@ -121,16 +125,19 @@ ivas_error ivas_cpe_enc(
     *-----------------------------------------------------------------*/

    tdm_SM_or_LRTD_Pri = 0;
#ifndef FIX_038_TV_FIX_DEC_CRASH_DURING_FEC
    last_tdm_LRTD_flag = 0;
#endif
    tdm_ratio_idx = -1;
    tdm_ratio_idx_SM = -1;
    tdm_last_ratio = 0;

#ifndef FIX_038_TV_FIX_DEC_CRASH_DURING_FEC
    if ( hCPE->hStereoTD != NULL )
    {
        last_tdm_LRTD_flag = hCPE->hStereoTD->tdm_LRTD_flag;
    }

#endif
#ifdef DEBUGGING
    if ( hCPE->hCoreCoder[0]->ini_frame == 0 )
    {
@@ -283,8 +290,11 @@ ivas_error ivas_cpe_enc(
            stereo_dft_config( hCPE->hStereoDft == NULL ? NULL : hCPE->hStereoDft->hConfig, hCPE->element_brate, &sts[0]->bits_frame_nominal, &sts[1]->bits_frame_nominal );
        }
    }

#ifdef FIX_038_TV_FIX_DEC_CRASH_DURING_FEC
    if ( hCPE->element_mode == IVAS_CPE_TD )
#else
    if ( hCPE->element_mode == IVAS_CPE_TD && last_tdm_LRTD_flag != hCPE->hStereoTD->tdm_LRTD_flag )
#endif
    {
        if ( hCPE->hStereoTD->tdm_LRTD_flag )
        {