Commit d47b7ace authored by TYAGIRIS's avatar TYAGIRIS
Browse files

split rendering fixes for combined formats

parent 7f3bfafe
Loading
Loading
Loading
Loading
Loading
+0 −3
Original line number Diff line number Diff line
@@ -99,9 +99,6 @@ static ivas_error ivas_dec_reconfig_split_rend(
#ifdef FIX_766_OMASA_SPLIT_REND
    if ( ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV && st_ivas->ivas_format == SBA_ISM_FORMAT ) ||
         ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC && st_ivas->ivas_format == MASA_ISM_FORMAT && st_ivas->ism_mode == ISM_MASA_MODE_DISC ) )
    {
        cldfb_in_flag = 0; /* this allocates cldfb analysis for td-rend results */
    }
#else
    if ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV && st_ivas->ivas_format == SBA_ISM_FORMAT )
#endif
+9 −3
Original line number Diff line number Diff line
@@ -738,6 +738,13 @@ ivas_error ivas_omasa_dirac_td_binaural_jbm(
    float data_separated_objects[MAX_NUM_OBJECTS][L_FRAME48k];
    ivas_error error;
    float *p_sepobj[MAX_NUM_OBJECTS];
#ifdef FIX_766_OMASA_SPLIT_REND
#ifdef SPLIT_REND_WITH_HEAD_ROT
    int16_t slot_idx_start;

    slot_idx_start = st_ivas->hSpatParamRendCom->slots_rendered;
#endif
#endif

    for ( n = 0; n < MAX_NUM_OBJECTS; n++ )
    {
@@ -756,7 +763,6 @@ ivas_error ivas_omasa_dirac_td_binaural_jbm(
        int16_t slot_idx, num_cldfb_bands, nchan_transport_orig, cldfb_slots;
        float Cldfb_RealBuffer[CLDFB_NO_CHANNELS_MAX];
        float Cldfb_ImagBuffer[CLDFB_NO_CHANNELS_MAX];

        float data_rend_objects[MAX_HEAD_ROT_POSES * BINAURAL_CHANNELS][L_FRAME48k]; /* float[8 * 2][960] */
        float *p_rend_obj[MAX_HEAD_ROT_POSES * BINAURAL_CHANNELS];

@@ -783,8 +789,8 @@ ivas_error ivas_omasa_dirac_td_binaural_jbm(
                cldfbAnalysis_ts( &( p_rend_obj[n][num_cldfb_bands * slot_idx] ), Cldfb_RealBuffer, Cldfb_ImagBuffer, num_cldfb_bands, st_ivas->hSplitBinRend.splitrend.hCldfbHandles->cldfbAna[n] );

                /* this differs from OSBA by: no scaling by 0.5, and omit slot offset in right-hand side buffer as this is always 0 */
                v_add( st_ivas->hSplitBinRend.hMultiBinCldfbData->Cldfb_RealBuffer_Binaural[n][slot_idx], Cldfb_RealBuffer, st_ivas->hSplitBinRend.hMultiBinCldfbData->Cldfb_RealBuffer_Binaural[n][slot_idx], num_cldfb_bands );
                v_add( st_ivas->hSplitBinRend.hMultiBinCldfbData->Cldfb_ImagBuffer_Binaural[n][slot_idx], Cldfb_ImagBuffer, st_ivas->hSplitBinRend.hMultiBinCldfbData->Cldfb_ImagBuffer_Binaural[n][slot_idx], num_cldfb_bands );
                v_add( st_ivas->hSplitBinRend.hMultiBinCldfbData->Cldfb_RealBuffer_Binaural[n][slot_idx_start + slot_idx], Cldfb_RealBuffer, st_ivas->hSplitBinRend.hMultiBinCldfbData->Cldfb_RealBuffer_Binaural[n][slot_idx_start + slot_idx], num_cldfb_bands );
                v_add( st_ivas->hSplitBinRend.hMultiBinCldfbData->Cldfb_ImagBuffer_Binaural[n][slot_idx_start + slot_idx], Cldfb_ImagBuffer, st_ivas->hSplitBinRend.hMultiBinCldfbData->Cldfb_ImagBuffer_Binaural[n][slot_idx_start + slot_idx], num_cldfb_bands );
            }
        }
    }
+8 −4
Original line number Diff line number Diff line
@@ -137,6 +137,11 @@ ivas_error ivas_osba_dirac_td_binaural_jbm(
    float output_separated_objects[BINAURAL_CHANNELS][L_FRAME48k]; // VE2SB: TBV
    float *p_sepobj[BINAURAL_CHANNELS];
    int16_t channel_offset;
#ifdef SPLIT_REND_WITH_HEAD_ROT
    int16_t slot_idx_start;

    slot_idx_start = st_ivas->hSpatParamRendCom->slots_rendered;
#endif

    for ( n = 0; n < BINAURAL_CHANNELS; n++ )
    {
@@ -155,14 +160,13 @@ ivas_error ivas_osba_dirac_td_binaural_jbm(
    if ( st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_CODED || st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_PCM )
    {
        int16_t slot_idx, num_cldfb_bands, b, nchan_transport_orig;
        int16_t cldfb_slots, slot_idx_start;
        int16_t cldfb_slots;
        float Cldfb_RealBuffer[CLDFB_NO_CHANNELS_MAX];
        float Cldfb_ImagBuffer[CLDFB_NO_CHANNELS_MAX];

        num_cldfb_bands = st_ivas->hSplitBinRend.splitrend.hCldfbHandles->cldfbAna[0]->no_channels;
        nchan_transport_orig = st_ivas->nchan_transport;
        st_ivas->nchan_transport = st_ivas->nchan_ism;
        slot_idx_start = st_ivas->hTcBuffer->n_samples_rendered / num_cldfb_bands;
        if ( ( error = ivas_td_binaural_renderer_sf_splitBinaural( st_ivas, output_f, *nSamplesRendered ) ) != IVAS_ERR_OK )
        {
            return error;
@@ -178,11 +182,11 @@ ivas_error ivas_osba_dirac_td_binaural_jbm(

                for ( b = 0; b < num_cldfb_bands; b++ )
                {
                    st_ivas->hSplitBinRend.hMultiBinCldfbData->Cldfb_RealBuffer_Binaural[n][slot_idx][b] =
                    st_ivas->hSplitBinRend.hMultiBinCldfbData->Cldfb_RealBuffer_Binaural[n][slot_idx_start + slot_idx][b] =
                        ( 0.5f * st_ivas->hSplitBinRend.hMultiBinCldfbData->Cldfb_RealBuffer_Binaural[n][slot_idx_start + slot_idx][b] ) +
                        ( 0.5f * Cldfb_RealBuffer[b] );

                    st_ivas->hSplitBinRend.hMultiBinCldfbData->Cldfb_ImagBuffer_Binaural[n][slot_idx][b] =
                    st_ivas->hSplitBinRend.hMultiBinCldfbData->Cldfb_ImagBuffer_Binaural[n][slot_idx_start + slot_idx][b] =
                        ( 0.5f * st_ivas->hSplitBinRend.hMultiBinCldfbData->Cldfb_ImagBuffer_Binaural[n][slot_idx_start + slot_idx][b] ) +
                        ( 0.5f * Cldfb_ImagBuffer[b] );
                }
+6 −6
Original line number Diff line number Diff line
@@ -832,10 +832,10 @@ static void ivas_dirac_dec_binaural_internal(

        for ( ch = 0; ch < BINAURAL_CHANNELS; ch++ )
        {
            for ( i = 0; i < CLDFB_SLOTS_PER_SUBFRAME; i++ )
            for ( i = 0; i < hSpatParamRendCom->subframe_nbslots[subframe]; i++ )
            {
                mvr2r( tmp_Cldfb_out_re[ch][i], st_ivas->hSplitBinRend.hMultiBinCldfbData->Cldfb_RealBuffer_Binaural[ch][subframe * CLDFB_SLOTS_PER_SUBFRAME + i], CLDFB_NO_CHANNELS_MAX );
                mvr2r( tmp_Cldfb_out_im[ch][i], st_ivas->hSplitBinRend.hMultiBinCldfbData->Cldfb_ImagBuffer_Binaural[ch][subframe * CLDFB_SLOTS_PER_SUBFRAME + i], CLDFB_NO_CHANNELS_MAX );
                mvr2r( tmp_Cldfb_out_re[ch][i], st_ivas->hSplitBinRend.hMultiBinCldfbData->Cldfb_RealBuffer_Binaural[ch][hSpatParamRendCom->slots_rendered + i], CLDFB_NO_CHANNELS_MAX );
                mvr2r( tmp_Cldfb_out_im[ch][i], st_ivas->hSplitBinRend.hMultiBinCldfbData->Cldfb_ImagBuffer_Binaural[ch][hSpatParamRendCom->slots_rendered + i], CLDFB_NO_CHANNELS_MAX );
            }
        }
    }
@@ -905,10 +905,10 @@ static void ivas_dirac_dec_binaural_internal(
                /* copy from temporary buffer to the main split rendering buffer */
                for ( ch = 0; ch < BINAURAL_CHANNELS; ch++ )
                {
                    for ( i = 0; i < CLDFB_SLOTS_PER_SUBFRAME; i++ )
                    for ( i = 0; i < hSpatParamRendCom->subframe_nbslots[subframe]; i++ )
                    {
                        mvr2r( tmp_Cldfb_out_re[ch][i], st_ivas->hSplitBinRend.hMultiBinCldfbData->Cldfb_RealBuffer_Binaural[pos_idx * BINAURAL_CHANNELS + ch][subframe * CLDFB_SLOTS_PER_SUBFRAME + i], CLDFB_NO_CHANNELS_MAX );
                        mvr2r( tmp_Cldfb_out_im[ch][i], st_ivas->hSplitBinRend.hMultiBinCldfbData->Cldfb_ImagBuffer_Binaural[pos_idx * BINAURAL_CHANNELS + ch][subframe * CLDFB_SLOTS_PER_SUBFRAME + i], CLDFB_NO_CHANNELS_MAX );
                        mvr2r( tmp_Cldfb_out_re[ch][i], st_ivas->hSplitBinRend.hMultiBinCldfbData->Cldfb_RealBuffer_Binaural[pos_idx * BINAURAL_CHANNELS + ch][hSpatParamRendCom->slots_rendered + i], CLDFB_NO_CHANNELS_MAX );
                        mvr2r( tmp_Cldfb_out_im[ch][i], st_ivas->hSplitBinRend.hMultiBinCldfbData->Cldfb_ImagBuffer_Binaural[pos_idx * BINAURAL_CHANNELS + ch][hSpatParamRendCom->slots_rendered + i], CLDFB_NO_CHANNELS_MAX );
                    }
                }