Commit c8fd5a42 authored by fotopoulou's avatar fotopoulou
Browse files

optimized fix for worst-case memory

parent 3f7fe8ad
Loading
Loading
Loading
Loading
Loading
+20 −20
Original line number Diff line number Diff line
@@ -198,7 +198,11 @@ void ivas_mct_core_enc(
    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];
    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];
    float powerSpec_long[MCT_MAX_CHANNELS-CPE_CHANNELS][L_FRAME48k];
    float inv_spectrum_long[MCT_MAX_CHANNELS-CPE_CHANNELS][L_FRAME48k]; /* quantized MDCT spectrum, inv ms mask mdst spectrum, scratch for MS spectra in the MS decision */
#else
    float powerSpec[MCT_MAX_CHANNELS][L_FRAME48k];
#endif
@@ -210,7 +214,9 @@ void ivas_mct_core_enc(
    float *inv_mdst_spectrum[MCT_MAX_CHANNELS][2];
    float *inv_spectrum[MCT_MAX_CHANNELS][2];
    float *mdst_spectrum[MCT_MAX_CHANNELS][2];
#ifndef NONBE_FIX_1097_SBA_DTX_BRATE_SWITCHING_ENC
    float inv_spectrum_long[MCT_MAX_CHANNELS][L_FRAME48k]; /* quantized MDCT spectrum, inv ms mask mdst spectrum, scratch for MS spectra in the MS decision */
#endif
    int16_t total_side_bits;
    int16_t chBitRatios[MCT_MAX_CHANNELS];
    Encoder_State *sts[MCT_MAX_CHANNELS];
@@ -245,7 +251,20 @@ void ivas_mct_core_enc(
        nCPE++;
    }

#ifdef NONBE_FIX_1097_SBA_DTX_BRATE_SWITCHING_ENC
    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];
    }
   
   for ( ch = CPE_CHANNELS; ch < nChannels; ch++ )
#else
    for ( ch = 0; ch < nChannels; ch++ )
#endif
    {
        inv_mdst_spectrum[ch][0] = powerSpecMsInv[ch][0] = powerSpecMsInv_long[ch];
        inv_mdst_spectrum[ch][1] = powerSpecMsInv[ch][1] = powerSpecMsInv_long[ch] + N_TCX10_MAX;
@@ -281,25 +300,6 @@ 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++ )