Commit 31f625e1 authored by SCHUGM's avatar SCHUGM
Browse files

for paramupmix jbm -vs 100 compared to normal operation should give identical output

parent 60a5fe03
Loading
Loading
Loading
Loading
Loading
+34 −8
Original line number Diff line number Diff line
@@ -56,7 +56,7 @@
static void ps_pred_process( MC_PARAMUPMIX_DEC_HANDLE hMCParamUpmix, float qmf_mod_re[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], float qmf_mod_im[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], float qmf_side_re[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], float qmf_side_im[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], const int16_t ch );

#ifdef JBM_PARAMUPMIX
static void ps_pred_process_sf( MC_PARAMUPMIX_DEC_HANDLE hMCParamUpmix, DECODER_TC_BUFFER_HANDLE hTcBuffer, float qmf_mod_re[JBM_CLDFB_SLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX], float qmf_mod_im[JBM_CLDFB_SLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX], float qmf_side_re[JBM_CLDFB_SLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX], float qmf_side_im[JBM_CLDFB_SLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX], float *param_interpol, const int16_t ch );
static void ps_pred_process_sf( MC_PARAMUPMIX_DEC_HANDLE hMCParamUpmix, DECODER_TC_BUFFER_HANDLE hTcBuffer, float qmf_mod_re[JBM_CLDFB_SLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX], float qmf_mod_im[JBM_CLDFB_SLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX], float qmf_side_re[JBM_CLDFB_SLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX], float qmf_side_im[JBM_CLDFB_SLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX], float *param_interpol, const int16_t ch, const int16_t slots_rendered );

static void ivas_mc_paramupmix_dec_sf( Decoder_Struct *st_ivas, float *output_f[MAX_OUTPUT_CHANNELS] );

@@ -376,6 +376,12 @@ void ivas_mc_paramupmix_dec_render(
    assert( slots_to_render == 0 );
#endif

    for ( ch = 0; ch < MC_PARAMUPMIX_COMBINATIONS; ch++ )
    {
        mvr2r( hMCParamUpmix->alpha_prev[ch], hMCParamUpmix->alpha_sf[ch], IVAS_MAX_NUM_BANDS );
        mvr2r( hMCParamUpmix->beta_prev[ch], hMCParamUpmix->beta_sf[ch], IVAS_MAX_NUM_BANDS );
    }

    for ( subframe_idx = first_sf; subframe_idx < last_sf; subframe_idx++ )
    {
        int16_t n_samples_sf = slot_size * st_ivas->hTcBuffer->subframe_nbslots[subframe_idx];
@@ -733,7 +739,8 @@ static void ps_pred_process_sf(
    float qmf_side_re[JBM_CLDFB_SLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX], /* in/out */
    float qmf_side_im[JBM_CLDFB_SLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX],
    float *param_interpol,
    const int16_t ch )
    const int16_t ch,
    const int16_t slots_rendered )
{
    float vmre, vmim, vsre, vsim;
    int16_t iqmf, ipar, ismp, iismp;
@@ -742,6 +749,10 @@ static void ps_pred_process_sf(
    float *beta1, *beta2;
    float *alpha_prev = hMCParamUpmix->alpha_prev[ch];
    float *beta_prev = hMCParamUpmix->beta_prev[ch];
    float *alpha_sf = hMCParamUpmix->alpha_sf[ch];
    float *beta_sf = hMCParamUpmix->beta_sf[ch];
    float dalpha, dbeta, ifac;
    float alpha_start[IVAS_MAX_NUM_BANDS], beta_start[IVAS_MAX_NUM_BANDS];

    const int16_t qmf_to_par_band[] = {
        0, 1, 2, 3, 4, 5, 5, 6, 6, 7,
@@ -752,9 +763,10 @@ static void ps_pred_process_sf(
        11, 11, 11, 11, 11, 11, 11, 11, 11, 11
    };

    mvr2r(alpha_sf, alpha_start, IVAS_MAX_NUM_BANDS);
    mvr2r(beta_sf, beta_start, IVAS_MAX_NUM_BANDS);
    for ( iqmf = 0; iqmf < CLDFB_NO_CHANNELS_MAX; iqmf++ )
    {
        /* For changing no of parameter bands (ipar1 != ipar2), TIGGER_FRAMING assumed */
        ipar = qmf_to_par_band[iqmf];
        alpha1 = alpha_prev;
        beta1 = beta_prev;
@@ -762,13 +774,24 @@ static void ps_pred_process_sf(
        ismp = 0;
        alpha2 = hMCParamUpmix->alphas[ch];
        beta2 = hMCParamUpmix->betas[ch];
        alpha_smp = alpha1[ipar];
        beta_smp = beta1[ipar];
        alpha_smp = alpha_start[ipar];
        beta_smp = beta_start[ipar];

        for ( iismp = 0; iismp < hTcBuffer->subframe_nbslots[hTcBuffer->subframes_rendered]; iismp++ )
        {
            alpha_smp = alpha1[ipar] + ( alpha2[ipar] - alpha1[ipar] ) * param_interpol[iismp];
            beta_smp = beta1[ipar] + ( beta2[ipar] - beta1[ipar] ) * param_interpol[iismp];
            if ((slots_rendered == 0) && (iismp == 0))
            {
                ifac = param_interpol[iismp];
            }
            else
            {
                ifac = param_interpol[iismp] - param_interpol[iismp-1];
            }
            dalpha = (alpha2[ipar] - alpha1[ipar]) * ifac; 
            dbeta = (beta2[ipar] - beta1[ipar]) * ifac; 

            alpha_smp += dalpha;
            beta_smp += dbeta;

            vmre = qmf_mod_re[ismp][iqmf];
            vmim = qmf_mod_im[ismp][iqmf];
@@ -780,6 +803,8 @@ static void ps_pred_process_sf(

            ismp++;
        }
        alpha_sf[ipar] = alpha_smp;
        beta_sf[ipar] = beta_smp;
    }

    return;
@@ -827,7 +852,8 @@ static void ivas_mc_paramupmix_dec_sf(
                            Cldfb_RealBuffer[2 * ch + 1], /* in/out decorr */
                            Cldfb_ImagBuffer[2 * ch + 1],
                            &hMCParamUpmix->param_interpolator[st_ivas->hTcBuffer->slots_rendered],
                            ch );
                            ch, 
                            st_ivas->hTcBuffer->slots_rendered );

        /*-- m, s -> l, r ----------------------------*/
        for ( slot_idx = 0; slot_idx < st_ivas->hTcBuffer->subframe_nbslots[st_ivas->hTcBuffer->subframes_rendered]; slot_idx++ )
+2 −0
Original line number Diff line number Diff line
@@ -804,6 +804,8 @@ typedef struct ivas_mc_paramupmix_dec_data_structure
    float *pcm_delay[MC_PARAMUPMIX_MAX_TRANSPORT_CHANS];
#ifdef JBM_PARAMUPMIX
    float *param_interpolator;
    float alpha_sf[MC_PARAMUPMIX_COMBINATIONS][IVAS_MAX_NUM_BANDS];
    float beta_sf[MC_PARAMUPMIX_COMBINATIONS][IVAS_MAX_NUM_BANDS];
    int16_t free_param_interpolator;
#endif