Commit 284f16d4 authored by Lauros Pajunen's avatar Lauros Pajunen
Browse files

Further fixes/adjustments for EXTERNAL_ORIENTATIONS switch

parent 1ba9e4ad
Loading
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -5159,10 +5159,11 @@ void ivas_binaural_cldfb_sf(
#endif
void ivas_binRenderer(
    BINAURAL_RENDERER_HANDLE hBinRenderer,                      /* i/o: fastconv binaural renderer handle                       */
    HEAD_TRACK_DATA_HANDLE hHeadTrackData,                      /* i/o: head track handle                                       */
#ifdef EXTERNAL_ORIENTATIONS
    COMBINED_ORIENTATION_HANDLE hCombinedOrientationData,       /* i  : combined head and external orientation handle           */
    int16_t subframe_idx,                                       /* i  : subframe index                                          */
#else
    HEAD_TRACK_DATA_HANDLE hHeadTrackData,                      /* i/o: head track handle                                       */
#endif
    const int16_t numTimeSlots,                                 /* i: : number of time slots to process                         */
    float Cldfb_RealBuffer_Binaural[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* o  : Binaural signals             */
+17 −13
Original line number Diff line number Diff line
@@ -1041,7 +1041,7 @@ void ivas_binaural_cldfb(

        /* Implement binaural rendering */
#ifdef EXTERNAL_ORIENTATIONS
        ivas_binRenderer( st_ivas->hBinRenderer, st_ivas->hHeadTrackData, st_ivas->hCombinedOrientationData, subframeIdx, JBM_CLDFB_SLOTS_IN_SUBFRAME, Cldfb_RealBuffer_Binaural, Cldfb_ImagBuffer_Binaural, Cldfb_RealBuffer, Cldfb_ImagBuffer );
        ivas_binRenderer( st_ivas->hBinRenderer, st_ivas->hCombinedOrientationData, subframeIdx, JBM_CLDFB_SLOTS_IN_SUBFRAME, Cldfb_RealBuffer_Binaural, Cldfb_ImagBuffer_Binaural, Cldfb_RealBuffer, Cldfb_ImagBuffer );
#else
        ivas_binRenderer( st_ivas->hBinRenderer, st_ivas->hHeadTrackData, JBM_CLDFB_SLOTS_IN_SUBFRAME, Cldfb_RealBuffer_Binaural, Cldfb_ImagBuffer_Binaural, Cldfb_RealBuffer, Cldfb_ImagBuffer );
#endif
@@ -1137,7 +1137,7 @@ void ivas_binaural_cldfb_sf(

        /* Implement binaural rendering */
#ifdef EXTERNAL_ORIENTATIONS
        ivas_binRenderer( st_ivas->hBinRenderer, st_ivas->hHeadTrackData, st_ivas->hCombinedOrientationData, subframeIdx, st_ivas->hTcBuffer->subframe_nbslots[subframeIdx], Cldfb_RealBuffer_Binaural, Cldfb_ImagBuffer_Binaural, Cldfb_RealBuffer, Cldfb_ImagBuffer );
        ivas_binRenderer( st_ivas->hBinRenderer, st_ivas->hCombinedOrientationData, subframeIdx, st_ivas->hTcBuffer->subframe_nbslots[subframeIdx], Cldfb_RealBuffer_Binaural, Cldfb_ImagBuffer_Binaural, Cldfb_RealBuffer, Cldfb_ImagBuffer );
#else
        ivas_binRenderer( st_ivas->hBinRenderer, st_ivas->hHeadTrackData, st_ivas->hTcBuffer->subframe_nbslots[subframeIdx], Cldfb_RealBuffer_Binaural, Cldfb_ImagBuffer_Binaural, Cldfb_RealBuffer, Cldfb_ImagBuffer );
#endif
@@ -1175,10 +1175,11 @@ void ivas_binaural_cldfb_sf(

void ivas_binRenderer(
    BINAURAL_RENDERER_HANDLE hBinRenderer, /* i/o: binaural renderer handle    */
    HEAD_TRACK_DATA_HANDLE hHeadTrackData, /* i/o: head track handle           */
#ifdef EXTERNAL_ORIENTATIONS
    COMBINED_ORIENTATION_HANDLE hCombinedOrientationData, /* i  : combined head and external orientation handle           */
    int16_t subframe_idx,                                 /* i  : subframe index   */
#else
    HEAD_TRACK_DATA_HANDLE hHeadTrackData, /* i/o: head track handle           */
#endif
    const int16_t numTimeSlots,                                                            /* i  : number of time slots to render*/
    float Cldfb_RealBuffer_Binaural[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* o  : Binaural signals */
@@ -1203,34 +1204,37 @@ void ivas_binRenderer(
    }

    /* Head rotation in HOA3 or CICPx */
    if ( hHeadTrackData
    if (
#ifdef EXTERNAL_ORIENTATIONS
         && hCombinedOrientationData != NULL && hCombinedOrientationData->enableCombinedOrientation[subframe_idx]
         hCombinedOrientationData != NULL && hCombinedOrientationData->enableCombinedOrientation[subframe_idx]
#else
         && hHeadTrackData->num_quaternions >= 0
         hHeadTrackData && hHeadTrackData->num_quaternions >= 0
#endif
         && hBinRenderer->rotInCldfb )
    {
        if ( hBinRenderer->hInputSetup->is_loudspeaker_setup == 0 )
        {
            /* Rotation in SHD (HOA3) */
            if ( hHeadTrackData->shd_rot_max_order == -1 )
            {
#ifdef EXTERNAL_ORIENTATIONS
            if ( hCombinedOrientationData->shd_rot_max_order == -1 )
            {
                rotateFrame_shd_cldfb( RealBuffer, ImagBuffer, hCombinedOrientationData->Rmat[subframe_idx], hBinRenderer->hInputSetup->nchan_out_woLFE, numTimeSlots, 3 );
            }
            else if ( hCombinedOrientationData->shd_rot_max_order > 0 )
            {
                rotateFrame_shd_cldfb( RealBuffer, ImagBuffer, hCombinedOrientationData->Rmat[subframe_idx], hBinRenderer->hInputSetup->nchan_out_woLFE, numTimeSlots, hCombinedOrientationData->shd_rot_max_order );
            }
#else
            if ( hHeadTrackData->shd_rot_max_order == -1 )
            {
                QuatToRotMat( hHeadTrackData->Quaternions[hHeadTrackData->num_quaternions++], hHeadTrackData->Rmat );
                rotateFrame_shd_cldfb( RealBuffer, ImagBuffer, hHeadTrackData->Rmat, hBinRenderer->hInputSetup->nchan_out_woLFE, numTimeSlots, 3 );
#endif
            }
            else if ( hHeadTrackData->shd_rot_max_order > 0 )
            {
#ifdef EXTERNAL_ORIENTATIONS
                rotateFrame_shd_cldfb( RealBuffer, ImagBuffer, hCombinedOrientationData->Rmat[subframe_idx], hBinRenderer->hInputSetup->nchan_out_woLFE, numTimeSlots, hHeadTrackData->shd_rot_max_order );
#else
                rotateFrame_shd_cldfb( RealBuffer, ImagBuffer, hHeadTrackData->Rmat, hBinRenderer->hInputSetup->nchan_out_woLFE, numTimeSlots, hHeadTrackData->shd_rot_max_order );
#endif
            }
#endif
        }
        else
        {
+22 −5
Original line number Diff line number Diff line
@@ -2627,7 +2627,7 @@ void ivas_dirac_dec_render_sf(
    }

#ifdef EXTERNAL_ORIENTATIONS
    if ( st_ivas->hHeadTrackData && st_ivas->hCombinedOrientationData && st_ivas->hCombinedOrientationData->enableCombinedOrientation[subframe_idx] )
    if ( st_ivas->hCombinedOrientationData && st_ivas->hCombinedOrientationData->enableCombinedOrientation[subframe_idx] )
#else
    if ( st_ivas->hHeadTrackData )
#endif
@@ -2640,7 +2640,11 @@ void ivas_dirac_dec_render_sf(
        p_Rmat = &st_ivas->hHeadTrackData->Rmat[0][0];
#endif

#ifdef EXTERNAL_ORIENTATIONS
        if ( st_ivas->hCombinedOrientationData->shd_rot_max_order == 0 )
#else
        if ( st_ivas->hHeadTrackData->shd_rot_max_order == 0 )
#endif
        {
            num_freq_bands = hDirAC->band_grouping[hDirAC->hConfig->enc_param_start_band];
#ifdef FIX_393_459_460_SBA_MD
@@ -2714,7 +2718,7 @@ void ivas_dirac_dec_render_sf(
            }
        }
#ifdef EXTERNAL_ORIENTATIONS
        if ( st_ivas->hCombinedOrientationData && st_ivas->hCombinedOrientationData->enableCombinedOrientation[subframe_idx] && st_ivas->hHeadTrackData->shd_rot_max_order == 1 )
        if ( st_ivas->hCombinedOrientationData && st_ivas->hCombinedOrientationData->enableCombinedOrientation[subframe_idx] && st_ivas->hCombinedOrientationData->shd_rot_max_order == 1 )
#else
        if ( st_ivas->hDecoderConfig->Opt_Headrotation && st_ivas->hHeadTrackData->shd_rot_max_order == 1 )
#endif
@@ -2731,7 +2735,11 @@ void ivas_dirac_dec_render_sf(
#endif
                                                          md_idx,
                                                          surCohRatio,
#ifdef EXTERNAL_ORIENTATIONS
                                                          st_ivas->hCombinedOrientationData->shd_rot_max_order,
#else
                                                          st_ivas->hHeadTrackData->shd_rot_max_order,
#endif
                                                          p_Rmat,
                                                          hodirac_flag );
        }
@@ -2821,7 +2829,7 @@ void ivas_dirac_dec_render_sf(
        if ( hDirAC->synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD )
        {
#ifdef EXTERNAL_ORIENTATIONS
            if ( st_ivas->hCombinedOrientationData && st_ivas->hCombinedOrientationData->enableCombinedOrientation[subframe_idx] && st_ivas->hHeadTrackData->shd_rot_max_order == 0 )
            if ( st_ivas->hCombinedOrientationData && st_ivas->hCombinedOrientationData->enableCombinedOrientation[subframe_idx] && st_ivas->hCombinedOrientationData->shd_rot_max_order == 0 )
#else
            if ( st_ivas->hDecoderConfig->Opt_Headrotation && st_ivas->hHeadTrackData->shd_rot_max_order == 0 )
#endif
@@ -2907,7 +2915,11 @@ void ivas_dirac_dec_render_sf(
#ifdef FIX_393_459_460_SBA_MD
            mvs2s( &hDirAC->azimuth[md_idx][hDirAC->hConfig->enc_param_start_band], &azimuth[hDirAC->hConfig->enc_param_start_band], hDirAC->num_freq_bands - hDirAC->hConfig->enc_param_start_band );
            mvs2s( &hDirAC->elevation[md_idx][hDirAC->hConfig->enc_param_start_band], &elevation[hDirAC->hConfig->enc_param_start_band], hDirAC->num_freq_bands - hDirAC->hConfig->enc_param_start_band );
#ifdef EXTERNAL_ORIENTATIONS
            if ( ( st_ivas->hDecoderConfig->Opt_Headrotation || st_ivas->hDecoderConfig->Opt_ExternalOrientation ) && st_ivas->hCombinedOrientationData->shd_rot_max_order == 0 )
#else
            if ( st_ivas->hDecoderConfig->Opt_Headrotation && st_ivas->hHeadTrackData->shd_rot_max_order == 0 )
#endif
            {
                num_freq_bands = hDirAC->band_grouping[hDirAC->hConfig->enc_param_start_band];
                rotateAziEle_DirAC( azimuth, elevation, num_freq_bands, hDirAC->num_freq_bands, p_Rmat );
@@ -3072,7 +3084,7 @@ void ivas_dirac_dec_render_sf(

        /*Compute PSDs*/
#ifdef EXTERNAL_ORIENTATIONS
        if ( st_ivas->hCombinedOrientationData && st_ivas->hCombinedOrientationData->enableCombinedOrientation[subframe_idx] && st_ivas->hHeadTrackData->shd_rot_max_order > 0 )
        if ( st_ivas->hCombinedOrientationData && st_ivas->hCombinedOrientationData->enableCombinedOrientation[subframe_idx] && st_ivas->hCombinedOrientationData->shd_rot_max_order > 0 )
#else
        if ( st_ivas->hDecoderConfig->Opt_Headrotation && st_ivas->hHeadTrackData->shd_rot_max_order > 0 )
#endif
@@ -3089,7 +3101,11 @@ void ivas_dirac_dec_render_sf(
                                                          diffuseness_vector[slot_idx],
#endif
                                                          hDirAC,
#ifdef EXTERNAL_ORIENTATIONS
                                                          st_ivas->hCombinedOrientationData->shd_rot_max_order,
#else
                                                          st_ivas->hHeadTrackData->shd_rot_max_order,
#endif
                                                          p_Rmat,
                                                          st_ivas->hVBAPdata,
                                                          hDirAC->hOutSetup,
@@ -3241,10 +3257,11 @@ void ivas_dirac_dec_render_sf(
    {
        /* Perform binaural rendering */
        ivas_binRenderer( st_ivas->hBinRenderer,
                          st_ivas->hHeadTrackData,
#ifdef EXTERNAL_ORIENTATIONS
                          st_ivas->hCombinedOrientationData,
                          subframe_idx,
#else
                          st_ivas->hHeadTrackData,
#endif
                          hDirAC->subframe_nbslots[subframe_idx],
                          Cldfb_RealBuffer_Binaural,
+7 −2
Original line number Diff line number Diff line
@@ -991,8 +991,13 @@ void ivas_ism_dec_digest_tc(
                azimuth = (int16_t) floorf( st_ivas->hIsmMetaData[i]->azimuth + 0.5f );
                elevation = (int16_t) floorf( st_ivas->hIsmMetaData[i]->elevation + 0.5f );

                if ( ( st_ivas->renderer_type == RENDERER_TD_PANNING || st_ivas->renderer_type == RENDERER_BINAURAL_MIXER_CONV_ROOM ) && st_ivas->hHeadTrackData == NULL )
                {
                if ( ( st_ivas->renderer_type == RENDERER_TD_PANNING || st_ivas->renderer_type == RENDERER_BINAURAL_MIXER_CONV_ROOM ) &&
#ifdef EXTERNAL_ORIENTATIONS
                       st_ivas->hCombinedOrientationData == NULL
#else
                       st_ivas->hHeadTrackData == NULL
#endif
                ) {
                    if ( st_ivas->hIntSetup.is_planar_setup )
                    {
                        /* If no elevation support in output format, then rendering should be done with zero elevation */
+20 −1
Original line number Diff line number Diff line
@@ -242,8 +242,10 @@ void ivas_ism_render_sf(
    int16_t azimuth, elevation;
    int16_t tc_offset;
    int16_t interp_offset;
    float Rmat[3][3];
    float gain, prev_gain;
#ifndef EXTERNAL_ORIENTATIONS
    float Rmat[3][3];
#endif

    num_objects = st_ivas->nchan_transport;
    nchan_out_woLFE = st_ivas->hIntSetup.nchan_out_woLFE;
@@ -256,11 +258,16 @@ void ivas_ism_render_sf(
        set_f( output_f[i], 0.0f, n_samples_to_render );
    }

#ifdef EXTERNAL_ORIENTATIONS
    if ( st_ivas->hCombinedOrientationData && st_ivas->hCombinedOrientationData->enableCombinedOrientation[0] )
    {
#else
    if ( st_ivas->hHeadTrackData != NULL && st_ivas->hHeadTrackData->num_quaternions >= 0 )
    {
        /* Calculate rotation matrix from the quaternion */
        QuatToRotMat( st_ivas->hHeadTrackData->Quaternions[st_ivas->hHeadTrackData->num_quaternions++], Rmat );

#endif
        ivas_jbm_dec_get_adapted_linear_interpolator( n_samples_to_render,
                                                      n_samples_to_render,
                                                      st_ivas->hIsmRendererData->interpolator );
@@ -269,10 +276,18 @@ void ivas_ism_render_sf(

    for ( i = 0; i < num_objects; i++ )
    {

#ifdef EXTERNAL_ORIENTATIONS
        /* Combined rotation: rotate the object positions depending the head and external orientations */
        if ( st_ivas->hCombinedOrientationData != NULL && st_ivas->hCombinedOrientationData->enableCombinedOrientation[0] == 1 )
        {
            rotateAziEle( st_ivas->hIsmMetaData[i]->azimuth, st_ivas->hIsmMetaData[i]->elevation, &azimuth, &elevation, st_ivas->hCombinedOrientationData->Rmat[0], st_ivas->hIntSetup.is_planar_setup );
#else
        /* Head rotation: rotate the object positions depending the head's orientation */
        if ( st_ivas->hHeadTrackData != NULL && st_ivas->hHeadTrackData->num_quaternions >= 0 && !st_ivas->hIsmMetaData[i]->non_diegetic_flag )
        {
            rotateAziEle( st_ivas->hIsmMetaData[i]->azimuth, st_ivas->hIsmMetaData[i]->elevation, &azimuth, &elevation, Rmat, st_ivas->hIntSetup.is_planar_setup );
#endif
            if ( st_ivas->hEFAPdata != NULL )
            {
                efap_determine_gains( st_ivas->hEFAPdata, st_ivas->hIsmRendererData->gains[i], azimuth, elevation, EFAP_MODE_EFAP );
@@ -301,7 +316,11 @@ void ivas_ism_render_sf(
            }

            /* update here only in case of head rotation */
#ifdef EXTERNAL_ORIENTATIONS
            if ( st_ivas->hCombinedOrientationData != NULL && st_ivas->hCombinedOrientationData->enableCombinedOrientation[0] == 1 )
#else
            if ( st_ivas->hHeadTrackData != NULL && st_ivas->hHeadTrackData->num_quaternions >= 0 )
#endif
            {
                st_ivas->hIsmRendererData->prev_gains[i][j] = gain;
            }
Loading