Commit 615535d4 authored by vaclav's avatar vaclav
Browse files

port float issue 1211: fix crash in MASA DTX bitrate switching; under NONBE_1211_DTX_BR_SWITCHING

parent b09a7f47
Loading
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -200,6 +200,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                         */
#ifdef DEBUG_MODE_INFO
	, const int16_t ch_idx
+2 −0
Original line number Diff line number Diff line
@@ -172,6 +172,8 @@
#define NONBE_1233_HQ_CLASSIFIER_DIV_BY_ZERO            /* Eri: issue 1233: Address possible division by zero in hf_spectrum_sparseness() */

#define NONE_BE_FIX_BASOP_1044_OSBA_PRERENDER_MIX_GAINS /* DLB: adjust prerendering and mixing gain in OSBA encoder. This is fix to float codes*/
#define NONBE_1211_DTX_BR_SWITCHING                     /* VA: port float issue 1211: fix crash in MASA DTX bitrate switching */

/* #################### End FIXES switches ############################ */

#define BASOP_NOGLOB                                    /* Disable global symbols in BASOPs, Overflow/Carry in BASOPs disabled, additional BASOPs in case of Overflow */
+13 −10
Original line number Diff line number Diff line
@@ -3903,6 +3903,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
+28 −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,17 +90,31 @@ 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;
        last_br_flag = 1;
#ifndef NONBE_1211_DTX_BR_SWITCHING
        br_dtx_flag = 1;
#endif
    }
    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 );
        br_dtx_flag = 0;
#endif
    }

    /* Initialization */
@@ -127,6 +144,7 @@ void dtx(
             last_br_cng_flag )
        {
            st->total_brate = st->last_total_brate_cng;

            if ( !( st->total_brate == ACELP_7k20 && st->Opt_SC_VBR ) )
            {
                st->Opt_SC_VBR = 0;
@@ -170,6 +188,9 @@ void dtx(
     * Select SID or FRAME_NO_DATA frame if DTX is enabled
     *------------------------------------------------------------------------*/

#ifdef NONBE_1211_DTX_BR_SWITCHING
    br_dtx_flag = 1;
#endif
    if ( st->dtx_sce_sba == 0 )
    {
        br_dtx_flag = ( st->element_mode == EVS_MONO && st->total_brate <= MAX_BRATE_DTX_EVS ) ||
@@ -258,6 +279,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