From 9c8faf36911cb8f34bb2095c7b9e0ec836ce7abc Mon Sep 17 00:00:00 2001 From: Shikha Shetgeri <100861@ittiam.com> Date: Fri, 14 Jul 2023 18:18:49 +0530 Subject: [PATCH 01/14] optimising memory allocation in fastconv renderer --- apps/decoder.c | 1 - lib_com/ivas_prot.h | 12 + lib_com/options.h | 1 + lib_dec/ivas_binRenderer_internal.c | 397 +++++++++++++++++++++++++++- lib_dec/ivas_init_dec.c | 5 +- lib_rend/ivas_stat_rend.h | 22 +- lib_util/hrtf_file_reader.c | 40 ++- 7 files changed, 468 insertions(+), 10 deletions(-) diff --git a/apps/decoder.c b/apps/decoder.c index e210ebe95e..64587e4a28 100644 --- a/apps/decoder.c +++ b/apps/decoder.c @@ -617,7 +617,6 @@ int main( } IVAS_DEC_HRTF_FASTCONV_HANDLE hHrtfFastConv = NULL; IVAS_DEC_GetHrtfFastConvHandle( hIvasDec, &hHrtfFastConv ); - if ( ( error = load_fastconv_HRTF_from_binary( hHrtfFastConv, hrtfReader ) ) != IVAS_ERR_OK ) { fprintf( stderr, "\nError in loading HRTF binary file %s for FastConv \n\n", arg.hrtfCRendFileName ); diff --git a/lib_com/ivas_prot.h b/lib_com/ivas_prot.h index 9bc253776d..9b6c592ee7 100644 --- a/lib_com/ivas_prot.h +++ b/lib_com/ivas_prot.h @@ -5144,6 +5144,18 @@ void ivas_binRenderer_close( BINAURAL_RENDERER_HANDLE *hBinRenderer /* i/o: decoder binaural renderer handle */ ); +#ifdef FIX_1720_HRTF_FASTCONV +void ivas_binaural_hrtf_close( + HRTFS_FASTCONV_HANDLE *hHrtfFastConv /* i/o: decoder binaural hrtf handle */ +); + +ivas_error ivas_allocate_binaural_hrtf( + HRTFS_FASTCONV *HrtfFastConv, /* i : fastconv HRTF handle */ + AUDIO_CONFIG output_config, /* i : ouput audio config */ + BINAURAL_INPUT_AUDIO_CONFIG output_config_bin /* i : binaural input audio config */ +); +#endif + #ifdef DEBUGGING void ivas_binaural_cldfb( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ diff --git a/lib_com/options.h b/lib_com/options.h index fbad020371..8daca52aaa 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -168,6 +168,7 @@ #define FIX_583_CLANG_TRANS_DET /* FhG: Issue 583: clang left shift on ramp_up_flag in transient detector */ #define NONBE_FIX_589_JBM_TC_OFFSETS /* FhG: issue 589: wrong offset into the TC buffers is used in some rendering paths in the JBM main rendering function */ #define FIX_MEM_REALLOC_IND_LIST /* VA: issue 601: failure of the automatic memory re-allocation mechanism when ind_list[] buffer is depleted in MASA mode with 2 TC*/ +#define FIX_1720_HRTF_FASTCONV /* Dlb : Binaural format RAM saving in SBA mode */ /* ################## End BE DEVELOPMENT switches ######################### */ diff --git a/lib_dec/ivas_binRenderer_internal.c b/lib_dec/ivas_binRenderer_internal.c index 5bd09236e0..837f2a4d4f 100644 --- a/lib_dec/ivas_binRenderer_internal.c +++ b/lib_dec/ivas_binRenderer_internal.c @@ -46,6 +46,9 @@ #include "debug.h" #endif #include "wmc_auto.h" +#ifdef FIX_1720_HRTF_FASTCONV +#include +#endif /*------------------------------------------------------------------------- @@ -381,6 +384,216 @@ static ivas_error ivas_binRenderer_convModuleOpen( return IVAS_ERR_OK; } +#ifdef FIX_1720_HRTF_FASTCONV +/*-------------------------------------------------------------------------* + * ivas_allocate_binaural_hrtf() + * + * Allocate memory for HrtfFastConv structure elements + *-------------------------------------------------------------------------*/ + +ivas_error ivas_allocate_binaural_hrtf( + HRTFS_FASTCONV *HrtfFastConv, + AUDIO_CONFIG output_config, + BINAURAL_INPUT_AUDIO_CONFIG output_config_bin ) +{ + int16_t i, j; + /*malloc for HOA3, HOA2, FOA*/ + if ( output_config == AUDIO_CONFIG_HOA3 || output_config_bin == BINAURAL_INPUT_AUDIO_CONFIG_HOA3 ) + { + if ( ( HrtfFastConv->leftHRIRReal_HOA3 != NULL ) && ( HrtfFastConv->leftHRIRImag_HOA3 != NULL ) && ( HrtfFastConv->rightHRIRReal_HOA3 != NULL ) && ( HrtfFastConv->rightHRIRImag_HOA3 != NULL ) ) + { + return IVAS_ERR_OK; + } + else + { + if ( ( HrtfFastConv->leftHRIRReal_HOA3 = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRReal_HOA3" ); + } + if ( ( HrtfFastConv->leftHRIRImag_HOA3 = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRImag_HOA3" ); + } + if ( ( HrtfFastConv->rightHRIRReal_HOA3 = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRReal_HOA3" ); + } + if ( ( HrtfFastConv->rightHRIRImag_HOA3 = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRImag_HOA3" ); + } + for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) + { + if ( ( HrtfFastConv->leftHRIRReal_HOA3[i] = (float **) malloc( HRTF_SH_CHANNELS * sizeof( float * ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRReal_HOA3" ); + } + if ( ( HrtfFastConv->leftHRIRImag_HOA3[i] = (float **) malloc( HRTF_SH_CHANNELS * sizeof( float * ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRImag_HOA3" ); + } + if ( ( HrtfFastConv->rightHRIRReal_HOA3[i] = (float **) malloc( HRTF_SH_CHANNELS * sizeof( float * ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRImag_HOA3" ); + } + if ( ( HrtfFastConv->rightHRIRImag_HOA3[i] = (float **) malloc( HRTF_SH_CHANNELS * sizeof( float * ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRImag_HOA3" ); + } + for ( j = 0; j < HRTF_SH_CHANNELS; j++ ) + { + if ( ( HrtfFastConv->leftHRIRReal_HOA3[i][j] = (float *) malloc( BINAURAL_NTAPS * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRReal_HOA3" ); + } + if ( ( HrtfFastConv->leftHRIRImag_HOA3[i][j] = (float *) malloc( BINAURAL_NTAPS * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRImag_HOA3" ); + } + if ( ( HrtfFastConv->rightHRIRReal_HOA3[i][j] = (float *) malloc( BINAURAL_NTAPS * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRReal_HOA3" ); + } + if ( ( HrtfFastConv->rightHRIRImag_HOA3[i][j] = (float *) malloc( BINAURAL_NTAPS * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRImag_HOA3" ); + } + } + } + } + } + else if ( output_config == AUDIO_CONFIG_HOA2 || output_config_bin == BINAURAL_INPUT_AUDIO_CONFIG_HOA2 ) + { + if ( ( HrtfFastConv->leftHRIRReal_HOA2 != NULL ) && ( HrtfFastConv->leftHRIRImag_HOA2 != NULL ) && ( HrtfFastConv->rightHRIRReal_HOA2 != NULL ) && ( HrtfFastConv->rightHRIRImag_HOA2 != NULL ) ) + { + return IVAS_ERR_OK; + } + else + { + if ( ( HrtfFastConv->leftHRIRReal_HOA2 = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRReal_HOA2" ); + } + if ( ( HrtfFastConv->leftHRIRImag_HOA2 = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRImag_HOA2" ); + } + if ( ( HrtfFastConv->rightHRIRReal_HOA2 = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRReal_HOA2" ); + } + if ( ( HrtfFastConv->rightHRIRImag_HOA2 = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRImag_HOA2" ); + } + for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) + { + if ( ( HrtfFastConv->leftHRIRReal_HOA2[i] = (float **) malloc( 9 * sizeof( float * ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRReal_HOA2" ); + } + if ( ( HrtfFastConv->leftHRIRImag_HOA2[i] = (float **) malloc( 9 * sizeof( float * ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRImag_HOA2" ); + } + if ( ( HrtfFastConv->rightHRIRReal_HOA2[i] = (float **) malloc( 9 * sizeof( float * ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRImag_HOA2" ); + } + if ( ( HrtfFastConv->rightHRIRImag_HOA2[i] = (float **) malloc( 9 * sizeof( float * ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRImag_HOA2" ); + } + for ( j = 0; j < 9; j++ ) + { + if ( ( HrtfFastConv->leftHRIRReal_HOA2[i][j] = (float *) malloc( BINAURAL_NTAPS * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRReal_HOA2" ); + } + if ( ( HrtfFastConv->leftHRIRImag_HOA2[i][j] = (float *) malloc( BINAURAL_NTAPS * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRImag_HOA2" ); + } + if ( ( HrtfFastConv->rightHRIRReal_HOA2[i][j] = (float *) malloc( BINAURAL_NTAPS * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRReal_HOA2" ); + } + if ( ( HrtfFastConv->rightHRIRImag_HOA2[i][j] = (float *) malloc( BINAURAL_NTAPS * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRImag_HOA2" ); + } + } + } + } + } + else if ( output_config == AUDIO_CONFIG_FOA || output_config_bin == BINAURAL_INPUT_AUDIO_CONFIG_FOA ) + { + if ( ( HrtfFastConv->leftHRIRReal_FOA != NULL ) && ( HrtfFastConv->leftHRIRImag_FOA != NULL ) && ( HrtfFastConv->rightHRIRReal_FOA != NULL ) && ( HrtfFastConv->rightHRIRImag_FOA != NULL ) ) + { + return IVAS_ERR_OK; + } + else + { + if ( ( HrtfFastConv->leftHRIRReal_FOA = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRReal_FOA" ); + } + if ( ( HrtfFastConv->leftHRIRImag_FOA = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRImag_FOA" ); + } + if ( ( HrtfFastConv->rightHRIRReal_FOA = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRReal_FOA" ); + } + if ( ( HrtfFastConv->rightHRIRImag_FOA = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRImag_FOA" ); + } + for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) + { + if ( ( HrtfFastConv->leftHRIRReal_FOA[i] = (float **) malloc( 4 * sizeof( float * ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRReal_FOA" ); + } + if ( ( HrtfFastConv->leftHRIRImag_FOA[i] = (float **) malloc( 4 * sizeof( float * ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRImag_FOA" ); + } + if ( ( HrtfFastConv->rightHRIRReal_FOA[i] = (float **) malloc( 4 * sizeof( float * ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRImag_FOA" ); + } + if ( ( HrtfFastConv->rightHRIRImag_FOA[i] = (float **) malloc( 4 * sizeof( float * ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRImag_FOA" ); + } + for ( j = 0; j < 4; j++ ) + { + if ( ( HrtfFastConv->leftHRIRReal_FOA[i][j] = (float *) malloc( BINAURAL_NTAPS * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRReal_FOA" ); + } + if ( ( HrtfFastConv->leftHRIRImag_FOA[i][j] = (float *) malloc( BINAURAL_NTAPS * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRImag_FOA" ); + } + if ( ( HrtfFastConv->rightHRIRReal_FOA[i][j] = (float *) malloc( BINAURAL_NTAPS * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRReal_FOA" ); + } + if ( ( HrtfFastConv->rightHRIRImag_FOA[i][j] = (float *) malloc( BINAURAL_NTAPS * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRImag_FOA" ); + } + } + } + } + } + return IVAS_ERR_OK; +} +#endif + /*-------------------------------------------------------------------------* * ivas_binaural_HRTF_open() * @@ -388,7 +601,11 @@ static ivas_error ivas_binRenderer_convModuleOpen( *-------------------------------------------------------------------------*/ static ivas_error ivas_binaural_hrtf_open( - HRTFS_FASTCONV_HANDLE *hHrtfFastConv /* i : fastconv HRTF handle */ + HRTFS_FASTCONV_HANDLE *hHrtfFastConv +#ifdef FIX_1720_HRTF_FASTCONV + , + AUDIO_CONFIG output_config +#endif ) { int16_t i, j; @@ -407,12 +624,31 @@ static ivas_error ivas_binaural_hrtf_open( return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for FastConv HRTF tables" ); } + +#ifdef FIX_1720_HRTF_FASTCONV + memset( HrtfFastConv, 0x00, sizeof( HRTFS_FASTCONV ) ); + HrtfFastConv->FASTCONV_HRIR_latency_s = FASTCONV_HRIR_latency_s; + if ( output_config == AUDIO_CONFIG_HOA2 ) + { + HrtfFastConv->FASTCONV_HOA2_latency_s = FASTCONV_HOA2_latency_s; + } + else if ( output_config == AUDIO_CONFIG_HOA3 ) + { + HrtfFastConv->FASTCONV_HOA3_latency_s = FASTCONV_HOA3_latency_s; + } + else if ( output_config == AUDIO_CONFIG_FOA ) + { + HrtfFastConv->FASTCONV_FOA_latency_s = FASTCONV_FOA_latency_s; + } + HrtfFastConv->FASTCONV_BRIR_latency_s = FASTCONV_BRIR_latency_s; + ivas_allocate_binaural_hrtf( HrtfFastConv, output_config, 0 ); +#else HrtfFastConv->FASTCONV_HRIR_latency_s = FASTCONV_HRIR_latency_s; HrtfFastConv->FASTCONV_HOA3_latency_s = FASTCONV_HOA3_latency_s; HrtfFastConv->FASTCONV_HOA2_latency_s = FASTCONV_HOA2_latency_s; HrtfFastConv->FASTCONV_FOA_latency_s = FASTCONV_FOA_latency_s; HrtfFastConv->FASTCONV_BRIR_latency_s = FASTCONV_BRIR_latency_s; - +#endif for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) { for ( j = 0; j < HRTF_LS_CHANNELS; j++ ) @@ -428,7 +664,40 @@ static ivas_error ivas_binaural_hrtf_open( mvr2r( rightBRIRReal[i][j], HrtfFastConv->rightBRIRReal[i][j], BINAURAL_NTAPS_MAX ); mvr2r( rightBRIRImag[i][j], HrtfFastConv->rightBRIRImag[i][j], BINAURAL_NTAPS_MAX ); } +#ifdef FIX_1720_HRTF_FASTCONV + if ( output_config == AUDIO_CONFIG_HOA3 ) + { + for ( j = 0; j < HRTF_SH_CHANNELS; j++ ) + { + mvr2r( leftHRIRReal_HOA3[i][j], HrtfFastConv->leftHRIRReal_HOA3[i][j], BINAURAL_NTAPS ); + mvr2r( leftHRIRImag_HOA3[i][j], HrtfFastConv->leftHRIRImag_HOA3[i][j], BINAURAL_NTAPS ); + mvr2r( rightHRIRReal_HOA3[i][j], HrtfFastConv->rightHRIRReal_HOA3[i][j], BINAURAL_NTAPS ); + mvr2r( rightHRIRImag_HOA3[i][j], HrtfFastConv->rightHRIRImag_HOA3[i][j], BINAURAL_NTAPS ); + } + } + else if ( output_config == AUDIO_CONFIG_HOA2 ) + { + for ( j = 0; j < 9; j++ ) + { + mvr2r( leftHRIRReal_HOA2[i][j], HrtfFastConv->leftHRIRReal_HOA2[i][j], BINAURAL_NTAPS ); + mvr2r( leftHRIRImag_HOA2[i][j], HrtfFastConv->leftHRIRImag_HOA2[i][j], BINAURAL_NTAPS ); + mvr2r( rightHRIRReal_HOA2[i][j], HrtfFastConv->rightHRIRReal_HOA2[i][j], BINAURAL_NTAPS ); + mvr2r( rightHRIRImag_HOA2[i][j], HrtfFastConv->rightHRIRImag_HOA2[i][j], BINAURAL_NTAPS ); + } + } + else if ( output_config == AUDIO_CONFIG_FOA ) + { + + for ( j = 0; j < 4; j++ ) + { + mvr2r( leftHRIRReal_FOA[i][j], HrtfFastConv->leftHRIRReal_FOA[i][j], BINAURAL_NTAPS ); + mvr2r( leftHRIRImag_FOA[i][j], HrtfFastConv->leftHRIRImag_FOA[i][j], BINAURAL_NTAPS ); + mvr2r( rightHRIRReal_FOA[i][j], HrtfFastConv->rightHRIRReal_FOA[i][j], BINAURAL_NTAPS ); + mvr2r( rightHRIRImag_FOA[i][j], HrtfFastConv->rightHRIRImag_FOA[i][j], BINAURAL_NTAPS ); + } + } +#else for ( j = 0; j < HRTF_SH_CHANNELS; j++ ) { mvr2r( leftHRIRReal_HOA3[i][j], HrtfFastConv->leftHRIRReal_HOA3[i][j], BINAURAL_NTAPS ); @@ -450,8 +719,8 @@ static ivas_error ivas_binaural_hrtf_open( mvr2r( rightHRIRReal_FOA[i][j], HrtfFastConv->rightHRIRReal_FOA[i][j], BINAURAL_NTAPS ); mvr2r( rightHRIRImag_FOA[i][j], HrtfFastConv->rightHRIRImag_FOA[i][j], BINAURAL_NTAPS ); } +#endif } - mvr2r( fastconvReverberationTimes, HrtfFastConv->fastconvReverberationTimes, CLDFB_NO_CHANNELS_MAX ); mvr2r( fastconvReverberationEneCorrections, HrtfFastConv->fastconvReverberationEneCorrections, CLDFB_NO_CHANNELS_MAX ); @@ -648,7 +917,11 @@ ivas_error ivas_binRenderer_open( } /* Load HRTF tables */ +#ifdef FIX_1720_HRTF_FASTCONV + ivas_binaural_hrtf_open( &st_ivas->hHrtfFastConv, st_ivas->hIntSetup.output_config ); +#else ivas_binaural_hrtf_open( &st_ivas->hHrtfFastConv ); +#endif if ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM && ( st_ivas->hIntSetup.is_loudspeaker_setup == 0 ) ) { @@ -893,6 +1166,124 @@ void ivas_binRenderer_close( return; } +#ifdef FIX_1720_HRTF_FASTCONV +/*------------------------------------------------------------------------- + * ivas_binaural_hrtf_close() + * + * Close fastconv binaural renderer hrtf memories + *------------------------------------------------------------------------*/ + +void ivas_binaural_hrtf_close( + HRTFS_FASTCONV_HANDLE *hHrtfFastConv /* i : fastconv HRTF handle */ +) +{ + int16_t i, j; + if ( hHrtfFastConv == NULL || *hHrtfFastConv == NULL ) + { + return; + } + if ( ( *hHrtfFastConv )->leftHRIRReal_HOA3 != NULL && ( *hHrtfFastConv )->leftHRIRImag_HOA3 != NULL && ( *hHrtfFastConv )->rightHRIRReal_HOA3 != NULL && ( *hHrtfFastConv )->rightHRIRImag_HOA3 != NULL ) + { + for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) + { + for ( j = 0; j < HRTF_SH_CHANNELS; j++ ) + { + free( ( *hHrtfFastConv )->leftHRIRReal_HOA3[i][j] ); + ( *hHrtfFastConv )->leftHRIRReal_HOA3[i][j] = NULL; + free( ( *hHrtfFastConv )->leftHRIRImag_HOA3[i][j] ); + ( *hHrtfFastConv )->leftHRIRImag_HOA3[i][j] = NULL; + free( ( *hHrtfFastConv )->rightHRIRReal_HOA3[i][j] ); + ( *hHrtfFastConv )->rightHRIRReal_HOA3[i][j] = NULL; + free( ( *hHrtfFastConv )->rightHRIRImag_HOA3[i][j] ); + ( *hHrtfFastConv )->rightHRIRImag_HOA3[i][j] = NULL; + } + free( ( *hHrtfFastConv )->leftHRIRReal_HOA3[i] ); + ( *hHrtfFastConv )->leftHRIRReal_HOA3[i] = NULL; + free( ( *hHrtfFastConv )->leftHRIRImag_HOA3[i] ); + ( *hHrtfFastConv )->leftHRIRImag_HOA3[i] = NULL; + free( ( *hHrtfFastConv )->rightHRIRReal_HOA3[i] ); + ( *hHrtfFastConv )->rightHRIRReal_HOA3[i] = NULL; + free( ( *hHrtfFastConv )->rightHRIRImag_HOA3[i] ); + ( *hHrtfFastConv )->rightHRIRImag_HOA3[i] = NULL; + } + free( ( *hHrtfFastConv )->leftHRIRReal_HOA3 ); + ( *hHrtfFastConv )->leftHRIRReal_HOA3 = NULL; + free( ( *hHrtfFastConv )->leftHRIRImag_HOA3 ); + ( *hHrtfFastConv )->leftHRIRImag_HOA3 = NULL; + free( ( *hHrtfFastConv )->rightHRIRReal_HOA3 ); + ( *hHrtfFastConv )->rightHRIRReal_HOA3 = NULL; + free( ( *hHrtfFastConv )->rightHRIRImag_HOA3 ); + ( *hHrtfFastConv )->rightHRIRImag_HOA3 = NULL; + } + else if ( ( *hHrtfFastConv )->leftHRIRReal_HOA2 != NULL && ( *hHrtfFastConv )->leftHRIRImag_HOA2 != NULL && ( *hHrtfFastConv )->rightHRIRReal_HOA2 != NULL && ( *hHrtfFastConv )->rightHRIRImag_HOA2 != NULL ) + { + for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) + { + for ( j = 0; j < HRTF_SH_CHANNELS; j++ ) + { + free( ( *hHrtfFastConv )->leftHRIRReal_HOA2[i][j] ); + ( *hHrtfFastConv )->leftHRIRReal_HOA2[i][j] = NULL; + free( ( *hHrtfFastConv )->leftHRIRImag_HOA2[i][j] ); + ( *hHrtfFastConv )->leftHRIRImag_HOA2[i][j] = NULL; + free( ( *hHrtfFastConv )->rightHRIRReal_HOA2[i][j] ); + ( *hHrtfFastConv )->rightHRIRReal_HOA2[i][j] = NULL; + free( ( *hHrtfFastConv )->rightHRIRImag_HOA2[i][j] ); + ( *hHrtfFastConv )->rightHRIRImag_HOA2[i][j] = NULL; + } + free( ( *hHrtfFastConv )->leftHRIRReal_HOA2[i] ); + ( *hHrtfFastConv )->leftHRIRReal_HOA2[i] = NULL; + free( ( *hHrtfFastConv )->leftHRIRImag_HOA2[i] ); + ( *hHrtfFastConv )->leftHRIRImag_HOA2[i] = NULL; + free( ( *hHrtfFastConv )->rightHRIRReal_HOA2[i] ); + ( *hHrtfFastConv )->rightHRIRReal_HOA2[i] = NULL; + free( ( *hHrtfFastConv )->rightHRIRImag_HOA2[i] ); + ( *hHrtfFastConv )->rightHRIRImag_HOA2[i] = NULL; + } + free( ( *hHrtfFastConv )->leftHRIRReal_HOA2 ); + ( *hHrtfFastConv )->leftHRIRReal_HOA2 = NULL; + free( ( *hHrtfFastConv )->leftHRIRImag_HOA2 ); + ( *hHrtfFastConv )->leftHRIRImag_HOA2 = NULL; + free( ( *hHrtfFastConv )->rightHRIRReal_HOA2 ); + ( *hHrtfFastConv )->rightHRIRReal_HOA2 = NULL; + free( ( *hHrtfFastConv )->rightHRIRImag_HOA2 ); + ( *hHrtfFastConv )->rightHRIRImag_HOA2 = NULL; + } + else if ( ( *hHrtfFastConv )->leftHRIRReal_FOA != NULL && ( *hHrtfFastConv )->leftHRIRImag_FOA != NULL && ( *hHrtfFastConv )->rightHRIRReal_FOA != NULL && ( *hHrtfFastConv )->rightHRIRImag_FOA != NULL ) + { + for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) + { + for ( j = 0; j < HRTF_SH_CHANNELS; j++ ) + { + free( ( *hHrtfFastConv )->leftHRIRReal_FOA[i][j] ); + ( *hHrtfFastConv )->leftHRIRReal_FOA[i][j] = NULL; + free( ( *hHrtfFastConv )->leftHRIRImag_FOA[i][j] ); + ( *hHrtfFastConv )->leftHRIRImag_FOA[i][j] = NULL; + free( ( *hHrtfFastConv )->rightHRIRReal_FOA[i][j] ); + ( *hHrtfFastConv )->rightHRIRReal_FOA[i][j] = NULL; + free( ( *hHrtfFastConv )->rightHRIRImag_FOA[i][j] ); + ( *hHrtfFastConv )->rightHRIRImag_FOA[i][j] = NULL; + } + free( ( *hHrtfFastConv )->leftHRIRReal_FOA[i] ); + ( *hHrtfFastConv )->leftHRIRReal_FOA[i] = NULL; + free( ( *hHrtfFastConv )->leftHRIRImag_FOA[i] ); + ( *hHrtfFastConv )->leftHRIRImag_FOA[i] = NULL; + free( ( *hHrtfFastConv )->rightHRIRReal_FOA[i] ); + ( *hHrtfFastConv )->rightHRIRReal_FOA[i] = NULL; + free( ( *hHrtfFastConv )->rightHRIRImag_FOA[i] ); + ( *hHrtfFastConv )->rightHRIRImag_FOA[i] = NULL; + } + free( ( *hHrtfFastConv )->leftHRIRReal_FOA ); + ( *hHrtfFastConv )->leftHRIRReal_FOA = NULL; + free( ( *hHrtfFastConv )->leftHRIRImag_FOA ); + ( *hHrtfFastConv )->leftHRIRImag_FOA = NULL; + free( ( *hHrtfFastConv )->rightHRIRReal_FOA ); + ( *hHrtfFastConv )->rightHRIRReal_FOA = NULL; + free( ( *hHrtfFastConv )->rightHRIRImag_FOA ); + ( *hHrtfFastConv )->rightHRIRImag_FOA = NULL; + } + return; +} +#endif /*-------------------------------------------------------------------------* * ivas_binaural_add_LFE() diff --git a/lib_dec/ivas_init_dec.c b/lib_dec/ivas_init_dec.c index 2294203053..0e17432233 100644 --- a/lib_dec/ivas_init_dec.c +++ b/lib_dec/ivas_init_dec.c @@ -661,7 +661,6 @@ ivas_error ivas_init_decoder_front( { return error; } - if ( ( error = ivas_HRTF_parambin_binary_open( &st_ivas->hHrtfParambin ) ) != IVAS_ERR_OK ) { return error; @@ -1874,7 +1873,9 @@ void ivas_destroy_dec( /* CRend binaural renderer handle */ ivas_HRTF_CRend_binary_close( &st_ivas->hSetOfHRTF ); - +#ifdef FIX_1720_HRTF_FASTCONV + ivas_binaural_hrtf_close( &st_ivas->hHrtfFastConv ); +#endif /* Fastconv HRTF filters */ ivas_HRTF_fastconv_binary_close( &st_ivas->hHrtfFastConv ); diff --git a/lib_rend/ivas_stat_rend.h b/lib_rend/ivas_stat_rend.h index c763630325..f192ccee0c 100644 --- a/lib_rend/ivas_stat_rend.h +++ b/lib_rend/ivas_stat_rend.h @@ -756,21 +756,39 @@ typedef struct ivas_hrtfs_fastconv_struct float rightHRIRImag[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTAPS]; float FASTCONV_HOA3_latency_s; + float FASTCONV_HOA2_latency_s; + float FASTCONV_FOA_latency_s; +#ifdef FIX_1720_HRTF_FASTCONV + float ***leftHRIRReal_HOA3; + float ***leftHRIRImag_HOA3; + float ***rightHRIRReal_HOA3; + float ***rightHRIRImag_HOA3; + + float ***leftHRIRReal_HOA2; + float ***leftHRIRImag_HOA2; + float ***rightHRIRReal_HOA2; + float ***rightHRIRImag_HOA2; + + float ***leftHRIRReal_FOA; + float ***leftHRIRImag_FOA; + float ***rightHRIRReal_FOA; + float ***rightHRIRImag_FOA; +#else float leftHRIRReal_HOA3[BINAURAL_CONVBANDS][HRTF_SH_CHANNELS][BINAURAL_NTAPS]; float leftHRIRImag_HOA3[BINAURAL_CONVBANDS][HRTF_SH_CHANNELS][BINAURAL_NTAPS]; float rightHRIRReal_HOA3[BINAURAL_CONVBANDS][HRTF_SH_CHANNELS][BINAURAL_NTAPS]; float rightHRIRImag_HOA3[BINAURAL_CONVBANDS][HRTF_SH_CHANNELS][BINAURAL_NTAPS]; - float FASTCONV_HOA2_latency_s; float leftHRIRReal_HOA2[BINAURAL_CONVBANDS][9][BINAURAL_NTAPS]; float leftHRIRImag_HOA2[BINAURAL_CONVBANDS][9][BINAURAL_NTAPS]; float rightHRIRReal_HOA2[BINAURAL_CONVBANDS][9][BINAURAL_NTAPS]; float rightHRIRImag_HOA2[BINAURAL_CONVBANDS][9][BINAURAL_NTAPS]; - float FASTCONV_FOA_latency_s; + float leftHRIRReal_FOA[BINAURAL_CONVBANDS][4][BINAURAL_NTAPS]; float leftHRIRImag_FOA[BINAURAL_CONVBANDS][4][BINAURAL_NTAPS]; float rightHRIRReal_FOA[BINAURAL_CONVBANDS][4][BINAURAL_NTAPS]; float rightHRIRImag_FOA[BINAURAL_CONVBANDS][4][BINAURAL_NTAPS]; +#endif float FASTCONV_BRIR_latency_s; float leftBRIRReal[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTAPS_MAX]; float leftBRIRImag[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTAPS_MAX]; diff --git a/lib_util/hrtf_file_reader.c b/lib_util/hrtf_file_reader.c index e2181ca6e1..3e078c96f5 100644 --- a/lib_util/hrtf_file_reader.c +++ b/lib_util/hrtf_file_reader.c @@ -34,7 +34,9 @@ #include #include "prot.h" #include "ivas_prot_rend.h" - +#ifdef FIX_1720_HRTF_FASTCONV +#include "ivas_prot.h" +#endif /*---------------------------------------------------------------------* * Local structures @@ -1027,6 +1029,9 @@ static ivas_error create_fastconv_HRTF_from_rawdata( { int16_t i, j; char *hrtf_data_rptr; +#ifdef FIX_1720_HRTF_FASTCONV + ivas_allocate_binaural_hrtf( *hHRTF, 0, input_cfg ); +#endif // if ( hHRTF == NULL ) // { @@ -1173,7 +1178,11 @@ static ivas_error create_fastconv_HRTF_from_rawdata( for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) { +#ifdef FIX_1720_HRTF_FASTCONV + for ( j = 0; j < 9; j++ ) +#else for ( j = 0; j < HRTF_SH_CHANNELS; j++ ) +#endif { memcpy( ( *hHRTF )->leftHRIRReal_HOA2[i][j], hrtf_data_rptr, BINAURAL_NTAPS * sizeof( float ) ); hrtf_data_rptr += BINAURAL_NTAPS * sizeof( float ); @@ -1181,7 +1190,11 @@ static ivas_error create_fastconv_HRTF_from_rawdata( } for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) { +#ifdef FIX_1720_HRTF_FASTCONV + for ( j = 0; j < 9; j++ ) +#else for ( j = 0; j < HRTF_SH_CHANNELS; j++ ) +#endif { memcpy( ( *hHRTF )->leftHRIRImag_HOA2[i][j], hrtf_data_rptr, BINAURAL_NTAPS * sizeof( float ) ); hrtf_data_rptr += BINAURAL_NTAPS * sizeof( float ); @@ -1189,7 +1202,11 @@ static ivas_error create_fastconv_HRTF_from_rawdata( } for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) { +#ifdef FIX_1720_HRTF_FASTCONV + for ( j = 0; j < 9; j++ ) +#else for ( j = 0; j < HRTF_SH_CHANNELS; j++ ) +#endif { memcpy( ( *hHRTF )->rightHRIRReal_HOA2[i][j], hrtf_data_rptr, BINAURAL_NTAPS * sizeof( float ) ); hrtf_data_rptr += BINAURAL_NTAPS * sizeof( float ); @@ -1197,7 +1214,11 @@ static ivas_error create_fastconv_HRTF_from_rawdata( } for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) { +#ifdef FIX_1720_HRTF_FASTCONV + for ( j = 0; j < 9; j++ ) +#else for ( j = 0; j < HRTF_SH_CHANNELS; j++ ) +#endif { memcpy( ( *hHRTF )->rightHRIRImag_HOA2[i][j], hrtf_data_rptr, BINAURAL_NTAPS * sizeof( float ) ); hrtf_data_rptr += BINAURAL_NTAPS * sizeof( float ); @@ -1224,7 +1245,11 @@ static ivas_error create_fastconv_HRTF_from_rawdata( for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) { +#ifdef FIX_1720_HRTF_FASTCONV + for ( j = 0; j < 4; j++ ) +#else for ( j = 0; j < HRTF_SH_CHANNELS; j++ ) +#endif { memcpy( ( *hHRTF )->leftHRIRReal_FOA[i][j], hrtf_data_rptr, BINAURAL_NTAPS * sizeof( float ) ); hrtf_data_rptr += BINAURAL_NTAPS * sizeof( float ); @@ -1232,7 +1257,11 @@ static ivas_error create_fastconv_HRTF_from_rawdata( } for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) { +#ifdef FIX_1720_HRTF_FASTCONV + for ( j = 0; j < 4; j++ ) +#else for ( j = 0; j < HRTF_SH_CHANNELS; j++ ) +#endif { memcpy( ( *hHRTF )->leftHRIRImag_FOA[i][j], hrtf_data_rptr, BINAURAL_NTAPS * sizeof( float ) ); hrtf_data_rptr += BINAURAL_NTAPS * sizeof( float ); @@ -1240,7 +1269,11 @@ static ivas_error create_fastconv_HRTF_from_rawdata( } for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) { +#ifdef FIX_1720_HRTF_FASTCONV + for ( j = 0; j < 4; j++ ) +#else for ( j = 0; j < HRTF_SH_CHANNELS; j++ ) +#endif { memcpy( ( *hHRTF )->rightHRIRReal_FOA[i][j], hrtf_data_rptr, BINAURAL_NTAPS * sizeof( float ) ); hrtf_data_rptr += BINAURAL_NTAPS * sizeof( float ); @@ -1248,7 +1281,11 @@ static ivas_error create_fastconv_HRTF_from_rawdata( } for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) { +#ifdef FIX_1720_HRTF_FASTCONV + for ( j = 0; j < 4; j++ ) +#else for ( j = 0; j < HRTF_SH_CHANNELS; j++ ) +#endif { memcpy( ( *hHRTF )->rightHRIRImag_FOA[i][j], hrtf_data_rptr, BINAURAL_NTAPS * sizeof( float ) ); hrtf_data_rptr += BINAURAL_NTAPS * sizeof( float ); @@ -1385,7 +1422,6 @@ ivas_error load_fastconv_HRTF_from_binary( free( hrtf_data ); return IVAS_ERROR( IVAS_ERR_FAILED_FILE_READ, "Error in HRTF file reading" ); } - /* Create the HRTF reading the raw data from the binary file */ if ( ( create_fastconv_HRTF_from_rawdata( &hHrtfFastConv, hrtf_data, hrtf_header.rend_type, hrtf_header.input_cfg ) ) != IVAS_ERR_OK ) { -- GitLab From 19ccc7cfd5fb0770a55c670770fc008179b7bb2e Mon Sep 17 00:00:00 2001 From: Vidhya V P <100825@ittiam.com> Date: Mon, 17 Jul 2023 09:06:24 +0530 Subject: [PATCH 02/14] Minor fix --- lib_dec/ivas_binRenderer_internal.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib_dec/ivas_binRenderer_internal.c b/lib_dec/ivas_binRenderer_internal.c index 837f2a4d4f..408976a63b 100644 --- a/lib_dec/ivas_binRenderer_internal.c +++ b/lib_dec/ivas_binRenderer_internal.c @@ -1219,7 +1219,7 @@ void ivas_binaural_hrtf_close( { for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) { - for ( j = 0; j < HRTF_SH_CHANNELS; j++ ) + for ( j = 0; j < 9; j++ ) { free( ( *hHrtfFastConv )->leftHRIRReal_HOA2[i][j] ); ( *hHrtfFastConv )->leftHRIRReal_HOA2[i][j] = NULL; @@ -1252,7 +1252,7 @@ void ivas_binaural_hrtf_close( { for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) { - for ( j = 0; j < HRTF_SH_CHANNELS; j++ ) + for ( j = 0; j < 4; j++ ) { free( ( *hHrtfFastConv )->leftHRIRReal_FOA[i][j] ); ( *hHrtfFastConv )->leftHRIRReal_FOA[i][j] = NULL; -- GitLab From 4125b4e2278bd2213b3b76404b44feb2b3265238 Mon Sep 17 00:00:00 2001 From: Shikha Shetgeri <100861@ittiam.com> Date: Tue, 18 Jul 2023 15:39:43 +0530 Subject: [PATCH 03/14] added changes for HRIR and BRIR --- lib_com/ivas_prot.h | 1 + lib_dec/ivas_binRenderer_internal.c | 277 +++++++++++++++++++++++++--- lib_rend/ivas_stat_rend.h | 30 ++- lib_util/hrtf_file_reader.c | 129 +++++++++---- 4 files changed, 367 insertions(+), 70 deletions(-) diff --git a/lib_com/ivas_prot.h b/lib_com/ivas_prot.h index 9b6c592ee7..b888ab42e2 100644 --- a/lib_com/ivas_prot.h +++ b/lib_com/ivas_prot.h @@ -5153,6 +5153,7 @@ ivas_error ivas_allocate_binaural_hrtf( HRTFS_FASTCONV *HrtfFastConv, /* i : fastconv HRTF handle */ AUDIO_CONFIG output_config, /* i : ouput audio config */ BINAURAL_INPUT_AUDIO_CONFIG output_config_bin /* i : binaural input audio config */ + , RENDERER_TYPE renderer_type ); #endif diff --git a/lib_dec/ivas_binRenderer_internal.c b/lib_dec/ivas_binRenderer_internal.c index 408976a63b..a93a315d53 100644 --- a/lib_dec/ivas_binRenderer_internal.c +++ b/lib_dec/ivas_binRenderer_internal.c @@ -394,11 +394,12 @@ static ivas_error ivas_binRenderer_convModuleOpen( ivas_error ivas_allocate_binaural_hrtf( HRTFS_FASTCONV *HrtfFastConv, AUDIO_CONFIG output_config, - BINAURAL_INPUT_AUDIO_CONFIG output_config_bin ) + BINAURAL_INPUT_AUDIO_CONFIG input_config, + RENDERER_TYPE renderer_type ) { int16_t i, j; /*malloc for HOA3, HOA2, FOA*/ - if ( output_config == AUDIO_CONFIG_HOA3 || output_config_bin == BINAURAL_INPUT_AUDIO_CONFIG_HOA3 ) + if ( output_config == AUDIO_CONFIG_HOA3 || input_config == BINAURAL_INPUT_AUDIO_CONFIG_HOA3 ) { if ( ( HrtfFastConv->leftHRIRReal_HOA3 != NULL ) && ( HrtfFastConv->leftHRIRImag_HOA3 != NULL ) && ( HrtfFastConv->rightHRIRReal_HOA3 != NULL ) && ( HrtfFastConv->rightHRIRImag_HOA3 != NULL ) ) { @@ -462,7 +463,7 @@ ivas_error ivas_allocate_binaural_hrtf( } } } - else if ( output_config == AUDIO_CONFIG_HOA2 || output_config_bin == BINAURAL_INPUT_AUDIO_CONFIG_HOA2 ) + else if ( output_config == AUDIO_CONFIG_HOA2 || input_config == BINAURAL_INPUT_AUDIO_CONFIG_HOA2 ) { if ( ( HrtfFastConv->leftHRIRReal_HOA2 != NULL ) && ( HrtfFastConv->leftHRIRImag_HOA2 != NULL ) && ( HrtfFastConv->rightHRIRReal_HOA2 != NULL ) && ( HrtfFastConv->rightHRIRImag_HOA2 != NULL ) ) { @@ -526,7 +527,7 @@ ivas_error ivas_allocate_binaural_hrtf( } } } - else if ( output_config == AUDIO_CONFIG_FOA || output_config_bin == BINAURAL_INPUT_AUDIO_CONFIG_FOA ) + else if ( output_config == AUDIO_CONFIG_FOA || input_config == BINAURAL_INPUT_AUDIO_CONFIG_FOA ) { if ( ( HrtfFastConv->leftHRIRReal_FOA != NULL ) && ( HrtfFastConv->leftHRIRImag_FOA != NULL ) && ( HrtfFastConv->rightHRIRReal_FOA != NULL ) && ( HrtfFastConv->rightHRIRImag_FOA != NULL ) ) { @@ -590,6 +591,134 @@ ivas_error ivas_allocate_binaural_hrtf( } } } + if ( renderer_type == RENDERER_BINAURAL_FASTCONV || input_config == BINAURAL_INPUT_AUDIO_CONFIG_COMBINED ) + { + if ( ( HrtfFastConv->leftHRIRReal != NULL ) && ( HrtfFastConv->leftHRIRImag != NULL ) && ( HrtfFastConv->rightHRIRReal != NULL ) && ( HrtfFastConv->rightHRIRImag != NULL ) ) + { + return IVAS_ERR_OK; + } + else + { + if ( ( HrtfFastConv->leftHRIRReal = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRReal" ); + } + if ( ( HrtfFastConv->leftHRIRImag = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRImag" ); + } + if ( ( HrtfFastConv->rightHRIRReal = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRReal" ); + } + if ( ( HrtfFastConv->rightHRIRImag = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRImag" ); + } + for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) + { + if ( ( HrtfFastConv->leftHRIRReal[i] = (float **) malloc( HRTF_LS_CHANNELS * sizeof( float * ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRReal" ); + } + if ( ( HrtfFastConv->leftHRIRImag[i] = (float **) malloc( HRTF_LS_CHANNELS * sizeof( float * ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRImag" ); + } + if ( ( HrtfFastConv->rightHRIRReal[i] = (float **) malloc( HRTF_LS_CHANNELS * sizeof( float * ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRImag" ); + } + if ( ( HrtfFastConv->rightHRIRImag[i] = (float **) malloc( HRTF_LS_CHANNELS * sizeof( float * ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRImag" ); + } + for ( j = 0; j < HRTF_LS_CHANNELS; j++ ) + { + if ( ( HrtfFastConv->leftHRIRReal[i][j] = (float *) malloc( BINAURAL_NTAPS * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRReal" ); + } + if ( ( HrtfFastConv->leftHRIRImag[i][j] = (float *) malloc( BINAURAL_NTAPS * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRImag" ); + } + if ( ( HrtfFastConv->rightHRIRReal[i][j] = (float *) malloc( BINAURAL_NTAPS * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRReal" ); + } + if ( ( HrtfFastConv->rightHRIRImag[i][j] = (float *) malloc( BINAURAL_NTAPS * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRImag" ); + } + } + } + } + } + if ( renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM || input_config == BINAURAL_INPUT_AUDIO_CONFIG_COMBINED ) + { + if ( ( HrtfFastConv->leftBRIRReal != NULL ) && ( HrtfFastConv->leftBRIRImag != NULL ) && ( HrtfFastConv->rightBRIRReal != NULL ) && ( HrtfFastConv->rightBRIRImag != NULL ) ) + { + return IVAS_ERR_OK; + } + else + { + if ( ( HrtfFastConv->leftBRIRReal = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRReal" ); + } + if ( ( HrtfFastConv->leftBRIRImag = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRImag" ); + } + if ( ( HrtfFastConv->rightBRIRReal = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRReal" ); + } + if ( ( HrtfFastConv->rightBRIRImag = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRImag" ); + } + for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) + { + if ( ( HrtfFastConv->leftBRIRReal[i] = (float **) malloc( HRTF_LS_CHANNELS * sizeof( float * ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRReal" ); + } + if ( ( HrtfFastConv->leftBRIRImag[i] = (float **) malloc( HRTF_LS_CHANNELS * sizeof( float * ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRImag" ); + } + if ( ( HrtfFastConv->rightBRIRReal[i] = (float **) malloc( HRTF_LS_CHANNELS * sizeof( float * ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRImag" ); + } + if ( ( HrtfFastConv->rightBRIRImag[i] = (float **) malloc( HRTF_LS_CHANNELS * sizeof( float * ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRImag" ); + } + for ( j = 0; j < HRTF_LS_CHANNELS; j++ ) + { + if ( ( HrtfFastConv->leftBRIRReal[i][j] = (float *) malloc( BINAURAL_NTAPS_MAX * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRReal" ); + } + if ( ( HrtfFastConv->leftBRIRImag[i][j] = (float *) malloc( BINAURAL_NTAPS_MAX * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRImag" ); + } + if ( ( HrtfFastConv->rightBRIRReal[i][j] = (float *) malloc( BINAURAL_NTAPS_MAX * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRReal" ); + } + if ( ( HrtfFastConv->rightBRIRImag[i][j] = (float *) malloc( BINAURAL_NTAPS_MAX * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRImag" ); + } + } + } + } + } return IVAS_ERR_OK; } #endif @@ -604,7 +733,8 @@ static ivas_error ivas_binaural_hrtf_open( HRTFS_FASTCONV_HANDLE *hHrtfFastConv #ifdef FIX_1720_HRTF_FASTCONV , - AUDIO_CONFIG output_config + AUDIO_CONFIG output_config, + RENDERER_TYPE renderer_type #endif ) { @@ -627,21 +757,27 @@ static ivas_error ivas_binaural_hrtf_open( #ifdef FIX_1720_HRTF_FASTCONV memset( HrtfFastConv, 0x00, sizeof( HRTFS_FASTCONV ) ); - HrtfFastConv->FASTCONV_HRIR_latency_s = FASTCONV_HRIR_latency_s; + if ( output_config == AUDIO_CONFIG_BINAURAL || renderer_type == RENDERER_BINAURAL_FASTCONV ) + { + HrtfFastConv->FASTCONV_HRIR_latency_s = FASTCONV_HRIR_latency_s; + } if ( output_config == AUDIO_CONFIG_HOA2 ) { HrtfFastConv->FASTCONV_HOA2_latency_s = FASTCONV_HOA2_latency_s; } - else if ( output_config == AUDIO_CONFIG_HOA3 ) + if ( output_config == AUDIO_CONFIG_HOA3 ) { HrtfFastConv->FASTCONV_HOA3_latency_s = FASTCONV_HOA3_latency_s; } - else if ( output_config == AUDIO_CONFIG_FOA ) + if ( output_config == AUDIO_CONFIG_FOA ) { HrtfFastConv->FASTCONV_FOA_latency_s = FASTCONV_FOA_latency_s; } - HrtfFastConv->FASTCONV_BRIR_latency_s = FASTCONV_BRIR_latency_s; - ivas_allocate_binaural_hrtf( HrtfFastConv, output_config, 0 ); + if ( output_config == AUDIO_CONFIG_BINAURAL || renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) + { + HrtfFastConv->FASTCONV_BRIR_latency_s = FASTCONV_BRIR_latency_s; + } + ivas_allocate_binaural_hrtf( HrtfFastConv, output_config, HrtfFastConv->input_cfg_var, renderer_type ); #else HrtfFastConv->FASTCONV_HRIR_latency_s = FASTCONV_HRIR_latency_s; HrtfFastConv->FASTCONV_HOA3_latency_s = FASTCONV_HOA3_latency_s; @@ -651,20 +787,28 @@ static ivas_error ivas_binaural_hrtf_open( #endif for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) { - for ( j = 0; j < HRTF_LS_CHANNELS; j++ ) +#ifdef FIX_1720_HRTF_FASTCONV + if ( renderer_type == RENDERER_BINAURAL_FASTCONV ) { - mvr2r( leftHRIRReal[i][j], HrtfFastConv->leftHRIRReal[i][j], BINAURAL_NTAPS ); - mvr2r( leftHRIRImag[i][j], HrtfFastConv->leftHRIRImag[i][j], BINAURAL_NTAPS ); - mvr2r( rightHRIRReal[i][j], HrtfFastConv->rightHRIRReal[i][j], BINAURAL_NTAPS ); - mvr2r( rightHRIRImag[i][j], HrtfFastConv->rightHRIRImag[i][j], BINAURAL_NTAPS ); - - mvr2r( leftBRIRReal[i][j], HrtfFastConv->leftBRIRReal[i][j], BINAURAL_NTAPS_MAX ); - mvr2r( leftBRIRImag[i][j], HrtfFastConv->leftBRIRImag[i][j], BINAURAL_NTAPS_MAX ); - mvr2r( rightBRIRReal[i][j], HrtfFastConv->rightBRIRReal[i][j], BINAURAL_NTAPS_MAX ); - mvr2r( rightBRIRImag[i][j], HrtfFastConv->rightBRIRImag[i][j], BINAURAL_NTAPS_MAX ); + for ( j = 0; j < HRTF_LS_CHANNELS; j++ ) + { + mvr2r( leftHRIRReal[i][j], HrtfFastConv->leftHRIRReal[i][j], BINAURAL_NTAPS ); + mvr2r( leftHRIRImag[i][j], HrtfFastConv->leftHRIRImag[i][j], BINAURAL_NTAPS ); + mvr2r( rightHRIRReal[i][j], HrtfFastConv->rightHRIRReal[i][j], BINAURAL_NTAPS ); + mvr2r( rightHRIRImag[i][j], HrtfFastConv->rightHRIRImag[i][j], BINAURAL_NTAPS ); + } + } + if ( renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) + { + for ( j = 0; j < HRTF_LS_CHANNELS; j++ ) + { + mvr2r( leftBRIRReal[i][j], HrtfFastConv->leftBRIRReal[i][j], BINAURAL_NTAPS_MAX ); + mvr2r( leftBRIRImag[i][j], HrtfFastConv->leftBRIRImag[i][j], BINAURAL_NTAPS_MAX ); + mvr2r( rightBRIRReal[i][j], HrtfFastConv->rightBRIRReal[i][j], BINAURAL_NTAPS_MAX ); + mvr2r( rightBRIRImag[i][j], HrtfFastConv->rightBRIRImag[i][j], BINAURAL_NTAPS_MAX ); + } } -#ifdef FIX_1720_HRTF_FASTCONV if ( output_config == AUDIO_CONFIG_HOA3 ) { for ( j = 0; j < HRTF_SH_CHANNELS; j++ ) @@ -675,9 +819,8 @@ static ivas_error ivas_binaural_hrtf_open( mvr2r( rightHRIRImag_HOA3[i][j], HrtfFastConv->rightHRIRImag_HOA3[i][j], BINAURAL_NTAPS ); } } - else if ( output_config == AUDIO_CONFIG_HOA2 ) + if ( output_config == AUDIO_CONFIG_HOA2 ) { - for ( j = 0; j < 9; j++ ) { mvr2r( leftHRIRReal_HOA2[i][j], HrtfFastConv->leftHRIRReal_HOA2[i][j], BINAURAL_NTAPS ); @@ -686,7 +829,7 @@ static ivas_error ivas_binaural_hrtf_open( mvr2r( rightHRIRImag_HOA2[i][j], HrtfFastConv->rightHRIRImag_HOA2[i][j], BINAURAL_NTAPS ); } } - else if ( output_config == AUDIO_CONFIG_FOA ) + if ( output_config == AUDIO_CONFIG_FOA ) { for ( j = 0; j < 4; j++ ) @@ -698,6 +841,19 @@ static ivas_error ivas_binaural_hrtf_open( } } #else + for ( j = 0; j < HRTF_LS_CHANNELS; j++ ) + { + mvr2r( leftHRIRReal[i][j], HrtfFastConv->leftHRIRReal[i][j], BINAURAL_NTAPS ); + mvr2r( leftHRIRImag[i][j], HrtfFastConv->leftHRIRImag[i][j], BINAURAL_NTAPS ); + mvr2r( rightHRIRReal[i][j], HrtfFastConv->rightHRIRReal[i][j], BINAURAL_NTAPS ); + mvr2r( rightHRIRImag[i][j], HrtfFastConv->rightHRIRImag[i][j], BINAURAL_NTAPS ); + + + mvr2r( leftBRIRReal[i][j], HrtfFastConv->leftBRIRReal[i][j], BINAURAL_NTAPS_MAX ); + mvr2r( leftBRIRImag[i][j], HrtfFastConv->leftBRIRImag[i][j], BINAURAL_NTAPS_MAX ); + mvr2r( rightBRIRReal[i][j], HrtfFastConv->rightBRIRReal[i][j], BINAURAL_NTAPS_MAX ); + mvr2r( rightBRIRImag[i][j], HrtfFastConv->rightBRIRImag[i][j], BINAURAL_NTAPS_MAX ); + } for ( j = 0; j < HRTF_SH_CHANNELS; j++ ) { mvr2r( leftHRIRReal_HOA3[i][j], HrtfFastConv->leftHRIRReal_HOA3[i][j], BINAURAL_NTAPS ); @@ -918,7 +1074,7 @@ ivas_error ivas_binRenderer_open( /* Load HRTF tables */ #ifdef FIX_1720_HRTF_FASTCONV - ivas_binaural_hrtf_open( &st_ivas->hHrtfFastConv, st_ivas->hIntSetup.output_config ); + ivas_binaural_hrtf_open( &st_ivas->hHrtfFastConv, st_ivas->hIntSetup.output_config, st_ivas->renderer_type ); #else ivas_binaural_hrtf_open( &st_ivas->hHrtfFastConv ); #endif @@ -1182,6 +1338,72 @@ void ivas_binaural_hrtf_close( { return; } + if ( ( *hHrtfFastConv )->leftHRIRReal != NULL && ( *hHrtfFastConv )->leftHRIRImag != NULL && ( *hHrtfFastConv )->rightHRIRReal != NULL && ( *hHrtfFastConv )->rightHRIRImag != NULL ) + { + for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) + { + for ( j = 0; j < HRTF_LS_CHANNELS; j++ ) + { + free( ( *hHrtfFastConv )->leftHRIRReal[i][j] ); + ( *hHrtfFastConv )->leftHRIRReal[i][j] = NULL; + free( ( *hHrtfFastConv )->leftHRIRImag[i][j] ); + ( *hHrtfFastConv )->leftHRIRImag[i][j] = NULL; + free( ( *hHrtfFastConv )->rightHRIRReal[i][j] ); + ( *hHrtfFastConv )->rightHRIRReal[i][j] = NULL; + free( ( *hHrtfFastConv )->rightHRIRImag[i][j] ); + ( *hHrtfFastConv )->rightHRIRImag[i][j] = NULL; + } + free( ( *hHrtfFastConv )->leftHRIRReal[i] ); + ( *hHrtfFastConv )->leftHRIRReal[i] = NULL; + free( ( *hHrtfFastConv )->leftHRIRImag[i] ); + ( *hHrtfFastConv )->leftHRIRImag[i] = NULL; + free( ( *hHrtfFastConv )->rightHRIRReal[i] ); + ( *hHrtfFastConv )->rightHRIRReal[i] = NULL; + free( ( *hHrtfFastConv )->rightHRIRImag[i] ); + ( *hHrtfFastConv )->rightHRIRImag[i] = NULL; + } + free( ( *hHrtfFastConv )->leftHRIRReal ); + ( *hHrtfFastConv )->leftHRIRReal = NULL; + free( ( *hHrtfFastConv )->leftHRIRImag ); + ( *hHrtfFastConv )->leftHRIRImag = NULL; + free( ( *hHrtfFastConv )->rightHRIRReal ); + ( *hHrtfFastConv )->rightHRIRReal = NULL; + free( ( *hHrtfFastConv )->rightHRIRImag ); + ( *hHrtfFastConv )->rightHRIRImag = NULL; + } + if ( ( *hHrtfFastConv )->leftBRIRReal != NULL && ( *hHrtfFastConv )->leftBRIRImag != NULL && ( *hHrtfFastConv )->rightBRIRReal != NULL && ( *hHrtfFastConv )->rightBRIRImag != NULL ) + { + for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) + { + for ( j = 0; j < HRTF_LS_CHANNELS; j++ ) + { + free( ( *hHrtfFastConv )->leftBRIRReal[i][j] ); + ( *hHrtfFastConv )->leftBRIRReal[i][j] = NULL; + free( ( *hHrtfFastConv )->leftBRIRImag[i][j] ); + ( *hHrtfFastConv )->leftBRIRImag[i][j] = NULL; + free( ( *hHrtfFastConv )->rightBRIRReal[i][j] ); + ( *hHrtfFastConv )->rightBRIRReal[i][j] = NULL; + free( ( *hHrtfFastConv )->rightBRIRImag[i][j] ); + ( *hHrtfFastConv )->rightBRIRImag[i][j] = NULL; + } + free( ( *hHrtfFastConv )->leftBRIRReal[i] ); + ( *hHrtfFastConv )->leftBRIRReal[i] = NULL; + free( ( *hHrtfFastConv )->leftBRIRImag[i] ); + ( *hHrtfFastConv )->leftBRIRImag[i] = NULL; + free( ( *hHrtfFastConv )->rightBRIRReal[i] ); + ( *hHrtfFastConv )->rightBRIRReal[i] = NULL; + free( ( *hHrtfFastConv )->rightBRIRImag[i] ); + ( *hHrtfFastConv )->rightBRIRImag[i] = NULL; + } + free( ( *hHrtfFastConv )->leftBRIRReal ); + ( *hHrtfFastConv )->leftBRIRReal = NULL; + free( ( *hHrtfFastConv )->leftBRIRImag ); + ( *hHrtfFastConv )->leftBRIRImag = NULL; + free( ( *hHrtfFastConv )->rightBRIRReal ); + ( *hHrtfFastConv )->rightBRIRReal = NULL; + free( ( *hHrtfFastConv )->rightBRIRImag ); + ( *hHrtfFastConv )->rightBRIRImag = NULL; + } if ( ( *hHrtfFastConv )->leftHRIRReal_HOA3 != NULL && ( *hHrtfFastConv )->leftHRIRImag_HOA3 != NULL && ( *hHrtfFastConv )->rightHRIRReal_HOA3 != NULL && ( *hHrtfFastConv )->rightHRIRImag_HOA3 != NULL ) { for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) @@ -1215,7 +1437,7 @@ void ivas_binaural_hrtf_close( free( ( *hHrtfFastConv )->rightHRIRImag_HOA3 ); ( *hHrtfFastConv )->rightHRIRImag_HOA3 = NULL; } - else if ( ( *hHrtfFastConv )->leftHRIRReal_HOA2 != NULL && ( *hHrtfFastConv )->leftHRIRImag_HOA2 != NULL && ( *hHrtfFastConv )->rightHRIRReal_HOA2 != NULL && ( *hHrtfFastConv )->rightHRIRImag_HOA2 != NULL ) + if ( ( *hHrtfFastConv )->leftHRIRReal_HOA2 != NULL && ( *hHrtfFastConv )->leftHRIRImag_HOA2 != NULL && ( *hHrtfFastConv )->rightHRIRReal_HOA2 != NULL && ( *hHrtfFastConv )->rightHRIRImag_HOA2 != NULL ) { for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) { @@ -1248,7 +1470,7 @@ void ivas_binaural_hrtf_close( free( ( *hHrtfFastConv )->rightHRIRImag_HOA2 ); ( *hHrtfFastConv )->rightHRIRImag_HOA2 = NULL; } - else if ( ( *hHrtfFastConv )->leftHRIRReal_FOA != NULL && ( *hHrtfFastConv )->leftHRIRImag_FOA != NULL && ( *hHrtfFastConv )->rightHRIRReal_FOA != NULL && ( *hHrtfFastConv )->rightHRIRImag_FOA != NULL ) + if ( ( *hHrtfFastConv )->leftHRIRReal_FOA != NULL && ( *hHrtfFastConv )->leftHRIRImag_FOA != NULL && ( *hHrtfFastConv )->rightHRIRReal_FOA != NULL && ( *hHrtfFastConv )->rightHRIRImag_FOA != NULL ) { for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) { @@ -1281,7 +1503,6 @@ void ivas_binaural_hrtf_close( free( ( *hHrtfFastConv )->rightHRIRImag_FOA ); ( *hHrtfFastConv )->rightHRIRImag_FOA = NULL; } - return; } #endif diff --git a/lib_rend/ivas_stat_rend.h b/lib_rend/ivas_stat_rend.h index 47e541a00e..487b65dd75 100644 --- a/lib_rend/ivas_stat_rend.h +++ b/lib_rend/ivas_stat_rend.h @@ -758,15 +758,20 @@ typedef struct ivas_hrtfs_crend_structure typedef struct ivas_hrtfs_fastconv_struct { float FASTCONV_HRIR_latency_s; - float leftHRIRReal[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTAPS]; - float leftHRIRImag[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTAPS]; - float rightHRIRReal[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTAPS]; - float rightHRIRImag[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTAPS]; - float FASTCONV_HOA3_latency_s; float FASTCONV_HOA2_latency_s; float FASTCONV_FOA_latency_s; #ifdef FIX_1720_HRTF_FASTCONV + float ***leftHRIRReal; + float ***leftHRIRImag; + float ***rightHRIRReal; + float ***rightHRIRImag; + + float ***leftBRIRReal; + float ***leftBRIRImag; + float ***rightBRIRReal; + float ***rightBRIRImag; + float ***leftHRIRReal_HOA3; float ***leftHRIRImag_HOA3; float ***rightHRIRReal_HOA3; @@ -781,6 +786,9 @@ typedef struct ivas_hrtfs_fastconv_struct float ***leftHRIRImag_FOA; float ***rightHRIRReal_FOA; float ***rightHRIRImag_FOA; + + BINAURAL_INPUT_AUDIO_CONFIG input_cfg_var; + #else float leftHRIRReal_HOA3[BINAURAL_CONVBANDS][HRTF_SH_CHANNELS][BINAURAL_NTAPS]; float leftHRIRImag_HOA3[BINAURAL_CONVBANDS][HRTF_SH_CHANNELS][BINAURAL_NTAPS]; @@ -796,13 +804,21 @@ typedef struct ivas_hrtfs_fastconv_struct float leftHRIRImag_FOA[BINAURAL_CONVBANDS][4][BINAURAL_NTAPS]; float rightHRIRReal_FOA[BINAURAL_CONVBANDS][4][BINAURAL_NTAPS]; float rightHRIRImag_FOA[BINAURAL_CONVBANDS][4][BINAURAL_NTAPS]; -#endif - float FASTCONV_BRIR_latency_s; + float leftBRIRReal[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTAPS_MAX]; float leftBRIRImag[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTAPS_MAX]; float rightBRIRReal[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTAPS_MAX]; float rightBRIRImag[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTAPS_MAX]; + float leftHRIRReal[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTAPS]; + float leftHRIRImag[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTAPS]; + float rightHRIRReal[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTAPS]; + float rightHRIRImag[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTAPS]; +#endif + + float FASTCONV_BRIR_latency_s; + + float fastconvReverberationTimes[CLDFB_NO_CHANNELS_MAX]; float fastconvReverberationEneCorrections[CLDFB_NO_CHANNELS_MAX]; diff --git a/lib_util/hrtf_file_reader.c b/lib_util/hrtf_file_reader.c index 3e078c96f5..73fd4856bc 100644 --- a/lib_util/hrtf_file_reader.c +++ b/lib_util/hrtf_file_reader.c @@ -1000,7 +1000,6 @@ static ivas_error init_fastconv_HRTF_handle( } } - hHrtf->FASTCONV_BRIR_latency_s = 0; for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) { @@ -1030,7 +1029,8 @@ static ivas_error create_fastconv_HRTF_from_rawdata( int16_t i, j; char *hrtf_data_rptr; #ifdef FIX_1720_HRTF_FASTCONV - ivas_allocate_binaural_hrtf( *hHRTF, 0, input_cfg ); + ( *hHRTF )->input_cfg_var = input_cfg; + ivas_allocate_binaural_hrtf( *hHRTF, 0, input_cfg, rend_type ); #endif // if ( hHRTF == NULL ) @@ -1124,7 +1124,6 @@ static ivas_error create_fastconv_HRTF_from_rawdata( return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "HRTF binary file not compliant (BINAURAL_NTAPS)" ); } hrtf_data_rptr += sizeof( uint16_t ); - for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) { for ( j = 0; j < HRTF_SH_CHANNELS; j++ ) @@ -1163,8 +1162,8 @@ static ivas_error create_fastconv_HRTF_from_rawdata( /* HRIR_HOA2 */ ( *hHRTF )->FASTCONV_HOA2_latency_s = *( (float *) ( hrtf_data_rptr ) ); hrtf_data_rptr += sizeof( float ); - - if ( HRTF_SH_CHANNELS != *( (uint16_t *) ( hrtf_data_rptr ) ) ) +#ifdef FIX_1720_HRTF_FASTCONV + if ( 9 != *( (uint16_t *) ( hrtf_data_rptr ) ) ) { return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "HRTF binary file not compliant (HRTF_SH_CHANNELS)" ); } @@ -1178,11 +1177,7 @@ static ivas_error create_fastconv_HRTF_from_rawdata( for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) { -#ifdef FIX_1720_HRTF_FASTCONV for ( j = 0; j < 9; j++ ) -#else - for ( j = 0; j < HRTF_SH_CHANNELS; j++ ) -#endif { memcpy( ( *hHRTF )->leftHRIRReal_HOA2[i][j], hrtf_data_rptr, BINAURAL_NTAPS * sizeof( float ) ); hrtf_data_rptr += BINAURAL_NTAPS * sizeof( float ); @@ -1190,11 +1185,7 @@ static ivas_error create_fastconv_HRTF_from_rawdata( } for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) { -#ifdef FIX_1720_HRTF_FASTCONV for ( j = 0; j < 9; j++ ) -#else - for ( j = 0; j < HRTF_SH_CHANNELS; j++ ) -#endif { memcpy( ( *hHRTF )->leftHRIRImag_HOA2[i][j], hrtf_data_rptr, BINAURAL_NTAPS * sizeof( float ) ); hrtf_data_rptr += BINAURAL_NTAPS * sizeof( float ); @@ -1202,11 +1193,7 @@ static ivas_error create_fastconv_HRTF_from_rawdata( } for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) { -#ifdef FIX_1720_HRTF_FASTCONV for ( j = 0; j < 9; j++ ) -#else - for ( j = 0; j < HRTF_SH_CHANNELS; j++ ) -#endif { memcpy( ( *hHRTF )->rightHRIRReal_HOA2[i][j], hrtf_data_rptr, BINAURAL_NTAPS * sizeof( float ) ); hrtf_data_rptr += BINAURAL_NTAPS * sizeof( float ); @@ -1214,24 +1201,66 @@ static ivas_error create_fastconv_HRTF_from_rawdata( } for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) { -#ifdef FIX_1720_HRTF_FASTCONV for ( j = 0; j < 9; j++ ) + { + memcpy( ( *hHRTF )->rightHRIRImag_HOA2[i][j], hrtf_data_rptr, BINAURAL_NTAPS * sizeof( float ) ); + hrtf_data_rptr += BINAURAL_NTAPS * sizeof( float ); + } + } #else + if ( HRTF_SH_CHANNELS != *( (uint16_t *) ( hrtf_data_rptr ) ) ) + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "HRTF binary file not compliant (HRTF_SH_CHANNELS)" ); + } + hrtf_data_rptr += sizeof( uint16_t ); + + if ( BINAURAL_NTAPS != *( (uint16_t *) ( hrtf_data_rptr ) ) ) + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "HRTF binary file not compliant (BINAURAL_NTAPS)" ); + } + hrtf_data_rptr += sizeof( uint16_t ); + + for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) + { + for ( j = 0; j < HRTF_SH_CHANNELS; j++ ) + { + memcpy( ( *hHRTF )->leftHRIRReal_HOA2[i][j], hrtf_data_rptr, BINAURAL_NTAPS * sizeof( float ) ); + hrtf_data_rptr += BINAURAL_NTAPS * sizeof( float ); + } + } + for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) + { + for ( j = 0; j < HRTF_SH_CHANNELS; j++ ) + { + memcpy( ( *hHRTF )->leftHRIRImag_HOA2[i][j], hrtf_data_rptr, BINAURAL_NTAPS * sizeof( float ) ); + hrtf_data_rptr += BINAURAL_NTAPS * sizeof( float ); + } + } + for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) + { + for ( j = 0; j < HRTF_SH_CHANNELS; j++ ) + { + memcpy( ( *hHRTF )->rightHRIRReal_HOA2[i][j], hrtf_data_rptr, BINAURAL_NTAPS * sizeof( float ) ); + hrtf_data_rptr += BINAURAL_NTAPS * sizeof( float ); + } + } + for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) + { for ( j = 0; j < HRTF_SH_CHANNELS; j++ ) -#endif { memcpy( ( *hHRTF )->rightHRIRImag_HOA2[i][j], hrtf_data_rptr, BINAURAL_NTAPS * sizeof( float ) ); hrtf_data_rptr += BINAURAL_NTAPS * sizeof( float ); } } +#endif } else if ( rend_type == RENDERER_BINAURAL_FASTCONV && input_cfg == BINAURAL_INPUT_AUDIO_CONFIG_FOA ) { /* HRIR_FOA */ ( *hHRTF )->FASTCONV_FOA_latency_s = *( (float *) ( hrtf_data_rptr ) ); hrtf_data_rptr += sizeof( float ); - - if ( HRTF_SH_CHANNELS != *( (uint16_t *) ( hrtf_data_rptr ) ) ) +#ifdef FIX_1720_HRTF_FASTCONV + if ( 4 != *( (uint16_t *) ( hrtf_data_rptr ) ) ) { return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "HRTF binary file not compliant (HRTF_SH_CHANNELS)" ); } @@ -1245,11 +1274,7 @@ static ivas_error create_fastconv_HRTF_from_rawdata( for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) { -#ifdef FIX_1720_HRTF_FASTCONV for ( j = 0; j < 4; j++ ) -#else - for ( j = 0; j < HRTF_SH_CHANNELS; j++ ) -#endif { memcpy( ( *hHRTF )->leftHRIRReal_FOA[i][j], hrtf_data_rptr, BINAURAL_NTAPS * sizeof( float ) ); hrtf_data_rptr += BINAURAL_NTAPS * sizeof( float ); @@ -1257,11 +1282,7 @@ static ivas_error create_fastconv_HRTF_from_rawdata( } for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) { -#ifdef FIX_1720_HRTF_FASTCONV for ( j = 0; j < 4; j++ ) -#else - for ( j = 0; j < HRTF_SH_CHANNELS; j++ ) -#endif { memcpy( ( *hHRTF )->leftHRIRImag_FOA[i][j], hrtf_data_rptr, BINAURAL_NTAPS * sizeof( float ) ); hrtf_data_rptr += BINAURAL_NTAPS * sizeof( float ); @@ -1269,11 +1290,7 @@ static ivas_error create_fastconv_HRTF_from_rawdata( } for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) { -#ifdef FIX_1720_HRTF_FASTCONV for ( j = 0; j < 4; j++ ) -#else - for ( j = 0; j < HRTF_SH_CHANNELS; j++ ) -#endif { memcpy( ( *hHRTF )->rightHRIRReal_FOA[i][j], hrtf_data_rptr, BINAURAL_NTAPS * sizeof( float ) ); hrtf_data_rptr += BINAURAL_NTAPS * sizeof( float ); @@ -1281,16 +1298,58 @@ static ivas_error create_fastconv_HRTF_from_rawdata( } for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) { -#ifdef FIX_1720_HRTF_FASTCONV for ( j = 0; j < 4; j++ ) + { + memcpy( ( *hHRTF )->rightHRIRImag_FOA[i][j], hrtf_data_rptr, BINAURAL_NTAPS * sizeof( float ) ); + hrtf_data_rptr += BINAURAL_NTAPS * sizeof( float ); + } + } #else + if ( HRTF_SH_CHANNELS != *( (uint16_t *) ( hrtf_data_rptr ) ) ) + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "HRTF binary file not compliant (HRTF_SH_CHANNELS)" ); + } + hrtf_data_rptr += sizeof( uint16_t ); + + if ( BINAURAL_NTAPS != *( (uint16_t *) ( hrtf_data_rptr ) ) ) + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "HRTF binary file not compliant (BINAURAL_NTAPS)" ); + } + hrtf_data_rptr += sizeof( uint16_t ); + + for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) + { + for ( j = 0; j < HRTF_SH_CHANNELS; j++ ) + { + memcpy( ( *hHRTF )->leftHRIRReal_FOA[i][j], hrtf_data_rptr, BINAURAL_NTAPS * sizeof( float ) ); + hrtf_data_rptr += BINAURAL_NTAPS * sizeof( float ); + } + } + for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) + { + for ( j = 0; j < HRTF_SH_CHANNELS; j++ ) + { + memcpy( ( *hHRTF )->leftHRIRImag_FOA[i][j], hrtf_data_rptr, BINAURAL_NTAPS * sizeof( float ) ); + hrtf_data_rptr += BINAURAL_NTAPS * sizeof( float ); + } + } + for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) + { + for ( j = 0; j < HRTF_SH_CHANNELS; j++ ) + { + memcpy( ( *hHRTF )->rightHRIRReal_FOA[i][j], hrtf_data_rptr, BINAURAL_NTAPS * sizeof( float ) ); + hrtf_data_rptr += BINAURAL_NTAPS * sizeof( float ); + } + } + for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) + { for ( j = 0; j < HRTF_SH_CHANNELS; j++ ) -#endif { memcpy( ( *hHRTF )->rightHRIRImag_FOA[i][j], hrtf_data_rptr, BINAURAL_NTAPS * sizeof( float ) ); hrtf_data_rptr += BINAURAL_NTAPS * sizeof( float ); } } +#endif } /* BRIR */ else if ( rend_type == RENDERER_BINAURAL_FASTCONV_ROOM && input_cfg == BINAURAL_INPUT_AUDIO_CONFIG_COMBINED ) -- GitLab From b0e79d25b5da2457445753e6c57e2afae53307c4 Mon Sep 17 00:00:00 2001 From: Shikha Shetgeri <100861@ittiam.com> Date: Wed, 19 Jul 2023 15:51:20 +0530 Subject: [PATCH 04/14] ASAN fix --- lib_dec/ivas_binRenderer_internal.c | 95 ++++++++++++++--------------- lib_rend/ivas_hrtf.c | 7 ++- lib_util/hrtf_file_reader.c | 18 +----- 3 files changed, 55 insertions(+), 65 deletions(-) diff --git a/lib_dec/ivas_binRenderer_internal.c b/lib_dec/ivas_binRenderer_internal.c index 067751e0f8..95e61f0475 100644 --- a/lib_dec/ivas_binRenderer_internal.c +++ b/lib_dec/ivas_binRenderer_internal.c @@ -436,37 +436,37 @@ ivas_error ivas_allocate_binaural_hrtf( } for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) { - if ( ( HrtfFastConv->leftHRIRReal_HOA3[i] = (float **) malloc( HRTF_SH_CHANNELS * sizeof( float * ) ) ) == NULL ) + if ( ( HrtfFastConv->leftHRIRReal_HOA3[i] = (float **) malloc( HOA3_CHANNELS * sizeof( float * ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRReal_HOA3" ); } - if ( ( HrtfFastConv->leftHRIRImag_HOA3[i] = (float **) malloc( HRTF_SH_CHANNELS * sizeof( float * ) ) ) == NULL ) + if ( ( HrtfFastConv->leftHRIRImag_HOA3[i] = (float **) malloc( HOA3_CHANNELS * sizeof( float * ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRImag_HOA3" ); } - if ( ( HrtfFastConv->rightHRIRReal_HOA3[i] = (float **) malloc( HRTF_SH_CHANNELS * sizeof( float * ) ) ) == NULL ) + if ( ( HrtfFastConv->rightHRIRReal_HOA3[i] = (float **) malloc( HOA3_CHANNELS * sizeof( float * ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRImag_HOA3" ); } - if ( ( HrtfFastConv->rightHRIRImag_HOA3[i] = (float **) malloc( HRTF_SH_CHANNELS * sizeof( float * ) ) ) == NULL ) + if ( ( HrtfFastConv->rightHRIRImag_HOA3[i] = (float **) malloc( HOA3_CHANNELS * sizeof( float * ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRImag_HOA3" ); } - for ( j = 0; j < HRTF_SH_CHANNELS; j++ ) + for ( j = 0; j < HOA3_CHANNELS; j++ ) { - if ( ( HrtfFastConv->leftHRIRReal_HOA3[i][j] = (float *) malloc( BINAURAL_NTAPS * sizeof( float ) ) ) == NULL ) + if ( ( HrtfFastConv->leftHRIRReal_HOA3[i][j] = (float *) malloc( BINAURAL_NTAPS_SBA * sizeof( float ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRReal_HOA3" ); } - if ( ( HrtfFastConv->leftHRIRImag_HOA3[i][j] = (float *) malloc( BINAURAL_NTAPS * sizeof( float ) ) ) == NULL ) + if ( ( HrtfFastConv->leftHRIRImag_HOA3[i][j] = (float *) malloc( BINAURAL_NTAPS_SBA * sizeof( float ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRImag_HOA3" ); } - if ( ( HrtfFastConv->rightHRIRReal_HOA3[i][j] = (float *) malloc( BINAURAL_NTAPS * sizeof( float ) ) ) == NULL ) + if ( ( HrtfFastConv->rightHRIRReal_HOA3[i][j] = (float *) malloc( BINAURAL_NTAPS_SBA * sizeof( float ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRReal_HOA3" ); } - if ( ( HrtfFastConv->rightHRIRImag_HOA3[i][j] = (float *) malloc( BINAURAL_NTAPS * sizeof( float ) ) ) == NULL ) + if ( ( HrtfFastConv->rightHRIRImag_HOA3[i][j] = (float *) malloc( BINAURAL_NTAPS_SBA * sizeof( float ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRImag_HOA3" ); } @@ -474,7 +474,7 @@ ivas_error ivas_allocate_binaural_hrtf( } } } - else if ( output_config == AUDIO_CONFIG_HOA2 || input_config == BINAURAL_INPUT_AUDIO_CONFIG_HOA2 ) + if ( output_config == AUDIO_CONFIG_HOA2 || input_config == BINAURAL_INPUT_AUDIO_CONFIG_HOA2 ) { if ( ( HrtfFastConv->leftHRIRReal_HOA2 != NULL ) && ( HrtfFastConv->leftHRIRImag_HOA2 != NULL ) && ( HrtfFastConv->rightHRIRReal_HOA2 != NULL ) && ( HrtfFastConv->rightHRIRImag_HOA2 != NULL ) ) { @@ -500,37 +500,37 @@ ivas_error ivas_allocate_binaural_hrtf( } for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) { - if ( ( HrtfFastConv->leftHRIRReal_HOA2[i] = (float **) malloc( 9 * sizeof( float * ) ) ) == NULL ) + if ( ( HrtfFastConv->leftHRIRReal_HOA2[i] = (float **) malloc( HOA2_CHANNELS * sizeof( float * ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRReal_HOA2" ); } - if ( ( HrtfFastConv->leftHRIRImag_HOA2[i] = (float **) malloc( 9 * sizeof( float * ) ) ) == NULL ) + if ( ( HrtfFastConv->leftHRIRImag_HOA2[i] = (float **) malloc( HOA2_CHANNELS * sizeof( float * ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRImag_HOA2" ); } - if ( ( HrtfFastConv->rightHRIRReal_HOA2[i] = (float **) malloc( 9 * sizeof( float * ) ) ) == NULL ) + if ( ( HrtfFastConv->rightHRIRReal_HOA2[i] = (float **) malloc( HOA2_CHANNELS * sizeof( float * ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRImag_HOA2" ); } - if ( ( HrtfFastConv->rightHRIRImag_HOA2[i] = (float **) malloc( 9 * sizeof( float * ) ) ) == NULL ) + if ( ( HrtfFastConv->rightHRIRImag_HOA2[i] = (float **) malloc( HOA2_CHANNELS * sizeof( float * ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRImag_HOA2" ); } - for ( j = 0; j < 9; j++ ) + for ( j = 0; j < HOA2_CHANNELS; j++ ) { - if ( ( HrtfFastConv->leftHRIRReal_HOA2[i][j] = (float *) malloc( BINAURAL_NTAPS * sizeof( float ) ) ) == NULL ) + if ( ( HrtfFastConv->leftHRIRReal_HOA2[i][j] = (float *) malloc( BINAURAL_NTAPS_SBA * sizeof( float ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRReal_HOA2" ); } - if ( ( HrtfFastConv->leftHRIRImag_HOA2[i][j] = (float *) malloc( BINAURAL_NTAPS * sizeof( float ) ) ) == NULL ) + if ( ( HrtfFastConv->leftHRIRImag_HOA2[i][j] = (float *) malloc( BINAURAL_NTAPS_SBA * sizeof( float ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRImag_HOA2" ); } - if ( ( HrtfFastConv->rightHRIRReal_HOA2[i][j] = (float *) malloc( BINAURAL_NTAPS * sizeof( float ) ) ) == NULL ) + if ( ( HrtfFastConv->rightHRIRReal_HOA2[i][j] = (float *) malloc( BINAURAL_NTAPS_SBA * sizeof( float ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRReal_HOA2" ); } - if ( ( HrtfFastConv->rightHRIRImag_HOA2[i][j] = (float *) malloc( BINAURAL_NTAPS * sizeof( float ) ) ) == NULL ) + if ( ( HrtfFastConv->rightHRIRImag_HOA2[i][j] = (float *) malloc( BINAURAL_NTAPS_SBA * sizeof( float ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRImag_HOA2" ); } @@ -538,7 +538,7 @@ ivas_error ivas_allocate_binaural_hrtf( } } } - else if ( output_config == AUDIO_CONFIG_FOA || input_config == BINAURAL_INPUT_AUDIO_CONFIG_FOA ) + if ( output_config == AUDIO_CONFIG_FOA || input_config == BINAURAL_INPUT_AUDIO_CONFIG_FOA ) { if ( ( HrtfFastConv->leftHRIRReal_FOA != NULL ) && ( HrtfFastConv->leftHRIRImag_FOA != NULL ) && ( HrtfFastConv->rightHRIRReal_FOA != NULL ) && ( HrtfFastConv->rightHRIRImag_FOA != NULL ) ) { @@ -564,37 +564,37 @@ ivas_error ivas_allocate_binaural_hrtf( } for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) { - if ( ( HrtfFastConv->leftHRIRReal_FOA[i] = (float **) malloc( 4 * sizeof( float * ) ) ) == NULL ) + if ( ( HrtfFastConv->leftHRIRReal_FOA[i] = (float **) malloc( FOA_CHANNELS * sizeof( float * ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRReal_FOA" ); } - if ( ( HrtfFastConv->leftHRIRImag_FOA[i] = (float **) malloc( 4 * sizeof( float * ) ) ) == NULL ) + if ( ( HrtfFastConv->leftHRIRImag_FOA[i] = (float **) malloc( FOA_CHANNELS * sizeof( float * ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRImag_FOA" ); } - if ( ( HrtfFastConv->rightHRIRReal_FOA[i] = (float **) malloc( 4 * sizeof( float * ) ) ) == NULL ) + if ( ( HrtfFastConv->rightHRIRReal_FOA[i] = (float **) malloc( FOA_CHANNELS * sizeof( float * ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRImag_FOA" ); } - if ( ( HrtfFastConv->rightHRIRImag_FOA[i] = (float **) malloc( 4 * sizeof( float * ) ) ) == NULL ) + if ( ( HrtfFastConv->rightHRIRImag_FOA[i] = (float **) malloc( FOA_CHANNELS * sizeof( float * ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRImag_FOA" ); } - for ( j = 0; j < 4; j++ ) + for ( j = 0; j < FOA_CHANNELS; j++ ) { - if ( ( HrtfFastConv->leftHRIRReal_FOA[i][j] = (float *) malloc( BINAURAL_NTAPS * sizeof( float ) ) ) == NULL ) + if ( ( HrtfFastConv->leftHRIRReal_FOA[i][j] = (float *) malloc( BINAURAL_NTAPS_SBA * sizeof( float ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRReal_FOA" ); } - if ( ( HrtfFastConv->leftHRIRImag_FOA[i][j] = (float *) malloc( BINAURAL_NTAPS * sizeof( float ) ) ) == NULL ) + if ( ( HrtfFastConv->leftHRIRImag_FOA[i][j] = (float *) malloc( BINAURAL_NTAPS_SBA * sizeof( float ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRImag_FOA" ); } - if ( ( HrtfFastConv->rightHRIRReal_FOA[i][j] = (float *) malloc( BINAURAL_NTAPS * sizeof( float ) ) ) == NULL ) + if ( ( HrtfFastConv->rightHRIRReal_FOA[i][j] = (float *) malloc( BINAURAL_NTAPS_SBA * sizeof( float ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRReal_FOA" ); } - if ( ( HrtfFastConv->rightHRIRImag_FOA[i][j] = (float *) malloc( BINAURAL_NTAPS * sizeof( float ) ) ) == NULL ) + if ( ( HrtfFastConv->rightHRIRImag_FOA[i][j] = (float *) malloc( BINAURAL_NTAPS_SBA * sizeof( float ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRImag_FOA" ); } @@ -822,33 +822,32 @@ static ivas_error ivas_binaural_hrtf_open( } if ( output_config == AUDIO_CONFIG_HOA3 ) { - for ( j = 0; j < HRTF_SH_CHANNELS; j++ ) + for ( j = 0; j < HOA3_CHANNELS; j++ ) { - mvr2r( leftHRIRReal_HOA3[i][j], HrtfFastConv->leftHRIRReal_HOA3[i][j], BINAURAL_NTAPS ); - mvr2r( leftHRIRImag_HOA3[i][j], HrtfFastConv->leftHRIRImag_HOA3[i][j], BINAURAL_NTAPS ); - mvr2r( rightHRIRReal_HOA3[i][j], HrtfFastConv->rightHRIRReal_HOA3[i][j], BINAURAL_NTAPS ); - mvr2r( rightHRIRImag_HOA3[i][j], HrtfFastConv->rightHRIRImag_HOA3[i][j], BINAURAL_NTAPS ); + mvr2r( leftHRIRReal_HOA3[i][j], HrtfFastConv->leftHRIRReal_HOA3[i][j], BINAURAL_NTAPS_SBA ); + mvr2r( leftHRIRImag_HOA3[i][j], HrtfFastConv->leftHRIRImag_HOA3[i][j], BINAURAL_NTAPS_SBA ); + mvr2r( rightHRIRReal_HOA3[i][j], HrtfFastConv->rightHRIRReal_HOA3[i][j], BINAURAL_NTAPS_SBA ); + mvr2r( rightHRIRImag_HOA3[i][j], HrtfFastConv->rightHRIRImag_HOA3[i][j], BINAURAL_NTAPS_SBA ); } } if ( output_config == AUDIO_CONFIG_HOA2 ) { - for ( j = 0; j < 9; j++ ) + for ( j = 0; j < HOA2_CHANNELS; j++ ) { - mvr2r( leftHRIRReal_HOA2[i][j], HrtfFastConv->leftHRIRReal_HOA2[i][j], BINAURAL_NTAPS ); - mvr2r( leftHRIRImag_HOA2[i][j], HrtfFastConv->leftHRIRImag_HOA2[i][j], BINAURAL_NTAPS ); - mvr2r( rightHRIRReal_HOA2[i][j], HrtfFastConv->rightHRIRReal_HOA2[i][j], BINAURAL_NTAPS ); - mvr2r( rightHRIRImag_HOA2[i][j], HrtfFastConv->rightHRIRImag_HOA2[i][j], BINAURAL_NTAPS ); + mvr2r( leftHRIRReal_HOA2[i][j], HrtfFastConv->leftHRIRReal_HOA2[i][j], BINAURAL_NTAPS_SBA ); + mvr2r( leftHRIRImag_HOA2[i][j], HrtfFastConv->leftHRIRImag_HOA2[i][j], BINAURAL_NTAPS_SBA ); + mvr2r( rightHRIRReal_HOA2[i][j], HrtfFastConv->rightHRIRReal_HOA2[i][j], BINAURAL_NTAPS_SBA ); + mvr2r( rightHRIRImag_HOA2[i][j], HrtfFastConv->rightHRIRImag_HOA2[i][j], BINAURAL_NTAPS_SBA ); } } if ( output_config == AUDIO_CONFIG_FOA ) { - - for ( j = 0; j < 4; j++ ) + for ( j = 0; j < FOA_CHANNELS; j++ ) { - mvr2r( leftHRIRReal_FOA[i][j], HrtfFastConv->leftHRIRReal_FOA[i][j], BINAURAL_NTAPS ); - mvr2r( leftHRIRImag_FOA[i][j], HrtfFastConv->leftHRIRImag_FOA[i][j], BINAURAL_NTAPS ); - mvr2r( rightHRIRReal_FOA[i][j], HrtfFastConv->rightHRIRReal_FOA[i][j], BINAURAL_NTAPS ); - mvr2r( rightHRIRImag_FOA[i][j], HrtfFastConv->rightHRIRImag_FOA[i][j], BINAURAL_NTAPS ); + mvr2r( leftHRIRReal_FOA[i][j], HrtfFastConv->leftHRIRReal_FOA[i][j], BINAURAL_NTAPS_SBA ); + mvr2r( leftHRIRImag_FOA[i][j], HrtfFastConv->leftHRIRImag_FOA[i][j], BINAURAL_NTAPS_SBA ); + mvr2r( rightHRIRReal_FOA[i][j], HrtfFastConv->rightHRIRReal_FOA[i][j], BINAURAL_NTAPS_SBA ); + mvr2r( rightHRIRImag_FOA[i][j], HrtfFastConv->rightHRIRImag_FOA[i][j], BINAURAL_NTAPS_SBA ); } } #else @@ -1451,7 +1450,7 @@ void ivas_binaural_hrtf_close( { for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) { - for ( j = 0; j < HRTF_SH_CHANNELS; j++ ) + for ( j = 0; j < HOA3_CHANNELS; j++ ) { free( ( *hHrtfFastConv )->leftHRIRReal_HOA3[i][j] ); ( *hHrtfFastConv )->leftHRIRReal_HOA3[i][j] = NULL; @@ -1484,7 +1483,7 @@ void ivas_binaural_hrtf_close( { for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) { - for ( j = 0; j < 9; j++ ) + for ( j = 0; j < HOA2_CHANNELS; j++ ) { free( ( *hHrtfFastConv )->leftHRIRReal_HOA2[i][j] ); ( *hHrtfFastConv )->leftHRIRReal_HOA2[i][j] = NULL; @@ -1517,7 +1516,7 @@ void ivas_binaural_hrtf_close( { for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) { - for ( j = 0; j < 4; j++ ) + for ( j = 0; j < FOA_CHANNELS; j++ ) { free( ( *hHrtfFastConv )->leftHRIRReal_FOA[i][j] ); ( *hHrtfFastConv )->leftHRIRReal_FOA[i][j] = NULL; diff --git a/lib_rend/ivas_hrtf.c b/lib_rend/ivas_hrtf.c index 136873668b..926491c8fb 100644 --- a/lib_rend/ivas_hrtf.c +++ b/lib_rend/ivas_hrtf.c @@ -36,6 +36,9 @@ #include "ivas_prot_rend.h" #include "ivas_error.h" #include "wmc_auto.h" +#ifdef FIX_1720_HRTF_FASTCONV +#include +#endif /*-----------------------------------------------------------------------* * ivas_HRTF_binary_open() @@ -139,7 +142,9 @@ ivas_error ivas_HRTF_fastconv_binary_open( { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for FASTCONV HRTF tables!" ); } - +#ifdef FIX_1720_HRTF_FASTCONV + memset( *hHrtfFastConv, 0x00, sizeof( HRTFS_FASTCONV ) ); +#endif return IVAS_ERR_OK; } diff --git a/lib_util/hrtf_file_reader.c b/lib_util/hrtf_file_reader.c index 44f3151f97..183b278bfc 100644 --- a/lib_util/hrtf_file_reader.c +++ b/lib_util/hrtf_file_reader.c @@ -1231,12 +1231,6 @@ static ivas_error create_fastconv_HRTF_from_rawdata( /* HRIR_HOA2 */ ( *hHRTF )->FASTCONV_HOA2_latency_s = *( (float *) ( hrtf_data_rptr ) ); hrtf_data_rptr += sizeof( float ); -#ifdef FIX_1720_HRTF_FASTCONV - if ( 9 != *( (uint16_t *) ( hrtf_data_rptr ) ) ) - { - return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "HRTF binary file not compliant (HRTF_SH_CHANNELS)" ); - } - hrtf_data_rptr += sizeof( uint16_t ); #ifdef UPDATE_FASTCONV_SBA_FILTER if ( HOA2_CHANNELS != *( (uint16_t *) ( hrtf_data_rptr ) ) ) { @@ -1323,19 +1317,12 @@ static ivas_error create_fastconv_HRTF_from_rawdata( #endif } } -#endif } else if ( rend_type == RENDERER_BINAURAL_FASTCONV && input_cfg == BINAURAL_INPUT_AUDIO_CONFIG_FOA ) { /* HRIR_FOA */ ( *hHRTF )->FASTCONV_FOA_latency_s = *( (float *) ( hrtf_data_rptr ) ); hrtf_data_rptr += sizeof( float ); -#ifdef FIX_1720_HRTF_FASTCONV - if ( 4 != *( (uint16_t *) ( hrtf_data_rptr ) ) ) - { - return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "HRTF binary file not compliant (HRTF_SH_CHANNELS)" ); - } - hrtf_data_rptr += sizeof( uint16_t ); #ifdef UPDATE_FASTCONV_SBA_FILTER if ( FOA_CHANNELS != *( (uint16_t *) ( hrtf_data_rptr ) ) ) { @@ -1422,7 +1409,6 @@ static ivas_error create_fastconv_HRTF_from_rawdata( #endif } } -#endif } /* BRIR */ else if ( rend_type == RENDERER_BINAURAL_FASTCONV_ROOM && input_cfg == BINAURAL_INPUT_AUDIO_CONFIG_COMBINED ) @@ -1535,9 +1521,9 @@ ivas_error load_fastconv_HRTF_from_binary( } /* Read & load */ - +#ifndef FIX_1720_HRTF_FASTCONV memset( hHrtfFastConv, 0x00, sizeof( HRTFS_FASTCONV ) ); - +#endif for ( hrtf_id = 0; hrtf_id < hrtfs_file_header.nb_hrtf; hrtf_id++ ) { if ( read_hrtf_binary_header( &hrtf_header, f_hrtf ) != IVAS_ERR_OK ) -- GitLab From b87395d1a46e26d87e377706c583da5e6922c774 Mon Sep 17 00:00:00 2001 From: Shikha Shetgeri <100861@ittiam.com> Date: Thu, 20 Jul 2023 14:30:34 +0530 Subject: [PATCH 05/14] smoke-test fix --- lib_util/hrtf_file_reader.c | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/lib_util/hrtf_file_reader.c b/lib_util/hrtf_file_reader.c index 183b278bfc..73ba942f04 100644 --- a/lib_util/hrtf_file_reader.c +++ b/lib_util/hrtf_file_reader.c @@ -1531,7 +1531,22 @@ ivas_error load_fastconv_HRTF_from_binary( free( hrtf_data ); return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "HRTF binary file not compliant (number of HRTF)" ); } - +#ifdef FIX_1720_HRTF_FASTCONV + if ( ( hrtf_header.rend_type == RENDERER_BINAURAL_FASTCONV ) || ( hrtf_header.rend_type == RENDERER_BINAURAL_FASTCONV_ROOM ) ) + { + if ( fread( hrtf_data, 1, hrtf_header.data_size, f_hrtf ) != hrtf_header.data_size ) + { + free( hrtf_data ); + return IVAS_ERROR( IVAS_ERR_FAILED_FILE_READ, "Error in HRTF file reading" ); + } + /* Create the HRTF reading the raw data from the binary file */ + if ( ( create_fastconv_HRTF_from_rawdata( &hHrtfFastConv, hrtf_data, hrtf_header.rend_type, hrtf_header.input_cfg ) ) != IVAS_ERR_OK ) + { + free( hrtf_data ); + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Could not create HRTF from binary file" ); + } + } +#else if ( ( hrtf_header.frequency == 48000 ) && ( ( hrtf_header.rend_type == RENDERER_BINAURAL_FASTCONV ) || ( hrtf_header.rend_type == RENDERER_BINAURAL_FASTCONV_ROOM ) ) ) { @@ -1547,6 +1562,7 @@ ivas_error load_fastconv_HRTF_from_binary( return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Could not create HRTF from binary file" ); } } +#endif else { fseek( f_hrtf, hrtf_header.data_size, SEEK_CUR ); @@ -1806,13 +1822,18 @@ ivas_error create_SetOfHRTF_from_binary( } free( hrtf_data ); - if ( ( ( *hSetOfHRTF ).hHRTF_hrir_combined == NULL ) || ( ( *hSetOfHRTF ).hHRTF_brir_combined == NULL ) || ( ( *hSetOfHRTF ).hHRTF_hrir_hoa3 == NULL ) ) { +#ifdef FIX_1720_HRTF_FASTCONV + if ( destroy_SetOfHRTF( hSetOfHRTF ) != IVAS_ERR_OK ) + { + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Could not create all the HRTF from binary file" ); + } +#else destroy_SetOfHRTF( hSetOfHRTF ); return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Could not create all the HRTF from binary file" ); +#endif } - return IVAS_ERR_OK; } -- GitLab From 7ea4b5031574822a4bba2b1ae798c773b1d2b1c9 Mon Sep 17 00:00:00 2001 From: Shikha Shetgeri <100861@ittiam.com> Date: Thu, 20 Jul 2023 15:53:33 +0530 Subject: [PATCH 06/14] resolve build errros --- lib_dec/ivas_binRenderer_internal.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib_dec/ivas_binRenderer_internal.c b/lib_dec/ivas_binRenderer_internal.c index 3dd5888ffd..d014312fa6 100644 --- a/lib_dec/ivas_binRenderer_internal.c +++ b/lib_dec/ivas_binRenderer_internal.c @@ -1201,7 +1201,12 @@ ivas_error ivas_rend_openCldfbRend( hBinRenderer->numPoses = 1; } /* Load HRTF tables */ +#ifdef FIX_1720_HRTF_FASTCONV + ivas_binaural_hrtf_open( &pCldfbRend->hHrtfFastConv, hBinRenderer->hInputSetup->output_config, RENDERER_BINAURAL_FASTCONV ); +#else ivas_binaural_hrtf_open( &pCldfbRend->hHrtfFastConv ); +#endif + /* Allocate memories and buffers needed for convolutional module */ if ( ( error = ivas_binRenderer_convModuleOpen( hBinRenderer, RENDERER_BINAURAL_FASTCONV, hBinRenderer->hInputSetup->is_loudspeaker_setup, in_config, -- GitLab From cb82daf932fe12e4ba36b7d9f5eb6470e49f9b32 Mon Sep 17 00:00:00 2001 From: Shikha Shetgeri <100861@ittiam.com> Date: Mon, 24 Jul 2023 10:13:59 +0530 Subject: [PATCH 07/14] LS channel allocation and alternative for copying hrtfs --- lib_com/ivas_prot.h | 6 +- lib_dec/ivas_binRenderer_internal.c | 744 +++++++++++++++++++++------- lib_rend/ivas_stat_rend.h | 2 + lib_util/hrtf_file_reader.c | 3 +- 4 files changed, 578 insertions(+), 177 deletions(-) diff --git a/lib_com/ivas_prot.h b/lib_com/ivas_prot.h index a46f3c7a96..c195ceab52 100644 --- a/lib_com/ivas_prot.h +++ b/lib_com/ivas_prot.h @@ -5187,8 +5187,10 @@ void ivas_binaural_hrtf_close( ivas_error ivas_allocate_binaural_hrtf( HRTFS_FASTCONV *HrtfFastConv, /* i : fastconv HRTF handle */ AUDIO_CONFIG output_config, /* i : ouput audio config */ - BINAURAL_INPUT_AUDIO_CONFIG output_config_bin /* i : binaural input audio config */ - , RENDERER_TYPE renderer_type + BINAURAL_INPUT_AUDIO_CONFIG output_config_bin, /* i : binaural input audio config */ + RENDERER_TYPE renderer_type, + int8_t is_loudspeaker_setup, + int16_t allocate_init_flag ); #endif diff --git a/lib_dec/ivas_binRenderer_internal.c b/lib_dec/ivas_binRenderer_internal.c index d014312fa6..5868f4a572 100644 --- a/lib_dec/ivas_binRenderer_internal.c +++ b/lib_dec/ivas_binRenderer_internal.c @@ -499,7 +499,9 @@ ivas_error ivas_allocate_binaural_hrtf( HRTFS_FASTCONV *HrtfFastConv, AUDIO_CONFIG output_config, BINAURAL_INPUT_AUDIO_CONFIG input_config, - RENDERER_TYPE renderer_type ) + RENDERER_TYPE renderer_type, + int8_t is_loudspeaker_setup, + int16_t allocate_init_flag ) { int16_t i, j; /*malloc for HOA3, HOA2, FOA*/ @@ -545,23 +547,26 @@ ivas_error ivas_allocate_binaural_hrtf( { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRImag_HOA3" ); } - for ( j = 0; j < HOA3_CHANNELS; j++ ) + if ( allocate_init_flag == 0 ) { - if ( ( HrtfFastConv->leftHRIRReal_HOA3[i][j] = (float *) malloc( BINAURAL_NTAPS_SBA * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRReal_HOA3" ); - } - if ( ( HrtfFastConv->leftHRIRImag_HOA3[i][j] = (float *) malloc( BINAURAL_NTAPS_SBA * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRImag_HOA3" ); - } - if ( ( HrtfFastConv->rightHRIRReal_HOA3[i][j] = (float *) malloc( BINAURAL_NTAPS_SBA * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRReal_HOA3" ); - } - if ( ( HrtfFastConv->rightHRIRImag_HOA3[i][j] = (float *) malloc( BINAURAL_NTAPS_SBA * sizeof( float ) ) ) == NULL ) + for ( j = 0; j < HOA3_CHANNELS; j++ ) { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRImag_HOA3" ); + if ( ( HrtfFastConv->leftHRIRReal_HOA3[i][j] = (float *) malloc( BINAURAL_NTAPS_SBA * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRReal_HOA3" ); + } + if ( ( HrtfFastConv->leftHRIRImag_HOA3[i][j] = (float *) malloc( BINAURAL_NTAPS_SBA * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRImag_HOA3" ); + } + if ( ( HrtfFastConv->rightHRIRReal_HOA3[i][j] = (float *) malloc( BINAURAL_NTAPS_SBA * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRReal_HOA3" ); + } + if ( ( HrtfFastConv->rightHRIRImag_HOA3[i][j] = (float *) malloc( BINAURAL_NTAPS_SBA * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRImag_HOA3" ); + } } } } @@ -609,23 +614,26 @@ ivas_error ivas_allocate_binaural_hrtf( { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRImag_HOA2" ); } - for ( j = 0; j < HOA2_CHANNELS; j++ ) + if ( allocate_init_flag == 0 ) { - if ( ( HrtfFastConv->leftHRIRReal_HOA2[i][j] = (float *) malloc( BINAURAL_NTAPS_SBA * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRReal_HOA2" ); - } - if ( ( HrtfFastConv->leftHRIRImag_HOA2[i][j] = (float *) malloc( BINAURAL_NTAPS_SBA * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRImag_HOA2" ); - } - if ( ( HrtfFastConv->rightHRIRReal_HOA2[i][j] = (float *) malloc( BINAURAL_NTAPS_SBA * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRReal_HOA2" ); - } - if ( ( HrtfFastConv->rightHRIRImag_HOA2[i][j] = (float *) malloc( BINAURAL_NTAPS_SBA * sizeof( float ) ) ) == NULL ) + for ( j = 0; j < HOA2_CHANNELS; j++ ) { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRImag_HOA2" ); + if ( ( HrtfFastConv->leftHRIRReal_HOA2[i][j] = (float *) malloc( BINAURAL_NTAPS_SBA * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRReal_HOA2" ); + } + if ( ( HrtfFastConv->leftHRIRImag_HOA2[i][j] = (float *) malloc( BINAURAL_NTAPS_SBA * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRImag_HOA2" ); + } + if ( ( HrtfFastConv->rightHRIRReal_HOA2[i][j] = (float *) malloc( BINAURAL_NTAPS_SBA * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRReal_HOA2" ); + } + if ( ( HrtfFastConv->rightHRIRImag_HOA2[i][j] = (float *) malloc( BINAURAL_NTAPS_SBA * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRImag_HOA2" ); + } } } } @@ -673,23 +681,26 @@ ivas_error ivas_allocate_binaural_hrtf( { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRImag_FOA" ); } - for ( j = 0; j < FOA_CHANNELS; j++ ) + if ( allocate_init_flag == 0 ) { - if ( ( HrtfFastConv->leftHRIRReal_FOA[i][j] = (float *) malloc( BINAURAL_NTAPS_SBA * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRReal_FOA" ); - } - if ( ( HrtfFastConv->leftHRIRImag_FOA[i][j] = (float *) malloc( BINAURAL_NTAPS_SBA * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRImag_FOA" ); - } - if ( ( HrtfFastConv->rightHRIRReal_FOA[i][j] = (float *) malloc( BINAURAL_NTAPS_SBA * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRReal_FOA" ); - } - if ( ( HrtfFastConv->rightHRIRImag_FOA[i][j] = (float *) malloc( BINAURAL_NTAPS_SBA * sizeof( float ) ) ) == NULL ) + for ( j = 0; j < FOA_CHANNELS; j++ ) { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRImag_FOA" ); + if ( ( HrtfFastConv->leftHRIRReal_FOA[i][j] = (float *) malloc( BINAURAL_NTAPS_SBA * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRReal_FOA" ); + } + if ( ( HrtfFastConv->leftHRIRImag_FOA[i][j] = (float *) malloc( BINAURAL_NTAPS_SBA * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRImag_FOA" ); + } + if ( ( HrtfFastConv->rightHRIRReal_FOA[i][j] = (float *) malloc( BINAURAL_NTAPS_SBA * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRReal_FOA" ); + } + if ( ( HrtfFastConv->rightHRIRImag_FOA[i][j] = (float *) malloc( BINAURAL_NTAPS_SBA * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRImag_FOA" ); + } } } } @@ -737,88 +748,415 @@ ivas_error ivas_allocate_binaural_hrtf( { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRImag" ); } - for ( j = 0; j < HRTF_LS_CHANNELS; j++ ) + if ( allocate_init_flag == 0 ) + { + for ( j = 0; j < HRTF_LS_CHANNELS; j++ ) + { + if ( ( HrtfFastConv->leftHRIRReal[i][j] = (float *) malloc( BINAURAL_NTAPS * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRReal" ); + } + if ( ( HrtfFastConv->leftHRIRImag[i][j] = (float *) malloc( BINAURAL_NTAPS * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRImag" ); + } + if ( ( HrtfFastConv->rightHRIRReal[i][j] = (float *) malloc( BINAURAL_NTAPS * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRReal" ); + } + if ( ( HrtfFastConv->rightHRIRImag[i][j] = (float *) malloc( BINAURAL_NTAPS * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRImag" ); + } + } + } + } + } + } + if ( allocate_init_flag == 1 ) + { + if ( renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM && is_loudspeaker_setup == 0 ) /*7_1_4*/ + { + HrtfFastConv->nChannels = 15; + if ( ( HrtfFastConv->leftBRIRReal != NULL ) && ( HrtfFastConv->leftBRIRImag != NULL ) && ( HrtfFastConv->rightBRIRReal != NULL ) && ( HrtfFastConv->rightBRIRImag != NULL ) ) + { + return IVAS_ERR_OK; + } + else + { + if ( ( HrtfFastConv->leftBRIRReal = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRReal" ); + } + if ( ( HrtfFastConv->leftBRIRImag = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRImag" ); + } + if ( ( HrtfFastConv->rightBRIRReal = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) { - if ( ( HrtfFastConv->leftHRIRReal[i][j] = (float *) malloc( BINAURAL_NTAPS * sizeof( float ) ) ) == NULL ) + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRReal" ); + } + if ( ( HrtfFastConv->rightBRIRImag = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRImag" ); + } + for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) + { + if ( ( HrtfFastConv->leftBRIRReal[i] = (float **) malloc( HrtfFastConv->nChannels * sizeof( float * ) ) ) == NULL ) { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRReal" ); + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRReal" ); } - if ( ( HrtfFastConv->leftHRIRImag[i][j] = (float *) malloc( BINAURAL_NTAPS * sizeof( float ) ) ) == NULL ) + if ( ( HrtfFastConv->leftBRIRImag[i] = (float **) malloc( HrtfFastConv->nChannels * sizeof( float * ) ) ) == NULL ) { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRImag" ); + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRImag" ); } - if ( ( HrtfFastConv->rightHRIRReal[i][j] = (float *) malloc( BINAURAL_NTAPS * sizeof( float ) ) ) == NULL ) + if ( ( HrtfFastConv->rightBRIRReal[i] = (float **) malloc( HrtfFastConv->nChannels * sizeof( float * ) ) ) == NULL ) { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRReal" ); + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRImag" ); + } + if ( ( HrtfFastConv->rightBRIRImag[i] = (float **) malloc( HrtfFastConv->nChannels * sizeof( float * ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRImag" ); } - if ( ( HrtfFastConv->rightHRIRImag[i][j] = (float *) malloc( BINAURAL_NTAPS * sizeof( float ) ) ) == NULL ) + if ( allocate_init_flag == 0 ) { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRImag" ); + for ( j = 0; j < HrtfFastConv->nChannels; j++ ) + { + if ( ( HrtfFastConv->leftBRIRReal[i][j] = (float *) malloc( BINAURAL_NTAPS_MAX * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRReal" ); + } + if ( ( HrtfFastConv->leftBRIRImag[i][j] = (float *) malloc( BINAURAL_NTAPS_MAX * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRImag" ); + } + if ( ( HrtfFastConv->rightBRIRReal[i][j] = (float *) malloc( BINAURAL_NTAPS_MAX * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRReal" ); + } + if ( ( HrtfFastConv->rightBRIRImag[i][j] = (float *) malloc( BINAURAL_NTAPS_MAX * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRImag" ); + } + } } } } } - } - if ( renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM || input_config == BINAURAL_INPUT_AUDIO_CONFIG_COMBINED ) - { - if ( ( HrtfFastConv->leftBRIRReal != NULL ) && ( HrtfFastConv->leftBRIRImag != NULL ) && ( HrtfFastConv->rightBRIRReal != NULL ) && ( HrtfFastConv->rightBRIRImag != NULL ) ) - { - return IVAS_ERR_OK; - } - else + else if ( renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM && is_loudspeaker_setup == 1 ) /*5_1 and others*/ { - if ( ( HrtfFastConv->leftBRIRReal = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) + if ( output_config == AUDIO_CONFIG_5_1 ) + { + HrtfFastConv->nChannels = 7; + if ( ( HrtfFastConv->leftBRIRReal = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRReal" ); + } + if ( ( HrtfFastConv->leftBRIRImag = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRImag" ); + } + if ( ( HrtfFastConv->rightBRIRReal = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRReal" ); + } + if ( ( HrtfFastConv->rightBRIRImag = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRImag" ); + } + for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) + { + if ( ( HrtfFastConv->leftBRIRReal[i] = (float **) malloc( HrtfFastConv->nChannels * sizeof( float * ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRReal" ); + } + if ( ( HrtfFastConv->leftBRIRImag[i] = (float **) malloc( HrtfFastConv->nChannels * sizeof( float * ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRImag" ); + } + if ( ( HrtfFastConv->rightBRIRReal[i] = (float **) malloc( HrtfFastConv->nChannels * sizeof( float * ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRImag" ); + } + if ( ( HrtfFastConv->rightBRIRImag[i] = (float **) malloc( HrtfFastConv->nChannels * sizeof( float * ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRImag" ); + } + if ( allocate_init_flag == 0 ) + { + for ( j = 0; j < HrtfFastConv->nChannels; j++ ) + { + if ( ( HrtfFastConv->leftBRIRReal[i][j] = (float *) malloc( BINAURAL_NTAPS_MAX * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRReal" ); + } + if ( ( HrtfFastConv->leftBRIRImag[i][j] = (float *) malloc( BINAURAL_NTAPS_MAX * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRImag" ); + } + if ( ( HrtfFastConv->rightBRIRReal[i][j] = (float *) malloc( BINAURAL_NTAPS_MAX * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRReal" ); + } + if ( ( HrtfFastConv->rightBRIRImag[i][j] = (float *) malloc( BINAURAL_NTAPS_MAX * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRImag" ); + } + } + } + } + } + else if ( output_config == AUDIO_CONFIG_7_1 ) { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRReal" ); + HrtfFastConv->nChannels = 5; + if ( ( HrtfFastConv->leftBRIRReal = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRReal" ); + } + if ( ( HrtfFastConv->leftBRIRImag = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRImag" ); + } + if ( ( HrtfFastConv->rightBRIRReal = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRReal" ); + } + if ( ( HrtfFastConv->rightBRIRImag = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRImag" ); + } + for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) + { + if ( ( HrtfFastConv->leftBRIRReal[i] = (float **) malloc( HrtfFastConv->nChannels * sizeof( float * ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRReal" ); + } + if ( ( HrtfFastConv->leftBRIRImag[i] = (float **) malloc( HrtfFastConv->nChannels * sizeof( float * ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRImag" ); + } + if ( ( HrtfFastConv->rightBRIRReal[i] = (float **) malloc( HrtfFastConv->nChannels * sizeof( float * ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRImag" ); + } + if ( ( HrtfFastConv->rightBRIRImag[i] = (float **) malloc( HrtfFastConv->nChannels * sizeof( float * ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRImag" ); + } + if ( allocate_init_flag == 0 ) + { + for ( j = 0; j < HrtfFastConv->nChannels; j++ ) + { + if ( ( HrtfFastConv->leftBRIRReal[i][j] = (float *) malloc( BINAURAL_NTAPS_MAX * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRReal" ); + } + if ( ( HrtfFastConv->leftBRIRImag[i][j] = (float *) malloc( BINAURAL_NTAPS_MAX * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRImag" ); + } + if ( ( HrtfFastConv->rightBRIRReal[i][j] = (float *) malloc( BINAURAL_NTAPS_MAX * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRReal" ); + } + if ( ( HrtfFastConv->rightBRIRImag[i][j] = (float *) malloc( BINAURAL_NTAPS_MAX * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRImag" ); + } + } + } + } } - if ( ( HrtfFastConv->leftBRIRImag = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) + else if ( output_config == AUDIO_CONFIG_5_1_2 ) { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRImag" ); + HrtfFastConv->nChannels = 11; + if ( ( HrtfFastConv->leftBRIRReal = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRReal" ); + } + if ( ( HrtfFastConv->leftBRIRImag = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRImag" ); + } + if ( ( HrtfFastConv->rightBRIRReal = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRReal" ); + } + if ( ( HrtfFastConv->rightBRIRImag = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRImag" ); + } + for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) + { + if ( ( HrtfFastConv->leftBRIRReal[i] = (float **) malloc( HrtfFastConv->nChannels * sizeof( float * ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRReal" ); + } + if ( ( HrtfFastConv->leftBRIRImag[i] = (float **) malloc( HrtfFastConv->nChannels * sizeof( float * ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRImag" ); + } + if ( ( HrtfFastConv->rightBRIRReal[i] = (float **) malloc( HrtfFastConv->nChannels * sizeof( float * ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRImag" ); + } + if ( ( HrtfFastConv->rightBRIRImag[i] = (float **) malloc( HrtfFastConv->nChannels * sizeof( float * ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRImag" ); + } + if ( allocate_init_flag == 0 ) + { + for ( j = 0; j < HrtfFastConv->nChannels; j++ ) + { + if ( ( HrtfFastConv->leftBRIRReal[i][j] = (float *) malloc( BINAURAL_NTAPS_MAX * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRReal" ); + } + if ( ( HrtfFastConv->leftBRIRImag[i][j] = (float *) malloc( BINAURAL_NTAPS_MAX * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRImag" ); + } + if ( ( HrtfFastConv->rightBRIRReal[i][j] = (float *) malloc( BINAURAL_NTAPS_MAX * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRReal" ); + } + if ( ( HrtfFastConv->rightBRIRImag[i][j] = (float *) malloc( BINAURAL_NTAPS_MAX * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRImag" ); + } + } + } + } } - if ( ( HrtfFastConv->rightBRIRReal = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) + else if ( output_config == AUDIO_CONFIG_5_1_4 ) { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRReal" ); + HrtfFastConv->nChannels = 13; + if ( ( HrtfFastConv->leftBRIRReal = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRReal" ); + } + if ( ( HrtfFastConv->leftBRIRImag = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRImag" ); + } + if ( ( HrtfFastConv->rightBRIRReal = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRReal" ); + } + if ( ( HrtfFastConv->rightBRIRImag = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRImag" ); + } + for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) + { + if ( ( HrtfFastConv->leftBRIRReal[i] = (float **) malloc( HrtfFastConv->nChannels * sizeof( float * ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRReal" ); + } + if ( ( HrtfFastConv->leftBRIRImag[i] = (float **) malloc( HrtfFastConv->nChannels * sizeof( float * ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRImag" ); + } + if ( ( HrtfFastConv->rightBRIRReal[i] = (float **) malloc( HrtfFastConv->nChannels * sizeof( float * ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRImag" ); + } + if ( ( HrtfFastConv->rightBRIRImag[i] = (float **) malloc( HrtfFastConv->nChannels * sizeof( float * ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRImag" ); + } + if ( allocate_init_flag == 0 ) + { + for ( j = 0; j < HrtfFastConv->nChannels; j++ ) + { + if ( ( HrtfFastConv->leftBRIRReal[i][j] = (float *) malloc( BINAURAL_NTAPS_MAX * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRReal" ); + } + if ( ( HrtfFastConv->leftBRIRImag[i][j] = (float *) malloc( BINAURAL_NTAPS_MAX * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRImag" ); + } + if ( ( HrtfFastConv->rightBRIRReal[i][j] = (float *) malloc( BINAURAL_NTAPS_MAX * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRReal" ); + } + if ( ( HrtfFastConv->rightBRIRImag[i][j] = (float *) malloc( BINAURAL_NTAPS_MAX * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRImag" ); + } + } + } + } } - if ( ( HrtfFastConv->rightBRIRImag = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) + } + } + else if ( allocate_init_flag == 0 ) + { + if ( renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM || input_config == BINAURAL_INPUT_AUDIO_CONFIG_COMBINED ) + { + if ( ( HrtfFastConv->leftBRIRReal != NULL ) && ( HrtfFastConv->leftBRIRImag != NULL ) && ( HrtfFastConv->rightBRIRReal != NULL ) && ( HrtfFastConv->rightBRIRImag != NULL ) ) { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRImag" ); + return IVAS_ERR_OK; } - for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) + else { - if ( ( HrtfFastConv->leftBRIRReal[i] = (float **) malloc( HRTF_LS_CHANNELS * sizeof( float * ) ) ) == NULL ) + if ( ( HrtfFastConv->leftBRIRReal = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRReal" ); } - if ( ( HrtfFastConv->leftBRIRImag[i] = (float **) malloc( HRTF_LS_CHANNELS * sizeof( float * ) ) ) == NULL ) + if ( ( HrtfFastConv->leftBRIRImag = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRImag" ); } - if ( ( HrtfFastConv->rightBRIRReal[i] = (float **) malloc( HRTF_LS_CHANNELS * sizeof( float * ) ) ) == NULL ) + if ( ( HrtfFastConv->rightBRIRReal = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRImag" ); + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRReal" ); } - if ( ( HrtfFastConv->rightBRIRImag[i] = (float **) malloc( HRTF_LS_CHANNELS * sizeof( float * ) ) ) == NULL ) + if ( ( HrtfFastConv->rightBRIRImag = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRImag" ); } - for ( j = 0; j < HRTF_LS_CHANNELS; j++ ) + for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) { - if ( ( HrtfFastConv->leftBRIRReal[i][j] = (float *) malloc( BINAURAL_NTAPS_MAX * sizeof( float ) ) ) == NULL ) + if ( ( HrtfFastConv->leftBRIRReal[i] = (float **) malloc( HRTF_LS_CHANNELS * sizeof( float * ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRReal" ); } - if ( ( HrtfFastConv->leftBRIRImag[i][j] = (float *) malloc( BINAURAL_NTAPS_MAX * sizeof( float ) ) ) == NULL ) + if ( ( HrtfFastConv->leftBRIRImag[i] = (float **) malloc( HRTF_LS_CHANNELS * sizeof( float * ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRImag" ); } - if ( ( HrtfFastConv->rightBRIRReal[i][j] = (float *) malloc( BINAURAL_NTAPS_MAX * sizeof( float ) ) ) == NULL ) + if ( ( HrtfFastConv->rightBRIRReal[i] = (float **) malloc( HRTF_LS_CHANNELS * sizeof( float * ) ) ) == NULL ) { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRReal" ); + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRImag" ); } - if ( ( HrtfFastConv->rightBRIRImag[i][j] = (float *) malloc( BINAURAL_NTAPS_MAX * sizeof( float ) ) ) == NULL ) + if ( ( HrtfFastConv->rightBRIRImag[i] = (float **) malloc( HRTF_LS_CHANNELS * sizeof( float * ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRImag" ); } + if ( allocate_init_flag == 0 ) + { + for ( j = 0; j < HRTF_LS_CHANNELS; j++ ) + { + if ( ( HrtfFastConv->leftBRIRReal[i][j] = (float *) malloc( BINAURAL_NTAPS_MAX * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRReal" ); + } + if ( ( HrtfFastConv->leftBRIRImag[i][j] = (float *) malloc( BINAURAL_NTAPS_MAX * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRImag" ); + } + if ( ( HrtfFastConv->rightBRIRReal[i][j] = (float *) malloc( BINAURAL_NTAPS_MAX * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRReal" ); + } + if ( ( HrtfFastConv->rightBRIRImag[i][j] = (float *) malloc( BINAURAL_NTAPS_MAX * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRImag" ); + } + } + } } } } @@ -838,7 +1176,8 @@ static ivas_error ivas_binaural_hrtf_open( #ifdef FIX_1720_HRTF_FASTCONV , AUDIO_CONFIG output_config, - RENDERER_TYPE renderer_type + RENDERER_TYPE renderer_type, + int8_t is_loudspeaker_setup #endif ) { @@ -881,7 +1220,8 @@ static ivas_error ivas_binaural_hrtf_open( { HrtfFastConv->FASTCONV_BRIR_latency_s = FASTCONV_BRIR_latency_s; } - ivas_allocate_binaural_hrtf( HrtfFastConv, output_config, HrtfFastConv->input_cfg_var, renderer_type ); + HrtfFastConv->allocate_init_flag = 1; + ivas_allocate_binaural_hrtf( HrtfFastConv, output_config, HrtfFastConv->input_cfg_var, renderer_type, is_loudspeaker_setup, HrtfFastConv->allocate_init_flag ); #else HrtfFastConv->FASTCONV_HRIR_latency_s = FASTCONV_HRIR_latency_s; HrtfFastConv->FASTCONV_HOA3_latency_s = FASTCONV_HOA3_latency_s; @@ -894,53 +1234,52 @@ static ivas_error ivas_binaural_hrtf_open( #ifdef FIX_1720_HRTF_FASTCONV if ( renderer_type == RENDERER_BINAURAL_FASTCONV ) { - for ( j = 0; j < HRTF_LS_CHANNELS; j++ ) { - mvr2r( leftHRIRReal[i][j], HrtfFastConv->leftHRIRReal[i][j], BINAURAL_NTAPS ); - mvr2r( leftHRIRImag[i][j], HrtfFastConv->leftHRIRImag[i][j], BINAURAL_NTAPS ); - mvr2r( rightHRIRReal[i][j], HrtfFastConv->rightHRIRReal[i][j], BINAURAL_NTAPS ); - mvr2r( rightHRIRImag[i][j], HrtfFastConv->rightHRIRImag[i][j], BINAURAL_NTAPS ); + HrtfFastConv->leftHRIRReal[i][j] = leftHRIRReal[i][j]; + HrtfFastConv->leftHRIRImag[i][j] = leftHRIRImag[i][j]; + HrtfFastConv->rightHRIRReal[i][j] = rightHRIRReal[i][j]; + HrtfFastConv->rightHRIRImag[i][j] = rightHRIRImag[i][j]; } } if ( renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) { - for ( j = 0; j < HRTF_LS_CHANNELS; j++ ) + for ( j = 0; j < HrtfFastConv->nChannels; j++ ) { - mvr2r( leftBRIRReal[i][j], HrtfFastConv->leftBRIRReal[i][j], BINAURAL_NTAPS_MAX ); - mvr2r( leftBRIRImag[i][j], HrtfFastConv->leftBRIRImag[i][j], BINAURAL_NTAPS_MAX ); - mvr2r( rightBRIRReal[i][j], HrtfFastConv->rightBRIRReal[i][j], BINAURAL_NTAPS_MAX ); - mvr2r( rightBRIRImag[i][j], HrtfFastConv->rightBRIRImag[i][j], BINAURAL_NTAPS_MAX ); + HrtfFastConv->leftBRIRReal[i][j] = leftBRIRReal[i][j]; + HrtfFastConv->leftBRIRImag[i][j] = leftBRIRImag[i][j]; + HrtfFastConv->rightBRIRReal[i][j] = rightBRIRReal[i][j]; + HrtfFastConv->rightBRIRImag[i][j] = rightBRIRImag[i][j]; } } if ( output_config == AUDIO_CONFIG_HOA3 ) { for ( j = 0; j < HOA3_CHANNELS; j++ ) { - mvr2r( leftHRIRReal_HOA3[i][j], HrtfFastConv->leftHRIRReal_HOA3[i][j], BINAURAL_NTAPS_SBA ); - mvr2r( leftHRIRImag_HOA3[i][j], HrtfFastConv->leftHRIRImag_HOA3[i][j], BINAURAL_NTAPS_SBA ); - mvr2r( rightHRIRReal_HOA3[i][j], HrtfFastConv->rightHRIRReal_HOA3[i][j], BINAURAL_NTAPS_SBA ); - mvr2r( rightHRIRImag_HOA3[i][j], HrtfFastConv->rightHRIRImag_HOA3[i][j], BINAURAL_NTAPS_SBA ); + HrtfFastConv->leftHRIRReal_HOA3[i][j] = leftHRIRReal_HOA3[i][j]; + HrtfFastConv->leftHRIRImag_HOA3[i][j] = leftHRIRImag_HOA3[i][j]; + HrtfFastConv->rightHRIRReal_HOA3[i][j] = rightHRIRReal_HOA3[i][j]; + HrtfFastConv->rightHRIRImag_HOA3[i][j] = rightHRIRImag_HOA3[i][j]; } } if ( output_config == AUDIO_CONFIG_HOA2 ) { for ( j = 0; j < HOA2_CHANNELS; j++ ) { - mvr2r( leftHRIRReal_HOA2[i][j], HrtfFastConv->leftHRIRReal_HOA2[i][j], BINAURAL_NTAPS_SBA ); - mvr2r( leftHRIRImag_HOA2[i][j], HrtfFastConv->leftHRIRImag_HOA2[i][j], BINAURAL_NTAPS_SBA ); - mvr2r( rightHRIRReal_HOA2[i][j], HrtfFastConv->rightHRIRReal_HOA2[i][j], BINAURAL_NTAPS_SBA ); - mvr2r( rightHRIRImag_HOA2[i][j], HrtfFastConv->rightHRIRImag_HOA2[i][j], BINAURAL_NTAPS_SBA ); + HrtfFastConv->leftHRIRReal_HOA2[i][j] = leftHRIRReal_HOA2[i][j]; + HrtfFastConv->leftHRIRImag_HOA2[i][j] = leftHRIRImag_HOA2[i][j]; + HrtfFastConv->rightHRIRReal_HOA2[i][j] = rightHRIRReal_HOA2[i][j]; + HrtfFastConv->rightHRIRImag_HOA2[i][j] = rightHRIRImag_HOA2[i][j]; } } if ( output_config == AUDIO_CONFIG_FOA ) { for ( j = 0; j < FOA_CHANNELS; j++ ) { - mvr2r( leftHRIRReal_FOA[i][j], HrtfFastConv->leftHRIRReal_FOA[i][j], BINAURAL_NTAPS_SBA ); - mvr2r( leftHRIRImag_FOA[i][j], HrtfFastConv->leftHRIRImag_FOA[i][j], BINAURAL_NTAPS_SBA ); - mvr2r( rightHRIRReal_FOA[i][j], HrtfFastConv->rightHRIRReal_FOA[i][j], BINAURAL_NTAPS_SBA ); - mvr2r( rightHRIRImag_FOA[i][j], HrtfFastConv->rightHRIRImag_FOA[i][j], BINAURAL_NTAPS_SBA ); + HrtfFastConv->leftHRIRReal_FOA[i][j] = leftHRIRReal_FOA[i][j]; + HrtfFastConv->leftHRIRImag_FOA[i][j] = leftHRIRImag_FOA[i][j]; + HrtfFastConv->rightHRIRReal_FOA[i][j] = rightHRIRReal_FOA[i][j]; + HrtfFastConv->rightHRIRImag_FOA[i][j] = rightHRIRImag_FOA[i][j]; } } #else @@ -1202,7 +1541,7 @@ ivas_error ivas_rend_openCldfbRend( } /* Load HRTF tables */ #ifdef FIX_1720_HRTF_FASTCONV - ivas_binaural_hrtf_open( &pCldfbRend->hHrtfFastConv, hBinRenderer->hInputSetup->output_config, RENDERER_BINAURAL_FASTCONV ); + ivas_binaural_hrtf_open( &pCldfbRend->hHrtfFastConv, hBinRenderer->hInputSetup->output_config, RENDERER_BINAURAL_FASTCONV, hBinRenderer->hInputSetup->is_loudspeaker_setup ); #else ivas_binaural_hrtf_open( &pCldfbRend->hHrtfFastConv ); #endif @@ -1308,7 +1647,7 @@ ivas_error ivas_binRenderer_open( /* Load HRTF tables */ #ifdef FIX_1720_HRTF_FASTCONV - ivas_binaural_hrtf_open( &st_ivas->hHrtfFastConv, st_ivas->hIntSetup.output_config, st_ivas->renderer_type ); + ivas_binaural_hrtf_open( &st_ivas->hHrtfFastConv, st_ivas->hIntSetup.output_config, st_ivas->renderer_type, st_ivas->hIntSetup.is_loudspeaker_setup ); #else ivas_binaural_hrtf_open( &st_ivas->hHrtfFastConv ); #endif @@ -1660,16 +1999,19 @@ void ivas_binaural_hrtf_close( { for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) { - for ( j = 0; j < HRTF_LS_CHANNELS; j++ ) + if ( ( *hHrtfFastConv )->allocate_init_flag == 0 ) { - free( ( *hHrtfFastConv )->leftHRIRReal[i][j] ); - ( *hHrtfFastConv )->leftHRIRReal[i][j] = NULL; - free( ( *hHrtfFastConv )->leftHRIRImag[i][j] ); - ( *hHrtfFastConv )->leftHRIRImag[i][j] = NULL; - free( ( *hHrtfFastConv )->rightHRIRReal[i][j] ); - ( *hHrtfFastConv )->rightHRIRReal[i][j] = NULL; - free( ( *hHrtfFastConv )->rightHRIRImag[i][j] ); - ( *hHrtfFastConv )->rightHRIRImag[i][j] = NULL; + for ( j = 0; j < HRTF_LS_CHANNELS; j++ ) + { + free( ( *hHrtfFastConv )->leftHRIRReal[i][j] ); + ( *hHrtfFastConv )->leftHRIRReal[i][j] = NULL; + free( ( *hHrtfFastConv )->leftHRIRImag[i][j] ); + ( *hHrtfFastConv )->leftHRIRImag[i][j] = NULL; + free( ( *hHrtfFastConv )->rightHRIRReal[i][j] ); + ( *hHrtfFastConv )->rightHRIRReal[i][j] = NULL; + free( ( *hHrtfFastConv )->rightHRIRImag[i][j] ); + ( *hHrtfFastConv )->rightHRIRImag[i][j] = NULL; + } } free( ( *hHrtfFastConv )->leftHRIRReal[i] ); ( *hHrtfFastConv )->leftHRIRReal[i] = NULL; @@ -1689,53 +2031,101 @@ void ivas_binaural_hrtf_close( free( ( *hHrtfFastConv )->rightHRIRImag ); ( *hHrtfFastConv )->rightHRIRImag = NULL; } - if ( ( *hHrtfFastConv )->leftBRIRReal != NULL && ( *hHrtfFastConv )->leftBRIRImag != NULL && ( *hHrtfFastConv )->rightBRIRReal != NULL && ( *hHrtfFastConv )->rightBRIRImag != NULL ) + if ( ( *hHrtfFastConv )->allocate_init_flag == 0 ) { - for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) + if ( ( *hHrtfFastConv )->leftBRIRReal != NULL && ( *hHrtfFastConv )->leftBRIRImag != NULL && ( *hHrtfFastConv )->rightBRIRReal != NULL && ( *hHrtfFastConv )->rightBRIRImag != NULL ) { - for ( j = 0; j < HRTF_LS_CHANNELS; j++ ) + for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) + { + if ( ( *hHrtfFastConv )->allocate_init_flag == 0 ) + { + for ( j = 0; j < HRTF_LS_CHANNELS; j++ ) + { + free( ( *hHrtfFastConv )->leftBRIRReal[i][j] ); + ( *hHrtfFastConv )->leftBRIRReal[i][j] = NULL; + free( ( *hHrtfFastConv )->leftBRIRImag[i][j] ); + ( *hHrtfFastConv )->leftBRIRImag[i][j] = NULL; + free( ( *hHrtfFastConv )->rightBRIRReal[i][j] ); + ( *hHrtfFastConv )->rightBRIRReal[i][j] = NULL; + free( ( *hHrtfFastConv )->rightBRIRImag[i][j] ); + ( *hHrtfFastConv )->rightBRIRImag[i][j] = NULL; + } + } + free( ( *hHrtfFastConv )->leftBRIRReal[i] ); + ( *hHrtfFastConv )->leftBRIRReal[i] = NULL; + free( ( *hHrtfFastConv )->leftBRIRImag[i] ); + ( *hHrtfFastConv )->leftBRIRImag[i] = NULL; + free( ( *hHrtfFastConv )->rightBRIRReal[i] ); + ( *hHrtfFastConv )->rightBRIRReal[i] = NULL; + free( ( *hHrtfFastConv )->rightBRIRImag[i] ); + ( *hHrtfFastConv )->rightBRIRImag[i] = NULL; + } + free( ( *hHrtfFastConv )->leftBRIRReal ); + ( *hHrtfFastConv )->leftBRIRReal = NULL; + free( ( *hHrtfFastConv )->leftBRIRImag ); + ( *hHrtfFastConv )->leftBRIRImag = NULL; + free( ( *hHrtfFastConv )->rightBRIRReal ); + ( *hHrtfFastConv )->rightBRIRReal = NULL; + free( ( *hHrtfFastConv )->rightBRIRImag ); + ( *hHrtfFastConv )->rightBRIRImag = NULL; + } + } + if ( ( *hHrtfFastConv )->allocate_init_flag == 1 ) + { + if ( ( *hHrtfFastConv )->leftBRIRReal != NULL && ( *hHrtfFastConv )->leftBRIRImag != NULL && ( *hHrtfFastConv )->rightBRIRReal != NULL && ( *hHrtfFastConv )->rightBRIRImag != NULL ) + { + for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) { - free( ( *hHrtfFastConv )->leftBRIRReal[i][j] ); - ( *hHrtfFastConv )->leftBRIRReal[i][j] = NULL; - free( ( *hHrtfFastConv )->leftBRIRImag[i][j] ); - ( *hHrtfFastConv )->leftBRIRImag[i][j] = NULL; - free( ( *hHrtfFastConv )->rightBRIRReal[i][j] ); - ( *hHrtfFastConv )->rightBRIRReal[i][j] = NULL; - free( ( *hHrtfFastConv )->rightBRIRImag[i][j] ); - ( *hHrtfFastConv )->rightBRIRImag[i][j] = NULL; - } - free( ( *hHrtfFastConv )->leftBRIRReal[i] ); - ( *hHrtfFastConv )->leftBRIRReal[i] = NULL; - free( ( *hHrtfFastConv )->leftBRIRImag[i] ); - ( *hHrtfFastConv )->leftBRIRImag[i] = NULL; - free( ( *hHrtfFastConv )->rightBRIRReal[i] ); - ( *hHrtfFastConv )->rightBRIRReal[i] = NULL; - free( ( *hHrtfFastConv )->rightBRIRImag[i] ); - ( *hHrtfFastConv )->rightBRIRImag[i] = NULL; - } - free( ( *hHrtfFastConv )->leftBRIRReal ); - ( *hHrtfFastConv )->leftBRIRReal = NULL; - free( ( *hHrtfFastConv )->leftBRIRImag ); - ( *hHrtfFastConv )->leftBRIRImag = NULL; - free( ( *hHrtfFastConv )->rightBRIRReal ); - ( *hHrtfFastConv )->rightBRIRReal = NULL; - free( ( *hHrtfFastConv )->rightBRIRImag ); - ( *hHrtfFastConv )->rightBRIRImag = NULL; + if ( ( *hHrtfFastConv )->allocate_init_flag == 0 ) + { + for ( j = 0; j < ( *hHrtfFastConv )->nChannels; j++ ) + { + free( ( *hHrtfFastConv )->leftBRIRReal[i][j] ); + ( *hHrtfFastConv )->leftBRIRReal[i][j] = NULL; + free( ( *hHrtfFastConv )->leftBRIRImag[i][j] ); + ( *hHrtfFastConv )->leftBRIRImag[i][j] = NULL; + free( ( *hHrtfFastConv )->rightBRIRReal[i][j] ); + ( *hHrtfFastConv )->rightBRIRReal[i][j] = NULL; + free( ( *hHrtfFastConv )->rightBRIRImag[i][j] ); + ( *hHrtfFastConv )->rightBRIRImag[i][j] = NULL; + } + } + free( ( *hHrtfFastConv )->leftBRIRReal[i] ); + ( *hHrtfFastConv )->leftBRIRReal[i] = NULL; + free( ( *hHrtfFastConv )->leftBRIRImag[i] ); + ( *hHrtfFastConv )->leftBRIRImag[i] = NULL; + free( ( *hHrtfFastConv )->rightBRIRReal[i] ); + ( *hHrtfFastConv )->rightBRIRReal[i] = NULL; + free( ( *hHrtfFastConv )->rightBRIRImag[i] ); + ( *hHrtfFastConv )->rightBRIRImag[i] = NULL; + } + free( ( *hHrtfFastConv )->leftBRIRReal ); + ( *hHrtfFastConv )->leftBRIRReal = NULL; + free( ( *hHrtfFastConv )->leftBRIRImag ); + ( *hHrtfFastConv )->leftBRIRImag = NULL; + free( ( *hHrtfFastConv )->rightBRIRReal ); + ( *hHrtfFastConv )->rightBRIRReal = NULL; + free( ( *hHrtfFastConv )->rightBRIRImag ); + ( *hHrtfFastConv )->rightBRIRImag = NULL; + } } if ( ( *hHrtfFastConv )->leftHRIRReal_HOA3 != NULL && ( *hHrtfFastConv )->leftHRIRImag_HOA3 != NULL && ( *hHrtfFastConv )->rightHRIRReal_HOA3 != NULL && ( *hHrtfFastConv )->rightHRIRImag_HOA3 != NULL ) { for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) { - for ( j = 0; j < HOA3_CHANNELS; j++ ) + if ( ( *hHrtfFastConv )->allocate_init_flag == 0 ) { - free( ( *hHrtfFastConv )->leftHRIRReal_HOA3[i][j] ); - ( *hHrtfFastConv )->leftHRIRReal_HOA3[i][j] = NULL; - free( ( *hHrtfFastConv )->leftHRIRImag_HOA3[i][j] ); - ( *hHrtfFastConv )->leftHRIRImag_HOA3[i][j] = NULL; - free( ( *hHrtfFastConv )->rightHRIRReal_HOA3[i][j] ); - ( *hHrtfFastConv )->rightHRIRReal_HOA3[i][j] = NULL; - free( ( *hHrtfFastConv )->rightHRIRImag_HOA3[i][j] ); - ( *hHrtfFastConv )->rightHRIRImag_HOA3[i][j] = NULL; + for ( j = 0; j < HOA3_CHANNELS; j++ ) + { + free( ( *hHrtfFastConv )->leftHRIRReal_HOA3[i][j] ); + ( *hHrtfFastConv )->leftHRIRReal_HOA3[i][j] = NULL; + free( ( *hHrtfFastConv )->leftHRIRImag_HOA3[i][j] ); + ( *hHrtfFastConv )->leftHRIRImag_HOA3[i][j] = NULL; + free( ( *hHrtfFastConv )->rightHRIRReal_HOA3[i][j] ); + ( *hHrtfFastConv )->rightHRIRReal_HOA3[i][j] = NULL; + free( ( *hHrtfFastConv )->rightHRIRImag_HOA3[i][j] ); + ( *hHrtfFastConv )->rightHRIRImag_HOA3[i][j] = NULL; + } } free( ( *hHrtfFastConv )->leftHRIRReal_HOA3[i] ); ( *hHrtfFastConv )->leftHRIRReal_HOA3[i] = NULL; @@ -1759,16 +2149,19 @@ void ivas_binaural_hrtf_close( { for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) { - for ( j = 0; j < HOA2_CHANNELS; j++ ) + if ( ( *hHrtfFastConv )->allocate_init_flag == 0 ) { - free( ( *hHrtfFastConv )->leftHRIRReal_HOA2[i][j] ); - ( *hHrtfFastConv )->leftHRIRReal_HOA2[i][j] = NULL; - free( ( *hHrtfFastConv )->leftHRIRImag_HOA2[i][j] ); - ( *hHrtfFastConv )->leftHRIRImag_HOA2[i][j] = NULL; - free( ( *hHrtfFastConv )->rightHRIRReal_HOA2[i][j] ); - ( *hHrtfFastConv )->rightHRIRReal_HOA2[i][j] = NULL; - free( ( *hHrtfFastConv )->rightHRIRImag_HOA2[i][j] ); - ( *hHrtfFastConv )->rightHRIRImag_HOA2[i][j] = NULL; + for ( j = 0; j < HOA2_CHANNELS; j++ ) + { + free( ( *hHrtfFastConv )->leftHRIRReal_HOA2[i][j] ); + ( *hHrtfFastConv )->leftHRIRReal_HOA2[i][j] = NULL; + free( ( *hHrtfFastConv )->leftHRIRImag_HOA2[i][j] ); + ( *hHrtfFastConv )->leftHRIRImag_HOA2[i][j] = NULL; + free( ( *hHrtfFastConv )->rightHRIRReal_HOA2[i][j] ); + ( *hHrtfFastConv )->rightHRIRReal_HOA2[i][j] = NULL; + free( ( *hHrtfFastConv )->rightHRIRImag_HOA2[i][j] ); + ( *hHrtfFastConv )->rightHRIRImag_HOA2[i][j] = NULL; + } } free( ( *hHrtfFastConv )->leftHRIRReal_HOA2[i] ); ( *hHrtfFastConv )->leftHRIRReal_HOA2[i] = NULL; @@ -1792,16 +2185,19 @@ void ivas_binaural_hrtf_close( { for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) { - for ( j = 0; j < FOA_CHANNELS; j++ ) + if ( ( *hHrtfFastConv )->allocate_init_flag == 0 ) { - free( ( *hHrtfFastConv )->leftHRIRReal_FOA[i][j] ); - ( *hHrtfFastConv )->leftHRIRReal_FOA[i][j] = NULL; - free( ( *hHrtfFastConv )->leftHRIRImag_FOA[i][j] ); - ( *hHrtfFastConv )->leftHRIRImag_FOA[i][j] = NULL; - free( ( *hHrtfFastConv )->rightHRIRReal_FOA[i][j] ); - ( *hHrtfFastConv )->rightHRIRReal_FOA[i][j] = NULL; - free( ( *hHrtfFastConv )->rightHRIRImag_FOA[i][j] ); - ( *hHrtfFastConv )->rightHRIRImag_FOA[i][j] = NULL; + for ( j = 0; j < FOA_CHANNELS; j++ ) + { + free( ( *hHrtfFastConv )->leftHRIRReal_FOA[i][j] ); + ( *hHrtfFastConv )->leftHRIRReal_FOA[i][j] = NULL; + free( ( *hHrtfFastConv )->leftHRIRImag_FOA[i][j] ); + ( *hHrtfFastConv )->leftHRIRImag_FOA[i][j] = NULL; + free( ( *hHrtfFastConv )->rightHRIRReal_FOA[i][j] ); + ( *hHrtfFastConv )->rightHRIRReal_FOA[i][j] = NULL; + free( ( *hHrtfFastConv )->rightHRIRImag_FOA[i][j] ); + ( *hHrtfFastConv )->rightHRIRImag_FOA[i][j] = NULL; + } } free( ( *hHrtfFastConv )->leftHRIRReal_FOA[i] ); ( *hHrtfFastConv )->leftHRIRReal_FOA[i] = NULL; diff --git a/lib_rend/ivas_stat_rend.h b/lib_rend/ivas_stat_rend.h index 9318ad36a0..56294ae114 100644 --- a/lib_rend/ivas_stat_rend.h +++ b/lib_rend/ivas_stat_rend.h @@ -1021,6 +1021,8 @@ typedef struct ivas_hrtfs_fastconv_struct float ***rightHRIRImag_FOA; float FASTCONV_FOA_latency_s; BINAURAL_INPUT_AUDIO_CONFIG input_cfg_var; + int16_t allocate_init_flag; + int16_t nChannels; #else #ifdef UPDATE_FASTCONV_SBA_FILTER float leftHRIRReal_HOA3[BINAURAL_CONVBANDS][HOA3_CHANNELS][BINAURAL_NTAPS_SBA]; diff --git a/lib_util/hrtf_file_reader.c b/lib_util/hrtf_file_reader.c index a18c653ce8..fd7e339084 100644 --- a/lib_util/hrtf_file_reader.c +++ b/lib_util/hrtf_file_reader.c @@ -1057,7 +1057,8 @@ static ivas_error create_fastconv_HRTF_from_rawdata( char *hrtf_data_rptr; #ifdef FIX_1720_HRTF_FASTCONV ( *hHRTF )->input_cfg_var = input_cfg; - ivas_allocate_binaural_hrtf( *hHRTF, 0, input_cfg, rend_type ); + ( *hHRTF )->allocate_init_flag = 0; + ivas_allocate_binaural_hrtf( *hHRTF, 0, input_cfg, rend_type, 0, ( *hHRTF )->allocate_init_flag ); #endif // if ( hHRTF == NULL ) -- GitLab From 15e1ca83decc98ab21924d293e1be579a5e2f571 Mon Sep 17 00:00:00 2001 From: Shikha Shetgeri <100861@ittiam.com> Date: Mon, 24 Jul 2023 14:10:41 +0530 Subject: [PATCH 08/14] address review comments --- lib_com/options.h | 2 +- lib_dec/ivas_binRenderer_internal.c | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/lib_com/options.h b/lib_com/options.h index 1c93d7f080..c207df684f 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -187,7 +187,7 @@ #define COVARIANCE_MEMORY_OPT /* Dlb : Issue 231: define SPAR covariance buffers in stack instead of inter-frame heap */ #define NONBE_FIX_589_JBM_TC_OFFSETS /* FhG: issue 589: wrong offset into the TC buffers is used in some rendering paths in the JBM main rendering function */ #define FIX_MEM_REALLOC_IND_LIST /* VA: issue 601: failure of the automatic memory re-allocation mechanism when ind_list[] buffer is depleted in MASA mode with 2 TC*/ -#define FIX_1720_HRTF_FASTCONV /* Dlb : Binaural format RAM saving in SBA mode */ +#define FIX_1720_HRTF_FASTCONV /* Dlb : Binaural and Binaural room format RAM saving in SBA mode */ #define FIX_581_CLANG_OFFSET_TO_NULL /* FhG: issue 581: fix CLANG error about applying an offset to a NULL pointer */ #define JBM_PARAMUPMIX /* Dlb: Issue 471: Integrate the Multichannel Parametric Upmix into the JBM path */ #define FIX_582_INDEX_OUT_OF_BOUNDS_SNS_AVQ_DEC /* FhG: fix an undefined behaviour error in SNS AVQ decoding */ diff --git a/lib_dec/ivas_binRenderer_internal.c b/lib_dec/ivas_binRenderer_internal.c index 5868f4a572..b3b9663bf6 100644 --- a/lib_dec/ivas_binRenderer_internal.c +++ b/lib_dec/ivas_binRenderer_internal.c @@ -1172,12 +1172,12 @@ ivas_error ivas_allocate_binaural_hrtf( *-------------------------------------------------------------------------*/ static ivas_error ivas_binaural_hrtf_open( - HRTFS_FASTCONV_HANDLE *hHrtfFastConv + HRTFS_FASTCONV_HANDLE *hHrtfFastConv /* i : fastconv HRTF handle */ #ifdef FIX_1720_HRTF_FASTCONV , - AUDIO_CONFIG output_config, - RENDERER_TYPE renderer_type, - int8_t is_loudspeaker_setup + AUDIO_CONFIG output_config, /* i : output configuration */ + RENDERER_TYPE renderer_type, /* i : renderer type */ + int8_t is_loudspeaker_setup /* i : loudspeaker setup information */ #endif ) { @@ -1228,6 +1228,7 @@ static ivas_error ivas_binaural_hrtf_open( HrtfFastConv->FASTCONV_HOA2_latency_s = FASTCONV_HOA2_latency_s; HrtfFastConv->FASTCONV_FOA_latency_s = FASTCONV_FOA_latency_s; HrtfFastConv->FASTCONV_BRIR_latency_s = FASTCONV_BRIR_latency_s; + #endif for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) { -- GitLab From b2c699554f83bcc18c40d47b88370e182ad7de9b Mon Sep 17 00:00:00 2001 From: Shikha Shetgeri <100861@ittiam.com> Date: Mon, 24 Jul 2023 16:16:43 +0530 Subject: [PATCH 09/14] adding comments and removing extra line --- apps/decoder.c | 1 + lib_dec/ivas_binRenderer_internal.c | 13 +++++++------ lib_dec/ivas_init_dec.c | 2 ++ lib_rend/ivas_stat_rend.h | 5 +++-- lib_util/hrtf_file_reader.c | 2 ++ 5 files changed, 15 insertions(+), 8 deletions(-) diff --git a/apps/decoder.c b/apps/decoder.c index c430e9d041..6e3e23bb47 100644 --- a/apps/decoder.c +++ b/apps/decoder.c @@ -664,6 +664,7 @@ int main( } IVAS_DEC_HRTF_FASTCONV_HANDLE hHrtfFastConv = NULL; IVAS_DEC_GetHrtfFastConvHandle( hIvasDec, &hHrtfFastConv ); + if ( ( error = load_fastconv_HRTF_from_binary( hHrtfFastConv, hrtfReader ) ) != IVAS_ERR_OK ) { fprintf( stderr, "\nError in loading HRTF binary file %s for FastConv \n\n", arg.hrtfCRendFileName ); diff --git a/lib_dec/ivas_binRenderer_internal.c b/lib_dec/ivas_binRenderer_internal.c index b3b9663bf6..5b81375d30 100644 --- a/lib_dec/ivas_binRenderer_internal.c +++ b/lib_dec/ivas_binRenderer_internal.c @@ -496,12 +496,13 @@ static ivas_error ivas_binRenderer_convModuleOpen( *-------------------------------------------------------------------------*/ ivas_error ivas_allocate_binaural_hrtf( - HRTFS_FASTCONV *HrtfFastConv, - AUDIO_CONFIG output_config, - BINAURAL_INPUT_AUDIO_CONFIG input_config, - RENDERER_TYPE renderer_type, - int8_t is_loudspeaker_setup, - int16_t allocate_init_flag ) + HRTFS_FASTCONV *HrtfFastConv, /* i/o: FASTCONV HRTF structure */ + AUDIO_CONFIG output_config, /* i : output audio configuration */ + BINAURAL_INPUT_AUDIO_CONFIG input_config, /* i : binaural input audio config */ + RENDERER_TYPE renderer_type, /* i : renderer type */ + int8_t is_loudspeaker_setup, /* i : loudspeaker setup information */ + int16_t allocate_init_flag /* i : Memory allocation flag */ +) { int16_t i, j; /*malloc for HOA3, HOA2, FOA*/ diff --git a/lib_dec/ivas_init_dec.c b/lib_dec/ivas_init_dec.c index f5e754d826..48733a8846 100644 --- a/lib_dec/ivas_init_dec.c +++ b/lib_dec/ivas_init_dec.c @@ -663,6 +663,7 @@ ivas_error ivas_init_decoder_front( { return error; } + if ( ( error = ivas_HRTF_parambin_binary_open( &st_ivas->hHrtfParambin ) ) != IVAS_ERR_OK ) { return error; @@ -2037,6 +2038,7 @@ void ivas_destroy_dec( /* CRend binaural renderer handle */ ivas_HRTF_CRend_binary_close( &st_ivas->hSetOfHRTF ); #ifdef FIX_1720_HRTF_FASTCONV + /* Fastconv HRTF memories */ ivas_binaural_hrtf_close( &st_ivas->hHrtfFastConv ); #endif /* Fastconv HRTF filters */ diff --git a/lib_rend/ivas_stat_rend.h b/lib_rend/ivas_stat_rend.h index 131199e14c..ab4c53364b 100644 --- a/lib_rend/ivas_stat_rend.h +++ b/lib_rend/ivas_stat_rend.h @@ -1378,9 +1378,10 @@ typedef struct ivas_hrtfs_fastconv_struct float ***rightHRIRReal_FOA; float ***rightHRIRImag_FOA; float FASTCONV_FOA_latency_s; + BINAURAL_INPUT_AUDIO_CONFIG input_cfg_var; - int16_t allocate_init_flag; - int16_t nChannels; + int16_t allocate_init_flag; /*Memory allocation flag 0: if the hrtf pointers are allocated at application level , 1: of allocated at ivas_binaural_hrtf_open() */ + int16_t nChannels; /*Number of channels updated based on maximum of cicp table*/ #else #ifdef UPDATE_FASTCONV_SBA_FILTER float leftHRIRReal_HOA3[BINAURAL_CONVBANDS][HOA3_CHANNELS][BINAURAL_NTAPS_SBA]; diff --git a/lib_util/hrtf_file_reader.c b/lib_util/hrtf_file_reader.c index fd7e339084..78024cfddc 100644 --- a/lib_util/hrtf_file_reader.c +++ b/lib_util/hrtf_file_reader.c @@ -34,6 +34,7 @@ #include #include "prot.h" #include "ivas_prot_rend.h" + #ifdef FIX_1720_HRTF_FASTCONV #include "ivas_prot.h" #endif @@ -1544,6 +1545,7 @@ ivas_error load_fastconv_HRTF_from_binary( free( hrtf_data ); return IVAS_ERROR( IVAS_ERR_FAILED_FILE_READ, "Error in HRTF file reading" ); } + /* Create the HRTF reading the raw data from the binary file */ if ( ( create_fastconv_HRTF_from_rawdata( &hHrtfFastConv, hrtf_data, hrtf_header.rend_type, hrtf_header.input_cfg ) ) != IVAS_ERR_OK ) { -- GitLab From 0f487f6b2b7131efed64bdba20cef7b1b340d53c Mon Sep 17 00:00:00 2001 From: rtyag Date: Mon, 24 Jul 2023 22:58:16 +1000 Subject: [PATCH 10/14] rtyag comments --- lib_dec/ivas_binRenderer_internal.c | 11 ++++++++++- lib_util/hrtf_file_reader.c | 1 + 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/lib_dec/ivas_binRenderer_internal.c b/lib_dec/ivas_binRenderer_internal.c index 5b81375d30..2b266e5012 100644 --- a/lib_dec/ivas_binRenderer_internal.c +++ b/lib_dec/ivas_binRenderer_internal.c @@ -494,7 +494,9 @@ static ivas_error ivas_binRenderer_convModuleOpen( * * Allocate memory for HrtfFastConv structure elements *-------------------------------------------------------------------------*/ - +/*output_config is actually input_config. So please rename. +BINAURAL_INPUT_AUDIO_CONFIG input_config can renamed as BINAURAL_INPUT_AUDIO_CONFIG bin_input_config +*/ ivas_error ivas_allocate_binaural_hrtf( HRTFS_FASTCONV *HrtfFastConv, /* i/o: FASTCONV HRTF structure */ AUDIO_CONFIG output_config, /* i : output audio configuration */ @@ -514,6 +516,9 @@ ivas_error ivas_allocate_binaural_hrtf( } else { + /*Too much code duplication. Add a function that takes in tripple pointer and 3 dimension lengths as input and just call that function + for leftHRIRReal_HOA3, leftHRIRReal_HOA2, leftHRIRReal_FOA, leftHRIRReal, leftBRIRReal + */ if ( ( HrtfFastConv->leftHRIRReal_HOA3 = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRReal_HOA3" ); @@ -774,6 +779,7 @@ ivas_error ivas_allocate_binaural_hrtf( } } } + /*its not clear why BRIR buffer cant be allocated for HRTF_LS_CHANNELS always ?? and why we need to have all if checks for different LS configs*/ if ( allocate_init_flag == 1 ) { if ( renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM && is_loudspeaker_setup == 0 ) /*7_1_4*/ @@ -1248,6 +1254,9 @@ static ivas_error ivas_binaural_hrtf_open( { for ( j = 0; j < HrtfFastConv->nChannels; j++ ) { + /*HrtfFastConv->leftBRIRReal[i][j] can always be allocated for 15 channels. + No need to have HrtfFastConv->nChannels, simply use HRTF_LS_CHANNELS + */ HrtfFastConv->leftBRIRReal[i][j] = leftBRIRReal[i][j]; HrtfFastConv->leftBRIRImag[i][j] = leftBRIRImag[i][j]; HrtfFastConv->rightBRIRReal[i][j] = rightBRIRReal[i][j]; diff --git a/lib_util/hrtf_file_reader.c b/lib_util/hrtf_file_reader.c index 78024cfddc..4a88d85005 100644 --- a/lib_util/hrtf_file_reader.c +++ b/lib_util/hrtf_file_reader.c @@ -1436,6 +1436,7 @@ static ivas_error create_fastconv_HRTF_from_rawdata( for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) { + /*here it seems to be always execting HRTF_LS_CHANNELS channels*/ for ( j = 0; j < HRTF_LS_CHANNELS; j++ ) { memcpy( ( *hHRTF )->leftBRIRReal[i][j], hrtf_data_rptr, BINAURAL_NTAPS_MAX * sizeof( float ) ); -- GitLab From 32f030f13cff386f46e9861b7d1b1ad4bccc1ce7 Mon Sep 17 00:00:00 2001 From: Shikha Shetgeri <100861@ittiam.com> Date: Tue, 25 Jul 2023 00:08:33 +0530 Subject: [PATCH 11/14] address review comments --- lib_com/ivas_prot.h | 11 +- lib_dec/ivas_binRenderer_internal.c | 668 ++++------------------------ lib_util/hrtf_file_reader.c | 3 +- 3 files changed, 90 insertions(+), 592 deletions(-) diff --git a/lib_com/ivas_prot.h b/lib_com/ivas_prot.h index a047b462b0..c5561ae2be 100644 --- a/lib_com/ivas_prot.h +++ b/lib_com/ivas_prot.h @@ -5047,12 +5047,11 @@ void ivas_binaural_hrtf_close( ); ivas_error ivas_allocate_binaural_hrtf( - HRTFS_FASTCONV *HrtfFastConv, /* i : fastconv HRTF handle */ - AUDIO_CONFIG output_config, /* i : ouput audio config */ - BINAURAL_INPUT_AUDIO_CONFIG output_config_bin, /* i : binaural input audio config */ - RENDERER_TYPE renderer_type, - int8_t is_loudspeaker_setup, - int16_t allocate_init_flag + HRTFS_FASTCONV *HrtfFastConv, /* i/o: FASTCONV HRTF structure */ + AUDIO_CONFIG input_config, /* i : input audio configuration */ + BINAURAL_INPUT_AUDIO_CONFIG bin_input_config, /* i : binaural input audio config */ + RENDERER_TYPE renderer_type, /* i : renderer type */ + int16_t allocate_init_flag /* i : Memory allocation flag */ ); #endif diff --git a/lib_dec/ivas_binRenderer_internal.c b/lib_dec/ivas_binRenderer_internal.c index 2b266e5012..2bf0c14992 100644 --- a/lib_dec/ivas_binRenderer_internal.c +++ b/lib_dec/ivas_binRenderer_internal.c @@ -489,26 +489,59 @@ static ivas_error ivas_binRenderer_convModuleOpen( } #ifdef FIX_1720_HRTF_FASTCONV +/*-------------------------------------------------------------------------* + * ivas_alloc_pppMem() + * + * Allocate memory for tripple pointer elements + *-------------------------------------------------------------------------*/ + +static ivas_error ivas_alloc_pppMem( float ****pppMem, int32_t dim1, int32_t dim2, int32_t dim3, int16_t allocate_init_flag ) +{ + int32_t i, j; + float ***localMem = NULL; + + if ( ( localMem = (float ***) malloc( dim1 * sizeof( float ** ) ) ) == NULL ) + { + return IVAS_ERR_FAILED_ALLOC; + } + for ( i = 0; i < dim1; i++ ) + { + if ( ( localMem[i] = (float **) malloc( dim2 * sizeof( float * ) ) ) == NULL ) + { + return IVAS_ERR_FAILED_ALLOC; + } + if ( allocate_init_flag == 0 ) + { + for ( j = 0; j < dim2; j++ ) + { + if ( ( localMem[i][j] = (float *) malloc( dim3 * sizeof( float ) ) ) == NULL ) + { + return IVAS_ERR_FAILED_ALLOC; + } + } + } + } + + *pppMem = localMem; + + return IVAS_ERR_OK; +} + /*-------------------------------------------------------------------------* * ivas_allocate_binaural_hrtf() * * Allocate memory for HrtfFastConv structure elements *-------------------------------------------------------------------------*/ -/*output_config is actually input_config. So please rename. -BINAURAL_INPUT_AUDIO_CONFIG input_config can renamed as BINAURAL_INPUT_AUDIO_CONFIG bin_input_config -*/ + ivas_error ivas_allocate_binaural_hrtf( - HRTFS_FASTCONV *HrtfFastConv, /* i/o: FASTCONV HRTF structure */ - AUDIO_CONFIG output_config, /* i : output audio configuration */ - BINAURAL_INPUT_AUDIO_CONFIG input_config, /* i : binaural input audio config */ - RENDERER_TYPE renderer_type, /* i : renderer type */ - int8_t is_loudspeaker_setup, /* i : loudspeaker setup information */ - int16_t allocate_init_flag /* i : Memory allocation flag */ + HRTFS_FASTCONV *HrtfFastConv, /* i/o: FASTCONV HRTF structure */ + AUDIO_CONFIG input_config, /* i : input audio configuration */ + BINAURAL_INPUT_AUDIO_CONFIG bin_input_config, /* i : binaural input audio config */ + RENDERER_TYPE renderer_type, /* i : renderer type */ + int16_t allocate_init_flag /* i : Memory allocation flag */ ) { - int16_t i, j; - /*malloc for HOA3, HOA2, FOA*/ - if ( output_config == AUDIO_CONFIG_HOA3 || input_config == BINAURAL_INPUT_AUDIO_CONFIG_HOA3 ) + if ( input_config == AUDIO_CONFIG_HOA3 || bin_input_config == BINAURAL_INPUT_AUDIO_CONFIG_HOA3 ) { if ( ( HrtfFastConv->leftHRIRReal_HOA3 != NULL ) && ( HrtfFastConv->leftHRIRImag_HOA3 != NULL ) && ( HrtfFastConv->rightHRIRReal_HOA3 != NULL ) && ( HrtfFastConv->rightHRIRImag_HOA3 != NULL ) ) { @@ -516,69 +549,25 @@ ivas_error ivas_allocate_binaural_hrtf( } else { - /*Too much code duplication. Add a function that takes in tripple pointer and 3 dimension lengths as input and just call that function - for leftHRIRReal_HOA3, leftHRIRReal_HOA2, leftHRIRReal_FOA, leftHRIRReal, leftBRIRReal - */ - if ( ( HrtfFastConv->leftHRIRReal_HOA3 = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) + if ( IVAS_ERR_OK != ivas_alloc_pppMem( &HrtfFastConv->leftHRIRReal_HOA3, BINAURAL_CONVBANDS, HOA3_CHANNELS, BINAURAL_NTAPS_SBA, allocate_init_flag ) ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRReal_HOA3" ); } - if ( ( HrtfFastConv->leftHRIRImag_HOA3 = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) + if ( IVAS_ERR_OK != ivas_alloc_pppMem( &HrtfFastConv->leftHRIRImag_HOA3, BINAURAL_CONVBANDS, HOA3_CHANNELS, BINAURAL_NTAPS_SBA, allocate_init_flag ) ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRImag_HOA3" ); } - if ( ( HrtfFastConv->rightHRIRReal_HOA3 = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) + if ( IVAS_ERR_OK != ivas_alloc_pppMem( &HrtfFastConv->rightHRIRReal_HOA3, BINAURAL_CONVBANDS, HOA3_CHANNELS, BINAURAL_NTAPS_SBA, allocate_init_flag ) ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRReal_HOA3" ); } - if ( ( HrtfFastConv->rightHRIRImag_HOA3 = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) + if ( IVAS_ERR_OK != ivas_alloc_pppMem( &HrtfFastConv->rightHRIRImag_HOA3, BINAURAL_CONVBANDS, HOA3_CHANNELS, BINAURAL_NTAPS_SBA, allocate_init_flag ) ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRImag_HOA3" ); } - for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) - { - if ( ( HrtfFastConv->leftHRIRReal_HOA3[i] = (float **) malloc( HOA3_CHANNELS * sizeof( float * ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRReal_HOA3" ); - } - if ( ( HrtfFastConv->leftHRIRImag_HOA3[i] = (float **) malloc( HOA3_CHANNELS * sizeof( float * ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRImag_HOA3" ); - } - if ( ( HrtfFastConv->rightHRIRReal_HOA3[i] = (float **) malloc( HOA3_CHANNELS * sizeof( float * ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRImag_HOA3" ); - } - if ( ( HrtfFastConv->rightHRIRImag_HOA3[i] = (float **) malloc( HOA3_CHANNELS * sizeof( float * ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRImag_HOA3" ); - } - if ( allocate_init_flag == 0 ) - { - for ( j = 0; j < HOA3_CHANNELS; j++ ) - { - if ( ( HrtfFastConv->leftHRIRReal_HOA3[i][j] = (float *) malloc( BINAURAL_NTAPS_SBA * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRReal_HOA3" ); - } - if ( ( HrtfFastConv->leftHRIRImag_HOA3[i][j] = (float *) malloc( BINAURAL_NTAPS_SBA * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRImag_HOA3" ); - } - if ( ( HrtfFastConv->rightHRIRReal_HOA3[i][j] = (float *) malloc( BINAURAL_NTAPS_SBA * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRReal_HOA3" ); - } - if ( ( HrtfFastConv->rightHRIRImag_HOA3[i][j] = (float *) malloc( BINAURAL_NTAPS_SBA * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRImag_HOA3" ); - } - } - } - } } } - if ( output_config == AUDIO_CONFIG_HOA2 || input_config == BINAURAL_INPUT_AUDIO_CONFIG_HOA2 ) + if ( input_config == AUDIO_CONFIG_HOA2 || bin_input_config == BINAURAL_INPUT_AUDIO_CONFIG_HOA2 ) { if ( ( HrtfFastConv->leftHRIRReal_HOA2 != NULL ) && ( HrtfFastConv->leftHRIRImag_HOA2 != NULL ) && ( HrtfFastConv->rightHRIRReal_HOA2 != NULL ) && ( HrtfFastConv->rightHRIRImag_HOA2 != NULL ) ) { @@ -586,66 +575,25 @@ ivas_error ivas_allocate_binaural_hrtf( } else { - if ( ( HrtfFastConv->leftHRIRReal_HOA2 = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) + if ( IVAS_ERR_OK != ivas_alloc_pppMem( &HrtfFastConv->leftHRIRReal_HOA2, BINAURAL_CONVBANDS, HOA2_CHANNELS, BINAURAL_NTAPS_SBA, allocate_init_flag ) ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRReal_HOA2" ); } - if ( ( HrtfFastConv->leftHRIRImag_HOA2 = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) + if ( IVAS_ERR_OK != ivas_alloc_pppMem( &HrtfFastConv->leftHRIRImag_HOA2, BINAURAL_CONVBANDS, HOA2_CHANNELS, BINAURAL_NTAPS_SBA, allocate_init_flag ) ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRImag_HOA2" ); } - if ( ( HrtfFastConv->rightHRIRReal_HOA2 = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) + if ( IVAS_ERR_OK != ivas_alloc_pppMem( &HrtfFastConv->rightHRIRReal_HOA2, BINAURAL_CONVBANDS, HOA2_CHANNELS, BINAURAL_NTAPS_SBA, allocate_init_flag ) ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRReal_HOA2" ); } - if ( ( HrtfFastConv->rightHRIRImag_HOA2 = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) + if ( IVAS_ERR_OK != ivas_alloc_pppMem( &HrtfFastConv->rightHRIRImag_HOA2, BINAURAL_CONVBANDS, HOA2_CHANNELS, BINAURAL_NTAPS_SBA, allocate_init_flag ) ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRImag_HOA2" ); } - for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) - { - if ( ( HrtfFastConv->leftHRIRReal_HOA2[i] = (float **) malloc( HOA2_CHANNELS * sizeof( float * ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRReal_HOA2" ); - } - if ( ( HrtfFastConv->leftHRIRImag_HOA2[i] = (float **) malloc( HOA2_CHANNELS * sizeof( float * ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRImag_HOA2" ); - } - if ( ( HrtfFastConv->rightHRIRReal_HOA2[i] = (float **) malloc( HOA2_CHANNELS * sizeof( float * ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRImag_HOA2" ); - } - if ( ( HrtfFastConv->rightHRIRImag_HOA2[i] = (float **) malloc( HOA2_CHANNELS * sizeof( float * ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRImag_HOA2" ); - } - if ( allocate_init_flag == 0 ) - { - for ( j = 0; j < HOA2_CHANNELS; j++ ) - { - if ( ( HrtfFastConv->leftHRIRReal_HOA2[i][j] = (float *) malloc( BINAURAL_NTAPS_SBA * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRReal_HOA2" ); - } - if ( ( HrtfFastConv->leftHRIRImag_HOA2[i][j] = (float *) malloc( BINAURAL_NTAPS_SBA * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRImag_HOA2" ); - } - if ( ( HrtfFastConv->rightHRIRReal_HOA2[i][j] = (float *) malloc( BINAURAL_NTAPS_SBA * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRReal_HOA2" ); - } - if ( ( HrtfFastConv->rightHRIRImag_HOA2[i][j] = (float *) malloc( BINAURAL_NTAPS_SBA * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRImag_HOA2" ); - } - } - } - } } } - if ( output_config == AUDIO_CONFIG_FOA || input_config == BINAURAL_INPUT_AUDIO_CONFIG_FOA ) + if ( input_config == AUDIO_CONFIG_FOA || bin_input_config == BINAURAL_INPUT_AUDIO_CONFIG_FOA ) { if ( ( HrtfFastConv->leftHRIRReal_FOA != NULL ) && ( HrtfFastConv->leftHRIRImag_FOA != NULL ) && ( HrtfFastConv->rightHRIRReal_FOA != NULL ) && ( HrtfFastConv->rightHRIRImag_FOA != NULL ) ) { @@ -653,66 +601,25 @@ ivas_error ivas_allocate_binaural_hrtf( } else { - if ( ( HrtfFastConv->leftHRIRReal_FOA = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) + if ( IVAS_ERR_OK != ivas_alloc_pppMem( &HrtfFastConv->leftHRIRReal_FOA, BINAURAL_CONVBANDS, FOA_CHANNELS, BINAURAL_NTAPS_SBA, allocate_init_flag ) ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRReal_FOA" ); } - if ( ( HrtfFastConv->leftHRIRImag_FOA = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) + if ( IVAS_ERR_OK != ivas_alloc_pppMem( &HrtfFastConv->leftHRIRImag_FOA, BINAURAL_CONVBANDS, FOA_CHANNELS, BINAURAL_NTAPS_SBA, allocate_init_flag ) ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRImag_FOA" ); } - if ( ( HrtfFastConv->rightHRIRReal_FOA = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) + if ( IVAS_ERR_OK != ivas_alloc_pppMem( &HrtfFastConv->rightHRIRReal_FOA, BINAURAL_CONVBANDS, FOA_CHANNELS, BINAURAL_NTAPS_SBA, allocate_init_flag ) ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRReal_FOA" ); } - if ( ( HrtfFastConv->rightHRIRImag_FOA = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) + if ( IVAS_ERR_OK != ivas_alloc_pppMem( &HrtfFastConv->rightHRIRImag_FOA, BINAURAL_CONVBANDS, FOA_CHANNELS, BINAURAL_NTAPS_SBA, allocate_init_flag ) ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRImag_FOA" ); } - for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) - { - if ( ( HrtfFastConv->leftHRIRReal_FOA[i] = (float **) malloc( FOA_CHANNELS * sizeof( float * ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRReal_FOA" ); - } - if ( ( HrtfFastConv->leftHRIRImag_FOA[i] = (float **) malloc( FOA_CHANNELS * sizeof( float * ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRImag_FOA" ); - } - if ( ( HrtfFastConv->rightHRIRReal_FOA[i] = (float **) malloc( FOA_CHANNELS * sizeof( float * ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRImag_FOA" ); - } - if ( ( HrtfFastConv->rightHRIRImag_FOA[i] = (float **) malloc( FOA_CHANNELS * sizeof( float * ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRImag_FOA" ); - } - if ( allocate_init_flag == 0 ) - { - for ( j = 0; j < FOA_CHANNELS; j++ ) - { - if ( ( HrtfFastConv->leftHRIRReal_FOA[i][j] = (float *) malloc( BINAURAL_NTAPS_SBA * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRReal_FOA" ); - } - if ( ( HrtfFastConv->leftHRIRImag_FOA[i][j] = (float *) malloc( BINAURAL_NTAPS_SBA * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRImag_FOA" ); - } - if ( ( HrtfFastConv->rightHRIRReal_FOA[i][j] = (float *) malloc( BINAURAL_NTAPS_SBA * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRReal_FOA" ); - } - if ( ( HrtfFastConv->rightHRIRImag_FOA[i][j] = (float *) malloc( BINAURAL_NTAPS_SBA * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRImag_FOA" ); - } - } - } - } } } - if ( renderer_type == RENDERER_BINAURAL_FASTCONV || input_config == BINAURAL_INPUT_AUDIO_CONFIG_COMBINED ) + if ( renderer_type == RENDERER_BINAURAL_FASTCONV || bin_input_config == BINAURAL_INPUT_AUDIO_CONFIG_COMBINED ) { if ( ( HrtfFastConv->leftHRIRReal != NULL ) && ( HrtfFastConv->leftHRIRImag != NULL ) && ( HrtfFastConv->rightHRIRReal != NULL ) && ( HrtfFastConv->rightHRIRImag != NULL ) ) { @@ -720,451 +627,48 @@ ivas_error ivas_allocate_binaural_hrtf( } else { - if ( ( HrtfFastConv->leftHRIRReal = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) + + if ( IVAS_ERR_OK != ivas_alloc_pppMem( &HrtfFastConv->leftHRIRReal, BINAURAL_CONVBANDS, HRTF_LS_CHANNELS, BINAURAL_NTAPS, allocate_init_flag ) ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRReal" ); } - if ( ( HrtfFastConv->leftHRIRImag = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) + if ( IVAS_ERR_OK != ivas_alloc_pppMem( &HrtfFastConv->leftHRIRImag, BINAURAL_CONVBANDS, HRTF_LS_CHANNELS, BINAURAL_NTAPS, allocate_init_flag ) ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRImag" ); } - if ( ( HrtfFastConv->rightHRIRReal = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) + if ( IVAS_ERR_OK != ivas_alloc_pppMem( &HrtfFastConv->rightHRIRReal, BINAURAL_CONVBANDS, HRTF_LS_CHANNELS, BINAURAL_NTAPS, allocate_init_flag ) ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRReal" ); } - if ( ( HrtfFastConv->rightHRIRImag = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) + if ( IVAS_ERR_OK != ivas_alloc_pppMem( &HrtfFastConv->rightHRIRImag, BINAURAL_CONVBANDS, HRTF_LS_CHANNELS, BINAURAL_NTAPS, allocate_init_flag ) ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRImag" ); } - for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) - { - if ( ( HrtfFastConv->leftHRIRReal[i] = (float **) malloc( HRTF_LS_CHANNELS * sizeof( float * ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRReal" ); - } - if ( ( HrtfFastConv->leftHRIRImag[i] = (float **) malloc( HRTF_LS_CHANNELS * sizeof( float * ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRImag" ); - } - if ( ( HrtfFastConv->rightHRIRReal[i] = (float **) malloc( HRTF_LS_CHANNELS * sizeof( float * ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRImag" ); - } - if ( ( HrtfFastConv->rightHRIRImag[i] = (float **) malloc( HRTF_LS_CHANNELS * sizeof( float * ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRImag" ); - } - if ( allocate_init_flag == 0 ) - { - for ( j = 0; j < HRTF_LS_CHANNELS; j++ ) - { - if ( ( HrtfFastConv->leftHRIRReal[i][j] = (float *) malloc( BINAURAL_NTAPS * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRReal" ); - } - if ( ( HrtfFastConv->leftHRIRImag[i][j] = (float *) malloc( BINAURAL_NTAPS * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRImag" ); - } - if ( ( HrtfFastConv->rightHRIRReal[i][j] = (float *) malloc( BINAURAL_NTAPS * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRReal" ); - } - if ( ( HrtfFastConv->rightHRIRImag[i][j] = (float *) malloc( BINAURAL_NTAPS * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRImag" ); - } - } - } - } } } - /*its not clear why BRIR buffer cant be allocated for HRTF_LS_CHANNELS always ?? and why we need to have all if checks for different LS configs*/ - if ( allocate_init_flag == 1 ) + if ( renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM || bin_input_config == BINAURAL_INPUT_AUDIO_CONFIG_COMBINED ) { - if ( renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM && is_loudspeaker_setup == 0 ) /*7_1_4*/ + if ( ( HrtfFastConv->leftBRIRReal != NULL ) && ( HrtfFastConv->leftBRIRImag != NULL ) && ( HrtfFastConv->rightBRIRReal != NULL ) && ( HrtfFastConv->rightBRIRImag != NULL ) ) { - HrtfFastConv->nChannels = 15; - if ( ( HrtfFastConv->leftBRIRReal != NULL ) && ( HrtfFastConv->leftBRIRImag != NULL ) && ( HrtfFastConv->rightBRIRReal != NULL ) && ( HrtfFastConv->rightBRIRImag != NULL ) ) - { - return IVAS_ERR_OK; - } - else - { - if ( ( HrtfFastConv->leftBRIRReal = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRReal" ); - } - if ( ( HrtfFastConv->leftBRIRImag = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRImag" ); - } - if ( ( HrtfFastConv->rightBRIRReal = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRReal" ); - } - if ( ( HrtfFastConv->rightBRIRImag = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRImag" ); - } - for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) - { - if ( ( HrtfFastConv->leftBRIRReal[i] = (float **) malloc( HrtfFastConv->nChannels * sizeof( float * ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRReal" ); - } - if ( ( HrtfFastConv->leftBRIRImag[i] = (float **) malloc( HrtfFastConv->nChannels * sizeof( float * ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRImag" ); - } - if ( ( HrtfFastConv->rightBRIRReal[i] = (float **) malloc( HrtfFastConv->nChannels * sizeof( float * ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRImag" ); - } - if ( ( HrtfFastConv->rightBRIRImag[i] = (float **) malloc( HrtfFastConv->nChannels * sizeof( float * ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRImag" ); - } - if ( allocate_init_flag == 0 ) - { - for ( j = 0; j < HrtfFastConv->nChannels; j++ ) - { - if ( ( HrtfFastConv->leftBRIRReal[i][j] = (float *) malloc( BINAURAL_NTAPS_MAX * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRReal" ); - } - if ( ( HrtfFastConv->leftBRIRImag[i][j] = (float *) malloc( BINAURAL_NTAPS_MAX * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRImag" ); - } - if ( ( HrtfFastConv->rightBRIRReal[i][j] = (float *) malloc( BINAURAL_NTAPS_MAX * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRReal" ); - } - if ( ( HrtfFastConv->rightBRIRImag[i][j] = (float *) malloc( BINAURAL_NTAPS_MAX * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRImag" ); - } - } - } - } - } + return IVAS_ERR_OK; } - else if ( renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM && is_loudspeaker_setup == 1 ) /*5_1 and others*/ + else { - if ( output_config == AUDIO_CONFIG_5_1 ) - { - HrtfFastConv->nChannels = 7; - if ( ( HrtfFastConv->leftBRIRReal = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRReal" ); - } - if ( ( HrtfFastConv->leftBRIRImag = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRImag" ); - } - if ( ( HrtfFastConv->rightBRIRReal = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRReal" ); - } - if ( ( HrtfFastConv->rightBRIRImag = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRImag" ); - } - for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) - { - if ( ( HrtfFastConv->leftBRIRReal[i] = (float **) malloc( HrtfFastConv->nChannels * sizeof( float * ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRReal" ); - } - if ( ( HrtfFastConv->leftBRIRImag[i] = (float **) malloc( HrtfFastConv->nChannels * sizeof( float * ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRImag" ); - } - if ( ( HrtfFastConv->rightBRIRReal[i] = (float **) malloc( HrtfFastConv->nChannels * sizeof( float * ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRImag" ); - } - if ( ( HrtfFastConv->rightBRIRImag[i] = (float **) malloc( HrtfFastConv->nChannels * sizeof( float * ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRImag" ); - } - if ( allocate_init_flag == 0 ) - { - for ( j = 0; j < HrtfFastConv->nChannels; j++ ) - { - if ( ( HrtfFastConv->leftBRIRReal[i][j] = (float *) malloc( BINAURAL_NTAPS_MAX * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRReal" ); - } - if ( ( HrtfFastConv->leftBRIRImag[i][j] = (float *) malloc( BINAURAL_NTAPS_MAX * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRImag" ); - } - if ( ( HrtfFastConv->rightBRIRReal[i][j] = (float *) malloc( BINAURAL_NTAPS_MAX * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRReal" ); - } - if ( ( HrtfFastConv->rightBRIRImag[i][j] = (float *) malloc( BINAURAL_NTAPS_MAX * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRImag" ); - } - } - } - } - } - else if ( output_config == AUDIO_CONFIG_7_1 ) - { - HrtfFastConv->nChannels = 5; - if ( ( HrtfFastConv->leftBRIRReal = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRReal" ); - } - if ( ( HrtfFastConv->leftBRIRImag = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRImag" ); - } - if ( ( HrtfFastConv->rightBRIRReal = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRReal" ); - } - if ( ( HrtfFastConv->rightBRIRImag = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRImag" ); - } - for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) - { - if ( ( HrtfFastConv->leftBRIRReal[i] = (float **) malloc( HrtfFastConv->nChannels * sizeof( float * ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRReal" ); - } - if ( ( HrtfFastConv->leftBRIRImag[i] = (float **) malloc( HrtfFastConv->nChannels * sizeof( float * ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRImag" ); - } - if ( ( HrtfFastConv->rightBRIRReal[i] = (float **) malloc( HrtfFastConv->nChannels * sizeof( float * ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRImag" ); - } - if ( ( HrtfFastConv->rightBRIRImag[i] = (float **) malloc( HrtfFastConv->nChannels * sizeof( float * ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRImag" ); - } - if ( allocate_init_flag == 0 ) - { - for ( j = 0; j < HrtfFastConv->nChannels; j++ ) - { - if ( ( HrtfFastConv->leftBRIRReal[i][j] = (float *) malloc( BINAURAL_NTAPS_MAX * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRReal" ); - } - if ( ( HrtfFastConv->leftBRIRImag[i][j] = (float *) malloc( BINAURAL_NTAPS_MAX * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRImag" ); - } - if ( ( HrtfFastConv->rightBRIRReal[i][j] = (float *) malloc( BINAURAL_NTAPS_MAX * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRReal" ); - } - if ( ( HrtfFastConv->rightBRIRImag[i][j] = (float *) malloc( BINAURAL_NTAPS_MAX * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRImag" ); - } - } - } - } - } - else if ( output_config == AUDIO_CONFIG_5_1_2 ) + if ( IVAS_ERR_OK != ivas_alloc_pppMem( &HrtfFastConv->leftBRIRReal, BINAURAL_CONVBANDS, HRTF_LS_CHANNELS, BINAURAL_NTAPS_MAX, allocate_init_flag ) ) { - HrtfFastConv->nChannels = 11; - if ( ( HrtfFastConv->leftBRIRReal = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRReal" ); - } - if ( ( HrtfFastConv->leftBRIRImag = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRImag" ); - } - if ( ( HrtfFastConv->rightBRIRReal = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRReal" ); - } - if ( ( HrtfFastConv->rightBRIRImag = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRImag" ); - } - for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) - { - if ( ( HrtfFastConv->leftBRIRReal[i] = (float **) malloc( HrtfFastConv->nChannels * sizeof( float * ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRReal" ); - } - if ( ( HrtfFastConv->leftBRIRImag[i] = (float **) malloc( HrtfFastConv->nChannels * sizeof( float * ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRImag" ); - } - if ( ( HrtfFastConv->rightBRIRReal[i] = (float **) malloc( HrtfFastConv->nChannels * sizeof( float * ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRImag" ); - } - if ( ( HrtfFastConv->rightBRIRImag[i] = (float **) malloc( HrtfFastConv->nChannels * sizeof( float * ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRImag" ); - } - if ( allocate_init_flag == 0 ) - { - for ( j = 0; j < HrtfFastConv->nChannels; j++ ) - { - if ( ( HrtfFastConv->leftBRIRReal[i][j] = (float *) malloc( BINAURAL_NTAPS_MAX * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRReal" ); - } - if ( ( HrtfFastConv->leftBRIRImag[i][j] = (float *) malloc( BINAURAL_NTAPS_MAX * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRImag" ); - } - if ( ( HrtfFastConv->rightBRIRReal[i][j] = (float *) malloc( BINAURAL_NTAPS_MAX * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRReal" ); - } - if ( ( HrtfFastConv->rightBRIRImag[i][j] = (float *) malloc( BINAURAL_NTAPS_MAX * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRImag" ); - } - } - } - } + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRReal" ); } - else if ( output_config == AUDIO_CONFIG_5_1_4 ) + if ( IVAS_ERR_OK != ivas_alloc_pppMem( &HrtfFastConv->leftBRIRImag, BINAURAL_CONVBANDS, HRTF_LS_CHANNELS, BINAURAL_NTAPS_MAX, allocate_init_flag ) ) { - HrtfFastConv->nChannels = 13; - if ( ( HrtfFastConv->leftBRIRReal = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRReal" ); - } - if ( ( HrtfFastConv->leftBRIRImag = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRImag" ); - } - if ( ( HrtfFastConv->rightBRIRReal = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRReal" ); - } - if ( ( HrtfFastConv->rightBRIRImag = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRImag" ); - } - for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) - { - if ( ( HrtfFastConv->leftBRIRReal[i] = (float **) malloc( HrtfFastConv->nChannels * sizeof( float * ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRReal" ); - } - if ( ( HrtfFastConv->leftBRIRImag[i] = (float **) malloc( HrtfFastConv->nChannels * sizeof( float * ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRImag" ); - } - if ( ( HrtfFastConv->rightBRIRReal[i] = (float **) malloc( HrtfFastConv->nChannels * sizeof( float * ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRImag" ); - } - if ( ( HrtfFastConv->rightBRIRImag[i] = (float **) malloc( HrtfFastConv->nChannels * sizeof( float * ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRImag" ); - } - if ( allocate_init_flag == 0 ) - { - for ( j = 0; j < HrtfFastConv->nChannels; j++ ) - { - if ( ( HrtfFastConv->leftBRIRReal[i][j] = (float *) malloc( BINAURAL_NTAPS_MAX * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRReal" ); - } - if ( ( HrtfFastConv->leftBRIRImag[i][j] = (float *) malloc( BINAURAL_NTAPS_MAX * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRImag" ); - } - if ( ( HrtfFastConv->rightBRIRReal[i][j] = (float *) malloc( BINAURAL_NTAPS_MAX * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRReal" ); - } - if ( ( HrtfFastConv->rightBRIRImag[i][j] = (float *) malloc( BINAURAL_NTAPS_MAX * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRImag" ); - } - } - } - } + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRImag" ); } - } - } - else if ( allocate_init_flag == 0 ) - { - if ( renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM || input_config == BINAURAL_INPUT_AUDIO_CONFIG_COMBINED ) - { - if ( ( HrtfFastConv->leftBRIRReal != NULL ) && ( HrtfFastConv->leftBRIRImag != NULL ) && ( HrtfFastConv->rightBRIRReal != NULL ) && ( HrtfFastConv->rightBRIRImag != NULL ) ) + if ( IVAS_ERR_OK != ivas_alloc_pppMem( &HrtfFastConv->rightBRIRReal, BINAURAL_CONVBANDS, HRTF_LS_CHANNELS, BINAURAL_NTAPS_MAX, allocate_init_flag ) ) { - return IVAS_ERR_OK; + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRReal" ); } - else + if ( IVAS_ERR_OK != ivas_alloc_pppMem( &HrtfFastConv->rightBRIRImag, BINAURAL_CONVBANDS, HRTF_LS_CHANNELS, BINAURAL_NTAPS_MAX, allocate_init_flag ) ) { - if ( ( HrtfFastConv->leftBRIRReal = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRReal" ); - } - if ( ( HrtfFastConv->leftBRIRImag = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRImag" ); - } - if ( ( HrtfFastConv->rightBRIRReal = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRReal" ); - } - if ( ( HrtfFastConv->rightBRIRImag = (float ***) malloc( BINAURAL_CONVBANDS * sizeof( float ** ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRImag" ); - } - for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) - { - if ( ( HrtfFastConv->leftBRIRReal[i] = (float **) malloc( HRTF_LS_CHANNELS * sizeof( float * ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRReal" ); - } - if ( ( HrtfFastConv->leftBRIRImag[i] = (float **) malloc( HRTF_LS_CHANNELS * sizeof( float * ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRImag" ); - } - if ( ( HrtfFastConv->rightBRIRReal[i] = (float **) malloc( HRTF_LS_CHANNELS * sizeof( float * ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRImag" ); - } - if ( ( HrtfFastConv->rightBRIRImag[i] = (float **) malloc( HRTF_LS_CHANNELS * sizeof( float * ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRImag" ); - } - if ( allocate_init_flag == 0 ) - { - for ( j = 0; j < HRTF_LS_CHANNELS; j++ ) - { - if ( ( HrtfFastConv->leftBRIRReal[i][j] = (float *) malloc( BINAURAL_NTAPS_MAX * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRReal" ); - } - if ( ( HrtfFastConv->leftBRIRImag[i][j] = (float *) malloc( BINAURAL_NTAPS_MAX * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRImag" ); - } - if ( ( HrtfFastConv->rightBRIRReal[i][j] = (float *) malloc( BINAURAL_NTAPS_MAX * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRReal" ); - } - if ( ( HrtfFastConv->rightBRIRImag[i][j] = (float *) malloc( BINAURAL_NTAPS_MAX * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRImag" ); - } - } - } - } + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRImag" ); } } } @@ -1182,9 +686,8 @@ static ivas_error ivas_binaural_hrtf_open( HRTFS_FASTCONV_HANDLE *hHrtfFastConv /* i : fastconv HRTF handle */ #ifdef FIX_1720_HRTF_FASTCONV , - AUDIO_CONFIG output_config, /* i : output configuration */ - RENDERER_TYPE renderer_type, /* i : renderer type */ - int8_t is_loudspeaker_setup /* i : loudspeaker setup information */ + AUDIO_CONFIG output_config, /* i : output configuration */ + RENDERER_TYPE renderer_type /* i : renderer type */ #endif ) { @@ -1228,7 +731,7 @@ static ivas_error ivas_binaural_hrtf_open( HrtfFastConv->FASTCONV_BRIR_latency_s = FASTCONV_BRIR_latency_s; } HrtfFastConv->allocate_init_flag = 1; - ivas_allocate_binaural_hrtf( HrtfFastConv, output_config, HrtfFastConv->input_cfg_var, renderer_type, is_loudspeaker_setup, HrtfFastConv->allocate_init_flag ); + ivas_allocate_binaural_hrtf( HrtfFastConv, output_config, HrtfFastConv->input_cfg_var, renderer_type, HrtfFastConv->allocate_init_flag ); #else HrtfFastConv->FASTCONV_HRIR_latency_s = FASTCONV_HRIR_latency_s; HrtfFastConv->FASTCONV_HOA3_latency_s = FASTCONV_HOA3_latency_s; @@ -1250,13 +753,10 @@ static ivas_error ivas_binaural_hrtf_open( HrtfFastConv->rightHRIRImag[i][j] = rightHRIRImag[i][j]; } } - if ( renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) + else if ( renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) { - for ( j = 0; j < HrtfFastConv->nChannels; j++ ) + for ( j = 0; j < HRTF_LS_CHANNELS; j++ ) { - /*HrtfFastConv->leftBRIRReal[i][j] can always be allocated for 15 channels. - No need to have HrtfFastConv->nChannels, simply use HRTF_LS_CHANNELS - */ HrtfFastConv->leftBRIRReal[i][j] = leftBRIRReal[i][j]; HrtfFastConv->leftBRIRImag[i][j] = leftBRIRImag[i][j]; HrtfFastConv->rightBRIRReal[i][j] = rightBRIRReal[i][j]; @@ -1552,7 +1052,7 @@ ivas_error ivas_rend_openCldfbRend( } /* Load HRTF tables */ #ifdef FIX_1720_HRTF_FASTCONV - ivas_binaural_hrtf_open( &pCldfbRend->hHrtfFastConv, hBinRenderer->hInputSetup->output_config, RENDERER_BINAURAL_FASTCONV, hBinRenderer->hInputSetup->is_loudspeaker_setup ); + ivas_binaural_hrtf_open( &pCldfbRend->hHrtfFastConv, hBinRenderer->hInputSetup->output_config, RENDERER_BINAURAL_FASTCONV ); #else ivas_binaural_hrtf_open( &pCldfbRend->hHrtfFastConv ); #endif @@ -1658,7 +1158,7 @@ ivas_error ivas_binRenderer_open( /* Load HRTF tables */ #ifdef FIX_1720_HRTF_FASTCONV - ivas_binaural_hrtf_open( &st_ivas->hHrtfFastConv, st_ivas->hIntSetup.output_config, st_ivas->renderer_type, st_ivas->hIntSetup.is_loudspeaker_setup ); + ivas_binaural_hrtf_open( &st_ivas->hHrtfFastConv, st_ivas->hIntSetup.output_config, st_ivas->renderer_type ); #else ivas_binaural_hrtf_open( &st_ivas->hHrtfFastConv ); #endif diff --git a/lib_util/hrtf_file_reader.c b/lib_util/hrtf_file_reader.c index 4a88d85005..fbc842b6be 100644 --- a/lib_util/hrtf_file_reader.c +++ b/lib_util/hrtf_file_reader.c @@ -1059,7 +1059,7 @@ static ivas_error create_fastconv_HRTF_from_rawdata( #ifdef FIX_1720_HRTF_FASTCONV ( *hHRTF )->input_cfg_var = input_cfg; ( *hHRTF )->allocate_init_flag = 0; - ivas_allocate_binaural_hrtf( *hHRTF, 0, input_cfg, rend_type, 0, ( *hHRTF )->allocate_init_flag ); + ivas_allocate_binaural_hrtf( *hHRTF, 0, input_cfg, rend_type, ( *hHRTF )->allocate_init_flag ); #endif // if ( hHRTF == NULL ) @@ -1436,7 +1436,6 @@ static ivas_error create_fastconv_HRTF_from_rawdata( for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) { - /*here it seems to be always execting HRTF_LS_CHANNELS channels*/ for ( j = 0; j < HRTF_LS_CHANNELS; j++ ) { memcpy( ( *hHRTF )->leftBRIRReal[i][j], hrtf_data_rptr, BINAURAL_NTAPS_MAX * sizeof( float ) ); -- GitLab From b01a62fb7db36a12221be596d3d47ff2c041b370 Mon Sep 17 00:00:00 2001 From: Shikha Shetgeri <100861@ittiam.com> Date: Tue, 25 Jul 2023 11:05:49 +0530 Subject: [PATCH 12/14] address review comments - 2 --- lib_com/ivas_prot.h | 4 + lib_dec/ivas_binRenderer_internal.c | 383 +++++++++++----------------- lib_rend/ivas_stat_rend.h | 2 - lib_util/hrtf_file_reader.c | 1 - 4 files changed, 155 insertions(+), 235 deletions(-) diff --git a/lib_com/ivas_prot.h b/lib_com/ivas_prot.h index c5561ae2be..f841cbb1b6 100644 --- a/lib_com/ivas_prot.h +++ b/lib_com/ivas_prot.h @@ -5046,6 +5046,10 @@ void ivas_binaural_hrtf_close( HRTFS_FASTCONV_HANDLE *hHrtfFastConv /* i/o: decoder binaural hrtf handle */ ); +ivas_error ivas_init_binaural_hrtf( + HRTFS_FASTCONV *HrtfFastConv /* i/o: FASTCONV HRTF structure */ +); + ivas_error ivas_allocate_binaural_hrtf( HRTFS_FASTCONV *HrtfFastConv, /* i/o: FASTCONV HRTF structure */ AUDIO_CONFIG input_config, /* i : input audio configuration */ diff --git a/lib_dec/ivas_binRenderer_internal.c b/lib_dec/ivas_binRenderer_internal.c index 2bf0c14992..6887040363 100644 --- a/lib_dec/ivas_binRenderer_internal.c +++ b/lib_dec/ivas_binRenderer_internal.c @@ -489,6 +489,58 @@ static ivas_error ivas_binRenderer_convModuleOpen( } #ifdef FIX_1720_HRTF_FASTCONV +/*-------------------------------------------------------------------------* + * ivas_init_binaural_hrtf() + * + * initialize memory for HrtfFastConv structure elements + *-------------------------------------------------------------------------*/ + +ivas_error ivas_init_binaural_hrtf( + HRTFS_FASTCONV *HrtfFastConv /* i/o: FASTCONV HRTF structure */ +) +{ + int16_t i; + HrtfFastConv->leftHRIRReal_HOA3 = NULL; + HrtfFastConv->leftHRIRImag_HOA3 = NULL; + HrtfFastConv->rightHRIRReal_HOA3 = NULL; + HrtfFastConv->rightHRIRImag_HOA3 = NULL; + HrtfFastConv->FASTCONV_HOA3_latency_s = 0x00; + + HrtfFastConv->leftHRIRReal = NULL; + HrtfFastConv->leftHRIRImag = NULL; + HrtfFastConv->rightHRIRReal = NULL; + HrtfFastConv->rightHRIRImag = NULL; + HrtfFastConv->FASTCONV_HRIR_latency_s = 0x00; + + HrtfFastConv->leftBRIRReal = NULL; + HrtfFastConv->leftBRIRImag = NULL; + HrtfFastConv->rightBRIRReal = NULL; + HrtfFastConv->rightBRIRImag = NULL; + HrtfFastConv->FASTCONV_BRIR_latency_s = 0x00; + + HrtfFastConv->leftHRIRReal_HOA2 = NULL; + HrtfFastConv->leftHRIRImag_HOA2 = NULL; + HrtfFastConv->rightHRIRReal_HOA2 = NULL; + HrtfFastConv->rightHRIRImag_HOA2 = NULL; + HrtfFastConv->FASTCONV_HOA2_latency_s = 0x00; + + HrtfFastConv->leftHRIRReal_FOA = NULL; + HrtfFastConv->leftHRIRImag_FOA = NULL; + HrtfFastConv->rightHRIRReal_FOA = NULL; + HrtfFastConv->rightHRIRImag_FOA = NULL; + HrtfFastConv->FASTCONV_FOA_latency_s = 0x00; + + HrtfFastConv->allocate_init_flag = 0x00; + + for ( i = 0; i < CLDFB_NO_CHANNELS_MAX; i++ ) + { + HrtfFastConv->fastconvReverberationEneCorrections[i] = 0x00; + HrtfFastConv->fastconvReverberationEneCorrections[i] = 0x00; + } + + return IVAS_ERR_OK; +} + /*-------------------------------------------------------------------------* * ivas_alloc_pppMem() * @@ -686,7 +738,7 @@ static ivas_error ivas_binaural_hrtf_open( HRTFS_FASTCONV_HANDLE *hHrtfFastConv /* i : fastconv HRTF handle */ #ifdef FIX_1720_HRTF_FASTCONV , - AUDIO_CONFIG output_config, /* i : output configuration */ + AUDIO_CONFIG input_config, /* i : output configuration */ RENDERER_TYPE renderer_type /* i : renderer type */ #endif ) @@ -709,29 +761,29 @@ static ivas_error ivas_binaural_hrtf_open( #ifdef FIX_1720_HRTF_FASTCONV - memset( HrtfFastConv, 0x00, sizeof( HRTFS_FASTCONV ) ); - if ( output_config == AUDIO_CONFIG_BINAURAL || renderer_type == RENDERER_BINAURAL_FASTCONV ) + ivas_init_binaural_hrtf( HrtfFastConv ); + if ( input_config == AUDIO_CONFIG_BINAURAL || renderer_type == RENDERER_BINAURAL_FASTCONV ) { HrtfFastConv->FASTCONV_HRIR_latency_s = FASTCONV_HRIR_latency_s; } - if ( output_config == AUDIO_CONFIG_HOA2 ) + if ( input_config == AUDIO_CONFIG_HOA2 ) { HrtfFastConv->FASTCONV_HOA2_latency_s = FASTCONV_HOA2_latency_s; } - if ( output_config == AUDIO_CONFIG_HOA3 ) + if ( input_config == AUDIO_CONFIG_HOA3 ) { HrtfFastConv->FASTCONV_HOA3_latency_s = FASTCONV_HOA3_latency_s; } - if ( output_config == AUDIO_CONFIG_FOA ) + if ( input_config == AUDIO_CONFIG_FOA ) { HrtfFastConv->FASTCONV_FOA_latency_s = FASTCONV_FOA_latency_s; } - if ( output_config == AUDIO_CONFIG_BINAURAL || renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) + if ( input_config == AUDIO_CONFIG_BINAURAL || renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) { HrtfFastConv->FASTCONV_BRIR_latency_s = FASTCONV_BRIR_latency_s; } HrtfFastConv->allocate_init_flag = 1; - ivas_allocate_binaural_hrtf( HrtfFastConv, output_config, HrtfFastConv->input_cfg_var, renderer_type, HrtfFastConv->allocate_init_flag ); + ivas_allocate_binaural_hrtf( HrtfFastConv, input_config, BINAURAL_INPUT_AUDIO_CONFIG_INVALID, renderer_type, HrtfFastConv->allocate_init_flag ); #else HrtfFastConv->FASTCONV_HRIR_latency_s = FASTCONV_HRIR_latency_s; HrtfFastConv->FASTCONV_HOA3_latency_s = FASTCONV_HOA3_latency_s; @@ -763,7 +815,7 @@ static ivas_error ivas_binaural_hrtf_open( HrtfFastConv->rightBRIRImag[i][j] = rightBRIRImag[i][j]; } } - if ( output_config == AUDIO_CONFIG_HOA3 ) + if ( input_config == AUDIO_CONFIG_HOA3 ) { for ( j = 0; j < HOA3_CHANNELS; j++ ) { @@ -773,7 +825,7 @@ static ivas_error ivas_binaural_hrtf_open( HrtfFastConv->rightHRIRImag_HOA3[i][j] = rightHRIRImag_HOA3[i][j]; } } - if ( output_config == AUDIO_CONFIG_HOA2 ) + if ( input_config == AUDIO_CONFIG_HOA2 ) { for ( j = 0; j < HOA2_CHANNELS; j++ ) { @@ -783,7 +835,7 @@ static ivas_error ivas_binaural_hrtf_open( HrtfFastConv->rightHRIRImag_HOA2[i][j] = rightHRIRImag_HOA2[i][j]; } } - if ( output_config == AUDIO_CONFIG_FOA ) + if ( input_config == AUDIO_CONFIG_FOA ) { for ( j = 0; j < FOA_CHANNELS; j++ ) { @@ -1492,242 +1544,109 @@ void ivas_binRenderer_close( #ifdef FIX_1720_HRTF_FASTCONV /*------------------------------------------------------------------------- - * ivas_binaural_hrtf_close() + * ivas_free_pppHrtfMem() * - * Close fastconv binaural renderer hrtf memories + * Free fastconv binaural renderer hrtf memories *------------------------------------------------------------------------*/ - -void ivas_binaural_hrtf_close( - HRTFS_FASTCONV_HANDLE *hHrtfFastConv /* i : fastconv HRTF handle */ -) +static void ivas_free_pppHrtfMem( float ****ppppHRIR, int16_t dim, int16_t alloc_init ) { int16_t i, j; - if ( hHrtfFastConv == NULL || *hHrtfFastConv == NULL ) - { - return; - } - if ( ( *hHrtfFastConv )->leftHRIRReal != NULL && ( *hHrtfFastConv )->leftHRIRImag != NULL && ( *hHrtfFastConv )->rightHRIRReal != NULL && ( *hHrtfFastConv )->rightHRIRImag != NULL ) + if ( *ppppHRIR != NULL ) { for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) { - if ( ( *hHrtfFastConv )->allocate_init_flag == 0 ) + if ( alloc_init == 0 ) { - for ( j = 0; j < HRTF_LS_CHANNELS; j++ ) + for ( j = 0; j < dim; j++ ) { - free( ( *hHrtfFastConv )->leftHRIRReal[i][j] ); - ( *hHrtfFastConv )->leftHRIRReal[i][j] = NULL; - free( ( *hHrtfFastConv )->leftHRIRImag[i][j] ); - ( *hHrtfFastConv )->leftHRIRImag[i][j] = NULL; - free( ( *hHrtfFastConv )->rightHRIRReal[i][j] ); - ( *hHrtfFastConv )->rightHRIRReal[i][j] = NULL; - free( ( *hHrtfFastConv )->rightHRIRImag[i][j] ); - ( *hHrtfFastConv )->rightHRIRImag[i][j] = NULL; + free( ( *ppppHRIR )[i][j] ); + ( *ppppHRIR )[i][j] = NULL; } } - free( ( *hHrtfFastConv )->leftHRIRReal[i] ); - ( *hHrtfFastConv )->leftHRIRReal[i] = NULL; - free( ( *hHrtfFastConv )->leftHRIRImag[i] ); - ( *hHrtfFastConv )->leftHRIRImag[i] = NULL; - free( ( *hHrtfFastConv )->rightHRIRReal[i] ); - ( *hHrtfFastConv )->rightHRIRReal[i] = NULL; - free( ( *hHrtfFastConv )->rightHRIRImag[i] ); - ( *hHrtfFastConv )->rightHRIRImag[i] = NULL; + free( ( *ppppHRIR )[i] ); + ( *ppppHRIR )[i] = NULL; } - free( ( *hHrtfFastConv )->leftHRIRReal ); - ( *hHrtfFastConv )->leftHRIRReal = NULL; - free( ( *hHrtfFastConv )->leftHRIRImag ); - ( *hHrtfFastConv )->leftHRIRImag = NULL; - free( ( *hHrtfFastConv )->rightHRIRReal ); - ( *hHrtfFastConv )->rightHRIRReal = NULL; - free( ( *hHrtfFastConv )->rightHRIRImag ); - ( *hHrtfFastConv )->rightHRIRImag = NULL; } - if ( ( *hHrtfFastConv )->allocate_init_flag == 0 ) - { - if ( ( *hHrtfFastConv )->leftBRIRReal != NULL && ( *hHrtfFastConv )->leftBRIRImag != NULL && ( *hHrtfFastConv )->rightBRIRReal != NULL && ( *hHrtfFastConv )->rightBRIRImag != NULL ) - { - for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) - { - if ( ( *hHrtfFastConv )->allocate_init_flag == 0 ) - { - for ( j = 0; j < HRTF_LS_CHANNELS; j++ ) - { - free( ( *hHrtfFastConv )->leftBRIRReal[i][j] ); - ( *hHrtfFastConv )->leftBRIRReal[i][j] = NULL; - free( ( *hHrtfFastConv )->leftBRIRImag[i][j] ); - ( *hHrtfFastConv )->leftBRIRImag[i][j] = NULL; - free( ( *hHrtfFastConv )->rightBRIRReal[i][j] ); - ( *hHrtfFastConv )->rightBRIRReal[i][j] = NULL; - free( ( *hHrtfFastConv )->rightBRIRImag[i][j] ); - ( *hHrtfFastConv )->rightBRIRImag[i][j] = NULL; - } - } - free( ( *hHrtfFastConv )->leftBRIRReal[i] ); - ( *hHrtfFastConv )->leftBRIRReal[i] = NULL; - free( ( *hHrtfFastConv )->leftBRIRImag[i] ); - ( *hHrtfFastConv )->leftBRIRImag[i] = NULL; - free( ( *hHrtfFastConv )->rightBRIRReal[i] ); - ( *hHrtfFastConv )->rightBRIRReal[i] = NULL; - free( ( *hHrtfFastConv )->rightBRIRImag[i] ); - ( *hHrtfFastConv )->rightBRIRImag[i] = NULL; - } - free( ( *hHrtfFastConv )->leftBRIRReal ); - ( *hHrtfFastConv )->leftBRIRReal = NULL; - free( ( *hHrtfFastConv )->leftBRIRImag ); - ( *hHrtfFastConv )->leftBRIRImag = NULL; - free( ( *hHrtfFastConv )->rightBRIRReal ); - ( *hHrtfFastConv )->rightBRIRReal = NULL; - free( ( *hHrtfFastConv )->rightBRIRImag ); - ( *hHrtfFastConv )->rightBRIRImag = NULL; - } - } - if ( ( *hHrtfFastConv )->allocate_init_flag == 1 ) - { - if ( ( *hHrtfFastConv )->leftBRIRReal != NULL && ( *hHrtfFastConv )->leftBRIRImag != NULL && ( *hHrtfFastConv )->rightBRIRReal != NULL && ( *hHrtfFastConv )->rightBRIRImag != NULL ) - { - for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) - { - if ( ( *hHrtfFastConv )->allocate_init_flag == 0 ) - { - for ( j = 0; j < ( *hHrtfFastConv )->nChannels; j++ ) - { - free( ( *hHrtfFastConv )->leftBRIRReal[i][j] ); - ( *hHrtfFastConv )->leftBRIRReal[i][j] = NULL; - free( ( *hHrtfFastConv )->leftBRIRImag[i][j] ); - ( *hHrtfFastConv )->leftBRIRImag[i][j] = NULL; - free( ( *hHrtfFastConv )->rightBRIRReal[i][j] ); - ( *hHrtfFastConv )->rightBRIRReal[i][j] = NULL; - free( ( *hHrtfFastConv )->rightBRIRImag[i][j] ); - ( *hHrtfFastConv )->rightBRIRImag[i][j] = NULL; - } - } - free( ( *hHrtfFastConv )->leftBRIRReal[i] ); - ( *hHrtfFastConv )->leftBRIRReal[i] = NULL; - free( ( *hHrtfFastConv )->leftBRIRImag[i] ); - ( *hHrtfFastConv )->leftBRIRImag[i] = NULL; - free( ( *hHrtfFastConv )->rightBRIRReal[i] ); - ( *hHrtfFastConv )->rightBRIRReal[i] = NULL; - free( ( *hHrtfFastConv )->rightBRIRImag[i] ); - ( *hHrtfFastConv )->rightBRIRImag[i] = NULL; - } - free( ( *hHrtfFastConv )->leftBRIRReal ); - ( *hHrtfFastConv )->leftBRIRReal = NULL; - free( ( *hHrtfFastConv )->leftBRIRImag ); - ( *hHrtfFastConv )->leftBRIRImag = NULL; - free( ( *hHrtfFastConv )->rightBRIRReal ); - ( *hHrtfFastConv )->rightBRIRReal = NULL; - free( ( *hHrtfFastConv )->rightBRIRImag ); - ( *hHrtfFastConv )->rightBRIRImag = NULL; - } - } - if ( ( *hHrtfFastConv )->leftHRIRReal_HOA3 != NULL && ( *hHrtfFastConv )->leftHRIRImag_HOA3 != NULL && ( *hHrtfFastConv )->rightHRIRReal_HOA3 != NULL && ( *hHrtfFastConv )->rightHRIRImag_HOA3 != NULL ) - { - for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) - { - if ( ( *hHrtfFastConv )->allocate_init_flag == 0 ) - { - for ( j = 0; j < HOA3_CHANNELS; j++ ) - { - free( ( *hHrtfFastConv )->leftHRIRReal_HOA3[i][j] ); - ( *hHrtfFastConv )->leftHRIRReal_HOA3[i][j] = NULL; - free( ( *hHrtfFastConv )->leftHRIRImag_HOA3[i][j] ); - ( *hHrtfFastConv )->leftHRIRImag_HOA3[i][j] = NULL; - free( ( *hHrtfFastConv )->rightHRIRReal_HOA3[i][j] ); - ( *hHrtfFastConv )->rightHRIRReal_HOA3[i][j] = NULL; - free( ( *hHrtfFastConv )->rightHRIRImag_HOA3[i][j] ); - ( *hHrtfFastConv )->rightHRIRImag_HOA3[i][j] = NULL; - } - } - free( ( *hHrtfFastConv )->leftHRIRReal_HOA3[i] ); - ( *hHrtfFastConv )->leftHRIRReal_HOA3[i] = NULL; - free( ( *hHrtfFastConv )->leftHRIRImag_HOA3[i] ); - ( *hHrtfFastConv )->leftHRIRImag_HOA3[i] = NULL; - free( ( *hHrtfFastConv )->rightHRIRReal_HOA3[i] ); - ( *hHrtfFastConv )->rightHRIRReal_HOA3[i] = NULL; - free( ( *hHrtfFastConv )->rightHRIRImag_HOA3[i] ); - ( *hHrtfFastConv )->rightHRIRImag_HOA3[i] = NULL; - } - free( ( *hHrtfFastConv )->leftHRIRReal_HOA3 ); - ( *hHrtfFastConv )->leftHRIRReal_HOA3 = NULL; - free( ( *hHrtfFastConv )->leftHRIRImag_HOA3 ); - ( *hHrtfFastConv )->leftHRIRImag_HOA3 = NULL; - free( ( *hHrtfFastConv )->rightHRIRReal_HOA3 ); - ( *hHrtfFastConv )->rightHRIRReal_HOA3 = NULL; - free( ( *hHrtfFastConv )->rightHRIRImag_HOA3 ); - ( *hHrtfFastConv )->rightHRIRImag_HOA3 = NULL; - } - if ( ( *hHrtfFastConv )->leftHRIRReal_HOA2 != NULL && ( *hHrtfFastConv )->leftHRIRImag_HOA2 != NULL && ( *hHrtfFastConv )->rightHRIRReal_HOA2 != NULL && ( *hHrtfFastConv )->rightHRIRImag_HOA2 != NULL ) - { - for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) - { - if ( ( *hHrtfFastConv )->allocate_init_flag == 0 ) - { - for ( j = 0; j < HOA2_CHANNELS; j++ ) - { - free( ( *hHrtfFastConv )->leftHRIRReal_HOA2[i][j] ); - ( *hHrtfFastConv )->leftHRIRReal_HOA2[i][j] = NULL; - free( ( *hHrtfFastConv )->leftHRIRImag_HOA2[i][j] ); - ( *hHrtfFastConv )->leftHRIRImag_HOA2[i][j] = NULL; - free( ( *hHrtfFastConv )->rightHRIRReal_HOA2[i][j] ); - ( *hHrtfFastConv )->rightHRIRReal_HOA2[i][j] = NULL; - free( ( *hHrtfFastConv )->rightHRIRImag_HOA2[i][j] ); - ( *hHrtfFastConv )->rightHRIRImag_HOA2[i][j] = NULL; - } - } - free( ( *hHrtfFastConv )->leftHRIRReal_HOA2[i] ); - ( *hHrtfFastConv )->leftHRIRReal_HOA2[i] = NULL; - free( ( *hHrtfFastConv )->leftHRIRImag_HOA2[i] ); - ( *hHrtfFastConv )->leftHRIRImag_HOA2[i] = NULL; - free( ( *hHrtfFastConv )->rightHRIRReal_HOA2[i] ); - ( *hHrtfFastConv )->rightHRIRReal_HOA2[i] = NULL; - free( ( *hHrtfFastConv )->rightHRIRImag_HOA2[i] ); - ( *hHrtfFastConv )->rightHRIRImag_HOA2[i] = NULL; - } - free( ( *hHrtfFastConv )->leftHRIRReal_HOA2 ); - ( *hHrtfFastConv )->leftHRIRReal_HOA2 = NULL; - free( ( *hHrtfFastConv )->leftHRIRImag_HOA2 ); - ( *hHrtfFastConv )->leftHRIRImag_HOA2 = NULL; - free( ( *hHrtfFastConv )->rightHRIRReal_HOA2 ); - ( *hHrtfFastConv )->rightHRIRReal_HOA2 = NULL; - free( ( *hHrtfFastConv )->rightHRIRImag_HOA2 ); - ( *hHrtfFastConv )->rightHRIRImag_HOA2 = NULL; - } - if ( ( *hHrtfFastConv )->leftHRIRReal_FOA != NULL && ( *hHrtfFastConv )->leftHRIRImag_FOA != NULL && ( *hHrtfFastConv )->rightHRIRReal_FOA != NULL && ( *hHrtfFastConv )->rightHRIRImag_FOA != NULL ) +} +/*------------------------------------------------------------------------- + * ivas_binaural_hrtf_close() + * + * Close fastconv binaural renderer hrtf memories + *------------------------------------------------------------------------*/ + +void ivas_binaural_hrtf_close( + HRTFS_FASTCONV_HANDLE *hHrtfFastConv /* i : fastconv HRTF handle */ +) +{ + + if ( hHrtfFastConv == NULL || *hHrtfFastConv == NULL ) { - for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) - { - if ( ( *hHrtfFastConv )->allocate_init_flag == 0 ) - { - for ( j = 0; j < FOA_CHANNELS; j++ ) - { - free( ( *hHrtfFastConv )->leftHRIRReal_FOA[i][j] ); - ( *hHrtfFastConv )->leftHRIRReal_FOA[i][j] = NULL; - free( ( *hHrtfFastConv )->leftHRIRImag_FOA[i][j] ); - ( *hHrtfFastConv )->leftHRIRImag_FOA[i][j] = NULL; - free( ( *hHrtfFastConv )->rightHRIRReal_FOA[i][j] ); - ( *hHrtfFastConv )->rightHRIRReal_FOA[i][j] = NULL; - free( ( *hHrtfFastConv )->rightHRIRImag_FOA[i][j] ); - ( *hHrtfFastConv )->rightHRIRImag_FOA[i][j] = NULL; - } - } - free( ( *hHrtfFastConv )->leftHRIRReal_FOA[i] ); - ( *hHrtfFastConv )->leftHRIRReal_FOA[i] = NULL; - free( ( *hHrtfFastConv )->leftHRIRImag_FOA[i] ); - ( *hHrtfFastConv )->leftHRIRImag_FOA[i] = NULL; - free( ( *hHrtfFastConv )->rightHRIRReal_FOA[i] ); - ( *hHrtfFastConv )->rightHRIRReal_FOA[i] = NULL; - free( ( *hHrtfFastConv )->rightHRIRImag_FOA[i] ); - ( *hHrtfFastConv )->rightHRIRImag_FOA[i] = NULL; - } - free( ( *hHrtfFastConv )->leftHRIRReal_FOA ); - ( *hHrtfFastConv )->leftHRIRReal_FOA = NULL; - free( ( *hHrtfFastConv )->leftHRIRImag_FOA ); - ( *hHrtfFastConv )->leftHRIRImag_FOA = NULL; - free( ( *hHrtfFastConv )->rightHRIRReal_FOA ); - ( *hHrtfFastConv )->rightHRIRReal_FOA = NULL; - free( ( *hHrtfFastConv )->rightHRIRImag_FOA ); - ( *hHrtfFastConv )->rightHRIRImag_FOA = NULL; + return; } + ivas_free_pppHrtfMem( &( *hHrtfFastConv )->leftHRIRReal, HRTF_LS_CHANNELS, ( *hHrtfFastConv )->allocate_init_flag ); + free( ( *hHrtfFastConv )->leftHRIRReal ); + ( *hHrtfFastConv )->leftHRIRReal = NULL; + ivas_free_pppHrtfMem( &( *hHrtfFastConv )->leftHRIRImag, HRTF_LS_CHANNELS, ( *hHrtfFastConv )->allocate_init_flag ); + free( ( *hHrtfFastConv )->leftHRIRImag ); + ( *hHrtfFastConv )->leftHRIRImag = NULL; + ivas_free_pppHrtfMem( &( *hHrtfFastConv )->rightHRIRReal, HRTF_LS_CHANNELS, ( *hHrtfFastConv )->allocate_init_flag ); + free( ( *hHrtfFastConv )->rightHRIRReal ); + ( *hHrtfFastConv )->rightHRIRReal = NULL; + ivas_free_pppHrtfMem( &( *hHrtfFastConv )->rightHRIRImag, HRTF_LS_CHANNELS, ( *hHrtfFastConv )->allocate_init_flag ); + free( ( *hHrtfFastConv )->rightHRIRImag ); + ( *hHrtfFastConv )->rightHRIRImag = NULL; + + ivas_free_pppHrtfMem( &( *hHrtfFastConv )->leftBRIRReal, HRTF_LS_CHANNELS, ( *hHrtfFastConv )->allocate_init_flag ); + free( ( *hHrtfFastConv )->leftBRIRReal ); + ( *hHrtfFastConv )->leftBRIRReal = NULL; + ivas_free_pppHrtfMem( &( *hHrtfFastConv )->leftBRIRImag, HRTF_LS_CHANNELS, ( *hHrtfFastConv )->allocate_init_flag ); + free( ( *hHrtfFastConv )->leftBRIRImag ); + ( *hHrtfFastConv )->leftBRIRImag = NULL; + ivas_free_pppHrtfMem( &( *hHrtfFastConv )->rightBRIRReal, HRTF_LS_CHANNELS, ( *hHrtfFastConv )->allocate_init_flag ); + free( ( *hHrtfFastConv )->rightBRIRReal ); + ( *hHrtfFastConv )->rightBRIRReal = NULL; + ivas_free_pppHrtfMem( &( *hHrtfFastConv )->rightBRIRImag, HRTF_LS_CHANNELS, ( *hHrtfFastConv )->allocate_init_flag ); + free( ( *hHrtfFastConv )->rightBRIRImag ); + ( *hHrtfFastConv )->rightBRIRImag = NULL; + + ivas_free_pppHrtfMem( &( *hHrtfFastConv )->leftHRIRReal_HOA3, HOA3_CHANNELS, ( *hHrtfFastConv )->allocate_init_flag ); + free( ( *hHrtfFastConv )->leftHRIRReal_HOA3 ); + ( *hHrtfFastConv )->leftHRIRReal_HOA3 = NULL; + ivas_free_pppHrtfMem( &( *hHrtfFastConv )->leftHRIRImag_HOA3, HOA3_CHANNELS, ( *hHrtfFastConv )->allocate_init_flag ); + free( ( *hHrtfFastConv )->leftHRIRImag_HOA3 ); + ( *hHrtfFastConv )->leftHRIRImag_HOA3 = NULL; + ivas_free_pppHrtfMem( &( *hHrtfFastConv )->rightHRIRReal_HOA3, HOA3_CHANNELS, ( *hHrtfFastConv )->allocate_init_flag ); + free( ( *hHrtfFastConv )->rightHRIRReal_HOA3 ); + ( *hHrtfFastConv )->rightHRIRReal_HOA3 = NULL; + ivas_free_pppHrtfMem( &( *hHrtfFastConv )->rightHRIRImag_HOA3, HOA3_CHANNELS, ( *hHrtfFastConv )->allocate_init_flag ); + free( ( *hHrtfFastConv )->rightHRIRImag_HOA3 ); + ( *hHrtfFastConv )->rightHRIRImag_HOA3 = NULL; + + ivas_free_pppHrtfMem( &( *hHrtfFastConv )->leftHRIRReal_HOA2, HOA2_CHANNELS, ( *hHrtfFastConv )->allocate_init_flag ); + free( ( *hHrtfFastConv )->leftHRIRReal_HOA2 ); + ( *hHrtfFastConv )->leftHRIRReal_HOA2 = NULL; + ivas_free_pppHrtfMem( &( *hHrtfFastConv )->leftHRIRImag_HOA2, HOA2_CHANNELS, ( *hHrtfFastConv )->allocate_init_flag ); + free( ( *hHrtfFastConv )->leftHRIRImag_HOA2 ); + ( *hHrtfFastConv )->leftHRIRImag_HOA2 = NULL; + ivas_free_pppHrtfMem( &( *hHrtfFastConv )->rightHRIRReal_HOA2, HOA2_CHANNELS, ( *hHrtfFastConv )->allocate_init_flag ); + free( ( *hHrtfFastConv )->rightHRIRReal_HOA2 ); + ( *hHrtfFastConv )->rightHRIRReal_HOA2 = NULL; + ivas_free_pppHrtfMem( &( *hHrtfFastConv )->rightHRIRImag_HOA2, HOA2_CHANNELS, ( *hHrtfFastConv )->allocate_init_flag ); + free( ( *hHrtfFastConv )->rightHRIRImag_HOA2 ); + ( *hHrtfFastConv )->rightHRIRImag_HOA2 = NULL; + + ivas_free_pppHrtfMem( &( *hHrtfFastConv )->leftHRIRReal_FOA, FOA_CHANNELS, ( *hHrtfFastConv )->allocate_init_flag ); + free( ( *hHrtfFastConv )->leftHRIRReal_FOA ); + ( *hHrtfFastConv )->leftHRIRReal_FOA = NULL; + ivas_free_pppHrtfMem( &( *hHrtfFastConv )->leftHRIRImag_FOA, FOA_CHANNELS, ( *hHrtfFastConv )->allocate_init_flag ); + free( ( *hHrtfFastConv )->leftHRIRImag_FOA ); + ( *hHrtfFastConv )->leftHRIRImag_FOA = NULL; + ivas_free_pppHrtfMem( &( *hHrtfFastConv )->rightHRIRReal_FOA, FOA_CHANNELS, ( *hHrtfFastConv )->allocate_init_flag ); + free( ( *hHrtfFastConv )->rightHRIRReal_FOA ); + ( *hHrtfFastConv )->rightHRIRReal_FOA = NULL; + ivas_free_pppHrtfMem( &( *hHrtfFastConv )->rightHRIRImag_FOA, FOA_CHANNELS, ( *hHrtfFastConv )->allocate_init_flag ); + free( ( *hHrtfFastConv )->rightHRIRImag_FOA ); + ( *hHrtfFastConv )->rightHRIRImag_FOA = NULL; } #endif diff --git a/lib_rend/ivas_stat_rend.h b/lib_rend/ivas_stat_rend.h index ab4c53364b..5a9cf2d028 100644 --- a/lib_rend/ivas_stat_rend.h +++ b/lib_rend/ivas_stat_rend.h @@ -1379,9 +1379,7 @@ typedef struct ivas_hrtfs_fastconv_struct float ***rightHRIRImag_FOA; float FASTCONV_FOA_latency_s; - BINAURAL_INPUT_AUDIO_CONFIG input_cfg_var; int16_t allocate_init_flag; /*Memory allocation flag 0: if the hrtf pointers are allocated at application level , 1: of allocated at ivas_binaural_hrtf_open() */ - int16_t nChannels; /*Number of channels updated based on maximum of cicp table*/ #else #ifdef UPDATE_FASTCONV_SBA_FILTER float leftHRIRReal_HOA3[BINAURAL_CONVBANDS][HOA3_CHANNELS][BINAURAL_NTAPS_SBA]; diff --git a/lib_util/hrtf_file_reader.c b/lib_util/hrtf_file_reader.c index fbc842b6be..df2c5c66f3 100644 --- a/lib_util/hrtf_file_reader.c +++ b/lib_util/hrtf_file_reader.c @@ -1057,7 +1057,6 @@ static ivas_error create_fastconv_HRTF_from_rawdata( int16_t i, j; char *hrtf_data_rptr; #ifdef FIX_1720_HRTF_FASTCONV - ( *hHRTF )->input_cfg_var = input_cfg; ( *hHRTF )->allocate_init_flag = 0; ivas_allocate_binaural_hrtf( *hHRTF, 0, input_cfg, rend_type, ( *hHRTF )->allocate_init_flag ); #endif -- GitLab From f633d6627217d9948122f2fbb9ed4826e890b700 Mon Sep 17 00:00:00 2001 From: Shikha Shetgeri <100861@ittiam.com> Date: Tue, 25 Jul 2023 12:04:25 +0530 Subject: [PATCH 13/14] minor change --- lib_dec/ivas_binRenderer_internal.c | 93 +++++++++-------------------- 1 file changed, 28 insertions(+), 65 deletions(-) diff --git a/lib_dec/ivas_binRenderer_internal.c b/lib_dec/ivas_binRenderer_internal.c index 6887040363..3b0f1838d1 100644 --- a/lib_dec/ivas_binRenderer_internal.c +++ b/lib_dec/ivas_binRenderer_internal.c @@ -1566,6 +1566,8 @@ static void ivas_free_pppHrtfMem( float ****ppppHRIR, int16_t dim, int16_t alloc free( ( *ppppHRIR )[i] ); ( *ppppHRIR )[i] = NULL; } + free( *ppppHRIR ); + *ppppHRIR = NULL; } } /*------------------------------------------------------------------------- @@ -1578,75 +1580,36 @@ void ivas_binaural_hrtf_close( HRTFS_FASTCONV_HANDLE *hHrtfFastConv /* i : fastconv HRTF handle */ ) { - + int16_t allocate_init_flag; if ( hHrtfFastConv == NULL || *hHrtfFastConv == NULL ) { return; } - ivas_free_pppHrtfMem( &( *hHrtfFastConv )->leftHRIRReal, HRTF_LS_CHANNELS, ( *hHrtfFastConv )->allocate_init_flag ); - free( ( *hHrtfFastConv )->leftHRIRReal ); - ( *hHrtfFastConv )->leftHRIRReal = NULL; - ivas_free_pppHrtfMem( &( *hHrtfFastConv )->leftHRIRImag, HRTF_LS_CHANNELS, ( *hHrtfFastConv )->allocate_init_flag ); - free( ( *hHrtfFastConv )->leftHRIRImag ); - ( *hHrtfFastConv )->leftHRIRImag = NULL; - ivas_free_pppHrtfMem( &( *hHrtfFastConv )->rightHRIRReal, HRTF_LS_CHANNELS, ( *hHrtfFastConv )->allocate_init_flag ); - free( ( *hHrtfFastConv )->rightHRIRReal ); - ( *hHrtfFastConv )->rightHRIRReal = NULL; - ivas_free_pppHrtfMem( &( *hHrtfFastConv )->rightHRIRImag, HRTF_LS_CHANNELS, ( *hHrtfFastConv )->allocate_init_flag ); - free( ( *hHrtfFastConv )->rightHRIRImag ); - ( *hHrtfFastConv )->rightHRIRImag = NULL; - - ivas_free_pppHrtfMem( &( *hHrtfFastConv )->leftBRIRReal, HRTF_LS_CHANNELS, ( *hHrtfFastConv )->allocate_init_flag ); - free( ( *hHrtfFastConv )->leftBRIRReal ); - ( *hHrtfFastConv )->leftBRIRReal = NULL; - ivas_free_pppHrtfMem( &( *hHrtfFastConv )->leftBRIRImag, HRTF_LS_CHANNELS, ( *hHrtfFastConv )->allocate_init_flag ); - free( ( *hHrtfFastConv )->leftBRIRImag ); - ( *hHrtfFastConv )->leftBRIRImag = NULL; - ivas_free_pppHrtfMem( &( *hHrtfFastConv )->rightBRIRReal, HRTF_LS_CHANNELS, ( *hHrtfFastConv )->allocate_init_flag ); - free( ( *hHrtfFastConv )->rightBRIRReal ); - ( *hHrtfFastConv )->rightBRIRReal = NULL; - ivas_free_pppHrtfMem( &( *hHrtfFastConv )->rightBRIRImag, HRTF_LS_CHANNELS, ( *hHrtfFastConv )->allocate_init_flag ); - free( ( *hHrtfFastConv )->rightBRIRImag ); - ( *hHrtfFastConv )->rightBRIRImag = NULL; - - ivas_free_pppHrtfMem( &( *hHrtfFastConv )->leftHRIRReal_HOA3, HOA3_CHANNELS, ( *hHrtfFastConv )->allocate_init_flag ); - free( ( *hHrtfFastConv )->leftHRIRReal_HOA3 ); - ( *hHrtfFastConv )->leftHRIRReal_HOA3 = NULL; - ivas_free_pppHrtfMem( &( *hHrtfFastConv )->leftHRIRImag_HOA3, HOA3_CHANNELS, ( *hHrtfFastConv )->allocate_init_flag ); - free( ( *hHrtfFastConv )->leftHRIRImag_HOA3 ); - ( *hHrtfFastConv )->leftHRIRImag_HOA3 = NULL; - ivas_free_pppHrtfMem( &( *hHrtfFastConv )->rightHRIRReal_HOA3, HOA3_CHANNELS, ( *hHrtfFastConv )->allocate_init_flag ); - free( ( *hHrtfFastConv )->rightHRIRReal_HOA3 ); - ( *hHrtfFastConv )->rightHRIRReal_HOA3 = NULL; - ivas_free_pppHrtfMem( &( *hHrtfFastConv )->rightHRIRImag_HOA3, HOA3_CHANNELS, ( *hHrtfFastConv )->allocate_init_flag ); - free( ( *hHrtfFastConv )->rightHRIRImag_HOA3 ); - ( *hHrtfFastConv )->rightHRIRImag_HOA3 = NULL; - - ivas_free_pppHrtfMem( &( *hHrtfFastConv )->leftHRIRReal_HOA2, HOA2_CHANNELS, ( *hHrtfFastConv )->allocate_init_flag ); - free( ( *hHrtfFastConv )->leftHRIRReal_HOA2 ); - ( *hHrtfFastConv )->leftHRIRReal_HOA2 = NULL; - ivas_free_pppHrtfMem( &( *hHrtfFastConv )->leftHRIRImag_HOA2, HOA2_CHANNELS, ( *hHrtfFastConv )->allocate_init_flag ); - free( ( *hHrtfFastConv )->leftHRIRImag_HOA2 ); - ( *hHrtfFastConv )->leftHRIRImag_HOA2 = NULL; - ivas_free_pppHrtfMem( &( *hHrtfFastConv )->rightHRIRReal_HOA2, HOA2_CHANNELS, ( *hHrtfFastConv )->allocate_init_flag ); - free( ( *hHrtfFastConv )->rightHRIRReal_HOA2 ); - ( *hHrtfFastConv )->rightHRIRReal_HOA2 = NULL; - ivas_free_pppHrtfMem( &( *hHrtfFastConv )->rightHRIRImag_HOA2, HOA2_CHANNELS, ( *hHrtfFastConv )->allocate_init_flag ); - free( ( *hHrtfFastConv )->rightHRIRImag_HOA2 ); - ( *hHrtfFastConv )->rightHRIRImag_HOA2 = NULL; - - ivas_free_pppHrtfMem( &( *hHrtfFastConv )->leftHRIRReal_FOA, FOA_CHANNELS, ( *hHrtfFastConv )->allocate_init_flag ); - free( ( *hHrtfFastConv )->leftHRIRReal_FOA ); - ( *hHrtfFastConv )->leftHRIRReal_FOA = NULL; - ivas_free_pppHrtfMem( &( *hHrtfFastConv )->leftHRIRImag_FOA, FOA_CHANNELS, ( *hHrtfFastConv )->allocate_init_flag ); - free( ( *hHrtfFastConv )->leftHRIRImag_FOA ); - ( *hHrtfFastConv )->leftHRIRImag_FOA = NULL; - ivas_free_pppHrtfMem( &( *hHrtfFastConv )->rightHRIRReal_FOA, FOA_CHANNELS, ( *hHrtfFastConv )->allocate_init_flag ); - free( ( *hHrtfFastConv )->rightHRIRReal_FOA ); - ( *hHrtfFastConv )->rightHRIRReal_FOA = NULL; - ivas_free_pppHrtfMem( &( *hHrtfFastConv )->rightHRIRImag_FOA, FOA_CHANNELS, ( *hHrtfFastConv )->allocate_init_flag ); - free( ( *hHrtfFastConv )->rightHRIRImag_FOA ); - ( *hHrtfFastConv )->rightHRIRImag_FOA = NULL; + allocate_init_flag = ( *hHrtfFastConv )->allocate_init_flag; + ivas_free_pppHrtfMem( &( *hHrtfFastConv )->leftHRIRReal, HRTF_LS_CHANNELS, allocate_init_flag ); + ivas_free_pppHrtfMem( &( *hHrtfFastConv )->leftHRIRImag, HRTF_LS_CHANNELS, allocate_init_flag ); + ivas_free_pppHrtfMem( &( *hHrtfFastConv )->rightHRIRReal, HRTF_LS_CHANNELS, allocate_init_flag ); + ivas_free_pppHrtfMem( &( *hHrtfFastConv )->rightHRIRImag, HRTF_LS_CHANNELS, allocate_init_flag ); + + ivas_free_pppHrtfMem( &( *hHrtfFastConv )->leftBRIRReal, HRTF_LS_CHANNELS, allocate_init_flag ); + ivas_free_pppHrtfMem( &( *hHrtfFastConv )->leftBRIRImag, HRTF_LS_CHANNELS, allocate_init_flag ); + ivas_free_pppHrtfMem( &( *hHrtfFastConv )->rightBRIRReal, HRTF_LS_CHANNELS, allocate_init_flag ); + ivas_free_pppHrtfMem( &( *hHrtfFastConv )->rightBRIRImag, HRTF_LS_CHANNELS, allocate_init_flag ); + + ivas_free_pppHrtfMem( &( *hHrtfFastConv )->leftHRIRReal_HOA3, HOA3_CHANNELS, allocate_init_flag ); + ivas_free_pppHrtfMem( &( *hHrtfFastConv )->leftHRIRImag_HOA3, HOA3_CHANNELS, allocate_init_flag ); + ivas_free_pppHrtfMem( &( *hHrtfFastConv )->rightHRIRReal_HOA3, HOA3_CHANNELS, allocate_init_flag ); + ivas_free_pppHrtfMem( &( *hHrtfFastConv )->rightHRIRImag_HOA3, HOA3_CHANNELS, allocate_init_flag ); + + ivas_free_pppHrtfMem( &( *hHrtfFastConv )->leftHRIRReal_HOA2, HOA2_CHANNELS, allocate_init_flag ); + ivas_free_pppHrtfMem( &( *hHrtfFastConv )->leftHRIRImag_HOA2, HOA2_CHANNELS, allocate_init_flag ); + ivas_free_pppHrtfMem( &( *hHrtfFastConv )->rightHRIRReal_HOA2, HOA2_CHANNELS, allocate_init_flag ); + ivas_free_pppHrtfMem( &( *hHrtfFastConv )->rightHRIRImag_HOA2, HOA2_CHANNELS, allocate_init_flag ); + + ivas_free_pppHrtfMem( &( *hHrtfFastConv )->leftHRIRReal_FOA, FOA_CHANNELS, allocate_init_flag ); + ivas_free_pppHrtfMem( &( *hHrtfFastConv )->leftHRIRImag_FOA, FOA_CHANNELS, allocate_init_flag ); + ivas_free_pppHrtfMem( &( *hHrtfFastConv )->rightHRIRReal_FOA, FOA_CHANNELS, allocate_init_flag ); + ivas_free_pppHrtfMem( &( *hHrtfFastConv )->rightHRIRImag_FOA, FOA_CHANNELS, allocate_init_flag ); } #endif -- GitLab From 4c814379456ce90514b7dbf1351060af5e70d38a Mon Sep 17 00:00:00 2001 From: Shikha Shetgeri <100861@ittiam.com> Date: Tue, 25 Jul 2023 13:02:33 +0530 Subject: [PATCH 14/14] minor clean up --- lib_dec/ivas_binRenderer_internal.c | 3 --- lib_rend/ivas_hrtf.c | 4 ++-- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/lib_dec/ivas_binRenderer_internal.c b/lib_dec/ivas_binRenderer_internal.c index 3b0f1838d1..808e124713 100644 --- a/lib_dec/ivas_binRenderer_internal.c +++ b/lib_dec/ivas_binRenderer_internal.c @@ -50,9 +50,6 @@ #include "debug.h" #endif #include "wmc_auto.h" -#ifdef FIX_1720_HRTF_FASTCONV -#include -#endif /*------------------------------------------------------------------------- diff --git a/lib_rend/ivas_hrtf.c b/lib_rend/ivas_hrtf.c index 926491c8fb..a64867ea6b 100644 --- a/lib_rend/ivas_hrtf.c +++ b/lib_rend/ivas_hrtf.c @@ -37,7 +37,7 @@ #include "ivas_error.h" #include "wmc_auto.h" #ifdef FIX_1720_HRTF_FASTCONV -#include +#include "ivas_prot.h" #endif /*-----------------------------------------------------------------------* @@ -143,7 +143,7 @@ ivas_error ivas_HRTF_fastconv_binary_open( return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for FASTCONV HRTF tables!" ); } #ifdef FIX_1720_HRTF_FASTCONV - memset( *hHrtfFastConv, 0x00, sizeof( HRTFS_FASTCONV ) ); + ivas_init_binaural_hrtf( *hHrtfFastConv ); #endif return IVAS_ERR_OK; } -- GitLab