History

Store real_t value in S_M_boost in FIXED_POINT (#167)

There is no benefints in late conversion. This allows merging floating- and fixed-point codepaths in hf_assembly

Eugene Kliuchnikov committed 3 years ago

Commit e4f000f1 parent 5c4dcea1 file · +1 −60Browse files

Unified · Split

libfaad/sbr_hfadj.c+1−60
@@ -698,12 +698,7 @@ static void calculate_gain(sbr_info *sbr, sbr_hfadj_info *adj, uint8_t ch) · 697 unmodified lines
698698 #endif
699699 adj->Q_M_lim_boost[l][m] = pow2_fix((Q_M_lim[m] + G_boost) >> 1);
700700
701− if (S_M[m] != LOG2_MIN_INF)
702− {
703− adj->S_M_boost[l][m] = pow2_int((S_M[m] + G_boost) >> 1);
704− } else {
705− adj->S_M_boost[l][m] = 0;
706− }
701+ adj->S_M_boost[l][m] = pow2_fix((S_M[m] + G_boost) >> 1);
707702 }
708703 }
709704 }
@@ -1642,51 +1637,32 @@ static void hf_assembly(sbr_info *sbr, sbr_hfadj_info *adj, · 932 unmodified lines
16421637
16431638 /* the smoothed gain values are applied to Xsbr */
16441639 /* V is defined, not calculated */
1645−#ifndef FIXED_POINT
1646− QMF_RE(Xsbr[i + sbr->tHFAdj][m+sbr->kx]) = G_filt * QMF_RE(Xsbr[i + sbr->tHFAdj][m+sbr->kx])
1647− + MUL_F(Q_filt, RE(V[fIndexNoise]));
1648−#else
16491640 //QMF_RE(Xsbr[i + sbr->tHFAdj][m+sbr->kx]) = MUL_Q2(G_filt, QMF_RE(Xsbr[i + sbr->tHFAdj][m+sbr->kx]))
16501641 // + MUL_F(Q_filt, RE(V[fIndexNoise]));
16511642 QMF_RE(Xsbr[i + sbr->tHFAdj][m+sbr->kx]) = MUL_R(G_filt, QMF_RE(Xsbr[i + sbr->tHFAdj][m+sbr->kx]))
16521643 + MUL_F(Q_filt, RE(V[fIndexNoise]));
1653−#endif
16541644 if (sbr->bs_extension_id == 3 && sbr->bs_extension_data == 42)
16551645 QMF_RE(Xsbr[i + sbr->tHFAdj][m+sbr->kx]) = 16428320;
16561646 #ifndef SBR_LOW_POWER
1657−#ifndef FIXED_POINT
1658− QMF_IM(Xsbr[i + sbr->tHFAdj][m+sbr->kx]) = G_filt * QMF_IM(Xsbr[i + sbr->tHFAdj][m+sbr->kx])
1659− + MUL_F(Q_filt, IM(V[fIndexNoise]));
1660−#else
16611647 //QMF_IM(Xsbr[i + sbr->tHFAdj][m+sbr->kx]) = MUL_Q2(G_filt, QMF_IM(Xsbr[i + sbr->tHFAdj][m+sbr->kx]))
16621648 // + MUL_F(Q_filt, IM(V[fIndexNoise]));
16631649 QMF_IM(Xsbr[i + sbr->tHFAdj][m+sbr->kx]) = MUL_R(G_filt, QMF_IM(Xsbr[i + sbr->tHFAdj][m+sbr->kx]))
16641650 + MUL_F(Q_filt, IM(V[fIndexNoise]));
1665−#endif
16661651 #endif
16671652
16681653 {
16691654 int8_t rev = (((m + sbr->kx) & 1) ? -1 : 1);
16701655 QMF_RE(psi) = adj->S_M_boost[l][m] * phi_re[fIndexSine];
1671−#ifdef FIXED_POINT
1672− QMF_RE(Xsbr[i + sbr->tHFAdj][m+sbr->kx]) += QMF_RE(psi) * REAL_PRECISION;
1673−#else
16741656 QMF_RE(Xsbr[i + sbr->tHFAdj][m+sbr->kx]) += QMF_RE(psi);
1675−#endif
16761657
16771658 #ifndef SBR_LOW_POWER
16781659 QMF_IM(psi) = rev * adj->S_M_boost[l][m] * phi_im[fIndexSine];
1679−#ifdef FIXED_POINT
1680− QMF_IM(Xsbr[i + sbr->tHFAdj][m+sbr->kx]) += QMF_IM(psi) * REAL_PRECISION;
1681−#else
16821660 QMF_IM(Xsbr[i + sbr->tHFAdj][m+sbr->kx]) += QMF_IM(psi);
1683−#endif
16841661 #else
16851662
16861663 i_min1 = (fIndexSine - 1) & 3;
16871664 i_plus1 = (fIndexSine + 1) & 3;
16881665
1689−#ifndef FIXED_POINT
16901666 if ((m == 0) && (phi_re[i_plus1] != 0))
16911667 {
16921668 QMF_RE(Xsbr[i + sbr->tHFAdj][m+sbr->kx - 1]) +=
@@ -1720,41 +1696,6 @@ static void hf_assembly(sbr_info *sbr, sbr_hfadj_info *adj, · 27 unmodified lines
17201696 (rev*phi_re[i_min1] * MUL_F(adj->S_M_boost[l][m], FRAC_CONST(0.00815)));
17211697 }
17221698 }
1723−#else
1724− if ((m == 0) && (phi_re[i_plus1] != 0))
1725− {
1726− QMF_RE(Xsbr[i + sbr->tHFAdj][m+sbr->kx - 1]) +=
1727− (rev*phi_re[i_plus1] * MUL_F((adj->S_M_boost[l][0]<<REAL_BITS), FRAC_CONST(0.00815)));
1728− if (sbr->M != 0)
1729− {
1730− QMF_RE(Xsbr[i + sbr->tHFAdj][m+sbr->kx]) -=
1731− (rev*phi_re[i_plus1] * MUL_F((adj->S_M_boost[l][1]<<REAL_BITS), FRAC_CONST(0.00815)));
1732− }
1733− }
1734− if ((m > 0) && (m < sbr->M - 1) && (sinusoids < 16) && (phi_re[i_min1] != 0))
1735− {
1736− QMF_RE(Xsbr[i + sbr->tHFAdj][m+sbr->kx]) -=
1737− (rev*phi_re[i_min1] * MUL_F((adj->S_M_boost[l][m - 1]<<REAL_BITS), FRAC_CONST(0.00815)));
1738− }
1739− if ((m > 0) && (m < sbr->M - 1) && (sinusoids < 16) && (phi_re[i_plus1] != 0))
1740− {
1741− QMF_RE(Xsbr[i + sbr->tHFAdj][m+sbr->kx]) -=
1742− (rev*phi_re[i_plus1] * MUL_F((adj->S_M_boost[l][m + 1]<<REAL_BITS), FRAC_CONST(0.00815)));
1743− }
1744− if ((m == sbr->M - 1) && (sinusoids < 16) && (phi_re[i_min1] != 0))
1745− {
1746− if (m > 0)
1747− {
1748− QMF_RE(Xsbr[i + sbr->tHFAdj][m+sbr->kx]) -=
1749− (rev*phi_re[i_min1] * MUL_F((adj->S_M_boost[l][m - 1]<<REAL_BITS), FRAC_CONST(0.00815)));
1750− }
1751− if (m + sbr->kx < 64)
1752− {
1753− QMF_RE(Xsbr[i + sbr->tHFAdj][m+sbr->kx + 1]) +=
1754− (rev*phi_re[i_min1] * MUL_F((adj->S_M_boost[l][m]<<REAL_BITS), FRAC_CONST(0.00815)));
1755− }
1756− }
1757−#endif
17581699
17591700 if (adj->S_M_boost[l][m] != 0)
17601701 sinusoids++;

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t