Commit 82cb8f20 authored by Mohammadreza Naghibzadeh's avatar Mohammadreza Naghibzadeh
Browse files

Fix Q calculation in stereo_dft_generate_res_pred_fx().

parent 2a1b25e7
Loading
Loading
Loading
Loading
Loading
+11 −3
Original line number Diff line number Diff line
@@ -3186,17 +3186,25 @@ void stereo_dft_generate_res_pred_fx(
                    Word16 op;
#ifdef FIX_1946_CRASH_JBM_PROCESSING
                    scaleFactor = getScaleFactor32( &DFT_PRED_RES[shl( hStereoDft->band_limits[b], 1 )], sub( shl( len, 1 ), 1 ) ); // calc it in the range [2*hStereoDft->band_limits[b] : 2*(len-1)+1]
                    scaleFactor = sub( scaleFactor, 4 );                                                                            // add headroom
                    IF( GT_16( scaleFactor, 3 ) )
                    {
                        scaleFactor = sub( scaleFactor, 3 ); // add headroom
                    }
                    ELSE
                    {
                        scaleFactor = 0; // no guard added since it was fine without scaleFactor
                        move16();
                    }
                    FOR( i = hStereoDft->band_limits[b]; i < len; i++ )
                    {
                        Word32 x_2i = L_shl( DFT_PRED_RES[2 * i], scaleFactor );
                        Word32 x_2ip1 = L_shl( DFT_PRED_RES[2 * i + 1], scaleFactor );
                        past_dmx_nrg = Madd_32_32( Madd_32_32( past_dmx_nrg, x_2i, x_2i ), x_2ip1, x_2ip1 ); /* q_dft - 1 */
                        past_dmx_nrg = Madd_32_32( Madd_32_32( past_dmx_nrg, x_2i, x_2i ), x_2ip1, x_2ip1 ); /* q_dft - 2*scaleFactor */
                    }
#endif
                    op = BASOP_Util_Divide3232_Scale( L_add( 1, dmx_nrg ), L_add( 1, past_dmx_nrg ), &q_div ); /* q_sqrt */
#ifdef FIX_1946_CRASH_JBM_PROCESSING
                    q_sqrt = sub( q_div, shl( scaleFactor, 1 ) );
                    q_sqrt = add( q_div, shl( scaleFactor, 1 ) );
#else
                    q_sqrt = q_div;
#endif