Loading lib_dec/ivas_jbm_dec.c +6 −0 Original line number Diff line number Diff line Loading @@ -670,6 +670,12 @@ ivas_error ivas_jbm_dec_feed_tc_to_renderer( { ivas_jbm_dec_td_renderers_adapt_subframes( st_ivas ); } #ifdef JBM_PARAMUPMIX else if ( st_ivas->mc_mode == MC_MODE_PARAMUPMIX ) { ivas_param_upmix_dec_decorr_subframes( st_ivas ); } #endif else if ( st_ivas->mc_mode == MC_MODE_PARAMMC ) { ivas_param_mc_dec_digest_tc( st_ivas, (uint8_t) n_render_timeslots, p_data_f ); Loading lib_dec/ivas_mc_paramupmix_dec.c +88 −0 Original line number Diff line number Diff line Loading @@ -427,7 +427,95 @@ void ivas_mc_paramupmix_dec_close( return; } #ifdef JBM_PARAMUPMIX /*------------------------------------------------------------------------- * ivas_param_upmix_dec_decorr_subframes() * * *------------------------------------------------------------------------*/ static void paramupmix_td_decorr_process_jbm( ivas_td_decorr_state_t *hTdDecorr[], /* i/o: SPAR Covar. decoder handle */ float *pcm_in[], /* i : input audio channels */ float **pp_out_pcm, /* o : output audio channels */ const int16_t output_frame /* i : output frame length */ ) { int16_t j, k; int16_t offset; float in_duck_gain[L_FRAME48k], out_duck_gain[L_FRAME48k]; offset = (int16_t) ( output_frame * FRAMES_PER_SEC * IVAS_DECORR_PARM_LOOKAHEAD_TAU ); /* Look-ahead delay */ for ( k = 0; k < MC_PARAMUPMIX_COMBINATIONS; k++ ) { mvr2r( pcm_in[k], pp_out_pcm[k], output_frame ); delay_signal( pp_out_pcm[k], output_frame, hTdDecorr[k]->look_ahead_buf, offset ); /* In ducking gains */ if ( hTdDecorr[k]->ducking_flag ) { ivas_td_decorr_get_ducking_gains( hTdDecorr[k]->pTrans_det, pcm_in[k], in_duck_gain, out_duck_gain, output_frame, 0 ); for ( j = 0; j < output_frame; j++ ) { pp_out_pcm[k][j] = pp_out_pcm[k][j] * in_duck_gain[j]; } } /* All pass delay section */ ivas_td_decorr_APD_iir_filter( &hTdDecorr[k]->APD_filt_state[0], pp_out_pcm[k], hTdDecorr[k]->num_apd_sections, output_frame ); /* Out ducking gains */ if ( hTdDecorr[k]->ducking_flag ) { for ( j = 0; j < output_frame; j++ ) { pp_out_pcm[k][j] = pp_out_pcm[k][j] * out_duck_gain[j]; } } } return; } void ivas_param_upmix_dec_decorr_subframes( Decoder_Struct *st_ivas /* i/o: IVAS decoder handle */ ) { MC_PARAMUPMIX_DEC_HANDLE hMCParamUpmix; int16_t i, ch; int32_t output_Fs; int16_t output_frame; float Pcm_decorr[MC_PARAMUPMIX_COMBINATIONS][L_FRAME48k]; /* decorrelated channels */ float *pPcm_temp[MC_PARAMUPMIX_COMBINATIONS * 2]; /* decorrelated and undecorrelated*/ float *p_tc[MC_PARAMUPMIX_MAX_INPUT_CHANS]; hMCParamUpmix = st_ivas->hMCParamUpmix; assert( hMCParamUpmix ); push_wmops( "ivas_param_upmix_dec_decorr_subframes" ); output_Fs = st_ivas->hDecoderConfig->output_Fs; output_frame = (int16_t) ( output_Fs / FRAMES_PER_SEC ); for ( ch = 0; ch < MC_PARAMUPMIX_MAX_INPUT_CHANS; ch++ ) { p_tc[ch] = st_ivas->hTcBuffer->tc[ch]; } for ( i = 0; i < MC_PARAMUPMIX_COMBINATIONS; i++ ) { pPcm_temp[i] = p_tc[8+i]; /* decorrelated */ } paramupmix_td_decorr_process_jbm( hMCParamUpmix->hTdDecorr, &( p_tc[4] ), pPcm_temp, output_frame ); pop_wmops(); return; } #endif /*****************************************************************************************/ /* local functions */ Loading Loading
lib_dec/ivas_jbm_dec.c +6 −0 Original line number Diff line number Diff line Loading @@ -670,6 +670,12 @@ ivas_error ivas_jbm_dec_feed_tc_to_renderer( { ivas_jbm_dec_td_renderers_adapt_subframes( st_ivas ); } #ifdef JBM_PARAMUPMIX else if ( st_ivas->mc_mode == MC_MODE_PARAMUPMIX ) { ivas_param_upmix_dec_decorr_subframes( st_ivas ); } #endif else if ( st_ivas->mc_mode == MC_MODE_PARAMMC ) { ivas_param_mc_dec_digest_tc( st_ivas, (uint8_t) n_render_timeslots, p_data_f ); Loading
lib_dec/ivas_mc_paramupmix_dec.c +88 −0 Original line number Diff line number Diff line Loading @@ -427,7 +427,95 @@ void ivas_mc_paramupmix_dec_close( return; } #ifdef JBM_PARAMUPMIX /*------------------------------------------------------------------------- * ivas_param_upmix_dec_decorr_subframes() * * *------------------------------------------------------------------------*/ static void paramupmix_td_decorr_process_jbm( ivas_td_decorr_state_t *hTdDecorr[], /* i/o: SPAR Covar. decoder handle */ float *pcm_in[], /* i : input audio channels */ float **pp_out_pcm, /* o : output audio channels */ const int16_t output_frame /* i : output frame length */ ) { int16_t j, k; int16_t offset; float in_duck_gain[L_FRAME48k], out_duck_gain[L_FRAME48k]; offset = (int16_t) ( output_frame * FRAMES_PER_SEC * IVAS_DECORR_PARM_LOOKAHEAD_TAU ); /* Look-ahead delay */ for ( k = 0; k < MC_PARAMUPMIX_COMBINATIONS; k++ ) { mvr2r( pcm_in[k], pp_out_pcm[k], output_frame ); delay_signal( pp_out_pcm[k], output_frame, hTdDecorr[k]->look_ahead_buf, offset ); /* In ducking gains */ if ( hTdDecorr[k]->ducking_flag ) { ivas_td_decorr_get_ducking_gains( hTdDecorr[k]->pTrans_det, pcm_in[k], in_duck_gain, out_duck_gain, output_frame, 0 ); for ( j = 0; j < output_frame; j++ ) { pp_out_pcm[k][j] = pp_out_pcm[k][j] * in_duck_gain[j]; } } /* All pass delay section */ ivas_td_decorr_APD_iir_filter( &hTdDecorr[k]->APD_filt_state[0], pp_out_pcm[k], hTdDecorr[k]->num_apd_sections, output_frame ); /* Out ducking gains */ if ( hTdDecorr[k]->ducking_flag ) { for ( j = 0; j < output_frame; j++ ) { pp_out_pcm[k][j] = pp_out_pcm[k][j] * out_duck_gain[j]; } } } return; } void ivas_param_upmix_dec_decorr_subframes( Decoder_Struct *st_ivas /* i/o: IVAS decoder handle */ ) { MC_PARAMUPMIX_DEC_HANDLE hMCParamUpmix; int16_t i, ch; int32_t output_Fs; int16_t output_frame; float Pcm_decorr[MC_PARAMUPMIX_COMBINATIONS][L_FRAME48k]; /* decorrelated channels */ float *pPcm_temp[MC_PARAMUPMIX_COMBINATIONS * 2]; /* decorrelated and undecorrelated*/ float *p_tc[MC_PARAMUPMIX_MAX_INPUT_CHANS]; hMCParamUpmix = st_ivas->hMCParamUpmix; assert( hMCParamUpmix ); push_wmops( "ivas_param_upmix_dec_decorr_subframes" ); output_Fs = st_ivas->hDecoderConfig->output_Fs; output_frame = (int16_t) ( output_Fs / FRAMES_PER_SEC ); for ( ch = 0; ch < MC_PARAMUPMIX_MAX_INPUT_CHANS; ch++ ) { p_tc[ch] = st_ivas->hTcBuffer->tc[ch]; } for ( i = 0; i < MC_PARAMUPMIX_COMBINATIONS; i++ ) { pPcm_temp[i] = p_tc[8+i]; /* decorrelated */ } paramupmix_td_decorr_process_jbm( hMCParamUpmix->hTdDecorr, &( p_tc[4] ), pPcm_temp, output_frame ); pop_wmops(); return; } #endif /*****************************************************************************************/ /* local functions */ Loading