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