Commit a38c3466 authored by emerit's avatar emerit
Browse files

on going

parent ead2866d
Loading
Loading
Loading
Loading
+22 −2
Original line number Diff line number Diff line
@@ -4960,7 +4960,7 @@ static void getDirectPartGains_fx(
                                                                              // aziDeg = L_shr(aziDeg_32, 22);
            }
#ifdef FIX_POINT_HRTF_FILE_FORMAT
            hrtfShGetHrtf_fx( bin, aziDeg, eleDeg, lRealp, lImagp, rRealp, rImagp, gainCache, TRUE, hHrtfParambin );
            hrtfShGetHrtf_fx( bin, aziDeg, eleDeg, lRealp, lImagp, rRealp, rImagp, gainCache, FALSE, hHrtfParambin );
#else
            hrtfShGetHrtf_fx( bin, aziDeg, eleDeg, lRealp, lImagp, rRealp, rImagp, gainCache, FALSE );
#endif
@@ -4987,6 +4987,12 @@ static void hrtfShGetHrtf_fx(
)
{
    Word16 k;
#ifdef FIX_POINT_HRTF_FILE_FORMAT
    Word16( *hrtfShCoeffsReInt )[16][60];
    Word16( *hrtfShCoeffsImInt )[16][60];
    hrtfShCoeffsReInt = hHrtfParambin->hrtfShCoeffsRe_fx;
    hrtfShCoeffsImInt = hHrtfParambin->hrtfShCoeffsIm_fx;
#endif

    *lRealp = 0;
    *lImagp = 0;
@@ -5004,10 +5010,17 @@ static void hrtfShGetHrtf_fx(

        FOR( k = 0; k < HRTF_SH_CHANNELS; k++ )
        {
#ifdef FIX_POINT_HRTF_FILE_FORMAT
            *lRealp = Madd_32_16( *lRealp, shVec[k], hrtfShCoeffsReInt[0][k][bin] ); // Q28
            *lImagp = Madd_32_16( *lImagp, shVec[k], hrtfShCoeffsImInt[0][k][bin] ); // Q28
            *rRealp = Madd_32_16( *rRealp, shVec[k], hrtfShCoeffsReInt[1][k][bin] ); // Q28
            *rImagp = Madd_32_16( *rImagp, shVec[k], hrtfShCoeffsImInt[1][k][bin] ); // Q28
#else
            *lRealp = Madd_32_16( *lRealp, shVec[k], hrtfShCoeffsRe_fx[0][k][bin] ); // Q28
            *lImagp = Madd_32_16( *lImagp, shVec[k], hrtfShCoeffsIm_fx[0][k][bin] ); // Q28
            *rRealp = Madd_32_16( *rRealp, shVec[k], hrtfShCoeffsRe_fx[1][k][bin] ); // Q28
            *rImagp = Madd_32_16( *rImagp, shVec[k], hrtfShCoeffsIm_fx[1][k][bin] ); // Q28
#endif
            move32();
            move32();
            move32();
@@ -5026,10 +5039,17 @@ static void hrtfShGetHrtf_fx(

        FOR( k = 0; k < HRTF_SH_CHANNELS; k++ )
        {
#ifdef FIX_POINT_HRTF_FILE_FORMAT
            *lRealp = Madd_32_16( *lRealp, shVec[k], hrtfShCoeffsReInt[0][k][bin] ); // Q28
            *lImagp = Madd_32_16( *lImagp, shVec[k], hrtfShCoeffsImInt[0][k][bin] ); // Q28
            *rRealp = Madd_32_16( *rRealp, shVec[k], hrtfShCoeffsReInt[1][k][bin] ); // Q28
            *rImagp = Madd_32_16( *rImagp, shVec[k], hrtfShCoeffsImInt[1][k][bin] ); // Q28
#else
            *lRealp = Madd_32_16( *lRealp, shVec[k], hrtfShCoeffsRe_fx[0][k][bin] ); // Q28
            *lImagp = Madd_32_16( *lImagp, shVec[k], hrtfShCoeffsIm_fx[0][k][bin] ); // Q28
            *rRealp = Madd_32_16( *rRealp, shVec[k], hrtfShCoeffsRe_fx[1][k][bin] ); // Q28
            *rImagp = Madd_32_16( *rImagp, shVec[k], hrtfShCoeffsIm_fx[1][k][bin] ); // Q28
#endif
            gainCache->shVec_fx[k] = shVec[k]; // Q29
            move32();
            move32();
+15 −0
Original line number Diff line number Diff line
@@ -663,13 +663,24 @@ static void getStandardBSplineSampVec_fx(
    Word32 tmp32;

    /* assuming triple knot at the first knot */
#ifdef FIX_TDREND_HRTF_FILE_FORMAT
    Word32 tmp32_2;
    tmp32 = L_deposit_h( KSeq_fx[NumBFs - 3] );
    tmp32_2 = L_deposit_h( KSeq_fx[0] );
    knot_interval_fx = L_deposit_h( BASOP_Util_Divide3216_Scale( L_sub( tmp32, tmp32_2 ), sub( NumBFs, 3 ), &tmp_e1 ) );
#else
    knot_interval_fx = L_deposit_h( BASOP_Util_Divide3216_Scale( L_sub( KSeq_fx[NumBFs - 3], KSeq_fx[0] ), sub( NumBFs, 3 ), &tmp_e1 ) );
#endif
    tmp_e1 = add( tmp_e1, 9 - 15 );

    /* index of closest sample point */
    tmp32 = L_deposit_h( BASOP_Util_Divide3216_Scale( knot_interval_fx, SegSamples, &tmp_e2 ) );
    tmp_e2 = add( tmp_e2, sub( tmp_e1, 15 ) );
#ifdef FIX_TDREND_HRTF_FILE_FORMAT
    tmp32 = L_deposit_h( BASOP_Util_Divide3232_Scale( L_sub( t_fx, tmp32_2 ), tmp32, &tmp_e3 ) );
#else
    tmp32 = L_deposit_h( BASOP_Util_Divide3232_Scale( L_sub( t_fx, KSeq_fx[0] ), tmp32, &tmp_e3 ) );
#endif
    tmp_e3 = add( tmp_e3, sub( 9, tmp_e2 ) );
    tmp32 = L_shr( tmp32, sub( 9, tmp_e3 ) ); // Q22 (assuming tmp32 will be in range of Q22)
    d0 = extract_l( round_fixed( tmp32, 22 ) );
@@ -704,7 +715,11 @@ static void getStandardBSplineSampVec_fx(
        {
            d = sub( shl( sub( BsLen[shape_idx], 1 ), 1 ), d );
        }
#ifdef FIX_TDREND_HRTF_FILE_FORMAT
        BfVec_fx[i] = L_deposit_h( BsShape_fx[add( BsStart[shape_idx], abs_s( d ) )] ); /*TT, verify if abs is needed */
#else
        BfVec_fx[i] = BsShape_fx[add( BsStart[shape_idx], abs_s( d ) )]; /*TT, verify if abs is needed */
#endif
        move32();
        NzIdx[i] = add( nI, i );
        move16();
+27 −27
Original line number Diff line number Diff line
@@ -405,49 +405,49 @@ static void LoadBSplineBinaryITD(
    {
        return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for hrtf data" );
    }
    fread( &modelITD->W_e, 1, sizeof( int16_t ), f_hrtf );
    fread( &modelITD->W_e, 1, sizeof( Word16 ), f_hrtf );
    fread( modelITD->W_dyn_fx, sizeof( Word16 ), tmp, f_hrtf );

    modelITD->azimBsLen_dyn_fx = (int16_t *) malloc( HRTF_MODEL_BSPLINE_NUM_COEFFS * sizeof( int16_t ) );
    modelITD->azimBsLen_dyn_fx = (Word16 *) malloc( HRTF_MODEL_BSPLINE_NUM_COEFFS * sizeof( Word16 ) );
    if ( modelITD->azimBsLen_dyn_fx == NULL )
    {
        return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for hrtf data" );
    }
    fread( modelITD->azimBsLen_dyn_fx, sizeof( int16_t ), HRTF_MODEL_BSPLINE_NUM_COEFFS, f_hrtf );
    modelITD->azimBsStart_dyn_fx = (int16_t *) malloc( HRTF_MODEL_BSPLINE_NUM_COEFFS * sizeof( int16_t ) );
    fread( modelITD->azimBsLen_dyn_fx, sizeof( Word16 ), HRTF_MODEL_BSPLINE_NUM_COEFFS, f_hrtf );
    modelITD->azimBsStart_dyn_fx = (Word16 *) malloc( HRTF_MODEL_BSPLINE_NUM_COEFFS * sizeof( Word16 ) );
    if ( modelITD->azimBsStart_dyn_fx == NULL )
    {
        return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for hrtf data" );
    }
    fread( modelITD->azimBsStart_dyn_fx, sizeof( int16_t ), HRTF_MODEL_BSPLINE_NUM_COEFFS, f_hrtf );
    fread( modelITD->azimBsStart_dyn_fx, sizeof( Word16 ), HRTF_MODEL_BSPLINE_NUM_COEFFS, f_hrtf );

    /* azimuth */
    fread( &tmp, sizeof( int16_t ), 1, f_hrtf );
    fread( &tmp, sizeof( Word16 ), 1, f_hrtf );

    modelITD->azimBsShape_dyn_fx = (Word16 *) malloc( tmp * sizeof( Word16 ) );
    if ( modelITD->azimBsShape_dyn_fx == NULL )
    {
        return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for hrtf data" );
    }
    fread( &modelITD->azimBsShape_e, 1, sizeof( int16_t ), f_hrtf );
    fread( modelITD->azimBsShape_dyn_fx, sizeof( int16_t ), tmp, f_hrtf );
    fread( &modelITD->azimSegSamples, sizeof( int16_t ), 1, f_hrtf );
    fread( &modelITD->azimBsShape_e, 1, sizeof( Word16 ), f_hrtf );
    fread( modelITD->azimBsShape_dyn_fx, sizeof( Word16 ), tmp, f_hrtf );
    fread( &modelITD->azimSegSamples, sizeof( Word16 ), 1, f_hrtf );

    /* elevation */
    modelITD->elevBsLen_dyn_fx = (int16_t *) malloc( HRTF_MODEL_BSPLINE_NUM_COEFFS * sizeof( int16_t ) );
    modelITD->elevBsLen_dyn_fx = (Word16 *) malloc( HRTF_MODEL_BSPLINE_NUM_COEFFS * sizeof( Word16 ) );
    if ( modelITD->elevBsLen_dyn_fx == NULL )
    {
        return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for hrtf data" );
    }
    fread( modelITD->elevBsLen_dyn_fx, sizeof( int16_t ), HRTF_MODEL_BSPLINE_NUM_COEFFS, f_hrtf );
    modelITD->elevBsStart_dyn_fx = (int16_t *) malloc( HRTF_MODEL_BSPLINE_NUM_COEFFS * sizeof( int16_t ) );
    fread( modelITD->elevBsLen_dyn_fx, sizeof( Word16 ), HRTF_MODEL_BSPLINE_NUM_COEFFS, f_hrtf );
    modelITD->elevBsStart_dyn_fx = (Word16 *) malloc( HRTF_MODEL_BSPLINE_NUM_COEFFS * sizeof( Word16 ) );
    if ( modelITD->elevBsStart_dyn_fx == NULL )
    {
        return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for hrtf data" );
    }
    fread( modelITD->elevBsStart_dyn_fx, sizeof( int16_t ), HRTF_MODEL_BSPLINE_NUM_COEFFS, f_hrtf );
    fread( modelITD->elevBsStart_dyn_fx, sizeof( Word16 ), HRTF_MODEL_BSPLINE_NUM_COEFFS, f_hrtf );

    fread( &tmp, sizeof( int16_t ), 1, f_hrtf );
    fread( &tmp, sizeof( Word16 ), 1, f_hrtf );

    modelITD->elevBsShape_dyn_fx = (Word16 *) malloc( tmp * sizeof( Word16 ) );
    if ( modelITD->elevBsShape_dyn_fx == NULL )
@@ -455,10 +455,10 @@ static void LoadBSplineBinaryITD(
        return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for hrtf data" );
    }

    fread( &modelITD->elevBsShape_e, 1, sizeof( int16_t ), f_hrtf );
    fread( &modelITD->elevBsShape_e, 1, sizeof( Word16 ), f_hrtf );

    fread( modelITD->elevBsShape_dyn_fx, sizeof( Word16 ), tmp, f_hrtf );
    fread( &modelITD->elevSegSamples, sizeof( int16_t ), 1, f_hrtf );
    fread( &modelITD->elevSegSamples, sizeof( Word16 ), 1, f_hrtf );

    modelITD->elevKSeq_fx = (const Word16 *) modelITD->elevKSeq_dyn_fx;
    modelITD->azimKSeq_fx = (const Word16 *) modelITD->azimKSeq_dyn_fx;
@@ -641,10 +641,10 @@ static ivas_error LoadBSplineBinary(
    fread( model->AlphaR_dyn_fx, sizeof( Word16 ), model->AlphaN * model->K, f_hrtf );

    /* azimuth */
    fread( &model->num_unique_azim_splines, sizeof( int16_t ), 1, f_hrtf );
    fread( &model->num_unique_azim_splines, sizeof( Word16 ), 1, f_hrtf );
    model->azimBsShape_fx = (const Word16 **) malloc( model->num_unique_azim_splines * sizeof( Word16 * ) );
    model->azimBsShape_dyn_fx = (Word16 **) malloc( model->num_unique_azim_splines * sizeof( Word16 * ) );
    model->azimSegSamples_dyn = (int16_t *) malloc( model->num_unique_azim_splines * sizeof( int16_t ) );
    model->azimSegSamples_dyn = (Word16 *) malloc( model->num_unique_azim_splines * sizeof( Word16 ) );
    if ( model->azimBsShape_fx == NULL || model->azimBsShape_dyn_fx == NULL || model->azimSegSamples_dyn == NULL )
    {
        return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for hrtf data" );
@@ -658,18 +658,18 @@ static ivas_error LoadBSplineBinary(
        {
            return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for hrtf data" );
        }
        fread( &model->azimBsShape_e, 1, sizeof( int16_t ), f_hrtf );
        fread( &model->azimBsShape_e, 1, sizeof( Word16 ), f_hrtf );
        fread( model->azimBsShape_dyn_fx[i], sizeof( Word16 ), tmp, f_hrtf );
        fread( &model->azimSegSamples_dyn[i], sizeof( Word16 ), 1, f_hrtf );
    }

    model->azimShapeIdx_dyn = (int16_t *) malloc( model->elevDim3 * sizeof( int16_t ) );
    model->azimShapeIdx_dyn = (Word16 *) malloc( model->elevDim3 * sizeof( Word16 ) );
    if ( model->azimShapeIdx_dyn == NULL )
    {
        return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for hrtf data" );
    }
    fread( model->azimShapeIdx_dyn, sizeof( int16_t ), model->elevDim3, f_hrtf );
    model->azimShapeSampFactor_dyn = (int16_t *) malloc( model->elevDim3 * sizeof( int16_t ) );
    fread( model->azimShapeIdx_dyn, sizeof( Word16 ), model->elevDim3, f_hrtf );
    model->azimShapeSampFactor_dyn = (Word16 *) malloc( model->elevDim3 * sizeof( Word16 ) );
    if ( model->azimShapeSampFactor_dyn == NULL )
    {
        return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for hrtf data" );
@@ -677,19 +677,19 @@ static ivas_error LoadBSplineBinary(
    fread( model->azimShapeSampFactor_dyn, sizeof( int16_t ), model->elevDim3, f_hrtf );

    /* elevation */
    model->elevBsLen_dyn = (int16_t *) malloc( HRTF_MODEL_BSPLINE_NUM_COEFFS * sizeof( int16_t ) );
    model->elevBsLen_dyn = (Word16 *) malloc( HRTF_MODEL_BSPLINE_NUM_COEFFS * sizeof( Word16 ) );
    if ( model->elevBsLen_dyn == NULL )
    {
        return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for hrtf data" );
    }
    fread( model->elevBsLen_dyn, sizeof( int16_t ), HRTF_MODEL_BSPLINE_NUM_COEFFS, f_hrtf );
    model->elevBsStart_dyn = (int16_t *) malloc( HRTF_MODEL_BSPLINE_NUM_COEFFS * sizeof( int16_t ) );
    fread( model->elevBsLen_dyn, sizeof( Word16 ), HRTF_MODEL_BSPLINE_NUM_COEFFS, f_hrtf );
    model->elevBsStart_dyn = (Word16 *) malloc( HRTF_MODEL_BSPLINE_NUM_COEFFS * sizeof( Word16 ) );
    if ( model->elevBsStart_dyn == NULL )
    {
        return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for hrtf data" );
    }
    fread( model->elevBsStart_dyn, sizeof( int16_t ), HRTF_MODEL_BSPLINE_NUM_COEFFS, f_hrtf );
    fread( &tmp, sizeof( int16_t ), 1, f_hrtf );
    fread( model->elevBsStart_dyn, sizeof( Word16 ), HRTF_MODEL_BSPLINE_NUM_COEFFS, f_hrtf );
    fread( &tmp, sizeof( Word16 ), 1, f_hrtf );

    model->elevBsShape_dyn_fx = (Word16 *) malloc( tmp * sizeof( Word16 ) );
    if ( model->elevBsShape_dyn_fx == NULL )