Commit 9fe65217 authored by TYAGIRIS's avatar TYAGIRIS
Browse files

Merge branch '766-split-rendering-missing-in-omasa' into isar_selection_branch

parents 5ad8916d e13cfded
Loading
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -167,6 +167,8 @@
#define FIX_1023_REMOVE_PARAMMC_DEC                     /* VA: issue 1023: remove unused function ivas_param_mc_dec() */
#define FIX_1022_REMOVE_PARAMISM_DEC                    /* VA: issue 1022: remove unused function ivas_param_ism_dec() */

#define FIX_766_OMASA_SPLIT_REND                        /* Nokia: issue #766: split-rendering support for OMASA */

#define FIX_1035_HT_OSBA                                /* Dlb: issue 1035: Issue with headtracking in OSBA*/
/* #################### End BE switches ################################## */

+16 −0
Original line number Diff line number Diff line
@@ -97,8 +97,13 @@ static ivas_error ivas_dec_reconfig_split_rend(
    isCldfbNeeded = 0;
#ifndef SPLIT_REND_WITH_HEAD_ROT
    cldfbMode = CLDFB_ANALYSIS;
#else
#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 ) )
#else
    if ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV && st_ivas->ivas_format == SBA_ISM_FORMAT )
#endif
    {
        cldfb_in_flag = 0;
    }
@@ -199,8 +204,14 @@ static ivas_error ivas_dec_reconfig_split_rend(
    }

#ifdef SPLIT_REND_WITH_HEAD_ROT
#ifdef FIX_766_OMASA_SPLIT_REND
    if ( ( st_ivas->renderer_type != RENDERER_BINAURAL_OBJECTS_TD ) &&
         ( 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 ) ) /* td-rend not needed? */
#else
    if ( ( st_ivas->renderer_type != RENDERER_BINAURAL_OBJECTS_TD ) &&
         ( st_ivas->renderer_type != RENDERER_BINAURAL_FASTCONV || st_ivas->ivas_format != SBA_ISM_FORMAT ) )
#endif
#else
    if ( st_ivas->renderer_type != RENDERER_BINAURAL_OBJECTS_TD )
#endif
@@ -259,7 +270,12 @@ static ivas_error ivas_dec_init_split_rend(
    }

#ifdef SPLIT_REND_WITH_HEAD_ROT
#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 ) )
#else
    if ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV && st_ivas->ivas_format == SBA_ISM_FORMAT )
#endif
    {
        cldfb_in_flag = 0;
    }
+12 −1
Original line number Diff line number Diff line
@@ -932,7 +932,18 @@ void ivas_jbm_dec_feed_tc_to_renderer(
                    {
                        v_multc( st_ivas->hTcBuffer->tc[CPE_CHANNELS + n], OMASA_TDREND_MATCHING_GAIN, st_ivas->hTcBuffer->tc[CPE_CHANNELS + n], st_ivas->hTcBuffer->n_samples_available );
                    }
#ifdef SPLIT_REND_WITH_HEAD_ROT
#ifdef FIX_766_OMASA_SPLIT_REND
                    if ( st_ivas->hDecoderConfig->output_config != IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_CODED && st_ivas->hDecoderConfig->output_config != IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_PCM )
                    {
#endif
#endif
                        delay_signal( st_ivas->hTcBuffer->tc[CPE_CHANNELS + n], st_ivas->hTcBuffer->n_samples_available, st_ivas->hMasaIsmData->delayBuffer[n], st_ivas->hMasaIsmData->delayBuffer_size );
#ifdef SPLIT_REND_WITH_HEAD_ROT
#ifdef FIX_766_OMASA_SPLIT_REND
                    }
#endif
#endif
                }
            }
        }
+57 −5
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 SPLIT_REND_WITH_HEAD_ROT
#ifdef FIX_766_OMASA_SPLIT_REND
    int16_t slot_idx_start;

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

    for ( n = 0; n < MAX_NUM_OBJECTS; n++ )
    {
@@ -749,6 +756,47 @@ ivas_error ivas_omasa_dirac_td_binaural_jbm(
    /* reset combined orientation access index before calling the td renderer */
    ivas_combined_orientation_set_to_start_index( st_ivas->hCombinedOrientationData );

#ifdef SPLIT_REND_WITH_HEAD_ROT
#ifdef FIX_766_OMASA_SPLIT_REND
    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, nchan_transport_orig, cldfb_slots;
        float Cldfb_RealBuffer[CLDFB_NO_CHANNELS_MAX];
        float Cldfb_ImagBuffer[CLDFB_NO_CHANNELS_MAX];
        float *p_rend_obj[MAX_HEAD_ROT_POSES * BINAURAL_CHANNELS]; /* [8 * 2] */

        for ( n = 0; n < st_ivas->hSplitBinRend.splitrend.multiBinPoseData.num_poses * BINAURAL_CHANNELS; n++ )
        {
            p_rend_obj[n] = &output_f[n][0];
        }

        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;

        if ( ( error = ivas_td_binaural_renderer_sf_splitBinaural( st_ivas, p_rend_obj, *nSamplesRendered ) ) != IVAS_ERR_OK ) /* objects are read from st_ivas->hTcBuffer->tc[2..(1+n_isms)] */
        {
            return error;
        }
        st_ivas->nchan_transport = nchan_transport_orig;
        cldfb_slots = *nSamplesRendered / num_cldfb_bands;

        for ( n = 0; n < st_ivas->hSplitBinRend.splitrend.multiBinPoseData.num_poses * BINAURAL_CHANNELS; ++n )
        {
            for ( slot_idx = 0; slot_idx < cldfb_slots; slot_idx++ )
            {
                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 */
                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 );
            }
        }
    }
    else
    {
#endif
#endif
        if ( ( error = ivas_td_binaural_renderer_sf( st_ivas, p_sepobj, *nSamplesRendered ) ) != IVAS_ERR_OK )
        {
            return error;
@@ -757,7 +805,11 @@ ivas_error ivas_omasa_dirac_td_binaural_jbm(
        {
            v_add( output_f[n], p_sepobj[n], output_f[n], *nSamplesRendered );
        }

#ifdef SPLIT_REND_WITH_HEAD_ROT
#ifdef FIX_766_OMASA_SPLIT_REND
    }
#endif
#endif
    return IVAS_ERR_OK;
}

+21 −0
Original line number Diff line number Diff line
@@ -137,6 +137,13 @@ 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
#ifdef FIX_766_OMASA_SPLIT_REND
    int16_t slot_idx_start;

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

    for ( n = 0; n < BINAURAL_CHANNELS; n++ )
    {
@@ -155,14 +162,20 @@ 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;
#ifdef FIX_766_OMASA_SPLIT_REND
        int16_t cldfb_slots;
#else
        int16_t cldfb_slots, slot_idx_start;
#endif
        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;
#ifndef FIX_766_OMASA_SPLIT_REND
        slot_idx_start = st_ivas->hTcBuffer->n_samples_rendered / num_cldfb_bands;
#endif
        if ( ( error = ivas_td_binaural_renderer_sf_splitBinaural( st_ivas, output_f, *nSamplesRendered ) ) != IVAS_ERR_OK )
        {
            return error;
@@ -178,11 +191,19 @@ ivas_error ivas_osba_dirac_td_binaural_jbm(

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

#ifdef FIX_766_OMASA_SPLIT_REND
                    st_ivas->hSplitBinRend.hMultiBinCldfbData->Cldfb_ImagBuffer_Binaural[n][slot_idx_start + slot_idx][b] =
#else
                    st_ivas->hSplitBinRend.hMultiBinCldfbData->Cldfb_ImagBuffer_Binaural[n][slot_idx][b] =
#endif
                        ( 0.5f * st_ivas->hSplitBinRend.hMultiBinCldfbData->Cldfb_ImagBuffer_Binaural[n][slot_idx_start + slot_idx][b] ) +
                        ( 0.5f * Cldfb_ImagBuffer[b] );
                }
Loading