Commit 446ffb36 authored by PLAINSI's avatar PLAINSI
Browse files

Check-in beginning of ivas_jbm_dec_feed_tc_to_renderer operation

parent 41bdcfbb
Loading
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -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 );
+88 −0
Original line number Diff line number Diff line
@@ -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                                                                       */