blob: a1231e6fb43871ceb4c6fec9dab36610d2c9367f [file] [log] [blame]
Hamsalekha S8d3d3032015-03-13 21:24:58 +05301/******************************************************************************
2 *
3 * Copyright (C) 2015 The Android Open Source Project
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at:
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 *
17 *****************************************************************************
18 * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
19*/
20/**
21 *******************************************************************************
22 * @file
23 * ih264_trans_data.c
24 *
25 * @brief
26 * Contains definition of global variables for H264 encoder
27 *
28 * @author
29 * Ittiam
30 *
31 * @remarks
32 *
33 *******************************************************************************
34 */
35
36#include "ih264_typedefs.h"
37#include "ih264_trans_data.h"
38
39/*****************************************************************************/
40/* Extern global definitions */
41/*****************************************************************************/
42
43/*
44 * Since we don't have a division operation in neon
45 * we will multiply by LCM of 16,6,10 and scale accordingly
46 * so care that to get the actual transform you need to divide by LCM
47 * LCM = 240
48 */
49
50const UWORD16 g_scal_coff_h264_4x4[16] ={
51 15,40,40,40,
52 40,24,40,24,
53 15,40,40,15,
54 40,24,40,24};
55
56
57
58const UWORD16 g_scal_coff_h264_8x8[16]=
59 {
60 16, 15, 20, 15,
61 15, 14, 19, 14,
62 20, 19, 25, 19,
63 15, 14, 19, 14
64 };
65/*
66 * The scaling is by an 8x8 matrix, but due its 4x4 symmetry we can use
67 * a 4x4 matrix for scaling
68 * now since divide is to be avoided, we will compute 1/ values and scale it up
69 * to preserve information since our data is max 10 bit +1 sign bit we can shift a maximum of 21 bits up
70 * hence multiply the matrix as such
71{16.000 15.059 20.227 15.059
7215.059 14.173 19.051 14.173
7320.227 19.051 25.600 19.051
7415.059 14.173 19.051 14.173};
75{512, 544, 405, 544,
76544, 578, 430, 578,
77405, 430, 320, 430,
78544, 578, 430, 578};*/
79
80
81/**
82 ******************************************************************************
83 * @brief Scale Table for quantizing 4x4 subblock. To quantize a given 4x4 DCT
84 * transformed block, the coefficient at index location (i,j) is scaled by one of
85 * the constants in this table and right shift the result by (QP_BITS_h264_4x4 +
86 * floor(qp/6)), here qp is the quantization parameter used to quantize the mb.
87 *
88 * input : qp%6, index location (i,j)
89 * output : scale constant.
90 *
91 * @remarks 16 constants for each index position of the subblock and 6 for each
92 * qp%6 in the range 0-5 inclusive.
93 ******************************************************************************
94 */
95const UWORD16 gu2_quant_scale_matrix_4x4[96] =
96{
97 13107, 8066, 13107, 8066,
98 8066, 5243, 8066, 5243,
99 13107, 8066, 13107, 8066,
100 8066, 5243, 8066, 5243,
101
102 11916, 7490, 11916, 7490,
103 7490, 4660, 7490, 4660,
104 11916, 7490, 11916, 7490,
105 7490, 4660, 7490, 4660,
106
107 10082, 6554, 10082, 6554,
108 6554, 4194, 6554, 4194,
109 10082, 6554, 10082, 6554,
110 6554, 4194, 6554, 4194,
111
112 9362, 5825, 9362, 5825,
113 5825, 3647, 5825, 3647,
114 9362, 5825, 9362, 5825,
115 5825, 3647, 5825, 3647,
116
117 8192, 5243, 8192, 5243,
118 5243, 3355, 5243, 3355,
119 8192, 5243, 8192, 5243,
120 5243, 3355, 5243, 3355,
121
122 7282, 4559, 7282, 4559,
123 4559, 2893, 4559, 2893,
124 7282, 4559, 7282, 4559,
125 4559, 2893, 4559, 2893,
126
127};
128
129/**
130 ******************************************************************************
131 * @brief Round Factor for quantizing subblock. While quantizing a given 4x4 DCT
132 * transformed block, the coefficient at index location (i,j) is scaled by one of
133 * the constants in the table gu2_forward_quant_scalar_4x4 and then right shift
134 * the result by (QP_BITS_h264_4x4 + floor(qp/6)).
135 * Before right shifting a round factor is added.
136 * The round factor can be any value [a * (1 << (QP_BITS_h264_4x4 + floor(qp/6)))]
137 * for 'a' lies in the range 0-0.5.
138 * Here qp is the quantization parameter used to quantize the mb.
139 *
140 * input : qp/6
141 * output : round factor.
142 *
143 * @remarks The round factor is constructed by setting a = 1/3
144 *
145 * round factor constructed by setting a = 1/3
146 {
147 10922, 21845, 43690, 87381,
148 174762, 349525, 699050, 1398101,
149 2796202,
150 }
151 *
152 * round factor constructed by setting a = 0.49
153 *{
154 16056, 32112, 64225,
155 128450, 256901, 513802,
156 1027604, 2055208, 4110417,
157 };
158
159 * round factor constructed by setting a = 0.5
160 16384, 32768, 65536,
161 131072, 262144, 524288,
162 1048576, 2097152, 4194304,
163
164 ******************************************************************************
165 */
166const UWORD32 gu4_forward_quant_round_factor_4x4[9] =
167{
168 10922, 21845, 43690, 87381,
169 174762, 349525, 699050, 1398101,
170 2796202,
171};
172
173
174
175/**
176 ******************************************************************************
177 * @brief Threshold Table. Quantizing the given DCT coefficient is done only if
178 * it exceeds the threshold value presented in this table.
179 *
180 * input : qp/6, qp%6, index location (i,j)
181 * output : Threshold constant.
182 *
183 * @remarks 16 constants for each index position of the subblock and 6 for each
184 * qp%6 in the range 0-5 inclusive and 9 for each qp/6 in the range 0-51.
185 ******************************************************************************
186 */
187const UWORD16 gu2_forward_quant_threshold_4x4[96] =
188{
189 426, 693, 426, 693,
190 693, 1066, 693, 1066,
191 426, 693, 426, 693,
192 693, 1066, 693, 1066,
193
194 469, 746, 469, 746,
195 746, 1200, 746, 1200,
196 469, 746, 469, 746,
197 746, 1200, 746, 1200,
198
199 554, 853, 554, 853,
200 853, 1333, 853, 1333,
201 554, 853, 554, 853,
202 853, 1333, 853, 1333,
203
204 597, 960, 597, 960,
205 960, 1533, 960, 1533,
206 597, 960, 597, 960,
207 960, 1533, 960, 1533,
208
209 682, 1066, 682, 1066,
210 1066, 1666, 1066, 1666,
211 682, 1066, 682, 1066,
212 1066, 1666, 1066, 1666,
213
214 767, 1226, 767, 1226,
215 1226, 1933, 1226, 1933,
216 767, 1226, 767, 1226,
217 1226, 1933, 1226, 1933,
218};
219
220/**
221 ******************************************************************************
222 * @brief Scale Table for quantizing 8x8 subblock. To quantize a given 8x8 DCT
223 * transformed block, the coefficient at index location (i,j) is scaled by one of
224 * the constants in this table and right shift the result by (QP_BITS_h264_8x8 +
225 * floor(qp/6)), here qp is the quantization parameter used to quantize the mb.
226 *
227 * input : qp%6, index location (i,j)
228 * output : scale constant.
229 *
230 * @remarks 64 constants for each index position of the subblock and 6 for each
231 * qp%6 in the range 0-5 inclusive.
232 ******************************************************************************
233 */
234const UWORD16 gu2_quant_scale_matrix_8x8 [384] =
235{
236 13107, 12222, 16777, 12222, 13107, 12222, 16777, 12222,
237 12222, 11428, 15481, 11428, 12222, 11428, 15481, 11428,
238 16777, 15481, 20972, 15481, 16777, 15481, 20972, 15481,
239 12222, 11428, 15481, 11428, 12222, 11428, 15481, 11428,
240 13107, 12222, 16777, 12222, 13107, 12222, 16777, 12222,
241 12222, 11428, 15481, 11428, 12222, 11428, 15481, 11428,
242 16777, 15481, 20972, 15481, 16777, 15481, 20972, 15481,
243 12222, 11428, 15481, 11428, 12222, 11428, 15481, 11428,
244
245 11916, 11058, 14980, 11058, 11916, 11058, 14980, 11058,
246 11058, 10826, 14290, 10826, 11058, 10826, 14290, 10826,
247 14980, 14290, 19174, 14290, 14980, 14290, 19174, 14290,
248 11058, 10826, 14290, 10826, 11058, 10826, 14290, 10826,
249 11916, 11058, 14980, 11058, 11916, 11058, 14980, 11058,
250 11058, 10826, 14290, 10826, 11058, 10826, 14290, 10826,
251 14980, 14290, 19174, 14290, 14980, 14290, 19174, 14290,
252 11058, 10826, 14290, 10826, 11058, 10826, 14290, 10826,
253
254 10082, 9675, 12710, 9675, 10082, 9675, 12710, 9675,
255 9675, 8943, 11985, 8943, 9675, 8943, 11985, 8943,
256 12710, 11985, 15978, 11985, 12710, 11985, 15978, 11985,
257 9675, 8943, 11985, 8943, 9675, 8943, 11985, 8943,
258 10082, 9675, 12710, 9675, 10082, 9675, 12710, 9675,
259 9675, 8943, 11985, 8943, 9675, 8943, 11985, 8943,
260 12710, 11985, 15978, 11985, 12710, 11985, 15978, 11985,
261 9675, 8943, 11985, 8943, 9675, 8943, 11985, 8943,
262
263 9362, 8931, 11984, 8931, 9362, 8931, 11984, 8931,
264 8931, 8228, 11259, 8228, 8931, 8228, 11259, 8228,
265 11984, 11259, 14913, 11259, 11984, 11259, 14913, 11259,
266 8931, 8228, 11259, 8228, 8931, 8228, 11259, 8228,
267 9362, 8931, 11984, 8931, 9362, 8931, 11984, 8931,
268 8931, 8228, 11259, 8228, 8931, 8228, 11259, 8228,
269 11984, 11259, 14913, 11259, 11984, 11259, 14913, 11259,
270 8931, 8228, 11259, 8228, 8931, 8228, 11259, 8228,
271
272 8192, 7740, 10486, 7740, 8192, 7740, 10486, 7740,
273 7740, 7346, 9777, 7346, 7740, 7346, 9777, 7346,
274 10486, 9777, 13159, 9777, 10486, 9777, 13159, 9777,
275 7740, 7346, 9777, 7346, 7740, 7346, 9777, 7346,
276 8192, 7740, 10486, 7740, 8192, 7740, 10486, 7740,
277 7740, 7346, 9777, 7346, 7740, 7346, 9777, 7346,
278 10486, 9777, 13159, 9777, 10486, 9777, 13159, 9777,
279 7740, 7346, 9777, 7346, 7740, 7346, 9777, 7346,
280
281 7282, 6830, 9118, 6830, 7282, 6830, 9118, 6830,
282 6830, 6428, 8640, 6428, 6830, 6428, 8640, 6428,
283 9118, 8640, 11570, 8640, 9118, 8640, 11570, 8640,
284 6830, 6428, 8640, 6428, 6830, 6428, 8640, 6428,
285 7282, 6830, 9118, 6830, 7282, 6830, 9118, 6830,
286 6830, 6428, 8640, 6428, 6830, 6428, 8640, 6428,
287 9118, 8640, 11570, 8640, 9118, 8640, 11570, 8640,
288 6830, 6428, 8640, 6428, 6830, 6428, 8640, 6428,
289
290};
291
292
293/**
294 ******************************************************************************
295 * @brief Specification of QPc as a function of qPi
296 *
297 * input : qp luma
298 * output : qp chroma.
299 *
300 * @remarks Refer Table 8-15 of h264 specification.
301 ******************************************************************************
302 */
303const UWORD8 gu1_qpc_fqpi[52] =
304{
305 0, 1, 2, 3, 4, 5, 6, 7,
306 8, 9, 10, 11, 12, 13, 14, 15,
307 16, 17, 18, 19, 20, 21, 22, 23,
308 24, 25, 26, 27, 28, 29, 29, 30,
309 31, 32, 32, 33, 34, 34, 35, 35,
310 36, 36, 37, 37, 37, 38, 38, 38,
311 39, 39, 39, 39,
312};