Loading lib_dec/ivas_binRenderer_internal.c +85 −57 Original line number Diff line number Diff line Loading @@ -71,6 +71,7 @@ static void ivas_binRenderer_filterModule_fx( Word16 *Q_filterStates; #ifdef FIX_1123_FASTCONV_PARAMBIN_16BIT_ROM const Word16 *filterTapsLeftRealPtr_fx, *filterTapsLeftImagPtr_fx, *filterTapsRightRealPtr_fx, *filterTapsRightImagPtr_fx; const Word16 Q_filter = Q15 + ( Q15 - hBinRenderer->hBinRenConvModule->Q_factor_filters ) - ( Q31 - Q29 ); #else const Word32 *filterTapsLeftRealPtr_fx, *filterTapsLeftImagPtr_fx, *filterTapsRightRealPtr_fx, *filterTapsRightImagPtr_fx; #endif Loading Loading @@ -108,6 +109,16 @@ static void ivas_binRenderer_filterModule_fx( filterStatesLeftImagPtr_fx[tapIdx] = filterStatesLeftImagPtr_fx[tapIdx - 1]; move32(); #ifdef FIX_1123_FASTCONV_PARAMBIN_16BIT_ROM W_sub1 = W_sub( W_mult_32_32( filterStatesLeftRealPtr_fx[tapIdx], L_shl( filterTapsLeftRealPtr_fx[tapIdx], Q_filter ) ), W_mult_32_32( filterStatesLeftImagPtr_fx[tapIdx], L_shl( filterTapsLeftImagPtr_fx[tapIdx], Q_filter ) ) ); // Q29 + Q_filterStates[tapIdx - 1] W_add1 = W_add( W_mult_32_32( filterStatesLeftRealPtr_fx[tapIdx], L_shl( filterTapsLeftImagPtr_fx[tapIdx], Q_filter ) ), W_mult_32_32( filterStatesLeftImagPtr_fx[tapIdx], L_shl( filterTapsLeftRealPtr_fx[tapIdx], Q_filter ) ) ); // Q29 + Q_filterStates[tapIdx - 1] W_sub2 = W_sub( W_mult_32_32( filterStatesLeftRealPtr_fx[tapIdx], L_shl( filterTapsRightRealPtr_fx[tapIdx], Q_filter ) ), W_mult_32_32( filterStatesLeftImagPtr_fx[tapIdx], L_shl( filterTapsRightImagPtr_fx[tapIdx], Q_filter ) ) ); // Q29 + Q_filterStates[tapIdx - 1] W_add2 = W_add( W_mult_32_32( filterStatesLeftRealPtr_fx[tapIdx], L_shl( filterTapsRightImagPtr_fx[tapIdx], Q_filter ) ), W_mult_32_32( filterStatesLeftImagPtr_fx[tapIdx], L_shl( filterTapsRightRealPtr_fx[tapIdx], Q_filter ) ) ); // Q29 + Q_filterStates[tapIdx - 1] #else W_sub1 = W_sub( W_mult0_32_32( filterStatesLeftRealPtr_fx[tapIdx], filterTapsLeftRealPtr_fx[tapIdx] ), W_mult0_32_32( filterStatesLeftImagPtr_fx[tapIdx], filterTapsLeftImagPtr_fx[tapIdx] ) ); // Q29 + Q_filterStates[tapIdx - 1] W_add1 = W_add( W_mult0_32_32( filterStatesLeftRealPtr_fx[tapIdx], filterTapsLeftImagPtr_fx[tapIdx] ), Loading @@ -116,7 +127,7 @@ static void ivas_binRenderer_filterModule_fx( W_mult0_32_32( filterStatesLeftImagPtr_fx[tapIdx], filterTapsRightImagPtr_fx[tapIdx] ) ); // Q29 + Q_filterStates[tapIdx - 1] W_add2 = W_add( W_mult0_32_32( filterStatesLeftRealPtr_fx[tapIdx], filterTapsRightImagPtr_fx[tapIdx] ), W_mult0_32_32( filterStatesLeftImagPtr_fx[tapIdx], filterTapsRightRealPtr_fx[tapIdx] ) ); // Q29 + Q_filterStates[tapIdx - 1] #endif outRealLeft_fx = W_shr( outRealLeft_fx, sub( Q_filterStates[tapIdx], Q_filterStates[tapIdx - 1] ) ); outImagLeft_fx = W_shr( outImagLeft_fx, sub( Q_filterStates[tapIdx], Q_filterStates[tapIdx - 1] ) ); outRealRight_fx = W_shr( outRealRight_fx, sub( Q_filterStates[tapIdx], Q_filterStates[tapIdx - 1] ) ); Loading Loading @@ -145,6 +156,29 @@ static void ivas_binRenderer_filterModule_fx( /* Left Real and Imag */ // Q29 + Q_curr #ifdef FIX_1123_FASTCONV_PARAMBIN_16BIT_ROM out_Conv_CLDFB_real[0][k][bandIdx] = W_add( out_Conv_CLDFB_real[0][k][bandIdx], W_add( W_shr( outRealLeft_fx, sub( Q_filterStates[1], Q_curr ) ), W_sub( W_mult_32_32( filterStatesLeftRealPtr_fx[0], L_shl( filterTapsLeftRealPtr_fx[0], Q_filter ) ), W_mult_32_32( filterStatesLeftImagPtr_fx[0], L_shl( filterTapsLeftImagPtr_fx[0], Q_filter ) ) ) ) ); // Q29 move64(); out_Conv_CLDFB_imag[0][k][bandIdx] = W_add( out_Conv_CLDFB_imag[0][k][bandIdx], W_add( W_shr( outImagLeft_fx, sub( Q_filterStates[1], Q_curr ) ), W_add( W_mult_32_32( filterStatesLeftRealPtr_fx[0], L_shl( filterTapsLeftImagPtr_fx[0], Q_filter ) ), W_mult_32_32( filterStatesLeftImagPtr_fx[0], L_shl( filterTapsLeftRealPtr_fx[0], Q_filter ) ) ) ) ); // Q29 move64(); /* Right Real and Imag */ out_Conv_CLDFB_real[1][k][bandIdx] = W_add( out_Conv_CLDFB_real[1][k][bandIdx], W_add( W_shr( outRealRight_fx, sub( Q_filterStates[1], Q_curr ) ), W_sub( W_mult_32_32( filterStatesLeftRealPtr_fx[0], L_shl( filterTapsRightRealPtr_fx[0], Q_filter ) ), W_mult_32_32( filterStatesLeftImagPtr_fx[0], L_shl( filterTapsRightImagPtr_fx[0], Q_filter ) ) ) ) ); // Q29 move64(); out_Conv_CLDFB_imag[1][k][bandIdx] = W_add( out_Conv_CLDFB_imag[1][k][bandIdx], W_add( W_shr( outImagRight_fx, sub( Q_filterStates[1], Q_curr ) ), W_add( W_mult_32_32( filterStatesLeftRealPtr_fx[0], L_shl( filterTapsRightImagPtr_fx[0], Q_filter ) ), W_mult_32_32( filterStatesLeftImagPtr_fx[0], L_shl( filterTapsRightRealPtr_fx[0], Q_filter ) ) ) ) ); // Q29 move64(); #else out_Conv_CLDFB_real[0][k][bandIdx] = W_add( out_Conv_CLDFB_real[0][k][bandIdx], W_add( W_shr( outRealLeft_fx, sub( Q_filterStates[1], Q_curr ) ), W_sub( W_mult0_32_32( filterStatesLeftRealPtr_fx[0], filterTapsLeftRealPtr_fx[0] ), Loading @@ -167,6 +201,7 @@ static void ivas_binRenderer_filterModule_fx( W_add( W_mult0_32_32( filterStatesLeftRealPtr_fx[0], filterTapsRightImagPtr_fx[0] ), W_mult0_32_32( filterStatesLeftImagPtr_fx[0], filterTapsRightRealPtr_fx[0] ) ) ) ); // Q29 move64(); #endif } } } Loading Loading @@ -213,6 +248,8 @@ static ivas_error ivas_binRenderer_convModuleOpen( #ifdef FIX_1123_FASTCONV_PARAMBIN_16BIT_ROM hBinRenConvModule->numTaps = hHrtf->ntaps; move16(); hBinRenConvModule->Q_factor_filters = hHrtf->factor_Q_filters_fx; move16(); #endif IF( EQ_16( renderer_type, RENDERER_BINAURAL_FASTCONV_ROOM ) ) { Loading Loading @@ -366,78 +403,46 @@ static ivas_error ivas_binRenderer_convModuleOpen( } #ifdef FIX_1123_FASTCONV_PARAMBIN_16BIT_ROM IF( ( hBinRenConvModule->filterStatesLeftReal_fx = (Word16 ***) malloc( hBinRenderer->conv_band * sizeof( Word16 ** ) ) ) == NULL ) #else IF( ( hBinRenConvModule->filterStatesLeftReal_fx = (Word32 ***) malloc( hBinRenderer->conv_band * sizeof( Word32 ** ) ) ) == NULL ) #endif { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Convolution Module \n" ) ); } #ifdef FIX_1123_FASTCONV_PARAMBIN_16BIT_ROM IF( ( hBinRenConvModule->filterStatesLeftImag_fx = (Word16 ***) malloc( hBinRenderer->conv_band * sizeof( Word16 ** ) ) ) == NULL ) #else IF( ( hBinRenConvModule->filterStatesLeftImag_fx = (Word32 ***) malloc( hBinRenderer->conv_band * sizeof( Word32 ** ) ) ) == NULL ) #endif { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Convolution Module \n" ) ); } #ifdef FIX_1123_FASTCONV_PARAMBIN_16BIT_ROM IF( ( hBinRenConvModule->Q_filterStatesLeft = (Word16 ***) malloc( hBinRenderer->conv_band * sizeof( Word16 ** ) ) ) == NULL ) #else IF( ( hBinRenConvModule->Q_filterStatesLeft = (Word16 ***) malloc( hBinRenderer->conv_band * sizeof( Word16 ** ) ) ) == NULL ) #endif { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Convolution Module \n" ) ); } FOR( bandIdx = 0; bandIdx < hBinRenderer->conv_band; bandIdx++ ) { #ifdef FIX_1123_FASTCONV_PARAMBIN_16BIT_ROM IF( ( hBinRenConvModule->filterStatesLeftReal_fx[bandIdx] = (Word16 **) malloc( hBinRenderer->nInChannels * sizeof( Word16 * ) ) ) == NULL ) #else IF( ( hBinRenConvModule->filterStatesLeftReal_fx[bandIdx] = (Word32 **) malloc( hBinRenderer->nInChannels * sizeof( Word32 * ) ) ) == NULL ) #endif { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Convolution Module \n" ) ); } #ifdef FIX_1123_FASTCONV_PARAMBIN_16BIT_ROM IF( ( hBinRenConvModule->filterStatesLeftImag_fx[bandIdx] = (Word16 **) malloc( hBinRenderer->nInChannels * sizeof( Word16 * ) ) ) == NULL ) #else IF( ( hBinRenConvModule->filterStatesLeftImag_fx[bandIdx] = (Word32 **) malloc( hBinRenderer->nInChannels * sizeof( Word32 * ) ) ) == NULL ) #endif { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Convolution Module \n" ) ); } #ifdef FIX_1123_FASTCONV_PARAMBIN_16BIT_ROM IF( ( hBinRenConvModule->Q_filterStatesLeft[bandIdx] = (Word16 **) malloc( hBinRenderer->nInChannels * sizeof( Word16 * ) ) ) == NULL ) #else IF( ( hBinRenConvModule->Q_filterStatesLeft[bandIdx] = (Word16 **) malloc( hBinRenderer->nInChannels * sizeof( Word16 * ) ) ) == NULL ) #endif { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Convolution Module \n" ) ); } FOR( chIdx = 0; chIdx < hBinRenderer->nInChannels; chIdx++ ) { #ifdef FIX_1123_FASTCONV_PARAMBIN_16BIT_ROM IF( ( hBinRenConvModule->filterStatesLeftReal_fx[bandIdx][chIdx] = (Word16 *) malloc( hBinRenConvModule->numTapsArray[bandIdx] * sizeof( Word16 ) ) ) == NULL ) #else IF( ( hBinRenConvModule->filterStatesLeftReal_fx[bandIdx][chIdx] = (Word32 *) malloc( hBinRenConvModule->numTapsArray[bandIdx] * sizeof( Word32 ) ) ) == NULL ) #endif { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Convolution Module \n" ) ); } #ifdef FIX_1123_FASTCONV_PARAMBIN_16BIT_ROM IF( ( hBinRenConvModule->filterStatesLeftImag_fx[bandIdx][chIdx] = (Word16 *) malloc( hBinRenConvModule->numTapsArray[bandIdx] * sizeof( Word16 ) ) ) == NULL ) #else IF( ( hBinRenConvModule->filterStatesLeftImag_fx[bandIdx][chIdx] = (Word32 *) malloc( hBinRenConvModule->numTapsArray[bandIdx] * sizeof( Word32 ) ) ) == NULL ) #endif { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Convolution Module \n" ) ); } Loading @@ -453,7 +458,7 @@ static ivas_error ivas_binRenderer_convModuleOpen( { FOR( chIdx = 0; chIdx < hBinRenderer->nInChannels; chIdx++ ) { Word16 tmp = 0; Word16 tmp = chIdx; move16(); IF( isLoudspeaker ) Loading Loading @@ -504,13 +509,8 @@ static ivas_error ivas_binRenderer_convModuleOpen( for ( chIdx = 0; chIdx < hBinRenderer->nInChannels; chIdx++ ) { /* set the memories to zero */ #ifdef FIX_1123_FASTCONV_PARAMBIN_16BIT_ROM set16_zero_fx( hBinRenConvModule->filterStatesLeftReal_fx[bandIdx][chIdx], hBinRenConvModule->numTapsArray[bandIdx] ); set16_zero_fx( hBinRenConvModule->filterStatesLeftImag_fx[bandIdx][chIdx], hBinRenConvModule->numTapsArray[bandIdx] ); #else set_zero_fx( hBinRenConvModule->filterStatesLeftReal_fx[bandIdx][chIdx], hBinRenConvModule->numTapsArray[bandIdx] ); set_zero_fx( hBinRenConvModule->filterStatesLeftImag_fx[bandIdx][chIdx], hBinRenConvModule->numTapsArray[bandIdx] ); #endif } } #else Loading @@ -519,13 +519,8 @@ static ivas_error ivas_binRenderer_convModuleOpen( IF( EQ_16( renderer_type, RENDERER_BINAURAL_FASTCONV_ROOM ) ) { /* set the memories to zero */ #ifdef FIX_1123_FASTCONV_PARAMBIN_16BIT_ROM set16_fx( hBinRenConvModule->filterStatesLeftReal_fx[bandIdx][chIdx], 0, hBinRenConvModule->numTapsArray[bandIdx] ); set16_fx( hBinRenConvModule->filterStatesLeftImag_fx[bandIdx][chIdx], 0, hBinRenConvModule->numTapsArray[bandIdx] ); #else set32_fx( hBinRenConvModule->filterStatesLeftReal_fx[bandIdx][chIdx], 0, hBinRenConvModule->numTapsArray[bandIdx] ); set32_fx( hBinRenConvModule->filterStatesLeftImag_fx[bandIdx][chIdx], 0, hBinRenConvModule->numTapsArray[bandIdx] ); #endif set16_fx( hBinRenConvModule->Q_filterStatesLeft[bandIdx][chIdx], 31, hBinRenConvModule->numTapsArray[bandIdx] ); IF( isLoudspeaker ) { Loading @@ -538,13 +533,8 @@ static ivas_error ivas_binRenderer_convModuleOpen( ELSE { /* set the memories to zero */ #ifdef FIX_1123_FASTCONV_PARAMBIN_16BIT_ROM set16_fx( hBinRenConvModule->filterStatesLeftReal_fx[bandIdx][chIdx], 0, hBinRenConvModule->numTapsArray[bandIdx] ); set16_fx( hBinRenConvModule->filterStatesLeftImag_fx[bandIdx][chIdx], 0, hBinRenConvModule->numTapsArray[bandIdx] ); #else set32_fx( hBinRenConvModule->filterStatesLeftReal_fx[bandIdx][chIdx], 0, hBinRenConvModule->numTaps ); set32_fx( hBinRenConvModule->filterStatesLeftImag_fx[bandIdx][chIdx], 0, hBinRenConvModule->numTaps ); #endif set16_fx( hBinRenConvModule->Q_filterStatesLeft[bandIdx][chIdx], 31, hBinRenConvModule->numTaps ); IF( isLoudspeaker ) { Loading Loading @@ -614,6 +604,14 @@ void ivas_init_binaural_hrtf_fx( move16(); HrtfFastConv->ntaps = 0; move16(); HrtfFastConv->factor_Q_latency_s_fx = 0; move16(); HrtfFastConv->factor_Q_filters_fx = 0; move16(); HrtfFastConv->factor_Q_ReverberationTimes_fx = 0; move16(); HrtfFastConv->factor_Q_ReverberationEneCorrections_fx = 0; move16(); #else HrtfFastConv->leftHRIRReal_HOA3_fx = NULL; HrtfFastConv->leftHRIRImag_HOA3_fx = NULL; Loading Loading @@ -975,6 +973,8 @@ static ivas_error ivas_binaural_hrtf_open_fx( #ifdef FIX_POINT_HRTF_FILE_OPTIM HrtfFastConv->FASTCONV_latency_s_fx = FASTCONV_HRIR_latency_s_fx; HrtfFastConv->ntaps = BINAURAL_NTAPS; HrtfFastConv->factor_Q_latency_s_fx = FASTCONV_factor_Q_HRIR_latency_s_fx; move16(); move16(); #else HrtfFastConv->FASTCONV_HRIR_latency_s_fx = FASTCONV_HRIR_latency_s_fx; Loading @@ -990,6 +990,8 @@ static ivas_error ivas_binaural_hrtf_open_fx( #ifdef FIX_POINT_HRTF_FILE_OPTIM HrtfFastConv->FASTCONV_latency_s_fx = FASTCONV_HOA2_latency_s_fx; HrtfFastConv->ntaps = BINAURAL_NTAPS_SBA; HrtfFastConv->factor_Q_latency_s_fx = FASTCONV_factor_Q_HOA2_latency_s_fx; move16(); move16(); #else HrtfFastConv->FASTCONV_HOA2_latency_s_fx = FASTCONV_HOA2_latency_s_fx; Loading @@ -1006,6 +1008,8 @@ static ivas_error ivas_binaural_hrtf_open_fx( #ifdef FIX_POINT_HRTF_FILE_OPTIM HrtfFastConv->FASTCONV_latency_s_fx = FASTCONV_HOA3_latency_s_fx; HrtfFastConv->ntaps = BINAURAL_NTAPS_SBA; HrtfFastConv->factor_Q_latency_s_fx = FASTCONV_factor_Q_HOA3_latency_s_fx; move16(); move16(); #else HrtfFastConv->FASTCONV_HOA3_latency_s_fx = FASTCONV_HOA3_latency_s_fx; Loading @@ -1021,6 +1025,8 @@ static ivas_error ivas_binaural_hrtf_open_fx( #ifdef FIX_POINT_HRTF_FILE_OPTIM HrtfFastConv->FASTCONV_latency_s_fx = FASTCONV_FOA_latency_s_fx; HrtfFastConv->ntaps = BINAURAL_NTAPS_SBA; HrtfFastConv->factor_Q_latency_s_fx = FASTCONV_factor_Q_FOA_latency_s_fx; move16(); move16(); #else HrtfFastConv->FASTCONV_FOA_latency_s_fx = FASTCONV_FOA_latency_s_fx; Loading @@ -1037,6 +1043,8 @@ static ivas_error ivas_binaural_hrtf_open_fx( #ifdef FIX_POINT_HRTF_FILE_OPTIM HrtfFastConv->FASTCONV_latency_s_fx = FASTCONV_BRIR_latency_s_fx; HrtfFastConv->ntaps = BINAURAL_NTAPS_MAX; HrtfFastConv->factor_Q_latency_s_fx = FASTCONV_factor_Q_BRIR_latency_s_fx; move16(); move16(); #else HrtfFastConv->FASTCONV_BRIR_latency_s_fx = FASTCONV_BRIR_latency_s_fx; Loading Loading @@ -1086,7 +1094,11 @@ static ivas_error ivas_binaural_hrtf_open_fx( } FOR( i = 0; i < BINAURAL_CONVBANDS; i++ ) { #ifdef FIX_POINT_HRTF_FILE_OPTIM IF( EQ_32( renderer_type, RENDERER_BINAURAL_FASTCONV ) && EQ_16( HrtfFastConv->n_channels, HRTF_LS_CHANNELS ) ) #else IF( EQ_32( renderer_type, RENDERER_BINAURAL_FASTCONV ) ) #endif { FOR( j = 0; j < HRTF_LS_CHANNELS; j++ ) { Loading @@ -1103,7 +1115,11 @@ static ivas_error ivas_binaural_hrtf_open_fx( #endif } } #ifdef FIX_POINT_HRTF_FILE_OPTIM ELSE IF( EQ_32( renderer_type, RENDERER_BINAURAL_FASTCONV_ROOM ) && EQ_16( HrtfFastConv->n_channels, HRTF_LS_CHANNELS ) ) #else ELSE IF( EQ_32( renderer_type, RENDERER_BINAURAL_FASTCONV_ROOM ) ) #endif { FOR( j = 0; j < HRTF_LS_CHANNELS; j++ ) { Loading @@ -1120,15 +1136,19 @@ static ivas_error ivas_binaural_hrtf_open_fx( #endif } } #ifdef FIX_POINT_HRTF_FILE_OPTIM IF( EQ_32( input_config, IVAS_AUDIO_CONFIG_HOA3 ) && EQ_16( HrtfFastConv->n_channels, HOA3_CHANNELS ) ) #else IF( EQ_32( input_config, IVAS_AUDIO_CONFIG_HOA3 ) ) #endif { FOR( j = 0; j < HOA3_CHANNELS; j++ ) { #ifdef FIX_POINT_HRTF_FILE_OPTIM HrtfFastConv->leftReal_fx[i][j] = leftHRIRReal_HOA3_fx[i][j]; HrtfFastConv->leftImag_fx[i][j] = leftHRIRImag_HOA3_fx[i][j]; HrtfFastConv->rightReal_fx[i][j] = leftHRIRReal_HOA3_fx[i][j]; HrtfFastConv->rightImag_fx[i][j] = leftHRIRImag_HOA3_fx[i][j]; HrtfFastConv->rightReal_fx[i][j] = rightHRIRReal_HOA3_fx[i][j]; HrtfFastConv->rightImag_fx[i][j] = rightHRIRImag_HOA3_fx[i][j]; #else HrtfFastConv->leftHRIRReal_HOA3_fx[i][j] = leftHRIRReal_HOA3_fx[i][j]; HrtfFastConv->leftHRIRImag_HOA3_fx[i][j] = leftHRIRImag_HOA3_fx[i][j]; Loading @@ -1137,15 +1157,19 @@ static ivas_error ivas_binaural_hrtf_open_fx( #endif } } #ifdef FIX_POINT_HRTF_FILE_OPTIM IF( EQ_32( input_config, IVAS_AUDIO_CONFIG_HOA2 ) && EQ_16( HrtfFastConv->n_channels, HOA2_CHANNELS ) ) #else IF( EQ_32( input_config, IVAS_AUDIO_CONFIG_HOA2 ) ) #endif { FOR( j = 0; j < HOA2_CHANNELS; j++ ) { #ifdef FIX_POINT_HRTF_FILE_OPTIM HrtfFastConv->leftReal_fx[i][j] = leftHRIRReal_HOA2_fx[i][j]; HrtfFastConv->leftImag_fx[i][j] = leftHRIRImag_HOA2_fx[i][j]; HrtfFastConv->rightReal_fx[i][j] = leftHRIRReal_HOA2_fx[i][j]; HrtfFastConv->rightImag_fx[i][j] = leftHRIRImag_HOA2_fx[i][j]; HrtfFastConv->rightReal_fx[i][j] = rightHRIRReal_HOA2_fx[i][j]; HrtfFastConv->rightImag_fx[i][j] = rightHRIRImag_HOA2_fx[i][j]; #else HrtfFastConv->leftHRIRReal_HOA2_fx[i][j] = leftHRIRReal_HOA2_fx[i][j]; HrtfFastConv->leftHRIRImag_HOA2_fx[i][j] = leftHRIRImag_HOA2_fx[i][j]; Loading @@ -1154,15 +1178,19 @@ static ivas_error ivas_binaural_hrtf_open_fx( #endif } } #ifdef FIX_POINT_HRTF_FILE_OPTIM IF( EQ_32( input_config, IVAS_AUDIO_CONFIG_FOA ) && EQ_16( HrtfFastConv->n_channels, FOA_CHANNELS ) ) #else IF( EQ_32( input_config, IVAS_AUDIO_CONFIG_FOA ) ) #endif { FOR( j = 0; j < FOA_CHANNELS; j++ ) { #ifdef FIX_POINT_HRTF_FILE_OPTIM HrtfFastConv->leftReal_fx[i][j] = leftHRIRReal_FOA_fx[i][j]; HrtfFastConv->leftImag_fx[i][j] = leftHRIRImag_FOA_fx[i][j]; HrtfFastConv->rightReal_fx[i][j] = leftHRIRReal_FOA_fx[i][j]; HrtfFastConv->rightImag_fx[i][j] = leftHRIRImag_FOA_fx[i][j]; HrtfFastConv->rightReal_fx[i][j] = rightHRIRReal_FOA_fx[i][j]; HrtfFastConv->rightImag_fx[i][j] = rightHRIRImag_FOA_fx[i][j]; #else HrtfFastConv->leftHRIRReal_FOA_fx[i][j] = leftHRIRReal_FOA_fx[i][j]; HrtfFastConv->leftHRIRImag_FOA_fx[i][j] = leftHRIRImag_FOA_fx[i][j]; Loading @@ -1173,7 +1201,9 @@ static ivas_error ivas_binaural_hrtf_open_fx( } } #ifdef FIX_1123_FASTCONV_PARAMBIN_16BIT_ROM HrtfFastConv->factor_Q_ReverberationTimes_fx = FASTCONV_factor_Q_fastconvReverberationTimes_fx; mvs2s( fastconvReverberationTimes_fx, HrtfFastConv->fastconvReverberationTimes_fx, CLDFB_NO_CHANNELS_MAX ); HrtfFastConv->factor_Q_ReverberationEneCorrections_fx = FASTCONV_factor_Q_fastconvReverberationEneCorrections_fx; mvs2s( fastconvReverberationEneCorrections_fx, HrtfFastConv->fastconvReverberationEneCorrections_fx, CLDFB_NO_CHANNELS_MAX ); #else Copy32( fastconvReverberationTimes_fx, HrtfFastConv->fastconvReverberationTimes_fx, CLDFB_NO_CHANNELS_MAX ); Loading Loading @@ -1535,7 +1565,6 @@ ivas_error ivas_binRenderer_open_fx( { return error; } #ifndef FIX_POINT_HRTF_FILE_OPTIM /* initialize the dmx matrix */ FOR( chIdx = 0; chIdx < BINAURAL_CHANNELS; chIdx++ ) Loading @@ -1546,7 +1575,6 @@ ivas_error ivas_binRenderer_open_fx( move32(); } } #endif } ELSE { Loading lib_rend/ivas_rom_TdBinauralRenderer_new.cc +1 −1 Original line number Diff line number Diff line Loading @@ -48,7 +48,7 @@ *------------------------------------------------------------------------*/ /* TD renderer default HRIR model */ #ifdef DEBUGGING /* Generated on 29-Jan-2025 with Matlab version 23.2.0.2668659 (R2023b) Update 9 by marcemerit on MACA64 */ /* Generated on 30-Jan-2025 with Matlab version 23.2.0.2668659 (R2023b) Update 9 by marcemerit on MACA64 */ #endif const Word16 defaultHRIR_rom_latency_s_Q_fx = 31; lib_rend/ivas_rom_binauralRenderer_new.cc +7 −7 Original line number Diff line number Diff line Loading @@ -44,13 +44,13 @@ #define WMC_TOOL_SKIP #ifdef DEBUGGING /* Generated on 29-Jan-2025 with Matlab version 23.2.0.2668659 (R2023b) Update 9 by marcemerit on MACA64 */ /* Generated on 30-Jan-2025 with Matlab version 23.2.0.2668659 (R2023b) Update 9 by marcemerit on MACA64 */ #endif const Word16 FASTCONV_factor_Q_HOA3_latency_s_fx = 31; const Word32 FASTCONV_HOA3_latency_s_fx = 44739; const Word16 FASTCONV_HRIR_HOA3_fx= 14; const Word16 FASTCONV_factor_Q_HOA3_fx= 14; const Word16 leftHRIRReal_HOA3_fx[BINAURAL_CONVBANDS][HOA3_CHANNELS][BINAURAL_NTAPS_SBA]= { { Loading Loading @@ -3669,7 +3669,7 @@ const Word16 rightHRIRImag_HOA3_fx[BINAURAL_CONVBANDS][HOA3_CHANNELS][BINAURAL_N const Word16 FASTCONV_factor_Q_HOA2_latency_s_fx = 31; const Word32 FASTCONV_HOA2_latency_s_fx = 44739; const Word16 FASTCONV_factor_Q_HRIR_HOA2_fx = 14; const Word16 FASTCONV_factor_Q_HOA2_fx = 14; const Word16 leftHRIRReal_HOA2_fx[BINAURAL_CONVBANDS][HOA2_CHANNELS][BINAURAL_NTAPS_SBA]= { { Loading Loading @@ -5888,7 +5888,7 @@ const Word16 rightHRIRImag_HOA2_fx[BINAURAL_CONVBANDS][HOA2_CHANNELS][BINAURAL_N const Word16 FASTCONV_factor_Q_FOA_latency_s_fx = 31; const Word32 FASTCONV_FOA_latency_s_fx = 44739; const Word16 FASTCONV_factor_Q_HRIR_FOA_fx = 14; const Word16 FASTCONV_factor_Q_FOA_fx = 14; const Word16 leftHRIRReal_FOA_fx[BINAURAL_CONVBANDS][FOA_CHANNELS][BINAURAL_NTAPS_SBA]= { { Loading Loading @@ -46945,14 +46945,14 @@ const Word16 rightBRIRImag_fx[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTA } }; const Word16 factor_Q_fastconvReverberationTimes_fx = 15; const Word16 FASTCONV_factor_Q_fastconvReverberationTimes_fx = 15; const Word16 fastconvReverberationTimes_fx[CLDFB_NO_CHANNELS_MAX] = { 13725, 6792, 6652, 6788, 7095, 7735, 7554, 7509, 7471, 7205, 7392, 7237, 7330, 7306, 7327, 7449, 7454, 7331, 7214, 7168, 7223, 7152, 6988, 6892, 6797, 6513, 6431, 6387, 6237, 6046, 5909, 5773, 5784, 5819, 6016, 6420, 6660, 6829, 7034, 7209, 7305, 7550, 7665, 7656, 7744, 7780, 7918, 7901, 7827, 7942, 8102, 8059, 8133, 8041, 7994, 7999, 7828, 7950, 7695, 8292, }; const Word16 factor_Q_fastconvReverberationEneCorrections_fx = 15; const Word16 FASTCONV_factor_Q_fastconvReverberationEneCorrections_fx = 15; const Word16 fastconvReverberationEneCorrections_fx[CLDFB_NO_CHANNELS_MAX] = { 19, 7, 8, 7, 8, 50, 38, 36, 41, 43, 76, 80, 88, 89, 86, 84, 90, 89, 85, 83, 112, 58, 32, 23, 20, 18, 17, 19, 20, 18, 41, 40, 31, 20, 9, 3, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, Loading @@ -46960,7 +46960,7 @@ const Word16 fastconvReverberationEneCorrections_fx[CLDFB_NO_CHANNELS_MAX] = #ifdef DEBUGGING /* Generated on 29-Jan-2025 with Matlab version 23.2.0.2668659 (R2023b) Update 9 by marcemerit on MACA64 */ /* Generated on 30-Jan-2025 with Matlab version 23.2.0.2668659 (R2023b) Update 9 by marcemerit on MACA64 */ #endif lib_rend/ivas_rom_binauralRenderer_new.h +12 −0 File changed.Preview size limit exceeded, changes collapsed. Show changes lib_rend/ivas_stat_rend.h +3 −5 Original line number Diff line number Diff line Loading @@ -689,22 +689,20 @@ typedef struct ivas_dirac_dec_binaural_data_structure typedef struct ivas_binaural_rendering_conv_module_struct_fx { #ifdef FIX_1123_FASTCONV_PARAMBIN_16BIT_ROM Word16 Q_factor_filters; Word16 ***filterTapsLeftReal_fx; Word16 ***filterTapsLeftImag_fx; Word16 ***filterTapsRightReal_fx; Word16 ***filterTapsRightImag_fx; Word16 ***filterStatesLeftReal_fx; Word16 ***filterStatesLeftImag_fx; #else Word32 ***filterTapsLeftReal_fx; Word32 ***filterTapsLeftImag_fx; Word32 ***filterTapsRightReal_fx; Word32 ***filterTapsRightImag_fx; #endif Word32 ***filterStatesLeftReal_fx; Word32 ***filterStatesLeftImag_fx; #endif Word16 ***Q_filterStatesLeft; Word16 numTapsArray[BINAURAL_CONVBANDS]; Loading Loading @@ -1544,7 +1542,7 @@ typedef struct ivas_hrtfs_fastconv_struct Word16 factor_Q_filters_fx; Word16 factor_Q_ReverberationTimes_fx; Word16 factor_Q_ReverberationEneCorrections_fx; Word16 FASTCONV_latency_s_fx; Word32 FASTCONV_latency_s_fx; uint16_t ntaps; #ifdef FIX_POINT_HRTF_FILE_OPTIM Word16 ***leftReal_fx; Loading Loading
lib_dec/ivas_binRenderer_internal.c +85 −57 Original line number Diff line number Diff line Loading @@ -71,6 +71,7 @@ static void ivas_binRenderer_filterModule_fx( Word16 *Q_filterStates; #ifdef FIX_1123_FASTCONV_PARAMBIN_16BIT_ROM const Word16 *filterTapsLeftRealPtr_fx, *filterTapsLeftImagPtr_fx, *filterTapsRightRealPtr_fx, *filterTapsRightImagPtr_fx; const Word16 Q_filter = Q15 + ( Q15 - hBinRenderer->hBinRenConvModule->Q_factor_filters ) - ( Q31 - Q29 ); #else const Word32 *filterTapsLeftRealPtr_fx, *filterTapsLeftImagPtr_fx, *filterTapsRightRealPtr_fx, *filterTapsRightImagPtr_fx; #endif Loading Loading @@ -108,6 +109,16 @@ static void ivas_binRenderer_filterModule_fx( filterStatesLeftImagPtr_fx[tapIdx] = filterStatesLeftImagPtr_fx[tapIdx - 1]; move32(); #ifdef FIX_1123_FASTCONV_PARAMBIN_16BIT_ROM W_sub1 = W_sub( W_mult_32_32( filterStatesLeftRealPtr_fx[tapIdx], L_shl( filterTapsLeftRealPtr_fx[tapIdx], Q_filter ) ), W_mult_32_32( filterStatesLeftImagPtr_fx[tapIdx], L_shl( filterTapsLeftImagPtr_fx[tapIdx], Q_filter ) ) ); // Q29 + Q_filterStates[tapIdx - 1] W_add1 = W_add( W_mult_32_32( filterStatesLeftRealPtr_fx[tapIdx], L_shl( filterTapsLeftImagPtr_fx[tapIdx], Q_filter ) ), W_mult_32_32( filterStatesLeftImagPtr_fx[tapIdx], L_shl( filterTapsLeftRealPtr_fx[tapIdx], Q_filter ) ) ); // Q29 + Q_filterStates[tapIdx - 1] W_sub2 = W_sub( W_mult_32_32( filterStatesLeftRealPtr_fx[tapIdx], L_shl( filterTapsRightRealPtr_fx[tapIdx], Q_filter ) ), W_mult_32_32( filterStatesLeftImagPtr_fx[tapIdx], L_shl( filterTapsRightImagPtr_fx[tapIdx], Q_filter ) ) ); // Q29 + Q_filterStates[tapIdx - 1] W_add2 = W_add( W_mult_32_32( filterStatesLeftRealPtr_fx[tapIdx], L_shl( filterTapsRightImagPtr_fx[tapIdx], Q_filter ) ), W_mult_32_32( filterStatesLeftImagPtr_fx[tapIdx], L_shl( filterTapsRightRealPtr_fx[tapIdx], Q_filter ) ) ); // Q29 + Q_filterStates[tapIdx - 1] #else W_sub1 = W_sub( W_mult0_32_32( filterStatesLeftRealPtr_fx[tapIdx], filterTapsLeftRealPtr_fx[tapIdx] ), W_mult0_32_32( filterStatesLeftImagPtr_fx[tapIdx], filterTapsLeftImagPtr_fx[tapIdx] ) ); // Q29 + Q_filterStates[tapIdx - 1] W_add1 = W_add( W_mult0_32_32( filterStatesLeftRealPtr_fx[tapIdx], filterTapsLeftImagPtr_fx[tapIdx] ), Loading @@ -116,7 +127,7 @@ static void ivas_binRenderer_filterModule_fx( W_mult0_32_32( filterStatesLeftImagPtr_fx[tapIdx], filterTapsRightImagPtr_fx[tapIdx] ) ); // Q29 + Q_filterStates[tapIdx - 1] W_add2 = W_add( W_mult0_32_32( filterStatesLeftRealPtr_fx[tapIdx], filterTapsRightImagPtr_fx[tapIdx] ), W_mult0_32_32( filterStatesLeftImagPtr_fx[tapIdx], filterTapsRightRealPtr_fx[tapIdx] ) ); // Q29 + Q_filterStates[tapIdx - 1] #endif outRealLeft_fx = W_shr( outRealLeft_fx, sub( Q_filterStates[tapIdx], Q_filterStates[tapIdx - 1] ) ); outImagLeft_fx = W_shr( outImagLeft_fx, sub( Q_filterStates[tapIdx], Q_filterStates[tapIdx - 1] ) ); outRealRight_fx = W_shr( outRealRight_fx, sub( Q_filterStates[tapIdx], Q_filterStates[tapIdx - 1] ) ); Loading Loading @@ -145,6 +156,29 @@ static void ivas_binRenderer_filterModule_fx( /* Left Real and Imag */ // Q29 + Q_curr #ifdef FIX_1123_FASTCONV_PARAMBIN_16BIT_ROM out_Conv_CLDFB_real[0][k][bandIdx] = W_add( out_Conv_CLDFB_real[0][k][bandIdx], W_add( W_shr( outRealLeft_fx, sub( Q_filterStates[1], Q_curr ) ), W_sub( W_mult_32_32( filterStatesLeftRealPtr_fx[0], L_shl( filterTapsLeftRealPtr_fx[0], Q_filter ) ), W_mult_32_32( filterStatesLeftImagPtr_fx[0], L_shl( filterTapsLeftImagPtr_fx[0], Q_filter ) ) ) ) ); // Q29 move64(); out_Conv_CLDFB_imag[0][k][bandIdx] = W_add( out_Conv_CLDFB_imag[0][k][bandIdx], W_add( W_shr( outImagLeft_fx, sub( Q_filterStates[1], Q_curr ) ), W_add( W_mult_32_32( filterStatesLeftRealPtr_fx[0], L_shl( filterTapsLeftImagPtr_fx[0], Q_filter ) ), W_mult_32_32( filterStatesLeftImagPtr_fx[0], L_shl( filterTapsLeftRealPtr_fx[0], Q_filter ) ) ) ) ); // Q29 move64(); /* Right Real and Imag */ out_Conv_CLDFB_real[1][k][bandIdx] = W_add( out_Conv_CLDFB_real[1][k][bandIdx], W_add( W_shr( outRealRight_fx, sub( Q_filterStates[1], Q_curr ) ), W_sub( W_mult_32_32( filterStatesLeftRealPtr_fx[0], L_shl( filterTapsRightRealPtr_fx[0], Q_filter ) ), W_mult_32_32( filterStatesLeftImagPtr_fx[0], L_shl( filterTapsRightImagPtr_fx[0], Q_filter ) ) ) ) ); // Q29 move64(); out_Conv_CLDFB_imag[1][k][bandIdx] = W_add( out_Conv_CLDFB_imag[1][k][bandIdx], W_add( W_shr( outImagRight_fx, sub( Q_filterStates[1], Q_curr ) ), W_add( W_mult_32_32( filterStatesLeftRealPtr_fx[0], L_shl( filterTapsRightImagPtr_fx[0], Q_filter ) ), W_mult_32_32( filterStatesLeftImagPtr_fx[0], L_shl( filterTapsRightRealPtr_fx[0], Q_filter ) ) ) ) ); // Q29 move64(); #else out_Conv_CLDFB_real[0][k][bandIdx] = W_add( out_Conv_CLDFB_real[0][k][bandIdx], W_add( W_shr( outRealLeft_fx, sub( Q_filterStates[1], Q_curr ) ), W_sub( W_mult0_32_32( filterStatesLeftRealPtr_fx[0], filterTapsLeftRealPtr_fx[0] ), Loading @@ -167,6 +201,7 @@ static void ivas_binRenderer_filterModule_fx( W_add( W_mult0_32_32( filterStatesLeftRealPtr_fx[0], filterTapsRightImagPtr_fx[0] ), W_mult0_32_32( filterStatesLeftImagPtr_fx[0], filterTapsRightRealPtr_fx[0] ) ) ) ); // Q29 move64(); #endif } } } Loading Loading @@ -213,6 +248,8 @@ static ivas_error ivas_binRenderer_convModuleOpen( #ifdef FIX_1123_FASTCONV_PARAMBIN_16BIT_ROM hBinRenConvModule->numTaps = hHrtf->ntaps; move16(); hBinRenConvModule->Q_factor_filters = hHrtf->factor_Q_filters_fx; move16(); #endif IF( EQ_16( renderer_type, RENDERER_BINAURAL_FASTCONV_ROOM ) ) { Loading Loading @@ -366,78 +403,46 @@ static ivas_error ivas_binRenderer_convModuleOpen( } #ifdef FIX_1123_FASTCONV_PARAMBIN_16BIT_ROM IF( ( hBinRenConvModule->filterStatesLeftReal_fx = (Word16 ***) malloc( hBinRenderer->conv_band * sizeof( Word16 ** ) ) ) == NULL ) #else IF( ( hBinRenConvModule->filterStatesLeftReal_fx = (Word32 ***) malloc( hBinRenderer->conv_band * sizeof( Word32 ** ) ) ) == NULL ) #endif { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Convolution Module \n" ) ); } #ifdef FIX_1123_FASTCONV_PARAMBIN_16BIT_ROM IF( ( hBinRenConvModule->filterStatesLeftImag_fx = (Word16 ***) malloc( hBinRenderer->conv_band * sizeof( Word16 ** ) ) ) == NULL ) #else IF( ( hBinRenConvModule->filterStatesLeftImag_fx = (Word32 ***) malloc( hBinRenderer->conv_band * sizeof( Word32 ** ) ) ) == NULL ) #endif { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Convolution Module \n" ) ); } #ifdef FIX_1123_FASTCONV_PARAMBIN_16BIT_ROM IF( ( hBinRenConvModule->Q_filterStatesLeft = (Word16 ***) malloc( hBinRenderer->conv_band * sizeof( Word16 ** ) ) ) == NULL ) #else IF( ( hBinRenConvModule->Q_filterStatesLeft = (Word16 ***) malloc( hBinRenderer->conv_band * sizeof( Word16 ** ) ) ) == NULL ) #endif { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Convolution Module \n" ) ); } FOR( bandIdx = 0; bandIdx < hBinRenderer->conv_band; bandIdx++ ) { #ifdef FIX_1123_FASTCONV_PARAMBIN_16BIT_ROM IF( ( hBinRenConvModule->filterStatesLeftReal_fx[bandIdx] = (Word16 **) malloc( hBinRenderer->nInChannels * sizeof( Word16 * ) ) ) == NULL ) #else IF( ( hBinRenConvModule->filterStatesLeftReal_fx[bandIdx] = (Word32 **) malloc( hBinRenderer->nInChannels * sizeof( Word32 * ) ) ) == NULL ) #endif { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Convolution Module \n" ) ); } #ifdef FIX_1123_FASTCONV_PARAMBIN_16BIT_ROM IF( ( hBinRenConvModule->filterStatesLeftImag_fx[bandIdx] = (Word16 **) malloc( hBinRenderer->nInChannels * sizeof( Word16 * ) ) ) == NULL ) #else IF( ( hBinRenConvModule->filterStatesLeftImag_fx[bandIdx] = (Word32 **) malloc( hBinRenderer->nInChannels * sizeof( Word32 * ) ) ) == NULL ) #endif { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Convolution Module \n" ) ); } #ifdef FIX_1123_FASTCONV_PARAMBIN_16BIT_ROM IF( ( hBinRenConvModule->Q_filterStatesLeft[bandIdx] = (Word16 **) malloc( hBinRenderer->nInChannels * sizeof( Word16 * ) ) ) == NULL ) #else IF( ( hBinRenConvModule->Q_filterStatesLeft[bandIdx] = (Word16 **) malloc( hBinRenderer->nInChannels * sizeof( Word16 * ) ) ) == NULL ) #endif { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Convolution Module \n" ) ); } FOR( chIdx = 0; chIdx < hBinRenderer->nInChannels; chIdx++ ) { #ifdef FIX_1123_FASTCONV_PARAMBIN_16BIT_ROM IF( ( hBinRenConvModule->filterStatesLeftReal_fx[bandIdx][chIdx] = (Word16 *) malloc( hBinRenConvModule->numTapsArray[bandIdx] * sizeof( Word16 ) ) ) == NULL ) #else IF( ( hBinRenConvModule->filterStatesLeftReal_fx[bandIdx][chIdx] = (Word32 *) malloc( hBinRenConvModule->numTapsArray[bandIdx] * sizeof( Word32 ) ) ) == NULL ) #endif { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Convolution Module \n" ) ); } #ifdef FIX_1123_FASTCONV_PARAMBIN_16BIT_ROM IF( ( hBinRenConvModule->filterStatesLeftImag_fx[bandIdx][chIdx] = (Word16 *) malloc( hBinRenConvModule->numTapsArray[bandIdx] * sizeof( Word16 ) ) ) == NULL ) #else IF( ( hBinRenConvModule->filterStatesLeftImag_fx[bandIdx][chIdx] = (Word32 *) malloc( hBinRenConvModule->numTapsArray[bandIdx] * sizeof( Word32 ) ) ) == NULL ) #endif { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Convolution Module \n" ) ); } Loading @@ -453,7 +458,7 @@ static ivas_error ivas_binRenderer_convModuleOpen( { FOR( chIdx = 0; chIdx < hBinRenderer->nInChannels; chIdx++ ) { Word16 tmp = 0; Word16 tmp = chIdx; move16(); IF( isLoudspeaker ) Loading Loading @@ -504,13 +509,8 @@ static ivas_error ivas_binRenderer_convModuleOpen( for ( chIdx = 0; chIdx < hBinRenderer->nInChannels; chIdx++ ) { /* set the memories to zero */ #ifdef FIX_1123_FASTCONV_PARAMBIN_16BIT_ROM set16_zero_fx( hBinRenConvModule->filterStatesLeftReal_fx[bandIdx][chIdx], hBinRenConvModule->numTapsArray[bandIdx] ); set16_zero_fx( hBinRenConvModule->filterStatesLeftImag_fx[bandIdx][chIdx], hBinRenConvModule->numTapsArray[bandIdx] ); #else set_zero_fx( hBinRenConvModule->filterStatesLeftReal_fx[bandIdx][chIdx], hBinRenConvModule->numTapsArray[bandIdx] ); set_zero_fx( hBinRenConvModule->filterStatesLeftImag_fx[bandIdx][chIdx], hBinRenConvModule->numTapsArray[bandIdx] ); #endif } } #else Loading @@ -519,13 +519,8 @@ static ivas_error ivas_binRenderer_convModuleOpen( IF( EQ_16( renderer_type, RENDERER_BINAURAL_FASTCONV_ROOM ) ) { /* set the memories to zero */ #ifdef FIX_1123_FASTCONV_PARAMBIN_16BIT_ROM set16_fx( hBinRenConvModule->filterStatesLeftReal_fx[bandIdx][chIdx], 0, hBinRenConvModule->numTapsArray[bandIdx] ); set16_fx( hBinRenConvModule->filterStatesLeftImag_fx[bandIdx][chIdx], 0, hBinRenConvModule->numTapsArray[bandIdx] ); #else set32_fx( hBinRenConvModule->filterStatesLeftReal_fx[bandIdx][chIdx], 0, hBinRenConvModule->numTapsArray[bandIdx] ); set32_fx( hBinRenConvModule->filterStatesLeftImag_fx[bandIdx][chIdx], 0, hBinRenConvModule->numTapsArray[bandIdx] ); #endif set16_fx( hBinRenConvModule->Q_filterStatesLeft[bandIdx][chIdx], 31, hBinRenConvModule->numTapsArray[bandIdx] ); IF( isLoudspeaker ) { Loading @@ -538,13 +533,8 @@ static ivas_error ivas_binRenderer_convModuleOpen( ELSE { /* set the memories to zero */ #ifdef FIX_1123_FASTCONV_PARAMBIN_16BIT_ROM set16_fx( hBinRenConvModule->filterStatesLeftReal_fx[bandIdx][chIdx], 0, hBinRenConvModule->numTapsArray[bandIdx] ); set16_fx( hBinRenConvModule->filterStatesLeftImag_fx[bandIdx][chIdx], 0, hBinRenConvModule->numTapsArray[bandIdx] ); #else set32_fx( hBinRenConvModule->filterStatesLeftReal_fx[bandIdx][chIdx], 0, hBinRenConvModule->numTaps ); set32_fx( hBinRenConvModule->filterStatesLeftImag_fx[bandIdx][chIdx], 0, hBinRenConvModule->numTaps ); #endif set16_fx( hBinRenConvModule->Q_filterStatesLeft[bandIdx][chIdx], 31, hBinRenConvModule->numTaps ); IF( isLoudspeaker ) { Loading Loading @@ -614,6 +604,14 @@ void ivas_init_binaural_hrtf_fx( move16(); HrtfFastConv->ntaps = 0; move16(); HrtfFastConv->factor_Q_latency_s_fx = 0; move16(); HrtfFastConv->factor_Q_filters_fx = 0; move16(); HrtfFastConv->factor_Q_ReverberationTimes_fx = 0; move16(); HrtfFastConv->factor_Q_ReverberationEneCorrections_fx = 0; move16(); #else HrtfFastConv->leftHRIRReal_HOA3_fx = NULL; HrtfFastConv->leftHRIRImag_HOA3_fx = NULL; Loading Loading @@ -975,6 +973,8 @@ static ivas_error ivas_binaural_hrtf_open_fx( #ifdef FIX_POINT_HRTF_FILE_OPTIM HrtfFastConv->FASTCONV_latency_s_fx = FASTCONV_HRIR_latency_s_fx; HrtfFastConv->ntaps = BINAURAL_NTAPS; HrtfFastConv->factor_Q_latency_s_fx = FASTCONV_factor_Q_HRIR_latency_s_fx; move16(); move16(); #else HrtfFastConv->FASTCONV_HRIR_latency_s_fx = FASTCONV_HRIR_latency_s_fx; Loading @@ -990,6 +990,8 @@ static ivas_error ivas_binaural_hrtf_open_fx( #ifdef FIX_POINT_HRTF_FILE_OPTIM HrtfFastConv->FASTCONV_latency_s_fx = FASTCONV_HOA2_latency_s_fx; HrtfFastConv->ntaps = BINAURAL_NTAPS_SBA; HrtfFastConv->factor_Q_latency_s_fx = FASTCONV_factor_Q_HOA2_latency_s_fx; move16(); move16(); #else HrtfFastConv->FASTCONV_HOA2_latency_s_fx = FASTCONV_HOA2_latency_s_fx; Loading @@ -1006,6 +1008,8 @@ static ivas_error ivas_binaural_hrtf_open_fx( #ifdef FIX_POINT_HRTF_FILE_OPTIM HrtfFastConv->FASTCONV_latency_s_fx = FASTCONV_HOA3_latency_s_fx; HrtfFastConv->ntaps = BINAURAL_NTAPS_SBA; HrtfFastConv->factor_Q_latency_s_fx = FASTCONV_factor_Q_HOA3_latency_s_fx; move16(); move16(); #else HrtfFastConv->FASTCONV_HOA3_latency_s_fx = FASTCONV_HOA3_latency_s_fx; Loading @@ -1021,6 +1025,8 @@ static ivas_error ivas_binaural_hrtf_open_fx( #ifdef FIX_POINT_HRTF_FILE_OPTIM HrtfFastConv->FASTCONV_latency_s_fx = FASTCONV_FOA_latency_s_fx; HrtfFastConv->ntaps = BINAURAL_NTAPS_SBA; HrtfFastConv->factor_Q_latency_s_fx = FASTCONV_factor_Q_FOA_latency_s_fx; move16(); move16(); #else HrtfFastConv->FASTCONV_FOA_latency_s_fx = FASTCONV_FOA_latency_s_fx; Loading @@ -1037,6 +1043,8 @@ static ivas_error ivas_binaural_hrtf_open_fx( #ifdef FIX_POINT_HRTF_FILE_OPTIM HrtfFastConv->FASTCONV_latency_s_fx = FASTCONV_BRIR_latency_s_fx; HrtfFastConv->ntaps = BINAURAL_NTAPS_MAX; HrtfFastConv->factor_Q_latency_s_fx = FASTCONV_factor_Q_BRIR_latency_s_fx; move16(); move16(); #else HrtfFastConv->FASTCONV_BRIR_latency_s_fx = FASTCONV_BRIR_latency_s_fx; Loading Loading @@ -1086,7 +1094,11 @@ static ivas_error ivas_binaural_hrtf_open_fx( } FOR( i = 0; i < BINAURAL_CONVBANDS; i++ ) { #ifdef FIX_POINT_HRTF_FILE_OPTIM IF( EQ_32( renderer_type, RENDERER_BINAURAL_FASTCONV ) && EQ_16( HrtfFastConv->n_channels, HRTF_LS_CHANNELS ) ) #else IF( EQ_32( renderer_type, RENDERER_BINAURAL_FASTCONV ) ) #endif { FOR( j = 0; j < HRTF_LS_CHANNELS; j++ ) { Loading @@ -1103,7 +1115,11 @@ static ivas_error ivas_binaural_hrtf_open_fx( #endif } } #ifdef FIX_POINT_HRTF_FILE_OPTIM ELSE IF( EQ_32( renderer_type, RENDERER_BINAURAL_FASTCONV_ROOM ) && EQ_16( HrtfFastConv->n_channels, HRTF_LS_CHANNELS ) ) #else ELSE IF( EQ_32( renderer_type, RENDERER_BINAURAL_FASTCONV_ROOM ) ) #endif { FOR( j = 0; j < HRTF_LS_CHANNELS; j++ ) { Loading @@ -1120,15 +1136,19 @@ static ivas_error ivas_binaural_hrtf_open_fx( #endif } } #ifdef FIX_POINT_HRTF_FILE_OPTIM IF( EQ_32( input_config, IVAS_AUDIO_CONFIG_HOA3 ) && EQ_16( HrtfFastConv->n_channels, HOA3_CHANNELS ) ) #else IF( EQ_32( input_config, IVAS_AUDIO_CONFIG_HOA3 ) ) #endif { FOR( j = 0; j < HOA3_CHANNELS; j++ ) { #ifdef FIX_POINT_HRTF_FILE_OPTIM HrtfFastConv->leftReal_fx[i][j] = leftHRIRReal_HOA3_fx[i][j]; HrtfFastConv->leftImag_fx[i][j] = leftHRIRImag_HOA3_fx[i][j]; HrtfFastConv->rightReal_fx[i][j] = leftHRIRReal_HOA3_fx[i][j]; HrtfFastConv->rightImag_fx[i][j] = leftHRIRImag_HOA3_fx[i][j]; HrtfFastConv->rightReal_fx[i][j] = rightHRIRReal_HOA3_fx[i][j]; HrtfFastConv->rightImag_fx[i][j] = rightHRIRImag_HOA3_fx[i][j]; #else HrtfFastConv->leftHRIRReal_HOA3_fx[i][j] = leftHRIRReal_HOA3_fx[i][j]; HrtfFastConv->leftHRIRImag_HOA3_fx[i][j] = leftHRIRImag_HOA3_fx[i][j]; Loading @@ -1137,15 +1157,19 @@ static ivas_error ivas_binaural_hrtf_open_fx( #endif } } #ifdef FIX_POINT_HRTF_FILE_OPTIM IF( EQ_32( input_config, IVAS_AUDIO_CONFIG_HOA2 ) && EQ_16( HrtfFastConv->n_channels, HOA2_CHANNELS ) ) #else IF( EQ_32( input_config, IVAS_AUDIO_CONFIG_HOA2 ) ) #endif { FOR( j = 0; j < HOA2_CHANNELS; j++ ) { #ifdef FIX_POINT_HRTF_FILE_OPTIM HrtfFastConv->leftReal_fx[i][j] = leftHRIRReal_HOA2_fx[i][j]; HrtfFastConv->leftImag_fx[i][j] = leftHRIRImag_HOA2_fx[i][j]; HrtfFastConv->rightReal_fx[i][j] = leftHRIRReal_HOA2_fx[i][j]; HrtfFastConv->rightImag_fx[i][j] = leftHRIRImag_HOA2_fx[i][j]; HrtfFastConv->rightReal_fx[i][j] = rightHRIRReal_HOA2_fx[i][j]; HrtfFastConv->rightImag_fx[i][j] = rightHRIRImag_HOA2_fx[i][j]; #else HrtfFastConv->leftHRIRReal_HOA2_fx[i][j] = leftHRIRReal_HOA2_fx[i][j]; HrtfFastConv->leftHRIRImag_HOA2_fx[i][j] = leftHRIRImag_HOA2_fx[i][j]; Loading @@ -1154,15 +1178,19 @@ static ivas_error ivas_binaural_hrtf_open_fx( #endif } } #ifdef FIX_POINT_HRTF_FILE_OPTIM IF( EQ_32( input_config, IVAS_AUDIO_CONFIG_FOA ) && EQ_16( HrtfFastConv->n_channels, FOA_CHANNELS ) ) #else IF( EQ_32( input_config, IVAS_AUDIO_CONFIG_FOA ) ) #endif { FOR( j = 0; j < FOA_CHANNELS; j++ ) { #ifdef FIX_POINT_HRTF_FILE_OPTIM HrtfFastConv->leftReal_fx[i][j] = leftHRIRReal_FOA_fx[i][j]; HrtfFastConv->leftImag_fx[i][j] = leftHRIRImag_FOA_fx[i][j]; HrtfFastConv->rightReal_fx[i][j] = leftHRIRReal_FOA_fx[i][j]; HrtfFastConv->rightImag_fx[i][j] = leftHRIRImag_FOA_fx[i][j]; HrtfFastConv->rightReal_fx[i][j] = rightHRIRReal_FOA_fx[i][j]; HrtfFastConv->rightImag_fx[i][j] = rightHRIRImag_FOA_fx[i][j]; #else HrtfFastConv->leftHRIRReal_FOA_fx[i][j] = leftHRIRReal_FOA_fx[i][j]; HrtfFastConv->leftHRIRImag_FOA_fx[i][j] = leftHRIRImag_FOA_fx[i][j]; Loading @@ -1173,7 +1201,9 @@ static ivas_error ivas_binaural_hrtf_open_fx( } } #ifdef FIX_1123_FASTCONV_PARAMBIN_16BIT_ROM HrtfFastConv->factor_Q_ReverberationTimes_fx = FASTCONV_factor_Q_fastconvReverberationTimes_fx; mvs2s( fastconvReverberationTimes_fx, HrtfFastConv->fastconvReverberationTimes_fx, CLDFB_NO_CHANNELS_MAX ); HrtfFastConv->factor_Q_ReverberationEneCorrections_fx = FASTCONV_factor_Q_fastconvReverberationEneCorrections_fx; mvs2s( fastconvReverberationEneCorrections_fx, HrtfFastConv->fastconvReverberationEneCorrections_fx, CLDFB_NO_CHANNELS_MAX ); #else Copy32( fastconvReverberationTimes_fx, HrtfFastConv->fastconvReverberationTimes_fx, CLDFB_NO_CHANNELS_MAX ); Loading Loading @@ -1535,7 +1565,6 @@ ivas_error ivas_binRenderer_open_fx( { return error; } #ifndef FIX_POINT_HRTF_FILE_OPTIM /* initialize the dmx matrix */ FOR( chIdx = 0; chIdx < BINAURAL_CHANNELS; chIdx++ ) Loading @@ -1546,7 +1575,6 @@ ivas_error ivas_binRenderer_open_fx( move32(); } } #endif } ELSE { Loading
lib_rend/ivas_rom_TdBinauralRenderer_new.cc +1 −1 Original line number Diff line number Diff line Loading @@ -48,7 +48,7 @@ *------------------------------------------------------------------------*/ /* TD renderer default HRIR model */ #ifdef DEBUGGING /* Generated on 29-Jan-2025 with Matlab version 23.2.0.2668659 (R2023b) Update 9 by marcemerit on MACA64 */ /* Generated on 30-Jan-2025 with Matlab version 23.2.0.2668659 (R2023b) Update 9 by marcemerit on MACA64 */ #endif const Word16 defaultHRIR_rom_latency_s_Q_fx = 31;
lib_rend/ivas_rom_binauralRenderer_new.cc +7 −7 Original line number Diff line number Diff line Loading @@ -44,13 +44,13 @@ #define WMC_TOOL_SKIP #ifdef DEBUGGING /* Generated on 29-Jan-2025 with Matlab version 23.2.0.2668659 (R2023b) Update 9 by marcemerit on MACA64 */ /* Generated on 30-Jan-2025 with Matlab version 23.2.0.2668659 (R2023b) Update 9 by marcemerit on MACA64 */ #endif const Word16 FASTCONV_factor_Q_HOA3_latency_s_fx = 31; const Word32 FASTCONV_HOA3_latency_s_fx = 44739; const Word16 FASTCONV_HRIR_HOA3_fx= 14; const Word16 FASTCONV_factor_Q_HOA3_fx= 14; const Word16 leftHRIRReal_HOA3_fx[BINAURAL_CONVBANDS][HOA3_CHANNELS][BINAURAL_NTAPS_SBA]= { { Loading Loading @@ -3669,7 +3669,7 @@ const Word16 rightHRIRImag_HOA3_fx[BINAURAL_CONVBANDS][HOA3_CHANNELS][BINAURAL_N const Word16 FASTCONV_factor_Q_HOA2_latency_s_fx = 31; const Word32 FASTCONV_HOA2_latency_s_fx = 44739; const Word16 FASTCONV_factor_Q_HRIR_HOA2_fx = 14; const Word16 FASTCONV_factor_Q_HOA2_fx = 14; const Word16 leftHRIRReal_HOA2_fx[BINAURAL_CONVBANDS][HOA2_CHANNELS][BINAURAL_NTAPS_SBA]= { { Loading Loading @@ -5888,7 +5888,7 @@ const Word16 rightHRIRImag_HOA2_fx[BINAURAL_CONVBANDS][HOA2_CHANNELS][BINAURAL_N const Word16 FASTCONV_factor_Q_FOA_latency_s_fx = 31; const Word32 FASTCONV_FOA_latency_s_fx = 44739; const Word16 FASTCONV_factor_Q_HRIR_FOA_fx = 14; const Word16 FASTCONV_factor_Q_FOA_fx = 14; const Word16 leftHRIRReal_FOA_fx[BINAURAL_CONVBANDS][FOA_CHANNELS][BINAURAL_NTAPS_SBA]= { { Loading Loading @@ -46945,14 +46945,14 @@ const Word16 rightBRIRImag_fx[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTA } }; const Word16 factor_Q_fastconvReverberationTimes_fx = 15; const Word16 FASTCONV_factor_Q_fastconvReverberationTimes_fx = 15; const Word16 fastconvReverberationTimes_fx[CLDFB_NO_CHANNELS_MAX] = { 13725, 6792, 6652, 6788, 7095, 7735, 7554, 7509, 7471, 7205, 7392, 7237, 7330, 7306, 7327, 7449, 7454, 7331, 7214, 7168, 7223, 7152, 6988, 6892, 6797, 6513, 6431, 6387, 6237, 6046, 5909, 5773, 5784, 5819, 6016, 6420, 6660, 6829, 7034, 7209, 7305, 7550, 7665, 7656, 7744, 7780, 7918, 7901, 7827, 7942, 8102, 8059, 8133, 8041, 7994, 7999, 7828, 7950, 7695, 8292, }; const Word16 factor_Q_fastconvReverberationEneCorrections_fx = 15; const Word16 FASTCONV_factor_Q_fastconvReverberationEneCorrections_fx = 15; const Word16 fastconvReverberationEneCorrections_fx[CLDFB_NO_CHANNELS_MAX] = { 19, 7, 8, 7, 8, 50, 38, 36, 41, 43, 76, 80, 88, 89, 86, 84, 90, 89, 85, 83, 112, 58, 32, 23, 20, 18, 17, 19, 20, 18, 41, 40, 31, 20, 9, 3, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, Loading @@ -46960,7 +46960,7 @@ const Word16 fastconvReverberationEneCorrections_fx[CLDFB_NO_CHANNELS_MAX] = #ifdef DEBUGGING /* Generated on 29-Jan-2025 with Matlab version 23.2.0.2668659 (R2023b) Update 9 by marcemerit on MACA64 */ /* Generated on 30-Jan-2025 with Matlab version 23.2.0.2668659 (R2023b) Update 9 by marcemerit on MACA64 */ #endif
lib_rend/ivas_rom_binauralRenderer_new.h +12 −0 File changed.Preview size limit exceeded, changes collapsed. Show changes
lib_rend/ivas_stat_rend.h +3 −5 Original line number Diff line number Diff line Loading @@ -689,22 +689,20 @@ typedef struct ivas_dirac_dec_binaural_data_structure typedef struct ivas_binaural_rendering_conv_module_struct_fx { #ifdef FIX_1123_FASTCONV_PARAMBIN_16BIT_ROM Word16 Q_factor_filters; Word16 ***filterTapsLeftReal_fx; Word16 ***filterTapsLeftImag_fx; Word16 ***filterTapsRightReal_fx; Word16 ***filterTapsRightImag_fx; Word16 ***filterStatesLeftReal_fx; Word16 ***filterStatesLeftImag_fx; #else Word32 ***filterTapsLeftReal_fx; Word32 ***filterTapsLeftImag_fx; Word32 ***filterTapsRightReal_fx; Word32 ***filterTapsRightImag_fx; #endif Word32 ***filterStatesLeftReal_fx; Word32 ***filterStatesLeftImag_fx; #endif Word16 ***Q_filterStatesLeft; Word16 numTapsArray[BINAURAL_CONVBANDS]; Loading Loading @@ -1544,7 +1542,7 @@ typedef struct ivas_hrtfs_fastconv_struct Word16 factor_Q_filters_fx; Word16 factor_Q_ReverberationTimes_fx; Word16 factor_Q_ReverberationEneCorrections_fx; Word16 FASTCONV_latency_s_fx; Word32 FASTCONV_latency_s_fx; uint16_t ntaps; #ifdef FIX_POINT_HRTF_FILE_OPTIM Word16 ***leftReal_fx; Loading