Commit d907a2f1 authored by Sandesh Venkatesh's avatar Sandesh Venkatesh
Browse files

Merge branch 'mr_541_updates' into 'main'

Fix for LTV crashes observed with changes made for issue 824 (MR 541)

See merge request !543
parents d92661e5 84b635cb
Loading
Loading
Loading
Loading
Loading
+14 −34
Original line number Diff line number Diff line
@@ -2468,15 +2468,15 @@ void perform_noise_estimation_dec_ivas_fx(
        SWITCH( hFdCngDec->hFdCngCom->fftlen )
        {
            case 640:
                rescale_fac = 83886; // 4/(640 * 640) in Q33
                rescale_fac = 671089; // 4/(640 * 640) in Q36
                move32();
                BREAK;
            case 512:
                rescale_fac = 131072; // 4/(512 * 512) in Q33
                rescale_fac = 1048576; // 4/(512 * 512) in Q36
                move32();
                BREAK;
            case 320:
                rescale_fac = 335544; // 4/(320 * 320) in Q33
                rescale_fac = 2684354; // 4/(320 * 320) in Q36
                move32();
                BREAK;
            default:
@@ -2507,23 +2507,12 @@ void perform_noise_estimation_dec_ivas_fx(

            tmp_s = W_norm( W_tmp );
            tmp_q = sub( add( i_mult( sub( 31, fftBuffer_exp ), 2 ), tmp_s ), 32 );
            IF( tmp_q < 0 )
            {
                W_tmp = W_shr( W_tmp, negate( tmp_q ) );
            }
            *ptr_per = W_extract_h( W_shl( W_tmp, tmp_s ) );
            IF( LT_16( tmp_q, min_q ) )
            {
                reIter = ptr_per;
                Word16 diff;
                IF( tmp_q <= 0 )
                {
                    diff = min_q;
                    move16();
                }
                ELSE
                {
                diff = sub( min_q, tmp_q );
                }

                WHILE( reIter > periodog )
                {
@@ -2531,34 +2520,25 @@ void perform_noise_estimation_dec_ivas_fx(
                    *reIter = L_shr( *reIter, diff );
                    move32();
                }
                IF( tmp_q >= 0 )
                {
                min_q = tmp_q;
                move16();
            }
                ELSE IF( tmp_q < 0 )
            ELSE
            {
                    min_q = 0;
                }
                move16();
                Word16 diff;
                diff = sub( tmp_q, min_q );
                ( *ptr_per ) = L_shr( ( *ptr_per ), diff );
            }
            ( *ptr_per ) = W_extract_l( W_shr( W_tmp, sub( shl( sub( 31, fftBuffer_exp ), 1 ), min_q ) ) ); // Qmin_q
            move32();

            /* Rescale to get energy/sample: it should be 2*(1/N)*(2/N), parseval relation with 1/N,*2 for nrg computed till Nyquist only, 2/N as windowed samples correspond to half a frame*/
            ( *ptr_per ) = Mpy_32_32_r( ( *ptr_per ), rescale_fac ); // Q = min_q+2
            ( *ptr_per ) = Mpy_32_32_r( ( *ptr_per ), rescale_fac ); // Q = min_q+36-31=min_q+5
            move32();

            IF( tmp_q < 0 )
            {
                ( *ptr_per ) = L_shl( ( *ptr_per ), negate( tmp_q ) );
                move32();
            }

            ptr_r += 2;
            ptr_i += 2;
        }

        hFdCngDec->hFdCngCom->periodog_exp = sub( 31 - 2, min_q );
        hFdCngDec->hFdCngCom->periodog_exp = sub( 31 - 5, min_q );
        hFdCngDec->hFdCngCom->fftBuffer_exp = fftBuffer_exp;
        move16();
        move16();