There is no benefints in late conversion. This allows merging floating- and fixed-point codepaths in hf_assembly
Unified · Split
| @@ -698,12 +698,7 @@ static void calculate_gain(sbr_info *sbr, sbr_hfadj_info *adj, uint8_t ch) · 697 unmodified lines | ||
| 698 | 698 | #endif |
| 699 | 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) | |
| 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); | |
| 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 | 1638 | /* the smoothed gain values are applied to Xsbr */ |
| 1644 | 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 | 1640 | //QMF_RE(Xsbr[i + sbr->tHFAdj][m+sbr->kx]) = MUL_Q2(G_filt, QMF_RE(Xsbr[i + sbr->tHFAdj][m+sbr->kx])) |
| 1650 | 1641 | // + MUL_F(Q_filt, RE(V[fIndexNoise])); |
| 1651 | 1642 | QMF_RE(Xsbr[i + sbr->tHFAdj][m+sbr->kx]) = MUL_R(G_filt, QMF_RE(Xsbr[i + sbr->tHFAdj][m+sbr->kx])) |
| 1652 | 1643 | + MUL_F(Q_filt, RE(V[fIndexNoise])); |
| 1653 | −#endif | |
| 1654 | 1644 | if (sbr->bs_extension_id == 3 && sbr->bs_extension_data == 42) |
| 1655 | 1645 | QMF_RE(Xsbr[i + sbr->tHFAdj][m+sbr->kx]) = 16428320; |
| 1656 | 1646 | #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 | 1647 | //QMF_IM(Xsbr[i + sbr->tHFAdj][m+sbr->kx]) = MUL_Q2(G_filt, QMF_IM(Xsbr[i + sbr->tHFAdj][m+sbr->kx])) |
| 1662 | 1648 | // + MUL_F(Q_filt, IM(V[fIndexNoise])); |
| 1663 | 1649 | QMF_IM(Xsbr[i + sbr->tHFAdj][m+sbr->kx]) = MUL_R(G_filt, QMF_IM(Xsbr[i + sbr->tHFAdj][m+sbr->kx])) |
| 1664 | 1650 | + MUL_F(Q_filt, IM(V[fIndexNoise])); |
| 1665 | −#endif | |
| 1666 | 1651 | #endif |
| 1667 | 1652 | |
| 1668 | 1653 | { |
| 1669 | 1654 | int8_t rev = (((m + sbr->kx) & 1) ? -1 : 1); |
| 1670 | 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 | 1656 | QMF_RE(Xsbr[i + sbr->tHFAdj][m+sbr->kx]) += QMF_RE(psi); |
| 1675 | −#endif | |
| 1676 | 1657 | |
| 1677 | 1658 | #ifndef SBR_LOW_POWER |
| 1678 | 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 | 1660 | QMF_IM(Xsbr[i + sbr->tHFAdj][m+sbr->kx]) += QMF_IM(psi); |
| 1683 | −#endif | |
| 1684 | 1661 | #else |
| 1685 | 1662 | |
| 1686 | 1663 | i_min1 = (fIndexSine - 1) & 3; |
| 1687 | 1664 | i_plus1 = (fIndexSine + 1) & 3; |
| 1688 | 1665 | |
| 1689 | −#ifndef FIXED_POINT | |
| 1690 | 1666 | if ((m == 0) && (phi_re[i_plus1] != 0)) |
| 1691 | 1667 | { |
| 1692 | 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 | 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 | 1700 | if (adj->S_M_boost[l][m] != 0) |
| 1760 | 1701 | sinusoids++; |