Commit b3143cdb authored by vaclav's avatar vaclav
Browse files

ivas_dec_feed_tc_to_renderer() simplifications for ParamISM

parent b536f4d8
Loading
Loading
Loading
Loading
+55 −98
Original line number Diff line number Diff line
@@ -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(
@@ -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 )
@@ -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++ )
        {
@@ -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];
@@ -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 )
        {
@@ -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;