Commit 15ff2f4a authored by Sandesh Venkatesh's avatar Sandesh Venkatesh
Browse files

Merge branch '835-parammc-wide-range-of-buffer-values' into 'ivas-float-update'

Refactor computation of cx buffer in ParamMC to be bandwise

See merge request !552
parents 7998716f 21a16979
Loading
Loading
Loading
Loading
+12 −2
Original line number Diff line number Diff line
@@ -3990,12 +3990,22 @@ void ivas_dirac_dec_output_synthesis_cov_close(
);

void ivas_dirac_dec_output_synthesis_cov_param_mc_collect_slot(
#ifdef FIX_835_PARAMMC_BUFFER_VALUES
    float *RealBuffer,                                                          /* i  : input channel filter bank samples (real part)         */
    float *ImagBuffer,                                                          /* i  : input channel filter bank samples (imaginary part     */
    float cx[PARAM_MC_MAX_TRANSPORT_CHANS * PARAM_MC_MAX_TRANSPORT_CHANS],      /* o  : accumulated input covariance (real part)              */
    float cx_imag[PARAM_MC_MAX_TRANSPORT_CHANS * PARAM_MC_MAX_TRANSPORT_CHANS], /* o  : accumulated input covariance (imaginary part)         */
    const int16_t param_band,                                                   /* i  : parameter band                                        */
    PARAM_MC_DEC_HANDLE hParamMC,                                               /* i  : handle to Parametric MC state                         */
    const int16_t nchan_in                                                      /* i  : number of input channels                              */
#else
    float *RealBuffer,                                                                                        /* i  : input channel filter bank samples (real part)         */
    float *ImagBuffer,                                                                                        /* i  : input channel filter bank samples (imaginary part)    */
    float cx[PARAM_MC_MAX_PARAMETER_BANDS][PARAM_MC_MAX_TRANSPORT_CHANS * PARAM_MC_MAX_TRANSPORT_CHANS],      /* o  : accumulated input covariance (real part)              */
    float cx_imag[PARAM_MC_MAX_PARAMETER_BANDS][PARAM_MC_MAX_TRANSPORT_CHANS * PARAM_MC_MAX_TRANSPORT_CHANS], /* o  : accumulated input covariance (imaginary part)         */
    PARAM_MC_DEC_HANDLE hParamMC,                                                                             /* i  : handle to Parametric MC state                         */
    const int16_t nchan_in                                                                                    /* i  : number of input channels                              */
#endif
);

void ivas_dirac_dec_output_synthesis_cov_param_mc_synthesise_slot(
+1 −0
Original line number Diff line number Diff line
@@ -78,6 +78,7 @@
#define NON_BE_FIX_BASOP_819_THRESHOLD_MASA2TOTAL        /* Nokia: add fix for precision limitation in comparison with masa2total energy ratio threshold */
#define FIX_828_PORT_1152_FROM_FLT_REPO                  /* FhG: fix for issue 828 - fix uninitialized value used in BASOP */
#define NONE_BE_FIX_816_LFE_PLC_FLOAT                   /* DLB: issue 816: reduce required precision to float for LFE-PLC*/
#define FIX_835_PARAMMC_BUFFER_VALUES                   /* FhG: issue 835: wide range of buffer values for cx in ParamMC */
/* #################### End FIXES switches ############################ */

#define BASOP_NOGLOB                                    /* Disable global symbols in BASOPs, Overflow/Carry in BASOPs disabled, additional BASOPs in case of Overflow */
+28 −3
Original line number Diff line number Diff line
@@ -304,15 +304,29 @@ void ivas_dirac_dec_output_synthesis_cov_close(
 *-------------------------------------------------------------------*/

void ivas_dirac_dec_output_synthesis_cov_param_mc_collect_slot(
#ifdef FIX_835_PARAMMC_BUFFER_VALUES
    float *RealBuffer,                                                          /* i  : input channel filter bank samples (real part)         */
    float *ImagBuffer,                                                          /* i  : input channel filter bank samples (imaginary part     */
    float cx[PARAM_MC_MAX_TRANSPORT_CHANS * PARAM_MC_MAX_TRANSPORT_CHANS],      /* o  : accumulated input covariance (real part)              */
    float cx_imag[PARAM_MC_MAX_TRANSPORT_CHANS * PARAM_MC_MAX_TRANSPORT_CHANS], /* o  : accumulated input covariance (imaginary part)         */
    const int16_t param_band,                                                   /* i  : parameter band                                        */
    PARAM_MC_DEC_HANDLE hParamMC,                                               /* i  : handle to Parametric MC state                         */
    const int16_t nchan_in                                                      /* i  : number of input channels                              */
#else
    float *RealBuffer,                                                                                        /* i  : input channel filter bank samples (real part)         */
    float *ImagBuffer,                                                                                        /* i  : input channel filter bank samples (imaginary part     */
    float cx[PARAM_MC_MAX_PARAMETER_BANDS][PARAM_MC_MAX_TRANSPORT_CHANS * PARAM_MC_MAX_TRANSPORT_CHANS],      /* o  : accumulated input covariance (real part)              */
    float cx_imag[PARAM_MC_MAX_PARAMETER_BANDS][PARAM_MC_MAX_TRANSPORT_CHANS * PARAM_MC_MAX_TRANSPORT_CHANS], /* o  : accumulated input covariance (imaginary part)         */
    PARAM_MC_DEC_HANDLE hParamMC,                                                                             /* i  : handle to Parametric MC state                         */
    const int16_t nchan_in                                                                                    /* i  : number of input channels                              */
#endif
)
{
#ifdef FIX_835_PARAMMC_BUFFER_VALUES
    int16_t band_idx, ch_idx;
#else
    int16_t param_band, band_idx, ch_idx;
#endif
    int16_t brange[2];
    float real_in_buffer[PARAM_MC_MAX_BANDS_IN_PARAMETER_BAND * MAX_TRANSPORT_CHANNELS];
    float imag_in_buffer[PARAM_MC_MAX_BANDS_IN_PARAMETER_BAND * MAX_TRANSPORT_CHANNELS];
@@ -320,8 +334,10 @@ void ivas_dirac_dec_output_synthesis_cov_param_mc_collect_slot(
    float imag_buffer[PARAM_MC_MAX_TRANSPORT_CHANS * PARAM_MC_MAX_TRANSPORT_CHANS];

/* estimate input covariance */
#ifndef FIX_835_PARAMMC_BUFFER_VALUES
    for ( param_band = 0; param_band < hParamMC->num_param_bands_synth; param_band++ )
    {
#endif
        /* Already stack here instead of in the process_subframe */

        /* collect input frame */
@@ -342,10 +358,19 @@ void ivas_dirac_dec_output_synthesis_cov_param_mc_collect_slot(

        cmplx_matrix_square( real_in_buffer, imag_in_buffer, num_bands, nchan_in, real_buffer, imag_buffer );

#ifdef FIX_835_PARAMMC_BUFFER_VALUES
        v_add( cx, real_buffer, cx, nchan_in * nchan_in );

        v_add( cx_imag, imag_buffer, cx_imag, nchan_in * nchan_in );
#else
    v_add( cx[param_band], real_buffer, cx[param_band], nchan_in * nchan_in );

    v_add( cx_imag[param_band], imag_buffer, cx_imag[param_band], nchan_in * nchan_in );
#endif

#ifndef FIX_835_PARAMMC_BUFFER_VALUES
    }
#endif

    return;
}
+216 −42

File changed.

Preview size limit exceeded, changes collapsed.