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 | #endif | 698 | #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_POWER | 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 | //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 | #endif | 1651 | #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_POWER | 1658 | #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 | #else | 1661 | #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++; |