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  **************************************************************************
23  * \file ih264d_tables.c
24  *
25  * \brief
26  *    Defination of all tables used by h264 decoder
27  *
28  * \date
29  *    17/09/2004
30  *
31  * \author  MA
32  **************************************************************************
33  */
34 #include "ih264_typedefs.h"
35 #include "ih264_macros.h"
36 #include "ih264_platform_macros.h"
37 #include "ih264d_defs.h"
38 #include "ih264d_tables.h"
39 
40 const UWORD8 gau1_ih264d_qp_scale_cr[] =
41     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
42       12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
43       29, 30, 31, 32, 32, 33, 34, 34, 35, 35, 36, 36, 37, 37, 37, 38, 38, 38,
44       39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39 };
45 const UWORD8 gau1_ih264d_alpha_table[] =
46     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
47       0, 0, 0, 4, 4, 5, 6, 7, 8, 9, 10, 12, 13, 15, 17, 20, 22, 25, 28, 32, 36,
48       40, 45, 50, 56, 63, 71, 80, 90, 101, 113, 127, 144, 162, 182, 203, 226,
49       255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 };
50 const UWORD8 gau1_ih264d_beta_table[] =
51     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
52       0, 0, 0, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11,
53       11, 12, 12, 13, 13, 14, 14, 15, 15, 16, 16, 17, 17, 18, 18, 18, 18, 18,
54       18, 18, 18, 18, 18, 18, 18, 18, 18 };
55 
56 const UWORD8 gau1_ih264d_clip_table[][4] =
57     {
58           { 0, 0, 0, 0 },
59           { 0, 0, 0, 0 },
60           { 0, 0, 0, 0 },
61           { 0, 0, 0, 0 },
62           { 0, 0, 0, 0 },
63           { 0, 0, 0, 0 },
64           { 0, 0, 0, 0 },
65           { 0, 0, 0, 0 },
66           { 0, 0, 0, 0 },
67           { 0, 0, 0, 0 },
68           { 0, 0, 0, 0 },
69           { 0, 0, 0, 0 },
70 
71           { 0, 0, 0, 0 },
72           { 0, 0, 0, 0 },
73           { 0, 0, 0, 0 },
74           { 0, 0, 0, 0 },
75           { 0, 0, 0, 0 },
76           { 0, 0, 0, 0 },
77           { 0, 0, 0, 0 },
78           { 0, 0, 0, 0 },
79           { 0, 0, 0, 0 },
80           { 0, 0, 0, 0 },
81           { 0, 0, 0, 0 },
82           { 0, 0, 0, 0 },
83           { 0, 0, 0, 0 },
84           { 0, 0, 0, 0 },
85           { 0, 0, 0, 0 },
86           { 0, 0, 0, 0 },
87           { 0, 0, 0, 0 },
88           { 0, 0, 0, 1 },
89           { 0, 0, 0, 1 },
90           { 0, 0, 0, 1 },
91           { 0, 0, 0, 1 },
92           { 0, 0, 1, 1 },
93           { 0, 0, 1, 1 },
94           { 0, 1, 1, 1 },
95           { 0, 1, 1, 1 },
96           { 0, 1, 1, 1 },
97           { 0, 1, 1, 1 },
98           { 0, 1, 1, 2 },
99           { 0, 1, 1, 2 },
100           { 0, 1, 1, 2 },
101           { 0, 1, 1, 2 },
102           { 0, 1, 2, 3 },
103           { 0, 1, 2, 3 },
104           { 0, 2, 2, 3 },
105           { 0, 2, 2, 4 },
106           { 0, 2, 3, 4 },
107           { 0, 2, 3, 4 },
108           { 0, 3, 3, 5 },
109           { 0, 3, 4, 6 },
110           { 0, 3, 4, 6 },
111           { 0, 4, 5, 7 },
112           { 0, 4, 5, 8 },
113           { 0, 4, 6, 9 },
114           { 0, 5, 7, 10 },
115           { 0, 6, 8, 11 },
116           { 0, 6, 8, 13 },
117           { 0, 7, 10, 14 },
118           { 0, 8, 11, 16 },
119           { 0, 9, 12, 18 },
120           { 0, 10, 13, 20 },
121           { 0, 11, 15, 23 },
122           { 0, 13, 17, 25 },
123 
124           { 0, 13, 17, 25 },
125           { 0, 13, 17, 25 },
126           { 0, 13, 17, 25 },
127           { 0, 13, 17, 25 },
128           { 0, 13, 17, 25 },
129           { 0, 13, 17, 25 },
130           { 0, 13, 17, 25 },
131           { 0, 13, 17, 25 },
132           { 0, 13, 17, 25 },
133           { 0, 13, 17, 25 },
134           { 0, 13, 17, 25 },
135           { 0, 13, 17, 25 },
136           { 0, 13, 17, 25 },
137           { 0, 13, 17, 25 },
138           { 0, 13, 17, 25 },
139           { 0, 13, 17, 25 },
140           { 0, 13, 17, 25 },
141           { 0, 13, 17, 25 },
142           { 0, 13, 17, 25 },
143           { 0, 13, 17, 25 },
144           { 0, 13, 17, 25 },
145           { 0, 13, 17, 25 },
146           { 0, 13, 17, 25 },
147           { 0, 13, 17, 25 }
148 
149     };
150 const UWORD8 gau1_ih264d_clip_table_deblock[] =
151     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
152       12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
153       30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
154       48, 49, 50, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51 };
155 
156 /****************DEBLOCKING TABLES ENDS*******************/
157 
158 /*************************************************************/
159 /* BS CALCULATION TABLES                                     */
160 /*************************************************************/
161 UWORD32 const gau4_ih264d_packed_bs2[32] =
162     {
163     /*************************************************************/
164     /* BS TABLES FOR NORMAL EDGES                                */
165     /*************************************************************/
166     0x00000000,
167       0x02000000, 0x00020000, 0x02020000, 0x00000200, 0x02000200, 0x00020200,
168       0x02020200, 0x00000002, 0x02000002, 0x00020002, 0x02020002, 0x00000202,
169       0x02000202, 0x00020202, 0x02020202,
170 
171       /*************************************************************/
172       /* BS TABLES FOR XTRA LEFT MB EDGES IN MBAFF CASE            */
173       /*************************************************************/
174       0x01010101,
175       0x02010101, 0x01020101, 0x02020101, 0x01010201, 0x02010201, 0x01020201,
176       0x02020201, 0x01010102, 0x02010102, 0x01020102, 0x02020102, 0x01010202,
177       0x02010202, 0x01020202, 0x02020202, };
178 
179 UWORD16 const gau2_ih264d_4x4_v2h_reorder[16] =
180     { 0x0000, 0x0001, 0x0010, 0x0011, 0x0100, 0x0101, 0x0110, 0x0111, 0x1000,
181       0x1001, 0x1010, 0x1011, 0x1100, 0x1101, 0x1110, 0x1111 };
182 
183 /****************SCALING TABLES STARTS *****************/
184 const WORD16 gai2_ih264d_default_intra4x4[16] =
185     { 6, 13, 13, 20, 20, 20, 28, 28, 28, 28, 32, 32, 32, 37, 37, 42 };
186 
187 const WORD16 gai2_ih264d_default_inter4x4[16] =
188     { 10, 14, 14, 20, 20, 20, 24, 24, 24, 24, 27, 27, 27, 30, 30, 34 };
189 
190 const WORD16 gai2_ih264d_default_intra8x8[64] =
191     { 6, 10, 10, 13, 11, 13, 16, 16, 16, 16, 18, 18, 18, 18, 18, 23, 23, 23, 23,
192       23, 23, 25, 25, 25, 25, 25, 25, 25, 27, 27, 27, 27, 27, 27, 27, 27, 29,
193       29, 29, 29, 29, 29, 29, 31, 31, 31, 31, 31, 31, 33, 33, 33, 33, 33, 36,
194       36, 36, 36, 38, 38, 38, 40, 40, 42 };
195 
196 const WORD16 gai2_ih264d_default_inter8x8[64] =
197     { 9, 13, 13, 15, 13, 15, 17, 17, 17, 17, 19, 19, 19, 19, 19, 21, 21, 21, 21,
198       21, 21, 22, 22, 22, 22, 22, 22, 22, 24, 24, 24, 24, 24, 24, 24, 24, 25,
199       25, 25, 25, 25, 25, 25, 27, 27, 27, 27, 27, 27, 28, 28, 28, 28, 28, 30,
200       30, 30, 30, 32, 32, 32, 33, 33, 35 };
201 
202 const WORD16 gai2_ih264d_flat_4x4[16] =
203     { 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16 };
204 
205 const WORD16 gai2_ih264d_flat_8x8[64] =
206     { 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
207       16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
208       16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
209       16, 16, 16, 16, 16, 16, 16, 16, 16, 16 };
210 
211 /****************SCALING TABLES ENDS *****************/
212 
213 /*Inverse scan tables for individual 4x4 blocks of 8x8 transform coeffs of CAVLC */
214 
215 /* progressive */
216 
217 const UWORD8 gau1_ih264d_inv_scan_prog8x8_cavlc[4][16] =
218     {
219         { 0, 9, 17, 18, 12, 40, 27, 7, 35, 57, 29, 30, 58, 38, 53, 47 }, /* for First subblock  */
220           { 1, 2, 24, 11, 19, 48, 20, 14, 42, 50, 22, 37, 59, 31, 60, 55 }, /* for second subblock */
221           { 8, 3, 32, 4, 26, 41, 13, 21, 49, 43, 15, 44, 52, 39, 61, 62 }, /* for third subblock  */
222           { 16, 10, 25, 5, 33, 34, 6, 28, 56, 36, 23, 51, 45, 46, 54, 63 } /* for fourth subblock */
223     };
224 
225 const UWORD8 gau1_ih264d_inv_scan_int8x8_cavlc[4][16] =
226     {
227         { 0, 9, 2, 56, 18, 26, 34, 27, 35, 28, 36, 29, 45, 7, 54, 39 }, /* for First subblock  */
228           { 8, 24, 25, 33, 41, 11, 42, 12, 43, 13, 44, 14, 53, 15, 62, 47 }, /* for second subblock */
229           { 16, 32, 40, 10, 49, 4, 50, 5, 51, 6, 52, 22, 61, 38, 23, 55 }, /* for third subblock  */
230           { 1, 17, 48, 3, 57, 19, 58, 20, 59, 21, 60, 37, 30, 46, 31, 63 } /* for fourth subblock */
231     };
232 
233 /*Inverse scan tables for individual 8x8 blocks of 8x8 transform coeffs of CABAC */
234 /* progressive */
235 
236 const UWORD8 gau1_ih264d_inv_scan_prog8x8_cabac[64] =
237     { 0, 1, 8, 16, 9, 2, 3, 10, 17, 24, 32, 25, 18, 11, 4, 5, 12, 19, 26, 33,
238       40, 48, 41, 34, 27, 20, 13, 6, 7, 14, 21, 28, 35, 42, 49, 56, 57, 50, 43,
239       36, 29, 22, 15, 23, 30, 37, 44, 51, 58, 59, 52, 45, 38, 31, 39, 46, 53,
240       60, 61, 54, 47, 55, 62, 63 };
241 
242 /* interlace */
243 
244 const UWORD8 gau1_ih264d_inv_scan_int8x8_cabac[64] =
245     { 0, 8, 16, 1, 9, 24, 32, 17, 2, 25, 40, 48, 56, 33, 10, 3, 18, 41, 49, 57,
246       26, 11, 4, 19, 34, 42, 50, 58, 27, 12, 5, 20, 35, 43, 51, 59, 28, 13, 6,
247       21, 36, 44, 52, 60, 29, 14, 22, 37, 45, 53, 61, 30, 7, 15, 38, 46, 54, 62,
248       23, 31, 39, 47, 55, 63 };
249 
250 /****************PARSING TABLES *******************/
251 UWORD8 const gau1_ih264d_subblk_offset[16] =
252     { 8, 9, 12, 13, 10, 11, 14, 15, 16, 17, 20, 21, 18, 19, 22, 23 };
253 
254 const UWORD8 gau1_ih264d_cbp_tab[6] =
255     { 0, 16, 32, 15, 31, 47 };
256 
257 /** gives CBP value from codeword number, both for intra and inter */
258 
259 const UWORD8 gau1_ih264d_cbp_table[48][2] =
260     {
261         { 47, 0 },
262           { 31, 16 },
263           { 15, 1 },
264           { 0, 2 },
265           { 23, 4 },
266           { 27, 8 },
267           { 29, 32 },
268           { 30, 3 },
269           { 7, 5 },
270           { 11, 10 },
271           { 13, 12 },
272           { 14, 15 },
273           { 39, 47 },
274           { 43, 7 },
275           { 45, 11 },
276           { 46, 13 },
277           { 16, 14 },
278           { 3, 6 },
279           { 5, 9 },
280           { 10, 31 },
281           { 12, 35 },
282           { 19, 37 },
283           { 21, 42 },
284           { 26, 44 },
285           { 28, 33 },
286           { 35, 34 },
287           { 37, 36 },
288           { 42, 40 },
289           { 44, 39 },
290           { 1, 43 },
291           { 2, 45 },
292           { 4, 46 },
293           { 8, 17 },
294           { 17, 18 },
295           { 18, 20 },
296           { 20, 24 },
297           { 24, 19 },
298           { 6, 21 },
299           { 9, 26 },
300           { 22, 28 },
301           { 25, 23 },
302           { 32, 27 },
303           { 33, 29 },
304           { 34, 30 },
305           { 36, 22 },
306           { 40, 25 },
307           { 38, 38 },
308           { 41, 41 }, };
309 /****************PARSING TABLES ENDS *******************/
310 
311 /****************DECODE SLICE TABLES STARTS *******************/
312 /*Definition of Tables needed by functions of this file */
313 const UWORD8 gau1_ih264d_inv_scan[16] =
314     { 0, 1, 4, 8, 5, 2, 3, 6, 9, 12, 13, 10, 7, 11, 14, 15 };
315 
316 const UWORD8 gau1_ih264d_inv_scan_fld[16] =
317     { 0, 4, 1, 8, 12, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15 };
318 
319 const UWORD8 gau1_ih264d_dequant_matrix[6][16] =
320 {
321     {   10, 13, 10, 13, 13, 16, 13, 16, 10, 13, 10 ,13, 13, 16, 13, 16},
322     {   11, 14, 11, 14, 14, 18, 14, 18, 11, 14, 11 ,14, 14, 18, 14, 18},
323     {   13, 16, 13, 16, 16, 20, 16, 20, 13, 16, 13 ,16, 16, 20, 16, 20},
324     {   14, 18, 14, 18, 18, 23, 18, 23, 14, 18, 14, 18, 18, 23, 18, 23},
325     {   16, 20, 16, 20, 20, 25, 20, 25, 16, 20, 16, 20, 20, 25, 20, 25},
326     {   18, 23, 18, 23, 23, 29, 23, 29, 18, 23, 18, 23, 23, 29, 23, 29}
327 };
328 
329 const UWORD16 gau2_ih264_iquant_scale_4x4[6][16] =
330     {
331         { 10, 13, 10, 13, 13, 16, 13, 16, 10, 13, 10, 13, 13, 16, 13, 16 },
332           { 11, 14, 11, 14, 14, 18, 14, 18, 11, 14, 11, 14, 14, 18, 14, 18 },
333           { 13, 16, 13, 16, 16, 20, 16, 20, 13, 16, 13, 16, 16, 20, 16, 20 },
334           { 14, 18, 14, 18, 18, 23, 18, 23, 14, 18, 14, 18, 18, 23, 18, 23 },
335           { 16, 20, 16, 20, 20, 25, 20, 25, 16, 20, 16, 20, 20, 25, 20, 25 },
336           { 18, 23, 18, 23, 23, 29, 23, 29, 18, 23, 18, 23, 23, 29, 23, 29 } };
337 
338 const UWORD8 gau1_ih264d_dequant8x8_zigzag_cavlc[4][6][16] =
339                     {
340                         {
341                             { 20, 18, 24, 32, 19, 19, 18, 19, 19, 18, 18, 24,
342                               24, 25, 24, 18 }, /* for First subblock  */
343                               { 22, 19, 26, 35, 21, 21, 19, 21, 21, 19, 19, 26,
344                                 26, 28, 26, 19 },
345                               { 26, 23, 31, 42, 24, 24, 23, 24, 24, 23, 23, 31,
346                                 31, 33, 31, 23 },
347                               { 28, 25, 33, 45, 26, 26, 25, 26, 26, 25, 25, 33,
348                                 33, 35, 33, 25 },
349                               { 32, 28, 38, 51, 30, 30, 28, 30, 30, 28, 28, 38,
350                                 38, 40, 38, 28 },
351                               { 36, 32, 43, 58, 34, 34, 32, 34, 34, 32, 32, 43,
352                                 43, 46, 43, 32 } },
353                           {
354                               { 19, 25, 19, 18, 24, 25, 25, 24, 24, 32, 32, 19,
355                                 18, 18, 19, 24 }, /* for second subblock */
356                                 { 21, 28, 21, 19, 26, 28, 28, 26, 26, 35, 35,
357                                   21, 19, 19, 21, 26 },
358                                 { 24, 33, 24, 23, 31, 33, 33, 31, 31, 42, 42,
359                                   24, 23, 23, 24, 31 },
360                                 { 26, 35, 26, 25, 33, 35, 35, 33, 33, 45, 45,
361                                   26, 25, 25, 26, 33 },
362                                 { 30, 40, 30, 28, 38, 40, 40, 38, 38, 51, 51,
363                                   30, 28, 28, 30, 38 },
364                                 { 34, 46, 34, 32, 43, 46, 46, 43, 43, 58, 58,
365                                   34, 32, 32, 34, 43 } },
366                           {
367                               { 19, 19, 20, 20, 24, 18, 18, 24, 24, 18, 18, 19,
368                                 25, 19, 18, 24 }, /* for third subblock  */
369                                 { 21, 21, 22, 22, 26, 19, 19, 26, 26, 19, 19,
370                                   21, 28, 21, 19, 26 },
371                                 { 24, 24, 26, 26, 31, 23, 23, 31, 31, 23, 23,
372                                   24, 33, 24, 23, 31 },
373                                 { 26, 26, 28, 28, 33, 25, 25, 33, 33, 25, 25,
374                                   26, 35, 26, 25, 33 },
375                                 { 30, 30, 32, 32, 38, 28, 28, 38, 38, 28, 28,
376                                   30, 40, 30, 28, 38 },
377                                 { 34, 34, 36, 36, 43, 32, 32, 43, 43, 32, 32,
378                                   34, 46, 34, 32, 43 } },
379                           {
380                               { 25, 24, 18, 19, 19, 25, 25, 19, 19, 20, 24, 24,
381                                 18, 24, 32, 18 }, /* for fourth subblock */
382                                 { 28, 26, 19, 21, 21, 28, 28, 21, 21, 22, 26,
383                                   26, 19, 26, 35, 19 },
384                                 { 33, 31, 23, 24, 24, 33, 33, 24, 24, 26, 31,
385                                   31, 23, 31, 42, 23 },
386                                 { 35, 33, 25, 26, 26, 35, 35, 26, 26, 28, 33,
387                                   33, 25, 33, 45, 25 },
388                                 { 40, 38, 28, 30, 30, 40, 40, 30, 30, 32, 38,
389                                   38, 28, 38, 51, 28 },
390                                 { 46, 43, 32, 34, 34, 46, 46, 34, 34, 36, 43,
391                                   43, 32, 43, 58, 32 } }
392 
393                     };
394 
395 const UWORD16 gau1_ih264d_dequant8x8_cavlc[6][64] =
396                     {
397                         { 20, 19, 25, 19, 20, 19, 25, 19, 19, 18, 24, 18, 19,
398                           18, 24, 18, 25, 24, 32, 24, 25, 24, 32, 24, 19, 18,
399                           24, 18, 19, 18, 24, 18, 20, 19, 25, 19, 20, 19, 25,
400                           19, 19, 18, 24, 18, 19, 18, 24, 18, 25, 24, 32, 24,
401                           25, 24, 32, 24, 19, 18, 24, 18, 19, 18, 24, 18 },
402                           { 22, 21, 28, 21, 22, 21, 28, 21, 21, 19, 26, 19, 21,
403                             19, 26, 19, 28, 26, 35, 26, 28, 26, 35, 26, 21, 19,
404                             26, 19, 21, 19, 26, 19, 22, 21, 28, 21, 22, 21, 28,
405                             21, 21, 19, 26, 19, 21, 19, 26, 19, 28, 26, 35, 26,
406                             28, 26, 35, 26, 21, 19, 26, 19, 21, 19, 26, 19 },
407                           { 26, 24, 33, 24, 26, 24, 33, 24, 24, 23, 31, 23, 24,
408                             23, 31, 23, 33, 31, 42, 31, 33, 31, 42, 31, 24, 23,
409                             31, 23, 24, 23, 31, 23, 26, 24, 33, 24, 26, 24, 33,
410                             24, 24, 23, 31, 23, 24, 23, 31, 23, 33, 31, 42, 31,
411                             33, 31, 42, 31, 24, 23, 31, 23, 24, 23, 31, 23 },
412                           { 28, 26, 35, 26, 28, 26, 35, 26, 26, 25, 33, 25, 26,
413                             25, 33, 25, 35, 33, 45, 33, 35, 33, 45, 33, 26, 25,
414                             33, 25, 26, 25, 33, 25, 28, 26, 35, 26, 28, 26, 35,
415                             26, 26, 25, 33, 25, 26, 25, 33, 25, 35, 33, 45, 33,
416                             35, 33, 45, 33, 26, 25, 33, 25, 26, 25, 33, 25 },
417                           { 32, 30, 40, 30, 32, 30, 40, 30, 30, 28, 38, 28, 30,
418                             28, 38, 28, 40, 38, 51, 38, 40, 38, 51, 38, 30, 28,
419                             38, 28, 30, 28, 38, 28, 32, 30, 40, 30, 32, 30, 40,
420                             30, 30, 28, 38, 28, 30, 28, 38, 28, 40, 38, 51, 38,
421                             40, 38, 51, 38, 30, 28, 38, 28, 30, 28, 38, 28 },
422                           { 36, 34, 46, 34, 36, 34, 46, 34, 34, 32, 43, 32, 34,
423                             32, 43, 32, 46, 43, 58, 43, 46, 43, 58, 43, 34, 32,
424                             43, 32, 34, 32, 43, 32, 36, 34, 46, 34, 36, 34, 46,
425                             34, 34, 32, 43, 32, 34, 32, 43, 32, 46, 43, 58, 43,
426                             46, 43, 58, 43, 34, 32, 43, 32, 34, 32, 43, 32 }, };
427 
428 /****************DECODE SLICE TABLES ENDS *******************/
429 
430 /****************MOTION VECTOR DECODING TABLES STARTS *******************/
431 
432 /**
433  **************************************************************************
434  *   \brief   This array is used to evaluate the condition when only one of
435  *   predictor subMbs has a reference frame equal to that of E subMb.
436  **************************************************************************
437  */
438 
439 const WORD8 gau1_ih264d_mv_pred_condition[] =
440     { -1, 0, 1, -1, 2, -1, -1, -1 };
441 
442 /** Number of subMbs for the 8x8 prediction mode */
443 const UWORD8 gau1_ih264d_num_submb_part[] =
444     { 1, 2, 2, 4 };
445 
446 /** Width of the 8x8 prediction mode in terms of subMbs */
447 const UWORD8 gau1_ih264d_submb_partw[] =
448     { 2, 2, 1, 1 };
449 
450 /** Height of the 8x8 prediction mode in terms of subMbs */
451 const UWORD8 gau1_ih264d_submb_parth[] =
452     { 2, 1, 2, 1 };
453 
454 /** Number of MB partitions for the MB prediction mode */
455 const UWORD8 gau1_ih264d_num_mb_part[] =
456     { 1, 2, 2, 4 };
457 
458 /** Width of the MB partition in terms of subMbs */
459 const UWORD8 gau1_ih264d_mb_partw[] =
460     { 4, 4, 2, 2, 2 };
461 
462 /** Height of the MB partition in terms of subMbs */
463 const UWORD8 gau1_ih264d_mb_parth[] =
464     { 4, 2, 4, 2, 2 };
465 
466 /** MB partition information is packed into a UWORD32 {0,number,width,height} */
467 const UWORD32 gau4_ih264d_submb_part[] =
468     { 0x00010202, 0x00020201, 0x00020102, 0x00040101 };
469 
470 const UWORD8 gau1_ih264d_submb_indx_mod[] =
471     { 0, 0, /* 16x16 */
472       0, 8, /* 16x8 */
473       0, 2, /* 8x16 */
474       0, 0, /* 8x8 */
475       0, 4, /* 8x4 */
476       0, 1, /* 4x8 */
477       0, 1, 3, 1 /* 4x4 */
478     };
479 
480 /** This table is used to assign CBPs to Inter MBs. */
481 const UWORD8 gau1_ih264d_cbp_inter[] =
482     { 0, 16, 1, 2, 4, 8, 32, 3, 5, 10, 12, 15, 47, 7, 11, 13, 14, 6, 9, 31, 35,
483       37, 42, 44, 33, 34, 36, 40, 39, 43, 45, 46, 17, 18, 20, 24, 19, 21, 26,
484       28, 23, 27, 29, 30, 22, 25, 38, 41 };
485 
486 /** Motion comp modes for P followed by B,
487  0 to 4   : P Mbs
488  5 to 27  : B Mbs
489  28 to 30 : DIRECT */
490 const UWORD8 gau1_ih264d_mb_mc_mode[] =
491     {
492     PRED_16x16,
493       PRED_16x8, PRED_8x16, PRED_8x8, PRED_8x8R0,
494       PRED_16x16,
495       PRED_16x16, PRED_16x16, PRED_16x16, PRED_16x8, PRED_8x16,
496       PRED_16x8,
497       PRED_8x16, PRED_16x8, PRED_8x16, PRED_16x8, PRED_8x16,
498       PRED_16x8,
499       PRED_8x16, PRED_16x8, PRED_8x16, PRED_16x8, PRED_8x16,
500       PRED_16x8,
501       PRED_8x16, PRED_16x8, PRED_8x16, PRED_8x8,
502       /* Self defined modes for B_SKIP and DIRECT16x16 */
503       PRED_8x8,
504       PRED_8x8, PRED_8x8 };
505 
506 const UWORD8 gau1_ih264d_submb_mc_mode[] =
507     { SUBMB_8x8, SUBMB_8x4, SUBMB_4x8, SUBMB_4x4,
508     SUBMB_8x8,
509       SUBMB_8x8, SUBMB_8x8, SUBMB_8x8, SUBMB_8x4, SUBMB_4x8,
510       SUBMB_8x4,
511       SUBMB_4x8, SUBMB_8x4, SUBMB_4x8, SUBMB_4x4, SUBMB_4x4, SUBMB_4x4,
512       /* Self defined modes B DIRECT8x8 */
513       SUBMB_4x4,
514       SUBMB_4x4, SUBMB_4x4 };
515 
516 /** Sub MB pred modes for B slice */
517 const UWORD8 gau1_ih264d_submb_pred_modes[] =
518     {
519     PRED_L0,
520       PRED_L0, PRED_L0, PRED_L0,
521       B_DIRECT,
522       PRED_L0, PRED_L1, BI_PRED, PRED_L0, PRED_L0, PRED_L1,
523       PRED_L1,
524       BI_PRED, BI_PRED, PRED_L0, PRED_L1, BI_PRED,
525       /* Self defined modes for B DIRECT8x8 */
526       BI_PRED,
527       PRED_L0, PRED_L1, };
528 
529 /** MB pred modes for P and B slice */
530 const WORD8 gau1_ih264d_mb_pred_modes[2][32] =
531     {
532         { PRED_L0, PRED_L0, PRED_L0, PRED_INVALID, PRED_INVALID,
533         B_DIRECT,
534           PRED_L0, PRED_L1, BI_PRED, PRED_L0, PRED_L0, PRED_L1, PRED_L1,
535           PRED_L0,
536           PRED_L0, PRED_L1, PRED_L1, PRED_L0, PRED_L0, PRED_L1, PRED_L1,
537           BI_PRED,
538           BI_PRED, BI_PRED, BI_PRED, BI_PRED, BI_PRED, PRED_INVALID,
539           /* Self defined modes for B_SKIP and DIRECT16x16 */
540           BI_PRED,
541           PRED_L0, PRED_L1, },
542           { PRED_INVALID, PRED_L0, PRED_L0, PRED_INVALID, PRED_INVALID,
543           PRED_INVALID,
544             PRED_INVALID, PRED_INVALID, PRED_INVALID, PRED_L0, PRED_L0,
545             PRED_L1,
546             PRED_L1, PRED_L1, PRED_L1, PRED_L0, PRED_L0, BI_PRED, BI_PRED,
547             BI_PRED,
548             BI_PRED, PRED_L0, PRED_L0, PRED_L1, PRED_L1, BI_PRED, BI_PRED,
549             PRED_INVALID,
550             /* Self defined modes for B_SKIP and DIRECT16x16 */
551             PRED_INVALID,
552             PRED_INVALID, PRED_INVALID } };
553 
554 /****************MOTION VECTOR DECODING TABLES ENDS *******************/
555 
556 /****************CAVLC DECODING TABLES STARTS *******************/
557 
558 /*****************************************************************************/
559 /* 6 Bit table look for total zeros (totalcoeff = 2to10) as in Table 9.7     */
560 /* of H264 standard. In each table entry, lower 4 bits represent total zeros */
561 /* decoded while upper 4 bit represent the bits to be flushed from ps_bitstrm    */
562 /*****************************************************************************/
563 const UWORD8 gau1_ih264d_table_total_zero_2to10[9][64] =
564     {
565     /* For total coeff = 2 */
566         { 0x6E, 0x6D, 0x6C, 0x6B, 0x5A, 0x5A, 0x59, 0x59, 0x48, 0x48, 0x48,
567           0x48, 0x47, 0x47, 0x47, 0x47, 0x46, 0x46, 0x46, 0x46, 0x45, 0x45,
568           0x45, 0x45, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x33,
569           0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x32, 0x32, 0x32, 0x32,
570           0x32, 0x32, 0x32, 0x32, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31,
571           0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, },
572 
573       /* For total coeff = 3 */
574           { 0x6D, 0x6B, 0x5C, 0x5C, 0x5A, 0x5A, 0x59, 0x59, 0x48, 0x48, 0x48,
575             0x48, 0x45, 0x45, 0x45, 0x45, 0x44, 0x44, 0x44, 0x44, 0x40, 0x40,
576             0x40, 0x40, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x36,
577             0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x33, 0x33, 0x33, 0x33,
578             0x33, 0x33, 0x33, 0x33, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32,
579             0x32, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, },
580 
581       /* For total coeff = 4 */
582           { 0x5C, 0x5C, 0x5B, 0x5B, 0x5A, 0x5A, 0x50, 0x50, 0x49, 0x49, 0x49,
583             0x49, 0x47, 0x47, 0x47, 0x47, 0x43, 0x43, 0x43, 0x43, 0x42, 0x42,
584             0x42, 0x42, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x36,
585             0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x35, 0x35, 0x35, 0x35,
586             0x35, 0x35, 0x35, 0x35, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34,
587             0x34, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, },
588 
589       /* For total coeff = 5 */
590           { 0x5B, 0x5B, 0x59, 0x59, 0x4A, 0x4A, 0x4A, 0x4A, 0x48, 0x48, 0x48,
591             0x48, 0x42, 0x42, 0x42, 0x42, 0x41, 0x41, 0x41, 0x41, 0x40, 0x40,
592             0x40, 0x40, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x36,
593             0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x35, 0x35, 0x35, 0x35,
594             0x35, 0x35, 0x35, 0x35, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34,
595             0x34, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, },
596 
597       /* For total coeff = 6 */
598           { 0x6A, 0x60, 0x51, 0x51, 0x48, 0x48, 0x48, 0x48, 0x39, 0x39, 0x39,
599             0x39, 0x39, 0x39, 0x39, 0x39, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37,
600             0x37, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x35,
601             0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x34, 0x34, 0x34, 0x34,
602             0x34, 0x34, 0x34, 0x34, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
603             0x33, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, },
604 
605       /* For total coeff = 7 */
606           { 0x69, 0x60, 0x51, 0x51, 0x47, 0x47, 0x47, 0x47, 0x38, 0x38, 0x38,
607             0x38, 0x38, 0x38, 0x38, 0x38, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
608             0x36, 0x36, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x33,
609             0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x32, 0x32, 0x32, 0x32,
610             0x32, 0x32, 0x32, 0x32, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25,
611             0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, },
612 
613       /* For total coeff = 8 */
614           { 0x68, 0x60, 0x52, 0x52, 0x41, 0x41, 0x41, 0x41, 0x37, 0x37, 0x37,
615             0x37, 0x37, 0x37, 0x37, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
616             0x36, 0x36, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x25,
617             0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25,
618             0x25, 0x25, 0x25, 0x25, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
619             0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, },
620 
621       /* For total coeff = 9 */
622           { 0x61, 0x60, 0x57, 0x57, 0x42, 0x42, 0x42, 0x42, 0x35, 0x35, 0x35,
623             0x35, 0x35, 0x35, 0x35, 0x35, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26,
624             0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x24,
625             0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
626             0x24, 0x24, 0x24, 0x24, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23,
627             0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, },
628 
629       /* For total coeff = 10 */
630           { 0x51, 0x51, 0x50, 0x50, 0x46, 0x46, 0x46, 0x46, 0x32, 0x32, 0x32,
631             0x32, 0x32, 0x32, 0x32, 0x32, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25,
632             0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x24,
633             0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
634             0x24, 0x24, 0x24, 0x24, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23,
635             0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, }
636 
637     };
638 
639 /*****************************************************************************/
640 /* 4 Bit table look for total zeros (totalcoeff = 11to15) as in Table 9.7    */
641 /* of H264 standard. In each table entry, lower 4 bits represent total zeros */
642 /* decoded while upper 4 bit represent the bits to be flushed from ps_bitstrm    */
643 /*****************************************************************************/
644 const UWORD8 gau1_ih264d_table_total_zero_11to15[5][16] =
645     {
646     /* For total coeff = 11 */
647         { 0x40, 0x41, 0x32, 0x32, 0x33, 0x33, 0x35, 0x35, 0x14, 0x14, 0x14,
648           0x14, 0x14, 0x14, 0x14, 0x14, },
649 
650       /* For total coeff = 12 */
651           { 0x40, 0x41, 0x34, 0x34, 0x22, 0x22, 0x22, 0x22, 0x13, 0x13, 0x13,
652             0x13, 0x13, 0x13, 0x13, 0x13, },
653 
654       /* For total coeff = 13 */
655           { 0x30, 0x30, 0x31, 0x31, 0x23, 0x23, 0x23, 0x23, 0x12, 0x12, 0x12,
656             0x12, 0x12, 0x12, 0x12, 0x12, },
657 
658       /* For total coeff = 14 */
659           { 0x20, 0x20, 0x20, 0x20, 0x21, 0x21, 0x21, 0x21, 0x12, 0x12, 0x12,
660             0x12, 0x12, 0x12, 0x12, 0x12, },
661 
662       /* For total coeff = 15 */
663           { 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x11, 0x11, 0x11,
664             0x11, 0x11, 0x11, 0x11, 0x11, }, };
665 
666 /** Tables used to read "Run Before", Below tables are packed to reduce lookups */
667 /** (Base addess of Gx << 2)  + (Max code length for that Gx) */
668 const UWORD8 gau1_ih264d_table_run_before[64] =
669     { 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 1, 1, 1, 1, 10, 10, 6, 6, 1, 1, 1, 1,
670       14, 14, 10, 10, 6, 6, 2, 2, 19, 15, 10, 10, 6, 6, 2, 2, 23, 19, 15, 11, 6,
671       6, 2, 2, 7, 11, 19, 15, 27, 23, 2, 2, 27, 27, 23, 19, 15, 11, 7, 3 };
672 
673 /*****************************************************************************/
674 /* Lookup table for CAVLC 4x4  total_coeff,trailing_ones as pers Table 9-5   */
675 /* in the standard. Starting form lsb first 2 bits=flushbits, next 2bits=    */
676 /* trailing ones, next 5 bits=total_coeff. Total bits used = 9 out of 16     */
677 /*****************************************************************************/
678 const UWORD16 gau2_ih264d_code_gx[304] =
679     {
680     /* Lookup for 0 <= nC < 2 */
681     0x0000,
682       0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0014, 0x0014,
683       0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0028, 0x0028, 0x0028,
684       0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0026, 0x0026, 0x0012, 0x0012,
685       0x003D, 0x003D, 0x003D, 0x003D, 0x005E, 0x005E, 0x003A, 0x003A, 0x004D,
686       0x004D, 0x004D, 0x004D, 0x006E, 0x006E, 0x004A, 0x004A, 0x0036, 0x0036,
687       0x0022, 0x0022, 0x007E, 0x007E, 0x005A, 0x005A, 0x0046, 0x0046, 0x0032,
688       0x0032, 0x008E, 0x008E, 0x006A, 0x006A, 0x0056, 0x0056, 0x0042, 0x0042,
689       0x009E, 0x009E, 0x007A, 0x007A, 0x0066, 0x0066, 0x0052, 0x0052, 0x0083,
690       0x009B, 0x0087, 0x0073, 0x00AF, 0x008B, 0x0077, 0x0063, 0x00CF, 0x00BB,
691       0x00A7, 0x00A3, 0x00BF, 0x00AB, 0x0097, 0x0093, 0x00EF, 0x00DB, 0x00C7,
692       0x00C3, 0x00DF, 0x00CB, 0x00B7, 0x00B3, 0x010F, 0x00FB, 0x00F7, 0x00E3,
693       0x00FF, 0x00EB, 0x00E7, 0x00D3, 0x0102, 0x0102, 0x010A, 0x010A, 0x0106,
694       0x0106, 0x00F2, 0x00F2, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4,
695       0x00D4, 0x00D4,
696 
697       /* Lookup for 2 <= nC < 4 */
698       0x0015,
699       0x0015, 0x0015, 0x0015, 0x0001, 0x0001, 0x0001, 0x0001, 0x004E, 0x004E,
700       0x003E, 0x003E, 0x0029, 0x0029, 0x0029, 0x0029, 0x006F, 0x003B, 0x0037,
701       0x0013, 0x005E, 0x005E, 0x0026, 0x0026, 0x007E, 0x007E, 0x004A, 0x004A,
702       0x0046, 0x0046, 0x0022, 0x0022, 0x008E, 0x008E, 0x005A, 0x005A, 0x0056,
703       0x0056, 0x0032, 0x0032, 0x0052, 0x0052, 0x006A, 0x006A, 0x0066, 0x0066,
704       0x0042, 0x0042, 0x009E, 0x009E, 0x007A, 0x007A, 0x0076, 0x0076, 0x0062,
705       0x0062, 0x00BF, 0x009B, 0x0097, 0x0083, 0x00AF, 0x008B, 0x0087, 0x0073,
706       0x00B3, 0x00BB, 0x00B7, 0x00A3, 0x00CF, 0x00AB, 0x00A7, 0x0093, 0x00EF,
707       0x00DB, 0x00D7, 0x00D3, 0x00DF, 0x00CB, 0x00C7, 0x00C3, 0x00F7, 0x00F3,
708       0x00FB, 0x00E7, 0x00EA, 0x00EA, 0x00E2, 0x00E2, 0x010E, 0x010E, 0x010A,
709       0x010A, 0x0106, 0x0106, 0x0102, 0x0102, 0x00FC, 0x00FC, 0x00FC, 0x00FC,
710       0x00FC, 0x00FC, 0x00FC, 0x00FC,
711 
712       /* Lookup for 4 <= nC < 8 */
713       0x007F,
714       0x006F, 0x005F, 0x004F, 0x003F, 0x002B, 0x0017, 0x0003, 0x0057, 0x005B,
715       0x0047, 0x004B, 0x0037, 0x008F, 0x003B, 0x0027, 0x0033, 0x007B, 0x0077,
716       0x0023, 0x009F, 0x006B, 0x0067, 0x0013, 0x0073, 0x0063, 0x009B, 0x0053,
717       0x00AF, 0x008B, 0x0087, 0x0043, 0x00CF, 0x00BB, 0x00A7, 0x0093, 0x00BF,
718       0x00AB, 0x0097, 0x0083, 0x00C3, 0x00DB, 0x00C7, 0x00B3, 0x00DF, 0x00CB,
719       0x00B7, 0x00A3, 0x00F7, 0x00E3, 0x00EF, 0x00EB, 0x00E7, 0x00D3, 0x00D6,
720       0x00D6, 0x0106, 0x0106, 0x00F2, 0x00F2, 0x00FE, 0x00FE, 0x00FA, 0x00FA,
721       0x010D, 0x010D, 0x010D, 0x010D, 0x0109, 0x0109, 0x0109, 0x0109, 0x0100,
722       0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100 };
723 
724 /*****************************************************************************/
725 /* Lookup table for CAVLC ChromaDC total_coeff,trailing_ones parsing as per  */
726 /* Table 9-5 in the standard. Starting from msb, First 4bits=total_coeff,    */
727 /* next 2bits=trailing_ones and last 2bits=flushbits-1                       */
728 /*****************************************************************************/
729 const UWORD8 gau1_ih264d_cav_chromdc_vld[256] =
730     { 0x9E, 0x9E, 0x97, 0x8F, 0x76, 0x76, 0x6E, 0x6E, 0x85, 0x85, 0x85, 0x85,
731       0x65, 0x65, 0x65, 0x65, 0x45, 0x45, 0x45, 0x45, 0x7D, 0x7D, 0x7D, 0x7D,
732       0x4D, 0x4D, 0x4D, 0x4D, 0x25, 0x25, 0x25, 0x25,
733 
734       0x52,
735       0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52,
736       0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52,
737       0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52,
738 
739       0x01,
740       0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
741       0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
742       0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
743       0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
744       0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
745       0x01, 0x01, 0x01,
746 
747       0x28,
748       0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
749       0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
750       0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
751       0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
752       0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
753       0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
754       0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
755       0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
756       0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
757       0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
758       0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, };
759 
760 const UWORD16 gau2_ih264d_offset_num_vlc_tab[9] =
761     { 0, 0, 120, 120, 224, 224, 224, 224, 224 };
762 
763 /*****************************************************************************/
764 /* Function pointer u4_ofst table lookup for parsing 4x4 residual blocks in   */
765 /* CAVLC. The u4_ofst is dependent on total coeffs coded                      */
766 /*****************************************************************************/
767 const UWORD8 gau1_ih264d_total_coeff_fn_ptr_offset[16] =
768     { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2 };
769 
770 /****************************************************************************/
771 /*  gai2_ih264d_trailing_one_level lookup tables based on trailing one bits        */
772 /*  All zeroes are u2_dummy in the table are u2_dummy to keep 3 uniform elements  */
773 /****************************************************************************/
774 const WORD16 gai2_ih264d_trailing_one_level[14][3] =
775     {
776     /* All zeroes are u2_dummy */
777     /**********************************************************************/
778     /* Levels for trailing ones = 1, bits read can be 0 or 1              */
779     /**********************************************************************/
780         { 1, 0, 0 }, /* 0 */
781           { -1, 0, 0 }, /* 1 */
782 
783       /**********************************************************************/
784       /* Levels for trailing ones = 2, bits read can be 00, 01, 10 ,11      */
785       /**********************************************************************/
786           { 1, 1, 0 }, /* 00 */
787           { 1, -1, 0 }, /* 01 */
788           { -1, 1, 0 }, /* 10 */
789           { -1, -1, 0 }, /* 11 */
790 
791       /**********************************************************************/
792       /* Levels for trailing ones = 3, bits read can be 000 - 111           */
793       /**********************************************************************/
794           { 1, 1, 1 }, /* 000 */
795           { 1, 1, -1 }, /* 001 */
796           { 1, -1, 1 }, /* 010 */
797           { 1, -1, -1 }, /* 011 */
798           { -1, 1, 1 }, /* 100 */
799           { -1, 1, -1 }, /* 101 */
800           { -1, -1, 1 }, /* 110 */
801           { -1, -1, -1 }, /* 111 */
802     };
803 /****************CAVLC DECODING TABLES ENDS *******************/
804 
805 /****************************************************************************/
806 /* These are the codes used for error detection in intra pred4x4 modes      */
807 /****************************************************************************/
808 const UWORD8 gau1_ih264d_intra_pred_err_code[9] =
809     { 2, 1, 0, 2, 3, 3, 3, 2, 1 };
810 
811 /* Number of users for top field , bottom field, which field needs to be     */
812 /* displayed first                                                           */
813 const UWORD8 gau1_ih264d_sei_fld_usage[9][3] =
814     {
815         { 1, 1, DISP_FLD_FIRST_UNDEF },
816           { 1, 0, DISP_TOP_FLD_FIRST },
817           { 0, 1, DISP_BOT_FLD_FIRST },
818           { 1, 1, DISP_TOP_FLD_FIRST },
819           { 1, 1, DISP_BOT_FLD_FIRST },
820           { 2, 1, DISP_TOP_FLD_FIRST },
821           { 1, 2, DISP_BOT_FLD_FIRST },
822           { 2, 2, DISP_FLD_FIRST_UNDEF },
823           { 3, 3, DISP_FLD_FIRST_UNDEF } };
824 
825 /*****************************************************************/
826 /* Context increment for significant coefficient(CABAC)          */
827 /* Requires only 63 elements. But the last element with value -1 */
828 /* is kept to make it 64                                         */
829 /*****************************************************************/
830 const UWORD8 gau1_ih264d_sigcoeff_context_inc_frame[64] =
831     { 0, 1, 2, 3, 4, 5, 5, 4, 4, 3, 3, 4, 4, 4, 5, 5, 4, 4, 4, 4, 3, 3, 6, 7, 7,
832       7, 8, 9, 10, 9, 8, 7, 7, 6, 11, 12, 13, 11, 6, 7, 8, 9, 14, 10, 9, 8, 6,
833       11, 12, 13, 11, 6, 9, 14, 10, 9, 11, 12, 13, 11, 14, 10, 12, -1 };
834 
835 const UWORD8 gau1_ih264d_sigcoeff_context_inc_field[64] =
836     { 0, 1, 1, 2, 2, 3, 3, 4, 5, 6, 7, 7, 7, 8, 4, 5, 6, 9, 10, 10, 8, 11, 12,
837       11, 9, 9, 10, 10, 8, 11, 12, 11, 9, 9, 10, 10, 8, 11, 12, 11, 9, 9, 10,
838       10, 8, 13, 13, 9, 9, 10, 10, 8, 13, 13, 9, 9, 10, 10, 14, 14, 14, 14, 14,
839       -1 };
840 
841 const UWORD8 gau1_ih264d_lastcoeff_context_inc[64] =
842     { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2,
843       2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5,
844       5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, -1 };
845 
846 /*!
847  **************************************************************************
848  *   \brief   gau1_ih264d_top_left_mb_part_indx_mod
849  *
850  *   SubBlk number of the top left subBlk in each of the MB partition
851  *   (16x16, 16x8, 8x16, 8x8)
852  **************************************************************************
853  */
854 const UWORD8 gau1_ih264d_top_left_mb_part_indx_mod[] =
855     { 0, 0 /* Junk */, /* 16x16 */
856       0, 8, /* 16x8 */
857       0, 2, /* 8x16 */
858       0, 2, 8, 10 /* 8x8 */
859     };
860 
861 /*!
862  **************************************************************************
863  *   \brief   gau1_ih264d_submb_indx_mod_sp_drct
864  *
865  *   Contains increments to the subBlk num in a given subMb partition.
866  **************************************************************************
867  */
868 const UWORD8 gau1_ih264d_submb_indx_mod_sp_drct[] =
869     { 0, 0 /* Junk */, /* 8x8 */
870       0, 4, /* 8x4 */
871       0, 1, /* 4x8 */
872       0, 1, 3, 1 /* 4x4 */
873     };
874