Imported Upstream version 1.4
[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
30static int initialized /* = 0 */;
31
32// initialize ROM variables
33void initROM()
34{
35 if (ATOMIC_CAS32(&initialized, 0, 1) == 1)
36 return;
37}
38
39void destroyROM()
40{
41 if (ATOMIC_CAS32(&initialized, 1, 0) == 0)
42 return;
43}
44
45
46// lambda = pow(2, (double)q / 6 - 2);
47double x265_lambda_tab[QP_MAX_MAX + 1] =
48{
49 0.2500, 0.2806, 0.3150, 0.3536, 0.3969,
50 0.4454, 0.5000, 0.5612, 0.6300, 0.7071,
51 0.7937, 0.8909, 1.0000, 1.1225, 1.2599,
52 1.4142, 1.5874, 1.7818, 2.0000, 2.2449,
53 2.5198, 2.8284, 3.1748, 3.5636, 4.0000,
54 4.4898, 5.0397, 5.6569, 6.3496, 7.1272,
55 8.0000, 8.9797, 10.0794, 11.3137, 12.6992,
56 14.2544, 16.0000, 17.9594, 20.1587, 22.6274,
57 25.3984, 28.5088, 32.0000, 35.9188, 40.3175,
58 45.2548, 50.7968, 57.0175, 64.0000, 71.8376,
59 80.6349, 90.5097, 101.5937, 114.0350, 128.0000,
60 143.6751, 161.2699, 181.0193, 203.1873, 228.0701,
61 256.0000, 287.3503, 322.5398, 362.0387, 406.3747,
62 456.1401, 512.0000, 574.7006, 645.0796, 724.0773
63};
64
65// lambda2 = pow(lambda, 2) * scale (0.85);
66double x265_lambda2_tab[QP_MAX_MAX + 1] =
67{
68 0.0531, 0.0669, 0.0843, 0.1063, 0.1339,
69 0.1687, 0.2125, 0.2677, 0.3373, 0.4250,
70 0.5355, 0.6746, 0.8500, 1.0709, 1.3493,
71 1.7000, 2.1419, 2.6986, 3.4000, 4.2837,
72 5.3970, 6.8000, 8.5675, 10.7943, 13.6000,
73 17.1345, 21.5887, 27.2004, 34.2699, 43.1773,
74 54.4000, 68.5397, 86.3551, 108.7998, 137.0792,
75 172.7097, 217.6000, 274.1590, 345.4172, 435.1993,
76 548.3169, 690.8389, 870.4000, 1096.6362, 1381.6757,
77 1740.7974, 2193.2676, 2763.3460, 3481.6000, 4386.5446,
78 5526.6890, 6963.2049, 8773.0879, 11053.3840, 13926.4000,
79 17546.1542, 22106.7835, 27852.7889, 35092.3170, 44213.5749,
80 55705.6000, 70184.6657, 88427.1342, 111411.2172, 140369.3373,
81 176854.2222, 222822.4000, 280738.6627, 353708.5368, 445644.7459
82};
83
84const uint16_t x265_chroma_lambda2_offset_tab[MAX_CHROMA_LAMBDA_OFFSET+1] =
85{
86 16, 20, 25, 32, 40, 50,
87 64, 80, 101, 128, 161, 203,
88 256, 322, 406, 512, 645, 812,
89 1024, 1290, 1625, 2048, 2580, 3250,
90 4096, 5160, 6501, 8192, 10321, 13003,
91 16384, 20642, 26007, 32768, 41285, 52015,
92 65535
93};
94
95uint32_t g_maxLog2CUSize = MAX_LOG2_CU_SIZE;
96uint32_t g_maxCUSize = MAX_CU_SIZE;
97uint32_t g_maxFullDepth = NUM_FULL_DEPTH - 1;
98uint32_t g_maxCUDepth = NUM_CU_DEPTH - 1;
99uint32_t g_zscanToRaster[MAX_NUM_PARTITIONS] = { 0, };
100uint32_t g_rasterToZscan[MAX_NUM_PARTITIONS] = { 0, };
101
102const uint8_t g_zscanToPelX[MAX_NUM_PARTITIONS] =
103{
104 0, 4, 0, 4, 8, 12, 8, 12, 0, 4, 0, 4, 8, 12, 8, 12,
105 16, 20, 16, 20, 24, 28, 24, 28, 16, 20, 16, 20, 24, 28, 24, 28,
106 0, 4, 0, 4, 8, 12, 8, 12, 0, 4, 0, 4, 8, 12, 8, 12,
107 16, 20, 16, 20, 24, 28, 24, 28, 16, 20, 16, 20, 24, 28, 24, 28,
108 32, 36, 32, 36, 40, 44, 40, 44, 32, 36, 32, 36, 40, 44, 40, 44,
109 48, 52, 48, 52, 56, 60, 56, 60, 48, 52, 48, 52, 56, 60, 56, 60,
110 32, 36, 32, 36, 40, 44, 40, 44, 32, 36, 32, 36, 40, 44, 40, 44,
111 48, 52, 48, 52, 56, 60, 56, 60, 48, 52, 48, 52, 56, 60, 56, 60,
112 0, 4, 0, 4, 8, 12, 8, 12, 0, 4, 0, 4, 8, 12, 8, 12,
113 16, 20, 16, 20, 24, 28, 24, 28, 16, 20, 16, 20, 24, 28, 24, 28,
114 0, 4, 0, 4, 8, 12, 8, 12, 0, 4, 0, 4, 8, 12, 8, 12,
115 16, 20, 16, 20, 24, 28, 24, 28, 16, 20, 16, 20, 24, 28, 24, 28,
116 32, 36, 32, 36, 40, 44, 40, 44, 32, 36, 32, 36, 40, 44, 40, 44,
117 48, 52, 48, 52, 56, 60, 56, 60, 48, 52, 48, 52, 56, 60, 56, 60,
118 32, 36, 32, 36, 40, 44, 40, 44, 32, 36, 32, 36, 40, 44, 40, 44,
119 48, 52, 48, 52, 56, 60, 56, 60, 48, 52, 48, 52, 56, 60, 56, 60
120};
121
122const uint8_t g_zscanToPelY[MAX_NUM_PARTITIONS] =
123{
124 0, 0, 4, 4, 0, 0, 4, 4, 8, 8, 12, 12, 8, 8, 12, 12,
125 0, 0, 4, 4, 0, 0, 4, 4, 8, 8, 12, 12, 8, 8, 12, 12,
126 16, 16, 20, 20, 16, 16, 20, 20, 24, 24, 28, 28, 24, 24, 28, 28,
127 16, 16, 20, 20, 16, 16, 20, 20, 24, 24, 28, 28, 24, 24, 28, 28,
128 0, 0, 4, 4, 0, 0, 4, 4, 8, 8, 12, 12, 8, 8, 12, 12,
129 0, 0, 4, 4, 0, 0, 4, 4, 8, 8, 12, 12, 8, 8, 12, 12,
130 16, 16, 20, 20, 16, 16, 20, 20, 24, 24, 28, 28, 24, 24, 28, 28,
131 16, 16, 20, 20, 16, 16, 20, 20, 24, 24, 28, 28, 24, 24, 28, 28,
132 32, 32, 36, 36, 32, 32, 36, 36, 40, 40, 44, 44, 40, 40, 44, 44,
133 32, 32, 36, 36, 32, 32, 36, 36, 40, 40, 44, 44, 40, 40, 44, 44,
134 48, 48, 52, 52, 48, 48, 52, 52, 56, 56, 60, 60, 56, 56, 60, 60,
135 48, 48, 52, 52, 48, 48, 52, 52, 56, 56, 60, 60, 56, 56, 60, 60,
136 32, 32, 36, 36, 32, 32, 36, 36, 40, 40, 44, 44, 40, 40, 44, 44,
137 32, 32, 36, 36, 32, 32, 36, 36, 40, 40, 44, 44, 40, 40, 44, 44,
138 48, 48, 52, 52, 48, 48, 52, 52, 56, 56, 60, 60, 56, 56, 60, 60,
139 48, 48, 52, 52, 48, 48, 52, 52, 56, 56, 60, 60, 56, 56, 60, 60
140};
141
142void initZscanToRaster(uint32_t maxFullDepth, uint32_t depth, uint32_t startVal, uint32_t*& curIdx)
143{
144 uint32_t stride = 1 << maxFullDepth;
145
146 if (depth > maxFullDepth)
147 {
148 curIdx[0] = startVal;
149 curIdx++;
150 }
151 else
152 {
153 int step = stride >> depth;
154 initZscanToRaster(maxFullDepth, depth + 1, startVal, curIdx);
155 initZscanToRaster(maxFullDepth, depth + 1, startVal + step, curIdx);
156 initZscanToRaster(maxFullDepth, depth + 1, startVal + step * stride, curIdx);
157 initZscanToRaster(maxFullDepth, depth + 1, startVal + step * stride + step, curIdx);
158 }
159}
160
161void initRasterToZscan(uint32_t maxFullDepth)
162{
163 uint32_t numPartitions = 1 << (maxFullDepth * 2);
164
165 for (uint32_t i = 0; i < numPartitions; i++)
166 g_rasterToZscan[g_zscanToRaster[i]] = i;
167}
168
169const int16_t g_lumaFilter[4][NTAPS_LUMA] =
170{
171 { 0, 0, 0, 64, 0, 0, 0, 0 },
172 { -1, 4, -10, 58, 17, -5, 1, 0 },
173 { -1, 4, -11, 40, 40, -11, 4, -1 },
174 { 0, 1, -5, 17, 58, -10, 4, -1 }
175};
176
177const int16_t g_chromaFilter[8][NTAPS_CHROMA] =
178{
179 { 0, 64, 0, 0 },
180 { -2, 58, 10, -2 },
181 { -4, 54, 16, -2 },
182 { -6, 46, 28, -4 },
183 { -4, 36, 36, -4 },
184 { -4, 28, 46, -6 },
185 { -2, 16, 54, -4 },
186 { -2, 10, 58, -2 }
187};
188
189const int16_t g_t4[4][4] =
190{
191 { 64, 64, 64, 64 },
192 { 83, 36, -36, -83 },
193 { 64, -64, -64, 64 },
194 { 36, -83, 83, -36 }
195};
196
197const int16_t g_t8[8][8] =
198{
199 { 64, 64, 64, 64, 64, 64, 64, 64 },
200 { 89, 75, 50, 18, -18, -50, -75, -89 },
201 { 83, 36, -36, -83, -83, -36, 36, 83 },
202 { 75, -18, -89, -50, 50, 89, 18, -75 },
203 { 64, -64, -64, 64, 64, -64, -64, 64 },
204 { 50, -89, 18, 75, -75, -18, 89, -50 },
205 { 36, -83, 83, -36, -36, 83, -83, 36 },
206 { 18, -50, 75, -89, 89, -75, 50, -18 }
207};
208
209const int16_t g_t16[16][16] =
210{
211 { 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64 },
212 { 90, 87, 80, 70, 57, 43, 25, 9, -9, -25, -43, -57, -70, -80, -87, -90 },
213 { 89, 75, 50, 18, -18, -50, -75, -89, -89, -75, -50, -18, 18, 50, 75, 89 },
214 { 87, 57, 9, -43, -80, -90, -70, -25, 25, 70, 90, 80, 43, -9, -57, -87 },
215 { 83, 36, -36, -83, -83, -36, 36, 83, 83, 36, -36, -83, -83, -36, 36, 83 },
216 { 80, 9, -70, -87, -25, 57, 90, 43, -43, -90, -57, 25, 87, 70, -9, -80 },
217 { 75, -18, -89, -50, 50, 89, 18, -75, -75, 18, 89, 50, -50, -89, -18, 75 },
218 { 70, -43, -87, 9, 90, 25, -80, -57, 57, 80, -25, -90, -9, 87, 43, -70 },
219 { 64, -64, -64, 64, 64, -64, -64, 64, 64, -64, -64, 64, 64, -64, -64, 64 },
220 { 57, -80, -25, 90, -9, -87, 43, 70, -70, -43, 87, 9, -90, 25, 80, -57 },
221 { 50, -89, 18, 75, -75, -18, 89, -50, -50, 89, -18, -75, 75, 18, -89, 50 },
222 { 43, -90, 57, 25, -87, 70, 9, -80, 80, -9, -70, 87, -25, -57, 90, -43 },
223 { 36, -83, 83, -36, -36, 83, -83, 36, 36, -83, 83, -36, -36, 83, -83, 36 },
224 { 25, -70, 90, -80, 43, 9, -57, 87, -87, 57, -9, -43, 80, -90, 70, -25 },
225 { 18, -50, 75, -89, 89, -75, 50, -18, -18, 50, -75, 89, -89, 75, -50, 18 },
226 { 9, -25, 43, -57, 70, -80, 87, -90, 90, -87, 80, -70, 57, -43, 25, -9 }
227};
228
229const int16_t g_t32[32][32] =
230{
231 { 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 },
232 { 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 },
233 { 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 },
234 { 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 },
235 { 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 },
236 { 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 },
237 { 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 },
238 { 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 },
239 { 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 },
240 { 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 },
241 { 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 },
242 { 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 },
243 { 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 },
244 { 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 },
245 { 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 },
246 { 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 },
247 { 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 },
248 { 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 },
249 { 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 },
250 { 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 },
251 { 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 },
252 { 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 },
253 { 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 },
254 { 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 },
255 { 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 },
256 { 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 },
257 { 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 },
258 { 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 },
259 { 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 },
260 { 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 },
261 { 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 },
262 { 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 }
263};
264
265const uint8_t g_chromaScale[ChromaQPMappingTableSize] =
266{
267 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,
268 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51
269};
270
271const uint8_t g_chroma422IntraAngleMappingTable[AngleMapping422TableSize] =
272{ 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 };
273
274const uint8_t g_log2Size[MAX_CU_SIZE + 1] =
275{
276 0, 0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3,
277 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
278 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
279 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
280 6
281};
282
283const uint16_t g_scan2x2[][2*2] =
284{
285 { 0, 2, 1, 3 },
286 { 0, 1, 2, 3 },
287};
288
289const uint16_t g_scan8x8[NUM_SCAN_TYPE][8 * 8] =
290{
291 { 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,
292 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 },
293 { 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,
294 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 },
295 { 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,
296 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 }
297};
298
299const uint16_t g_scan4x4[NUM_SCAN_TYPE][4 * 4] =
300{
301 { 0, 4, 1, 8, 5, 2, 12, 9, 6, 3, 13, 10, 7, 14, 11, 15 },
302 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 },
303 { 0, 4, 8, 12, 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15 }
304};
305
306const uint16_t g_scan16x16[16 * 16] =
307{
308 0, 16, 1, 32, 17, 2, 48, 33, 18, 3, 49, 34, 19, 50, 35, 51,
309 64, 80, 65, 96, 81, 66, 112, 97, 82, 67, 113, 98, 83, 114, 99, 115,
310 4, 20, 5, 36, 21, 6, 52, 37, 22, 7, 53, 38, 23, 54, 39, 55,
311 128, 144, 129, 160, 145, 130, 176, 161, 146, 131, 177, 162, 147, 178, 163, 179,
312 68, 84, 69, 100, 85, 70, 116, 101, 86, 71, 117, 102, 87, 118, 103, 119,
313 8, 24, 9, 40, 25, 10, 56, 41, 26, 11, 57, 42, 27, 58, 43, 59,
314 192,208, 193,224,209, 194,240,225,210, 195,241,226,211,242,227,243,
315 132, 148, 133, 164, 149, 134, 180, 165, 150, 135, 181, 166, 151, 182, 167, 183,
316 72, 88, 73, 104, 89, 74, 120, 105, 90, 75, 121, 106, 91, 122, 107, 123,
317 12, 28, 13, 44, 29, 14, 60, 45, 30, 15, 61, 46, 31, 62, 47, 63,
318 196,212, 197,228,213, 198,244,229,214, 199,245,230,215,246,231,247,
319 136, 152, 137, 168, 153, 138, 184, 169, 154, 139, 185, 170, 155, 186, 171, 187,
320 76, 92, 77, 108, 93, 78, 124, 109, 94, 79, 125, 110, 95, 126, 111, 127,
321 200,216,201,232,217,202,248,233,218,203,249,234,219,250,235,251,
322 140, 156, 141, 172, 157, 142, 188, 173, 158, 143, 189, 174, 159, 190, 175, 191,
323 204,220,205,236,221,206,252,237,222,207,253,238,223,254,239,255
324};
325
326const uint16_t g_scan8x8diag[8 * 8] =
327{
328 0, 8, 1, 16, 9, 2, 24, 17,
329 10, 3, 32, 25, 18, 11, 4, 40,
330 33, 26, 19, 12, 5, 48, 41, 34,
331 27, 20, 13, 6, 56, 49, 42, 35,
332 28, 21, 14, 7, 57, 50, 43, 36,
333 29, 22, 15, 58, 51, 44, 37, 30,
334 23, 59, 52, 45, 38, 31, 60, 53,
335 46, 39, 61, 54, 47, 62, 55, 63
336};
337
338const uint16_t g_scan32x32[32 * 32] =
339{
340 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,
341 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,
342 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,
343 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,
344 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,
345 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,
346 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,
347 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,
348 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,
349 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,
350 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,
351 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,
352 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,
353 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,
354 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,
355 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,
356 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,
357 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,
358 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,
359 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,
360 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,
361 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,
362 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,
363 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,
364 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,
365 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,
366 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,
367 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,
368 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,
369 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,
370 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,
371 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
372};
373
374const uint16_t* const g_scanOrder[NUM_SCAN_TYPE][NUM_SCAN_SIZE] =
375{
376 { g_scan4x4[0], g_scan8x8[0], g_scan16x16, g_scan32x32 },
377 { g_scan4x4[1], g_scan8x8[1], g_scan16x16, g_scan32x32 },
378 { g_scan4x4[2], g_scan8x8[2], g_scan16x16, g_scan32x32 }
379};
380
381const uint16_t* const g_scanOrderCG[NUM_SCAN_TYPE][NUM_SCAN_SIZE] =
382{
383 { g_scan4x4[0], g_scan2x2[0], g_scan4x4[0], g_scan8x8diag },
384 { g_scan4x4[1], g_scan2x2[1], g_scan4x4[0], g_scan8x8diag },
385 { g_scan4x4[2], g_scan2x2[0], g_scan4x4[0], g_scan8x8diag }
386};
387
388const uint8_t g_minInGroup[10] = { 0, 1, 2, 3, 4, 6, 8, 12, 16, 24 };
389
390// Rice parameters for absolute transform levels
391const uint8_t g_goRiceRange[5] = { 7, 14, 26, 46, 78 };
392
393const uint8_t g_lpsTable[64][4] =
394{
395 { 128, 176, 208, 240 },
396 { 128, 167, 197, 227 },
397 { 128, 158, 187, 216 },
398 { 123, 150, 178, 205 },
399 { 116, 142, 169, 195 },
400 { 111, 135, 160, 185 },
401 { 105, 128, 152, 175 },
402 { 100, 122, 144, 166 },
403 { 95, 116, 137, 158 },
404 { 90, 110, 130, 150 },
405 { 85, 104, 123, 142 },
406 { 81, 99, 117, 135 },
407 { 77, 94, 111, 128 },
408 { 73, 89, 105, 122 },
409 { 69, 85, 100, 116 },
410 { 66, 80, 95, 110 },
411 { 62, 76, 90, 104 },
412 { 59, 72, 86, 99 },
413 { 56, 69, 81, 94 },
414 { 53, 65, 77, 89 },
415 { 51, 62, 73, 85 },
416 { 48, 59, 69, 80 },
417 { 46, 56, 66, 76 },
418 { 43, 53, 63, 72 },
419 { 41, 50, 59, 69 },
420 { 39, 48, 56, 65 },
421 { 37, 45, 54, 62 },
422 { 35, 43, 51, 59 },
423 { 33, 41, 48, 56 },
424 { 32, 39, 46, 53 },
425 { 30, 37, 43, 50 },
426 { 29, 35, 41, 48 },
427 { 27, 33, 39, 45 },
428 { 26, 31, 37, 43 },
429 { 24, 30, 35, 41 },
430 { 23, 28, 33, 39 },
431 { 22, 27, 32, 37 },
432 { 21, 26, 30, 35 },
433 { 20, 24, 29, 33 },
434 { 19, 23, 27, 31 },
435 { 18, 22, 26, 30 },
436 { 17, 21, 25, 28 },
437 { 16, 20, 23, 27 },
438 { 15, 19, 22, 25 },
439 { 14, 18, 21, 24 },
440 { 14, 17, 20, 23 },
441 { 13, 16, 19, 22 },
442 { 12, 15, 18, 21 },
443 { 12, 14, 17, 20 },
444 { 11, 14, 16, 19 },
445 { 11, 13, 15, 18 },
446 { 10, 12, 15, 17 },
447 { 10, 12, 14, 16 },
448 { 9, 11, 13, 15 },
449 { 9, 11, 12, 14 },
450 { 8, 10, 12, 14 },
451 { 8, 9, 11, 13 },
452 { 7, 9, 11, 12 },
453 { 7, 9, 10, 12 },
454 { 7, 8, 10, 11 },
455 { 6, 8, 9, 11 },
456 { 6, 7, 9, 10 },
457 { 6, 7, 8, 9 },
458 { 2, 2, 2, 2 }
459};
460
461const uint8_t x265_exp2_lut[64] =
462{
463 0, 3, 6, 8, 11, 14, 17, 20, 23, 26, 29, 32, 36, 39, 42, 45,
464 48, 52, 55, 58, 62, 65, 69, 72, 76, 80, 83, 87, 91, 94, 98, 102,
465 106, 110, 114, 118, 122, 126, 130, 135, 139, 143, 147, 152, 156, 161, 165, 170,
466 175, 179, 184, 189, 194, 198, 203, 208, 214, 219, 224, 229, 234, 240, 245, 250
467};
468
469/* bFilter = g_intraFilterFlags[dir] & trSize */
470const uint8_t g_intraFilterFlags[NUM_INTRA_MODE] =
471{
472 0x38, 0x00,
473 0x38, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x20, 0x00, 0x20, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
474 0x38, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x20, 0x00, 0x20, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
475 0x38,
476};
477
478/* Contains how much to increment shared depth buffer for different ctu sizes to get next best depth
479 * here, depth 0 = 64x64, depth 1 = 32x32, depth 2 = 16x16 and depth 3 = 8x8
480 * if ctu = 64, depth buffer size is 256 combination of depth values 0, 1, 2, 3
481 * if ctu = 32, depth buffer size is 64 combination of depth values 1, 2, 3
482 * if ctu = 16, depth buffer size is 16 combination of depth values 2, 3 */
483const uint32_t g_depthInc[3][4] =
484{
485 { 16, 4, 0, 0},
486 { 64, 16, 4, 1},
487 {256, 64, 16, 4}
488};
489
490/* g_depthScanIdx [y][x] */
491const uint32_t g_depthScanIdx[8][8] =
492{
493 { 0, 1, 4, 5, 16, 17, 20, 21, },
494 { 2, 3, 6, 7, 18, 19, 22, 23, },
495 { 8, 9, 12, 13, 24, 25, 28, 29, },
496 { 10, 11, 14, 15, 26, 27, 30, 31, },
497 { 32, 33, 36, 37, 48, 49, 52, 53, },
498 { 34, 35, 38, 39, 50, 51, 54, 55, },
499 { 40, 41, 44, 45, 56, 57, 60, 61, },
500 { 42, 43, 46, 47, 58, 59, 62, 63, }
501};
502
503}