Unverified Commit 8442c51c authored by norvell's avatar norvell
Browse files

Add B-spline shape vectors to Word16 memory

parent 5ee14662
Loading
Loading
Loading
Loading
+42 −0
Original line number Diff line number Diff line
@@ -255,6 +255,48 @@ ivas_error ivas_HRTF_binary_open_buffers_int32_ptr(
    return IVAS_ERR_OK;
}

#ifdef FIX_2235_TD_RENDERER_WORD16
/*-----------------------------------------------------------------------*
 * ivas_HRTF_binary_open_buffers_int16_ptr_const()
 *
 * Allocate buffer with dynamic length for HRTF binary Crend handle
 *-----------------------------------------------------------------------*/
ivas_error ivas_HRTF_binary_open_buffers_int16_ptr_const(
    const Word16 ***buffer, /* o  : buffer to allocate      */
    const uint32_t mem_size /* i  : size of buffer          */
)
{
    *buffer = (const Word16 **) malloc( mem_size );

    if ( *buffer == NULL )
    {
        return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HRTF binary data\n" );
    }

    return IVAS_ERR_OK;
}

/*-----------------------------------------------------------------------*
 * ivas_HRTF_binary_open_buffers_int16_ptr()
 *
 * Allocate buffer with dynamic length for HRTF binary Crend handle
 *-----------------------------------------------------------------------*/
ivas_error ivas_HRTF_binary_open_buffers_int16_ptr(
    Word16 ***buffer,       /* o  : buffer to allocate      */
    const uint32_t mem_size /* i  : size of buffer          */
)
{
    *buffer = (Word16 **) malloc( mem_size );

    if ( *buffer == NULL )
    {
        return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HRTF binary data\n" );
    }

    return IVAS_ERR_OK;
}
#endif

/*-----------------------------------------------------------------------*
 * ivas_HRTF_binary_open_buffers_int32_ptr_const()
 *
+51 −10
Original line number Diff line number Diff line
@@ -44,10 +44,12 @@
 * Local function prototypes
 *---------------------------------------------------------------------*/

static void getPeriodicBSplineSampVec_fx( Word32 *BfVec_fx, Word16 *AzIdx, const Word16 NumBFs, const Word32 t_fx, Word16 *num_az_idx, const Word32 knot_interval_fx, const Word32 azimKSeq_0_fx, const Word16 azimSegSamples, const Word32 *azimBsShape_fx, const Word16 subSampFactor );

#ifdef FIX_2235_TD_RENDERER_WORD16
static void getStandardBSplineSampVec_fx( Word32 *BfVec_fx, Word16 *NzIdx, Word16 *num_idx, const Word16 NumBFs, const Word32 t_fx, const Word16 *KSeq_fx, const Word16 KSeq_Q_fx, const Word16 SegSamples, const Word16 *BsLen, const Word16 *BsStart, const Word32 *BsShape_fx );
static void getPeriodicBSplineSampVec_fx( Word32 *BfVec_fx, Word16 *AzIdx, const Word16 NumBFs, const Word32 t_fx, Word16 *num_az_idx, const Word32 knot_interval_fx, const Word16 azimKSeq_0_fx, const Word16 azimKSeq_Q_fx, const Word16 azimSegSamples, const Word16 *azimBsShape_fx, const Word16 azimBsShape_Q_fx, const Word16 subSampFactor );
static void getStandardBSplineSampVec_fx( Word32 *BfVec_fx, Word16 *NzIdx, Word16 *num_idx, const Word16 NumBFs, const Word32 t_fx, const Word16 *KSeq_fx, const Word16 KSeq_Q_fx, const Word16 SegSamples, const Word16 *BsLen, const Word16 *BsStart, const Word16 *BsShape_fx, Word16 BsShape_Q_fx );
#else
static void getPeriodicBSplineSampVec_fx( Word32 *BfVec_fx, Word16 *AzIdx, const Word16 NumBFs, const Word32 t_fx, Word16 *num_az_idx, const Word32 knot_interval_fx, const Word32 azimKSeq_0_fx, const Word16 azimSegSamples, const Word32 *azimBsShape_fx, const Word16 subSampFactor );
static void getStandardBSplineSampVec_fx( Word32 *BfVec_fx, Word16 *NzIdx, Word16 *num_idx, const Word16 NumBFs, const Word32 t_fx, const Word32 *KSeq_fx, const Word16 SegSamples, const Word16 *BsLen, const Word16 *BsStart, const Word32 *BsShape_fx );
#endif
static void GenerateFilter_fx( const Word32 elev, Word32 azim, ModelParams_t *model, ModelEval_t *modelEval );
@@ -221,7 +223,7 @@ static void GenerateFilter_fx(

#ifdef FIX_2235_TD_RENDERER_WORD16
    getStandardBSplineSampVec_fx( modelEval->elevBfVec_fx, EvIdx, &num_ev_idx, model->elevDim3, elev, model->elevKSeq_fx, model->elevKSeq_Q_fx,
                                  model->elevSegSamples, model->elevBsLen, model->elevBsStart, model->elevBsShape_fx );
                                  model->elevSegSamples, model->elevBsLen, model->elevBsStart, model->elevBsShape_fx, model->elevBsShape_Q_fx );
#else
    getStandardBSplineSampVec_fx( modelEval->elevBfVec_fx, EvIdx, &num_ev_idx, model->elevDim3, elev, model->elevKSeq_fx,
                                  model->elevSegSamples, model->elevBsLen, model->elevBsStart, model->elevBsShape_fx );
@@ -255,13 +257,24 @@ static void GenerateFilter_fx(
            k = EvIdx[p];
            move16();

#ifdef FIX_2235_TD_RENDERER_WORD16
            knot_interval = L_deposit_h( BASOP_Util_Divide3216_Scale( L_sub( L_deposit_l( model->azimKSeq_fx[k][model->azimDim3[k]] ), L_deposit_l( model->azimKSeq_fx[k][0] ) ), model->azimDim3[k], &tmp_e ) );
            tmp_e = add( tmp_e, 16 + 9 - 15 );
#else
            knot_interval = L_deposit_h( BASOP_Util_Divide3216_Scale( L_sub( model->azimKSeq_fx[k][model->azimDim3[k]], model->azimKSeq_fx[k][0] ), model->azimDim3[k], &tmp_e ) );
            tmp_e = add( tmp_e, 9 - 15 );
#endif
            knot_interval = L_shr( knot_interval, sub( 9, tmp_e ) ); // variable Q to Q22

#ifdef FIX_2235_TD_RENDERER_WORD16
            getPeriodicBSplineSampVec_fx( modelEval->azimBfVec_fx[p], AzIdx[p], model->azimDim3[k], azim, &num_az_idx[p],
                                          knot_interval, model->azimKSeq_fx[k][0], model->azimKSeq_Q_fx[k], model->azimSegSamples[model->azimShapeIdx[k]],
                                          model->azimBsShape_fx[model->azimShapeIdx[k]], model->azimBsShape_Q_fx[model->azimShapeIdx[k]], model->azimShapeSampFactor[k] );
#else
            getPeriodicBSplineSampVec_fx( modelEval->azimBfVec_fx[p], AzIdx[p], model->azimDim3[k], azim, &num_az_idx[p],
                                          knot_interval, model->azimKSeq_fx[k][0], model->azimSegSamples[model->azimShapeIdx[k]],
                                          model->azimBsShape_fx[model->azimShapeIdx[k]], model->azimShapeSampFactor[k] );
#endif
        }
    }

@@ -461,7 +474,7 @@ static void GenerateITD_fx(
    {
#ifdef FIX_2235_TD_RENDERER_WORD16
        getStandardBSplineSampVec_fx( modelEval->elevBfVecITD_fx, EvIdx, &num_ev_idx, model->elevDim3, elev_fx, model->elevKSeq_fx, model->elevKSeq_Q_fx,
                                      model->elevSegSamples, model->elevBsLen, model->elevBsStart, model->elevBsShape_fx );
                                      model->elevSegSamples, model->elevBsLen, model->elevBsStart, model->elevBsShape_fx, model->elevBsShape_Q_fx );
#else
        getStandardBSplineSampVec_fx( modelEval->elevBfVecITD_fx, EvIdx, &num_ev_idx, model->elevDim3, elev_fx, model->elevKSeq_fx,
                                      model->elevSegSamples, model->elevBsLen, model->elevBsStart, model->elevBsShape_fx );
@@ -476,7 +489,7 @@ static void GenerateITD_fx(
        }
#ifdef FIX_2235_TD_RENDERER_WORD16
        getStandardBSplineSampVec_fx( modelEval->azimBfVecITD_fx, AzIdx, &num_az_idx, shr( add( model->azimDim3, 1 ), 1 ), azim_itd_fx, model->azimKSeq_fx, model->azimKSeq_Q_fx,
                                      model->azimSegSamples, model->azimBsLen, model->azimBsStart, model->azimBsShape_fx );
                                      model->azimSegSamples, model->azimBsLen, model->azimBsStart, model->azimBsShape_fx, model->azimBsShape_Q_fx );
#else
        getStandardBSplineSampVec_fx( modelEval->azimBfVecITD_fx, AzIdx, &num_az_idx, shr( add( model->azimDim3, 1 ), 1 ), azim_itd_fx, model->azimKSeq_fx,
                                      model->azimSegSamples, model->azimBsLen, model->azimBsStart, model->azimBsShape_fx );
@@ -631,9 +644,19 @@ static void getPeriodicBSplineSampVec_fx(
    const Word32 t_fx,             /* i  : azimuth                                           Q22 */
    Word16 *num_az_idx,            /* o  : Number of azimuth indices                             */
    const Word32 knot_interval_fx, /* i  : The knot interval                                 Q22 */
#ifdef FIX_2235_TD_RENDERER_WORD16
    const Word16 azimKSeq_0_fx, /* i  : Knot sequence                             Q azimKSeq_Q_fx*/
    const Word16 azimKSeq_Q_fx, /* i  : Q-value of azimKSeq_0_fx                                 */
#else
    const Word32 azimKSeq_0_fx,                                                  /* i  : Knot sequence                                     Q22 */
#endif
    const Word16 azimSegSamples, /* i  : Samples per segment                                   */
#ifdef FIX_2235_TD_RENDERER_WORD16
    const Word16 *azimBsShape_fx,  /* i  : Basis shape                        Q azimBsShape_Q_fx */
    const Word16 azimBsShape_Q_fx, /* i  : Q-value of azimBsShape_fx                             */
#else
    const Word32 *azimBsShape_fx,                                                /* i  : Basis shape                                       Q30 */
#endif
    const Word16 subSampFactor /* i  : Subsampling factor                                    */
)
{
@@ -659,7 +682,11 @@ static void getPeriodicBSplineSampVec_fx(
    {
        tmp32 = L_deposit_h( BASOP_Util_Divide3216_Scale( knot_interval_fx, SegSamples, &tmp_e1 ) );
        tmp_e1 = add( tmp_e1, 9 - 15 );
#ifdef FIX_2235_TD_RENDERER_WORD16
        tmp32 = L_deposit_h( BASOP_Util_Divide3232_Scale( L_sub( t_fx, L_shl( L_deposit_l( azimKSeq_0_fx ), 22 - azimKSeq_Q_fx ) ), tmp32, &tmp_e2 ) );
#else
        tmp32 = L_deposit_h( BASOP_Util_Divide3232_Scale( L_sub( t_fx, azimKSeq_0_fx ), tmp32, &tmp_e2 ) );
#endif
        tmp_e2 = add( tmp_e2, sub( 9, tmp_e1 ) );
        tmp32 = L_shr( tmp32, sub( 9, tmp_e2 ) ); // Q22 (assuming tmp32 will be in range of Q22)
        d0 = extract_l( round_hrFilt_fx( tmp32, Q22 ) );
@@ -686,8 +713,13 @@ static void getPeriodicBSplineSampVec_fx(
    {
        d = sub( d0, imult1616( ( sub( add( i, nI ), 1 ) ), SegSamples ) ); /* offset of knot_interval */
        d = sub( d0, imult1616( sub( add( i, nI ), 1 ), SegSamples ) );
#ifdef FIX_2235_TD_RENDERER_WORD16
        BfVec_fx[i] = L_shl( L_deposit_l( azimBsShape_fx[i_mult( abs_s( d ), subSampFactor )] ), 30 - azimBsShape_Q_fx );
#else
        BfVec_fx[i] = azimBsShape_fx[i_mult( abs_s( d ), subSampFactor )];
#endif
        move32();

        AzIdx[i] = add( nI, i ) % NumBFs;
        move16();
    }
@@ -716,7 +748,12 @@ static void getStandardBSplineSampVec_fx(
    const Word16 SegSamples, /* i  : samples per segment                                    */
    const Word16 *BsLen,     /* i  : lengths of basis shapes                                */
    const Word16 *BsStart,   /* i  : start of basis shapes                                  */
#ifdef FIX_2235_TD_RENDERER_WORD16
    const Word16 *BsShape_fx, /* i  : basis shapes                            Q BsShape_Q_fx */
    Word16 BsShape_Q_fx       /* i  : Q-value of basis shapes                                */
#else
    const Word32 *BsShape_fx /* i  : basis shapes                                       Q30 */
#endif
)
{
    Word16 i, nI;
@@ -776,8 +813,12 @@ static void getStandardBSplineSampVec_fx(
        {
            d = sub( shl( sub( BsLen[shape_idx], 1 ), 1 ), d );
        }
#ifdef FIX_2235_TD_RENDERER_WORD16
        BfVec_fx[i] = L_shl( L_deposit_l( BsShape_fx[add( BsStart[shape_idx], abs_s( d ) )] ), 30 - BsShape_Q_fx ); /* Q30 */
#else
        BfVec_fx[i] = BsShape_fx[add( BsStart[shape_idx], abs_s( d ) )]; /*TT, verify if abs is needed */
        move32();
#endif
        NzIdx[i] = add( nI, i );
        move16();
    }
+75 −12
Original line number Diff line number Diff line
@@ -431,6 +431,10 @@ static ivas_error DefaultBSplineModel_fx(
    model->elevKSeq_fx = model->elevKSeq_dyn_fx;
#endif

#ifdef FIX_2235_TD_RENDERER_WORD16
    model->elevBsShape_fx = defaultHRIR_rom_elevBsShape_fx;
    model->elevBsShape_Q_fx = defaultHRIR_rom_elevBsShape_Q_fx;
#else
    model->elevBsShape_dyn_fx = (Word32 *) malloc( sizeof( defaultHRIR_rom_elevBsShape_fx ) * sizeof( Word32 ) / sizeof( Word16 ) );
    IF( model->elevBsShape_dyn_fx == NULL )
    {
@@ -438,16 +442,29 @@ static ivas_error DefaultBSplineModel_fx(
    }
    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;
#endif

#ifdef FIX_2235_TD_RENDERER_WORD16
    IF( ( model->azimBsShape_fx = (const Word16 **) malloc( model->num_unique_azim_splines * sizeof( Word16 * ) ) ) == NULL || ( model->azimBsShape_Q_fx = (Word16 *) malloc( model->num_unique_azim_splines * sizeof( Word16 ) ) ) == NULL )
    {
        return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Binaural TD renderer\n" ) );
    }
    model->azimBsShape_dyn_fx = (Word16 **) malloc( sizeof( Word16 * ) );
#else
    IF( ( model->azimBsShape_fx = (const Word32 **) malloc( model->num_unique_azim_splines * sizeof( Word32 * ) ) ) == NULL )
    {
        return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Binaural TD renderer\n" ) );
    }
    model->azimBsShape_dyn_fx = (Word32 **) malloc( sizeof( Word32 * ) );
#endif
    IF( model->azimBsShape_dyn_fx == NULL )
    {
        return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for hrtf data" );
    }
#ifdef FIX_2235_TD_RENDERER_WORD16
    model->azimBsShape_fx[0] = defaultHRIR_rom_azimBsShape_fx;
    model->azimBsShape_Q_fx[0] = defaultHRIR_rom_azimBsShape_Q_fx;
#else
    model->azimBsShape_dyn_fx[0] = (Word32 *) malloc( sizeof( defaultHRIR_rom_azimBsShape_fx ) * sizeof( Word32 ) / sizeof( Word16 ) );
    IF( model->azimBsShape_dyn_fx[0] == NULL )
    {
@@ -455,19 +472,33 @@ static ivas_error DefaultBSplineModel_fx(
    }
    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];
#endif

#ifdef FIX_2235_TD_RENDERER_WORD16
    IF( ( model->azimKSeq_fx = (Word16 **) malloc( model->elevDim3 * sizeof( Word16 * ) ) ) == NULL || ( model->azimKSeq_Q_fx = (Word16 *) malloc( model->elevDim3 * sizeof( Word16 ) ) ) == NULL )
#else
    IF( ( model->azimKSeq_fx = (Word32 **) malloc( model->elevDim3 * sizeof( Word32 * ) ) ) == NULL )
#endif
    {
        return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Binaural TD renderer\n" ) );
    }

    FOR( i = 0; i < model->elevDim3; i++ )
    {
#ifdef FIX_2235_TD_RENDERER_WORD16
        if ( ( model->azimKSeq_fx[i] = (Word16 *) malloc( ( model->azimDim3[i] + 1 ) * sizeof( Word16 * ) ) ) == NULL )
#else
        if ( ( model->azimKSeq_fx[i] = (Word32 *) malloc( ( model->azimDim3[i] + 1 ) * sizeof( Word32 * ) ) ) == NULL )
#endif
        {
            return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Binaural TD renderer\n" ) );
        }

#ifdef FIX_2235_TD_RENDERER_WORD16
        model->azimKSeq_Q_fx[i] = defaultHRIR_rom_azimKSeq_Q_fx;
        move16();
#endif

        IF( LT_16( model->azimShapeIdx[i], 0 ) )
        {
            azimSegSamples = 360;
@@ -479,10 +510,16 @@ static ivas_error DefaultBSplineModel_fx(
        move16();

        assert( azimSegSamples == 360 / model->azimDim3[i] );

        FOR( j = 0; j < model->azimDim3[i] + 1; j++ )
        {
#ifdef FIX_2235_TD_RENDERER_WORD16
            model->azimKSeq_fx[i][j] = extract_l( L_shl_r( L_mult0( defaultHRIR_rom_azimSegSamples[0], j ), model->azimKSeq_Q_fx[i] ) ); // Q model->azimKSeq_Q_fx[i]
            move16();
#else
            model->azimKSeq_fx[i][j] = L_shl_r( L_mult0( defaultHRIR_rom_azimSegSamples[0], j ), Q22 ); // Q22
            move32();
#endif
        }
    }

@@ -490,10 +527,12 @@ static ivas_error DefaultBSplineModel_fx(
    {
        case 48000:
#ifdef FIX_2235_TD_RENDERER_WORD16
            model->AlphaL_fx = (const Word16 *) defaultHRIR_rom_AlphaL48_fx; // Q14
            model->AlphaL_fx = defaultHRIR_rom_AlphaL48_fx; // Q14
            move16();
            model->AlphaL_e = Q15 - defaultHRIR_rom_Alpha48_Q_fx;
            move16();
            model->AlphaR_fx = (const Word16 *) defaultHRIR_rom_AlphaR48_fx; // Q14
            model->AlphaR_fx = defaultHRIR_rom_AlphaR48_fx; // Q14
            move16();
            model->AlphaR_e = Q15 - defaultHRIR_rom_Alpha48_Q_fx;
            move16();
#else
@@ -518,10 +557,12 @@ static ivas_error DefaultBSplineModel_fx(
            model->AlphaR_e = Q15 - defaultHRIR_rom_Alpha48_Q_fx;
            move16();
#endif
            model->EL_fx = (const Word32 *) defaultHRIR_rom_EL48_fx; // Q28
            model->EL_fx = defaultHRIR_rom_EL48_fx; // Q28
            move16();
            model->EL_e = Q31 - defaultHRIR_rom_E48_Q_fx;
            move16();
            model->ER_fx = (const Word32 *) defaultHRIR_rom_ER48_fx; // Q28
            model->ER_fx = defaultHRIR_rom_ER48_fx; // Q28
            move16();
            model->ER_e = Q31 - defaultHRIR_rom_E48_Q_fx;
            move16();
            model->K = defaultHRIR_rom_model_configuration[5]; // Q0
@@ -534,10 +575,12 @@ static ivas_error DefaultBSplineModel_fx(
            BREAK;
        case 32000:
#ifdef FIX_2235_TD_RENDERER_WORD16
            model->AlphaL_fx = (const Word16 *) defaultHRIR_rom_AlphaL32_fx; // Q14
            model->AlphaL_fx = defaultHRIR_rom_AlphaL32_fx; // Q14
            move16();
            model->AlphaL_e = Q15 - defaultHRIR_rom_Alpha32_Q_fx;
            move16();
            model->AlphaR_fx = (const Word16 *) defaultHRIR_rom_AlphaR32_fx; // Q14
            model->AlphaR_fx = defaultHRIR_rom_AlphaR32_fx; // Q14
            move16();
            model->AlphaR_e = Q15 - defaultHRIR_rom_Alpha32_Q_fx;
            move16();
#else
@@ -562,10 +605,12 @@ static ivas_error DefaultBSplineModel_fx(
            model->AlphaR_e = Q15 - defaultHRIR_rom_Alpha32_Q_fx;
            move16();
#endif
            model->EL_fx = (const Word32 *) defaultHRIR_rom_EL32_fx; // Q28
            model->EL_fx = defaultHRIR_rom_EL32_fx; // Q28
            move16();
            model->EL_e = Q31 - defaultHRIR_rom_E32_Q_fx;
            move16();
            model->ER_fx = (const Word32 *) defaultHRIR_rom_ER32_fx; // Q28
            model->ER_fx = defaultHRIR_rom_ER32_fx; // Q28
            move16();
            model->ER_e = Q31 - defaultHRIR_rom_E32_Q_fx;
            move16();
            model->K = ( RESAMPLE_FACTOR_32_48_FX * defaultHRIR_rom_model_configuration[5] + ( 1 << 14 ) - 1 ) >> 14; // Q0
@@ -578,10 +623,10 @@ static ivas_error DefaultBSplineModel_fx(
            BREAK;
        case 16000:
#ifdef FIX_2235_TD_RENDERER_WORD16
            model->AlphaL_fx = (const Word16 *) defaultHRIR_rom_AlphaL16_fx; // Q14
            model->AlphaL_fx = defaultHRIR_rom_AlphaL16_fx; // Q14
            model->AlphaL_e = Q15 - defaultHRIR_rom_Alpha16_Q_fx;
            move16();
            model->AlphaR_fx = (const Word16 *) defaultHRIR_rom_AlphaR16_fx; // Q14
            model->AlphaR_fx = defaultHRIR_rom_AlphaR16_fx; // Q14
            model->AlphaR_e = Q15 - defaultHRIR_rom_Alpha16_Q_fx;
            move16();
#else
@@ -634,8 +679,10 @@ static ivas_error DefaultBSplineModel_fx(
    modelITD->elevBsStart = defaultHRIR_rom_ITD_elevBsStart;

#ifdef FIX_2235_TD_RENDERER_WORD16
    modelITD->elevKSeq_fx = (const Word16 *) defaultHRIR_rom_ITD_elevKSeq_fx;
    modelITD->elevKSeq_fx = defaultHRIR_rom_ITD_elevKSeq_fx;
    move16();
    modelITD->elevKSeq_Q_fx = defaultHRIR_rom_ITD_elevKSeq_Q_fx;
    move16();
#else
    modelITD->elevKSeq_dyn_fx = (Word32 *) malloc( sizeof( defaultHRIR_rom_ITD_elevKSeq_fx ) * sizeof( Word32 ) / sizeof( Word16 ) );
    IF( modelITD->elevKSeq_dyn_fx == NULL )
@@ -651,8 +698,10 @@ static ivas_error DefaultBSplineModel_fx(
    modelITD->azimBsStart = defaultHRIR_rom_ITD_azimBsStart;

#ifdef FIX_2235_TD_RENDERER_WORD16
    modelITD->azimKSeq_fx = (const Word16 *) defaultHRIR_rom_ITD_azimKSeq_fx;
    modelITD->azimKSeq_fx = defaultHRIR_rom_ITD_azimKSeq_fx;
    move16();
    modelITD->azimKSeq_Q_fx = defaultHRIR_rom_ITD_azimKSeq_Q_fx;
    move16();
#else
    modelITD->azimKSeq_dyn_fx = (Word32 *) malloc( ( ( modelITD->azimDim3 + 1 ) / 2 - 2 ) * sizeof( Word32 ) ); /* basis functions are flipped around 180 deg, number of basis functions above/below is (N+1)/2 */
    IF( modelITD->azimKSeq_dyn_fx == NULL )
@@ -671,6 +720,12 @@ static ivas_error DefaultBSplineModel_fx(
    modelITD->W_fx = modelITD->W_dyn_fx;
    modelITD->W_e = Q15 - defaultHRIR_rom_ITD_W_Q_fx;
    move16();
#ifdef FIX_2235_TD_RENDERER_WORD16
    modelITD->azimBsShape_fx = defaultHRIR_rom_ITD_azimBsShape_fx;
    move16();
    modelITD->azimBsShape_Q_fx = defaultHRIR_rom_ITD_azimBsShape_Q_fx;
    move16();
#else
    modelITD->azimBsShape_dyn_fx = (Word32 *) malloc( sizeof( defaultHRIR_rom_ITD_azimBsShape_fx ) * sizeof( Word32 ) / sizeof( Word16 ) ); /* basis functions are flipped around 180 deg, number of basis functions above/below is (N+1)/2 */
    IF( modelITD->azimBsShape_dyn_fx == NULL )
    {
@@ -678,6 +733,13 @@ static ivas_error DefaultBSplineModel_fx(
    }
    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;
#endif
#ifdef FIX_2235_TD_RENDERER_WORD16
    modelITD->elevBsShape_fx = defaultHRIR_rom_ITD_elevBsShape_fx;
    move16();
    modelITD->elevBsShape_Q_fx = defaultHRIR_rom_ITD_elevBsShape_Q_fx;
    move16();
#else
    modelITD->elevBsShape_dyn_fx = (Word32 *) malloc( sizeof( defaultHRIR_rom_ITD_elevBsShape_fx ) * sizeof( Word32 ) / sizeof( Word16 ) );
    IF( modelITD->elevBsShape_dyn_fx == NULL )
    {
@@ -685,6 +747,7 @@ static ivas_error DefaultBSplineModel_fx(
    }
    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;
#endif

    HRTF_model_precalc( model );

+14 −0
Original line number Diff line number Diff line
@@ -616,6 +616,13 @@ ivas_error ivas_HRTF_binary_open_buffers_int16(
    const uint32_t mem_size                                     /* i  : size of buffer                          */
);

#ifdef FIX_2235_TD_RENDERER_WORD16
ivas_error ivas_HRTF_binary_open_buffers_int16_ptr(
    int16_t ***buffer,                                          /* o  : buffer to allocate                      */
    const uint32_t mem_size                                     /* i  : size of buffer                          */
);
#endif

ivas_error ivas_HRTF_binary_open_buffers_int32(
    int32_t **buffer,                                             /* o  : buffer to allocate                      */
    const uint32_t mem_size                                     /* i  : size of buffer                          */
@@ -626,6 +633,13 @@ ivas_error ivas_HRTF_binary_open_buffers_int32_ptr(
    const uint32_t mem_size                                     /* i  : size of buffer                          */
);

#ifdef FIX_2235_TD_RENDERER_WORD16
ivas_error ivas_HRTF_binary_open_buffers_int16_ptr_const(
    const int16_t ***buffer,                                    /* o  : buffer to allocate      */
    const uint32_t mem_size                                     /* i  : size of buffer          */
);
#endif

ivas_error ivas_HRTF_binary_open_buffers_int32_ptr_const(
    const int32_t ***buffer,                                             /* o  : buffer to allocate                      */
    const uint32_t mem_size                                     /* i  : size of buffer                          */
+3 −0
Original line number Diff line number Diff line
@@ -52,6 +52,9 @@ extern const Word16 defaultHRIR_rom_azimShapeIdx[15];
extern const Word16 defaultHRIR_rom_azimShapeSampFactor[15];
extern const Word16 defaultHRIR_rom_elevKSeq_Q_fx;
extern const Word16 defaultHRIR_rom_elevKSeq_fx[13];
#ifdef FIX_2235_TD_RENDERER_WORD16
extern const Word16 defaultHRIR_rom_azimKSeq_Q_fx;
#endif
extern const Word16 defaultHRIR_rom_Alpha48_Q_fx;
extern const Word16 defaultHRIR_rom_AlphaL48_fx[470 * 128]; /*Q30*/
extern const Word16 defaultHRIR_rom_AlphaR48_fx[470 * 128]; /*Q30*/
Loading