Commit 8672f295 authored by fotopoulou's avatar fotopoulou
Browse files

[fix] for issue 1097 out of bound buffers when switching from SID frame

parent 99397abc
Loading
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -3059,7 +3059,11 @@ void mctStereoIGF_enc(
    MCT_ENC_HANDLE hMCT,                                        /* i/o: MCT encoder structure                   */
    Encoder_State **sts,                                        /* i/o: encoder state structure                 */
    float *orig_spectrum[MCT_MAX_CHANNELS][NB_DIV],             /* i  : MDCT spectrum for ITF                   */
#ifdef NONBE_FIX_1097_SBA_DTX_BRATE_SWITCHING_ENC 
    float *powerSpec[MCT_MAX_CHANNELS],                         /* i/o: MDCT^2 + MDST^2 spectrum,or estimate    */
#else
    float powerSpec[MCT_MAX_CHANNELS][L_FRAME48k],              /* i/o: MDCT^2 + MDST^2 spectrum,or estimate    */
#endif
    float *powerSpecMsInv[MCT_MAX_CHANNELS][NB_DIV],            /* i  : same as above but for inverse spect.    */
    float *inv_spectrum[MCT_MAX_CHANNELS][NB_DIV],              /* i  : inverse spectrum                        */
    const int16_t sp_aud_decision0[MCT_MAX_CHANNELS]            /* i  : speech audio decision                   */
+1 −0
Original line number Diff line number Diff line
@@ -183,6 +183,7 @@
#define NONBE_FIX_1087_OOB_SBA_DTX_RS                   /* VA: issue 1087: Extend the length of the buffer for MCT decoding to avoid out-of-bound writing in SBA SID bitrate switching decoding */

#define NONBE_FIX_1074_NOBJ_SIGNAL_OMASA_LBR            /* Nok: issue 1074 fixing number of objects signaling in OMASA low rate */
#define NONBE_FIX_1097_SBA_DTX_BRATE_SWITCHING_ENC      /* FhG: fix out-of-bound errors when switching from SID frame to active frame*/
/* ##################### End NON-BE switches ########################### */

/* ################## End DEVELOPMENT switches ######################### */
+29 −0
Original line number Diff line number Diff line
@@ -197,8 +197,15 @@ void ivas_mct_core_enc(
    int16_t i, cpe_id, n, nAvailBits;
    int16_t nCPE;
    float *orig_spectrum[MCT_MAX_CHANNELS][2]; /* Pointers to MDCT output for a short block (L/R) */
#ifdef NONBE_FIX_1097_SBA_DTX_BRATE_SWITCHING_ENC 
    float powerSpec_long[MCT_MAX_CHANNELS][L_FRAME48k];
#else
    float powerSpec[MCT_MAX_CHANNELS][L_FRAME48k];
#endif
    float powerSpecMsInv_long[MCT_MAX_CHANNELS][L_FRAME48k]; /* MS inv power spectrum, also inverse MDST spectrum */
#ifdef NONBE_FIX_1097_SBA_DTX_BRATE_SWITCHING_ENC
    float *powerSpec[MCT_MAX_CHANNELS];
#endif
    float *powerSpecMsInv[MCT_MAX_CHANNELS][2];
    float *inv_mdst_spectrum[MCT_MAX_CHANNELS][2];
    float *inv_spectrum[MCT_MAX_CHANNELS][2];
@@ -244,6 +251,9 @@ void ivas_mct_core_enc(
        inv_mdst_spectrum[ch][1] = powerSpecMsInv[ch][1] = powerSpecMsInv_long[ch] + N_TCX10_MAX;
        inv_spectrum[ch][0] = inv_spectrum_long[ch];
        inv_spectrum[ch][1] = inv_spectrum_long[ch] + N_TCX10_MAX;
#ifdef NONBE_FIX_1097_SBA_DTX_BRATE_SWITCHING_ENC
        powerSpec[ch] = powerSpec_long[ch];
#endif
    }

    for ( cpe_id = 0, i = 0; cpe_id < nCPE; cpe_id++ )
@@ -271,6 +281,25 @@ void ivas_mct_core_enc(
        }
    }

#ifdef NONBE_FIX_1097_SBA_DTX_BRATE_SWITCHING_ENC
    /* for bitrate switching with DTX on, larger buffers are needed to compute the power spectrum*/
    if ( sts[0]->last_core == ACELP_CORE )
    {
        float powerSpecMsInv_long_cpe0[CPE_CHANNELS][L_FRAME_PLUS];
        float inv_spectrum_long_cpe0[CPE_CHANNELS][L_FRAME_PLUS];
        float powerSpec_long_cpe0[CPE_CHANNELS][L_FRAME_PLUS];

        for ( ch = 0; ch < CPE_CHANNELS; ch++ )
        {
            inv_mdst_spectrum[ch][0] = powerSpecMsInv[ch][0] = powerSpecMsInv_long_cpe0[ch];
            inv_mdst_spectrum[ch][1] = powerSpecMsInv[ch][1] = powerSpecMsInv_long_cpe0[ch] + N_TCX10_MAX;
            inv_spectrum[ch][0] = inv_spectrum_long_cpe0[ch];
            inv_spectrum[ch][1] = inv_spectrum_long_cpe0[ch] + N_TCX10_MAX;
            powerSpec[ch] = powerSpec_long_cpe0[ch];
        }
    }
#endif

    hBstr = sts[0]->hBstr;

    for ( ch = 0; ch < (int16_t) ( hMCT->nchan_out_woLFE * 0.5 ); ch++ )
+4 −0
Original line number Diff line number Diff line
@@ -817,7 +817,11 @@ void mctStereoIGF_enc(
    MCT_ENC_HANDLE hMCT,                             /* i/o: MCT encoder structure               */
    Encoder_State **sts,                             /* i/o: encoder state structure             */
    float *orig_spectrum[MCT_MAX_CHANNELS][2],       /* i  : MDCT spectrum for ITF               */
#ifdef NONBE_FIX_1097_SBA_DTX_BRATE_SWITCHING_ENC
    float *powerSpec[MCT_MAX_CHANNELS],             /* i/o: MDCT^2 + MDST^2 spectrum,or estimate*/
#else
    float powerSpec[MCT_MAX_CHANNELS][L_FRAME48k],   /* i/o: MDCT^2 + MDST^2 spectrum,or estimate*/
#endif
    float *powerSpecMsInv[MCT_MAX_CHANNELS][NB_DIV], /* i  : same as above but for inverse spect.*/
    float *inv_spectrum[MCT_MAX_CHANNELS][NB_DIV],   /* i  : inverse spectrum                    */
    const int16_t sp_aud_decision0[MCT_MAX_CHANNELS] /* i  : speech audio decision               */