diff --git a/lib_com/options.h b/lib_com/options.h index 06332990eb995dc062cd531a7f8442d0f68a86a4..4ccaf4bdaa7096b48f6bc439110abfed842d2a0c 100755 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -152,6 +152,8 @@ #define FIX_197_CREND_INTERFACE +#define FIX_329_ENABLE_TD_RENDERER_REVERB_MC /* Eri: Enable reverb for TD renderer for 5.1 and 7.1 with headtracking enabled for IVAS_dec */ + #define FIX_MEMORY_COUNTING_HRTF_BINARY_FILE #define FIX_334_DEBUG_BE_STEREO_SWITCHING /* FhG: Fix non-BE issue for stereo switching when DEBUGGING is enabled */ #define FIX_198_TDREND_INTERFACE /* Issue 198: Harmonize interface for TD renderer between decoder and external renderer */ diff --git a/lib_dec/ivas_binRenderer_internal.c b/lib_dec/ivas_binRenderer_internal.c index 33e79578237782b709e6d760a5344e7ce9640120..115b6ea59cc1af919ab41f4de624bfe22b3ce72d 100644 --- a/lib_dec/ivas_binRenderer_internal.c +++ b/lib_dec/ivas_binRenderer_internal.c @@ -866,7 +866,18 @@ void ivas_binaural_add_LFE( if ( render_lfe ) { #ifdef FIX_197_CREND_INTERFACE +#ifdef FIX_329_ENABLE_TD_RENDERER_REVERB_MC + if ( st_ivas->renderer_type == RENDERER_BINAURAL_OBJECTS_TD ) + { + gain = GAIN_LFE; + } + else + { + gain = ( ( st_ivas->hCrendWrapper != NULL ) && ( st_ivas->hCrendWrapper->hHrtfCrend != NULL ) ) ? st_ivas->hCrendWrapper->hHrtfCrend->gain_lfe : GAIN_LFE; + } +#else gain = ( ( st_ivas->hCrendWrapper != NULL ) && ( st_ivas->hCrendWrapper->hHrtfCrend != NULL ) ) ? st_ivas->hCrendWrapper->hHrtfCrend->gain_lfe : GAIN_LFE; +#endif #else gain = st_ivas->hHrtf != NULL ? st_ivas->hHrtf->gain_lfe : GAIN_LFE; #endif diff --git a/lib_dec/ivas_init_dec.c b/lib_dec/ivas_init_dec.c index 015832ea74ad65fd9f668b66364b2d5b851dca85..a8ea2a00a0bc1ca5e9c6593301df06ffa2443ffa 100755 --- a/lib_dec/ivas_init_dec.c +++ b/lib_dec/ivas_init_dec.c @@ -1244,11 +1244,15 @@ ivas_error ivas_init_decoder( if ( st_ivas->hRenderConfig->roomAcoustics.late_reverb_on ) { #ifdef FIX_197_CREND_INTERFACE +#ifdef FIX_329_ENABLE_TD_RENDERER_REVERB_MC + if ( ( error = ivas_rend_initCrendWrapper( &st_ivas->hCrendWrapper ) ) != IVAS_ERR_OK ) +#else if ( ( st_ivas->hCrendWrapper = (CREND_WRAPPER_HANDLE) malloc( sizeof( CREND_WRAPPER ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Crend Wrapper\n" ); } if ( ( st_ivas->hCrendWrapper->hCrend = (CREND_HANDLE) malloc( sizeof( CREND_DATA ) ) ) == NULL ) +#endif #else if ( ( st_ivas->hCrend = (CREND_HANDLE) malloc( sizeof( CREND_DATA ) ) ) == NULL ) #endif diff --git a/lib_dec/ivas_mct_dec.c b/lib_dec/ivas_mct_dec.c index 282ca41e2f1f1caea98c56581b5bf264f040d30f..69e96118fb51aabf37f03b4ee9be5d1d26d4c617 100644 --- a/lib_dec/ivas_mct_dec.c +++ b/lib_dec/ivas_mct_dec.c @@ -1136,10 +1136,18 @@ static ivas_error ivas_mc_dec_reconfig( #ifdef FIX_197_CREND_INTERFACE if ( st_ivas->hRenderConfig->roomAcoustics.late_reverb_on ) { +#ifdef FIX_329_ENABLE_TD_RENDERER_REVERB_MC + if ( ( error = ivas_rend_initCrendWrapper( &st_ivas->hCrendWrapper ) ) != IVAS_ERR_OK ) +#else if ( ( st_ivas->hCrendWrapper = (CREND_WRAPPER_HANDLE) malloc( sizeof( CREND_WRAPPER ) ) ) == NULL ) +#endif { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Crend Wrapper\n" ); } +#ifdef FIX_329_ENABLE_TD_RENDERER_REVERB_MC + st_ivas->hCrendWrapper->hCrend = NULL; + st_ivas->hCrendWrapper->hHrtfCrend = NULL; +#endif if ( ( st_ivas->hCrendWrapper->hCrend = (CREND_HANDLE) malloc( sizeof( CREND_DATA ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Crend\n" ); diff --git a/lib_dec/ivas_sba_dec.c b/lib_dec/ivas_sba_dec.c index 848879983d38d7573cc13620a5203d608dde96d1..7480e26801922c85e271f942ed91e6c7c74a17e5 100644 --- a/lib_dec/ivas_sba_dec.c +++ b/lib_dec/ivas_sba_dec.c @@ -468,10 +468,18 @@ ivas_error ivas_sba_dec_reinit( if ( st_ivas->hRenderConfig->roomAcoustics.late_reverb_on ) { #ifdef FIX_197_CREND_INTERFACE +#ifdef FIX_329_ENABLE_TD_RENDERER_REVERB_MC + if ( ( error = ivas_rend_initCrendWrapper( &st_ivas->hCrendWrapper ) ) != IVAS_ERR_OK ) +#else if ( ( st_ivas->hCrendWrapper = (CREND_WRAPPER_HANDLE) malloc( sizeof( CREND_WRAPPER ) ) ) == NULL ) +#endif { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for CrendWrapper\n" ); } +#ifdef FIX_329_ENABLE_TD_RENDERER_REVERB_MC + st_ivas->hCrendWrapper->hCrend = NULL; + st_ivas->hCrendWrapper->hHrtfCrend = NULL; +#endif if ( ( st_ivas->hCrendWrapper->hCrend = (CREND_HANDLE) malloc( sizeof( CREND_DATA ) ) ) == NULL ) #else if ( ( st_ivas->hCrend = (CREND_HANDLE) malloc( sizeof( CREND_DATA ) ) ) == NULL ) diff --git a/lib_rend/ivas_crend.c b/lib_rend/ivas_crend.c index 03df4a559b4bf9f9f469055b9bbe756b7fc109c0..cb37248576de0a8e3a5135bc402842eb5e545089 100644 --- a/lib_rend/ivas_crend.c +++ b/lib_rend/ivas_crend.c @@ -1900,6 +1900,62 @@ static ivas_error ivas_rend_initCrend( return IVAS_ERR_OK; } +#ifdef FIX_197_CREND_INTERFACE +#ifdef FIX_329_ENABLE_TD_RENDERER_REVERB_MC +/*------------------------------------------------------------------------- + * ivas_rend_initCrendWrapper() + * + * Allocate and initialize crend renderer handle + *------------------------------------------------------------------------*/ + +ivas_error ivas_rend_initCrendWrapper( + CREND_WRAPPER_HANDLE *pCrend ) +{ + int16_t i; + if ( pCrend == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for renderer handle" ); + } + if ( ( *pCrend = (CREND_WRAPPER_HANDLE) malloc( sizeof( CREND_WRAPPER ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Crend Wrapper\n" ); + } + ( *pCrend )->binaural_latency_ns = 0; + ( *pCrend )->hCrend = NULL; + ( *pCrend )->hHrtfCrend = NULL; + + if ( ( ( *pCrend )->hCrend = (CREND_HANDLE) malloc( sizeof( CREND_DATA ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for renderer handle" ); + } + + ( *pCrend )->hCrend->lfe_delay_line = NULL; + + for ( i = 0; i < MAX_INTERN_CHANNELS; i++ ) + { + ( *pCrend )->hCrend->freq_buffer_re[i] = NULL; + ( *pCrend )->hCrend->freq_buffer_im[i] = NULL; + } + + for ( i = 0; i < BINAURAL_CHANNELS; i++ ) + { + ( *pCrend )->hCrend->prev_out_buffer[i] = NULL; + } + + ( *pCrend )->hCrend->freq_buffer_re_diffuse = NULL; + ( *pCrend )->hCrend->freq_buffer_im_diffuse = NULL; + ( *pCrend )->hCrend->hReverb = NULL; + ( *pCrend )->hCrend->delay_line_rw_index = 0; + ( *pCrend )->hCrend->diffuse_delay_line_rw_index = 0; + ( *pCrend )->hCrend->hTrack = NULL; + ( *pCrend )->hCrend->m_fYaw = 0; + ( *pCrend )->hCrend->m_fPitch = 0; + ( *pCrend )->hCrend->m_fRoll = 0; + + return IVAS_ERR_OK; +} +#endif +#endif /*------------------------------------------------------------------------- * ivas_rend_openCrend() * @@ -1929,8 +1985,14 @@ ivas_error ivas_rend_openCrend( ivas_error error; error = IVAS_ERR_OK; - #ifdef FIX_197_CREND_INTERFACE +#ifdef FIX_329_ENABLE_TD_RENDERER_REVERB_MC + if ( ( error = ivas_rend_initCrendWrapper( pCrend ) ) != IVAS_ERR_OK ) + { + return error; + } + hCrend = ( *pCrend )->hCrend; +#else if ( pCrend == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Crend Wrapper\n" ); @@ -1946,6 +2008,7 @@ ivas_error ivas_rend_openCrend( ( *pCrend )->hCrend = NULL; ( *pCrend )->hHrtfCrend = NULL; } +#endif #endif subframe_length = (int16_t) ( output_Fs / FRAMES_PER_SEC ) / MAX_PARAM_SPATIAL_SUBFRAMES; @@ -1968,6 +2031,8 @@ ivas_error ivas_rend_openCrend( } #endif +#ifndef FIX_329_ENABLE_TD_RENDERER_REVERB_MC + if ( ( hCrend = (CREND_HANDLE) malloc( sizeof( CREND_DATA ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for renderer handle" ); @@ -1995,6 +2060,8 @@ ivas_error ivas_rend_openCrend( hCrend->m_fYaw = 0; hCrend->m_fPitch = 0; hCrend->m_fRoll = 0; +#endif + #ifdef FIX_197_CREND_INTERFACE hHrtf = ( *pCrend )->hHrtfCrend; @@ -2152,7 +2219,6 @@ ivas_error ivas_rend_closeCrend( if ( ( *pCrend )->hCrend != NULL ) { - for ( i = 0; i < MAX_INTERN_CHANNELS; i++ ) { if ( ( *pCrend )->hCrend->freq_buffer_re[i] != NULL ) diff --git a/lib_rend/ivas_prot_rend.h b/lib_rend/ivas_prot_rend.h index e2156b4158050f40031a121c4433223efb4e40ba..6c27317d83c724ac14999c54dc412f8a0431aeb4 100644 --- a/lib_rend/ivas_prot_rend.h +++ b/lib_rend/ivas_prot_rend.h @@ -507,6 +507,11 @@ ivas_error ivas_rend_closeCrend( CREND_WRAPPER *pCrend ); #endif +#ifdef FIX_329_ENABLE_TD_RENDERER_REVERB_MC +ivas_error ivas_rend_initCrendWrapper( + CREND_WRAPPER_HANDLE *pCrend ); +#endif + ivas_error ivas_rend_crendProcess( const CREND_WRAPPER *pCrend, const AUDIO_CONFIG inConfig, @@ -557,7 +562,6 @@ ivas_error ivas_crend_process( float output[][L_FRAME48k] /* i/o: input/output audio channels */ ); - /*----------------------------------------------------------------------------------* * Reverberator *----------------------------------------------------------------------------------*/