Commit 0d803d80 authored by vaclav's avatar vaclav
Browse files

issue 1211: fix crash in MASA DTX bitrate switching - possible fix, under...

issue 1211: fix crash in MASA DTX bitrate switching - possible fix, under NONBE_1211_DTX_BR_SWITCHING
parent 7ab76d69
Loading
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -203,6 +203,9 @@ ivas_error pre_proc_front_ivas(
    const int16_t front_vad_dtx_flag,                           /* i  : front-VAD DTX flag to overwrite VAD decision*/
    const IVAS_FORMAT ivas_format,                              /* i  : IVAS format                                */
    const int16_t MCT_flag,                                     /* i  : hMCT handle allocated (1) or not (0)       */
#ifdef NONBE_1211_DTX_BR_SWITCHING
    const int32_t last_ivas_total_brate,                        /* i  : last IVAS total bitrate                    */
#endif
    const int32_t ivas_total_brate                              /* i  : IVAS total bitrate                         */
);

+1 −1
Original line number Diff line number Diff line
@@ -198,7 +198,7 @@
#define FIX_1206_ZERO_OUT_IMDCT_BUFFERS_FOR_MCT_IGNORE  /* FhG: zero out all relevant imdct buffers in MCT decoding of channels with mct_chan_mode == MCT_CHAN_MODE_IGNORE */
#define NONBE_1199_OMASA_JBM_BRATE_SW_FLUSH             /* VA: issue 1199: fix bug in renderer flush in OMASA JBM bitrate switching */
#define NONBE_1200_ISM_JBM_BRATE_SW_FLUSH               /* VA: issue 1200: fix bug in renderer flush in ISM JBM bitrate switching */

#define NONBE_1211_DTX_BR_SWITCHING                     /* VA: issue 1211: fix crash in MASA DTX bitrate switching */

/* ##################### End NON-BE switches ########################### */

+5 −2
Original line number Diff line number Diff line
@@ -3919,6 +3919,9 @@ void td_cng_enc_init(

void dtx(
    Encoder_State *st, /* i/o: encoder state structure                     */
#ifdef NONBE_1211_DTX_BR_SWITCHING
    const int32_t last_ivas_total_brate, /* i  : last IVAS total bitrate                */
#endif
    const int32_t ivas_total_brate, /* i  : IVAS total bitrate                          */
    const int16_t vad,              /* i  : VAD flag for DTX                            */
    const float speech[]            /* i  : Pointer to the speech frame                 */
+6 −0
Original line number Diff line number Diff line
@@ -310,7 +310,13 @@ void amr_wb_enc(
    {
        st->fd_cng_reset_flag = 0;
    }

#ifdef NONBE_1211_DTX_BR_SWITCHING
    dtx( st, -1, -1, vad_flag_dtx, inp );
#else
    dtx( st, -1, vad_flag_dtx, inp );
#endif

    /*----------------------------------------------------------------*
     * Noise energy down-ward update and total noise energy estimation
     * Long-term energies and relative frame energy updates
+29 −1
Original line number Diff line number Diff line
@@ -79,6 +79,9 @@ static void update_SID_cnt( DTX_ENC_HANDLE hDtxEnc, const int32_t core_brate, co

void dtx(
    Encoder_State *st, /* i/o: encoder state structure            */
#ifdef NONBE_1211_DTX_BR_SWITCHING
    const int32_t last_ivas_total_brate, /* i  : last IVAS total bitrate            */
#endif
    const int32_t ivas_total_brate, /* i  : IVAS total bitrate                 */
    const int16_t vad,              /* i  : VAD flag for DTX                   */
    const float speech[]            /* i  : Pointer to the speech frame        */
@@ -87,6 +90,12 @@ void dtx(
    float alpha;
    DTX_ENC_HANDLE hDtxEnc = st->hDtxEnc;
    int16_t last_br_cng_flag, last_br_flag, br_dtx_flag;
#ifdef NONBE_1211_DTX_BR_SWITCHING
    int32_t total_brate_ref;

    total_brate_ref = st->total_brate;
#endif

    if ( st->dtx_sce_sba != 0 )
    {
        last_br_cng_flag = 1;
@@ -96,7 +105,13 @@ void dtx(
    else
    {
        last_br_cng_flag = st->last_total_brate_cng <= MAX_BRATE_DTX_EVS || st->lp_noise < 15 || ( st->element_mode == IVAS_SCE && st->last_total_brate_cng <= MAX_BRATE_DTX_IVAS );
#ifdef NONBE_1211_DTX_BR_SWITCHING
        last_br_flag = ( st->element_mode == EVS_MONO && st->last_total_brate <= MAX_BRATE_DTX_EVS ) ||
                       ( st->element_mode != EVS_MONO && last_ivas_total_brate <= MAX_BRATE_DTX_IVAS ) ||
                       st->lp_noise < 15;
#else
        last_br_flag = st->last_total_brate <= MAX_BRATE_DTX_EVS || st->lp_noise < 15 || ( st->element_mode == IVAS_SCE && st->last_total_brate <= MAX_BRATE_DTX_IVAS );
#endif
        br_dtx_flag = 0;
    }

@@ -142,6 +157,7 @@ void dtx(
             last_br_flag )
        {
            st->total_brate = st->last_total_brate;

            if ( !( st->total_brate == ACELP_7k20 && st->Opt_SC_VBR ) )
            {
                st->Opt_SC_VBR = 0;
@@ -172,9 +188,15 @@ void dtx(

    if ( st->dtx_sce_sba == 0 )
    {
#ifdef NONBE_1211_DTX_BR_SWITCHING
        br_dtx_flag = ( st->element_mode == EVS_MONO && st->total_brate <= MAX_BRATE_DTX_EVS ) ||
                      ( st->element_mode != EVS_MONO && ivas_total_brate <= MAX_BRATE_DTX_IVAS ) ||
                      st->lp_noise < 15;
#else
        br_dtx_flag = ( st->element_mode == EVS_MONO && st->total_brate <= MAX_BRATE_DTX_EVS ) ||
                      ( st->element_mode != EVS_MONO && ivas_total_brate <= MAX_BRATE_DTX_IVAS ) ||
                      st->lp_noise < 15;
#endif
    }

    if ( st->Opt_DTX_ON && vad == 0 &&
@@ -258,6 +280,12 @@ void dtx(
            reset_indices_enc( st->hBstr, st->hBstr->nb_ind_tot );
        }
    }
#ifdef NONBE_1211_DTX_BR_SWITCHING
    else if ( st->element_mode != EVS_MONO )
    {
        st->total_brate = total_brate_ref;
    }
#endif

    /*------------------------------------------------------------------------*
     * Reset counters when in active frame (neither SID nor FRAME_NO_DATA frame)
Loading