Loading lib_com/ivas_prot.h +13 −0 Original line number Diff line number Diff line Loading @@ -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( Loading @@ -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 */ Loading lib_dec/ivas_binauralRenderer.c +11 −0 Original line number Diff line number Diff line Loading @@ -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" ); Loading @@ -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 ); } Loading lib_dec/ivas_crend.c +8 −3 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 ) Loading @@ -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 ) { Loading Loading @@ -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 ); Loading Loading @@ -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 ) Loading @@ -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 Loading lib_dec/ivas_dirac_dec.c +12 −0 Original line number Diff line number Diff line Loading @@ -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 */ Loading Loading @@ -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]; Loading lib_dec/ivas_dirac_dec_binaural_functions.c +12 −0 Original line number Diff line number Diff line Loading @@ -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 ); Loading Loading @@ -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 Loading
lib_com/ivas_prot.h +13 −0 Original line number Diff line number Diff line Loading @@ -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( Loading @@ -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 */ Loading
lib_dec/ivas_binauralRenderer.c +11 −0 Original line number Diff line number Diff line Loading @@ -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" ); Loading @@ -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 ); } Loading
lib_dec/ivas_crend.c +8 −3 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 ) Loading @@ -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 ) { Loading Loading @@ -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 ); Loading Loading @@ -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 ) Loading @@ -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 Loading
lib_dec/ivas_dirac_dec.c +12 −0 Original line number Diff line number Diff line Loading @@ -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 */ Loading Loading @@ -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]; Loading
lib_dec/ivas_dirac_dec_binaural_functions.c +12 −0 Original line number Diff line number Diff line Loading @@ -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 ); Loading Loading @@ -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