Commit 76dc2a82 authored by TYAGIRIS's avatar TYAGIRIS
Browse files

fixes to pre renderer and post renderer

parent a86aff45
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -58,11 +58,11 @@ void Euler2Quat_fx(
)
{
    Word16 cr = getCosWord16( extract_l( L_shr_r( roll, 10 ) ) );           // Q14
    Word16 sr = getSinWord16( extract_l( L_shr_r( roll, 10 ) ) );
    Word16 sr = shr( getSinWord16( extract_l( L_shr_r( roll, 10 ) ) ), 1 ); // Q14
    Word16 cp = getCosWord16( extract_l( L_shr_r( pitch, 10 ) ) );
    Word16 sp = getSinWord16( extract_l( L_shr_r( pitch, 10 ) ) );
    Word16 sp = shr( getSinWord16( extract_l( L_shr_r( pitch, 10 ) ) ), 1 ); // Q14
    Word16 cy = getCosWord16( extract_l( L_shr_r( yaw, 10 ) ) );
    Word16 sy = getSinWord16( extract_l( L_shr_r( yaw, 10 ) ) );
    Word16 sy = shr( getSinWord16( extract_l( L_shr_r( yaw, 10 ) ) ), 1 );                                          // Q14
    quat->w_fx = L_shr_r( L_add( Mpy_32_16_1( L_mult0( cr, cp ), cy ), Mpy_32_16_1( L_mult0( sr, sp ), sy ) ), 5 ); // Q22
    move32();
    quat->x_fx = L_shr_r( L_sub( Mpy_32_16_1( L_mult0( sr, cp ), cy ), Mpy_32_16_1( L_mult0( cr, sp ), sy ) ), 5 ); // Q22
+14 −16
Original line number Diff line number Diff line
@@ -1955,30 +1955,29 @@ void ivas_binRenderer_fx(
    {
        IF( GT_16( pMultiBinPoseData->num_poses, 1 ) )
        {
            IVAS_QUATERNION Quaternions_rel, Quaternions_abs, *Quaternions_ref;
            IVAS_QUATERNION Quaternions_abs, Quaternions_ref, Quaternions_ref2;
            Word32 Rmat_local[MAX_PARAM_SPATIAL_SUBFRAMES][3][3];
            Word16 q_fact_orig;

            IF( hCombinedOrientationData && hBinRenderer->rotInCldfb )
            {
                Quaternions_ref = &hCombinedOrientationData->Quaternions[0];
                Quaternions_rel.w_fx = L_negate( 12582912 ); // Q22
                Quaternions_abs.w_fx = L_negate( 12582912 ); // Q22
                q_fact_orig = Quaternions_ref->q_fact;
                Quaternions_ref = hCombinedOrientationData->Quaternions[0];
                q_fact_orig = Quaternions_ref.q_fact;

                modify_Quat_q_fx( Quaternions_ref, Quaternions_ref, Q22 );
                modify_Quat_q_fx( &Quaternions_ref, &Quaternions_ref, Q22 );

                Quaternions_ref2.w_fx = L_negate( 12582912 ); // Q22
                IF( EQ_16( hCombinedOrientationData->shd_rot_max_order, 0 ) )
                {
                    /*HOA signal already rotated by DirAC*/
                    Quaternions_abs.x_fx = 0;
                    Quaternions_abs.y_fx = 0;
                    Quaternions_abs.z_fx = 0;
                    Quaternions_ref2.x_fx = 0;
                    Quaternions_ref2.y_fx = 0;
                    Quaternions_ref2.z_fx = 0;
                }
                ELSE
                {
                    /*euler*/
                    Quat2EulerDegree_fx( *Quaternions_ref, &Quaternions_abs.z_fx, &Quaternions_abs.y_fx, &Quaternions_abs.x_fx ); /*order in Quat2Euler seems to be reversed ?*/
                    Quat2EulerDegree_fx( Quaternions_ref, &Quaternions_ref2.z_fx, &Quaternions_ref2.y_fx, &Quaternions_ref2.x_fx ); /*order in Quat2Euler seems to be reversed ?*/
                }

                FOR( pos_idx = 1; pos_idx < pMultiBinPoseData->num_poses; pos_idx++ )
@@ -1991,12 +1990,11 @@ void ivas_binRenderer_fx(
                            Copy32( ImagBuffer_local[chIdx][k], ImagBuffer_fx[chIdx][k], CLDFB_NO_CHANNELS_MAX );
                        }
                    }
                    Quaternions_rel.x_fx = L_sub( pMultiBinPoseData->relative_head_poses_fx[pos_idx][0], pMultiBinPoseData->relative_head_poses_fx[pos_idx - 1][0] );
                    Quaternions_rel.y_fx = L_sub( pMultiBinPoseData->relative_head_poses_fx[pos_idx][1], pMultiBinPoseData->relative_head_poses_fx[pos_idx - 1][1] );
                    Quaternions_rel.z_fx = L_sub( pMultiBinPoseData->relative_head_poses_fx[pos_idx][2], pMultiBinPoseData->relative_head_poses_fx[pos_idx - 1][2] );
                    Quaternions_abs.x_fx = L_add( Quaternions_abs.x_fx, Quaternions_rel.x_fx );
                    Quaternions_abs.y_fx = L_add( Quaternions_abs.y_fx, Quaternions_rel.y_fx );
                    Quaternions_abs.z_fx = L_add( Quaternions_abs.z_fx, Quaternions_rel.z_fx );

                    Quaternions_abs.x_fx = L_add( Quaternions_ref2.x_fx, pMultiBinPoseData->relative_head_poses_fx[pos_idx][0] );
                    Quaternions_abs.y_fx = L_add( Quaternions_ref2.y_fx, pMultiBinPoseData->relative_head_poses_fx[pos_idx][1] );
                    Quaternions_abs.z_fx = L_add( Quaternions_ref2.z_fx, pMultiBinPoseData->relative_head_poses_fx[pos_idx][2] );
                    Quaternions_abs.w_fx = L_negate( 12582912 ); // Q22

                    Euler2Quat_fx( deg2rad_fx( Quaternions_abs.x_fx ), deg2rad_fx( Quaternions_abs.y_fx ), deg2rad_fx( Quaternions_abs.z_fx ), &Quaternions_abs );

+5 −5
Original line number Diff line number Diff line
@@ -1493,7 +1493,7 @@ IVAS_DEC_GetSplitBinauralBitstream(
    Q_out[0] = 31;
    Word16 num_poses = hSplitBinRend->splitrend.multiBinPoseData.num_poses;

    for ( i = 0; i < 16; i++ )
    for ( i = 0; i < i_mult( BINAURAL_CHANNELS, numPoses ); i++ )
    {
        for ( j = 0; j < CLDFB_NO_COL_MAX; j++ )
        {
@@ -1502,12 +1502,12 @@ IVAS_DEC_GetSplitBinauralBitstream(
        }
    }
    Q_buff = s_min( q1, q2 );
    for ( i = 0; i < 16; i++ )
    for ( i = 0; i < i_mult( BINAURAL_CHANNELS, numPoses ); i++ )
    {
        for ( j = 0; j < CLDFB_NO_COL_MAX; j++ )
        {
            scale_sig32( Cldfb_RealBuffer_Binaural[i][j], Q_buff, CLDFB_NO_CHANNELS_MAX );
            scale_sig32( Cldfb_ImagBuffer_Binaural[i][j], Q_buff, CLDFB_NO_CHANNELS_MAX );
            scale_sig32( Cldfb_RealBuffer_Binaural[i][j], CLDFB_NO_CHANNELS_MAX, Q_buff );
            scale_sig32( Cldfb_ImagBuffer_Binaural[i][j], CLDFB_NO_CHANNELS_MAX, Q_buff );
        }
    }
    Q_buff = Q_buff + Q6;
@@ -1526,7 +1526,7 @@ IVAS_DEC_GetSplitBinauralBitstream(

        FOR( i = 0; i < num_poses * BINAURAL_CHANNELS; ++i )
        {
            scale_sig32( output[i], Q_out[0], L_FRAME48k );
            scale_sig32( output[i], L_FRAME48k, Q_out[0] );
        }
    }
    if ( ( error = ISAR_PRE_REND_MultiBinToSplitBinaural( &hSplitBinRend->splitrend,
+2 −2
Original line number Diff line number Diff line
@@ -999,7 +999,7 @@ void ComputePredictors_fx(
                iA1Mag = ( iA1Mag > PRED_QUANT_FILTER_MAG_MIN ) ? iA1Mag : PRED_QUANT_FILTER_MAG_MIN;
                iA1Mag = ( iA1Mag < PRED_QUANT_FILTER_MAG_MAX ) ? iA1Mag : PRED_QUANT_FILTER_MAG_MAX;
                // fA1Mag = sinf(fInvMagScale * (float)iA1Mag);
                fA1Mag_fx = L_deposit_l( getSinWord16( extract_l( L_shr( L_mult0( extract_l( fInvMagScale_fx ), extract_l( iA1Mag ) ), 2 ) ) ) ); // Q14
                fA1Mag_fx = L_deposit_l( shr( getSinWord16( extract_l( L_shr( L_mult0( extract_l( fInvMagScale_fx ), extract_l( iA1Mag ) ), 2 ) ) ), 1 ) ); // Q14

                // fA1Phase = atan2f(fA1Imag, fA1Real);
                fA1Phase_fx = BASOP_util_atan2( fA1Imag_fx, fA1Real_fx, 0 ); // Q13
@@ -1025,7 +1025,7 @@ void ComputePredictors_fx(
                // fA1Real = fA1Mag * cosf(fA1Phase);
                fA1Real_fx = L_mult0( extract_l( fA1Mag_fx ), getCosWord16( extract_l( L_shr( L_temp, 2 ) ) ) ); // Q28
                // fA1Imag = fA1Mag * sinf(fA1Phase);
                fA1Imag_fx = L_mult0( extract_l( fA1Mag_fx ), getSinWord16( extract_l( L_shr( L_temp, 2 ) ) ) ); // Q28
                fA1Imag_fx = L_mult0( extract_l( fA1Mag_fx ), shr( getSinWord16( extract_l( L_shr( L_temp, 2 ) ) ), 1 ) ); // Q28

                // fGain2 = 1.0f / (1.0f - fA1Real * fA1Real - fA1Imag * fA1Imag);
                exp = 0;
+8 −3
Original line number Diff line number Diff line
@@ -858,6 +858,9 @@ void isar_splitBinPostRendMdDec_fx(
        angle = sub( angle, 180 );
        hBinHrSplitPostRend->QuaternionsPre[sf_idx].z_fx = L_shl( angle, Q22 ); /* Q22 */
        move32();

        hBinHrSplitPostRend->QuaternionsPre[sf_idx].q_fact = Q22;
        move32();
    }

#ifdef SPLIT_REND_POSE_CORRECTION_UNUSED_BITS
@@ -1347,7 +1350,7 @@ static void get_interpolation_vars(
    Word16 *q_pitch,
    Word16 *q_roll )
{
    IVAS_QUATERNION quaternions_diff, quaternions_ref_euler, quaternions_act_euler;
    IVAS_QUATERNION quaternions_diff, quaternions_ref_euler, quaternions_act_euler, quaternions_ref_q22, quaternions_act_q22;
    Word32 y_fx[MAX_HEAD_ROT_POSES], p_fx[MAX_HEAD_ROT_POSES], r_fx[MAX_HEAD_ROT_POSES];

    int16_t pos_idx, num_poses;
@@ -1371,8 +1374,10 @@ static void get_interpolation_vars(

    /*interpolation if actual pose is not same as one of assumed poses*/
    /*get the deviation*/
    Quat2EulerDegree_fx( *Quaternions_ref, &quaternions_ref_euler.z_fx, &quaternions_ref_euler.y_fx, &quaternions_ref_euler.x_fx ); /*order in Quat2Euler seems to be reversed ?*/
    Quat2EulerDegree_fx( *Quaternions_act, &quaternions_act_euler.z_fx, &quaternions_act_euler.y_fx, &quaternions_act_euler.x_fx );
    modify_Quat_q_fx( Quaternions_ref, &quaternions_ref_q22, Q22 );
    modify_Quat_q_fx( Quaternions_act, &quaternions_act_q22, Q22 );
    Quat2EulerDegree_fx( quaternions_ref_q22, &quaternions_ref_euler.z_fx, &quaternions_ref_euler.y_fx, &quaternions_ref_euler.x_fx ); /*order in Quat2Euler seems to be reversed ?*/
    Quat2EulerDegree_fx( quaternions_act_q22, &quaternions_act_euler.z_fx, &quaternions_act_euler.y_fx, &quaternions_act_euler.x_fx );

    /*order in Quat2Euler seems to be reversed ?*/
    quaternions_diff.w_fx = -12582912; /*euler*/ //-3 in Q22
Loading