armVCM4P10_CAVLCTables.c revision 78e52bfac041d71ce53b5b13c2abf78af742b09d
1/*
2 * Copyright (C) 2007-2008 ARM Limited
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 *
16 */
17/* ----------------------------------------------------------------
18 *
19 *
20 * File Name:  armVCM4P10_CAVLCTables.c
21 * OpenMAX DL: v1.0.2
22 * Revision:   9641
23 * Date:       Thursday, February 7, 2008
24 *
25 *
26 *
27 *
28 * CAVLC tables for H.264
29 *
30 */
31
32#include "omxtypes.h"
33#include "armOMX.h"
34#include "omxVC.h"
35
36#include "armCOMM_Bitstream.h"
37#include "armVC.h"
38#include "armVCM4P10_CAVLCTables.h"
39
40/* Tables mapping a code to TrailingOnes and TotalCoeff */
41
42const OMX_U8 armVCM4P10_CAVLCTrailingOnes[62] = {
43 0,
44 0, 1,
45 0, 1, 2,
46 0, 1, 2, 3,
47 0, 1, 2, 3,
48 0, 1, 2, 3,
49 0, 1, 2, 3,
50 0, 1, 2, 3,
51 0, 1, 2, 3,
52 0, 1, 2, 3,
53 0, 1, 2, 3,
54 0, 1, 2, 3,
55 0, 1, 2, 3,
56 0, 1, 2, 3,
57 0, 1, 2, 3,
58 0, 1, 2, 3,
59 0, 1, 2, 3
60};
61
62const OMX_U8 armVCM4P10_CAVLCTotalCoeff[62] = {
63 0,
64 1, 1,
65 2, 2, 2,
66 3, 3, 3, 3,
67 4, 4, 4, 4,
68 5, 5, 5, 5,
69 6, 6, 6, 6,
70 7, 7, 7, 7,
71 8, 8, 8, 8,
72 9, 9, 9, 9,
73 10, 10, 10, 10,
74 11, 11, 11, 11,
75 12, 12, 12, 12,
76 13, 13, 13, 13,
77 14, 14, 14, 14,
78 15, 15, 15, 15,
79 16, 16, 16, 16
80};
81
82static const ARM_VLC32 armVCM4P10_CAVLCCoeffToken0[63] = {
83    {  1, 0x0001 },
84    {  6, 0x0005 },
85    {  2, 0x0001 },
86    {  8, 0x0007 },
87    {  6, 0x0004 },
88    {  3, 0x0001 },
89    {  9, 0x0007 },
90    {  8, 0x0006 },
91    {  7, 0x0005 },
92    {  5, 0x0003 },
93    { 10, 0x0007 },
94    {  9, 0x0006 },
95    {  8, 0x0005 },
96    {  6, 0x0003 },
97    { 11, 0x0007 },
98    { 10, 0x0006 },
99    {  9, 0x0005 },
100    {  7, 0x0004 },
101    { 13, 0x000f },
102    { 11, 0x0006 },
103    { 10, 0x0005 },
104    {  8, 0x0004 },
105    { 13, 0x000b },
106    { 13, 0x000e },
107    { 11, 0x0005 },
108    {  9, 0x0004 },
109    { 13, 0x0008 },
110    { 13, 0x000a },
111    { 13, 0x000d },
112    { 10, 0x0004 },
113    { 14, 0x000f },
114    { 14, 0x000e },
115    { 13, 0x0009 },
116    { 11, 0x0004 },
117    { 14, 0x000b },
118    { 14, 0x000a },
119    { 14, 0x000d },
120    { 13, 0x000c },
121    { 15, 0x000f },
122    { 15, 0x000e },
123    { 14, 0x0009 },
124    { 14, 0x000c },
125    { 15, 0x000b },
126    { 15, 0x000a },
127    { 15, 0x000d },
128    { 14, 0x0008 },
129    { 16, 0x000f },
130    { 15, 0x0001 },
131    { 15, 0x0009 },
132    { 15, 0x000c },
133    { 16, 0x000b },
134    { 16, 0x000e },
135    { 16, 0x000d },
136    { 15, 0x0008 },
137    { 16, 0x0007 },
138    { 16, 0x000a },
139    { 16, 0x0009 },
140    { 16, 0x000c },
141    { 16, 0x0004 },
142    { 16, 0x0006 },
143    { 16, 0x0005 },
144    { 16, 0x0008 },
145    {  0, 0x0000 }
146};
147
148static const ARM_VLC32 armVCM4P10_CAVLCCoeffToken1[63] = {
149    {  2, 0x0003 },
150    {  6, 0x000b },
151    {  2, 0x0002 },
152    {  6, 0x0007 },
153    {  5, 0x0007 },
154    {  3, 0x0003 },
155    {  7, 0x0007 },
156    {  6, 0x000a },
157    {  6, 0x0009 },
158    {  4, 0x0005 },
159    {  8, 0x0007 },
160    {  6, 0x0006 },
161    {  6, 0x0005 },
162    {  4, 0x0004 },
163    {  8, 0x0004 },
164    {  7, 0x0006 },
165    {  7, 0x0005 },
166    {  5, 0x0006 },
167    {  9, 0x0007 },
168    {  8, 0x0006 },
169    {  8, 0x0005 },
170    {  6, 0x0008 },
171    { 11, 0x000f },
172    {  9, 0x0006 },
173    {  9, 0x0005 },
174    {  6, 0x0004 },
175    { 11, 0x000b },
176    { 11, 0x000e },
177    { 11, 0x000d },
178    {  7, 0x0004 },
179    { 12, 0x000f },
180    { 11, 0x000a },
181    { 11, 0x0009 },
182    {  9, 0x0004 },
183    { 12, 0x000b },
184    { 12, 0x000e },
185    { 12, 0x000d },
186    { 11, 0x000c },
187    { 12, 0x0008 },
188    { 12, 0x000a },
189    { 12, 0x0009 },
190    { 11, 0x0008 },
191    { 13, 0x000f },
192    { 13, 0x000e },
193    { 13, 0x000d },
194    { 12, 0x000c },
195    { 13, 0x000b },
196    { 13, 0x000a },
197    { 13, 0x0009 },
198    { 13, 0x000c },
199    { 13, 0x0007 },
200    { 14, 0x000b },
201    { 13, 0x0006 },
202    { 13, 0x0008 },
203    { 14, 0x0009 },
204    { 14, 0x0008 },
205    { 14, 0x000a },
206    { 13, 0x0001 },
207    { 14, 0x0007 },
208    { 14, 0x0006 },
209    { 14, 0x0005 },
210    { 14, 0x0004 },
211    {  0, 0x0000 }
212};
213
214static const ARM_VLC32 armVCM4P10_CAVLCCoeffToken2[63] = {
215    {  4, 0x000f },
216    {  6, 0x000f },
217    {  4, 0x000e },
218    {  6, 0x000b },
219    {  5, 0x000f },
220    {  4, 0x000d },
221    {  6, 0x0008 },
222    {  5, 0x000c },
223    {  5, 0x000e },
224    {  4, 0x000c },
225    {  7, 0x000f },
226    {  5, 0x000a },
227    {  5, 0x000b },
228    {  4, 0x000b },
229    {  7, 0x000b },
230    {  5, 0x0008 },
231    {  5, 0x0009 },
232    {  4, 0x000a },
233    {  7, 0x0009 },
234    {  6, 0x000e },
235    {  6, 0x000d },
236    {  4, 0x0009 },
237    {  7, 0x0008 },
238    {  6, 0x000a },
239    {  6, 0x0009 },
240    {  4, 0x0008 },
241    {  8, 0x000f },
242    {  7, 0x000e },
243    {  7, 0x000d },
244    {  5, 0x000d },
245    {  8, 0x000b },
246    {  8, 0x000e },
247    {  7, 0x000a },
248    {  6, 0x000c },
249    {  9, 0x000f },
250    {  8, 0x000a },
251    {  8, 0x000d },
252    {  7, 0x000c },
253    {  9, 0x000b },
254    {  9, 0x000e },
255    {  8, 0x0009 },
256    {  8, 0x000c },
257    {  9, 0x0008 },
258    {  9, 0x000a },
259    {  9, 0x000d },
260    {  8, 0x0008 },
261    { 10, 0x000d },
262    {  9, 0x0007 },
263    {  9, 0x0009 },
264    {  9, 0x000c },
265    { 10, 0x0009 },
266    { 10, 0x000c },
267    { 10, 0x000b },
268    { 10, 0x000a },
269    { 10, 0x0005 },
270    { 10, 0x0008 },
271    { 10, 0x0007 },
272    { 10, 0x0006 },
273    { 10, 0x0001 },
274    { 10, 0x0004 },
275    { 10, 0x0003 },
276    { 10, 0x0002 },
277    {  0, 0x0000 }
278};
279
280static const ARM_VLC32 armVCM4P10_CAVLCCoeffToken3[63] = {
281    {  6, 0x0003 },
282    {  6, 0x0000 },
283    {  6, 0x0001 },
284    {  6, 0x0004 },
285    {  6, 0x0005 },
286    {  6, 0x0006 },
287    {  6, 0x0008 },
288    {  6, 0x0009 },
289    {  6, 0x000a },
290    {  6, 0x000b },
291    {  6, 0x000c },
292    {  6, 0x000d },
293    {  6, 0x000e },
294    {  6, 0x000f },
295    {  6, 0x0010 },
296    {  6, 0x0011 },
297    {  6, 0x0012 },
298    {  6, 0x0013 },
299    {  6, 0x0014 },
300    {  6, 0x0015 },
301    {  6, 0x0016 },
302    {  6, 0x0017 },
303    {  6, 0x0018 },
304    {  6, 0x0019 },
305    {  6, 0x001a },
306    {  6, 0x001b },
307    {  6, 0x001c },
308    {  6, 0x001d },
309    {  6, 0x001e },
310    {  6, 0x001f },
311    {  6, 0x0020 },
312    {  6, 0x0021 },
313    {  6, 0x0022 },
314    {  6, 0x0023 },
315    {  6, 0x0024 },
316    {  6, 0x0025 },
317    {  6, 0x0026 },
318    {  6, 0x0027 },
319    {  6, 0x0028 },
320    {  6, 0x0029 },
321    {  6, 0x002a },
322    {  6, 0x002b },
323    {  6, 0x002c },
324    {  6, 0x002d },
325    {  6, 0x002e },
326    {  6, 0x002f },
327    {  6, 0x0030 },
328    {  6, 0x0031 },
329    {  6, 0x0032 },
330    {  6, 0x0033 },
331    {  6, 0x0034 },
332    {  6, 0x0035 },
333    {  6, 0x0036 },
334    {  6, 0x0037 },
335    {  6, 0x0038 },
336    {  6, 0x0039 },
337    {  6, 0x003a },
338    {  6, 0x003b },
339    {  6, 0x003c },
340    {  6, 0x003d },
341    {  6, 0x003e },
342    {  6, 0x003f },
343    {  0, 0x0000 }
344};
345
346static const ARM_VLC32 armVCM4P10_CAVLCCoeffToken4[15] = {
347    {  2, 0x0001 },
348    {  6, 0x0007 },
349    {  1, 0x0001 },
350    {  6, 0x0004 },
351    {  6, 0x0006 },
352    {  3, 0x0001 },
353    {  6, 0x0003 },
354    {  7, 0x0003 },
355    {  7, 0x0002 },
356    {  6, 0x0005 },
357    {  6, 0x0002 },
358    {  8, 0x0003 },
359    {  8, 0x0002 },
360    {  7, 0x0000 },
361    {  0, 0x0000 }
362};
363
364
365const ARM_VLC32 *armVCM4P10_CAVLCCoeffTokenTables[5] = {
366     armVCM4P10_CAVLCCoeffToken0,
367     armVCM4P10_CAVLCCoeffToken1,
368     armVCM4P10_CAVLCCoeffToken2,
369     armVCM4P10_CAVLCCoeffToken3,
370     armVCM4P10_CAVLCCoeffToken4
371};
372
373/* Table for level_prefix */
374
375const ARM_VLC32 armVCM4P10_CAVLCLevelPrefix[17] = {
376    {  1, 1},
377    {  2, 1},
378    {  3, 1},
379    {  4, 1},
380    {  5, 1},
381    {  6, 1},
382    {  7, 1},
383    {  8, 1},
384    {  9, 1},
385    { 10, 1},
386    { 11, 1},
387    { 12, 1},
388    { 13, 1},
389    { 14, 1},
390    { 15, 1},
391    { 16, 1},
392    {  0, 0}
393};
394
395/* Tables for total_zeros */
396
397static const ARM_VLC32 armVCM4P10_CAVLCTotalZeros1[17] = {
398    {  1, 0x0001 },
399    {  3, 0x0003 },
400    {  3, 0x0002 },
401    {  4, 0x0003 },
402    {  4, 0x0002 },
403    {  5, 0x0003 },
404    {  5, 0x0002 },
405    {  6, 0x0003 },
406    {  6, 0x0002 },
407    {  7, 0x0003 },
408    {  7, 0x0002 },
409    {  8, 0x0003 },
410    {  8, 0x0002 },
411    {  9, 0x0003 },
412    {  9, 0x0002 },
413    {  9, 0x0001 },
414    {  0, 0x0000 }
415};
416
417static const ARM_VLC32 armVCM4P10_CAVLCTotalZeros2[16] = {
418    {  3, 0x0007 },
419    {  3, 0x0006 },
420    {  3, 0x0005 },
421    {  3, 0x0004 },
422    {  3, 0x0003 },
423    {  4, 0x0005 },
424    {  4, 0x0004 },
425    {  4, 0x0003 },
426    {  4, 0x0002 },
427    {  5, 0x0003 },
428    {  5, 0x0002 },
429    {  6, 0x0003 },
430    {  6, 0x0002 },
431    {  6, 0x0001 },
432    {  6, 0x0000 },
433    {  0, 0x0000 }
434};
435
436static const ARM_VLC32 armVCM4P10_CAVLCTotalZeros3[15] = {
437    {  4, 0x0005 },
438    {  3, 0x0007 },
439    {  3, 0x0006 },
440    {  3, 0x0005 },
441    {  4, 0x0004 },
442    {  4, 0x0003 },
443    {  3, 0x0004 },
444    {  3, 0x0003 },
445    {  4, 0x0002 },
446    {  5, 0x0003 },
447    {  5, 0x0002 },
448    {  6, 0x0001 },
449    {  5, 0x0001 },
450    {  6, 0x0000 },
451    {  0, 0x0000 }
452};
453
454static const ARM_VLC32 armVCM4P10_CAVLCTotalZeros4[14] = {
455    {  5, 0x0003 },
456    {  3, 0x0007 },
457    {  4, 0x0005 },
458    {  4, 0x0004 },
459    {  3, 0x0006 },
460    {  3, 0x0005 },
461    {  3, 0x0004 },
462    {  4, 0x0003 },
463    {  3, 0x0003 },
464    {  4, 0x0002 },
465    {  5, 0x0002 },
466    {  5, 0x0001 },
467    {  5, 0x0000 },
468    {  0, 0x0000 }
469};
470
471static const ARM_VLC32 armVCM4P10_CAVLCTotalZeros5[13] = {
472    {  4, 0x0005 },
473    {  4, 0x0004 },
474    {  4, 0x0003 },
475    {  3, 0x0007 },
476    {  3, 0x0006 },
477    {  3, 0x0005 },
478    {  3, 0x0004 },
479    {  3, 0x0003 },
480    {  4, 0x0002 },
481    {  5, 0x0001 },
482    {  4, 0x0001 },
483    {  5, 0x0000 },
484    {  0, 0x0000 }
485};
486
487static const ARM_VLC32 armVCM4P10_CAVLCTotalZeros6[12] = {
488    {  6, 0x0001 },
489    {  5, 0x0001 },
490    {  3, 0x0007 },
491    {  3, 0x0006 },
492    {  3, 0x0005 },
493    {  3, 0x0004 },
494    {  3, 0x0003 },
495    {  3, 0x0002 },
496    {  4, 0x0001 },
497    {  3, 0x0001 },
498    {  6, 0x0000 },
499    {  0, 0x0000 }
500};
501
502static const ARM_VLC32 armVCM4P10_CAVLCTotalZeros7[11] = {
503    {  6, 0x0001 },
504    {  5, 0x0001 },
505    {  3, 0x0005 },
506    {  3, 0x0004 },
507    {  3, 0x0003 },
508    {  2, 0x0003 },
509    {  3, 0x0002 },
510    {  4, 0x0001 },
511    {  3, 0x0001 },
512    {  6, 0x0000 },
513    {  0, 0x0000 }
514};
515
516static const ARM_VLC32 armVCM4P10_CAVLCTotalZeros8[10] = {
517    {  6, 0x0001 },
518    {  4, 0x0001 },
519    {  5, 0x0001 },
520    {  3, 0x0003 },
521    {  2, 0x0003 },
522    {  2, 0x0002 },
523    {  3, 0x0002 },
524    {  3, 0x0001 },
525    {  6, 0x0000 },
526    {  0, 0x0000 }
527};
528
529static const ARM_VLC32 armVCM4P10_CAVLCTotalZeros9[9] = {
530    {  6, 0x0001 },
531    {  6, 0x0000 },
532    {  4, 0x0001 },
533    {  2, 0x0003 },
534    {  2, 0x0002 },
535    {  3, 0x0001 },
536    {  2, 0x0001 },
537    {  5, 0x0001 },
538    {  0, 0x0000 }
539};
540
541static const ARM_VLC32 armVCM4P10_CAVLCTotalZeros10[8] = {
542    {  5, 0x0001 },
543    {  5, 0x0000 },
544    {  3, 0x0001 },
545    {  2, 0x0003 },
546    {  2, 0x0002 },
547    {  2, 0x0001 },
548    {  4, 0x0001 },
549    {  0, 0x0000 }
550};
551
552static const ARM_VLC32 armVCM4P10_CAVLCTotalZeros11[7] = {
553    {  4, 0x0000 },
554    {  4, 0x0001 },
555    {  3, 0x0001 },
556    {  3, 0x0002 },
557    {  1, 0x0001 },
558    {  3, 0x0003 },
559    {  0, 0x0000 }
560};
561
562static const ARM_VLC32 armVCM4P10_CAVLCTotalZeros12[6] = {
563    {  4, 0x0000 },
564    {  4, 0x0001 },
565    {  2, 0x0001 },
566    {  1, 0x0001 },
567    {  3, 0x0001 },
568    {  0, 0x0000 }
569};
570
571static const ARM_VLC32 armVCM4P10_CAVLCTotalZeros13[5] = {
572    {  3, 0x0000 },
573    {  3, 0x0001 },
574    {  1, 0x0001 },
575    {  2, 0x0001 },
576    {  0, 0x0000 }
577};
578
579static const ARM_VLC32 armVCM4P10_CAVLCTotalZeros14[4] = {
580    {  2, 0x0000 },
581    {  2, 0x0001 },
582    {  1, 0x0001 },
583    {  0, 0x0000 }
584};
585
586static const ARM_VLC32 armVCM4P10_CAVLCTotalZeros15[3] = {
587    {  1, 0x0000 },
588    {  1, 0x0001 },
589    {  0, 0x0000 }
590};
591
592const ARM_VLC32 *armVCM4P10_CAVLCTotalZeroTables[15] = {
593     armVCM4P10_CAVLCTotalZeros1,
594     armVCM4P10_CAVLCTotalZeros2,
595     armVCM4P10_CAVLCTotalZeros3,
596     armVCM4P10_CAVLCTotalZeros4,
597     armVCM4P10_CAVLCTotalZeros5,
598     armVCM4P10_CAVLCTotalZeros6,
599     armVCM4P10_CAVLCTotalZeros7,
600     armVCM4P10_CAVLCTotalZeros8,
601     armVCM4P10_CAVLCTotalZeros9,
602     armVCM4P10_CAVLCTotalZeros10,
603     armVCM4P10_CAVLCTotalZeros11,
604     armVCM4P10_CAVLCTotalZeros12,
605     armVCM4P10_CAVLCTotalZeros13,
606     armVCM4P10_CAVLCTotalZeros14,
607     armVCM4P10_CAVLCTotalZeros15
608};
609
610static const ARM_VLC32 armVCM4P10_CAVLCTotalZeros2x2_1[5] = {
611    {  1, 1 },
612    {  2, 1 },
613    {  3, 1 },
614    {  3, 0 },
615    {  0, 0 }
616};
617
618static const ARM_VLC32 armVCM4P10_CAVLCTotalZeros2x2_2[4] = {
619    {  1, 1 },
620    {  2, 1 },
621    {  2, 0 },
622    {  0, 0 }
623};
624
625static const ARM_VLC32 armVCM4P10_CAVLCTotalZeros2x2_3[3] = {
626    {  1, 1 },
627    {  1, 0 },
628    {  0, 0 }
629};
630
631const ARM_VLC32 *armVCM4P10_CAVLCTotalZeros2x2Tables[3] = {
632     armVCM4P10_CAVLCTotalZeros2x2_1,
633     armVCM4P10_CAVLCTotalZeros2x2_2,
634     armVCM4P10_CAVLCTotalZeros2x2_3
635};
636
637
638/* Tables for run_before */
639
640static const ARM_VLC32 armVCM4P10_CAVLCRunBefore1[3] = {
641    {  1, 0x0001 },
642    {  1, 0x0000 },
643    {  0, 0x0000 }
644};
645
646static const ARM_VLC32 armVCM4P10_CAVLCRunBefore2[4] = {
647    {  1, 0x0001 },
648    {  2, 0x0001 },
649    {  2, 0x0000 },
650    {  0, 0x0000 }
651};
652
653static const ARM_VLC32 armVCM4P10_CAVLCRunBefore3[5] = {
654    {  2, 0x0003 },
655    {  2, 0x0002 },
656    {  2, 0x0001 },
657    {  2, 0x0000 },
658    {  0, 0x0000 }
659};
660
661static const ARM_VLC32 armVCM4P10_CAVLCRunBefore4[6] = {
662    {  2, 0x0003 },
663    {  2, 0x0002 },
664    {  2, 0x0001 },
665    {  3, 0x0001 },
666    {  3, 0x0000 },
667    {  0, 0x0000 }
668};
669
670static const ARM_VLC32 armVCM4P10_CAVLCRunBefore5[7] = {
671    {  2, 0x0003 },
672    {  2, 0x0002 },
673    {  3, 0x0003 },
674    {  3, 0x0002 },
675    {  3, 0x0001 },
676    {  3, 0x0000 },
677    {  0, 0x0000 }
678};
679
680static const ARM_VLC32 armVCM4P10_CAVLCRunBefore6[8] = {
681    {  2, 0x0003 },
682    {  3, 0x0000 },
683    {  3, 0x0001 },
684    {  3, 0x0003 },
685    {  3, 0x0002 },
686    {  3, 0x0005 },
687    {  3, 0x0004 },
688    {  0, 0x0000 }
689};
690
691static const ARM_VLC32 armVCM4P10_CAVLCRunBefore7[16] = {
692    {  3, 0x0007 },
693    {  3, 0x0006 },
694    {  3, 0x0005 },
695    {  3, 0x0004 },
696    {  3, 0x0003 },
697    {  3, 0x0002 },
698    {  3, 0x0001 },
699    {  4, 0x0001 },
700    {  5, 0x0001 },
701    {  6, 0x0001 },
702    {  7, 0x0001 },
703    {  8, 0x0001 },
704    {  9, 0x0001 },
705    { 10, 0x0001 },
706    { 11, 0x0001 },
707    {  0, 0x0000 }
708};
709
710const ARM_VLC32 *armVCM4P10_CAVLCRunBeforeTables[7] = {
711     armVCM4P10_CAVLCRunBefore1,
712     armVCM4P10_CAVLCRunBefore2,
713     armVCM4P10_CAVLCRunBefore3,
714     armVCM4P10_CAVLCRunBefore4,
715     armVCM4P10_CAVLCRunBefore5,
716     armVCM4P10_CAVLCRunBefore6,
717     armVCM4P10_CAVLCRunBefore7
718};
719