Loading lib_dec/ivas_jbm_dec.c +55 −98 Original line number Diff line number Diff line Loading @@ -781,6 +781,7 @@ ivas_error ivas_dec_tc( * ivas_dec_feed_tc_to_renderer() * * Feed decoded transport channels and metadata to the IVAS renderer routine * needed for ParamISM and ParamMC *--------------------------------------------------------------------------*/ void ivas_dec_feed_tc_to_renderer( Loading @@ -800,18 +801,32 @@ void ivas_dec_feed_tc_to_renderer( int16_t cldfb_ch, slot_idx, num_freq_bands; hTcBuffer = st_ivas->hTcBuffer; n_ch_cldfb = hTcBuffer->nchan_transport_rend - hTcBuffer->nchan_buffer_full; for ( n = 0; n < MAX_CLDFB_DIGEST_CHANNELS; n++ ) cldfb_real_buffer = NULL; cldfb_imag_buffer = NULL; num_freq_bands = 0; if ( n_ch_cldfb > 0 ) { p_data_f[n] = &data_f[n][0]; if ( st_ivas->ivas_format == ISM_FORMAT ) { cldfb_real_buffer = st_ivas->hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc; cldfb_imag_buffer = st_ivas->hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc; num_freq_bands = st_ivas->hSpatParamRendCom->num_freq_bands; } if ( !st_ivas->hDecoderConfig->Opt_tsm ) else if ( st_ivas->ivas_format == MC_FORMAT ) { for ( n = 0; n < ivas_get_nchan_buffers_dec( st_ivas, st_ivas->sba_analysis_order, st_ivas->hDecoderConfig->ivas_total_brate ); n++ ) cldfb_real_buffer = st_ivas->hParamMC->Cldfb_RealBuffer_tc; cldfb_imag_buffer = st_ivas->hParamMC->Cldfb_ImagBuffer_tc; num_freq_bands = st_ivas->hParamMC->num_freq_bands; } #ifdef DEBUGGING else { st_ivas->hTcBuffer->tc[n] = st_ivas->p_output_f[n]; /* note: buffers needed in the TD decorellator */ assert( 0 && "Residual (direct CLDFB transport channels) only possible for ParamMC/ParamISM!" ); } #endif } if ( st_ivas->hDecoderConfig->Opt_tsm ) Loading @@ -820,13 +835,17 @@ void ivas_dec_feed_tc_to_renderer( int16_t n_ch_full_copy; int16_t n_ch_res_copy; for ( n = 0; n < n_ch_cldfb; n++ ) { p_data_f[n] = &data_f[n][0]; } n_samples_still_available = hTcBuffer->n_samples_buffered - hTcBuffer->n_samples_rendered; hTcBuffer->n_samples_buffered = n_samples_still_available + nSamplesForRendering + hTcBuffer->n_samples_discard; hTcBuffer->n_samples_available = hTcBuffer->n_samples_granularity * ( hTcBuffer->n_samples_buffered / hTcBuffer->n_samples_granularity ); *nSamplesResidual = hTcBuffer->n_samples_buffered - hTcBuffer->n_samples_available; n_ch_full_copy = min( hTcBuffer->nchan_transport_rend, hTcBuffer->nchan_buffer_full ); n_ch_res_copy = hTcBuffer->nchan_transport_rend - hTcBuffer->nchan_buffer_full; n_ch_cldfb = hTcBuffer->nchan_transport_rend - hTcBuffer->nchan_buffer_full; for ( ch = 0; ch < n_ch_full_copy; ch++ ) { Loading @@ -843,6 +862,7 @@ void ivas_dec_feed_tc_to_renderer( for ( ; ch < hTcBuffer->nchan_transport_rend; ch++ ) { mvr2r( hTcBuffer->tc[ch], p_data_f[ch], n_samples_still_available ); for ( m = 0; m < nSamplesForRendering; m++ ) { p_data_f[ch][n_samples_still_available + m] = data[m * hTcBuffer->nchan_transport_rend + ch]; Loading @@ -852,38 +872,26 @@ void ivas_dec_feed_tc_to_renderer( } n_render_timeslots = st_ivas->hTcBuffer->n_samples_available / st_ivas->hTcBuffer->n_samples_granularity; //ivas_param_ism_dec_digest_tc( st_ivas, n_render_timeslots, p_data_f ); /* CLDFB analysis for ParamMC/ParamISM */ if ( n_ch_cldfb > 0 ) { cldfb_real_buffer = NULL; cldfb_imag_buffer = NULL; num_freq_bands = 0; if ( st_ivas->ivas_format == ISM_FORMAT ) { cldfb_real_buffer = st_ivas->hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc; cldfb_imag_buffer = st_ivas->hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc; num_freq_bands = st_ivas->hSpatParamRendCom->num_freq_bands; //ivas_ism_param_dec_tc_gain_ajust( st_ivas, output_frame, output_frame / 2, st_ivas->p_output_f ); } else if ( st_ivas->ivas_format == MC_FORMAT ) { cldfb_real_buffer = st_ivas->hParamMC->Cldfb_RealBuffer_tc; cldfb_imag_buffer = st_ivas->hParamMC->Cldfb_ImagBuffer_tc; num_freq_bands = st_ivas->hParamMC->num_freq_bands; output_frame = n_render_timeslots * num_freq_bands; } #ifdef DEBUGGING else { assert( 0 && "Residual (direct CLDFB transport channels) only possible for ParamMC/ParamISM!" ); for ( n = 0; n < n_ch_cldfb; n++ ) { p_data_f[n] = &st_ivas->p_output_f[n][0]; } #endif output_frame = n_render_timeslots * num_freq_bands; hTcBuffer->n_samples_buffered = nSamplesForRendering; hTcBuffer->n_samples_available = hTcBuffer->n_samples_buffered; *nSamplesResidual = 0; output_frame = nSamplesForRendering; n_render_timeslots = DEFAULT_JBM_CLDFB_TIMESLOTS; } /* CLDFB analysis for ParamMC/ParamISM */ if ( n_ch_cldfb > 0 ) { // if ( st_ivas->ivas_format == ISM_FORMAT && st_ivas->ism_mode == ISM_MODE_PARAM && ( st_ivas->renderer_type == RENDERER_PARAM_ISM || st_ivas->renderer_type == RENDERER_SBA_LINEAR_ENC ) ) if ( st_ivas->ivas_format == ISM_FORMAT ) { Loading @@ -909,57 +917,6 @@ void ivas_dec_feed_tc_to_renderer( } } } } else { output_frame = nSamplesForRendering; hTcBuffer->n_samples_buffered = output_frame; hTcBuffer->n_samples_available = hTcBuffer->n_samples_buffered; n_ch_cldfb = hTcBuffer->nchan_transport_rend - hTcBuffer->nchan_buffer_full; /* CLDFB ana for ParamMC/ParamISM */ if ( n_ch_cldfb > 0 ) { cldfb_real_buffer = NULL; cldfb_imag_buffer = NULL; num_freq_bands = 0; if ( st_ivas->ivas_format == ISM_FORMAT ) { cldfb_real_buffer = st_ivas->hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc; cldfb_imag_buffer = st_ivas->hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc; num_freq_bands = st_ivas->hSpatParamRendCom->num_freq_bands; ivas_ism_param_dec_tc_gain_ajust( st_ivas, output_frame, output_frame / 2, st_ivas->p_output_f ); } else if ( st_ivas->ivas_format == MC_FORMAT ) { cldfb_real_buffer = st_ivas->hParamMC->Cldfb_RealBuffer_tc; cldfb_imag_buffer = st_ivas->hParamMC->Cldfb_ImagBuffer_tc; num_freq_bands = st_ivas->hParamMC->num_freq_bands; } #ifdef DEBUGGING else { assert( 0 && "Residual (direct CLDFB transport channels) only possible for ParamMC/ParamISM!" ); } #endif /* CLDFB Analysis*/ for ( ch = 0, cldfb_ch = 0; cldfb_ch < n_ch_cldfb; cldfb_ch++, ch++ ) { for ( slot_idx = 0; slot_idx < DEFAULT_JBM_CLDFB_TIMESLOTS; slot_idx++ ) { cldfbAnalysis_ts( &( st_ivas->p_output_f[ch][num_freq_bands * slot_idx] ), &cldfb_real_buffer[slot_idx * num_freq_bands * n_ch_cldfb + cldfb_ch * num_freq_bands], &cldfb_imag_buffer[slot_idx * num_freq_bands * n_ch_cldfb + cldfb_ch * num_freq_bands], num_freq_bands, st_ivas->cldfbAnaDec[cldfb_ch] ); } } } *nSamplesResidual = 0; } hTcBuffer->n_samples_rendered = 0; hTcBuffer->subframes_rendered = 0; Loading Loading
lib_dec/ivas_jbm_dec.c +55 −98 Original line number Diff line number Diff line Loading @@ -781,6 +781,7 @@ ivas_error ivas_dec_tc( * ivas_dec_feed_tc_to_renderer() * * Feed decoded transport channels and metadata to the IVAS renderer routine * needed for ParamISM and ParamMC *--------------------------------------------------------------------------*/ void ivas_dec_feed_tc_to_renderer( Loading @@ -800,18 +801,32 @@ void ivas_dec_feed_tc_to_renderer( int16_t cldfb_ch, slot_idx, num_freq_bands; hTcBuffer = st_ivas->hTcBuffer; n_ch_cldfb = hTcBuffer->nchan_transport_rend - hTcBuffer->nchan_buffer_full; for ( n = 0; n < MAX_CLDFB_DIGEST_CHANNELS; n++ ) cldfb_real_buffer = NULL; cldfb_imag_buffer = NULL; num_freq_bands = 0; if ( n_ch_cldfb > 0 ) { p_data_f[n] = &data_f[n][0]; if ( st_ivas->ivas_format == ISM_FORMAT ) { cldfb_real_buffer = st_ivas->hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc; cldfb_imag_buffer = st_ivas->hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc; num_freq_bands = st_ivas->hSpatParamRendCom->num_freq_bands; } if ( !st_ivas->hDecoderConfig->Opt_tsm ) else if ( st_ivas->ivas_format == MC_FORMAT ) { for ( n = 0; n < ivas_get_nchan_buffers_dec( st_ivas, st_ivas->sba_analysis_order, st_ivas->hDecoderConfig->ivas_total_brate ); n++ ) cldfb_real_buffer = st_ivas->hParamMC->Cldfb_RealBuffer_tc; cldfb_imag_buffer = st_ivas->hParamMC->Cldfb_ImagBuffer_tc; num_freq_bands = st_ivas->hParamMC->num_freq_bands; } #ifdef DEBUGGING else { st_ivas->hTcBuffer->tc[n] = st_ivas->p_output_f[n]; /* note: buffers needed in the TD decorellator */ assert( 0 && "Residual (direct CLDFB transport channels) only possible for ParamMC/ParamISM!" ); } #endif } if ( st_ivas->hDecoderConfig->Opt_tsm ) Loading @@ -820,13 +835,17 @@ void ivas_dec_feed_tc_to_renderer( int16_t n_ch_full_copy; int16_t n_ch_res_copy; for ( n = 0; n < n_ch_cldfb; n++ ) { p_data_f[n] = &data_f[n][0]; } n_samples_still_available = hTcBuffer->n_samples_buffered - hTcBuffer->n_samples_rendered; hTcBuffer->n_samples_buffered = n_samples_still_available + nSamplesForRendering + hTcBuffer->n_samples_discard; hTcBuffer->n_samples_available = hTcBuffer->n_samples_granularity * ( hTcBuffer->n_samples_buffered / hTcBuffer->n_samples_granularity ); *nSamplesResidual = hTcBuffer->n_samples_buffered - hTcBuffer->n_samples_available; n_ch_full_copy = min( hTcBuffer->nchan_transport_rend, hTcBuffer->nchan_buffer_full ); n_ch_res_copy = hTcBuffer->nchan_transport_rend - hTcBuffer->nchan_buffer_full; n_ch_cldfb = hTcBuffer->nchan_transport_rend - hTcBuffer->nchan_buffer_full; for ( ch = 0; ch < n_ch_full_copy; ch++ ) { Loading @@ -843,6 +862,7 @@ void ivas_dec_feed_tc_to_renderer( for ( ; ch < hTcBuffer->nchan_transport_rend; ch++ ) { mvr2r( hTcBuffer->tc[ch], p_data_f[ch], n_samples_still_available ); for ( m = 0; m < nSamplesForRendering; m++ ) { p_data_f[ch][n_samples_still_available + m] = data[m * hTcBuffer->nchan_transport_rend + ch]; Loading @@ -852,38 +872,26 @@ void ivas_dec_feed_tc_to_renderer( } n_render_timeslots = st_ivas->hTcBuffer->n_samples_available / st_ivas->hTcBuffer->n_samples_granularity; //ivas_param_ism_dec_digest_tc( st_ivas, n_render_timeslots, p_data_f ); /* CLDFB analysis for ParamMC/ParamISM */ if ( n_ch_cldfb > 0 ) { cldfb_real_buffer = NULL; cldfb_imag_buffer = NULL; num_freq_bands = 0; if ( st_ivas->ivas_format == ISM_FORMAT ) { cldfb_real_buffer = st_ivas->hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc; cldfb_imag_buffer = st_ivas->hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc; num_freq_bands = st_ivas->hSpatParamRendCom->num_freq_bands; //ivas_ism_param_dec_tc_gain_ajust( st_ivas, output_frame, output_frame / 2, st_ivas->p_output_f ); } else if ( st_ivas->ivas_format == MC_FORMAT ) { cldfb_real_buffer = st_ivas->hParamMC->Cldfb_RealBuffer_tc; cldfb_imag_buffer = st_ivas->hParamMC->Cldfb_ImagBuffer_tc; num_freq_bands = st_ivas->hParamMC->num_freq_bands; output_frame = n_render_timeslots * num_freq_bands; } #ifdef DEBUGGING else { assert( 0 && "Residual (direct CLDFB transport channels) only possible for ParamMC/ParamISM!" ); for ( n = 0; n < n_ch_cldfb; n++ ) { p_data_f[n] = &st_ivas->p_output_f[n][0]; } #endif output_frame = n_render_timeslots * num_freq_bands; hTcBuffer->n_samples_buffered = nSamplesForRendering; hTcBuffer->n_samples_available = hTcBuffer->n_samples_buffered; *nSamplesResidual = 0; output_frame = nSamplesForRendering; n_render_timeslots = DEFAULT_JBM_CLDFB_TIMESLOTS; } /* CLDFB analysis for ParamMC/ParamISM */ if ( n_ch_cldfb > 0 ) { // if ( st_ivas->ivas_format == ISM_FORMAT && st_ivas->ism_mode == ISM_MODE_PARAM && ( st_ivas->renderer_type == RENDERER_PARAM_ISM || st_ivas->renderer_type == RENDERER_SBA_LINEAR_ENC ) ) if ( st_ivas->ivas_format == ISM_FORMAT ) { Loading @@ -909,57 +917,6 @@ void ivas_dec_feed_tc_to_renderer( } } } } else { output_frame = nSamplesForRendering; hTcBuffer->n_samples_buffered = output_frame; hTcBuffer->n_samples_available = hTcBuffer->n_samples_buffered; n_ch_cldfb = hTcBuffer->nchan_transport_rend - hTcBuffer->nchan_buffer_full; /* CLDFB ana for ParamMC/ParamISM */ if ( n_ch_cldfb > 0 ) { cldfb_real_buffer = NULL; cldfb_imag_buffer = NULL; num_freq_bands = 0; if ( st_ivas->ivas_format == ISM_FORMAT ) { cldfb_real_buffer = st_ivas->hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc; cldfb_imag_buffer = st_ivas->hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc; num_freq_bands = st_ivas->hSpatParamRendCom->num_freq_bands; ivas_ism_param_dec_tc_gain_ajust( st_ivas, output_frame, output_frame / 2, st_ivas->p_output_f ); } else if ( st_ivas->ivas_format == MC_FORMAT ) { cldfb_real_buffer = st_ivas->hParamMC->Cldfb_RealBuffer_tc; cldfb_imag_buffer = st_ivas->hParamMC->Cldfb_ImagBuffer_tc; num_freq_bands = st_ivas->hParamMC->num_freq_bands; } #ifdef DEBUGGING else { assert( 0 && "Residual (direct CLDFB transport channels) only possible for ParamMC/ParamISM!" ); } #endif /* CLDFB Analysis*/ for ( ch = 0, cldfb_ch = 0; cldfb_ch < n_ch_cldfb; cldfb_ch++, ch++ ) { for ( slot_idx = 0; slot_idx < DEFAULT_JBM_CLDFB_TIMESLOTS; slot_idx++ ) { cldfbAnalysis_ts( &( st_ivas->p_output_f[ch][num_freq_bands * slot_idx] ), &cldfb_real_buffer[slot_idx * num_freq_bands * n_ch_cldfb + cldfb_ch * num_freq_bands], &cldfb_imag_buffer[slot_idx * num_freq_bands * n_ch_cldfb + cldfb_ch * num_freq_bands], num_freq_bands, st_ivas->cldfbAnaDec[cldfb_ch] ); } } } *nSamplesResidual = 0; } hTcBuffer->n_samples_rendered = 0; hTcBuffer->subframes_rendered = 0; Loading