Commit 8d01c878 authored by emerit's avatar emerit
Browse files

fix tdrend without room reverb

parent c26aae37
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -2825,7 +2825,7 @@ static ivas_error load_hrtf_from_file(
    }

#ifdef FIX_POINT_HRTF_FILE_FORMAT_REVERB
    if ( hHrtfBinary->hHrtfStatistics == NULL && ( binaural_renderer == IVAS_BIN_RENDERER_TYPE_FASTCONV || binaural_renderer == IVAS_BIN_RENDERER_TYPE_CREND ) && OutputConfig == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB )
    if ( ( hHrtfBinary->hHrtfStatistics == NULL ) && ( ( binaural_renderer == IVAS_BIN_RENDERER_TYPE_FASTCONV ) || ( binaural_renderer == IVAS_BIN_RENDERER_TYPE_CREND ) || ( binaural_renderer == IVAS_BIN_RENDERER_TYPE_TDREND ) ) && ( OutputConfig == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) )
    {
        if ( ( error = IVAS_DEC_GetHrtfStatisticsHandle( hIvasDec, &hHrtfBinary->hHrtfStatistics ) ) != IVAS_ERR_OK )
        {
+100 −92
Original line number Diff line number Diff line
@@ -1216,10 +1216,12 @@ ivas_error IVAS_DEC_GetSamples(
    {
        /* check if we need to run the setup function */
        test();
        IF( !hIvasDec->isInitialized || hIvasDec->hasBeenFedFrame ){
        IF( !hIvasDec->isInitialized || hIvasDec->hasBeenFedFrame )
        {
            /* setup */

            IF( NE_32( ( error = IVAS_DEC_Setup( hIvasDec, &l_ts, &nTransportChannels, &nOutChannels, &nSamplesRendered_loop, pcmBuf + imult3216( nSamplesRendered, nOutChannels ) ) ), IVAS_ERR_OK ) ){
            IF( NE_32( ( error = IVAS_DEC_Setup( hIvasDec, &l_ts, &nTransportChannels, &nOutChannels, &nSamplesRendered_loop, pcmBuf + imult3216( nSamplesRendered, nOutChannels ) ) ), IVAS_ERR_OK ) )
            {
                return error;
            }
        }
@@ -2478,7 +2480,7 @@ ivas_error IVAS_DEC_HRTF_binary_open(
        }

#ifdef FIX_POINT_HRTF_FILE_FORMAT_REVERB
        if ( st_ivas->hHrtfStatistics == NULL && ( binaural_renderer == IVAS_BIN_RENDERER_TYPE_FASTCONV || binaural_renderer == IVAS_BIN_RENDERER_TYPE_CREND ) && st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB )
        if ( st_ivas->hHrtfStatistics == NULL && ( binaural_renderer == IVAS_BIN_RENDERER_TYPE_FASTCONV || binaural_renderer == IVAS_BIN_RENDERER_TYPE_CREND || binaural_renderer == IVAS_BIN_RENDERER_TYPE_TDREND ) && st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB )
        {
            if ( ( error = ivas_HRTF_statistics_binary_open_fx( &st_ivas->hHrtfStatistics ) ) != IVAS_ERR_OK )
            {
@@ -2487,6 +2489,12 @@ ivas_error IVAS_DEC_HRTF_binary_open(
        }
#endif
    }
#ifdef FIX_POINT_HRTF_FILE_FORMAT_REVERB
    if ( ( error = ivas_HRTF_statistics_init_fx( &( st_ivas->hHrtfStatistics ), st_ivas->hDecoderConfig->output_Fs ) ) != IVAS_ERR_OK )
    {
        return error;
    }
#endif
    return IVAS_ERR_OK;
}
#endif
+1 −1
Original line number Diff line number Diff line
@@ -259,7 +259,7 @@ ivas_error ivas_td_binaural_open_unwrap_fx(
    IF( NE_16( ivas_format, MASA_ISM_FORMAT ) && NE_16( ivas_format, SBA_ISM_FORMAT ) )
    {
#ifdef FIX_TDREND_HRTF_FILE_FORMAT
        *binaural_latency_ns = L_shr_r( Mult_32_32( ( *hBinRendererTd )->HrFiltSet_p->latency_s_fx, 1000000000 ), ( *hBinRendererTd )->HrFiltSet_p->factor_Q_latency_s_fx );
        *binaural_latency_ns = L_shr_r( Mult_32_32( ( *hBinRendererTd )->HrFiltSet_p->latency_s_fx, 1000000000 ), 31 - ( *hBinRendererTd )->HrFiltSet_p->factor_Q_latency_s_fx );
#else
        *binaural_latency_ns = Mult_32_32( ( *hBinRendererTd )->HrFiltSet_p->latency_s_fx, 1000000000 /* 1000000000.f in Q0 */ );
#endif
+82 −12
Original line number Diff line number Diff line
@@ -47,8 +47,8 @@

static Word32 round_fixed( Word32 n, Word16 q );
#ifdef FIX_TDREND_HRTF_FILE_FORMAT
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 Word16 *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 Word16 *KSeq_fx, const Word16 SegSamples, const Word16 *BsLen, const Word16 *BsStart, const Word16 *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 Word32 azimKSeq_0_fx, const Word16 azimSegSamples, const Word16 *azimBsShape_fx, const Word16 q_azimBsShape_e, 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 q_KSeq_fx, const Word16 SegSamples, const Word16 *BsLen, const Word16 *BsStart, const Word16 *BsShape_fx, const Word16 q_BsShape_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 );
@@ -215,13 +215,17 @@ static void GenerateFilter_fx(
    Word16 BMEnergiesR_e, BMEnergiesL_e;
    Word16 tmp_hrfModR_e, tmp_hrfModL_e;

    getStandardBSplineSampVec_fx( modelEval->elevBfVec_fx, EvIdx, &num_ev_idx, model->elevDim3, elev, model->elevKSeq_fx,
                                  model->elevSegSamples, model->elevBsLen, model->elevBsStart, model->elevBsShape_fx );
    getStandardBSplineSampVec_fx( modelEval->elevBfVec_fx, EvIdx, &num_ev_idx, model->elevDim3, elev, model->elevKSeq_fx, model->elevKSeq_e,
                                  model->elevSegSamples, model->elevBsLen, model->elevBsStart, model->elevBsShape_fx, model->elevBsShape_e );

    FOR( p = 0; p < num_ev_idx; p++ )
    {
        /* Wrap the requested azimuth to the range of the BSplines */
#ifdef FIX_TDREND_HRTF_FILE_FORMAT
        azim = L_add( azim, L_shl( model->azimKSeq_fx[p][0], Q22 - model->azimKSeq_e[p] ) );
#else
        azim = L_add( azim, model->azimKSeq_fx[p][0] );
#endif
        WHILE( GT_32( azim, DEG_360_IN_Q22 ) )
        {
            azim = L_sub( azim, DEG_360_IN_Q22 ); // Q22
@@ -230,7 +234,11 @@ static void GenerateFilter_fx(
        {
            azim = L_add( azim, DEG_360_IN_Q22 ); // Q22
        }
#ifdef FIX_TDREND_HRTF_FILE_FORMAT
        azim = L_sub( azim, L_shl( model->azimKSeq_fx[p][0], Q22 - model->azimKSeq_e[p] ) ); // Q22
#else
        azim = L_sub( azim, model->azimKSeq_fx[p][0] ); // Q22
#endif

        IF( EQ_16( model->azimDim3[EvIdx[p]], 1 ) ) /* Constant basis function */
        {
@@ -246,13 +254,23 @@ static void GenerateFilter_fx(
            k = EvIdx[p];
            move16();

#ifdef FIX_TDREND_HRTF_FILE_FORMAT
            knot_interval = L_deposit_h( BASOP_Util_Divide3216_Scale( L_sub( L_shl( model->azimKSeq_fx[k][model->azimDim3[k]], Q22 - model->azimKSeq_e[k] ), model->azimKSeq_fx[k][0] ), model->azimDim3[k], &tmp_e ) );
#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 ) );
#endif
            tmp_e = add( tmp_e, 9 - 15 );
            knot_interval = L_shr( knot_interval, sub( 9, tmp_e ) ); // variable Q to Q22

#ifdef FIX_TDREND_HRTF_FILE_FORMAT
            getPeriodicBSplineSampVec_fx( modelEval->azimBfVec_fx[p], AzIdx[p], model->azimDim3[k], azim, &num_az_idx[p],
                                          knot_interval, L_shl( model->azimKSeq_fx[k][0], Q22 - model->azimKSeq_e[k] ), model->azimSegSamples[model->azimShapeIdx[k]],
                                          model->azimBsShape_fx[model->azimShapeIdx[k]], model->azimBsShape_e[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
        }
    }

@@ -291,8 +309,13 @@ static void GenerateFilter_fx(
        ESynL_e = 0;
        move16();

#ifdef FIX_TDREND_HRTF_FILE_FORMAT
        BMEnergiesL_e = add( Q31 - model->EL_e, 2 );
        BMEnergiesR_e = add( Q31 - model->ER_e, 2 );
#else
        BMEnergiesL_e = add( model->EL_e, 2 );
        BMEnergiesR_e = add( model->ER_e, 2 );
#endif

        /* Energy is precalculated part updated with square of BM value. Store index for sorting */
        FOR( i = 0; i < qp; i++ )
@@ -346,12 +369,22 @@ static void GenerateFilter_fx(
            FOR( i = 0; i < p; i++ )
            {
                index = L_add( BM_idx[modelEval->BMEnergiesL[modelEval->UseIndsL[i]].i], imult3216( model->AlphaN, k ) );
#ifdef FIX_TDREND_HRTF_FILE_FORMAT
                tmp32 = Mpy_32_16_r( modelEval->BM_fx[modelEval->BMEnergiesL[modelEval->UseIndsL[i]].i], model->AlphaL_fx[index] );
                modelEval->hrfModL_fx[k] = BASOP_Util_Add_Mant32Exp( modelEval->hrfModL_fx[k], tmp_hrfModL_e, tmp32, add( Q15 - model->AlphaL_e, 1 ), &tmp_hrfModL_e );
#else
                tmp32 = Mpy_32_32( modelEval->BM_fx[modelEval->BMEnergiesL[modelEval->UseIndsL[i]].i], model->AlphaL_fx[index] );
                modelEval->hrfModL_fx[k] = BASOP_Util_Add_Mant32Exp( modelEval->hrfModL_fx[k], tmp_hrfModL_e, tmp32, add( model->AlphaL_e, 1 ), &tmp_hrfModL_e );
#endif
                move32();
                index = L_add( BM_idx[modelEval->BMEnergiesR[modelEval->UseIndsR[i]].i], imult3216( model->AlphaN, k ) );
#ifdef FIX_TDREND_HRTF_FILE_FORMAT
                tmp32 = Mpy_32_16_r( modelEval->BM_fx[modelEval->BMEnergiesR[modelEval->UseIndsR[i]].i], model->AlphaR_fx[index] );
                modelEval->hrfModR_fx[k] = BASOP_Util_Add_Mant32Exp( modelEval->hrfModR_fx[k], tmp_hrfModR_e, tmp32, add( Q15 - model->AlphaR_e, 1 ), &tmp_hrfModR_e );
#else
                tmp32 = Mpy_32_32( modelEval->BM_fx[modelEval->BMEnergiesR[modelEval->UseIndsR[i]].i], model->AlphaR_fx[index] );
                modelEval->hrfModR_fx[k] = BASOP_Util_Add_Mant32Exp( modelEval->hrfModR_fx[k], tmp_hrfModR_e, tmp32, add( model->AlphaR_e, 1 ), &tmp_hrfModR_e );
#endif
                move32();
            }
            /* Account for lost energy */
@@ -404,7 +437,11 @@ static void GenerateITD_fx(
#endif // MSAN_FIX

    /* Wrap the requested azimuth to the range of the BSplines */
#ifdef FIX_TDREND_HRTF_FILE_FORMAT
    azim_fx = L_add( azim_fx, L_shl( model->azimKSeq_fx[0], Q22 - model->azimKSeq_e ) );
#else
    azim_fx = L_add( azim_fx, model->azimKSeq_fx[0] );
#endif
    WHILE( GT_32( azim_fx, DEG_360_IN_Q22 ) )
    {
        azim_fx = L_sub( azim_fx, DEG_360_IN_Q22 ); // Q22
@@ -413,12 +450,16 @@ static void GenerateITD_fx(
    {
        azim_fx = L_add( azim_fx, DEG_360_IN_Q22 ); // Q22
    }
#ifdef FIX_TDREND_HRTF_FILE_FORMAT
    azim_fx = L_sub( azim_fx, L_shl( model->azimKSeq_fx[0], Q22 - model->azimKSeq_e ) ); // Q22
#else
    azim_fx = L_sub( azim_fx, model->azimKSeq_fx[0] ); // Q22
#endif

    IF( NE_32( L_abs( elev_fx ), DEG_90_IN_Q22 ) )
    {
        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 );
        getStandardBSplineSampVec_fx( modelEval->elevBfVecITD_fx, EvIdx, &num_ev_idx, model->elevDim3, elev_fx, model->elevKSeq_fx, model->elevKSeq_e,
                                      model->elevSegSamples, model->elevBsLen, model->elevBsStart, model->elevBsShape_fx, model->elevBsShape_e );

        azim_itd_fx = azim_fx;
        move32();
@@ -427,8 +468,8 @@ static void GenerateITD_fx(
            /* Flip spline functions around 180 deg */
            azim_itd_fx = L_sub( DEG_360_IN_Q22, azim_fx ); // Q22
        }
        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 );
        getStandardBSplineSampVec_fx( modelEval->azimBfVecITD_fx, AzIdx, &num_az_idx, shr( add( model->azimDim3, 1 ), 1 ), azim_itd_fx, model->azimKSeq_fx, model->azimKSeq_e,
                                      model->azimSegSamples, model->azimBsLen, model->azimBsStart, model->azimBsShape_fx, model->azimBsShape_e );
        IF( GT_32( azim_fx, DEG_180_IN_Q22 ) )
        {
            /* Flip spline functions around 180 deg */
@@ -464,7 +505,11 @@ static void GenerateITD_fx(
    /* Compute BM_ITD */
    elev_offset = 0;
    move16();
#ifdef FIX_TDREND_HRTF_FILE_FORMAT
    if ( EQ_32( L_shl( model->elevKSeq_fx[0], Q22 - model->elevKSeq_e ), -DEG_90_IN_Q22 ) )
#else
    if ( EQ_32( model->elevKSeq_fx[0], -DEG_90_IN_Q22 ) )
#endif
    {
        elev_offset = sub( 1, model->azimDim3 );
    }
@@ -476,7 +521,11 @@ static void GenerateITD_fx(
        test();
        test();
        test();
#ifdef FIX_TDREND_HRTF_FILE_FORMAT
        IF( EvIdx[p] == 0 && EQ_32( L_shl( model->elevKSeq_fx[EvIdx[p]], Q22 - model->elevKSeq_e ), -DEG_90_IN_Q22 ) )
#else
        IF( EvIdx[p] == 0 && EQ_32( model->elevKSeq_fx[EvIdx[p]], -DEG_90_IN_Q22 ) )
#endif
        {
            modelEval->BM_ITD_fx[qp] = modelEval->elevBfVecITD_fx[p]; // Q30
            move32();
@@ -484,7 +533,11 @@ static void GenerateITD_fx(
            move16();
            qp = add( qp, 1 );
        }
#ifdef FIX_TDREND_HRTF_FILE_FORMAT
        ELSE IF( EQ_16( EvIdx[p], sub( model->elevDim3, 1 ) ) && EQ_32( L_shl( model->elevKSeq_fx[sub( EvIdx[p], 2 )], Q22 - model->elevKSeq_e ), DEG_90_IN_Q22 ) )
#else
        ELSE IF( EQ_16( EvIdx[p], sub( model->elevDim3, 1 ) ) && EQ_32( model->elevKSeq_fx[sub( EvIdx[p], 2 )], DEG_90_IN_Q22 ) )
#endif
        {
            /* NB: -2 in if() condition above as number of knot points is numBF-2 */
            modelEval->BM_ITD_fx[qp] = modelEval->elevBfVecITD_fx[p]; // Q30
@@ -508,7 +561,11 @@ static void GenerateITD_fx(

    /* Compute ITD */
    AlphaN = add( imult1616( model->elevDim3, model->azimDim3 ), elev_offset );
#ifdef FIX_TDREND_HRTF_FILE_FORMAT
    if ( EQ_32( L_shl( model->elevKSeq_fx[sub( model->elevDim3, 3 )], Q22 - model->elevKSeq_e ), DEG_90_IN_Q22 ) ) /* Constant azimuth basis function */
#else
    if ( EQ_32( model->elevKSeq_fx[sub( model->elevDim3, 3 )], DEG_90_IN_Q22 ) ) /* Constant azimuth basis function */
#endif
    {
        AlphaN = sub( AlphaN, sub( model->azimDim3, 1 ) );
    }
@@ -523,7 +580,11 @@ static void GenerateITD_fx(
        Word16 tmp_e;
        index = BM_idx[i];
        move32();
#ifdef FIX_TDREND_HRTF_FILE_FORMAT
        modelEval->itdMod_fx = BASOP_Util_Add_Mant32Exp( modelEval->itdMod_fx, itdMod_e, Mpy_32_16_r( modelEval->BM_ITD_fx[i], model->W_fx[index] ), add( Q15 - model->W_e, 1 ), &tmp_e );
#else
        modelEval->itdMod_fx = BASOP_Util_Add_Mant32Exp( modelEval->itdMod_fx, itdMod_e, Mpy_32_32( modelEval->BM_ITD_fx[i], model->W_fx[index] ), add( model->W_e, 1 ), &tmp_e );
#endif
        itdMod_e = tmp_e;
        move16();
    }
@@ -565,6 +626,7 @@ static void getPeriodicBSplineSampVec_fx(
    const Word16 azimSegSamples,   /* i  : Samples per segment                                   */
#ifdef FIX_TDREND_HRTF_FILE_FORMAT
    const Word16 *azimBsShape_fx, /* i  : Basis shape                                       Q30 */
    const Word16 q_azimBsShape_e,
#else
    const Word32 *azimBsShape_fx, /* i  : Basis shape                                       Q30 */
#endif
@@ -620,7 +682,11 @@ 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_TDREND_HRTF_FILE_FORMAT
        BfVec_fx[i] = L_shl( azimBsShape_fx[i_mult( abs_s( d ), subSampFactor )], q_azimBsShape_e );
#else
        BfVec_fx[i] = azimBsShape_fx[i_mult( abs_s( d ), subSampFactor )];
#endif
        move32();
        AzIdx[i] = add( nI, i ) % NumBFs;
        move16();
@@ -643,6 +709,7 @@ static void getStandardBSplineSampVec_fx(
    const Word32 t_fx,   /* i  : estimation point                                   Q22 */
#ifdef FIX_TDREND_HRTF_FILE_FORMAT
    const Word16 *KSeq_fx, /* i  : knot sequence including multiplicities             Q22 */
    const Word16 q_KSeq_fx,
#else
    const Word32 *KSeq_fx, /* i  : knot sequence including multiplicities             Q22 */
#endif
@@ -650,7 +717,8 @@ static void getStandardBSplineSampVec_fx(
    const Word16 *BsLen,     /* i  : lengths of basis shapes                                */
    const Word16 *BsStart,   /* i  : start of basis shapes                                  */
#ifdef FIX_TDREND_HRTF_FILE_FORMAT
    const Word16 *BsShape_fx /* i  : basis shapes                                       Q30 */
    const Word16 *BsShape_fx, /* i  : basis shapes                                       Q30 */
    const Word16 q_BsShape_fx
#else
    const Word32 *BsShape_fx /* i  : basis shapes                                       Q30 */
#endif
@@ -665,8 +733,8 @@ static void getStandardBSplineSampVec_fx(
    /* 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] );
    tmp32 = L_shl( KSeq_fx[NumBFs - 3], Q22 - q_KSeq_fx );
    tmp32_2 = L_shl( KSeq_fx[0], Q22 - q_KSeq_fx );
    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 ) );
@@ -716,7 +784,7 @@ 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 */
        BfVec_fx[i] = L_shl( BsShape_fx[add( BsStart[shape_idx], abs_s( d ) )], Q30 - q_BsShape_fx ); /*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
@@ -774,11 +842,13 @@ void BSplineModelEvalDealloc_fx(

    IF( model->modelROM )
    {
        free( model->azimBsShape_e );
        free( (void *) model->azimBsShape_fx ); /* void* cast needed to please both gcc and Visual studio compilers. Deallocating const float** should be fine and gcc agrees, but Visual studio complains. */
        FOR( i = 0; i < model->elevDim3; i++ )
        {
            free( model->azimKSeq_fx[i] );
        }
        free( model->azimKSeq_e );
        free( model->azimKSeq_fx );
        IF( modelEval != NULL )
        {
+34 −48

File changed.

Preview size limit exceeded, changes collapsed.

Loading