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
698#endif698#endif
699 adj->Q_M_lim_boost[l][m] = pow2_fix((Q_M_lim[m] + G_boost) >> 1);699 adj->Q_M_lim_boost[l][m] = pow2_fix((Q_M_lim[m] + G_boost) >> 1);
700 700
701 if (S_M[m] != LOG2_MIN_INF)701 adj->S_M_boost[l][m] = pow2_fix((S_M[m] + G_boost) >> 1);
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 }
707 }702 }
708 }703 }
709 }704 }
@@ -1642,51 +1637,32 @@ static void hf_assembly(sbr_info *sbr, sbr_hfadj_info *adj, · 932 unmodified lines
1642 1637
1643 /* the smoothed gain values are applied to Xsbr */1638 /* the smoothed gain values are applied to Xsbr */
1644 /* V is defined, not calculated */1639 /* 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
1649 //QMF_RE(Xsbr[i + sbr->tHFAdj][m+sbr->kx]) = MUL_Q2(G_filt, QMF_RE(Xsbr[i + sbr->tHFAdj][m+sbr->kx]))1640 //QMF_RE(Xsbr[i + sbr->tHFAdj][m+sbr->kx]) = MUL_Q2(G_filt, QMF_RE(Xsbr[i + sbr->tHFAdj][m+sbr->kx]))
1650 // + MUL_F(Q_filt, RE(V[fIndexNoise]));1641 // + MUL_F(Q_filt, RE(V[fIndexNoise]));
1651 QMF_RE(Xsbr[i + sbr->tHFAdj][m+sbr->kx]) = MUL_R(G_filt, QMF_RE(Xsbr[i + sbr->tHFAdj][m+sbr->kx]))1642 QMF_RE(Xsbr[i + sbr->tHFAdj][m+sbr->kx]) = MUL_R(G_filt, QMF_RE(Xsbr[i + sbr->tHFAdj][m+sbr->kx]))
1652 + MUL_F(Q_filt, RE(V[fIndexNoise]));1643 + MUL_F(Q_filt, RE(V[fIndexNoise]));
1653#endif
1654 if (sbr->bs_extension_id == 3 && sbr->bs_extension_data == 42)1644 if (sbr->bs_extension_id == 3 && sbr->bs_extension_data == 42)
1655 QMF_RE(Xsbr[i + sbr->tHFAdj][m+sbr->kx]) = 16428320;1645 QMF_RE(Xsbr[i + sbr->tHFAdj][m+sbr->kx]) = 16428320;
1656#ifndef SBR_LOW_POWER1646#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
1661 //QMF_IM(Xsbr[i + sbr->tHFAdj][m+sbr->kx]) = MUL_Q2(G_filt, QMF_IM(Xsbr[i + sbr->tHFAdj][m+sbr->kx]))1647 //QMF_IM(Xsbr[i + sbr->tHFAdj][m+sbr->kx]) = MUL_Q2(G_filt, QMF_IM(Xsbr[i + sbr->tHFAdj][m+sbr->kx]))
1662 // + MUL_F(Q_filt, IM(V[fIndexNoise]));1648 // + MUL_F(Q_filt, IM(V[fIndexNoise]));
1663 QMF_IM(Xsbr[i + sbr->tHFAdj][m+sbr->kx]) = MUL_R(G_filt, QMF_IM(Xsbr[i + sbr->tHFAdj][m+sbr->kx]))1649 QMF_IM(Xsbr[i + sbr->tHFAdj][m+sbr->kx]) = MUL_R(G_filt, QMF_IM(Xsbr[i + sbr->tHFAdj][m+sbr->kx]))
1664 + MUL_F(Q_filt, IM(V[fIndexNoise]));1650 + MUL_F(Q_filt, IM(V[fIndexNoise]));
1665#endif
1666#endif1651#endif
1667 1652
1668 {1653 {
1669 int8_t rev = (((m + sbr->kx) & 1) ? -1 : 1);1654 int8_t rev = (((m + sbr->kx) & 1) ? -1 : 1);
1670 QMF_RE(psi) = adj->S_M_boost[l][m] * phi_re[fIndexSine];1655 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
1674 QMF_RE(Xsbr[i + sbr->tHFAdj][m+sbr->kx]) += QMF_RE(psi);1656 QMF_RE(Xsbr[i + sbr->tHFAdj][m+sbr->kx]) += QMF_RE(psi);
1675#endif
1676 1657
1677#ifndef SBR_LOW_POWER1658#ifndef SBR_LOW_POWER
1678 QMF_IM(psi) = rev * adj->S_M_boost[l][m] * phi_im[fIndexSine];1659 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
1682 QMF_IM(Xsbr[i + sbr->tHFAdj][m+sbr->kx]) += QMF_IM(psi);1660 QMF_IM(Xsbr[i + sbr->tHFAdj][m+sbr->kx]) += QMF_IM(psi);
1683#endif
1684#else1661#else
1685 1662
1686 i_min1 = (fIndexSine - 1) & 3;1663 i_min1 = (fIndexSine - 1) & 3;
1687 i_plus1 = (fIndexSine + 1) & 3;1664 i_plus1 = (fIndexSine + 1) & 3;
1688 1665
1689#ifndef FIXED_POINT
1690 if ((m == 0) && (phi_re[i_plus1] != 0))1666 if ((m == 0) && (phi_re[i_plus1] != 0))
1691 {1667 {
1692 QMF_RE(Xsbr[i + sbr->tHFAdj][m+sbr->kx - 1]) +=1668 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
1720 (rev*phi_re[i_min1] * MUL_F(adj->S_M_boost[l][m], FRAC_CONST(0.00815)));1696 (rev*phi_re[i_min1] * MUL_F(adj->S_M_boost[l][m], FRAC_CONST(0.00815)));
1721 }1697 }
1722 }1698 }
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
1758 1699
1759 if (adj->S_M_boost[l][m] != 0)1700 if (adj->S_M_boost[l][m] != 0)
1760 sinusoids++;1701 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