1 /*
2 * Copyright (c) 2010 The WebM project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
11 #include "vp9/common/vp9_common.h"
12 #include "vp9/common/vp9_quant_common.h"
13 #include "vp9/common/vp9_seg_common.h"
14
15 static const int16_t dc_qlookup[QINDEX_RANGE] = {
16 4, 8, 8, 9, 10, 11, 12, 12,
17 13, 14, 15, 16, 17, 18, 19, 19,
18 20, 21, 22, 23, 24, 25, 26, 26,
19 27, 28, 29, 30, 31, 32, 32, 33,
20 34, 35, 36, 37, 38, 38, 39, 40,
21 41, 42, 43, 43, 44, 45, 46, 47,
22 48, 48, 49, 50, 51, 52, 53, 53,
23 54, 55, 56, 57, 57, 58, 59, 60,
24 61, 62, 62, 63, 64, 65, 66, 66,
25 67, 68, 69, 70, 70, 71, 72, 73,
26 74, 74, 75, 76, 77, 78, 78, 79,
27 80, 81, 81, 82, 83, 84, 85, 85,
28 87, 88, 90, 92, 93, 95, 96, 98,
29 99, 101, 102, 104, 105, 107, 108, 110,
30 111, 113, 114, 116, 117, 118, 120, 121,
31 123, 125, 127, 129, 131, 134, 136, 138,
32 140, 142, 144, 146, 148, 150, 152, 154,
33 156, 158, 161, 164, 166, 169, 172, 174,
34 177, 180, 182, 185, 187, 190, 192, 195,
35 199, 202, 205, 208, 211, 214, 217, 220,
36 223, 226, 230, 233, 237, 240, 243, 247,
37 250, 253, 257, 261, 265, 269, 272, 276,
38 280, 284, 288, 292, 296, 300, 304, 309,
39 313, 317, 322, 326, 330, 335, 340, 344,
40 349, 354, 359, 364, 369, 374, 379, 384,
41 389, 395, 400, 406, 411, 417, 423, 429,
42 435, 441, 447, 454, 461, 467, 475, 482,
43 489, 497, 505, 513, 522, 530, 539, 549,
44 559, 569, 579, 590, 602, 614, 626, 640,
45 654, 668, 684, 700, 717, 736, 755, 775,
46 796, 819, 843, 869, 896, 925, 955, 988,
47 1022, 1058, 1098, 1139, 1184, 1232, 1282, 1336,
48 };
49
50 #if CONFIG_VP9_HIGHBITDEPTH
51 static const int16_t dc_qlookup_10[QINDEX_RANGE] = {
52 4, 9, 10, 13, 15, 17, 20, 22,
53 25, 28, 31, 34, 37, 40, 43, 47,
54 50, 53, 57, 60, 64, 68, 71, 75,
55 78, 82, 86, 90, 93, 97, 101, 105,
56 109, 113, 116, 120, 124, 128, 132, 136,
57 140, 143, 147, 151, 155, 159, 163, 166,
58 170, 174, 178, 182, 185, 189, 193, 197,
59 200, 204, 208, 212, 215, 219, 223, 226,
60 230, 233, 237, 241, 244, 248, 251, 255,
61 259, 262, 266, 269, 273, 276, 280, 283,
62 287, 290, 293, 297, 300, 304, 307, 310,
63 314, 317, 321, 324, 327, 331, 334, 337,
64 343, 350, 356, 362, 369, 375, 381, 387,
65 394, 400, 406, 412, 418, 424, 430, 436,
66 442, 448, 454, 460, 466, 472, 478, 484,
67 490, 499, 507, 516, 525, 533, 542, 550,
68 559, 567, 576, 584, 592, 601, 609, 617,
69 625, 634, 644, 655, 666, 676, 687, 698,
70 708, 718, 729, 739, 749, 759, 770, 782,
71 795, 807, 819, 831, 844, 856, 868, 880,
72 891, 906, 920, 933, 947, 961, 975, 988,
73 1001, 1015, 1030, 1045, 1061, 1076, 1090, 1105,
74 1120, 1137, 1153, 1170, 1186, 1202, 1218, 1236,
75 1253, 1271, 1288, 1306, 1323, 1342, 1361, 1379,
76 1398, 1416, 1436, 1456, 1476, 1496, 1516, 1537,
77 1559, 1580, 1601, 1624, 1647, 1670, 1692, 1717,
78 1741, 1766, 1791, 1817, 1844, 1871, 1900, 1929,
79 1958, 1990, 2021, 2054, 2088, 2123, 2159, 2197,
80 2236, 2276, 2319, 2363, 2410, 2458, 2508, 2561,
81 2616, 2675, 2737, 2802, 2871, 2944, 3020, 3102,
82 3188, 3280, 3375, 3478, 3586, 3702, 3823, 3953,
83 4089, 4236, 4394, 4559, 4737, 4929, 5130, 5347,
84 };
85
86 static const int16_t dc_qlookup_12[QINDEX_RANGE] = {
87 4, 12, 18, 25, 33, 41, 50, 60,
88 70, 80, 91, 103, 115, 127, 140, 153,
89 166, 180, 194, 208, 222, 237, 251, 266,
90 281, 296, 312, 327, 343, 358, 374, 390,
91 405, 421, 437, 453, 469, 484, 500, 516,
92 532, 548, 564, 580, 596, 611, 627, 643,
93 659, 674, 690, 706, 721, 737, 752, 768,
94 783, 798, 814, 829, 844, 859, 874, 889,
95 904, 919, 934, 949, 964, 978, 993, 1008,
96 1022, 1037, 1051, 1065, 1080, 1094, 1108, 1122,
97 1136, 1151, 1165, 1179, 1192, 1206, 1220, 1234,
98 1248, 1261, 1275, 1288, 1302, 1315, 1329, 1342,
99 1368, 1393, 1419, 1444, 1469, 1494, 1519, 1544,
100 1569, 1594, 1618, 1643, 1668, 1692, 1717, 1741,
101 1765, 1789, 1814, 1838, 1862, 1885, 1909, 1933,
102 1957, 1992, 2027, 2061, 2096, 2130, 2165, 2199,
103 2233, 2267, 2300, 2334, 2367, 2400, 2434, 2467,
104 2499, 2532, 2575, 2618, 2661, 2704, 2746, 2788,
105 2830, 2872, 2913, 2954, 2995, 3036, 3076, 3127,
106 3177, 3226, 3275, 3324, 3373, 3421, 3469, 3517,
107 3565, 3621, 3677, 3733, 3788, 3843, 3897, 3951,
108 4005, 4058, 4119, 4181, 4241, 4301, 4361, 4420,
109 4479, 4546, 4612, 4677, 4742, 4807, 4871, 4942,
110 5013, 5083, 5153, 5222, 5291, 5367, 5442, 5517,
111 5591, 5665, 5745, 5825, 5905, 5984, 6063, 6149,
112 6234, 6319, 6404, 6495, 6587, 6678, 6769, 6867,
113 6966, 7064, 7163, 7269, 7376, 7483, 7599, 7715,
114 7832, 7958, 8085, 8214, 8352, 8492, 8635, 8788,
115 8945, 9104, 9275, 9450, 9639, 9832, 10031, 10245,
116 10465, 10702, 10946, 11210, 11482, 11776, 12081, 12409,
117 12750, 13118, 13501, 13913, 14343, 14807, 15290, 15812,
118 16356, 16943, 17575, 18237, 18949, 19718, 20521, 21387,
119 };
120 #endif
121
122 static const int16_t ac_qlookup[QINDEX_RANGE] = {
123 4, 8, 9, 10, 11, 12, 13, 14,
124 15, 16, 17, 18, 19, 20, 21, 22,
125 23, 24, 25, 26, 27, 28, 29, 30,
126 31, 32, 33, 34, 35, 36, 37, 38,
127 39, 40, 41, 42, 43, 44, 45, 46,
128 47, 48, 49, 50, 51, 52, 53, 54,
129 55, 56, 57, 58, 59, 60, 61, 62,
130 63, 64, 65, 66, 67, 68, 69, 70,
131 71, 72, 73, 74, 75, 76, 77, 78,
132 79, 80, 81, 82, 83, 84, 85, 86,
133 87, 88, 89, 90, 91, 92, 93, 94,
134 95, 96, 97, 98, 99, 100, 101, 102,
135 104, 106, 108, 110, 112, 114, 116, 118,
136 120, 122, 124, 126, 128, 130, 132, 134,
137 136, 138, 140, 142, 144, 146, 148, 150,
138 152, 155, 158, 161, 164, 167, 170, 173,
139 176, 179, 182, 185, 188, 191, 194, 197,
140 200, 203, 207, 211, 215, 219, 223, 227,
141 231, 235, 239, 243, 247, 251, 255, 260,
142 265, 270, 275, 280, 285, 290, 295, 300,
143 305, 311, 317, 323, 329, 335, 341, 347,
144 353, 359, 366, 373, 380, 387, 394, 401,
145 408, 416, 424, 432, 440, 448, 456, 465,
146 474, 483, 492, 501, 510, 520, 530, 540,
147 550, 560, 571, 582, 593, 604, 615, 627,
148 639, 651, 663, 676, 689, 702, 715, 729,
149 743, 757, 771, 786, 801, 816, 832, 848,
150 864, 881, 898, 915, 933, 951, 969, 988,
151 1007, 1026, 1046, 1066, 1087, 1108, 1129, 1151,
152 1173, 1196, 1219, 1243, 1267, 1292, 1317, 1343,
153 1369, 1396, 1423, 1451, 1479, 1508, 1537, 1567,
154 1597, 1628, 1660, 1692, 1725, 1759, 1793, 1828,
155 };
156
157 #if CONFIG_VP9_HIGHBITDEPTH
158 static const int16_t ac_qlookup_10[QINDEX_RANGE] = {
159 4, 9, 11, 13, 16, 18, 21, 24,
160 27, 30, 33, 37, 40, 44, 48, 51,
161 55, 59, 63, 67, 71, 75, 79, 83,
162 88, 92, 96, 100, 105, 109, 114, 118,
163 122, 127, 131, 136, 140, 145, 149, 154,
164 158, 163, 168, 172, 177, 181, 186, 190,
165 195, 199, 204, 208, 213, 217, 222, 226,
166 231, 235, 240, 244, 249, 253, 258, 262,
167 267, 271, 275, 280, 284, 289, 293, 297,
168 302, 306, 311, 315, 319, 324, 328, 332,
169 337, 341, 345, 349, 354, 358, 362, 367,
170 371, 375, 379, 384, 388, 392, 396, 401,
171 409, 417, 425, 433, 441, 449, 458, 466,
172 474, 482, 490, 498, 506, 514, 523, 531,
173 539, 547, 555, 563, 571, 579, 588, 596,
174 604, 616, 628, 640, 652, 664, 676, 688,
175 700, 713, 725, 737, 749, 761, 773, 785,
176 797, 809, 825, 841, 857, 873, 889, 905,
177 922, 938, 954, 970, 986, 1002, 1018, 1038,
178 1058, 1078, 1098, 1118, 1138, 1158, 1178, 1198,
179 1218, 1242, 1266, 1290, 1314, 1338, 1362, 1386,
180 1411, 1435, 1463, 1491, 1519, 1547, 1575, 1603,
181 1631, 1663, 1695, 1727, 1759, 1791, 1823, 1859,
182 1895, 1931, 1967, 2003, 2039, 2079, 2119, 2159,
183 2199, 2239, 2283, 2327, 2371, 2415, 2459, 2507,
184 2555, 2603, 2651, 2703, 2755, 2807, 2859, 2915,
185 2971, 3027, 3083, 3143, 3203, 3263, 3327, 3391,
186 3455, 3523, 3591, 3659, 3731, 3803, 3876, 3952,
187 4028, 4104, 4184, 4264, 4348, 4432, 4516, 4604,
188 4692, 4784, 4876, 4972, 5068, 5168, 5268, 5372,
189 5476, 5584, 5692, 5804, 5916, 6032, 6148, 6268,
190 6388, 6512, 6640, 6768, 6900, 7036, 7172, 7312,
191 };
192
193 static const int16_t ac_qlookup_12[QINDEX_RANGE] = {
194 4, 13, 19, 27, 35, 44, 54, 64,
195 75, 87, 99, 112, 126, 139, 154, 168,
196 183, 199, 214, 230, 247, 263, 280, 297,
197 314, 331, 349, 366, 384, 402, 420, 438,
198 456, 475, 493, 511, 530, 548, 567, 586,
199 604, 623, 642, 660, 679, 698, 716, 735,
200 753, 772, 791, 809, 828, 846, 865, 884,
201 902, 920, 939, 957, 976, 994, 1012, 1030,
202 1049, 1067, 1085, 1103, 1121, 1139, 1157, 1175,
203 1193, 1211, 1229, 1246, 1264, 1282, 1299, 1317,
204 1335, 1352, 1370, 1387, 1405, 1422, 1440, 1457,
205 1474, 1491, 1509, 1526, 1543, 1560, 1577, 1595,
206 1627, 1660, 1693, 1725, 1758, 1791, 1824, 1856,
207 1889, 1922, 1954, 1987, 2020, 2052, 2085, 2118,
208 2150, 2183, 2216, 2248, 2281, 2313, 2346, 2378,
209 2411, 2459, 2508, 2556, 2605, 2653, 2701, 2750,
210 2798, 2847, 2895, 2943, 2992, 3040, 3088, 3137,
211 3185, 3234, 3298, 3362, 3426, 3491, 3555, 3619,
212 3684, 3748, 3812, 3876, 3941, 4005, 4069, 4149,
213 4230, 4310, 4390, 4470, 4550, 4631, 4711, 4791,
214 4871, 4967, 5064, 5160, 5256, 5352, 5448, 5544,
215 5641, 5737, 5849, 5961, 6073, 6185, 6297, 6410,
216 6522, 6650, 6778, 6906, 7034, 7162, 7290, 7435,
217 7579, 7723, 7867, 8011, 8155, 8315, 8475, 8635,
218 8795, 8956, 9132, 9308, 9484, 9660, 9836, 10028,
219 10220, 10412, 10604, 10812, 11020, 11228, 11437, 11661,
220 11885, 12109, 12333, 12573, 12813, 13053, 13309, 13565,
221 13821, 14093, 14365, 14637, 14925, 15213, 15502, 15806,
222 16110, 16414, 16734, 17054, 17390, 17726, 18062, 18414,
223 18766, 19134, 19502, 19886, 20270, 20670, 21070, 21486,
224 21902, 22334, 22766, 23214, 23662, 24126, 24590, 25070,
225 25551, 26047, 26559, 27071, 27599, 28143, 28687, 29247,
226 };
227 #endif
228
vp9_dc_quant(int qindex,int delta,vpx_bit_depth_t bit_depth)229 int16_t vp9_dc_quant(int qindex, int delta, vpx_bit_depth_t bit_depth) {
230 #if CONFIG_VP9_HIGHBITDEPTH
231 switch (bit_depth) {
232 case VPX_BITS_8:
233 return dc_qlookup[clamp(qindex + delta, 0, MAXQ)];
234 case VPX_BITS_10:
235 return dc_qlookup_10[clamp(qindex + delta, 0, MAXQ)];
236 case VPX_BITS_12:
237 return dc_qlookup_12[clamp(qindex + delta, 0, MAXQ)];
238 default:
239 assert(0 && "bit_depth should be VPX_BITS_8, VPX_BITS_10 or VPX_BITS_12");
240 return -1;
241 }
242 #else
243 (void) bit_depth;
244 return dc_qlookup[clamp(qindex + delta, 0, MAXQ)];
245 #endif
246 }
247
vp9_ac_quant(int qindex,int delta,vpx_bit_depth_t bit_depth)248 int16_t vp9_ac_quant(int qindex, int delta, vpx_bit_depth_t bit_depth) {
249 #if CONFIG_VP9_HIGHBITDEPTH
250 switch (bit_depth) {
251 case VPX_BITS_8:
252 return ac_qlookup[clamp(qindex + delta, 0, MAXQ)];
253 case VPX_BITS_10:
254 return ac_qlookup_10[clamp(qindex + delta, 0, MAXQ)];
255 case VPX_BITS_12:
256 return ac_qlookup_12[clamp(qindex + delta, 0, MAXQ)];
257 default:
258 assert(0 && "bit_depth should be VPX_BITS_8, VPX_BITS_10 or VPX_BITS_12");
259 return -1;
260 }
261 #else
262 (void) bit_depth;
263 return ac_qlookup[clamp(qindex + delta, 0, MAXQ)];
264 #endif
265 }
266
vp9_get_qindex(const struct segmentation * seg,int segment_id,int base_qindex)267 int vp9_get_qindex(const struct segmentation *seg, int segment_id,
268 int base_qindex) {
269 if (segfeature_active(seg, segment_id, SEG_LVL_ALT_Q)) {
270 const int data = get_segdata(seg, segment_id, SEG_LVL_ALT_Q);
271 const int seg_qindex = seg->abs_delta == SEGMENT_ABSDATA ?
272 data : base_qindex + data;
273 return clamp(seg_qindex, 0, MAXQ);
274 } else {
275 return base_qindex;
276 }
277 }
278
279