Loading lib_dec/ivas_mc_paramupmix_dec.c +34 −8 Original line number Diff line number Diff line Loading @@ -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] ); Loading Loading @@ -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]; Loading Loading @@ -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; Loading @@ -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, Loading @@ -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; Loading @@ -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]; Loading @@ -780,6 +803,8 @@ static void ps_pred_process_sf( ismp++; } alpha_sf[ipar] = alpha_smp; beta_sf[ipar] = beta_smp; } return; Loading Loading @@ -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++ ) Loading lib_dec/ivas_stat_dec.h +2 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading
lib_dec/ivas_mc_paramupmix_dec.c +34 −8 Original line number Diff line number Diff line Loading @@ -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] ); Loading Loading @@ -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]; Loading Loading @@ -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; Loading @@ -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, Loading @@ -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; Loading @@ -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]; Loading @@ -780,6 +803,8 @@ static void ps_pred_process_sf( ismp++; } alpha_sf[ipar] = alpha_smp; beta_sf[ipar] = beta_smp; } return; Loading Loading @@ -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++ ) Loading
lib_dec/ivas_stat_dec.h +2 −0 Original line number Diff line number Diff line Loading @@ -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 Loading