Commit 80ce0268 authored by TYAGIRIS's avatar TYAGIRIS
Browse files

simplify shifts in post renderer and fix issue 1372

parent 2e715f2e
Loading
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -180,6 +180,7 @@
#ifdef SPLIT_REND_WITH_HEAD_ROT
#define SPLIT_REND_POSE_CORRECTION_UNUSED_BITS
#define ISAR_BITSTREAM_UPDATE_LC3PLUS                   /* FhG: Multiple improvements to the ISAR bitstream when LC3plus is used. See MR 1456 for details. */
#define FIX_1372_ISAR_POST_REND
#endif

/* #################### End BASOP porting switches ############################ */
+10 −0
Original line number Diff line number Diff line
@@ -118,12 +118,22 @@ void isar_log_cldfb2wav_data(
    const char *filename );
#endif

#ifndef FIX_1372_ISAR_POST_REND
void isar_SplitRenderer_PostRenderer(
    ISAR_BIN_HR_SPLIT_POST_REND_HANDLE hBinPostRenderer, /* i/o: binaural renderer handle        */
    MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData,
    Word32 Cldfb_RealBuffer_Ref_Binaural_fx[][CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i/o  : Reference/out Binaural signals */
    Word32 Cldfb_ImagBuffer_Ref_Binaural_fx[][CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i/o  : Reference/out Binaural signals */
    const IVAS_QUATERNION Quaternion_act );
#else
void isar_SplitRenderer_PostRenderer(
    ISAR_BIN_HR_SPLIT_POST_REND_HANDLE hBinPostRenderer, /* i/o: binaural renderer handle        */
    MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData,
    Word32 Cldfb_RealBuffer_Ref_Binaural_fx[][CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i/o  : Reference/out Binaural signals */
    Word32 Cldfb_ImagBuffer_Ref_Binaural_fx[][CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i/o  : Reference/out Binaural signals */
    const IVAS_QUATERNION Quaternion_act,
    Word16 *Q_in );
#endif

void isar_splitBinLCLDDecProcess(
    ISAR_BIN_HR_SPLIT_LCLD_DEC_HANDLE hSplitBinLCLDDec,
+90 −109
Original line number Diff line number Diff line
@@ -1738,30 +1738,41 @@ static void interpolate_rend_md_fx(
 *
 *
 *-----------------------------------------------------------------------------------------*/
#ifndef FIX_1372_ISAR_POST_REND
void isar_SplitRenderer_PostRenderer(
    ISAR_BIN_HR_SPLIT_POST_REND_HANDLE hBinPostRenderer, /* i/o: binaural renderer handle    */
    MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData,
    Word32 Cldfb_RealBuffer_Ref_Binaural_fx[][CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i/o  : Reference/out Binaural signals */
    Word32 Cldfb_ImagBuffer_Ref_Binaural_fx[][CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i/o  : Reference/out Binaural signals */
    const IVAS_QUATERNION Quaternion_act )
#else
void isar_SplitRenderer_PostRenderer(
    ISAR_BIN_HR_SPLIT_POST_REND_HANDLE hBinPostRenderer, /* i/o: binaural renderer handle    */
    MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData,
    Word32 Cldfb_RealBuffer_Ref_Binaural_fx[][CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i/o  : Reference/out Binaural signals */
    Word32 Cldfb_ImagBuffer_Ref_Binaural_fx[][CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i/o  : Reference/out Binaural signals */
    const IVAS_QUATERNION Quaternion_act,
    Word16 *Q_in )
#endif
{
    int16_t pos_idx, b, brange[2], ch_idx1;
    int16_t num_md_bands, slot_idx, b2, index_slot, num_slots, sf_idx_md;
    Word32 pred_out_re_fx[BINAURAL_CHANNELS], pred_out_im_fx[BINAURAL_CHANNELS], tmp_re_fx, tmp_im_fx, gd_int_fx;
#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG
    ISAR_BIN_HR_SPLIT_REND_MD rot_md_act[MAX_HEAD_ROT_POSES][MAX_SPLIT_REND_MD_BANDS];
    Word32 gd_int_fx;
#ifndef FIX_1372_ISAR_POST_REND
    Word32 pred_out_re_fx[BINAURAL_CHANNELS], pred_out_im_fx[BINAURAL_CHANNELS];
    Word32 tmp_re_fx, tmp_im_fx;
    Word16 exp_tmp1, exp_tmp2;
#else
    ISAR_BIN_HR_SPLIT_REND_MD rot_md_act[1][MAX_SPLIT_REND_MD_BANDS];
    Word64 pred_out_re_fx64[BINAURAL_CHANNELS][CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], pred_out_im_fx64[BINAURAL_CHANNELS][CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX];
    Word64 tmp_re_fx64, tmp_im_fx64, out64_re, out64_im;
    Word16 shift64 = 63;
#endif
    ISAR_BIN_HR_SPLIT_REND_MD rot_md_act[1][MAX_SPLIT_REND_MD_BANDS];
    int16_t interp_yaw_pose_idx[2], interp_pitch_pose_idx[2], interp_roll_pose_idx[2];
    Word32 interp_yaw_fact_fx, interp_pitch_fact_fx, interp_roll_fact_fx;
    Word16 Q_yaw = Q31, Q_pitch = Q31, Q_roll = Q31;
    Word32 mix_mat_re_fx[BINAURAL_CHANNELS][BINAURAL_CHANNELS];
    Word32 mix_mat_im_fx[BINAURAL_CHANNELS][BINAURAL_CHANNELS];
#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG
    float Cldfb_RealBuffer_Recons_Binaural[MAX_HEAD_ROT_POSES][BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX];
    float Cldfb_ImagBuffer_Recons_Binaural[MAX_HEAD_ROT_POSES][BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX];
#endif
    Word16 fade_fx;
    Word32 *pMix_mat_re_prev_fx[BINAURAL_CHANNELS];
    Word32 *pMix_mat_im_prev_fx[BINAURAL_CHANNELS];
@@ -1772,12 +1783,7 @@ void isar_SplitRenderer_PostRenderer(
    push_wmops( "isar_SplitRenderer_PostRenderer" );

    num_slots = MAX_PARAM_SPATIAL_SUBFRAMES;
#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG
    pos_idx = MAX_HEAD_ROT_POSES - 1;
#else
    pos_idx = 0;
#endif

    sf_idx_md = 0;

    get_interpolation_vars( pMultiBinPoseData, &hBinPostRenderer->QuaternionsPre[sf_idx_md], &Quaternion_act, interp_yaw_pose_idx, interp_pitch_pose_idx, interp_roll_pose_idx, &interp_yaw_fact_fx, &interp_pitch_fact_fx, &interp_roll_fact_fx, &Q_yaw, &Q_pitch, &Q_roll );
@@ -1809,50 +1815,7 @@ void isar_SplitRenderer_PostRenderer(
        }
    }


#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG
    for ( pos_idx = 0; pos_idx < MAX_HEAD_ROT_POSES - 1; pos_idx++ )
    {
        for ( b = 0; b < num_md_bands; b++ )
        {
            if ( hBinPostRenderer->pose_type[pos_idx] == PITCH_ONLY )
            {

                for ( ch_idx1 = 0; ch_idx1 < BINAURAL_CHANNELS; ch_idx1++ )
                {
                    set_zero( hBinPostRenderer->rot_md[pos_idx][sf_idx][b].pred_mat_re[ch_idx1], BINAURAL_CHANNELS );
                    set_zero( hBinPostRenderer->rot_md[pos_idx][sf_idx][b].pred_mat_im[ch_idx1], BINAURAL_CHANNELS );
                    hBinPostRenderer->rot_md[pos_idx][sf_idx][b].pred_mat_re[ch_idx1][ch_idx1] = 1.0f;
                }
                hBinPostRenderer->rot_md[pos_idx][sf_idx][b].pred_mat_re[0][0] *= hBinPostRenderer->rot_md[pos_idx][sf_idx][b].gd;
                hBinPostRenderer->rot_md[pos_idx][sf_idx][b].pred_mat_re[1][1] *= hBinPostRenderer->rot_md[pos_idx][sf_idx][b].gd2;
                hBinPostRenderer->rot_md[pos_idx][sf_idx][b].gd = 0.0f;
            }
            else if ( hBinPostRenderer->pose_type[pos_idx] == ANY_ROLL )
            {
                hBinPostRenderer->rot_md[pos_idx][sf_idx][b].gd = 0.0f;
            }

            for ( ch_idx1 = 0; ch_idx1 < BINAURAL_CHANNELS; ch_idx1++ )
            {

                /*update the prediction matrix with interpolated matrix*/
                rot_md_act[pos_idx][b].pred_mat_re[ch_idx1][0] = hBinPostRenderer->rot_md[pos_idx][sf_idx][b].pred_mat_re[ch_idx1][0];
                rot_md_act[pos_idx][b].pred_mat_re[ch_idx1][1] = hBinPostRenderer->rot_md[pos_idx][sf_idx][b].pred_mat_re[ch_idx1][1];
                rot_md_act[pos_idx][b].pred_mat_im[ch_idx1][0] = hBinPostRenderer->rot_md[pos_idx][sf_idx][b].pred_mat_im[ch_idx1][0];
                rot_md_act[pos_idx][b].pred_mat_im[ch_idx1][1] = hBinPostRenderer->rot_md[pos_idx][sf_idx][b].pred_mat_im[ch_idx1][1];
                rot_md_act[pos_idx][b].gd = hBinPostRenderer->rot_md[pos_idx][sf_idx][b].gd;
            }
        }
    }

#endif

#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG
    for ( pos_idx = 0; pos_idx < MAX_HEAD_ROT_POSES; pos_idx++ )
#else
    pos_idx = 0;
#endif
    {
        FOR( slot_idx = 0; slot_idx < num_slots; slot_idx++ )
        {
@@ -1888,15 +1851,13 @@ void isar_SplitRenderer_PostRenderer(

                brange[0] = pBand_grouping[b];
                brange[1] = pBand_grouping[b + 1];
                Word16 exp_tmp1, exp_tmp2;
                FOR( b2 = brange[0]; b2 < brange[1]; b2++ )
                {
                    FOR( ch_idx1 = 0; ch_idx1 < BINAURAL_CHANNELS; ch_idx1++ )
                    {
                        /* Apply prediction matrix */
#ifndef FIX_1372_ISAR_POST_REND
                        ivas_cmult_fix( Cldfb_RealBuffer_Ref_Binaural_fx[0][index_slot][b2], 25, Cldfb_ImagBuffer_Ref_Binaural_fx[0][index_slot][b2], 25, mix_mat_re_fx[0][ch_idx1], 6, mix_mat_im_fx[0][ch_idx1], 6, &tmp_re_fx, &tmp_im_fx, &exp_tmp1, &exp_tmp2 );
                        // tmp_re_fx = L_shl(tmp_re_fx, sub(exp_tmp1, 6)); //Q25
                        // tmp_im_fx = L_shl(tmp_im_fx, sub(exp_tmp1, 6)); //Q25

                        pred_out_re_fx[ch_idx1] = tmp_re_fx;
                        pred_out_im_fx[ch_idx1] = tmp_im_fx;
@@ -1904,36 +1865,80 @@ void isar_SplitRenderer_PostRenderer(
                        Word16 exp_im = exp_tmp2;

                        ivas_cmult_fix( Cldfb_RealBuffer_Ref_Binaural_fx[1][index_slot][b2], 25, Cldfb_ImagBuffer_Ref_Binaural_fx[1][index_slot][b2], 25, mix_mat_re_fx[1][ch_idx1], 6, mix_mat_im_fx[1][ch_idx1], 6, &tmp_re_fx, &tmp_im_fx, &exp_tmp1, &exp_tmp2 );
                        // tmp_re_fx = L_shl(tmp_re_fx, sub(exp_tmp1, 6)); //Q25
                        // tmp_im_fx = L_shl(tmp_im_fx, sub(exp_tmp1, 6)); //Q25

                        pred_out_re_fx[ch_idx1] = BASOP_Util_Add_Mant32Exp( pred_out_re_fx[ch_idx1], exp_re, tmp_re_fx, exp_tmp1, &exp_re );
                        pred_out_re_fx[ch_idx1] = L_shl( pred_out_re_fx[ch_idx1], exp_re - 25 );
                        pred_out_im_fx[ch_idx1] = BASOP_Util_Add_Mant32Exp( pred_out_im_fx[ch_idx1], exp_im, tmp_im_fx, exp_tmp2, &exp_im );
                        pred_out_im_fx[ch_idx1] = L_shl( pred_out_im_fx[ch_idx1], exp_im - 25 );
#else
                        tmp_re_fx64 = W_mult_32_32( Cldfb_RealBuffer_Ref_Binaural_fx[0][index_slot][b2], mix_mat_re_fx[0][ch_idx1] );
                        tmp_im_fx64 = W_mult_32_32( Cldfb_ImagBuffer_Ref_Binaural_fx[0][index_slot][b2], mix_mat_im_fx[0][ch_idx1] );
                        out64_re = W_sub( tmp_re_fx64, tmp_im_fx64 );
                        tmp_re_fx64 = W_mult_32_32( Cldfb_RealBuffer_Ref_Binaural_fx[0][index_slot][b2], mix_mat_im_fx[0][ch_idx1] );
                        tmp_im_fx64 = W_mult_32_32( Cldfb_ImagBuffer_Ref_Binaural_fx[0][index_slot][b2], mix_mat_re_fx[0][ch_idx1] );
                        out64_im = W_add( tmp_re_fx64, tmp_im_fx64 );
                        move64();
                        move64();
                        move64();
                        move64();
                        move64();
                        move64();


                        tmp_re_fx64 = W_mult_32_32( Cldfb_RealBuffer_Ref_Binaural_fx[1][index_slot][b2], mix_mat_re_fx[1][ch_idx1] );
                        tmp_im_fx64 = W_mult_32_32( Cldfb_ImagBuffer_Ref_Binaural_fx[1][index_slot][b2], mix_mat_im_fx[1][ch_idx1] );
                        out64_re = W_add( out64_re, W_sub( tmp_re_fx64, tmp_im_fx64 ) );
                        tmp_re_fx64 = W_mult_32_32( Cldfb_RealBuffer_Ref_Binaural_fx[1][index_slot][b2], mix_mat_im_fx[1][ch_idx1] );
                        tmp_im_fx64 = W_mult_32_32( Cldfb_ImagBuffer_Ref_Binaural_fx[1][index_slot][b2], mix_mat_re_fx[1][ch_idx1] );
                        out64_im = W_add( out64_im, W_add( tmp_re_fx64, tmp_im_fx64 ) );
                        move64();
                        move64();
                        move64();
                        move64();
                        move64();
                        move64();


                        shift64 = s_min( shift64, s_min( W_norm( out64_im ), W_norm( out64_re ) ) );
                        pred_out_re_fx64[ch_idx1][index_slot][b2] = out64_re;
                        pred_out_im_fx64[ch_idx1][index_slot][b2] = out64_im;
                        move16();
                        move64();
                        move64();
#endif
                    }


#ifndef FIX_1372_ISAR_POST_REND
                    FOR( ch_idx1 = 0; ch_idx1 < BINAURAL_CHANNELS; ch_idx1++ )
                    {
#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG
                        Cldfb_RealBuffer_Recons_Binaural[pos_idx][ch_idx1][index_slot][b2] = pred_out_re[ch_idx1];
                        Cldfb_ImagBuffer_Recons_Binaural[pos_idx][ch_idx1][index_slot][b2] = pred_out_im[ch_idx1];
#else
                        Cldfb_RealBuffer_Ref_Binaural_fx[ch_idx1][index_slot][b2] = pred_out_re_fx[ch_idx1];
                        Cldfb_ImagBuffer_Ref_Binaural_fx[ch_idx1][index_slot][b2] = pred_out_im_fx[ch_idx1];
                    }
#endif
                }
            }
        }

#ifdef FIX_1372_ISAR_POST_REND
        FOR( ch_idx1 = 0; ch_idx1 < BINAURAL_CHANNELS; ch_idx1++ )
        {
            FOR( slot_idx = 0; slot_idx < num_slots; slot_idx++ )
            {
                FOR( b2 = pBand_grouping[0]; b2 < pBand_grouping[num_md_bands]; b2++ )
                {
                    Cldfb_RealBuffer_Ref_Binaural_fx[ch_idx1][slot_idx][b2] = W_extract_h( W_shl( pred_out_re_fx64[ch_idx1][slot_idx][b2], shift64 ) );
                    Cldfb_ImagBuffer_Ref_Binaural_fx[ch_idx1][slot_idx][b2] = W_extract_h( W_shl( pred_out_im_fx64[ch_idx1][slot_idx][b2], shift64 ) );
                    move32();
                    move32();
                }
            }
        }
        *Q_in = sub( add( *Q_in, shift64 ), Q6 );
        move16();
#endif
    }

#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG
    for ( pos_idx = 0; pos_idx < MAX_HEAD_ROT_POSES; pos_idx++ )
#else
    pos_idx = 0;
#endif
    {
        FOR( b = 0; b < num_md_bands; b++ )
        {
@@ -1948,43 +1953,6 @@ void isar_SplitRenderer_PostRenderer(
        }
    }
    hBinPostRenderer->cf_flag = 1;

#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG
    {
        int16_t num_cldfb_bands;
        num_cldfb_bands = CLDFB_NO_CHANNELS_MAX;
        for ( slot_idx = 0; slot_idx < num_slots; slot_idx++ )
        {
            index_slot = sf_idx * num_slots + slot_idx;
            for ( ch_idx1 = 0; ch_idx1 < BINAURAL_CHANNELS; ch_idx1++ )
            {
                mvr2r( Cldfb_RealBuffer_Recons_Binaural[MAX_HEAD_ROT_POSES - 1][ch_idx1][index_slot], Cldfb_RealBuffer_Ref_Binaural[ch_idx1][index_slot], num_cldfb_bands );
                mvr2r( Cldfb_ImagBuffer_Recons_Binaural[MAX_HEAD_ROT_POSES - 1][ch_idx1][index_slot], Cldfb_ImagBuffer_Ref_Binaural[ch_idx1][index_slot], num_cldfb_bands );
            }
        }

        for ( pos_idx = 0; pos_idx < MAX_HEAD_ROT_POSES; pos_idx++ )
        {
            char fname[200] = "recons_out_pos";
            char tag[2];
            tag[0] = (char) ( '0' + pos_idx );
            tag[1] = '\0';
            strcat( fname, tag );
            strcat( fname, ".wav" );
            isar_log_cldfb2wav_data(
                Cldfb_RealBuffer_Recons_Binaural[pos_idx],
                Cldfb_ImagBuffer_Recons_Binaural[pos_idx],
                hBinPostRenderer->cldfbSynReconsBinDec[pos_idx],
                BINAURAL_CHANNELS,
                num_cldfb_bands,
                48000,
                num_slots,
                sf_idx * num_slots,
                fname );
        }
    }
#endif

    pop_wmops();
    return;
}
@@ -2005,7 +1973,8 @@ static void isar_rend_CldfbSplitPostRendProcessTdIn(
    Word32 Cldfb_RealBuffer_Binaural_fx[BINAURAL_CHANNELS][CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX] = { 0 };
    Word32 Cldfb_ImagBuffer_Binaural_fx[BINAURAL_CHANNELS][CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX] = { 0 };
    num_cldfb_bands = hBinHrSplitPostRend->cldfbSyn[0]->no_channels;
    Word16 Q_output = 11;
    Word16 Q_output = Q11;
    Word16 Q_in = Q6;

    /* Implement CLDFB analysis */
    FOR( ch_idx = 0; ch_idx < BINAURAL_CHANNELS; ch_idx++ )
@@ -2023,7 +1992,11 @@ static void isar_rend_CldfbSplitPostRendProcessTdIn(
        }
    }

#ifndef FIX_1372_ISAR_POST_REND
    isar_SplitRenderer_PostRenderer( hBinHrSplitPostRend, pMultiBinPoseData, Cldfb_RealBuffer_Binaural_fx, Cldfb_ImagBuffer_Binaural_fx, QuaternionPost );
#else
    isar_SplitRenderer_PostRenderer( hBinHrSplitPostRend, pMultiBinPoseData, Cldfb_RealBuffer_Binaural_fx, Cldfb_ImagBuffer_Binaural_fx, QuaternionPost, &Q_in );
#endif

    /* Implement CLDFB synthesis */
    FOR( ch_idx = 0; ch_idx < BINAURAL_CHANNELS; ch_idx++ )
@@ -2045,7 +2018,11 @@ static void isar_rend_CldfbSplitPostRendProcessTdIn(
            Scale_sig32( RealBuffer_fx[slot_idx], CLDFB_NO_CHANNELS_MAX, scaleFactor );
            Scale_sig32( ImagBuffer_fx[slot_idx], CLDFB_NO_CHANNELS_MAX, scaleFactor );
        }
#ifndef FIX_1372_ISAR_POST_REND
        Q_cldfb = add( scaleFactor, sub( Q_output, Q5 ) );
#else
        Q_cldfb = add( scaleFactor, Q_in );
#endif
        Scale_sig32( hBinHrSplitPostRend->cldfbSyn[ch_idx]->cldfb_state_fx, hBinHrSplitPostRend->cldfbSyn[ch_idx]->p_filter_length, sub( sub( Q_cldfb, 1 ), Q11 ) );
        cldfbSynthesis_ivas_fx( RealBuffer_fx, ImagBuffer_fx, &( output_fx[ch_idx][0] ), num_cldfb_bands * CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES, hBinHrSplitPostRend->cldfbSyn[ch_idx] ); // Q_cldfb - 1
        Scale_sig32( hBinHrSplitPostRend->cldfbSyn[ch_idx]->cldfb_state_fx, hBinHrSplitPostRend->cldfbSyn[ch_idx]->p_filter_length, sub( Q11, sub( Q_cldfb, 1 ) ) );
@@ -2083,7 +2060,11 @@ void isar_rend_CldfbSplitPostRendProcess(
        return;
    }

#ifndef FIX_1372_ISAR_POST_REND
    isar_SplitRenderer_PostRenderer( hBinHrSplitPostRend, pMultiBinPoseData, Cldfb_RealBuffer_Binaural_fx, Cldfb_ImagBuffer_Binaural_fx, QuaternionPost );
#else
    isar_SplitRenderer_PostRenderer( hBinHrSplitPostRend, pMultiBinPoseData, Cldfb_RealBuffer_Binaural_fx, Cldfb_ImagBuffer_Binaural_fx, QuaternionPost, &Q_cldfb_in );
#endif

    /* Implement CLDFB synthesis */
    FOR( ch_idx = 0; ch_idx < BINAURAL_CHANNELS; ch_idx++ )