Commit b10ca102 authored by Marek Szczerba's avatar Marek Szczerba
Browse files

Orientation tracking in all modes except ISM

parent e0e56caf
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -4523,6 +4523,13 @@ void Euler2Quat(
    const float roll,                                           /* i  : roll                                                    */
    Quaternion *quat                                            /* o  : quaternion describing the rotation                      */
);

void Euler2RotMat(
    const float yaw,                                            /* i  : yaw                                                     */
    const float pitch,                                          /* i  : pitch                                                   */
    const float roll,                                           /* i  : roll                                                    */
    float Rmat[3][3]                                            /* o  : real-space rotation matrix for this rotation            */
);
#endif

void rotateAziEle(
@@ -4546,6 +4553,12 @@ ivas_error ivas_headTrack_open(
    HEAD_TRACK_DATA_HANDLE *hHeadTrackData                      /* o  : head track handle                                       */
);

#ifdef FIX_I109_ORIENTATION_TRACKING
void ivas_headTrack_close(
    HEAD_TRACK_DATA_HANDLE *hHeadTrackData                      /* i/o: head track handle                                       */
);
#endif

void rotateFrame_shd(
    HEAD_TRACK_DATA_HANDLE hHeadTrackData,                      /* i  : head track handle                                       */
    float output[][L_FRAME48k],                                 /* i/o: unrotated HOA3 signal buffer in TD                      */
+11 −0
Original line number Diff line number Diff line
@@ -912,6 +912,9 @@ void ivas_binRenderer(
{
    int16_t chIdx, k;
    int16_t numTimeSlots = MAX_PARAM_SPATIAL_SUBFRAMES;
#ifdef FIX_I109_ORIENTATION_TRACKING
    float yaw, pitch, roll;
#endif

    wmops_sub_start( "fastconv_binaural_rendering" );

@@ -934,7 +937,15 @@ void ivas_binRenderer(
            /* Rotation in SHD (HOA3) */
            if ( hHeadTrackData->shd_rot_max_order == -1 )
            {
#ifdef FIX_I109_ORIENTATION_TRACKING
                Quat2Euler( hHeadTrackData->Quaternions[hHeadTrackData->num_quaternions++], &( yaw ), &( pitch ), &( roll ) );
                ivas_orient_trk_SetAbsoluteOrientation( hHeadTrackData->OrientationTracker, yaw, pitch, roll );
                ivas_orient_trk_Process( hHeadTrackData->OrientationTracker );
                ivas_orient_trk_GetTrackedOrientation( hHeadTrackData->OrientationTracker, &( yaw ), &( pitch ), &( roll ) );
                Euler2RotMat( yaw, pitch, roll, hHeadTrackData->Rmat );
#else
                QuatToRotMat( hHeadTrackData->Quaternions[hHeadTrackData->num_quaternions++], hHeadTrackData->Rmat );
#endif

                rotateFrame_shd_cldfb( RealBuffer, ImagBuffer, hHeadTrackData->Rmat, hBinRenderer->hInputSetup->nchan_out_woLFE, 3 );
            }
+8 −3
Original line number Diff line number Diff line
@@ -689,10 +689,12 @@ ivas_error ivas_crend_open(
    hCrend->hReverb = NULL;
    hCrend->delay_line_rw_index = 0;
    hCrend->diffuse_delay_line_rw_index = 0;
#ifndef FIX_I109_ORIENTATION_TRACKING
    hCrend->hTrack = NULL;
    hCrend->m_fYaw = 0;
    hCrend->m_fPitch = 0;
    hCrend->m_fRoll = 0;
#endif

    hHrtf = st_ivas->hHrtf;

@@ -760,6 +762,7 @@ ivas_error ivas_crend_open(
            hCrend->lfe_delay_line = NULL;
        }

#ifndef FIX_I109_ORIENTATION_TRACKING
        if ( st_ivas->hDecoderConfig->Opt_Headrotation )
        {
            if ( ( hCrend->hTrack = (ivas_orient_trk_state_t *) count_malloc( sizeof( ivas_orient_trk_state_t ) ) ) == NULL )
@@ -773,6 +776,7 @@ ivas_error ivas_crend_open(
        {
            hCrend->hTrack = NULL;
        }
#endif

        if ( st_ivas->renderer_type == RENDERER_BINAURAL_MIXER_CONV_ROOM && st_ivas->ivas_format == MC_FORMAT && st_ivas->hDecoderConfig->Opt_Headrotation )
        {
@@ -865,11 +869,13 @@ ivas_error ivas_crend_close(
                st_ivas->hCrend->freq_buffer_im_diffuse = NULL;
            }

#ifndef FIX_I109_ORIENTATION_TRACKING
            if ( st_ivas->hCrend->hTrack != NULL )
            {
                count_free( st_ivas->hCrend->hTrack );
                st_ivas->hCrend->hTrack = NULL;
            }
#endif
        }

        ivas_reverb_close( &st_ivas->hCrend->hReverb );
@@ -1049,6 +1055,7 @@ ivas_error ivas_crend_process(
        if ( st_ivas->hDecoderConfig->Opt_Headrotation && st_ivas->hHeadTrackData && st_ivas->hHeadTrackData->num_quaternions >= 0 )
        {
            /* Orientation tracking */
#ifndef FIX_I109_ORIENTATION_TRACKING
            if ( st_ivas->hCrend->hTrack != NULL )
            {
                if ( st_ivas->hDecoderConfig->orientation_tracking == IVAS_ORIENT_TRK_AVG )
@@ -1065,10 +1072,8 @@ ivas_error ivas_crend_process(
                ivas_orient_trk_SetAbsoluteOrientation( st_ivas->hCrend->hTrack, st_ivas->hCrend->m_fYaw, st_ivas->hCrend->m_fPitch, st_ivas->hCrend->m_fRoll );
                ivas_orient_trk_Process( st_ivas->hCrend->hTrack );
                ivas_orient_trk_GetTrackedOrientation( st_ivas->hCrend->hTrack, &( st_ivas->hCrend->m_fYaw ), &( st_ivas->hCrend->m_fPitch ), &( st_ivas->hCrend->m_fRoll ) );
#ifdef FIX_I109_ORIENTATION_TRACKING
                Euler2Quat( st_ivas->hCrend->m_fYaw, st_ivas->hCrend->m_fPitch, st_ivas->hCrend->m_fRoll, &st_ivas->hHeadTrackData->Quaternions[subframe_idx] );
#endif
            }
#endif

            /* Rotation in SHD for:
                MC with elevation (5_1_2 / 5_1_4 / 7_1_4) -> BINAURAL
+12 −0
Original line number Diff line number Diff line
@@ -1791,6 +1791,10 @@ void ivas_dirac_dec(
    float *reference_power, *reference_power_smooth;
    float *onset_filter, *onset_filter_subframe, *p_onset_filter = NULL;
    uint16_t coherence_flag;

#ifdef FIX_I109_ORIENTATION_TRACKING
    float yaw, pitch, roll;
#endif
    wmops_sub_start( "ivas_dirac_dec" );

    /* Initialize aux buffers */
@@ -1859,7 +1863,15 @@ void ivas_dirac_dec(

        if ( st_ivas->hHeadTrackData )
        {
#ifdef FIX_I109_ORIENTATION_TRACKING
            Quat2Euler( st_ivas->hHeadTrackData->Quaternions[st_ivas->hHeadTrackData->num_quaternions++], &( yaw ), &( pitch ), &( roll ) );
            ivas_orient_trk_SetAbsoluteOrientation( st_ivas->hHeadTrackData->OrientationTracker, yaw, pitch, roll );
            ivas_orient_trk_Process( st_ivas->hHeadTrackData->OrientationTracker );
            ivas_orient_trk_GetTrackedOrientation( st_ivas->hHeadTrackData->OrientationTracker, &( yaw ), &( pitch ), &( roll ) );
            Euler2RotMat( yaw, pitch, roll, st_ivas->hHeadTrackData->Rmat );
#else
            QuatToRotMat( st_ivas->hHeadTrackData->Quaternions[st_ivas->hHeadTrackData->num_quaternions++], st_ivas->hHeadTrackData->Rmat );
#endif

            p_Rmat = &st_ivas->hHeadTrackData->Rmat[0][0];

+12 −0
Original line number Diff line number Diff line
@@ -357,6 +357,10 @@ static void ivas_dirac_dec_binaural_internal(
    int16_t max_band_decorr;
    DIFFUSE_DISTRIBUTION_DATA diffuseDistData;

#ifdef FIX_I109_ORIENTATION_TRACKING
    float yaw, pitch, roll;
#endif

    firstSlot = firstSubframe * ( CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES );
    slotEnd = ( firstSubframe + nSubframes ) * ( CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES );

@@ -495,7 +499,15 @@ static void ivas_dirac_dec_binaural_internal(

    if ( st_ivas->hHeadTrackData && st_ivas->hHeadTrackData->num_quaternions >= 0 )
    {
#ifdef FIX_I109_ORIENTATION_TRACKING
        Quat2Euler( st_ivas->hHeadTrackData->Quaternions[firstSubframe], &( yaw ), &( pitch ), &( roll ) );
        ivas_orient_trk_SetAbsoluteOrientation( st_ivas->hHeadTrackData->OrientationTracker, yaw, pitch, roll );
        ivas_orient_trk_Process( st_ivas->hHeadTrackData->OrientationTracker );
        ivas_orient_trk_GetTrackedOrientation( st_ivas->hHeadTrackData->OrientationTracker, &( yaw ), &( pitch ), &( roll ) );
        Euler2RotMat( yaw, pitch, roll, Rmat );
#else
        QuatToRotMat( st_ivas->hHeadTrackData->Quaternions[firstSubframe], Rmat );
#endif

        if ( nchan_transport == 2 )
        {
Loading