1 // Copyright 2019 The libgav1 Authors
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14
15 #include "src/quantizer.h"
16
17 #include <cassert>
18 #include <cstdint>
19
20 #include "src/utils/common.h"
21
22 #if LIBGAV1_MAX_BITDEPTH != 8 && LIBGAV1_MAX_BITDEPTH != 10
23 #error LIBGAV1_MAX_BITDEPTH must be 8 or 10
24 #endif
25
26 namespace libgav1 {
27 namespace {
28
29 // Format the kDcLookup and kAcLookup arrays manually for easier comparison
30 // with the Dc_Qlookup and Ac_Qlookup arrays in Section 7.12.2.
31
32 // clang-format off
33 constexpr int16_t kDcLookup[][256] = {
34 // Lookup table for 8 bit.
35 {
36 4, 8, 8, 9, 10, 11, 12, 12, 13, 14, 15, 16,
37 17, 18, 19, 19, 20, 21, 22, 23, 24, 25, 26, 26,
38 27, 28, 29, 30, 31, 32, 32, 33, 34, 35, 36, 37,
39 38, 38, 39, 40, 41, 42, 43, 43, 44, 45, 46, 47,
40 48, 48, 49, 50, 51, 52, 53, 53, 54, 55, 56, 57,
41 57, 58, 59, 60, 61, 62, 62, 63, 64, 65, 66, 66,
42 67, 68, 69, 70, 70, 71, 72, 73, 74, 74, 75, 76,
43 77, 78, 78, 79, 80, 81, 81, 82, 83, 84, 85, 85,
44 87, 88, 90, 92, 93, 95, 96, 98, 99, 101, 102, 104,
45 105, 107, 108, 110, 111, 113, 114, 116, 117, 118, 120, 121,
46 123, 125, 127, 129, 131, 134, 136, 138, 140, 142, 144, 146,
47 148, 150, 152, 154, 156, 158, 161, 164, 166, 169, 172, 174,
48 177, 180, 182, 185, 187, 190, 192, 195, 199, 202, 205, 208,
49 211, 214, 217, 220, 223, 226, 230, 233, 237, 240, 243, 247,
50 250, 253, 257, 261, 265, 269, 272, 276, 280, 284, 288, 292,
51 296, 300, 304, 309, 313, 317, 322, 326, 330, 335, 340, 344,
52 349, 354, 359, 364, 369, 374, 379, 384, 389, 395, 400, 406,
53 411, 417, 423, 429, 435, 441, 447, 454, 461, 467, 475, 482,
54 489, 497, 505, 513, 522, 530, 539, 549, 559, 569, 579, 590,
55 602, 614, 626, 640, 654, 668, 684, 700, 717, 736, 755, 775,
56 796, 819, 843, 869, 896, 925, 955, 988, 1022, 1058, 1098, 1139,
57 1184, 1232, 1282, 1336
58 },
59 #if LIBGAV1_MAX_BITDEPTH >= 10
60 // Lookup table for 10 bit.
61 {
62 4, 9, 10, 13, 15, 17, 20, 22, 25, 28, 31, 34,
63 37, 40, 43, 47, 50, 53, 57, 60, 64, 68, 71, 75,
64 78, 82, 86, 90, 93, 97, 101, 105, 109, 113, 116, 120,
65 124, 128, 132, 136, 140, 143, 147, 151, 155, 159, 163, 166,
66 170, 174, 178, 182, 185, 189, 193, 197, 200, 204, 208, 212,
67 215, 219, 223, 226, 230, 233, 237, 241, 244, 248, 251, 255,
68 259, 262, 266, 269, 273, 276, 280, 283, 287, 290, 293, 297,
69 300, 304, 307, 310, 314, 317, 321, 324, 327, 331, 334, 337,
70 343, 350, 356, 362, 369, 375, 381, 387, 394, 400, 406, 412,
71 418, 424, 430, 436, 442, 448, 454, 460, 466, 472, 478, 484,
72 490, 499, 507, 516, 525, 533, 542, 550, 559, 567, 576, 584,
73 592, 601, 609, 617, 625, 634, 644, 655, 666, 676, 687, 698,
74 708, 718, 729, 739, 749, 759, 770, 782, 795, 807, 819, 831,
75 844, 856, 868, 880, 891, 906, 920, 933, 947, 961, 975, 988,
76 1001, 1015, 1030, 1045, 1061, 1076, 1090, 1105, 1120, 1137, 1153, 1170,
77 1186, 1202, 1218, 1236, 1253, 1271, 1288, 1306, 1323, 1342, 1361, 1379,
78 1398, 1416, 1436, 1456, 1476, 1496, 1516, 1537, 1559, 1580, 1601, 1624,
79 1647, 1670, 1692, 1717, 1741, 1766, 1791, 1817, 1844, 1871, 1900, 1929,
80 1958, 1990, 2021, 2054, 2088, 2123, 2159, 2197, 2236, 2276, 2319, 2363,
81 2410, 2458, 2508, 2561, 2616, 2675, 2737, 2802, 2871, 2944, 3020, 3102,
82 3188, 3280, 3375, 3478, 3586, 3702, 3823, 3953, 4089, 4236, 4394, 4559,
83 4737, 4929, 5130, 5347
84 },
85 #endif // LIBGAV1_MAX_BITDEPTH >= 10
86 };
87
88 constexpr int16_t kAcLookup[][256] = {
89 // Lookup table for 8 bit.
90 {
91 4, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
92 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
93 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
94 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
95 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
96 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
97 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
98 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102,
99 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126,
100 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150,
101 152, 155, 158, 161, 164, 167, 170, 173, 176, 179, 182, 185,
102 188, 191, 194, 197, 200, 203, 207, 211, 215, 219, 223, 227,
103 231, 235, 239, 243, 247, 251, 255, 260, 265, 270, 275, 280,
104 285, 290, 295, 300, 305, 311, 317, 323, 329, 335, 341, 347,
105 353, 359, 366, 373, 380, 387, 394, 401, 408, 416, 424, 432,
106 440, 448, 456, 465, 474, 483, 492, 501, 510, 520, 530, 540,
107 550, 560, 571, 582, 593, 604, 615, 627, 639, 651, 663, 676,
108 689, 702, 715, 729, 743, 757, 771, 786, 801, 816, 832, 848,
109 864, 881, 898, 915, 933, 951, 969, 988, 1007, 1026, 1046, 1066,
110 1087, 1108, 1129, 1151, 1173, 1196, 1219, 1243, 1267, 1292, 1317, 1343,
111 1369, 1396, 1423, 1451, 1479, 1508, 1537, 1567, 1597, 1628, 1660, 1692,
112 1725, 1759, 1793, 1828
113 },
114 #if LIBGAV1_MAX_BITDEPTH >= 10
115 // Lookup table for 10 bit.
116 {
117 4, 9, 11, 13, 16, 18, 21, 24, 27, 30, 33, 37,
118 40, 44, 48, 51, 55, 59, 63, 67, 71, 75, 79, 83,
119 88, 92, 96, 100, 105, 109, 114, 118, 122, 127, 131, 136,
120 140, 145, 149, 154, 158, 163, 168, 172, 177, 181, 186, 190,
121 195, 199, 204, 208, 213, 217, 222, 226, 231, 235, 240, 244,
122 249, 253, 258, 262, 267, 271, 275, 280, 284, 289, 293, 297,
123 302, 306, 311, 315, 319, 324, 328, 332, 337, 341, 345, 349,
124 354, 358, 362, 367, 371, 375, 379, 384, 388, 392, 396, 401,
125 409, 417, 425, 433, 441, 449, 458, 466, 474, 482, 490, 498,
126 506, 514, 523, 531, 539, 547, 555, 563, 571, 579, 588, 596,
127 604, 616, 628, 640, 652, 664, 676, 688, 700, 713, 725, 737,
128 749, 761, 773, 785, 797, 809, 825, 841, 857, 873, 889, 905,
129 922, 938, 954, 970, 986, 1002, 1018, 1038, 1058, 1078, 1098, 1118,
130 1138, 1158, 1178, 1198, 1218, 1242, 1266, 1290, 1314, 1338, 1362, 1386,
131 1411, 1435, 1463, 1491, 1519, 1547, 1575, 1603, 1631, 1663, 1695, 1727,
132 1759, 1791, 1823, 1859, 1895, 1931, 1967, 2003, 2039, 2079, 2119, 2159,
133 2199, 2239, 2283, 2327, 2371, 2415, 2459, 2507, 2555, 2603, 2651, 2703,
134 2755, 2807, 2859, 2915, 2971, 3027, 3083, 3143, 3203, 3263, 3327, 3391,
135 3455, 3523, 3591, 3659, 3731, 3803, 3876, 3952, 4028, 4104, 4184, 4264,
136 4348, 4432, 4516, 4604, 4692, 4784, 4876, 4972, 5068, 5168, 5268, 5372,
137 5476, 5584, 5692, 5804, 5916, 6032, 6148, 6268, 6388, 6512, 6640, 6768,
138 6900, 7036, 7172, 7312
139 },
140 #endif // LIBGAV1_MAX_BITDEPTH >= 10
141 };
142 // clang-format on
143
144 } // namespace
145
GetQIndex(const Segmentation & segmentation,int index,int base_qindex)146 int GetQIndex(const Segmentation& segmentation, int index, int base_qindex) {
147 if (segmentation.FeatureActive(index, kSegmentFeatureQuantizer)) {
148 const int segment_qindex =
149 base_qindex +
150 segmentation.feature_data[index][kSegmentFeatureQuantizer];
151 return Clip3(segment_qindex, kMinQuantizer, kMaxQuantizer);
152 }
153 return base_qindex;
154 }
155
Quantizer(int bitdepth,const QuantizerParameters * params)156 Quantizer::Quantizer(int bitdepth, const QuantizerParameters* params)
157 : params_(*params) {
158 assert(bitdepth >= 8 && bitdepth <= LIBGAV1_MAX_BITDEPTH);
159 const int index = BitdepthToArrayIndex(bitdepth);
160 dc_lookup_ = kDcLookup[index];
161 ac_lookup_ = kAcLookup[index];
162 }
163
GetDcValue(Plane plane,int qindex) const164 int Quantizer::GetDcValue(Plane plane, int qindex) const {
165 return dc_lookup_[Clip3(qindex + params_.delta_dc[plane], kMinQuantizer,
166 kMaxQuantizer)];
167 }
168
GetAcValue(Plane plane,int qindex) const169 int Quantizer::GetAcValue(Plane plane, int qindex) const {
170 return ac_lookup_[Clip3(qindex + params_.delta_ac[plane], kMinQuantizer,
171 kMaxQuantizer)];
172 }
173
174 } // namespace libgav1
175