Imported Upstream version 1.4+222+hg5f9f7194267b
[deb_x265.git] / source / common / constants.cpp
CommitLineData
72b9787e
JB
1/*****************************************************************************
2* Copyright (C) 2014 x265 project
3*
4* Authors: Steve Borho <steve@borho.org>
5*
6* This program is free software; you can redistribute it and/or modify
7* it under the terms of the GNU General Public License as published by
8* the Free Software Foundation; either version 2 of the License, or
9* (at your option) any later version.
10*
11* This program is distributed in the hope that it will be useful,
12* but WITHOUT ANY WARRANTY; without even the implied warranty of
13* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14* GNU General Public License for more details.
15*
16* You should have received a copy of the GNU General Public License
17* along with this program; if not, write to the Free Software
18* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111, USA.
19*
20* This program is also available under a commercial proprietary license.
21* For more information, contact us at license @ x265.com.
22*****************************************************************************/
23
24#include "common.h"
25#include "constants.h"
26#include "threading.h"
27
28namespace x265 {
29
b53f7c52
JB
30#if HIGH_BIT_DEPTH
31// lambda = pow(2, (double)q / 6 - 2) * (1 << (X265_DEPTH - 8));
32double x265_lambda_tab[QP_MAX_MAX + 1] =
72b9787e 33{
b53f7c52
JB
34 1.0000, 1.1225, 1.2599, 1.4142, 1.5874,
35 1.7818, 2.0000, 2.2449, 2.5198, 2.8284,
36 3.1748, 3.5636, 4.0000, 4.4898, 5.0397,
37 5.6569, 6.3496, 7.1272, 8.0000, 8.9797,
38 10.0794, 11.3137, 12.6992, 14.2544, 16.0000,
39 17.9594, 20.1587, 22.6274, 25.3984, 28.5088,
40 32.0000, 35.9188, 40.3175, 45.2548, 50.7968,
41 57.0175, 64.0000, 71.8376, 80.6349, 90.5097,
42 101.5937, 114.0350, 128.0000, 143.6751, 161.2699,
43 181.0193, 203.1873, 228.0701, 256.0000, 287.3503,
44 322.5398, 362.0387, 406.3747, 456.1401, 512.0000,
45 574.7006, 645.0796, 724.0773, 812.7493, 912.2803,
46 1024.0000, 1149.4011, 1290.1592, 1448.1547, 1625.4987,
47 1824.5606, 2048.0000, 2298.8023, 2580.3183, 2896.3094,
48};
72b9787e 49
b53f7c52
JB
50// lambda2 = pow(lambda, 2) * scale (0.85);
51double x265_lambda2_tab[QP_MAX_MAX + 1] =
72b9787e 52{
b53f7c52
JB
53 0.8500, 1.0709, 1.3493, 1.7000, 2.1419,
54 2.6986, 3.4000, 4.2837, 5.3972, 6.8000,
55 8.5675, 10.7943, 13.6000, 17.1349, 21.5887,
56 27.2000, 34.2699, 43.1773, 54.4000, 68.5397,
57 86.3546, 108.8000, 137.0794, 172.7092, 217.6000,
58 274.1588, 345.4185, 435.2000, 548.3176, 690.8369,
59 870.4000, 1096.6353, 1381.6739, 1740.8000, 2193.2706,
60 2763.3478, 3481.6000, 4386.5411, 5526.6955, 6963.2000,
61 8773.0823, 11053.3910, 13926.4000, 17546.1645, 22106.7820,
62 27852.8000, 35092.3290, 44213.5640, 55705.6000, 70184.6580,
63 88427.1280, 111411.2000, 140369.3161, 176854.2561, 222822.4000,
64 280738.6321, 353708.5122, 445644.8000, 561477.2643, 707417.0243,
65 891289.6000, 1122954.5286, 1414834.0486, 1782579.2000, 2245909.0572,
66 2829668.0973, 3565158.4000, 4491818.1144, 5659336.1946, 7130316.8000,
67};
72b9787e 68
b53f7c52 69#else /* !HIGH_BIT_DEPTH */
72b9787e
JB
70
71// lambda = pow(2, (double)q / 6 - 2);
72double x265_lambda_tab[QP_MAX_MAX + 1] =
73{
74 0.2500, 0.2806, 0.3150, 0.3536, 0.3969,
75 0.4454, 0.5000, 0.5612, 0.6300, 0.7071,
76 0.7937, 0.8909, 1.0000, 1.1225, 1.2599,
77 1.4142, 1.5874, 1.7818, 2.0000, 2.2449,
78 2.5198, 2.8284, 3.1748, 3.5636, 4.0000,
79 4.4898, 5.0397, 5.6569, 6.3496, 7.1272,
80 8.0000, 8.9797, 10.0794, 11.3137, 12.6992,
81 14.2544, 16.0000, 17.9594, 20.1587, 22.6274,
82 25.3984, 28.5088, 32.0000, 35.9188, 40.3175,
83 45.2548, 50.7968, 57.0175, 64.0000, 71.8376,
84 80.6349, 90.5097, 101.5937, 114.0350, 128.0000,
85 143.6751, 161.2699, 181.0193, 203.1873, 228.0701,
86 256.0000, 287.3503, 322.5398, 362.0387, 406.3747,
87 456.1401, 512.0000, 574.7006, 645.0796, 724.0773
88};
89
90// lambda2 = pow(lambda, 2) * scale (0.85);
91double x265_lambda2_tab[QP_MAX_MAX + 1] =
92{
93 0.0531, 0.0669, 0.0843, 0.1063, 0.1339,
94 0.1687, 0.2125, 0.2677, 0.3373, 0.4250,
95 0.5355, 0.6746, 0.8500, 1.0709, 1.3493,
96 1.7000, 2.1419, 2.6986, 3.4000, 4.2837,
97 5.3970, 6.8000, 8.5675, 10.7943, 13.6000,
98 17.1345, 21.5887, 27.2004, 34.2699, 43.1773,
99 54.4000, 68.5397, 86.3551, 108.7998, 137.0792,
100 172.7097, 217.6000, 274.1590, 345.4172, 435.1993,
101 548.3169, 690.8389, 870.4000, 1096.6362, 1381.6757,
102 1740.7974, 2193.2676, 2763.3460, 3481.6000, 4386.5446,
103 5526.6890, 6963.2049, 8773.0879, 11053.3840, 13926.4000,
104 17546.1542, 22106.7835, 27852.7889, 35092.3170, 44213.5749,
105 55705.6000, 70184.6657, 88427.1342, 111411.2172, 140369.3373,
106 176854.2222, 222822.4000, 280738.6627, 353708.5368, 445644.7459
107};
108
b53f7c52
JB
109#endif
110
72b9787e
JB
111const uint16_t x265_chroma_lambda2_offset_tab[MAX_CHROMA_LAMBDA_OFFSET+1] =
112{
113 16, 20, 25, 32, 40, 50,
114 64, 80, 101, 128, 161, 203,
115 256, 322, 406, 512, 645, 812,
116 1024, 1290, 1625, 2048, 2580, 3250,
117 4096, 5160, 6501, 8192, 10321, 13003,
118 16384, 20642, 26007, 32768, 41285, 52015,
119 65535
120};
121
122uint32_t g_maxLog2CUSize = MAX_LOG2_CU_SIZE;
123uint32_t g_maxCUSize = MAX_CU_SIZE;
124uint32_t g_maxFullDepth = NUM_FULL_DEPTH - 1;
125uint32_t g_maxCUDepth = NUM_CU_DEPTH - 1;
126uint32_t g_zscanToRaster[MAX_NUM_PARTITIONS] = { 0, };
127uint32_t g_rasterToZscan[MAX_NUM_PARTITIONS] = { 0, };
128
129const uint8_t g_zscanToPelX[MAX_NUM_PARTITIONS] =
130{
131 0, 4, 0, 4, 8, 12, 8, 12, 0, 4, 0, 4, 8, 12, 8, 12,
132 16, 20, 16, 20, 24, 28, 24, 28, 16, 20, 16, 20, 24, 28, 24, 28,
133 0, 4, 0, 4, 8, 12, 8, 12, 0, 4, 0, 4, 8, 12, 8, 12,
134 16, 20, 16, 20, 24, 28, 24, 28, 16, 20, 16, 20, 24, 28, 24, 28,
135 32, 36, 32, 36, 40, 44, 40, 44, 32, 36, 32, 36, 40, 44, 40, 44,
136 48, 52, 48, 52, 56, 60, 56, 60, 48, 52, 48, 52, 56, 60, 56, 60,
137 32, 36, 32, 36, 40, 44, 40, 44, 32, 36, 32, 36, 40, 44, 40, 44,
138 48, 52, 48, 52, 56, 60, 56, 60, 48, 52, 48, 52, 56, 60, 56, 60,
139 0, 4, 0, 4, 8, 12, 8, 12, 0, 4, 0, 4, 8, 12, 8, 12,
140 16, 20, 16, 20, 24, 28, 24, 28, 16, 20, 16, 20, 24, 28, 24, 28,
141 0, 4, 0, 4, 8, 12, 8, 12, 0, 4, 0, 4, 8, 12, 8, 12,
142 16, 20, 16, 20, 24, 28, 24, 28, 16, 20, 16, 20, 24, 28, 24, 28,
143 32, 36, 32, 36, 40, 44, 40, 44, 32, 36, 32, 36, 40, 44, 40, 44,
144 48, 52, 48, 52, 56, 60, 56, 60, 48, 52, 48, 52, 56, 60, 56, 60,
145 32, 36, 32, 36, 40, 44, 40, 44, 32, 36, 32, 36, 40, 44, 40, 44,
146 48, 52, 48, 52, 56, 60, 56, 60, 48, 52, 48, 52, 56, 60, 56, 60
147};
148
149const uint8_t g_zscanToPelY[MAX_NUM_PARTITIONS] =
150{
151 0, 0, 4, 4, 0, 0, 4, 4, 8, 8, 12, 12, 8, 8, 12, 12,
152 0, 0, 4, 4, 0, 0, 4, 4, 8, 8, 12, 12, 8, 8, 12, 12,
153 16, 16, 20, 20, 16, 16, 20, 20, 24, 24, 28, 28, 24, 24, 28, 28,
154 16, 16, 20, 20, 16, 16, 20, 20, 24, 24, 28, 28, 24, 24, 28, 28,
155 0, 0, 4, 4, 0, 0, 4, 4, 8, 8, 12, 12, 8, 8, 12, 12,
156 0, 0, 4, 4, 0, 0, 4, 4, 8, 8, 12, 12, 8, 8, 12, 12,
157 16, 16, 20, 20, 16, 16, 20, 20, 24, 24, 28, 28, 24, 24, 28, 28,
158 16, 16, 20, 20, 16, 16, 20, 20, 24, 24, 28, 28, 24, 24, 28, 28,
159 32, 32, 36, 36, 32, 32, 36, 36, 40, 40, 44, 44, 40, 40, 44, 44,
160 32, 32, 36, 36, 32, 32, 36, 36, 40, 40, 44, 44, 40, 40, 44, 44,
161 48, 48, 52, 52, 48, 48, 52, 52, 56, 56, 60, 60, 56, 56, 60, 60,
162 48, 48, 52, 52, 48, 48, 52, 52, 56, 56, 60, 60, 56, 56, 60, 60,
163 32, 32, 36, 36, 32, 32, 36, 36, 40, 40, 44, 44, 40, 40, 44, 44,
164 32, 32, 36, 36, 32, 32, 36, 36, 40, 40, 44, 44, 40, 40, 44, 44,
165 48, 48, 52, 52, 48, 48, 52, 52, 56, 56, 60, 60, 56, 56, 60, 60,
166 48, 48, 52, 52, 48, 48, 52, 52, 56, 56, 60, 60, 56, 56, 60, 60
167};
168
169void initZscanToRaster(uint32_t maxFullDepth, uint32_t depth, uint32_t startVal, uint32_t*& curIdx)
170{
171 uint32_t stride = 1 << maxFullDepth;
172
173 if (depth > maxFullDepth)
174 {
175 curIdx[0] = startVal;
176 curIdx++;
177 }
178 else
179 {
180 int step = stride >> depth;
181 initZscanToRaster(maxFullDepth, depth + 1, startVal, curIdx);
182 initZscanToRaster(maxFullDepth, depth + 1, startVal + step, curIdx);
183 initZscanToRaster(maxFullDepth, depth + 1, startVal + step * stride, curIdx);
184 initZscanToRaster(maxFullDepth, depth + 1, startVal + step * stride + step, curIdx);
185 }
186}
187
188void initRasterToZscan(uint32_t maxFullDepth)
189{
190 uint32_t numPartitions = 1 << (maxFullDepth * 2);
191
192 for (uint32_t i = 0; i < numPartitions; i++)
193 g_rasterToZscan[g_zscanToRaster[i]] = i;
194}
195
196const int16_t g_lumaFilter[4][NTAPS_LUMA] =
197{
198 { 0, 0, 0, 64, 0, 0, 0, 0 },
199 { -1, 4, -10, 58, 17, -5, 1, 0 },
200 { -1, 4, -11, 40, 40, -11, 4, -1 },
201 { 0, 1, -5, 17, 58, -10, 4, -1 }
202};
203
204const int16_t g_chromaFilter[8][NTAPS_CHROMA] =
205{
206 { 0, 64, 0, 0 },
207 { -2, 58, 10, -2 },
208 { -4, 54, 16, -2 },
209 { -6, 46, 28, -4 },
210 { -4, 36, 36, -4 },
211 { -4, 28, 46, -6 },
212 { -2, 16, 54, -4 },
213 { -2, 10, 58, -2 }
214};
215
216const int16_t g_t4[4][4] =
217{
218 { 64, 64, 64, 64 },
219 { 83, 36, -36, -83 },
220 { 64, -64, -64, 64 },
221 { 36, -83, 83, -36 }
222};
223
224const int16_t g_t8[8][8] =
225{
226 { 64, 64, 64, 64, 64, 64, 64, 64 },
227 { 89, 75, 50, 18, -18, -50, -75, -89 },
228 { 83, 36, -36, -83, -83, -36, 36, 83 },
229 { 75, -18, -89, -50, 50, 89, 18, -75 },
230 { 64, -64, -64, 64, 64, -64, -64, 64 },
231 { 50, -89, 18, 75, -75, -18, 89, -50 },
232 { 36, -83, 83, -36, -36, 83, -83, 36 },
233 { 18, -50, 75, -89, 89, -75, 50, -18 }
234};
235
236const int16_t g_t16[16][16] =
237{
238 { 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64 },
239 { 90, 87, 80, 70, 57, 43, 25, 9, -9, -25, -43, -57, -70, -80, -87, -90 },
240 { 89, 75, 50, 18, -18, -50, -75, -89, -89, -75, -50, -18, 18, 50, 75, 89 },
241 { 87, 57, 9, -43, -80, -90, -70, -25, 25, 70, 90, 80, 43, -9, -57, -87 },
242 { 83, 36, -36, -83, -83, -36, 36, 83, 83, 36, -36, -83, -83, -36, 36, 83 },
243 { 80, 9, -70, -87, -25, 57, 90, 43, -43, -90, -57, 25, 87, 70, -9, -80 },
244 { 75, -18, -89, -50, 50, 89, 18, -75, -75, 18, 89, 50, -50, -89, -18, 75 },
245 { 70, -43, -87, 9, 90, 25, -80, -57, 57, 80, -25, -90, -9, 87, 43, -70 },
246 { 64, -64, -64, 64, 64, -64, -64, 64, 64, -64, -64, 64, 64, -64, -64, 64 },
247 { 57, -80, -25, 90, -9, -87, 43, 70, -70, -43, 87, 9, -90, 25, 80, -57 },
248 { 50, -89, 18, 75, -75, -18, 89, -50, -50, 89, -18, -75, 75, 18, -89, 50 },
249 { 43, -90, 57, 25, -87, 70, 9, -80, 80, -9, -70, 87, -25, -57, 90, -43 },
250 { 36, -83, 83, -36, -36, 83, -83, 36, 36, -83, 83, -36, -36, 83, -83, 36 },
251 { 25, -70, 90, -80, 43, 9, -57, 87, -87, 57, -9, -43, 80, -90, 70, -25 },
252 { 18, -50, 75, -89, 89, -75, 50, -18, -18, 50, -75, 89, -89, 75, -50, 18 },
253 { 9, -25, 43, -57, 70, -80, 87, -90, 90, -87, 80, -70, 57, -43, 25, -9 }
254};
255
256const int16_t g_t32[32][32] =
257{
258 { 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64 },
259 { 90, 90, 88, 85, 82, 78, 73, 67, 61, 54, 46, 38, 31, 22, 13, 4, -4, -13, -22, -31, -38, -46, -54, -61, -67, -73, -78, -82, -85, -88, -90, -90 },
260 { 90, 87, 80, 70, 57, 43, 25, 9, -9, -25, -43, -57, -70, -80, -87, -90, -90, -87, -80, -70, -57, -43, -25, -9, 9, 25, 43, 57, 70, 80, 87, 90 },
261 { 90, 82, 67, 46, 22, -4, -31, -54, -73, -85, -90, -88, -78, -61, -38, -13, 13, 38, 61, 78, 88, 90, 85, 73, 54, 31, 4, -22, -46, -67, -82, -90 },
262 { 89, 75, 50, 18, -18, -50, -75, -89, -89, -75, -50, -18, 18, 50, 75, 89, 89, 75, 50, 18, -18, -50, -75, -89, -89, -75, -50, -18, 18, 50, 75, 89 },
263 { 88, 67, 31, -13, -54, -82, -90, -78, -46, -4, 38, 73, 90, 85, 61, 22, -22, -61, -85, -90, -73, -38, 4, 46, 78, 90, 82, 54, 13, -31, -67, -88 },
264 { 87, 57, 9, -43, -80, -90, -70, -25, 25, 70, 90, 80, 43, -9, -57, -87, -87, -57, -9, 43, 80, 90, 70, 25, -25, -70, -90, -80, -43, 9, 57, 87 },
265 { 85, 46, -13, -67, -90, -73, -22, 38, 82, 88, 54, -4, -61, -90, -78, -31, 31, 78, 90, 61, 4, -54, -88, -82, -38, 22, 73, 90, 67, 13, -46, -85 },
266 { 83, 36, -36, -83, -83, -36, 36, 83, 83, 36, -36, -83, -83, -36, 36, 83, 83, 36, -36, -83, -83, -36, 36, 83, 83, 36, -36, -83, -83, -36, 36, 83 },
267 { 82, 22, -54, -90, -61, 13, 78, 85, 31, -46, -90, -67, 4, 73, 88, 38, -38, -88, -73, -4, 67, 90, 46, -31, -85, -78, -13, 61, 90, 54, -22, -82 },
268 { 80, 9, -70, -87, -25, 57, 90, 43, -43, -90, -57, 25, 87, 70, -9, -80, -80, -9, 70, 87, 25, -57, -90, -43, 43, 90, 57, -25, -87, -70, 9, 80 },
269 { 78, -4, -82, -73, 13, 85, 67, -22, -88, -61, 31, 90, 54, -38, -90, -46, 46, 90, 38, -54, -90, -31, 61, 88, 22, -67, -85, -13, 73, 82, 4, -78 },
270 { 75, -18, -89, -50, 50, 89, 18, -75, -75, 18, 89, 50, -50, -89, -18, 75, 75, -18, -89, -50, 50, 89, 18, -75, -75, 18, 89, 50, -50, -89, -18, 75 },
271 { 73, -31, -90, -22, 78, 67, -38, -90, -13, 82, 61, -46, -88, -4, 85, 54, -54, -85, 4, 88, 46, -61, -82, 13, 90, 38, -67, -78, 22, 90, 31, -73 },
272 { 70, -43, -87, 9, 90, 25, -80, -57, 57, 80, -25, -90, -9, 87, 43, -70, -70, 43, 87, -9, -90, -25, 80, 57, -57, -80, 25, 90, 9, -87, -43, 70 },
273 { 67, -54, -78, 38, 85, -22, -90, 4, 90, 13, -88, -31, 82, 46, -73, -61, 61, 73, -46, -82, 31, 88, -13, -90, -4, 90, 22, -85, -38, 78, 54, -67 },
274 { 64, -64, -64, 64, 64, -64, -64, 64, 64, -64, -64, 64, 64, -64, -64, 64, 64, -64, -64, 64, 64, -64, -64, 64, 64, -64, -64, 64, 64, -64, -64, 64 },
275 { 61, -73, -46, 82, 31, -88, -13, 90, -4, -90, 22, 85, -38, -78, 54, 67, -67, -54, 78, 38, -85, -22, 90, 4, -90, 13, 88, -31, -82, 46, 73, -61 },
276 { 57, -80, -25, 90, -9, -87, 43, 70, -70, -43, 87, 9, -90, 25, 80, -57, -57, 80, 25, -90, 9, 87, -43, -70, 70, 43, -87, -9, 90, -25, -80, 57 },
277 { 54, -85, -4, 88, -46, -61, 82, 13, -90, 38, 67, -78, -22, 90, -31, -73, 73, 31, -90, 22, 78, -67, -38, 90, -13, -82, 61, 46, -88, 4, 85, -54 },
278 { 50, -89, 18, 75, -75, -18, 89, -50, -50, 89, -18, -75, 75, 18, -89, 50, 50, -89, 18, 75, -75, -18, 89, -50, -50, 89, -18, -75, 75, 18, -89, 50 },
279 { 46, -90, 38, 54, -90, 31, 61, -88, 22, 67, -85, 13, 73, -82, 4, 78, -78, -4, 82, -73, -13, 85, -67, -22, 88, -61, -31, 90, -54, -38, 90, -46 },
280 { 43, -90, 57, 25, -87, 70, 9, -80, 80, -9, -70, 87, -25, -57, 90, -43, -43, 90, -57, -25, 87, -70, -9, 80, -80, 9, 70, -87, 25, 57, -90, 43 },
281 { 38, -88, 73, -4, -67, 90, -46, -31, 85, -78, 13, 61, -90, 54, 22, -82, 82, -22, -54, 90, -61, -13, 78, -85, 31, 46, -90, 67, 4, -73, 88, -38 },
282 { 36, -83, 83, -36, -36, 83, -83, 36, 36, -83, 83, -36, -36, 83, -83, 36, 36, -83, 83, -36, -36, 83, -83, 36, 36, -83, 83, -36, -36, 83, -83, 36 },
283 { 31, -78, 90, -61, 4, 54, -88, 82, -38, -22, 73, -90, 67, -13, -46, 85, -85, 46, 13, -67, 90, -73, 22, 38, -82, 88, -54, -4, 61, -90, 78, -31 },
284 { 25, -70, 90, -80, 43, 9, -57, 87, -87, 57, -9, -43, 80, -90, 70, -25, -25, 70, -90, 80, -43, -9, 57, -87, 87, -57, 9, 43, -80, 90, -70, 25 },
285 { 22, -61, 85, -90, 73, -38, -4, 46, -78, 90, -82, 54, -13, -31, 67, -88, 88, -67, 31, 13, -54, 82, -90, 78, -46, 4, 38, -73, 90, -85, 61, -22 },
286 { 18, -50, 75, -89, 89, -75, 50, -18, -18, 50, -75, 89, -89, 75, -50, 18, 18, -50, 75, -89, 89, -75, 50, -18, -18, 50, -75, 89, -89, 75, -50, 18 },
287 { 13, -38, 61, -78, 88, -90, 85, -73, 54, -31, 4, 22, -46, 67, -82, 90, -90, 82, -67, 46, -22, -4, 31, -54, 73, -85, 90, -88, 78, -61, 38, -13 },
288 { 9, -25, 43, -57, 70, -80, 87, -90, 90, -87, 80, -70, 57, -43, 25, -9, -9, 25, -43, 57, -70, 80, -87, 90, -90, 87, -80, 70, -57, 43, -25, 9 },
289 { 4, -13, 22, -31, 38, -46, 54, -61, 67, -73, 78, -82, 85, -88, 90, -90, 90, -90, 88, -85, 82, -78, 73, -67, 61, -54, 46, -38, 31, -22, 13, -4 }
290};
291
292const uint8_t g_chromaScale[ChromaQPMappingTableSize] =
293{
294 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 29, 30, 31, 32, 33, 33, 34, 34, 35, 35, 36, 36, 37, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
295 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51
296};
297
298const uint8_t g_chroma422IntraAngleMappingTable[AngleMapping422TableSize] =
299{ 0, 1, 2, 2, 2, 2, 3, 5, 7, 8, 10, 12, 13, 15, 17, 18, 19, 20, 21, 22, 23, 23, 24, 24, 25, 25, 26, 27, 27, 28, 28, 29, 29, 30, 31, DM_CHROMA_IDX };
300
301const uint8_t g_log2Size[MAX_CU_SIZE + 1] =
302{
303 0, 0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3,
304 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
305 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
306 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
307 6
308};
309
310const uint16_t g_scan2x2[][2*2] =
311{
312 { 0, 2, 1, 3 },
313 { 0, 1, 2, 3 },
314};
315
316const uint16_t g_scan8x8[NUM_SCAN_TYPE][8 * 8] =
317{
318 { 0, 8, 1, 16, 9, 2, 24, 17, 10, 3, 25, 18, 11, 26, 19, 27, 32, 40, 33, 48, 41, 34, 56, 49, 42, 35, 57, 50, 43, 58, 51, 59,
319 4, 12, 5, 20, 13, 6, 28, 21, 14, 7, 29, 22, 15, 30, 23, 31, 36, 44, 37, 52, 45, 38, 60, 53, 46, 39, 61, 54, 47, 62, 55, 63 },
320 { 0, 1, 2, 3, 8, 9, 10, 11, 16, 17, 18, 19, 24, 25, 26, 27, 4, 5, 6, 7, 12, 13, 14, 15, 20, 21, 22, 23, 28, 29, 30, 31,
321 32, 33, 34, 35, 40, 41, 42, 43, 48, 49, 50, 51, 56, 57, 58, 59, 36, 37, 38, 39, 44, 45, 46, 47, 52, 53, 54, 55, 60, 61, 62, 63 },
322 { 0, 8, 16, 24, 1, 9, 17, 25, 2, 10, 18, 26, 3, 11, 19, 27, 32, 40, 48, 56, 33, 41, 49, 57, 34, 42, 50, 58, 35, 43, 51, 59,
323 4, 12, 20, 28, 5, 13, 21, 29, 6, 14, 22, 30, 7, 15, 23, 31, 36, 44, 52, 60, 37, 45, 53, 61, 38, 46, 54, 62, 39, 47, 55, 63 }
324};
325
326const uint16_t g_scan4x4[NUM_SCAN_TYPE][4 * 4] =
327{
328 { 0, 4, 1, 8, 5, 2, 12, 9, 6, 3, 13, 10, 7, 14, 11, 15 },
329 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 },
330 { 0, 4, 8, 12, 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15 }
331};
332
333const uint16_t g_scan16x16[16 * 16] =
334{
335 0, 16, 1, 32, 17, 2, 48, 33, 18, 3, 49, 34, 19, 50, 35, 51,
336 64, 80, 65, 96, 81, 66, 112, 97, 82, 67, 113, 98, 83, 114, 99, 115,
337 4, 20, 5, 36, 21, 6, 52, 37, 22, 7, 53, 38, 23, 54, 39, 55,
338 128, 144, 129, 160, 145, 130, 176, 161, 146, 131, 177, 162, 147, 178, 163, 179,
339 68, 84, 69, 100, 85, 70, 116, 101, 86, 71, 117, 102, 87, 118, 103, 119,
340 8, 24, 9, 40, 25, 10, 56, 41, 26, 11, 57, 42, 27, 58, 43, 59,
341 192,208, 193,224,209, 194,240,225,210, 195,241,226,211,242,227,243,
342 132, 148, 133, 164, 149, 134, 180, 165, 150, 135, 181, 166, 151, 182, 167, 183,
343 72, 88, 73, 104, 89, 74, 120, 105, 90, 75, 121, 106, 91, 122, 107, 123,
344 12, 28, 13, 44, 29, 14, 60, 45, 30, 15, 61, 46, 31, 62, 47, 63,
345 196,212, 197,228,213, 198,244,229,214, 199,245,230,215,246,231,247,
346 136, 152, 137, 168, 153, 138, 184, 169, 154, 139, 185, 170, 155, 186, 171, 187,
347 76, 92, 77, 108, 93, 78, 124, 109, 94, 79, 125, 110, 95, 126, 111, 127,
348 200,216,201,232,217,202,248,233,218,203,249,234,219,250,235,251,
349 140, 156, 141, 172, 157, 142, 188, 173, 158, 143, 189, 174, 159, 190, 175, 191,
350 204,220,205,236,221,206,252,237,222,207,253,238,223,254,239,255
351};
352
353const uint16_t g_scan8x8diag[8 * 8] =
354{
355 0, 8, 1, 16, 9, 2, 24, 17,
356 10, 3, 32, 25, 18, 11, 4, 40,
357 33, 26, 19, 12, 5, 48, 41, 34,
358 27, 20, 13, 6, 56, 49, 42, 35,
359 28, 21, 14, 7, 57, 50, 43, 36,
360 29, 22, 15, 58, 51, 44, 37, 30,
361 23, 59, 52, 45, 38, 31, 60, 53,
362 46, 39, 61, 54, 47, 62, 55, 63
363};
364
365const uint16_t g_scan32x32[32 * 32] =
366{
367 0,32,1,64,33,2,96,65,34,3,97,66,35,98,67,99,128,160,129,192,161,130,224,193,162,131,225,194,163,226,195,227,
368 4,36,5,68,37,6,100,69,38,7,101,70,39,102,71,103,256,288,257,320,289,258,352,321,290,259,353,322,291,354,323,355,
369 132,164,133,196,165,134,228,197,166,135,229,198,167,230,199,231,8,40,9,72,41,10,104,73,42,11,105,74,43,106,75,107,
370 384,416,385,448,417,386,480,449,418,387,481,450,419,482,451,483,260,292,261,324,293,262,356,325,294,263,357,326,295,358,327,359,
371 136,168,137,200,169,138,232,201,170,139,233,202,171,234,203,235,12,44,13,76,45,14,108,77,46,15,109,78,47,110,79,111,
372 512,544,513,576,545,514,608,577,546,515,609,578,547,610,579,611,388,420,389,452,421,390,484,453,422,391,485,454,423,486,455,487,
373 264,296,265,328,297,266,360,329,298,267,361,330,299,362,331,363,140,172,141,204,173,142,236,205,174,143,237,206,175,238,207,239,
374 16,48,17,80,49,18,112,81,50,19,113,82,51,114,83,115,640,672,641,704,673,642,736,705,674,643,737,706,675,738,707,739,
375 516,548,517,580,549,518,612,581,550,519,613,582,551,614,583,615,392,424,393,456,425,394,488,457,426,395,489,458,427,490,459,491,
376 268,300,269,332,301,270,364,333,302,271,365,334,303,366,335,367,144,176,145,208,177,146,240,209,178,147,241,210,179,242,211,243,
377 20,52,21,84,53,22,116,85,54,23,117,86,55,118,87,119,768,800,769,832,801,770,864,833,802,771,865,834,803,866,835,867,
378 644,676,645,708,677,646,740,709,678,647,741,710,679,742,711,743,520,552,521,584,553,522,616,585,554,523,617,586,555,618,587,619,
379 396,428,397,460,429,398,492,461,430,399,493,462,431,494,463,495,272,304,273,336,305,274,368,337,306,275,369,338,307,370,339,371,
380 148,180,149,212,181,150,244,213,182,151,245,214,183,246,215,247,24,56,25,88,57,26,120,89,58,27,121,90,59,122,91,123,
381 896,928,897,960,929,898,992,961,930,899,993,962,931,994,963,995,772,804,773,836,805,774,868,837,806,775,869,838,807,870,839,871,
382 648,680,649,712,681,650,744,713,682,651,745,714,683,746,715,747,524,556,525,588,557,526,620,589,558,527,621,590,559,622,591,623,
383 400,432,401,464,433,402,496,465,434,403,497,466,435,498,467,499,276,308,277,340,309,278,372,341,310,279,373,342,311,374,343,375,
384 152,184,153,216,185,154,248,217,186,155,249,218,187,250,219,251,28,60,29,92,61,30,124,93,62,31,125,94,63,126,95,127,
385 900,932,901,964,933,902,996,965,934,903,997,966,935,998,967,999,776,808,777,840,809,778,872,841,810,779,873,842,811,874,843,875,
386 652,684,653,716,685,654,748,717,686,655,749,718,687,750,719,751,528,560,529,592,561,530,624,593,562,531,625,594,563,626,595,627,
387 404,436,405,468,437,406,500,469,438,407,501,470,439,502,471,503,280,312,281,344,313,282,376,345,314,283,377,346,315,378,347,379,
388 156,188,157,220,189,158,252,221,190,159,253,222,191,254,223,255,904,936,905,968,937,906,1000,969,938,907,1001,970,939,1002,971,1003,
389 780,812,781,844,813,782,876,845,814,783,877,846,815,878,847,879,656,688,657,720,689,658,752,721,690,659,753,722,691,754,723,755,
390 532,564,533,596,565,534,628,597,566,535,629,598,567,630,599,631,408,440,409,472,441,410,504,473,442,411,505,474,443,506,475,507,
391 284,316,285,348,317,286,380,349,318,287,381,350,319,382,351,383,908,940,909,972,941,910,1004,973,942,911,1005,974,943,1006,975,1007,
392 784,816,785,848,817,786,880,849,818,787,881,850,819,882,851,883,660,692,661,724,693,662,756,725,694,663,757,726,695,758,727,759,
393 536,568,537,600,569,538,632,601,570,539,633,602,571,634,603,635,412,444,413,476,445,414,508,477,446,415,509,478,447,510,479,511,
394 912,944,913,976,945,914,1008,977,946,915,1009,978,947,1010,979,1011,788,820,789,852,821,790,884,853,822,791,885,854,823,886,855,887,
395 664,696,665,728,697,666,760,729,698,667,761,730,699,762,731,763,540,572,541,604,573,542,636,605,574,543,637,606,575,638,607,639,
396 916,948,917,980,949,918,1012,981,950,919,1013,982,951,1014,983,1015,792,824,793,856,825,794,888,857,826,795,889,858,827,890,859,891,
397 668,700,669,732,701,670,764,733,702,671,765,734,703,766,735,767,920,952,921,984,953,922,1016,985,954,923,1017,986,955,1018,987,1019,
398 796,828,797,860,829,798,892,861,830,799,893,862,831,894,863,895,924,956,925,988,957,926,1020,989,958,927,1021,990,959,1022,991,1023
399};
400
401const uint16_t* const g_scanOrder[NUM_SCAN_TYPE][NUM_SCAN_SIZE] =
402{
403 { g_scan4x4[0], g_scan8x8[0], g_scan16x16, g_scan32x32 },
404 { g_scan4x4[1], g_scan8x8[1], g_scan16x16, g_scan32x32 },
405 { g_scan4x4[2], g_scan8x8[2], g_scan16x16, g_scan32x32 }
406};
407
408const uint16_t* const g_scanOrderCG[NUM_SCAN_TYPE][NUM_SCAN_SIZE] =
409{
410 { g_scan4x4[0], g_scan2x2[0], g_scan4x4[0], g_scan8x8diag },
411 { g_scan4x4[1], g_scan2x2[1], g_scan4x4[0], g_scan8x8diag },
412 { g_scan4x4[2], g_scan2x2[0], g_scan4x4[0], g_scan8x8diag }
413};
414
415const uint8_t g_minInGroup[10] = { 0, 1, 2, 3, 4, 6, 8, 12, 16, 24 };
416
417// Rice parameters for absolute transform levels
418const uint8_t g_goRiceRange[5] = { 7, 14, 26, 46, 78 };
419
420const uint8_t g_lpsTable[64][4] =
421{
422 { 128, 176, 208, 240 },
423 { 128, 167, 197, 227 },
424 { 128, 158, 187, 216 },
425 { 123, 150, 178, 205 },
426 { 116, 142, 169, 195 },
427 { 111, 135, 160, 185 },
428 { 105, 128, 152, 175 },
429 { 100, 122, 144, 166 },
430 { 95, 116, 137, 158 },
431 { 90, 110, 130, 150 },
432 { 85, 104, 123, 142 },
433 { 81, 99, 117, 135 },
434 { 77, 94, 111, 128 },
435 { 73, 89, 105, 122 },
436 { 69, 85, 100, 116 },
437 { 66, 80, 95, 110 },
438 { 62, 76, 90, 104 },
439 { 59, 72, 86, 99 },
440 { 56, 69, 81, 94 },
441 { 53, 65, 77, 89 },
442 { 51, 62, 73, 85 },
443 { 48, 59, 69, 80 },
444 { 46, 56, 66, 76 },
445 { 43, 53, 63, 72 },
446 { 41, 50, 59, 69 },
447 { 39, 48, 56, 65 },
448 { 37, 45, 54, 62 },
449 { 35, 43, 51, 59 },
450 { 33, 41, 48, 56 },
451 { 32, 39, 46, 53 },
452 { 30, 37, 43, 50 },
453 { 29, 35, 41, 48 },
454 { 27, 33, 39, 45 },
455 { 26, 31, 37, 43 },
456 { 24, 30, 35, 41 },
457 { 23, 28, 33, 39 },
458 { 22, 27, 32, 37 },
459 { 21, 26, 30, 35 },
460 { 20, 24, 29, 33 },
461 { 19, 23, 27, 31 },
462 { 18, 22, 26, 30 },
463 { 17, 21, 25, 28 },
464 { 16, 20, 23, 27 },
465 { 15, 19, 22, 25 },
466 { 14, 18, 21, 24 },
467 { 14, 17, 20, 23 },
468 { 13, 16, 19, 22 },
469 { 12, 15, 18, 21 },
470 { 12, 14, 17, 20 },
471 { 11, 14, 16, 19 },
472 { 11, 13, 15, 18 },
473 { 10, 12, 15, 17 },
474 { 10, 12, 14, 16 },
475 { 9, 11, 13, 15 },
476 { 9, 11, 12, 14 },
477 { 8, 10, 12, 14 },
478 { 8, 9, 11, 13 },
479 { 7, 9, 11, 12 },
480 { 7, 9, 10, 12 },
481 { 7, 8, 10, 11 },
482 { 6, 8, 9, 11 },
483 { 6, 7, 9, 10 },
484 { 6, 7, 8, 9 },
485 { 2, 2, 2, 2 }
486};
487
488const uint8_t x265_exp2_lut[64] =
489{
490 0, 3, 6, 8, 11, 14, 17, 20, 23, 26, 29, 32, 36, 39, 42, 45,
491 48, 52, 55, 58, 62, 65, 69, 72, 76, 80, 83, 87, 91, 94, 98, 102,
492 106, 110, 114, 118, 122, 126, 130, 135, 139, 143, 147, 152, 156, 161, 165, 170,
493 175, 179, 184, 189, 194, 198, 203, 208, 214, 219, 224, 229, 234, 240, 245, 250
494};
495
496/* bFilter = g_intraFilterFlags[dir] & trSize */
497const uint8_t g_intraFilterFlags[NUM_INTRA_MODE] =
498{
499 0x38, 0x00,
500 0x38, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x20, 0x00, 0x20, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
501 0x38, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x20, 0x00, 0x20, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
502 0x38,
503};
504
505/* Contains how much to increment shared depth buffer for different ctu sizes to get next best depth
506 * here, depth 0 = 64x64, depth 1 = 32x32, depth 2 = 16x16 and depth 3 = 8x8
507 * if ctu = 64, depth buffer size is 256 combination of depth values 0, 1, 2, 3
508 * if ctu = 32, depth buffer size is 64 combination of depth values 1, 2, 3
509 * if ctu = 16, depth buffer size is 16 combination of depth values 2, 3 */
510const uint32_t g_depthInc[3][4] =
511{
512 { 16, 4, 0, 0},
513 { 64, 16, 4, 1},
514 {256, 64, 16, 4}
515};
516
517/* g_depthScanIdx [y][x] */
518const uint32_t g_depthScanIdx[8][8] =
519{
520 { 0, 1, 4, 5, 16, 17, 20, 21, },
521 { 2, 3, 6, 7, 18, 19, 22, 23, },
522 { 8, 9, 12, 13, 24, 25, 28, 29, },
523 { 10, 11, 14, 15, 26, 27, 30, 31, },
524 { 32, 33, 36, 37, 48, 49, 52, 53, },
525 { 34, 35, 38, 39, 50, 51, 54, 55, },
526 { 40, 41, 44, 45, 56, 57, 60, 61, },
527 { 42, 43, 46, 47, 58, 59, 62, 63, }
528};
529
530}