From 4d641fa6f5a6b74a114981222fcfc09505cfcb51 Mon Sep 17 00:00:00 2001 From: Dominik Weckbecker Date: Tue, 19 Sep 2023 13:39:26 +0200 Subject: [PATCH 1/6] open ism-to-mono downmix renderer in OSBA when switching from pre-rendering to discrete object coding --- lib_com/options.h | 2 +- lib_dec/ivas_sba_dec.c | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/lib_com/options.h b/lib_com/options.h index 1a5f05080f..8b76066f1f 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -200,7 +200,7 @@ #define NONBE_FIX_738_SBA_BR_SW_ASAN /* FhG: issue 738: fixes bug when switching to an MCT bitrate and previous frame was ACELP */ #define NONBE_CR_FIX_735_SBA_HP20_BRATE_SWITCHING /* VA: Issue 735: Resolve "HP20 filtering bug in SBA/OSBA bitrate switching" */ #define NONBE_FIX_588_UPDATE_FASTCONV_SD /* FhG: issue 588: update FastConv SD HRTFs in CLDFB domain with new conversion method */ - +#define NONBE_FIX_774_OSBA_MONO_DEC_CRASH /* FhG: issue 774: decoder crash for OSBA to mono */ /* ##################### End NON-BE switches ########################### */ diff --git a/lib_dec/ivas_sba_dec.c b/lib_dec/ivas_sba_dec.c index 8ff8bcc48e..fbb0278dea 100755 --- a/lib_dec/ivas_sba_dec.c +++ b/lib_dec/ivas_sba_dec.c @@ -395,6 +395,27 @@ ivas_error ivas_sba_dec_reconfigure( } } +#ifdef NONBE_FIX_774_OSBA_MONO_DEC_CRASH + if (st_ivas->renderer_type == RENDERER_MONO_DOWNMIX ) + { + if ( st_ivas->renderer_type == RENDERER_MONO_DOWNMIX ) + { + if ( ( error = ivas_mono_dmx_renderer_open( st_ivas ) ) != IVAS_ERR_OK ) + { + return error; + } + } + else + { + if ( st_ivas->hMonoDmxRenderer != NULL ) + { + free( st_ivas->hMonoDmxRenderer ); + st_ivas->hMonoDmxRenderer = NULL; + } + } + } +#endif + if ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV ) { /* Allocate TD renderer for the objects in DISC mode */ -- GitLab From 0324c3cd4d79c81492f0f0b3ba3071efe906406c Mon Sep 17 00:00:00 2001 From: Dominik Weckbecker Date: Tue, 19 Sep 2023 13:46:51 +0200 Subject: [PATCH 2/6] fix formatting --- lib_dec/ivas_sba_dec.c | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/lib_dec/ivas_sba_dec.c b/lib_dec/ivas_sba_dec.c index fbb0278dea..d3ed292006 100755 --- a/lib_dec/ivas_sba_dec.c +++ b/lib_dec/ivas_sba_dec.c @@ -396,24 +396,24 @@ ivas_error ivas_sba_dec_reconfigure( } #ifdef NONBE_FIX_774_OSBA_MONO_DEC_CRASH - if (st_ivas->renderer_type == RENDERER_MONO_DOWNMIX ) + if ( st_ivas->renderer_type == RENDERER_MONO_DOWNMIX ) { - if ( st_ivas->renderer_type == RENDERER_MONO_DOWNMIX ) + if ( st_ivas->renderer_type == RENDERER_MONO_DOWNMIX ) + { + if ( ( error = ivas_mono_dmx_renderer_open( st_ivas ) ) != IVAS_ERR_OK ) { - if ( ( error = ivas_mono_dmx_renderer_open( st_ivas ) ) != IVAS_ERR_OK ) - { - return error; - } + return error; } - else + } + else + { + if ( st_ivas->hMonoDmxRenderer != NULL ) { - if ( st_ivas->hMonoDmxRenderer != NULL ) - { - free( st_ivas->hMonoDmxRenderer ); - st_ivas->hMonoDmxRenderer = NULL; - } + free( st_ivas->hMonoDmxRenderer ); + st_ivas->hMonoDmxRenderer = NULL; } - } + } + } #endif if ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV ) -- GitLab From dd3007d7ce0e82875492be1e98bebc0776e7161b Mon Sep 17 00:00:00 2001 From: Dominik Weckbecker Date: Wed, 20 Sep 2023 09:39:44 +0200 Subject: [PATCH 3/6] remove redundant condition in ivas_sba_dec_reconfigure --- lib_dec/ivas_sba_dec.c | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/lib_dec/ivas_sba_dec.c b/lib_dec/ivas_sba_dec.c index d3ed292006..4d0aa3f9d4 100755 --- a/lib_dec/ivas_sba_dec.c +++ b/lib_dec/ivas_sba_dec.c @@ -398,20 +398,17 @@ ivas_error ivas_sba_dec_reconfigure( #ifdef NONBE_FIX_774_OSBA_MONO_DEC_CRASH if ( st_ivas->renderer_type == RENDERER_MONO_DOWNMIX ) { - if ( st_ivas->renderer_type == RENDERER_MONO_DOWNMIX ) + if ( ( error = ivas_mono_dmx_renderer_open( st_ivas ) ) != IVAS_ERR_OK ) { - if ( ( error = ivas_mono_dmx_renderer_open( st_ivas ) ) != IVAS_ERR_OK ) - { - return error; - } + return error; } - else + } + else + { + if ( st_ivas->hMonoDmxRenderer != NULL ) { - if ( st_ivas->hMonoDmxRenderer != NULL ) - { - free( st_ivas->hMonoDmxRenderer ); - st_ivas->hMonoDmxRenderer = NULL; - } + free( st_ivas->hMonoDmxRenderer ); + st_ivas->hMonoDmxRenderer = NULL; } } #endif -- GitLab From 53ebd8be8baddd2d556bb93db66438fd8a759b78 Mon Sep 17 00:00:00 2001 From: Dominik Weckbecker Date: Thu, 21 Sep 2023 09:44:56 +0200 Subject: [PATCH 4/6] allocate hMonoDmxRenderer only if it is not already allocated --- lib_dec/ivas_sba_dec.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lib_dec/ivas_sba_dec.c b/lib_dec/ivas_sba_dec.c index 03e72cf30d..126a67ab7f 100755 --- a/lib_dec/ivas_sba_dec.c +++ b/lib_dec/ivas_sba_dec.c @@ -401,9 +401,12 @@ ivas_error ivas_sba_dec_reconfigure( #ifdef NONBE_FIX_774_OSBA_MONO_DEC_CRASH if ( st_ivas->renderer_type == RENDERER_MONO_DOWNMIX ) { - if ( ( error = ivas_mono_dmx_renderer_open( st_ivas ) ) != IVAS_ERR_OK ) + if ( st_ivas->hMonoDmxRenderer == NULL ) { - return error; + if ( ( error = ivas_mono_dmx_renderer_open( st_ivas ) ) != IVAS_ERR_OK ) + { + return error; + } } } else -- GitLab From 617fa295ba71f1d0cc829a3cbbf693e1124ee608 Mon Sep 17 00:00:00 2001 From: Dominik Weckbecker Date: Mon, 25 Sep 2023 09:35:41 +0200 Subject: [PATCH 5/6] change type of hDownmix->inputEnergy and hDownmix->protoEnergy from a float array to one float value --- lib_dec/ivas_mono_dmx_renderer.c | 27 ++++++++++++++++++++++++--- lib_rend/ivas_stat_rend.h | 5 +++++ 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/lib_dec/ivas_mono_dmx_renderer.c b/lib_dec/ivas_mono_dmx_renderer.c index 599bee9ff9..2bf067157d 100644 --- a/lib_dec/ivas_mono_dmx_renderer.c +++ b/lib_dec/ivas_mono_dmx_renderer.c @@ -68,9 +68,13 @@ ivas_error ivas_mono_dmx_renderer_open( return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for downmixing\n" ) ); } - set_zero( hDownmix->inputEnergy, CLDFB_NO_CHANNELS_MAX ); +#ifdef NONBE_FIX_774_OSBA_MONO_DEC_CRASH + hDownmix->inputEnergy = 0; + hDownmix->protoEnergy = 0; +#else + set_zero( hDownmix->inputEnergy, CLDFB_NO_CHANNELS_MAX ); set_zero( hDownmix->protoEnergy, CLDFB_NO_CHANNELS_MAX ); - +#endif st_ivas->hMonoDmxRenderer = hDownmix; return IVAS_ERR_OK; @@ -121,19 +125,36 @@ void ivas_mono_downmix_render_passive( } /* compute the input energy, proto energy after smoothing */ - hDownmix->inputEnergy[0] *= DOWNMIX_ALPHA; +#ifdef NONBE_FIX_774_OSBA_MONO_DEC_CRASH + hDownmix->inputEnergy *= DOWNMIX_ALPHA; + hDownmix->protoEnergy *= DOWNMIX_ALPHA; +#else + hDownmix->inputEnergy[0] *= DOWNMIX_ALPHA; hDownmix->protoEnergy[0] *= DOWNMIX_ALPHA; +#endif for ( i = 0; i < output_frame; i++ ) { +#ifdef NONBE_FIX_774_OSBA_MONO_DEC_CRASH + hDownmix->protoEnergy += proto_signal[i] * proto_signal[i]; +#else hDownmix->protoEnergy[0] += proto_signal[i] * proto_signal[i]; +#endif for ( j = 0; j < numInputChannels; j++ ) { +#ifdef NONBE_FIX_774_OSBA_MONO_DEC_CRASH + hDownmix->inputEnergy += ( output_f[j][i] * output_f[j][i] ); +#else hDownmix->inputEnergy[0] += ( output_f[j][i] * output_f[j][i] ); +#endif } } /* compute the eq factor */ +#ifdef NONBE_FIX_774_OSBA_MONO_DEC_CRASH + eq = min( DOWNMIX_MAX_GAIN, sqrtf( hDownmix->inputEnergy / ( EPSILON + hDownmix->protoEnergy ) ) ); +#else eq = min( DOWNMIX_MAX_GAIN, sqrtf( hDownmix->inputEnergy[0] / ( EPSILON + hDownmix->protoEnergy[0] ) ) ); +#endif /* equalize the downmix */ v_multc( proto_signal, eq, output_f[0], output_frame ); diff --git a/lib_rend/ivas_stat_rend.h b/lib_rend/ivas_stat_rend.h index 7cb19be748..d1a19e6317 100644 --- a/lib_rend/ivas_stat_rend.h +++ b/lib_rend/ivas_stat_rend.h @@ -1539,8 +1539,13 @@ typedef struct ivas_LS_setupconversion_mapping typedef struct ivas_mono_downmix_renderer_struct { +#ifdef NONBE_FIX_774_OSBA_MONO_DEC_CRASH + float inputEnergy; + float protoEnergy; +#else float inputEnergy[CLDFB_NO_CHANNELS_MAX]; float protoEnergy[CLDFB_NO_CHANNELS_MAX]; +#endif } MONO_DOWNMIX_RENDERER_STRUCT, *MONO_DOWNMIX_RENDERER_HANDLE; -- GitLab From fa57896061aca09748003cc5ba04b8a76bd819a5 Mon Sep 17 00:00:00 2001 From: Dominik Weckbecker Date: Mon, 25 Sep 2023 09:59:26 +0200 Subject: [PATCH 6/6] fix formatting --- lib_dec/ivas_mono_dmx_renderer.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib_dec/ivas_mono_dmx_renderer.c b/lib_dec/ivas_mono_dmx_renderer.c index 2bf067157d..6dd42d3a56 100644 --- a/lib_dec/ivas_mono_dmx_renderer.c +++ b/lib_dec/ivas_mono_dmx_renderer.c @@ -72,7 +72,7 @@ ivas_error ivas_mono_dmx_renderer_open( hDownmix->inputEnergy = 0; hDownmix->protoEnergy = 0; #else - set_zero( hDownmix->inputEnergy, CLDFB_NO_CHANNELS_MAX ); + set_zero( hDownmix->inputEnergy, CLDFB_NO_CHANNELS_MAX ); set_zero( hDownmix->protoEnergy, CLDFB_NO_CHANNELS_MAX ); #endif st_ivas->hMonoDmxRenderer = hDownmix; @@ -129,7 +129,7 @@ void ivas_mono_downmix_render_passive( hDownmix->inputEnergy *= DOWNMIX_ALPHA; hDownmix->protoEnergy *= DOWNMIX_ALPHA; #else - hDownmix->inputEnergy[0] *= DOWNMIX_ALPHA; + hDownmix->inputEnergy[0] *= DOWNMIX_ALPHA; hDownmix->protoEnergy[0] *= DOWNMIX_ALPHA; #endif for ( i = 0; i < output_frame; i++ ) -- GitLab