Loading apps/decoder.c +1 −1 Original line number Diff line number Diff line Loading @@ -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 ) { Loading lib_dec/lib_dec_fx.c +100 −92 Original line number Diff line number Diff line Loading @@ -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; } } Loading Loading @@ -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 ) { Loading @@ -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 Loading lib_rend/ivas_objectRenderer.c +1 −1 Original line number Diff line number Diff line Loading @@ -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 Loading lib_rend/ivas_objectRenderer_hrFilt.c +82 −12 Original line number Diff line number Diff line Loading @@ -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 ); Loading Loading @@ -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 Loading @@ -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 */ { Loading @@ -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 } } Loading Loading @@ -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++ ) Loading Loading @@ -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 */ Loading Loading @@ -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 Loading @@ -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(); Loading @@ -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 */ Loading Loading @@ -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 ); } Loading @@ -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(); Loading @@ -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 Loading @@ -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 ) ); } Loading @@ -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(); } Loading Loading @@ -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 Loading Loading @@ -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(); Loading @@ -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 Loading @@ -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 Loading @@ -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 ) ); Loading Loading @@ -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 Loading Loading @@ -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 ) { Loading lib_rend/ivas_objectRenderer_mix.c +34 −48 File changed.Preview size limit exceeded, changes collapsed. Show changes Loading
apps/decoder.c +1 −1 Original line number Diff line number Diff line Loading @@ -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 ) { Loading
lib_dec/lib_dec_fx.c +100 −92 Original line number Diff line number Diff line Loading @@ -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; } } Loading Loading @@ -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 ) { Loading @@ -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 Loading
lib_rend/ivas_objectRenderer.c +1 −1 Original line number Diff line number Diff line Loading @@ -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 Loading
lib_rend/ivas_objectRenderer_hrFilt.c +82 −12 Original line number Diff line number Diff line Loading @@ -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 ); Loading Loading @@ -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 Loading @@ -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 */ { Loading @@ -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 } } Loading Loading @@ -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++ ) Loading Loading @@ -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 */ Loading Loading @@ -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 Loading @@ -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(); Loading @@ -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 */ Loading Loading @@ -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 ); } Loading @@ -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(); Loading @@ -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 Loading @@ -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 ) ); } Loading @@ -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(); } Loading Loading @@ -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 Loading Loading @@ -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(); Loading @@ -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 Loading @@ -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 Loading @@ -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 ) ); Loading Loading @@ -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 Loading Loading @@ -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 ) { Loading
lib_rend/ivas_objectRenderer_mix.c +34 −48 File changed.Preview size limit exceeded, changes collapsed. Show changes