From 614bfd0cb538889ea51326bc04b11e73ca1c3db1 Mon Sep 17 00:00:00 2001 From: Markus Multrus Date: Fri, 9 Jan 2026 14:54:31 +0100 Subject: [PATCH 1/5] take correct frame-length into account for guard-bit calculation --- apps/renderer.c | 4 ++++ lib_com/options.h | 1 + 2 files changed, 5 insertions(+) diff --git a/apps/renderer.c b/apps/renderer.c index 70e68c757..0e499863c 100644 --- a/apps/renderer.c +++ b/apps/renderer.c @@ -1646,8 +1646,12 @@ int main( ObjectPositionBuffer mtdBuffer; outBuffer.pq_fact = &outBuffer.q_factor; +#ifdef FIX_2257_INCR_GUARD_BITS + Word16 gd_bits = find_guard_bits( frameSize_smpls ); +#else Word16 subframe_len = (Word16) ( args.sampleRate / ( FRAMES_PER_SEC * MAX_PARAM_SPATIAL_SUBFRAMES ) ); Word16 gd_bits = find_guard_bits( subframe_len ); +#endif Word16 prev_q_fact = Q11; while ( 1 ) { diff --git a/lib_com/options.h b/lib_com/options.h index 6a07f86b9..795d1c4bd 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -129,6 +129,7 @@ #define FIX_1381_BWD /* VA: issue 1381: apply no hysteresis in BWD at higher bitrates also in mono MASA and OMASA */ #define FIX_2285_CODE_DECODER_INIT_BW /* VA: basop issue 2285: fix core-decoder initialization bandwidth */ #define FIX_2306_MISSING_UPDATE_LOWRATE_PITCH_GAIN /* Dolby: Fix missing update of low-rate pitch gain in the S/M classifier */ +#define FIX_2257_INCR_GUARD_BITS /* FhG: take correct rendering frame-size into account for guard-bits calculation */ /* ##################### End NON-BE switches ########################### */ -- GitLab From a778abb99f49346458758292f92643e414456ef8 Mon Sep 17 00:00:00 2001 From: Markus Multrus Date: Mon, 12 Jan 2026 10:22:31 +0100 Subject: [PATCH 2/5] add guarded bits for memory shift --- lib_com/cldfb_fx.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib_com/cldfb_fx.c b/lib_com/cldfb_fx.c index 1cfb30d57..83e1fa0bf 100644 --- a/lib_com/cldfb_fx.c +++ b/lib_com/cldfb_fx.c @@ -595,6 +595,9 @@ void cldfbAnalysis_ts_fx_var_q( IF( NE_16( h_cldfb->Q_cldfb_state, *q_cldfb ) ) { Word16 norm_st = L_norm_arr( timeBuffer_fx, offset ); +#ifdef FIX_2257_INCR_GUARD_BITS + norm_st = sub( norm_st, find_guarded_bits_fx( frameSize ) ); +#endif IF( GE_16( norm_st, sub( *q_cldfb, h_cldfb->Q_cldfb_state ) ) ) { scale_sig32( timeBuffer_fx, offset, sub( *q_cldfb, h_cldfb->Q_cldfb_state ) ); -- GitLab From f2d37a5ea7aeb27bf63362f9e51fc6651564eb65 Mon Sep 17 00:00:00 2001 From: Markus Multrus Date: Mon, 12 Jan 2026 14:34:54 +0100 Subject: [PATCH 3/5] alternative fix --- lib_com/cldfb_fx.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/lib_com/cldfb_fx.c b/lib_com/cldfb_fx.c index 83e1fa0bf..c64447a34 100644 --- a/lib_com/cldfb_fx.c +++ b/lib_com/cldfb_fx.c @@ -596,8 +596,19 @@ void cldfbAnalysis_ts_fx_var_q( { Word16 norm_st = L_norm_arr( timeBuffer_fx, offset ); #ifdef FIX_2257_INCR_GUARD_BITS + Word16 q_min; + norm_st = sub( norm_st, find_guarded_bits_fx( frameSize ) ); -#endif + q_min = s_min( add( norm_st, h_cldfb->Q_cldfb_state ), *q_cldfb ); + + scale_sig32( timeBuffer_fx, offset, sub( q_min, h_cldfb->Q_cldfb_state ) ); + scale_sig32( &timeBuffer_fx[offset], frameSize, sub( q_min, *q_cldfb ) ); + + *q_cldfb = q_min; + move16(); + h_cldfb->Q_cldfb_state = q_min; + move16(); +#else IF( GE_16( norm_st, sub( *q_cldfb, h_cldfb->Q_cldfb_state ) ) ) { scale_sig32( timeBuffer_fx, offset, sub( *q_cldfb, h_cldfb->Q_cldfb_state ) ); @@ -613,6 +624,7 @@ void cldfbAnalysis_ts_fx_var_q( *q_cldfb = h_cldfb->Q_cldfb_state; move16(); } +#endif } /* only process needed cols */ -- GitLab From 40f34aaa8c575db4d78de80c477b3974420be1bf Mon Sep 17 00:00:00 2001 From: Markus Multrus Date: Mon, 12 Jan 2026 17:40:53 +0100 Subject: [PATCH 4/5] alternative patch --- apps/renderer.c | 2 +- lib_com/cldfb_fx.c | 16 ++-------------- 2 files changed, 3 insertions(+), 15 deletions(-) diff --git a/apps/renderer.c b/apps/renderer.c index 0e499863c..35d686373 100644 --- a/apps/renderer.c +++ b/apps/renderer.c @@ -1646,7 +1646,7 @@ int main( ObjectPositionBuffer mtdBuffer; outBuffer.pq_fact = &outBuffer.q_factor; -#ifdef FIX_2257_INCR_GUARD_BITS +#ifdef DISABLED__FIX_2257_INCR_GUARD_BITS Word16 gd_bits = find_guard_bits( frameSize_smpls ); #else Word16 subframe_len = (Word16) ( args.sampleRate / ( FRAMES_PER_SEC * MAX_PARAM_SPATIAL_SUBFRAMES ) ); diff --git a/lib_com/cldfb_fx.c b/lib_com/cldfb_fx.c index c64447a34..72a828102 100644 --- a/lib_com/cldfb_fx.c +++ b/lib_com/cldfb_fx.c @@ -596,19 +596,8 @@ void cldfbAnalysis_ts_fx_var_q( { Word16 norm_st = L_norm_arr( timeBuffer_fx, offset ); #ifdef FIX_2257_INCR_GUARD_BITS - Word16 q_min; - - norm_st = sub( norm_st, find_guarded_bits_fx( frameSize ) ); - q_min = s_min( add( norm_st, h_cldfb->Q_cldfb_state ), *q_cldfb ); - - scale_sig32( timeBuffer_fx, offset, sub( q_min, h_cldfb->Q_cldfb_state ) ); - scale_sig32( &timeBuffer_fx[offset], frameSize, sub( q_min, *q_cldfb ) ); - - *q_cldfb = q_min; - move16(); - h_cldfb->Q_cldfb_state = q_min; - move16(); -#else + norm_st = sub( norm_st, find_guarded_bits_fx( shr( h_cldfb->no_channels, 2 ) ) ); +#endif IF( GE_16( norm_st, sub( *q_cldfb, h_cldfb->Q_cldfb_state ) ) ) { scale_sig32( timeBuffer_fx, offset, sub( *q_cldfb, h_cldfb->Q_cldfb_state ) ); @@ -624,7 +613,6 @@ void cldfbAnalysis_ts_fx_var_q( *q_cldfb = h_cldfb->Q_cldfb_state; move16(); } -#endif } /* only process needed cols */ -- GitLab From 60f0209160ec76aac1bb08186afb1f7de65fe801 Mon Sep 17 00:00:00 2001 From: Markus Multrus Date: Mon, 12 Jan 2026 20:20:29 +0100 Subject: [PATCH 5/5] remove previously disabled code --- apps/renderer.c | 4 ---- 1 file changed, 4 deletions(-) diff --git a/apps/renderer.c b/apps/renderer.c index 35d686373..70e68c757 100644 --- a/apps/renderer.c +++ b/apps/renderer.c @@ -1646,12 +1646,8 @@ int main( ObjectPositionBuffer mtdBuffer; outBuffer.pq_fact = &outBuffer.q_factor; -#ifdef DISABLED__FIX_2257_INCR_GUARD_BITS - Word16 gd_bits = find_guard_bits( frameSize_smpls ); -#else Word16 subframe_len = (Word16) ( args.sampleRate / ( FRAMES_PER_SEC * MAX_PARAM_SPATIAL_SUBFRAMES ) ); Word16 gd_bits = find_guard_bits( subframe_len ); -#endif Word16 prev_q_fact = Q11; while ( 1 ) { -- GitLab