Commit 3840a36f authored by Sandesh Venkatesh's avatar Sandesh Venkatesh
Browse files

Updates for 3GPP issue 1078

Link #1078
parent 048947e6
Loading
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -918,6 +918,8 @@ void core_signal_analysis_high_bitrate_ivas_fx(
                assert( frameno == 0 );
                windowed_samples[0] = L_deposit_l( overlap_mode[frameno] );     // Q0
                windowed_samples[1] = L_deposit_l( overlap_mode[frameno + 1] ); // Q0
                *q_win = 0;
                move16();
            }
            IF( NE_16( st->element_mode, IVAS_CPE_MDCT ) )
            {
+22 −26
Original line number Diff line number Diff line
@@ -775,36 +775,32 @@ ivas_error ivas_cpe_enc_fx(
        test();
        IF( hCPE->hStereoMdct != NULL && hCPE->hStereoMdct->hItd != NULL )
        {

            shift = getScaleFactor16( sts[1]->old_input_signal_fx, input_frame );
            Scale_sig( sts[1]->old_input_signal_fx, input_frame, shift ); /* sts[1]->q_old_inp + shift */
            sts[1]->q_old_inp = add( sts[1]->q_old_inp, shift );
            move16();
            shift = getScaleFactor16( sts[1]->input_fx, input_frame );
            Scale_sig( sts[1]->input_fx, input_frame, shift ); /* sts[1]->q_inp + shift */
            sts[1]->q_inp = add( sts[1]->q_inp, shift );
            move16();
            Scale_sig( sts[1]->input_fx, input_frame, sub( s_min( sts[1]->q_inp, sts[1]->q_old_inp ), sts[1]->q_inp ) );                /* min( sts[1]->q_inp, sts[1]->q_old_inp ) */
            Scale_sig( sts[1]->old_input_signal_fx, input_frame, sub( s_min( sts[1]->q_old_inp, sts[1]->q_inp ), sts[1]->q_old_inp ) ); /* min( sts[1]->q_inp, sts[1]->q_old_inp ) */
            sts[1]->q_inp = s_min( sts[1]->q_inp, sts[1]->q_old_inp );
            move16();
            sts[1]->q_old_inp = sts[1]->q_inp;
            Word16 q_min;
            q_min = sts[1]->q_old_inp;
            move16();
            q_min = s_min( q_min, sts[1]->q_inp );
            q_min = s_min( q_min, sts[0]->q_old_inp );
            q_min = s_min( q_min, sts[0]->q_inp );

            shift = getScaleFactor16( sts[0]->old_input_signal_fx, input_frame );
            Scale_sig( sts[0]->old_input_signal_fx, input_frame, shift ); /* sts[0]->q_old_inp + shift*/
            sts[0]->q_old_inp = add( sts[0]->q_old_inp, shift );
            move16();
            shift = getScaleFactor16( sts[0]->input_fx, input_frame );
            Scale_sig( sts[0]->input_fx, input_frame, shift ); /* sts[0]->q_inp + shift */
            sts[0]->q_inp = add( sts[0]->q_inp, shift );
            shift = norm_arr( sts[1]->old_input_signal_fx, input_frame );
            shift = s_min( shift, norm_arr( sts[1]->input_fx, input_frame ) );
            shift = s_min( shift, norm_arr( sts[0]->old_input_signal_fx, input_frame ) );
            shift = s_min( shift, norm_arr( sts[0]->input_fx, input_frame ) );

            q_min = add( q_min, shift );

            scale_sig( sts[1]->input_fx, input_frame, sub( q_min, sts[1]->q_inp ) );                /* q_min */
            scale_sig( sts[1]->old_input_signal_fx, input_frame, sub( q_min, sts[1]->q_old_inp ) ); /* q_min */
            scale_sig( sts[0]->input_fx, input_frame, sub( q_min, sts[0]->q_inp ) );                /* q_min */
            scale_sig( sts[0]->old_input_signal_fx, input_frame, sub( q_min, sts[0]->q_old_inp ) ); /* q_min */

            sts[1]->q_old_inp = q_min;
            sts[0]->q_old_inp = q_min;
            sts[1]->q_inp = q_min;
            sts[0]->q_inp = q_min;
            move16();
            move16();
            Scale_sig( sts[0]->input_fx, input_frame, sub( s_min( sts[0]->q_inp, sts[0]->q_old_inp ), sts[0]->q_inp ) );                /* min( sts[0]->q_inp, sts[0]->q_old_inp ) */
            Scale_sig( sts[0]->old_input_signal_fx, input_frame, sub( s_min( sts[0]->q_old_inp, sts[0]->q_inp ), sts[0]->q_old_inp ) ); /* min( sts[0]->q_inp, sts[0]->q_old_inp ) */
            sts[0]->q_inp = s_min( sts[0]->q_inp, sts[0]->q_old_inp );
            move16();
            sts[0]->q_old_inp = sts[0]->q_inp;
            move16();
        }

+2 −2
Original line number Diff line number Diff line
@@ -199,9 +199,9 @@ static void GetAttackForTCXDecision_ivas_fx( Word32 const *pSubblockNrg, Word32
        }
        ELSE /* no attack, but set index anyway in case of strong energy increase */
        {
            W_tmp2 = W_shr( W_mult_32_16( pAccSubblockNrg[i - 1], attackRatioThreshold_1_5 ), 1 );
            W_tmp2 = W_shr( W_mult_32_16( pSubblockNrg[i - 1], attackRatioThreshold_1_5 ), 1 );
            W_tmp1 = W_shl( pSubblockNrg[i], ( 15 - ( ATTACKTHRESHOLD_E + 1 ) ) );
            W_tmp3 = W_shr( W_mult_32_16( pAccSubblockNrg[i - 2], attackRatioThreshold_1_5 ), 1 );
            W_tmp3 = W_shr( W_mult_32_16( pSubblockNrg[i - 2], attackRatioThreshold_1_5 ), 1 );

            IF( s_and( ( (Word16) GT_64( W_tmp1, W_tmp2 ) ),
                       ( W_sub( W_tmp1, W_tmp3 ) > 0 ) ) )