Commit b20d8e38 authored by emerit's avatar emerit
Browse files

bug fix

parent 8c3e3f9f
Loading
Loading
Loading
Loading
+37 −22
Original line number Diff line number Diff line
@@ -371,6 +371,21 @@ ivas_error TDREND_MIX_AddSrc_fx(
#endif
}

#ifdef USE_TDREND_16BIT_ROM
static void Copy_Scale_sig_16_32_r(
    const Word16 x[], /* i  : signal to scale input           Qx        */
    Word32 y[],       /* o  : scaled signal output            Qx        */
    const Word16 lg,  /* i  : size of x[]                     Q0        */
    const Word16 exp0 /* i  : exponent: x = round(x << exp)   Qx ?exp  */
)
{
    Word16 i;
    for ( i = 0; i < lg; i++ )
    {
        y[i] = L_shl_r( L_deposit_l( x[i] ), exp0 );
    }
}
#endif
/*-------------------------------------------------------------------*
 * BSplineModelEvalAlloc()
 *
@@ -484,19 +499,19 @@ static ivas_error DefaultBSplineModel_fx(
    {
        return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for hrtf data" );
    }
    Copy_Scale_sig_16_32_no_sat( defaultHRIR_rom_elevKSeq_fx, model->elevKSeq_dyn_fx, ( model->elevDim3 - 2 ), Q22 - defaultHRIR_rom_elevKSeq_Q_fx ); // Q22
    Copy_Scale_sig_16_32_r( defaultHRIR_rom_elevKSeq_fx, model->elevKSeq_dyn_fx, ( model->elevDim3 - 2 ), Q22 - defaultHRIR_rom_elevKSeq_Q_fx ); // Q22
    model->elevKSeq_fx = model->elevKSeq_dyn_fx;
#else
    model->elevKSeq_fx = defaultHRIR_rom_elevKSeq_fx;                        // Q22
#endif

#ifdef USE_TDREND_16BIT_ROM
    model->elevBsShape_dyn_fx = (Word32 *) malloc( 36 * sizeof( Word32 ) );
    model->elevBsShape_dyn_fx = (Word32 *) malloc( sizeof( defaultHRIR_rom_elevBsShape_fx ) * sizeof( Word32 ) / sizeof( Word16 ) );
    if ( model->elevBsShape_dyn_fx == NULL )
    {
        return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for hrtf data" );
    }
    Copy_Scale_sig_16_32_no_sat( defaultHRIR_rom_elevBsShape_fx, model->elevBsShape_dyn_fx, 36, Q30 - defaultHRIR_rom_elevBsShape_Q_fx ); // Q22
    Copy_Scale_sig_16_32_r( defaultHRIR_rom_elevBsShape_fx, model->elevBsShape_dyn_fx, sizeof( defaultHRIR_rom_elevBsShape_fx ) / sizeof( Word16 ), Q30 - defaultHRIR_rom_elevBsShape_Q_fx ); // Q30
    model->elevBsShape_fx = model->elevBsShape_dyn_fx;
#else
    model->elevBsShape_fx = (const Word32 *) defaultHRIR_rom_elevBsShape_fx; // Q30
@@ -512,12 +527,12 @@ static ivas_error DefaultBSplineModel_fx(
    {
        return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for hrtf data" );
    }
    model->azimBsShape_dyn_fx[0] = (Word32 *) malloc( 21 * sizeof( Word32 ) );
    model->azimBsShape_dyn_fx[0] = (Word32 *) malloc( sizeof( defaultHRIR_rom_azimBsShape_fx ) * sizeof( Word32 ) / sizeof( Word16 ) );
    if ( model->azimBsShape_dyn_fx[0] == NULL )
    {
        return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for hrtf data" );
    }
    Copy_Scale_sig_16_32_no_sat( defaultHRIR_rom_azimBsShape_fx, model->azimBsShape_dyn_fx[0], 21, Q30 - defaultHRIR_rom_azimBsShape_Q_fx ); // Q22
    Copy_Scale_sig_16_32_r( defaultHRIR_rom_azimBsShape_fx, model->azimBsShape_dyn_fx[0], sizeof( defaultHRIR_rom_azimBsShape_fx ) / sizeof( Word16 ), Q30 - defaultHRIR_rom_azimBsShape_Q_fx ); // Q30
    model->azimBsShape_fx[0] = model->azimBsShape_dyn_fx[0];
#else
    model->azimBsShape_fx[0] = defaultHRIR_rom_azimBsShape_fx;               // Q30
@@ -594,8 +609,8 @@ static ivas_error DefaultBSplineModel_fx(
            {
                return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for hrtf data" );
            }
            Copy_Scale_sig_16_32_no_sat( defaultHRIR_rom_AlphaL48_fx, model->AlphaL_dyn_fx, 30080, Q30 - defaultHRIR_rom_Alpha48_Q_fx );                 // Q22
            Copy_Scale_sig_16_32_no_sat( &defaultHRIR_rom_AlphaL48_fx[30080], &model->AlphaL_dyn_fx[30080], 30080, Q30 - defaultHRIR_rom_Alpha48_Q_fx ); // Q22
            Copy_Scale_sig_16_32_r( defaultHRIR_rom_AlphaL48_fx, model->AlphaL_dyn_fx, 30080, Q30 - defaultHRIR_rom_Alpha48_Q_fx );                 // Q30
            Copy_Scale_sig_16_32_r( &defaultHRIR_rom_AlphaL48_fx[30080], &model->AlphaL_dyn_fx[30080], 30080, Q30 - defaultHRIR_rom_Alpha48_Q_fx ); // Q30
            model->AlphaL_fx = model->AlphaL_dyn_fx;
            model->AlphaL_e = Q15 - defaultHRIR_rom_Alpha48_Q_fx;
#else
@@ -609,8 +624,8 @@ static ivas_error DefaultBSplineModel_fx(
            {
                return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for hrtf data" );
            }
            Copy_Scale_sig_16_32_no_sat( defaultHRIR_rom_AlphaR48_fx, model->AlphaR_dyn_fx, 30080, Q30 - defaultHRIR_rom_Alpha48_Q_fx );                 // Q22
            Copy_Scale_sig_16_32_no_sat( &defaultHRIR_rom_AlphaR48_fx[30080], &model->AlphaR_dyn_fx[30080], 30080, Q30 - defaultHRIR_rom_Alpha48_Q_fx ); // Q22
            Copy_Scale_sig_16_32_r( defaultHRIR_rom_AlphaR48_fx, model->AlphaR_dyn_fx, 30080, Q30 - defaultHRIR_rom_Alpha48_Q_fx );                 // Q22
            Copy_Scale_sig_16_32_r( &defaultHRIR_rom_AlphaR48_fx[30080], &model->AlphaR_dyn_fx[30080], 30080, Q30 - defaultHRIR_rom_Alpha48_Q_fx ); // Q22
            model->AlphaR_fx = model->AlphaR_dyn_fx;
            model->AlphaR_e = Q15 - defaultHRIR_rom_Alpha48_Q_fx;
#else
@@ -651,8 +666,8 @@ static ivas_error DefaultBSplineModel_fx(
            {
                return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for hrtf data" );
            }
            Copy_Scale_sig_16_32_no_sat( defaultHRIR_rom_AlphaL32_fx, model->AlphaL_dyn_fx, 20210, Q30 - defaultHRIR_rom_Alpha32_Q_fx );                 // Q22
            Copy_Scale_sig_16_32_no_sat( &defaultHRIR_rom_AlphaL32_fx[20210], &model->AlphaL_dyn_fx[20210], 20210, Q30 - defaultHRIR_rom_Alpha32_Q_fx ); // Q22
            Copy_Scale_sig_16_32_r( defaultHRIR_rom_AlphaL32_fx, model->AlphaL_dyn_fx, 20210, Q30 - defaultHRIR_rom_Alpha32_Q_fx );                 // Q22
            Copy_Scale_sig_16_32_r( &defaultHRIR_rom_AlphaL32_fx[20210], &model->AlphaL_dyn_fx[20210], 20210, Q30 - defaultHRIR_rom_Alpha32_Q_fx ); // Q22
            model->AlphaL_fx = model->AlphaL_dyn_fx;
            model->AlphaL_e = Q15 - defaultHRIR_rom_Alpha32_Q_fx;
#else
@@ -666,8 +681,8 @@ static ivas_error DefaultBSplineModel_fx(
            {
                return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for hrtf data" );
            }
            Copy_Scale_sig_16_32_no_sat( defaultHRIR_rom_AlphaR32_fx, model->AlphaR_dyn_fx, 20210, Q30 - defaultHRIR_rom_Alpha32_Q_fx );                 // Q22
            Copy_Scale_sig_16_32_no_sat( &defaultHRIR_rom_AlphaR32_fx[20210], &model->AlphaR_dyn_fx[20210], 20210, Q30 - defaultHRIR_rom_Alpha32_Q_fx ); // Q22
            Copy_Scale_sig_16_32_r( defaultHRIR_rom_AlphaR32_fx, model->AlphaR_dyn_fx, 20210, Q30 - defaultHRIR_rom_Alpha32_Q_fx );                 // Q22
            Copy_Scale_sig_16_32_r( &defaultHRIR_rom_AlphaR32_fx[20210], &model->AlphaR_dyn_fx[20210], 20210, Q30 - defaultHRIR_rom_Alpha32_Q_fx ); // Q22
            model->AlphaR_fx = model->AlphaR_dyn_fx;
            model->AlphaR_e = Q15 - defaultHRIR_rom_Alpha32_Q_fx;
#else
@@ -708,7 +723,7 @@ static ivas_error DefaultBSplineModel_fx(
            {
                return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for hrtf data" );
            }
            Copy_Scale_sig_16_32_no_sat( defaultHRIR_rom_AlphaL16_fx, model->AlphaL_dyn_fx, 20210, Q30 - defaultHRIR_rom_Alpha16_Q_fx ); // Q22
            Copy_Scale_sig_16_32_r( defaultHRIR_rom_AlphaL16_fx, model->AlphaL_dyn_fx, 20210, Q30 - defaultHRIR_rom_Alpha16_Q_fx ); // Q22
            model->AlphaL_fx = model->AlphaL_dyn_fx;
            model->AlphaL_e = Q15 - defaultHRIR_rom_Alpha16_Q_fx;
#else
@@ -722,7 +737,7 @@ static ivas_error DefaultBSplineModel_fx(
            {
                return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for hrtf data" );
            }
            Copy_Scale_sig_16_32_no_sat( defaultHRIR_rom_AlphaR16_fx, model->AlphaR_dyn_fx, 20210, Q30 - defaultHRIR_rom_Alpha16_Q_fx ); // Q22
            Copy_Scale_sig_16_32_r( defaultHRIR_rom_AlphaR16_fx, model->AlphaR_dyn_fx, 20210, Q30 - defaultHRIR_rom_Alpha16_Q_fx ); // Q22
            model->AlphaR_fx = model->AlphaR_dyn_fx;
            model->AlphaR_e = Q15 - defaultHRIR_rom_Alpha16_Q_fx;
#else
@@ -733,7 +748,7 @@ static ivas_error DefaultBSplineModel_fx(
            model->EL_fx = (const Word32 *) defaultHRIR_rom_EL16_fx; // Q28
#ifdef USE_TDREND_16BIT_ROM
            model->EL_e = Q31 - defaultHRIR_rom_E16_Q_fx;
            model->EL_e = 3;
            //           model->EL_e = 3;
#else
            model->EL_e = 3;
#endif
@@ -741,7 +756,7 @@ static ivas_error DefaultBSplineModel_fx(
            model->ER_fx = (const Word32 *) defaultHRIR_rom_ER16_fx; // Q28
#ifdef USE_TDREND_16BIT_ROM
            model->ER_e = Q31 - defaultHRIR_rom_E16_Q_fx;
            model->ER_e = 3;
            //           model->ER_e = 3;
#else
            model->ER_e = 3;
#endif
@@ -810,7 +825,7 @@ static ivas_error DefaultBSplineModel_fx(
    {
        return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for hrtf data" );
    }
    Copy_Scale_sig_16_32_no_sat( defaultHRIR_rom_ITD_elevKSeq_fx, modelITD->elevKSeq_dyn_fx, sizeof( defaultHRIR_rom_ITD_elevKSeq_fx ) / sizeof( Word16 ), Q22 - defaultHRIR_rom_ITD_elevKSeq_Q_fx ); // Q22
    Copy_Scale_sig_16_32_r( defaultHRIR_rom_ITD_elevKSeq_fx, modelITD->elevKSeq_dyn_fx, sizeof( defaultHRIR_rom_ITD_elevKSeq_fx ) / sizeof( Word16 ), Q22 - defaultHRIR_rom_ITD_elevKSeq_Q_fx ); // Q22

    modelITD->elevKSeq_fx = modelITD->elevKSeq_dyn_fx;
#else
@@ -848,7 +863,7 @@ static ivas_error DefaultBSplineModel_fx(
    {
        return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for hrtf data" );
    }
    Copy_Scale_sig_16_32_no_sat( defaultHRIR_rom_ITD_azimKSeq_fx, modelITD->azimKSeq_dyn_fx, ( ( modelITD->azimDim3 + 1 ) / 2 - 2 ), Q22 - defaultHRIR_rom_ITD_azimKSeq_Q_fx ); // Q22
    Copy_Scale_sig_16_32_r( defaultHRIR_rom_ITD_azimKSeq_fx, modelITD->azimKSeq_dyn_fx, ( ( modelITD->azimDim3 + 1 ) / 2 - 2 ), Q22 - defaultHRIR_rom_ITD_azimKSeq_Q_fx ); // Q22
    modelITD->azimKSeq_fx = modelITD->azimKSeq_dyn_fx;
#else
    modelITD->azimKSeq_fx = defaultHRIR_rom_ITD_azimKSeq_fx;    // Q22
@@ -859,7 +874,7 @@ static ivas_error DefaultBSplineModel_fx(
    {
        return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for hrtf data" );
    }
    Copy_Scale_sig_16_32_no_sat( defaultHRIR_rom_ITD_W_fx, modelITD->W_dyn_fx, sizeof( defaultHRIR_rom_ITD_W_fx ) / sizeof( Word16 ), Q25 - defaultHRIR_rom_ITD_W_Q_fx ); // Q22
    Copy_Scale_sig_16_32_r( defaultHRIR_rom_ITD_W_fx, modelITD->W_dyn_fx, sizeof( defaultHRIR_rom_ITD_W_fx ) / sizeof( Word16 ), Q25 - defaultHRIR_rom_ITD_W_Q_fx ); // Q22
    modelITD->W_fx = modelITD->W_dyn_fx;
    modelITD->W_e = Q15 - defaultHRIR_rom_ITD_W_Q_fx;
#else
@@ -873,7 +888,7 @@ static ivas_error DefaultBSplineModel_fx(
    {
        return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for hrtf data" );
    }
    Copy_Scale_sig_16_32_no_sat( defaultHRIR_rom_ITD_azimBsShape_fx, modelITD->azimBsShape_dyn_fx, sizeof( defaultHRIR_rom_ITD_azimBsShape_fx ) / sizeof( Word16 ), Q30 - defaultHRIR_rom_ITD_azimBsShape_Q_fx ); // Q22
    Copy_Scale_sig_16_32_r( defaultHRIR_rom_ITD_azimBsShape_fx, modelITD->azimBsShape_dyn_fx, sizeof( defaultHRIR_rom_ITD_azimBsShape_fx ) / sizeof( Word16 ), Q30 - defaultHRIR_rom_ITD_azimBsShape_Q_fx ); // Q22
    modelITD->azimBsShape_fx = modelITD->azimBsShape_dyn_fx;
#else
    modelITD->azimBsShape_fx = defaultHRIR_rom_ITD_azimBsShape_fx; // Q30
@@ -884,7 +899,7 @@ static ivas_error DefaultBSplineModel_fx(
    {
        return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for hrtf data" );
    }
    Copy_Scale_sig_16_32_no_sat( defaultHRIR_rom_ITD_elevBsShape_fx, modelITD->elevBsShape_dyn_fx, sizeof( defaultHRIR_rom_ITD_elevBsShape_fx ) / sizeof( Word16 ), Q30 - defaultHRIR_rom_ITD_elevBsShape_Q_fx ); // Q22
    Copy_Scale_sig_16_32_r( defaultHRIR_rom_ITD_elevBsShape_fx, modelITD->elevBsShape_dyn_fx, sizeof( defaultHRIR_rom_ITD_elevBsShape_fx ) / sizeof( Word16 ), Q30 - defaultHRIR_rom_ITD_elevBsShape_Q_fx ); // Q22
    modelITD->elevBsShape_fx = modelITD->elevBsShape_dyn_fx;
#else
    modelITD->elevBsShape_fx = defaultHRIR_rom_ITD_elevBsShape_fx; // Q30
+1 −11
Original line number Diff line number Diff line
@@ -779,16 +779,10 @@ static ivas_error TDREND_LoadBSplineBinary(
    }
    fread( &factor_Q, 1, sizeof( Word16 ), f_hrtf );

    model->EL_dyn_e = Q15 - factor_Q;
    model->EL_dyn_e = Q31 - factor_Q;
    model->ER_dyn_e = model->EL_dyn_e;
    //    model->ER_dyn_e = 1; /* force to 6 to be corrected  */


    fread( (Word32 *) model->EL_dyn_fx, sizeof( Word32 ), model->AlphaN * HRTF_MODEL_N_SECTIONS, f_hrtf );
    for ( j = 0; j < model->AlphaN * HRTF_MODEL_N_SECTIONS; j++ )
    {
        model->EL_dyn_fx[j] = L_shl_r( model->EL_dyn_fx[j], sub( Q28, factor_Q ) );
    }

    model->ER_dyn_fx = (Word32 *) malloc( model->AlphaN * HRTF_MODEL_N_SECTIONS * sizeof( Word32 ) );
    if ( model->ER_dyn_fx == NULL )
@@ -796,10 +790,6 @@ static ivas_error TDREND_LoadBSplineBinary(
        return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for hrtf data" );
    }
    fread( (Word32 *) model->ER_dyn_fx, sizeof( Word32 ), model->AlphaN * HRTF_MODEL_N_SECTIONS, f_hrtf );
    for ( j = 0; j < model->AlphaN * HRTF_MODEL_N_SECTIONS; j++ )
    {
        model->ER_dyn_fx[j] = L_shl_r( model->ER_dyn_fx[j], sub( Q28, factor_Q ) );
    }

    /* Set const pointers */
    model->AlphaL_fx = (const Word32 *) model->AlphaL_dyn_fx;