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

Merge branch '3gpp_issue_1190_fix' into 'main'

Fix for 3GPP issue 1190: Frequency overshoot in MDCT-stereo @48kbps WB

See merge request !1030
parents 0ca1f14f 9360ad7d
Loading
Loading
Loading
Loading
+6 −4
Original line number Diff line number Diff line
@@ -520,7 +520,7 @@ static void kernel_switch_update_transforms_fx(
            Word16 tcx5Win[N_TCX10_MAX / 2 + L_MDCT_OVLP_MAX];    /* temporary buffer for TCX5 windowing */
            Word32 tcx5Win_32[N_TCX10_MAX / 2 + L_MDCT_OVLP_MAX]; /* temporary buffer for TCX5 windowing */
            Word16 windowedTimeSignal_16[2 + L_FRAME48k];
            Word16 q_shift, q_com;
            Word16 q_shift, q_com, q_temp;

            assert( L_subframe == nSubframes * hTcxCfg->tcx5SizeFB );

@@ -557,7 +557,8 @@ static void kernel_switch_update_transforms_fx(
            kernel_switch_trafo_fx( tcx5Win_32, sigR, leftOverlap, sub( s /* L_subfr. */, shr( add( leftOverlap, rightOverlap ), 1 ) ), rightOverlap, kernelType ); // *q_windowedTimeSignal + q_shift

            /* Move both sigR and sigI to common Q */
            q_com = s_min( *q_sig, sub( add( *q_windowedTimeSignal, q_shift ), Q1 ) );
            q_temp = add( sub( add( *q_windowedTimeSignal, q_shift ), Q1 ), L_norm_arr( sigR, L_subframe ) );
            q_com = s_min( *q_sig, q_temp );
            scale_sig32( sigR, s, sub( q_com, sub( add( *q_windowedTimeSignal, q_shift ), Q1 ) ) );
            scale_sig32( sigR + s, sub( L_subframe, s ), sub( q_com, *q_sig ) );
            scale_sig32( sigI, L_subframe, sub( q_com, *q_sig ) );
@@ -579,7 +580,7 @@ static void kernel_switch_update_transforms_fx(
        }
        ELSE /* tcxTransType != TCX_5 */
        {
            Word16 q_shift, q_com;
            Word16 q_shift, q_com, q_temp;
#ifdef FIX_ISSUE_1157
            q_shift = -Q8;
#else
@@ -590,7 +591,8 @@ static void kernel_switch_update_transforms_fx(
            kernel_switch_trafo_fx( windowedTimeSignal + 2, sigR, leftOverlap, sub( s /* L_subfr. */, shr( add( leftOverlap, rightOverlap ), 1 ) ), rightOverlap, kernelType ); // *q_windowedTimeSignal + q_shift

            /* Move both sigR and sigI to common Q */
            q_com = s_min( *q_sig, sub( add( *q_windowedTimeSignal, q_shift ), Q1 ) );
            q_temp = add( sub( add( *q_windowedTimeSignal, q_shift ), Q1 ), L_norm_arr( sigR, L_subframe ) );
            q_com = s_min( *q_sig, q_temp );
            scale_sig32( sigR, s, sub( q_com, sub( add( *q_windowedTimeSignal, q_shift ), Q1 ) ) );
            scale_sig32( sigR + s, sub( L_subframe, s ), sub( q_com, *q_sig ) );
            scale_sig32( sigI, L_subframe, sub( q_com, *q_sig ) );