1 /******************************************************************************
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_common_tables.c
24 *
25 * @brief
26 *  Contains common global tables
27 *
28 * @author
29 *  Harish M
30 *
31 * @par List of Functions:
32 *
33 * @remarks
34 *  None
35 *
36 *******************************************************************************
37 */
38 
39 /*****************************************************************************/
40 /* File Includes                                                             */
41 /*****************************************************************************/
42 
43 /* User include files */
44 #include "ih264_typedefs.h"
45 #include "ih264_defs.h"
46 #include "ih264_macros.h"
47 #include "ih264_structs.h"
48 #include "ih264_common_tables.h"
49 
50 
51 /*****************************************************************************/
52 /* Extern global definitions                                                 */
53 /*****************************************************************************/
54 
55 /**
56  ******************************************************************************
57  * @brief  while encoding, basing on the input configuration parameters, the
58  * the level of the bitstream is computed basing on the table below.
59  * input  : table_idx
60  * output : level_idc or cpb size
61  * @remarks Table A-1 � level table limits
62  ******************************************************************************
63  */
64 const level_tables_t gas_ih264_lvl_tbl[16] =
65 {
66     { IH264_LEVEL_10,    1485,       99,         297,       64,         175,         64  },
67     { IH264_LEVEL_1B,    1485,       99,         297,       128,        350,         64  },
68     { IH264_LEVEL_11,    3000,       396,        675,       192,        500,         128 },
69     { IH264_LEVEL_12,    6000,       396,        1782,      384,        1000,        128 },
70     { IH264_LEVEL_13,    11880,      396,        1782,      768,        2000,        128 },
71     { IH264_LEVEL_20,    11880,      396,        1782,      2000,       2000,        128 },
72     { IH264_LEVEL_21,    19800,      792,        3564,      4000,       4000,        256 },
73     { IH264_LEVEL_22,    20250,      1620,       6075,      4000,       4000,        256 },
74     { IH264_LEVEL_30,    40500,      1620,       6075,      10000,      10000,       256 },
75     { IH264_LEVEL_31,    108000,     3600,       13500,     14000,      14000,       512 },
76     { IH264_LEVEL_32,    216000,     5120,       15360,     20000,      20000,       512 },
77     { IH264_LEVEL_40,    245760,     8192,       24576,     20000,      25000,       512 },
78     { IH264_LEVEL_41,    245760,     8192,       24576,     50000,      62500,       512 },
79     { IH264_LEVEL_42,    522240,     8704,       26112,     50000,      62500,       512 },
80     { IH264_LEVEL_50,    589824,     22080,      82800,     135000,     135000,      512 },
81     { IH264_LEVEL_51,    983040,     36864,      138240,    240000,     240000,      512 },
82 };
83 
84 
85 /**
86  * Array containing supported levels
87  */
88 const WORD32 gai4_ih264_levels[] =
89 {
90     IH264_LEVEL_10,
91     IH264_LEVEL_11,
92     IH264_LEVEL_12,
93     IH264_LEVEL_13,
94     IH264_LEVEL_20,
95     IH264_LEVEL_21,
96     IH264_LEVEL_22,
97     IH264_LEVEL_30,
98     IH264_LEVEL_31,
99     IH264_LEVEL_32,
100     IH264_LEVEL_40,
101     IH264_LEVEL_41,
102     IH264_LEVEL_42,
103     IH264_LEVEL_50,
104     IH264_LEVEL_51,
105 };
106 
107 
108 /**
109  * Array giving size of max luma samples in a picture for a given level
110  */
111 const WORD32 gai4_ih264_max_luma_pic_size[] =
112 {
113     /* Level 1 */
114     25344,
115     /* Level 1.1 */
116     101376,
117     /* Level 1.2 */
118     101376,
119     /* Level 1.3 */
120     101376,
121     /* Level 2 */
122     101376,
123     /* Level 2.1 */
124     202752,
125     /* Level 2.2 */
126     414720,
127     /* Level 3 */
128     414720,
129     /* Level 3.1 */
130     921600,
131     /* Level 3.2 */
132     1310720,
133     /* Level 4 */
134     2097152,
135     /* Level 4.1 */
136     2097152,
137     /* Level 4.2 */
138     2228224,
139     /* Level 5 */
140     5652480,
141     /* Level 5.1 */
142     9437184
143 };
144 
145 
146 /** Max width and height allowed for a given level */
147 /** This is derived as SQRT(8 * gai4_ih264_max_luma_pic_size[]) */
148 const WORD32 gai4_ih264_max_wd_ht[] =
149 {
150     /* Level 1 */
151     451,
152     /* Level 1.1 */
153     901,
154     /* Level 1.2 */
155     901,
156     /* Level 1.3 */
157     901,
158     /* Level 2 */
159     901,
160     /* Level 2.1 */
161     1274,
162     /* Level 2.2 */
163     1822,
164     /* Level 3 */
165     1822,
166     /* Level 3.1 */
167     2716,
168     /* Level 3.2 */
169     3239,
170     /* Level 4 */
171     4096,
172     /* Level 4.1 */
173     4096,
174     /* Level 4.2 */
175     4223,
176     /* Level 5 */
177     6725,
178     /* Level 5.1 */
179     8689
180 };
181 
182 /** Min width and height allowed for a given level */
183 /** This is derived as gai4_ih264_max_luma_pic_size[]/gai4_ih264_max_wd_ht[] */
184 const WORD32 gai4_ih264_min_wd_ht[] =
185 {
186     /* Level 1 */
187     57,
188     /* Level 1.1 */
189     113,
190     /* Level 1.2 */
191     113,
192     /* Level 1.3 */
193     113,
194     /* Level 2 */
195     113,
196     /* Level 2.1 */
197     160,
198     /* Level 2.2 */
199     228,
200     /* Level 3 */
201     228,
202     /* Level 3.1 */
203     340,
204     /* Level 3.2 */
205     405,
206     /* Level 4 */
207     512,
208     /* Level 4.1 */
209     512,
210     /* Level 4.2 */
211     528,
212     /* Level 5 */
213     841,
214     /* Level 5.1 */
215     1087
216 
217 };
218 
219 
220 /** Table 7-11 Macroblock types for I slices */
221 intra_mbtype_info_t gas_ih264_i_mbtype_info[] =
222 {
223     /* For first entry, if transform_size_8x8_flag is 1, mode will be MBPART_I8x8 */
224     /* This has to be taken care while accessing the table */
225     {0, MBPART_I4x4,   VERT_I16x16,     0,  0},
226     {0, MBPART_I16x16, VERT_I16x16,     0,  0},
227     {0, MBPART_I16x16, HORZ_I16x16,     0,  0},
228     {0, MBPART_I16x16, DC_I16x16,       0,  0},
229     {0, MBPART_I16x16, PLANE_I16x16,    0,  0},
230     {0, MBPART_I16x16, VERT_I16x16,     1,  0},
231     {0, MBPART_I16x16, HORZ_I16x16,     1,  0},
232     {0, MBPART_I16x16, DC_I16x16,       1,  0},
233     {0, MBPART_I16x16, PLANE_I16x16,    1,  0},
234     {0, MBPART_I16x16, VERT_I16x16,     2,  0},
235     {0, MBPART_I16x16, HORZ_I16x16,     2,  0},
236     {0, MBPART_I16x16, DC_I16x16,       2,  0},
237     {0, MBPART_I16x16, PLANE_I16x16,    2,  0},
238     {0, MBPART_I16x16, VERT_I16x16,     0,  15},
239     {0, MBPART_I16x16, HORZ_I16x16,     0,  15},
240     {0, MBPART_I16x16, DC_I16x16,       0,  15},
241     {0, MBPART_I16x16, PLANE_I16x16,    0,  15},
242     {0, MBPART_I16x16, VERT_I16x16,     1,  15},
243     {0, MBPART_I16x16, HORZ_I16x16,     1,  15},
244     {0, MBPART_I16x16, DC_I16x16,       1,  15},
245     {0, MBPART_I16x16, PLANE_I16x16,    1,  15},
246     {0, MBPART_I16x16, VERT_I16x16,     2,  15},
247     {0, MBPART_I16x16, HORZ_I16x16,     2,  15},
248     {0, MBPART_I16x16, DC_I16x16,       2,  15},
249     {0, MBPART_I16x16, PLANE_I16x16,    2,  15},
250     {0, MBPART_IPCM,   VERT_I16x16,     0,  0}
251 };
252 
253 /** Table 7-13 Macroblock types for P slices */
254 inter_mbtype_info_t gas_ih264_p_mbtype_info[] =
255 {
256     {1, MBPART_L0,  MBPART_NA,  16, 16},
257     {2, MBPART_L0,  MBPART_L0,  16, 8},
258     {2, MBPART_L0,  MBPART_L0,  8,  16},
259     {4, MBPART_NA,  MBPART_NA,  8,  8},
260     {4, MBPART_NA,  MBPART_NA,  8,  8},
261 };
262 
263 /** Table 7-14 Macroblock types for B slices */
264 inter_mbtype_info_t gas_ih264_b_mbtype_info[] =
265 {
266     {0, MBPART_DIRECT,  MBPART_NA,  8,  8,  },
267     {1, MBPART_L0,      MBPART_NA,  16, 16, },
268     {1, MBPART_L1,      MBPART_NA,  16, 16, },
269     {1, MBPART_BI,      MBPART_NA,  16, 16, },
270     {2, MBPART_L0,      MBPART_L0,  16, 8,  },
271     {2, MBPART_L0,      MBPART_L0,  8,  16, },
272     {2, MBPART_L1,      MBPART_L1,  16, 8,  },
273     {2, MBPART_L1,      MBPART_L1,  8,  16, },
274     {2, MBPART_L0,      MBPART_L1,  16, 8,  },
275     {2, MBPART_L0,      MBPART_L1,  8,  16, },
276     {2, MBPART_L1,      MBPART_L0,  16, 8,  },
277     {2, MBPART_L1,      MBPART_L0,  8,  16, },
278     {2, MBPART_L0,      MBPART_BI,  16, 8,  },
279     {2, MBPART_L0,      MBPART_BI,  8,  16, },
280     {2, MBPART_L1,      MBPART_BI,  16, 8,  },
281     {2, MBPART_L1,      MBPART_BI,  8,  16, },
282     {2, MBPART_BI,      MBPART_L0,  16, 8,  },
283     {2, MBPART_BI,      MBPART_L0,  8,  16, },
284     {2, MBPART_BI,      MBPART_L1,  16, 8,  },
285     {2, MBPART_BI,      MBPART_L1,  8,  16, },
286     {2, MBPART_BI,      MBPART_BI,  16, 8,  },
287     {2, MBPART_BI,      MBPART_BI,  8,  16, },
288     {4, MBPART_NA,      MBPART_NA,  8,  8,  },
289 };
290 
291 /** Table 7-17 � Sub-macroblock types in P macroblocks */
292 submbtype_info_t gas_ih264_p_submbtype_info[] =
293 {
294    {1, MBPART_L0, 8,  8},
295    {2, MBPART_L0, 8,  4},
296    {2, MBPART_L0, 4,  8},
297    {4, MBPART_L0, 4,  4},
298 };
299 
300 /** Table 7-18 � Sub-macroblock types in B macroblocks */
301 submbtype_info_t gas_ih264_b_submbtype_info[] =
302 {
303     {4, MBPART_DIRECT,  4,  4},
304     {1, MBPART_L0,      8,  8},
305     {1, MBPART_L1,      8,  8},
306     {1, MBPART_BI,      8,  8},
307     {2, MBPART_L0,      8,  4},
308     {2, MBPART_L0,      4,  8},
309     {2, MBPART_L1,      8,  4},
310     {2, MBPART_L1,      4,  8},
311     {2, MBPART_BI,      8,  4},
312     {2, MBPART_BI,      4,  8},
313     {4, MBPART_L0,      4,  4},
314     {4, MBPART_L1,      4,  4},
315     {4, MBPART_BI,      4,  4},
316 };
317 
318 
319 
320 
321 const UWORD8 gau1_ih264_inv_scan_prog4x4[] =
322 {
323     0,   1,  4,  8,
324     5,   2,  3,  6,
325     9,  12, 13, 10,
326     7,  11, 14, 15
327 };
328 
329 const UWORD8 gau1_ih264_inv_scan_int4x4[] =
330 {
331      0, 4,  1,  8,
332     12, 5,  9,  13,
333      2, 6, 10,  14,
334      3, 7, 11,  15
335 };
336 
337 /** Inverse scan tables for individual 4x4 blocks of 8x8 transform coeffs of CAVLC */
338 /* progressive */
339 const UWORD8 gau1_ih264_inv_scan_prog8x8_cavlc[64] =
340 {
341      0,  9, 17, 18, 12, 40, 27,  7,
342     35, 57, 29, 30, 58, 38, 53, 47,
343      1,  2, 24, 11, 19, 48, 20, 14,
344     42, 50, 22, 37, 59, 31, 60, 55,
345      8,  3, 32,  4, 26, 41, 13, 21,
346     49, 43, 15, 44, 52, 39, 61, 62,
347     16, 10, 25,  5, 33, 34,  6, 28,
348     56, 36, 23, 51, 45, 46, 54, 63
349 };
350 
351 /* interlace */
352 const UWORD8 gau1_ih264_inv_scan_int8x8_cavlc[64] =
353 {
354      0,  9,  2, 56, 18, 26, 34, 27,
355     35, 28, 36, 29, 45,  7, 54, 39,
356      8, 24, 25, 33, 41, 11, 42, 12,
357     43, 13, 44, 14, 53, 15, 62, 47,
358     16, 32, 40, 10, 49,  4, 50,  5,
359     51,  6, 52, 22, 61, 38, 23, 55,
360      1, 17, 48,  3, 57, 19, 58, 20,
361     59, 21, 60, 37, 30, 46, 31, 63
362 };
363 
364 
365 
366 /*Inverse scan tables for individual 8x8 blocks of 8x8 transform coeffs of CABAC */
367 /* progressive */
368 
369 const UWORD8 gau1_ih264_inv_scan_prog8x8_cabac[64] =
370 {
371      0,  1,  8, 16,  9, 2,   3, 10,
372     17, 24, 32, 25, 18, 11,  4,  5,
373     12, 19, 26, 33, 40, 48, 41, 34,
374     27, 20, 13,  6,  7, 14, 21, 28,
375     35, 42, 49, 56, 57, 50, 43, 36,
376     29, 22, 15, 23, 30, 37, 44, 51,
377     58, 59, 52, 45, 38, 31, 39, 46,
378     53, 60, 61, 54, 47, 55, 62, 63
379 };
380 
381 
382 /* interlace */
383 
384 const UWORD8 gau1_ih264_inv_scan_int8x8_cabac[64] =
385 {
386      0,  8, 16,  1,  9, 24, 32, 17,
387      2, 25, 40, 48, 56, 33, 10, 3,
388     18, 41, 49, 57, 26, 11,  4, 19,
389     34, 42, 50, 58, 27, 12,  5, 20,
390     35, 43, 51, 59, 28, 13,  6, 21,
391     36, 44, 52, 60, 29, 14, 22, 37,
392     45, 53, 61, 30,  7, 15, 38, 46,
393     54, 62, 23, 31, 39, 47, 55, 63
394 };
395 
396 
397 const UWORD8 *const gpau1_ih264_inv_scan8x8[] =
398 {
399      gau1_ih264_inv_scan_prog8x8_cavlc,
400      gau1_ih264_inv_scan_int8x8_cavlc,
401      gau1_ih264_inv_scan_prog8x8_cabac,
402      gau1_ih264_inv_scan_int8x8_cabac
403 };
404 
405 const UWORD8 *const gpau1_ih264_inv_scan4x4[] =
406 {
407      gau1_ih264_inv_scan_prog4x4,
408      gau1_ih264_inv_scan_int4x4,
409 };
410 
411 const UWORD8 gau1_ih264_8x8_subblk_idx[] =
412 {
413       0,    1,   4,  5,
414       2,    3,   6,  7,
415       8,    9,  12, 13,
416      10,   11,  14, 15
417 };
418 
419 
420 /* Table 8-15 Chroma QP offset table */
421 const UWORD8 gau1_ih264_chroma_qp[] =
422 {
423       0,  1,  2,  3,  4,  5,  6,  7,
424       8,  9, 10, 11, 12, 13, 14, 15,
425      16, 17, 18, 19, 20, 21, 22, 23,
426      24, 25, 26, 27, 28, 29, 29, 30,
427      31, 32, 32, 33, 34, 34, 35, 35,
428      36, 36, 37, 37, 37, 38, 38, 38,
429      39, 39, 39, 39
430 };
431 
432 
433 /**
434 ******************************************************************************
435 * @brief  look up table to compute neigbour availability of 4x4 blocks
436 * input  : subblk idx, mb neighbor availability
437 * output : sub blk neighbor availability
438 * @remarks
439 ******************************************************************************
440 */
441 const UWORD8 gau1_ih264_4x4_ngbr_avbl[16][16] =
442 {
443     {  0x0, 0x1, 0xc, 0x7, 0x1, 0x1, 0xf, 0x7, 0xc, 0xf, 0xc, 0x7, 0xf, 0x7, 0xf, 0x7 },
444     {  0x1, 0x1, 0xf, 0x7, 0x1, 0x1, 0xf, 0x7, 0xf, 0xf, 0xf, 0x7, 0xf, 0x7, 0xf, 0x7 },
445     {  0x2, 0x1, 0xc, 0x7, 0x1, 0x1, 0xf, 0x7, 0xc, 0xf, 0xc, 0x7, 0xf, 0x7, 0xf, 0x7 },
446     {  0x3, 0x1, 0xf, 0x7, 0x1, 0x1, 0xf, 0x7, 0xf, 0xf, 0xf, 0x7, 0xf, 0x7, 0xf, 0x7 },
447 
448     {  0xc, 0xf, 0xc, 0x7, 0xf, 0x7, 0xf, 0x7, 0xc, 0xf, 0xc, 0x7, 0xf, 0x7, 0xf, 0x7 },
449     {  0xd, 0xf, 0xf, 0x7, 0xf, 0x7, 0xf, 0x7, 0xf, 0xf, 0xf, 0x7, 0xf, 0x7, 0xf, 0x7 },
450     {  0xe, 0xf, 0xc, 0x7, 0xf, 0x7, 0xf, 0x7, 0xc, 0xf, 0xc, 0x7, 0xf, 0x7, 0xf, 0x7 },
451     {  0xf, 0xf, 0xf, 0x7, 0xf, 0x7, 0xf, 0x7, 0xf, 0xf, 0xf, 0x7, 0xf, 0x7, 0xf, 0x7 },
452 
453     {  0x0, 0x1, 0xc, 0x7, 0x1, 0x9, 0xf, 0x7, 0xc, 0xf, 0xc, 0x7, 0xf, 0x7, 0xf, 0x7 },
454     {  0x1, 0x1, 0xf, 0x7, 0x1, 0x9, 0xf, 0x7, 0xf, 0xf, 0xf, 0x7, 0xf, 0x7, 0xf, 0x7 },
455     {  0x2, 0x1, 0xc, 0x7, 0x1, 0x9, 0xf, 0x7, 0xc, 0xf, 0xc, 0x7, 0xf, 0x7, 0xf, 0x7 },
456     {  0x3, 0x1, 0xf, 0x7, 0x1, 0x9, 0xf, 0x7, 0xf, 0xf, 0xf, 0x7, 0xf, 0x7, 0xf, 0x7 },
457 
458     {  0xc, 0xf, 0xc, 0x7, 0xf, 0xf, 0xf, 0x7, 0xc, 0xf, 0xc, 0x7, 0xf, 0x7, 0xf, 0x7 },
459     {  0xd, 0xf, 0xf, 0x7, 0xf, 0xf, 0xf, 0x7, 0xf, 0xf, 0xf, 0x7, 0xf, 0x7, 0xf, 0x7 },
460     {  0xe, 0xf, 0xc, 0x7, 0xf, 0xf, 0xf, 0x7, 0xc, 0xf, 0xc, 0x7, 0xf, 0x7, 0xf, 0x7 },
461     {  0xf, 0xf, 0xf, 0x7, 0xf, 0xf, 0xf, 0x7, 0xf, 0xf, 0xf, 0x7, 0xf, 0x7, 0xf, 0x7 },
462 };
463 
464 
465 /**
466 ******************************************************************************
467 * @brief  look up table to compute neigbour availability of 8x8 blocks
468 * input  : subblk idx, mb neighbor availability
469 * output : sub blk neighbor availability
470 * @remarks
471 ******************************************************************************
472 */
473 const UWORD8 gau1_ih264_8x8_ngbr_avbl[16][4] =
474 {
475     {  0x0, 0x1, 0xc, 0x7 },
476     {  0x1, 0x1, 0xf, 0x7 },
477     {  0x2, 0x1, 0xc, 0x7 },
478     {  0x3, 0x1, 0xf, 0x7 },
479 
480     {  0xc, 0x7, 0xc, 0x7 },
481     {  0xd, 0x7, 0xf, 0x7 },
482     {  0xe, 0x7, 0xc, 0x7 },
483     {  0xf, 0x7, 0xf, 0x7 },
484 
485     {  0x0, 0x9, 0xc, 0x7 },
486     {  0x1, 0x9, 0xf, 0x7 },
487     {  0x2, 0x9, 0xc, 0x7 },
488     {  0x3, 0x9, 0xf, 0x7 },
489 
490     {  0xc, 0xf, 0xc, 0x7 },
491     {  0xd, 0xf, 0xf, 0x7 },
492     {  0xe, 0xf, 0xc, 0x7 },
493     {  0xf, 0xf, 0xf, 0x7 },
494 };
495 
496 /** Table 7-3 Default intra 4x4 scaling list */
497 const UWORD16 gau2_ih264_default_intra4x4_scaling_list[] =
498 {
499      6, 13, 13, 20,
500     20, 20, 28, 28,
501     28, 28, 32, 32,
502     32, 37, 37, 42
503 };
504 
505 /** Table 7-3 Default inter 4x4 scaling list */
506 const UWORD16 gau2_ih264_default_inter4x4_scaling_list[] =
507 {
508     10, 14, 14, 20,
509     20, 20, 24, 24,
510     24, 24, 27, 27,
511     27, 30, 30, 34
512 };
513 
514 /* Inverse scanned output of gau2_ih264_default_intra4x4_scaling_list */
515 const UWORD16 gau2_ih264_default_intra4x4_weight_scale[] =
516 {
517      6, 13, 20, 28,
518     13, 20, 28, 32,
519     20, 28, 32, 37,
520     28, 32, 37, 42
521 };
522 
523 /* Inverse scanned output of gau2_ih264_default_inter4x4_scaling_list */
524 const UWORD16 gau2_ih264_default_inter4x4_weight_scale[] =
525 {
526      10, 14, 20, 24,
527      14, 20, 24, 27,
528      20, 24, 27, 30,
529      24, 27, 30, 34
530 };
531 
532 /** Table 7-4 Default intra 8x8 scaling list */
533 const UWORD16 gau2_ih264_default_intra8x8_scaling_list[] =
534 {
535      6, 10, 10, 13, 11, 13, 16, 16,
536     16, 16, 18, 18, 18, 18, 18, 23,
537     23, 23, 23, 23, 23, 25, 25, 25,
538     25, 25, 25, 25, 27, 27, 27, 27,
539     27, 27, 27, 27, 29, 29, 29, 29,
540     29, 29, 29, 31, 31, 31, 31, 31,
541     31, 33, 33, 33, 33, 33, 36, 36,
542     36, 36, 38, 38, 38, 40, 40, 42
543 };
544 
545 /** Table 7-4 Default inter 8x8 scaling list */
546 const UWORD16 gau2_ih264_default_inter8x8_scaling_list[] =
547 {
548     9,  13, 13, 15, 13, 15, 17, 17,
549     17, 17, 19, 19, 19, 19, 19, 21,
550     21, 21, 21, 21, 21, 22, 22, 22,
551     22, 22, 22, 22, 24, 24, 24, 24,
552     24, 24, 24, 24, 25, 25, 25, 25,
553     25, 25, 25, 27, 27, 27, 27, 27,
554     27, 28, 28, 28, 28, 28, 30, 30,
555     30, 30, 32, 32, 32, 33, 33, 35
556 };
557 
558 /* Inverse scanned output of gau2_ih264_default_intra8x8_scaling_list */
559 const UWORD16 gau2_ih264_default_intra8x8_weight_scale[] =
560 {
561      6, 10, 13, 16, 18, 23, 25, 27,
562     10, 11, 16, 18, 23, 25, 27, 29,
563     13, 16, 18, 23, 25, 27, 29, 31,
564     16, 18, 23, 25, 27, 29, 31, 33,
565     18, 23, 25, 27, 29, 31, 33, 36,
566     23, 25, 27, 29, 31, 33, 36, 38,
567     25, 27, 29, 31, 33, 36, 38, 40,
568     27, 29, 31, 33, 36, 38, 40, 42
569 };
570 
571 /* Inverse scanned output of gau2_ih264_default_inter8x8_scaling_list */
572 const UWORD16 gau2_ih264_default_inter8x8_weight_scale[] =
573 {
574      9, 13, 15, 17, 19, 21, 22, 24,
575     13, 13, 17, 19, 21, 22, 24, 25,
576     15, 17, 19, 21, 22, 24, 25, 27,
577     17, 19, 21, 22, 24, 25, 27, 28,
578     19, 21, 22, 24, 25, 27, 28, 30,
579     21, 22, 24, 25, 27, 28, 30, 32,
580     22, 24, 25, 27, 28, 30, 32, 33,
581     24, 25, 27, 28, 30, 32, 33, 35
582 };
583 /* Eq 7-8 Flat scaling matrix for 4x4 */
584 const UWORD16 gau2_ih264_flat_4x4_weight_scale[] =
585 {
586     16, 16, 16, 16,
587     16, 16, 16, 16,
588     16, 16, 16, 16,
589     16, 16, 16, 16
590 };
591 
592 /* Eq 7-9 Flat scaling matrix for 8x8 */
593 const UWORD16 gau2_ih264_flat_8x8_weight_scale[] =
594 {
595     16, 16, 16, 16, 16, 16, 16, 16,
596     16, 16, 16, 16, 16, 16, 16, 16,
597     16, 16, 16, 16, 16, 16, 16, 16,
598     16, 16, 16, 16, 16, 16, 16, 16,
599     16, 16, 16, 16, 16, 16, 16, 16,
600     16, 16, 16, 16, 16, 16, 16, 16,
601     16, 16, 16, 16, 16, 16, 16, 16,
602     16, 16, 16, 16, 16, 16, 16, 16
603 };
604 
605 
606 /**
607  ******************************************************************************
608  * @brief  Scale Table for inverse quantizing 4x4 subblock. To inverse quantize
609  * a given 4x4 quantized block, the coefficient at index location (i,j) is scaled
610  * by one of the constants in this table and right shift the result by abs (4 -
611  * floor(qp/6)), here qp is the quantization parameter used to quantize the mb.
612  *
613  * input   : 16 * qp%6, index location (i,j)
614  * output  : scale constant.
615  *
616  * @remarks 16 constants for each index position of the subblock and 6 for each
617  * qp%6 in the range 0-5 inclusive.
618  ******************************************************************************
619  */
620 
621 const UWORD16 gau2_ih264_iquant_scale_matrix_4x4[96] =
622 {
623       10,  13,  10,  13,
624       13,  16,  13,  16,
625       10,  13,  10,  13,
626       13,  16,  13,  16,
627 
628       11,  14,  11,  14,
629       14,  18,  14,  18,
630       11,  14,  11,  14,
631       14,  18,  14,  18,
632 
633       13,  16,  13,  16,
634       16,  20,  16,  20,
635       13,  16,  13,  16,
636       16,  20,  16,  20,
637 
638       14,  18,  14,  18,
639       18,  23,  18,  23,
640       14,  18,  14,  18,
641       18,  23,  18,  23,
642 
643       16,  20,  16,  20,
644       20,  25,  20,  25,
645       16,  20,  16,  20,
646       20,  25,  20,  25,
647 
648       18,  23,  18,  23,
649       23,  29,  23,  29,
650       18,  23,  18,  23,
651       23,  29,  23,  29,
652 
653 };
654 
655 /**
656  ******************************************************************************
657  * @brief  Scale Table for inverse quantizing 8x8 subblock. To inverse quantize
658  * a given 8x8 quantized block, the coefficient at index location (i,j) is scaled
659  * by one of the constants in this table and right shift the result by abs (4 -
660  * floor(qp/6)), here qp is the quantization parameter used to quantize the mb.
661  *
662  * input   : qp%6, index location (i,j)
663  * output  : scale constant.
664  *
665  * @remarks 64 constants for each index position of the subblock and 6 for each
666  * qp%6 in the range 0-5 inclusive.
667  ******************************************************************************
668  */
669 const UWORD16 gau2_ih264_iquant_scale_matrix_8x8 [384] =
670 {
671       20,  19,  25,  19,  20,  19,  25,  19,
672       19,  18,  24,  18,  19,  18,  24,  18,
673       25,  24,  32,  24,  25,  24,  32,  24,
674       19,  18,  24,  18,  19,  18,  24,  18,
675       20,  19,  25,  19,  20,  19,  25,  19,
676       19,  18,  24,  18,  19,  18,  24,  18,
677       25,  24,  32,  24,  25,  24,  32,  24,
678       19,  18,  24,  18,  19,  18,  24,  18,
679 
680       22,  21,  28,  21,  22,  21,  28,  21,
681       21,  19,  26,  19,  21,  19,  26,  19,
682       28,  26,  35,  26,  28,  26,  35,  26,
683       21,  19,  26,  19,  21,  19,  26,  19,
684       22,  21,  28,  21,  22,  21,  28,  21,
685       21,  19,  26,  19,  21,  19,  26,  19,
686       28,  26,  35,  26,  28,  26,  35,  26,
687       21,  19,  26,  19,  21,  19,  26,  19,
688 
689       26,  24,  33,  24,  26,  24,  33,  24,
690       24,  23,  31,  23,  24,  23,  31,  23,
691       33,  31,  42,  31,  33,  31,  42,  31,
692       24,  23,  31,  23,  24,  23,  31,  23,
693       26,  24,  33,  24,  26,  24,  33,  24,
694       24,  23,  31,  23,  24,  23,  31,  23,
695       33,  31,  42,  31,  33,  31,  42,  31,
696       24,  23,  31,  23,  24,  23,  31,  23,
697 
698       28,  26,  35,  26,  28,  26,  35,  26,
699       26,  25,  33,  25,  26,  25,  33,  25,
700       35,  33,  45,  33,  35,  33,  45,  33,
701       26,  25,  33,  25,  26,  25,  33,  25,
702       28,  26,  35,  26,  28,  26,  35,  26,
703       26,  25,  33,  25,  26,  25,  33,  25,
704       35,  33,  45,  33,  35,  33,  45,  33,
705       26,  25,  33,  25,  26,  25,  33,  25,
706 
707       32,  30,  40,  30,  32,  30,  40,  30,
708       30,  28,  38,  28,  30,  28,  38,  28,
709       40,  38,  51,  38,  40,  38,  51,  38,
710       30,  28,  38,  28,  30,  28,  38,  28,
711       32,  30,  40,  30,  32,  30,  40,  30,
712       30,  28,  38,  28,  30,  28,  38,  28,
713       40,  38,  51,  38,  40,  38,  51,  38,
714       30,  28,  38,  28,  30,  28,  38,  28,
715 
716       36,  34,  46,  34,  36,  34,  46,  34,
717       34,  32,  43,  32,  34,  32,  43,  32,
718       46,  43,  58,  43,  46,  43,  58,  43,
719       34,  32,  43,  32,  34,  32,  43,  32,
720       36,  34,  46,  34,  36,  34,  46,  34,
721       34,  32,  43,  32,  34,  32,  43,  32,
722       46,  43,  58,  43,  46,  43,  58,  43,
723       34,  32,  43,  32,  34,  32,  43,  32,
724 
725 };
726