Commit fd80dbf7 authored by Jouni Paulus's avatar Jouni Paulus
Browse files

use absolute rotations instead of incremental ones

parent 034fa68a
Loading
Loading
Loading
Loading
+8 −11
Original line number Diff line number Diff line
@@ -854,27 +854,24 @@ static void ivas_dirac_dec_binaural_internal(
#ifdef SPLIT_REND_WITH_HEAD_ROT_MASA
    if ( pMultiBinPoseData != NULL && pMultiBinPoseData->num_poses > 1 )
    {
        /* quaternion-based rotation from ivas_binRenderer_internal.c:ivas_binRenderer() */
        IVAS_QUATERNION Quaternions_rel, Quaternions_abs, *Quaternions_ref;
        /* quaternion-based rotation from ivas_binRenderer_internal.c:ivas_binRenderer(), but using absolute rotation instead of delta rotations */
        IVAS_QUATERNION Quaternions_rot, Quaternions_abs, *Quaternions_ref;
        float Rmat_local[3][3];

        if ( hCombinedOrientationData )
        {
            Quaternions_ref = &hCombinedOrientationData->Quaternions[0];
            Quaternions_rel.w = -3.0f;                                                                        /*euler*/
            Quaternions_rot.w = -3.0f;                                                                        /*euler*/
            Quaternions_abs.w = -3.0f;                                                                        /*euler*/
            Quat2EulerDegree( *Quaternions_ref, &Quaternions_abs.z, &Quaternions_abs.y, &Quaternions_abs.x ); /*order in Quat2Euler seems to be reversed ?*/

            for ( pos_idx = 1; pos_idx < pMultiBinPoseData->num_poses; pos_idx++ )
            {
                Quaternions_rel.x = pMultiBinPoseData->relative_head_poses[pos_idx][0] - pMultiBinPoseData->relative_head_poses[pos_idx - 1][0];
                Quaternions_rel.y = pMultiBinPoseData->relative_head_poses[pos_idx][1] - pMultiBinPoseData->relative_head_poses[pos_idx - 1][1];
                Quaternions_rel.z = pMultiBinPoseData->relative_head_poses[pos_idx][2] - pMultiBinPoseData->relative_head_poses[pos_idx - 1][2];
                Quaternions_abs.x = Quaternions_abs.x + Quaternions_rel.x;
                Quaternions_abs.y = Quaternions_abs.y + Quaternions_rel.y;
                Quaternions_abs.z = Quaternions_abs.z + Quaternions_rel.z;
                Quaternions_rot.x = Quaternions_abs.x + pMultiBinPoseData->relative_head_poses[pos_idx][0];
                Quaternions_rot.y = Quaternions_abs.y + pMultiBinPoseData->relative_head_poses[pos_idx][1];
                Quaternions_rot.z = Quaternions_abs.z + pMultiBinPoseData->relative_head_poses[pos_idx][2];

                QuatToRotMat( Quaternions_rel, Rmat_local );
                QuatToRotMat( Quaternions_rot, Rmat_local );

                hDiracDecBin = st_ivas->hDiracDecBin[pos_idx];
                assert(hDiracDecBin != NULL && "No DiracDecBin handle for this position");