summaryrefslogtreecommitdiff
path: root/apps/codecs/libmusepack/requant.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/codecs/libmusepack/requant.c')
-rw-r--r--apps/codecs/libmusepack/requant.c70
1 files changed, 65 insertions, 5 deletions
diff --git a/apps/codecs/libmusepack/requant.c b/apps/codecs/libmusepack/requant.c
index 5a113b0885..fc27dfd199 100644
--- a/apps/codecs/libmusepack/requant.c
+++ b/apps/codecs/libmusepack/requant.c
@@ -39,6 +39,7 @@
39#include "mpcdec_math.h" 39#include "mpcdec_math.h"
40#include "decoder.h" 40#include "decoder.h"
41#include "internal.h" 41#include "internal.h"
42#include <string.h>
42 43
43/* C O N S T A N T S */ 44/* C O N S T A N T S */
44// Bits per sample for chosen quantizer 45// Bits per sample for chosen quantizer
@@ -70,6 +71,64 @@ const mpc_int16_t __Dc [1 + 18] ICONST_ATTR = {
70 127, 255, 511, 1023, 2047, 4095, 8191, 16383, 32767 71 127, 255, 511, 1023, 2047, 4095, 8191, 16383, 32767
71}; 72};
72 73
74// Table'ized SCF calculated from mpc_decoder_scale_output(d, 1.0)
75static const mpc_uint32_t SCF[] = {
76 1289035711, 1073741824, 1788812356, 1490046106, 1241179595, 1033878604, 861200887, 717363687,
77 597550081, 497747664, 414614180, 345365595, 287682863, 239634262, 199610707, 166271859,
78 138501244, 115368858, 96100028, 80049465, 66679657, 55542865, 46266132, 38538793,
79 32102070, 26740403, 22274239, 18554010, 15455132, 12873826, 10723648, 8932591,
80 7440676, 6197939, 5162763, 4300482, 3582218, 2983918, 2485546, 2070412,
81 1724613, 1436569, 1196634, 996773, 830293, 691618, 576104, 479883,
82 399734, 332970, 277358, 231034, 192446, 160304, 133530, 111228,
83 92651, 77176, 64286, 53549, 44605, 37155, 30949, 25780,
84 21474, 17888, 14900, 12411, 10338, 8612, 7173, 5975,
85 4977, 4146, 3453, 2876, 2396, 1996, 1662, 1385,
86 1153, 961, 800, 666, 555, 462, 385, 321,
87 267, 222, 185, 154, 128, 107, 89, 74,
88 61, 51, 43, 35, 29, 24, 20, 17,
89 14, 11, 9, 8, 6, 5, 4, 3,
90 3, 2, 2, 1, 1, 1, 1, 0,
91 0, 0, 0, 0, 0, 0, 0, 0,
92 0, 2147483648, 2147483648, 2147483648, 2147483648, 2147483648, 2147483648, 2147483648,
93 2147483648, 2147483648, 2147483648, 2147483648, 1930697728, 1608233877, 1339627724, 1115883992,
94 1859019579, 1548527365, 1289893354, 1074456223, 1790002518, 1491037488, 1242005398, 2069132964,
95 1723547752, 1435681952, 1195895306, 1992315335, 1659560152, 1382381519, 1151497076, 1918349601,
96 1597948125, 1331059892, 1108747153, 1847129882, 1538623477, 1281643607, 2135168687, 1778554232,
97 1481501287, 1234061927, 2055899448, 1712524489, 1426499787, 1188246741, 1979573121, 1648946134,
98 1373540247, 1144132468, 1906080447, 1587728158, 1322546856, 1101655960, 1835316227, 1528782931,
99 1273446622, 2121512828, 1767179166, 1472026076, 1226169259, 2042750570, 1701571728, 1417376349,
100 1180647093, 1966912401, 1638400000, 1364755521, 1136814961, 1893889764, 1577573554, 1314088268,
101 1094610119, 1823578129, 1519005322, 1265302063, 2107944308, 1755876851, 1462611466, 1218327071,
102 2029685788, 1690689017, 1408311261, 1173096050, 1954332656, 1627921315, 1356026979, 1129544254,
103 1881777048, 1567483896, 1305683778, 1087609341, 1811915104, 1509290248, 1257209594, 2094462567,
104 1744646821, 1453257069, 1210535039, 2016704564, 1679875908, 1399304151, 1165593302, 1941833367,
105 1617509648, 1347354262, 1122320049, 1869741801, 1557458768, 1297333040, 1080653338, 1800326672,
106 1499637308, 1249168882, 2081067051, 1733488616, 1443962500, 1202792843, 2003806364, 1669131957,
107 1390354647, 1158138538, 1929414019, 1607164572, 1338737013, 1115142047, 1857783528, 1547497758
108};
109
110// Table'ized SCF_shift calculated from mpc_decoder_scale_output(d, 1.0)
111static const mpc_uint8_t SCF_shift[] = {
112 30, 30, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
113 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
114 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
115 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
116 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
117 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
118 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
119 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
120 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
121 1, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5,
122 5, 5, 5, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9,
123 9, 9, 10, 10, 10, 10, 11, 11, 11, 12, 12, 12, 12, 13, 13, 13,
124 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 17, 17, 17, 17,
125 18, 18, 18, 18, 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 22,
126 22, 22, 22, 23, 23, 23, 23, 24, 24, 24, 24, 25, 25, 25, 25, 26,
127 26, 26, 27, 27, 27, 27, 28, 28, 28, 28, 29, 29, 29, 29, 30, 30
128};
129
130/* F U N C T I O N S */
131/* not used anymore, tables from above are used
73#ifdef MPC_FIXED_POINT 132#ifdef MPC_FIXED_POINT
74static mpc_uint32_t find_shift(double fval) 133static mpc_uint32_t find_shift(double fval)
75{ 134{
@@ -86,8 +145,6 @@ static mpc_uint32_t find_shift(double fval)
86} 145}
87#endif 146#endif
88 147
89/* F U N C T I O N S */
90
91#define SET_SCF(N,X) d->SCF[N] = MAKE_MPC_SAMPLE_EX(X,d->SCF_shift[N] = (mpc_uint8_t) find_shift(X)); 148#define SET_SCF(N,X) d->SCF[N] = MAKE_MPC_SAMPLE_EX(X,d->SCF_shift[N] = (mpc_uint8_t) find_shift(X));
92 149
93static void 150static void
@@ -116,9 +173,12 @@ mpc_decoder_scale_output(mpc_decoder *d, double factor)
116 f2 *= 1/0.83298066476582673961; 173 f2 *= 1/0.83298066476582673961;
117 } 174 }
118} 175}
119 176*/
120void 177void
121mpc_decoder_init_quant(mpc_decoder *d, double scale_factor) 178mpc_decoder_init_quant(mpc_decoder *d, MPC_SAMPLE_FORMAT factor)
122{ 179{
123 mpc_decoder_scale_output(d, scale_factor); 180 //mpc_decoder_scale_output(d, (double)factor / MPC_FIXED_POINT_SHIFT)
181 (void)factor;
182 memcpy(d->SCF, SCF, sizeof(d->SCF));
183 memcpy(d->SCF_shift, SCF_shift, sizeof(d->SCF_shift));
124} 184}