Loading lib_com/edct_fx.c +12 −0 Original line number Diff line number Diff line Loading @@ -315,11 +315,19 @@ void edct_16fx( L_tmp = L_mult(x[i2],edct_table[i]);/*Q(Qx+16) */ Lacc = L_mac(L_tmp,*px,*pt);/*Q(Qx+16) */ #ifdef BASOP_NOGLOB re2[i] = round_fx(L_shl_o(Lacc, Q_edct, &Overflow)); /* Q(Qx+Q_edct) */ #else re2[i] = round_fx(L_shl(Lacc, Q_edct)); /* Q(Qx+Q_edct) */ #endif L_tmp = L_mult(*px,edct_table[i]);/*Q(Qx+16) */ Lacc = L_msu(L_tmp,x[i2],*pt);/*Q(Qx+16) */ #ifdef BASOP_NOGLOB im2[i] = round_fx(L_shl_o(Lacc, Q_edct, &Overflow)); /* Q(Qx+Q_edct) */ #else im2[i] = round_fx(L_shl(Lacc, Q_edct)); /* Q(Qx+Q_edct) */ #endif px -= 2; pt--; Loading Loading @@ -352,7 +360,11 @@ void edct_16fx( #endif tmp = mult_r(re2[i],fact); /*Q(Qx+Q_edct) */ #ifdef BASOP_NOGLOB im[i] = add_o(im2[i], tmp, &Overflow); /*Q(Qx+Q_edct) */ move16(); #else im[i] = add(im2[i],tmp); /*Q(Qx+Q_edct) */ move16(); #endif } /* Post-rotate and obtain the output data */ Loading lib_com/enhancer_fx.c +8 −0 Original line number Diff line number Diff line Loading @@ -81,6 +81,10 @@ void enhancer_fx( Word16 gain_code_hi; Word16 pit_sharp, tmp16; Word16 excp[L_SUBFR], sc; #ifdef BASOP_NOGLOB Flag Overflow = 0; #endif pit_sharp = gain_pit; move16(); /* to remove gcc warning */ Loading Loading @@ -137,7 +141,11 @@ void enhancer_fx( *-----------------------------------------------------------*/ /* tmp = 0.5f * (1.0f - voice_fac) */ #ifdef BASOP_NOGLOB tmp = msu_ro(0x40000000, voice_fac, 16384, &Overflow); /*Q15 */ /* 1=unvoiced, 0=voiced */ #else tmp = msu_r(0x40000000, voice_fac, 16384); /*Q15 */ /* 1=unvoiced, 0=voiced */ #endif /* fac = stab_fac * tmp */ fac = mult(stab_fac, tmp); /*Q15*/ Loading lib_com/fft_fx.c +188 −29 Original line number Diff line number Diff line Loading @@ -1712,17 +1712,22 @@ static void cftfsub_16fx( j1 = add(j,l); #ifdef BASOP_NOGLOB x0r = sub_o(a[j], a[j1], &Overflow); x0i = sub_o(a[j + 1], a[j1 + 1], &Overflow); #else x0r = sub(a[j],a[j1]); #endif x0i = sub(a[j + 1], a[j1 + 1]); #endif #ifdef BASOP_NOGLOB a[j] = add_o(a[j], a[j1], &Overflow); #else a[j] = add(a[j],a[j1]); #endif move16(); #ifdef BASOP_NOGLOB a[j + 1] = add_o(a[j + 1], a[j1 + 1], &Overflow); #else a[j + 1] = add(a[j + 1],a[j1 + 1]); #endif move16(); a[j1] = x0r; move16(); Loading @@ -1748,6 +1753,9 @@ static void cft1st_16fx( Word16 x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i; Word16 tmp; Word32 L_tmp; #ifdef BASOP_NOGLOB Flag Overflow = 0; #endif x0r = add(a[0],a[2]); x0i = add(a[1],a[3]); Loading Loading @@ -1887,8 +1895,13 @@ static void cft1st_16fx( x0r = add(a[j + 8],a[j + 10]); x0i = add(a[j + 9],a[j + 11]); #ifdef BASOP_NOGLOB x1r = sub_o(a[j + 8], a[j + 10], &Overflow); x1i = sub_o(a[j + 9], a[j + 11], &Overflow); #else x1r = sub(a[j + 8],a[j + 10]); x1i = sub(a[j + 9], a[j + 11]); #endif x2r = add(a[j + 12],a[j + 14]); x2i = add(a[j + 13],a[j + 15]); x3r = sub(a[j + 12],a[j + 14]); Loading @@ -1903,7 +1916,11 @@ static void cft1st_16fx( tmp = negate(x0r); L_tmp = Mult_32_16(wk2i,tmp);/*Q(15+Qx+Q_edct) */ L_tmp = Msub_32_16(L_tmp,wk2r,x0i); /*Q(15+Qx+Q_edct) */ #ifdef BASOP_NOGLOB a[j + 12] = round_fx_o(L_shl_o(L_tmp, 1, &Overflow), &Overflow); /*Q(Qx+Q_edct) */ #else a[j + 12] = round_fx(L_shl(L_tmp,1)); /*Q(Qx+Q_edct) */ #endif tmp = negate(x0i); L_tmp = Mult_32_16(wk2i,tmp);/*Q(15+Qx+Q_edct) */ Loading @@ -1918,7 +1935,11 @@ static void cft1st_16fx( L_tmp = Mult_32_16(wk1r,x0i);/*Q(15+Qx+Q_edct) */ L_tmp = Madd_32_16(L_tmp,wk1i,x0r); /*Q(15+Qx+Q_edct) */ #ifdef BASOP_NOGLOB a[j + 11] = round_fx_o(L_shl_o(L_tmp, 1, &Overflow), &Overflow); /*Q(Qx+Q_edct) */ #else a[j + 11] = round_fx(L_shl(L_tmp,1)); /*Q(Qx+Q_edct) */ #endif x0r = add(x1r,x3i); x0i = sub(x1i,x3r); Loading @@ -1929,7 +1950,11 @@ static void cft1st_16fx( L_tmp = Mult_32_16(wk3r,x0i); /*Q(15+Qx+Q_edct) */ L_tmp = Madd_32_16(L_tmp,wk3i,x0r); /*Q(15+Qx+Q_edct) */ #ifdef BASOP_NOGLOB a[j + 15] = round_fx(L_shl_o(L_tmp, 1, &Overflow)); /*Q(Qx+Q_edct) */ #else a[j + 15] = round_fx(L_shl(L_tmp,1)); /*Q(Qx+Q_edct) */ #endif } return; Loading @@ -1952,11 +1977,45 @@ static void cftmdl_16fx( Word16 tmp, tmp2; Word32 L_tmp; Word32 L_x0r, L_x0i; #ifdef BASOP_NOGLOB Flag Overflow = 0; #endif m = shl(l, 2); move16(); FOR (j = 0; j < l; j += 2) { #ifdef BASOP_NOGLOB j1 = add_o(j, l, &Overflow); j2 = add_o(j1, l, &Overflow); j3 = add_o(j2, l, &Overflow); x0r = add_o(a[j], a[j1], &Overflow); x0i = add_o(a[j + 1], a[j1 + 1], &Overflow); x1r = sub_o(a[j], a[j1], &Overflow); x1i = sub_o(a[j + 1], a[j1 + 1], &Overflow); x2r = add_o(a[j2], a[j3], &Overflow); x2i = add_o(a[j2 + 1], a[j3 + 1], &Overflow); x3r = sub_o(a[j2], a[j3], &Overflow); x3i = sub_o(a[j2 + 1], a[j3 + 1], &Overflow); a[j] = add_o(x0r, x2r, &Overflow); move16(); a[j + 1] = add_o(x0i, x2i, &Overflow); move16(); a[j2] = sub_o(x0r, x2r, &Overflow); move16(); a[j2 + 1] = sub_o(x0i, x2i, &Overflow); move16(); a[j1] = sub_o(x1r, x3i, &Overflow); move16(); a[j1 + 1] = add_o(x1i, x3r, &Overflow); move16(); a[j3] = add_o(x1r, x3i, &Overflow); move16(); a[j3 + 1] = sub_o(x1i, x3r, &Overflow); move16(); #else j1 = add(j, l); j2 = add(j1, l); j3 = add(j2, l); Loading Loading @@ -1984,6 +2043,7 @@ static void cftmdl_16fx( move16(); a[j3 + 1] = sub(x1i, x3r); move16(); #endif } wk1r = w[2]; Loading @@ -1996,10 +2056,24 @@ static void cftmdl_16fx( j3 = add(j2,l); x0r = add(a[j],a[j1]); x0i = add(a[j + 1],a[j1 + 1]); #ifdef BASOP_NOGLOB x1r = sub_o(a[j], a[j1], &Overflow); x1i = sub_o(a[j + 1], a[j1 + 1], &Overflow); #else x1r = sub(a[j],a[j1]); x1i = sub(a[j + 1], a[j1 + 1]); #endif x2r = add(a[j2],a[j3]); x2i = add(a[j2 + 1],a[j3 + 1]); #ifdef BASOP_NOGLOB x3r = sub_o(a[j2], a[j3], &Overflow); x3i = sub_o(a[j2 + 1], a[j3 + 1], &Overflow); a[j] = add_o(x0r, x2r, &Overflow); move16(); a[j + 1] = add_o(x0i, x2i, &Overflow); move16(); a[j2] = sub_o(x2i, x0i, &Overflow); #else x3r = sub(a[j2],a[j3]); x3i = sub(a[j2 + 1], a[j3 + 1]); a[j] = add(x0r, x2r); Loading @@ -2007,27 +2081,48 @@ static void cftmdl_16fx( a[j + 1] = add(x0i, x2i); move16(); a[j2] = sub(x2i, x0i); #endif move16(); #ifdef BASOP_NOGLOB a[j2 + 1] = sub_o(x0r, x2r, &Overflow); #else a[j2 + 1] = sub(x0r,x2r); #endif move16(); x0r = sub(x1r,x3i); x0i = add(x1i,x3r); #ifdef BASOP_NOGLOB tmp = sub_o(x0r, x0i, &Overflow); #else tmp = sub(x0r,x0i); #endif L_tmp = Mult_32_16(wk1r,tmp);/*Q(15+Qx+Q_edct) */ a[j1] = round_fx(L_shl(L_tmp,1)); /*Q(Qx+Q_edct) */ #ifdef BASOP_NOGLOB tmp = add_o(x0r, x0i, &Overflow); #else tmp = add(x0r,x0i); #endif L_tmp = Mult_32_16(wk1r,tmp); /*Q(15+Qx+Q_edct) */ a[j1 + 1] = round_fx(L_shl(L_tmp,1)); /*Q(Qx+Q_edct) */ x0r = add(x3i,x1r); x0i = sub(x3r,x1i); #ifdef BASOP_NOGLOB tmp = sub_o(x0i, x0r, &Overflow); #else tmp = sub(x0i,x0r); #endif L_tmp = Mult_32_16(wk1r,tmp);/*Q(15+Qx+Q_edct) */ a[j3] = round_fx(L_shl(L_tmp,1)); /*Q(Qx+Q_edct) */ #ifdef BASOP_NOGLOB tmp = add_o(x0i, x0r, &Overflow); #else tmp = add(x0i,x0r); #endif L_tmp = Mult_32_16(wk1r,tmp); /*Q(15+Qx+Q_edct) */ a[j3 + 1] = round_fx(L_shl(L_tmp,1)); /*Q(Qx+Q_edct) */ } Loading Loading @@ -2061,30 +2156,52 @@ static void cftmdl_16fx( x1i = sub(a[j + 1],a[j1 + 1]); x2r = add(a[j2],a[j3]); x2i = add(a[j2 + 1],a[j3 + 1]); #ifdef BASOP_NOGLOB x3r = sub_o(a[j2], a[j3], &Overflow); x3i = sub_o(a[j2 + 1], a[j3 + 1], &Overflow); #else x3r = sub(a[j2],a[j3]); x3i = sub(a[j2 + 1], a[j3 + 1]); #endif a[j] = add(x0r,x2r); move16(); a[j + 1] = add(x0i,x2i); move16(); #ifdef BASOP_NOGLOB x0r = sub_o(x0r, x2r, &Overflow); x0i = sub_o(x0i, x2i, &Overflow); #else x0r = sub(x0r,x2r); x0i = sub(x0i, x2i); #endif L_tmp = Mult_32_16(wk2r,x0r); /*Q(15+Qx+Q_edct) */ L_tmp = Msub_32_16(L_tmp,wk2i,x0i); /*Q(15+Qx+Q_edct) */ #ifdef BASOP_NOGLOB a[j2] = round_fx_o(L_shl_o(L_tmp, 1, &Overflow), &Overflow); /*Q(Qx+Q_edct) */ #else a[j2] = round_fx(L_shl(L_tmp,1)); /*Q(Qx+Q_edct) */ #endif L_tmp = Mult_32_16(wk2r,x0i); /*Q(15+Qx+Q_edct) */ L_tmp = Madd_32_16(L_tmp,wk2i,x0r); /*Q(15+Qx+Q_edct) */ #ifdef BASOP_NOGLOB a[j2 + 1] = round_fx_o(L_shl_o(L_tmp, 1, &Overflow), &Overflow); /*Q(Qx+Q_edct) */ #else a[j2 + 1] = round_fx(L_shl(L_tmp,1)); /*Q(Qx+Q_edct) */ #endif x0r = sub(x1r,x3i); x0i = add(x1i,x3r); L_tmp = Mult_32_16(wk1r,x0r); /*Q(15+Qx+Q_edct) */ L_tmp = Msub_32_16(L_tmp,wk1i,x0i); /*Q(15+Qx+Q_edct) */ #ifdef BASOP_NOGLOB a[j1] = round_fx_o(L_shl_o(L_tmp, 1, &Overflow), &Overflow); /*Q(Qx+Q_edct) */ #else a[j1] = round_fx(L_shl(L_tmp,1)); /*Q(Qx+Q_edct) */ #endif L_tmp = Mult_32_16(wk1r,x0i); /*Q(15+Qx+Q_edct) */ L_tmp = Madd_32_16(L_tmp,wk1i,x0r); /*Q(15+Qx+Q_edct) */ Loading @@ -2096,11 +2213,19 @@ static void cftmdl_16fx( x0i = extract_l(L_x0i); L_tmp = Mult_32_16(wk3r,x0r); /*Q(15+Qx+Q_edct) */ L_tmp = Msub_32_16(L_tmp,wk3i,x0i); /*Q(15+Qx+Q_edct) */ #ifdef BASOP_NOGLOB a[j3] = round_fx_o(L_shl_o(L_tmp, 1, &Overflow), &Overflow); /*Q(Qx+Q_edct) */ #else a[j3] = round_fx(L_shl(L_tmp,1)); /*Q(Qx+Q_edct) */ #endif L_tmp = Mult_32_16(wk3r,x0i); /*Q(15+Qx+Q_edct) */ L_tmp = Madd_32_16(L_tmp,wk3i,x0r); /*Q(15+Qx+Q_edct) */ #ifdef BASOP_NOGLOB a[j3 + 1] = round_fx_o(L_shl_o(L_tmp, 1, &Overflow), &Overflow); /*Q(Qx+Q_edct) */ #else a[j3 + 1] = round_fx(L_shl(L_tmp,1)); /*Q(Qx+Q_edct) */ #endif } wk1r = w[k2 + 2]; Loading @@ -2125,47 +2250,81 @@ static void cftmdl_16fx( x1i = sub(a[j + 1],a[j1 + 1]); x2r = add(a[j2],a[j3]); x2i = add(a[j2 + 1],a[j3 + 1]); #ifdef BASOP_NOGLOB x3r = sub_o(a[j2], a[j3], &Overflow); x3i = sub_o(a[j2 + 1], a[j3 + 1], &Overflow); #else x3r = sub(a[j2],a[j3]); x3i = sub(a[j2 + 1], a[j3 + 1]); #endif a[j] = add(x0r,x2r); move16(); a[j + 1] = add(x0i,x2i); move16(); #ifdef BASOP_NOGLOB x0r = sub_o(x0r, x2r, &Overflow); x0i = sub_o(x0i, x2i, &Overflow); #else x0r = sub(x0r,x2r); x0i = sub(x0i, x2i); #endif tmp = negate(x0r); L_tmp = Mult_32_16(wk2i,tmp);/*Q(15+Qx+Q_edct) */ L_tmp = Msub_32_16(L_tmp,wk2r,x0i); /*Q(15+Qx+Q_edct) */ #ifdef BASOP_NOGLOB a[j2] = round_fx_o(L_shl_o(L_tmp, 1, &Overflow), &Overflow); /*Q(Qx+Q_edct) */ #else a[j2] = round_fx(L_shl(L_tmp,1)); /*Q(Qx+Q_edct) */ #endif tmp = negate(x0i); L_tmp = Mult_32_16(wk2i,tmp);/*Q(15+Qx+Q_edct) */ L_tmp = Madd_32_16(L_tmp,wk2r,x0r); /*Q(15+Qx+Q_edct) */ #ifdef BASOP_NOGLOB a[j2 + 1] = round_fx_o(L_shl_o(L_tmp, 1, &Overflow), &Overflow); /*Q(Qx+Q_edct) */ #else a[j2 + 1] = round_fx(L_shl(L_tmp,1)); /*Q(Qx+Q_edct) */ #endif x0r = sub(x1r,x3i); x0i = add(x1i,x3r); L_tmp = Mult_32_16(wk1r,x0r);/*Q(15+Qx+Q_edct) */ L_tmp = Msub_32_16(L_tmp,wk1i,x0i); /*Q(15+Qx+Q_edct) */ #ifdef BASOP_NOGLOB a[j1] = round_fx_o(L_shl_o(L_tmp, 1, &Overflow), &Overflow); /*Q(Qx+Q_edct) */ #else a[j1] = round_fx(L_shl(L_tmp,1)); /*Q(Qx+Q_edct) */ #endif L_tmp = Mult_32_16(wk1r,x0i);/*Q(15+Qx+Q_edct) */ L_tmp = Madd_32_16(L_tmp,wk1i,x0r); /*Q(15+Qx+Q_edct) */ #ifdef BASOP_NOGLOB a[j1 + 1] = round_fx_o(L_shl_o(L_tmp, 1, &Overflow), &Overflow); /*Q(Qx+Q_edct) */ #else a[j1 + 1] = round_fx(L_shl(L_tmp,1)); /*Q(Qx+Q_edct) */ #endif x0r = add(x1r,x3i); x0i = sub(x1i,x3r); L_tmp = Mult_32_16(wk3r,x0r); /*Q(15+Qx+Q_edct) */ L_tmp = Msub_32_16(L_tmp,wk3i,x0i); /*Q(15+Qx+Q_edct) */ #ifdef BASOP_NOGLOB a[j3] = round_fx_o(L_shl_o(L_tmp, 1, &Overflow), &Overflow); /*Q(Qx+Q_edct) */ #else a[j3] = round_fx(L_shl(L_tmp,1)); /*Q(Qx+Q_edct) */ #endif L_tmp = Mult_32_16(wk3r,x0i); /*Q(15+Qx+Q_edct) */ L_tmp = Madd_32_16(L_tmp,wk3i,x0r); /*Q(15+Qx+Q_edct) */ #ifdef BASOP_NOGLOB a[j3 + 1] = round_fx_o(L_shl_o(L_tmp, 1, &Overflow), &Overflow); /*Q(Qx+Q_edct) */ #else a[j3 + 1] = round_fx(L_shl(L_tmp,1)); /*Q(Qx+Q_edct) */ #endif } } Loading lib_com/frame_ener_fx.c +16 −0 Original line number Diff line number Diff line Loading @@ -158,6 +158,10 @@ Word16 frame_energy_fx( /* o : Frame energy in const Word16 *pt1; Word16 tmp16, exp1, exp2, tmp1, tmp2; Word16 len, enern; #ifdef BASOP_NOGLOB Flag Overflow = 0; #endif /* len = (0.5f * (pitch[2]/64.0 + pitch[3]/64.0) + 0.5f) */ len = mult_r(add(pitch[2], pitch[3]), 256); Loading Loading @@ -191,14 +195,26 @@ Word16 frame_energy_fx( /* o : Frame energy in /*add ld(2^exp1)=exp1 but check format, first*/ tmp16=sub(sub(15,norm_s(exp1)),5); /*factor to shift Ltmp and exp1 with (shr) to avoid overflows when adding*/ #ifdef BASOP_NOGLOB Ltmp = L_shr_o(Ltmp, tmp16, &Overflow); /*Q25, tmp16*/ #else Ltmp= L_shr(Ltmp,tmp16); /*Q25, tmp16*/ #endif exp2 = shr(exp1,tmp16); /*Q0 , tmp16*/ #ifdef BASOP_NOGLOB Ltmp = L_add_o(Ltmp, L_shl(L_deposit_l(exp2), 25), &Overflow); /*Q25, tmp16, normalized*/ #else Ltmp = L_add(Ltmp,L_shl(L_deposit_l(exp2),25)); /*Q25, tmp16, normalized*/ #endif /*make 10*log10 out of log2*/ Ltmp = Mpy_32_16_1(Ltmp,LG10); /*Q25,tmp16 * Q13 = Q23, tmp16*/ *frame_ener = extract_h(L_shl(Ltmp,add(tmp16,1)));/*Q8*/ move16(); #ifdef BASOP_NOGLOB enern = sub_o(*frame_ener, lp_speech, &Overflow); /*Q8*/ #else enern = sub( *frame_ener ,lp_speech); /*Q8*/ #endif return enern; } lib_dec/hq_lr_dec_fx.c +7 −0 Original line number Diff line number Diff line Loading @@ -177,6 +177,9 @@ void hq_lr_dec_fx( Word16 beta_fx;/*Q14 1.05f; */ Word16 adjustFlag; Word16 bw_low, bw_high; #ifdef BASOP_NOGLOB Flag Overflow = 0; #endif HQ_DEC_HANDLE hHQ_core = st_fx->hHQ_core; Loading Loading @@ -499,7 +502,11 @@ void hq_lr_dec_fx( { L_tmp = Mult_32_16(Ep_tmp_fx[i],sub(bands_fx,lowband));/*Q(13+0-15 = -2) */ tmp = Calc_inv(L_shl(L_tmp,14), &exp); #ifdef BASOP_NOGLOB L_tmp = L_shl_o(Mult_32_16(Ep_avrg_fx, tmp), sub(14, exp), &Overflow);/*Q(13+exp-15 +14-exp+2 = 14) */ #else L_tmp = L_shl(Mult_32_16(Ep_avrg_fx,tmp),sub(14,exp));/*Q(13+exp-15 +14-exp+2 = 14) */ #endif L_tmp =L_max(L_tmp,16384); /*14 */ tmp=extract_l(L_min(L_tmp,beta_fx)); /*14 */ alpha_fx=shl(mult(alpha_fx,tmp),1);/*14+14-15 +1=14 */ Loading Loading
lib_com/edct_fx.c +12 −0 Original line number Diff line number Diff line Loading @@ -315,11 +315,19 @@ void edct_16fx( L_tmp = L_mult(x[i2],edct_table[i]);/*Q(Qx+16) */ Lacc = L_mac(L_tmp,*px,*pt);/*Q(Qx+16) */ #ifdef BASOP_NOGLOB re2[i] = round_fx(L_shl_o(Lacc, Q_edct, &Overflow)); /* Q(Qx+Q_edct) */ #else re2[i] = round_fx(L_shl(Lacc, Q_edct)); /* Q(Qx+Q_edct) */ #endif L_tmp = L_mult(*px,edct_table[i]);/*Q(Qx+16) */ Lacc = L_msu(L_tmp,x[i2],*pt);/*Q(Qx+16) */ #ifdef BASOP_NOGLOB im2[i] = round_fx(L_shl_o(Lacc, Q_edct, &Overflow)); /* Q(Qx+Q_edct) */ #else im2[i] = round_fx(L_shl(Lacc, Q_edct)); /* Q(Qx+Q_edct) */ #endif px -= 2; pt--; Loading Loading @@ -352,7 +360,11 @@ void edct_16fx( #endif tmp = mult_r(re2[i],fact); /*Q(Qx+Q_edct) */ #ifdef BASOP_NOGLOB im[i] = add_o(im2[i], tmp, &Overflow); /*Q(Qx+Q_edct) */ move16(); #else im[i] = add(im2[i],tmp); /*Q(Qx+Q_edct) */ move16(); #endif } /* Post-rotate and obtain the output data */ Loading
lib_com/enhancer_fx.c +8 −0 Original line number Diff line number Diff line Loading @@ -81,6 +81,10 @@ void enhancer_fx( Word16 gain_code_hi; Word16 pit_sharp, tmp16; Word16 excp[L_SUBFR], sc; #ifdef BASOP_NOGLOB Flag Overflow = 0; #endif pit_sharp = gain_pit; move16(); /* to remove gcc warning */ Loading Loading @@ -137,7 +141,11 @@ void enhancer_fx( *-----------------------------------------------------------*/ /* tmp = 0.5f * (1.0f - voice_fac) */ #ifdef BASOP_NOGLOB tmp = msu_ro(0x40000000, voice_fac, 16384, &Overflow); /*Q15 */ /* 1=unvoiced, 0=voiced */ #else tmp = msu_r(0x40000000, voice_fac, 16384); /*Q15 */ /* 1=unvoiced, 0=voiced */ #endif /* fac = stab_fac * tmp */ fac = mult(stab_fac, tmp); /*Q15*/ Loading
lib_com/fft_fx.c +188 −29 Original line number Diff line number Diff line Loading @@ -1712,17 +1712,22 @@ static void cftfsub_16fx( j1 = add(j,l); #ifdef BASOP_NOGLOB x0r = sub_o(a[j], a[j1], &Overflow); x0i = sub_o(a[j + 1], a[j1 + 1], &Overflow); #else x0r = sub(a[j],a[j1]); #endif x0i = sub(a[j + 1], a[j1 + 1]); #endif #ifdef BASOP_NOGLOB a[j] = add_o(a[j], a[j1], &Overflow); #else a[j] = add(a[j],a[j1]); #endif move16(); #ifdef BASOP_NOGLOB a[j + 1] = add_o(a[j + 1], a[j1 + 1], &Overflow); #else a[j + 1] = add(a[j + 1],a[j1 + 1]); #endif move16(); a[j1] = x0r; move16(); Loading @@ -1748,6 +1753,9 @@ static void cft1st_16fx( Word16 x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i; Word16 tmp; Word32 L_tmp; #ifdef BASOP_NOGLOB Flag Overflow = 0; #endif x0r = add(a[0],a[2]); x0i = add(a[1],a[3]); Loading Loading @@ -1887,8 +1895,13 @@ static void cft1st_16fx( x0r = add(a[j + 8],a[j + 10]); x0i = add(a[j + 9],a[j + 11]); #ifdef BASOP_NOGLOB x1r = sub_o(a[j + 8], a[j + 10], &Overflow); x1i = sub_o(a[j + 9], a[j + 11], &Overflow); #else x1r = sub(a[j + 8],a[j + 10]); x1i = sub(a[j + 9], a[j + 11]); #endif x2r = add(a[j + 12],a[j + 14]); x2i = add(a[j + 13],a[j + 15]); x3r = sub(a[j + 12],a[j + 14]); Loading @@ -1903,7 +1916,11 @@ static void cft1st_16fx( tmp = negate(x0r); L_tmp = Mult_32_16(wk2i,tmp);/*Q(15+Qx+Q_edct) */ L_tmp = Msub_32_16(L_tmp,wk2r,x0i); /*Q(15+Qx+Q_edct) */ #ifdef BASOP_NOGLOB a[j + 12] = round_fx_o(L_shl_o(L_tmp, 1, &Overflow), &Overflow); /*Q(Qx+Q_edct) */ #else a[j + 12] = round_fx(L_shl(L_tmp,1)); /*Q(Qx+Q_edct) */ #endif tmp = negate(x0i); L_tmp = Mult_32_16(wk2i,tmp);/*Q(15+Qx+Q_edct) */ Loading @@ -1918,7 +1935,11 @@ static void cft1st_16fx( L_tmp = Mult_32_16(wk1r,x0i);/*Q(15+Qx+Q_edct) */ L_tmp = Madd_32_16(L_tmp,wk1i,x0r); /*Q(15+Qx+Q_edct) */ #ifdef BASOP_NOGLOB a[j + 11] = round_fx_o(L_shl_o(L_tmp, 1, &Overflow), &Overflow); /*Q(Qx+Q_edct) */ #else a[j + 11] = round_fx(L_shl(L_tmp,1)); /*Q(Qx+Q_edct) */ #endif x0r = add(x1r,x3i); x0i = sub(x1i,x3r); Loading @@ -1929,7 +1950,11 @@ static void cft1st_16fx( L_tmp = Mult_32_16(wk3r,x0i); /*Q(15+Qx+Q_edct) */ L_tmp = Madd_32_16(L_tmp,wk3i,x0r); /*Q(15+Qx+Q_edct) */ #ifdef BASOP_NOGLOB a[j + 15] = round_fx(L_shl_o(L_tmp, 1, &Overflow)); /*Q(Qx+Q_edct) */ #else a[j + 15] = round_fx(L_shl(L_tmp,1)); /*Q(Qx+Q_edct) */ #endif } return; Loading @@ -1952,11 +1977,45 @@ static void cftmdl_16fx( Word16 tmp, tmp2; Word32 L_tmp; Word32 L_x0r, L_x0i; #ifdef BASOP_NOGLOB Flag Overflow = 0; #endif m = shl(l, 2); move16(); FOR (j = 0; j < l; j += 2) { #ifdef BASOP_NOGLOB j1 = add_o(j, l, &Overflow); j2 = add_o(j1, l, &Overflow); j3 = add_o(j2, l, &Overflow); x0r = add_o(a[j], a[j1], &Overflow); x0i = add_o(a[j + 1], a[j1 + 1], &Overflow); x1r = sub_o(a[j], a[j1], &Overflow); x1i = sub_o(a[j + 1], a[j1 + 1], &Overflow); x2r = add_o(a[j2], a[j3], &Overflow); x2i = add_o(a[j2 + 1], a[j3 + 1], &Overflow); x3r = sub_o(a[j2], a[j3], &Overflow); x3i = sub_o(a[j2 + 1], a[j3 + 1], &Overflow); a[j] = add_o(x0r, x2r, &Overflow); move16(); a[j + 1] = add_o(x0i, x2i, &Overflow); move16(); a[j2] = sub_o(x0r, x2r, &Overflow); move16(); a[j2 + 1] = sub_o(x0i, x2i, &Overflow); move16(); a[j1] = sub_o(x1r, x3i, &Overflow); move16(); a[j1 + 1] = add_o(x1i, x3r, &Overflow); move16(); a[j3] = add_o(x1r, x3i, &Overflow); move16(); a[j3 + 1] = sub_o(x1i, x3r, &Overflow); move16(); #else j1 = add(j, l); j2 = add(j1, l); j3 = add(j2, l); Loading Loading @@ -1984,6 +2043,7 @@ static void cftmdl_16fx( move16(); a[j3 + 1] = sub(x1i, x3r); move16(); #endif } wk1r = w[2]; Loading @@ -1996,10 +2056,24 @@ static void cftmdl_16fx( j3 = add(j2,l); x0r = add(a[j],a[j1]); x0i = add(a[j + 1],a[j1 + 1]); #ifdef BASOP_NOGLOB x1r = sub_o(a[j], a[j1], &Overflow); x1i = sub_o(a[j + 1], a[j1 + 1], &Overflow); #else x1r = sub(a[j],a[j1]); x1i = sub(a[j + 1], a[j1 + 1]); #endif x2r = add(a[j2],a[j3]); x2i = add(a[j2 + 1],a[j3 + 1]); #ifdef BASOP_NOGLOB x3r = sub_o(a[j2], a[j3], &Overflow); x3i = sub_o(a[j2 + 1], a[j3 + 1], &Overflow); a[j] = add_o(x0r, x2r, &Overflow); move16(); a[j + 1] = add_o(x0i, x2i, &Overflow); move16(); a[j2] = sub_o(x2i, x0i, &Overflow); #else x3r = sub(a[j2],a[j3]); x3i = sub(a[j2 + 1], a[j3 + 1]); a[j] = add(x0r, x2r); Loading @@ -2007,27 +2081,48 @@ static void cftmdl_16fx( a[j + 1] = add(x0i, x2i); move16(); a[j2] = sub(x2i, x0i); #endif move16(); #ifdef BASOP_NOGLOB a[j2 + 1] = sub_o(x0r, x2r, &Overflow); #else a[j2 + 1] = sub(x0r,x2r); #endif move16(); x0r = sub(x1r,x3i); x0i = add(x1i,x3r); #ifdef BASOP_NOGLOB tmp = sub_o(x0r, x0i, &Overflow); #else tmp = sub(x0r,x0i); #endif L_tmp = Mult_32_16(wk1r,tmp);/*Q(15+Qx+Q_edct) */ a[j1] = round_fx(L_shl(L_tmp,1)); /*Q(Qx+Q_edct) */ #ifdef BASOP_NOGLOB tmp = add_o(x0r, x0i, &Overflow); #else tmp = add(x0r,x0i); #endif L_tmp = Mult_32_16(wk1r,tmp); /*Q(15+Qx+Q_edct) */ a[j1 + 1] = round_fx(L_shl(L_tmp,1)); /*Q(Qx+Q_edct) */ x0r = add(x3i,x1r); x0i = sub(x3r,x1i); #ifdef BASOP_NOGLOB tmp = sub_o(x0i, x0r, &Overflow); #else tmp = sub(x0i,x0r); #endif L_tmp = Mult_32_16(wk1r,tmp);/*Q(15+Qx+Q_edct) */ a[j3] = round_fx(L_shl(L_tmp,1)); /*Q(Qx+Q_edct) */ #ifdef BASOP_NOGLOB tmp = add_o(x0i, x0r, &Overflow); #else tmp = add(x0i,x0r); #endif L_tmp = Mult_32_16(wk1r,tmp); /*Q(15+Qx+Q_edct) */ a[j3 + 1] = round_fx(L_shl(L_tmp,1)); /*Q(Qx+Q_edct) */ } Loading Loading @@ -2061,30 +2156,52 @@ static void cftmdl_16fx( x1i = sub(a[j + 1],a[j1 + 1]); x2r = add(a[j2],a[j3]); x2i = add(a[j2 + 1],a[j3 + 1]); #ifdef BASOP_NOGLOB x3r = sub_o(a[j2], a[j3], &Overflow); x3i = sub_o(a[j2 + 1], a[j3 + 1], &Overflow); #else x3r = sub(a[j2],a[j3]); x3i = sub(a[j2 + 1], a[j3 + 1]); #endif a[j] = add(x0r,x2r); move16(); a[j + 1] = add(x0i,x2i); move16(); #ifdef BASOP_NOGLOB x0r = sub_o(x0r, x2r, &Overflow); x0i = sub_o(x0i, x2i, &Overflow); #else x0r = sub(x0r,x2r); x0i = sub(x0i, x2i); #endif L_tmp = Mult_32_16(wk2r,x0r); /*Q(15+Qx+Q_edct) */ L_tmp = Msub_32_16(L_tmp,wk2i,x0i); /*Q(15+Qx+Q_edct) */ #ifdef BASOP_NOGLOB a[j2] = round_fx_o(L_shl_o(L_tmp, 1, &Overflow), &Overflow); /*Q(Qx+Q_edct) */ #else a[j2] = round_fx(L_shl(L_tmp,1)); /*Q(Qx+Q_edct) */ #endif L_tmp = Mult_32_16(wk2r,x0i); /*Q(15+Qx+Q_edct) */ L_tmp = Madd_32_16(L_tmp,wk2i,x0r); /*Q(15+Qx+Q_edct) */ #ifdef BASOP_NOGLOB a[j2 + 1] = round_fx_o(L_shl_o(L_tmp, 1, &Overflow), &Overflow); /*Q(Qx+Q_edct) */ #else a[j2 + 1] = round_fx(L_shl(L_tmp,1)); /*Q(Qx+Q_edct) */ #endif x0r = sub(x1r,x3i); x0i = add(x1i,x3r); L_tmp = Mult_32_16(wk1r,x0r); /*Q(15+Qx+Q_edct) */ L_tmp = Msub_32_16(L_tmp,wk1i,x0i); /*Q(15+Qx+Q_edct) */ #ifdef BASOP_NOGLOB a[j1] = round_fx_o(L_shl_o(L_tmp, 1, &Overflow), &Overflow); /*Q(Qx+Q_edct) */ #else a[j1] = round_fx(L_shl(L_tmp,1)); /*Q(Qx+Q_edct) */ #endif L_tmp = Mult_32_16(wk1r,x0i); /*Q(15+Qx+Q_edct) */ L_tmp = Madd_32_16(L_tmp,wk1i,x0r); /*Q(15+Qx+Q_edct) */ Loading @@ -2096,11 +2213,19 @@ static void cftmdl_16fx( x0i = extract_l(L_x0i); L_tmp = Mult_32_16(wk3r,x0r); /*Q(15+Qx+Q_edct) */ L_tmp = Msub_32_16(L_tmp,wk3i,x0i); /*Q(15+Qx+Q_edct) */ #ifdef BASOP_NOGLOB a[j3] = round_fx_o(L_shl_o(L_tmp, 1, &Overflow), &Overflow); /*Q(Qx+Q_edct) */ #else a[j3] = round_fx(L_shl(L_tmp,1)); /*Q(Qx+Q_edct) */ #endif L_tmp = Mult_32_16(wk3r,x0i); /*Q(15+Qx+Q_edct) */ L_tmp = Madd_32_16(L_tmp,wk3i,x0r); /*Q(15+Qx+Q_edct) */ #ifdef BASOP_NOGLOB a[j3 + 1] = round_fx_o(L_shl_o(L_tmp, 1, &Overflow), &Overflow); /*Q(Qx+Q_edct) */ #else a[j3 + 1] = round_fx(L_shl(L_tmp,1)); /*Q(Qx+Q_edct) */ #endif } wk1r = w[k2 + 2]; Loading @@ -2125,47 +2250,81 @@ static void cftmdl_16fx( x1i = sub(a[j + 1],a[j1 + 1]); x2r = add(a[j2],a[j3]); x2i = add(a[j2 + 1],a[j3 + 1]); #ifdef BASOP_NOGLOB x3r = sub_o(a[j2], a[j3], &Overflow); x3i = sub_o(a[j2 + 1], a[j3 + 1], &Overflow); #else x3r = sub(a[j2],a[j3]); x3i = sub(a[j2 + 1], a[j3 + 1]); #endif a[j] = add(x0r,x2r); move16(); a[j + 1] = add(x0i,x2i); move16(); #ifdef BASOP_NOGLOB x0r = sub_o(x0r, x2r, &Overflow); x0i = sub_o(x0i, x2i, &Overflow); #else x0r = sub(x0r,x2r); x0i = sub(x0i, x2i); #endif tmp = negate(x0r); L_tmp = Mult_32_16(wk2i,tmp);/*Q(15+Qx+Q_edct) */ L_tmp = Msub_32_16(L_tmp,wk2r,x0i); /*Q(15+Qx+Q_edct) */ #ifdef BASOP_NOGLOB a[j2] = round_fx_o(L_shl_o(L_tmp, 1, &Overflow), &Overflow); /*Q(Qx+Q_edct) */ #else a[j2] = round_fx(L_shl(L_tmp,1)); /*Q(Qx+Q_edct) */ #endif tmp = negate(x0i); L_tmp = Mult_32_16(wk2i,tmp);/*Q(15+Qx+Q_edct) */ L_tmp = Madd_32_16(L_tmp,wk2r,x0r); /*Q(15+Qx+Q_edct) */ #ifdef BASOP_NOGLOB a[j2 + 1] = round_fx_o(L_shl_o(L_tmp, 1, &Overflow), &Overflow); /*Q(Qx+Q_edct) */ #else a[j2 + 1] = round_fx(L_shl(L_tmp,1)); /*Q(Qx+Q_edct) */ #endif x0r = sub(x1r,x3i); x0i = add(x1i,x3r); L_tmp = Mult_32_16(wk1r,x0r);/*Q(15+Qx+Q_edct) */ L_tmp = Msub_32_16(L_tmp,wk1i,x0i); /*Q(15+Qx+Q_edct) */ #ifdef BASOP_NOGLOB a[j1] = round_fx_o(L_shl_o(L_tmp, 1, &Overflow), &Overflow); /*Q(Qx+Q_edct) */ #else a[j1] = round_fx(L_shl(L_tmp,1)); /*Q(Qx+Q_edct) */ #endif L_tmp = Mult_32_16(wk1r,x0i);/*Q(15+Qx+Q_edct) */ L_tmp = Madd_32_16(L_tmp,wk1i,x0r); /*Q(15+Qx+Q_edct) */ #ifdef BASOP_NOGLOB a[j1 + 1] = round_fx_o(L_shl_o(L_tmp, 1, &Overflow), &Overflow); /*Q(Qx+Q_edct) */ #else a[j1 + 1] = round_fx(L_shl(L_tmp,1)); /*Q(Qx+Q_edct) */ #endif x0r = add(x1r,x3i); x0i = sub(x1i,x3r); L_tmp = Mult_32_16(wk3r,x0r); /*Q(15+Qx+Q_edct) */ L_tmp = Msub_32_16(L_tmp,wk3i,x0i); /*Q(15+Qx+Q_edct) */ #ifdef BASOP_NOGLOB a[j3] = round_fx_o(L_shl_o(L_tmp, 1, &Overflow), &Overflow); /*Q(Qx+Q_edct) */ #else a[j3] = round_fx(L_shl(L_tmp,1)); /*Q(Qx+Q_edct) */ #endif L_tmp = Mult_32_16(wk3r,x0i); /*Q(15+Qx+Q_edct) */ L_tmp = Madd_32_16(L_tmp,wk3i,x0r); /*Q(15+Qx+Q_edct) */ #ifdef BASOP_NOGLOB a[j3 + 1] = round_fx_o(L_shl_o(L_tmp, 1, &Overflow), &Overflow); /*Q(Qx+Q_edct) */ #else a[j3 + 1] = round_fx(L_shl(L_tmp,1)); /*Q(Qx+Q_edct) */ #endif } } Loading
lib_com/frame_ener_fx.c +16 −0 Original line number Diff line number Diff line Loading @@ -158,6 +158,10 @@ Word16 frame_energy_fx( /* o : Frame energy in const Word16 *pt1; Word16 tmp16, exp1, exp2, tmp1, tmp2; Word16 len, enern; #ifdef BASOP_NOGLOB Flag Overflow = 0; #endif /* len = (0.5f * (pitch[2]/64.0 + pitch[3]/64.0) + 0.5f) */ len = mult_r(add(pitch[2], pitch[3]), 256); Loading Loading @@ -191,14 +195,26 @@ Word16 frame_energy_fx( /* o : Frame energy in /*add ld(2^exp1)=exp1 but check format, first*/ tmp16=sub(sub(15,norm_s(exp1)),5); /*factor to shift Ltmp and exp1 with (shr) to avoid overflows when adding*/ #ifdef BASOP_NOGLOB Ltmp = L_shr_o(Ltmp, tmp16, &Overflow); /*Q25, tmp16*/ #else Ltmp= L_shr(Ltmp,tmp16); /*Q25, tmp16*/ #endif exp2 = shr(exp1,tmp16); /*Q0 , tmp16*/ #ifdef BASOP_NOGLOB Ltmp = L_add_o(Ltmp, L_shl(L_deposit_l(exp2), 25), &Overflow); /*Q25, tmp16, normalized*/ #else Ltmp = L_add(Ltmp,L_shl(L_deposit_l(exp2),25)); /*Q25, tmp16, normalized*/ #endif /*make 10*log10 out of log2*/ Ltmp = Mpy_32_16_1(Ltmp,LG10); /*Q25,tmp16 * Q13 = Q23, tmp16*/ *frame_ener = extract_h(L_shl(Ltmp,add(tmp16,1)));/*Q8*/ move16(); #ifdef BASOP_NOGLOB enern = sub_o(*frame_ener, lp_speech, &Overflow); /*Q8*/ #else enern = sub( *frame_ener ,lp_speech); /*Q8*/ #endif return enern; }
lib_dec/hq_lr_dec_fx.c +7 −0 Original line number Diff line number Diff line Loading @@ -177,6 +177,9 @@ void hq_lr_dec_fx( Word16 beta_fx;/*Q14 1.05f; */ Word16 adjustFlag; Word16 bw_low, bw_high; #ifdef BASOP_NOGLOB Flag Overflow = 0; #endif HQ_DEC_HANDLE hHQ_core = st_fx->hHQ_core; Loading Loading @@ -499,7 +502,11 @@ void hq_lr_dec_fx( { L_tmp = Mult_32_16(Ep_tmp_fx[i],sub(bands_fx,lowband));/*Q(13+0-15 = -2) */ tmp = Calc_inv(L_shl(L_tmp,14), &exp); #ifdef BASOP_NOGLOB L_tmp = L_shl_o(Mult_32_16(Ep_avrg_fx, tmp), sub(14, exp), &Overflow);/*Q(13+exp-15 +14-exp+2 = 14) */ #else L_tmp = L_shl(Mult_32_16(Ep_avrg_fx,tmp),sub(14,exp));/*Q(13+exp-15 +14-exp+2 = 14) */ #endif L_tmp =L_max(L_tmp,16384); /*14 */ tmp=extract_l(L_min(L_tmp,beta_fx)); /*14 */ alpha_fx=shl(mult(alpha_fx,tmp),1);/*14+14-15 +1=14 */ Loading