1/* ------------------------------------------------------------------
2 * Copyright (C) 1998-2009 PacketVideo
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
13 * express or implied.
14 * See the License for the specific language governing permissions
15 * and limitations under the License.
16 * -------------------------------------------------------------------
17 */
18/******************************************************************************
19 *
20 * This software module was originally developed by
21 *
22 * Robert Danielsen (Telenor / ACTS-MoMuSys).
23 *
24 * and edited by
25 *
26 * Minhua Zhou (HHI / ACTS-MoMuSys).
27 * Luis Ducla-Soares (IST / ACTS-MoMuSys).
28 *
29 * in the course of development of the MPEG-4 Video (ISO/IEC 14496-2) standard.
30 * This software module is an implementation of a part of one or more MPEG-4
31 * Video (ISO/IEC 14496-2) tools as specified by the MPEG-4 Video (ISO/IEC
32 * 14496-2) standard.
33 *
34 * ISO/IEC gives users of the MPEG-4 Video (ISO/IEC 14496-2) standard free
35 * license to this software module or modifications thereof for use in hardware
36 * or software products claiming conformance to the MPEG-4 Video (ISO/IEC
37 * 14496-2) standard.
38 *
39 * Those intending to use this software module in hardware or software products
40 * are advised that its use may infringe existing patents. The original
41 * developer of this software module and his/her company, the subsequent
42 * editors and their companies, and ISO/IEC have no liability for use of this
43 * software module or modifications thereof in an implementation. Copyright is
44 * not released for non MPEG-4 Video (ISO/IEC 14496-2) standard conforming
45 * products.
46 *
47 * ACTS-MoMuSys partners retain full right to use the code for his/her own
48 * purpose, assign or donate the code to a third party and to inhibit third
49 * parties from using the code for non MPEG-4 Video (ISO/IEC 14496-2) standard
50 * conforming products. This copyright notice must be included in all copies or
51 * derivative works.
52 *
53 * Copyright (c) 1997
54 *
55 *****************************************************************************/
56
57
58/***********************************************************HeaderBegin*******
59 *
60 * File:    vlc.h
61 *
62 * Author:  Robert Danielsen
63 * Created: 07.06.96
64 *
65 * Description: vlc tables for encoder
66 *
67 * Notes:   Idea taken from MPEG-2 software simulation group
68 *
69 * Modified:
70 *  28.10.96 Robert Danielsen: Added tables for Intra luminance
71 *          coefficients
72 *      01.05.97 Luis Ducla-Soares: added VM7.0 Reversible VLC tables (RVLC).
73 *      13.05.97 Minhua Zhou: added cbpy_tab3,cbpy_tab2
74 *
75 ***********************************************************HeaderEnd*********/
76
77/************************    INCLUDE FILES    ********************************/
78
79#ifndef _VLC_ENC_TAB_H_
80#define _VLC_ENC_TAB_H_
81
82
83#include "mp4def.h"
84/* type definitions for variable length code table entries */
85
86
87
88static const Int intra_max_level[2][64] =
89{
90    {27, 10,  5,  4,  3,  3,  3,  3,
91        2,  2,  1,  1,  1,  1,  1,  0,
92        0,  0,  0,  0,  0,  0,  0,  0,
93        0,  0,  0,  0,  0,  0,  0,  0,
94        0,  0,  0,  0,  0,  0,  0,  0,
95        0,  0,  0,  0,  0,  0,  0,  0,
96        0,  0,  0,  0,  0,  0,  0,  0,
97        0,  0,  0,  0,  0,  0,  0,  0,
98    },
99
100    {8,  3,  2,  2,  2,  2,  2,  1,
101     1,  1,  1,  1,  1,  1,  1,  1,
102     1,  1,  1,  1,  1,  0,  0,  0,
103     0,  0,  0,  0,  0,  0,  0,  0,
104     0,  0,  0,  0,  0,  0,  0,  0,
105     0,  0,  0,  0,  0,  0,  0,  0,
106     0,  0,  0,  0,  0,  0,  0,  0,
107     0,  0,  0,  0,  0,  0,  0,  0
108    }
109};
110
111
112static const Int inter_max_level[2][64] =
113{
114    {12,  6,  4,  3,  3,  3,  3,  2,
115        2,  2,  2,  1,  1,  1,  1,  1,
116        1,  1,  1,  1,  1,  1,  1,  1,
117        1,  1,  1,  0,  0,  0,  0,  0,
118        0,  0,  0,  0,  0,  0,  0,  0,
119        0,  0,  0,  0,  0,  0,  0,  0,
120        0,  0,  0,  0,  0,  0,  0,  0,
121        0,  0,  0,  0,  0,  0,  0,  0},
122
123    {3,  2,  1,  1,  1,  1,  1,  1,
124     1,  1,  1,  1,  1,  1,  1,  1,
125     1,  1,  1,  1,  1,  1,  1,  1,
126     1,  1,  1,  1,  1,  1,  1,  1,
127     1,  1,  1,  1,  1,  1,  1,  1,
128     1,  0,  0,  0,  0,  0,  0,  0,
129     0,  0,  0,  0,  0,  0,  0,  0,
130     0,  0,  0,  0,  0,  0,  0,  0}
131};
132
133
134static const Int intra_max_run0[28] = { 999, 14,  9,  7,  3,  2,  1,
135                                        1,  1,  1,  1,  0,  0,  0,
136                                        0,  0,  0,  0,  0,  0,  0,
137                                        0,  0,  0,  0,  0,  0,  0
138                                      };
139
140
141static const Int intra_max_run1[9] = { 999, 20,  6,
142                                       1,  0,  0,
143                                       0,  0,  0
144                                     };
145
146static const Int inter_max_run0[13] = { 999,
147                                        26, 10,  6,  2,  1,  1,
148                                        0,  0,  0,  0,  0,  0
149                                      };
150
151
152static const Int inter_max_run1[4] = { 999, 40,  1,  0 };
153
154
155
156/* DC prediction sizes */
157
158static const VLCtable DCtab_lum[13] =
159{
160    {3, 3}, {3, 2}, {2, 2}, {2, 3}, {1, 3}, {1, 4}, {1, 5}, {1, 6}, {1, 7},
161    {1, 8}, {1, 9}, {1, 10}, {1, 11}
162};
163
164static const VLCtable DCtab_chrom[13] =
165{
166    {3, 2}, {2, 2}, {1, 2}, {1, 3}, {1, 4}, {1, 5}, {1, 6}, {1, 7}, {1, 8},
167    {1, 9}, {1, 10}, {1, 11}, {1, 12}
168};
169
170/* Motion vectors */
171
172static const VLCtable mvtab[33] =
173{
174    {1, 1}, {1, 2}, {1, 3}, {1, 4}, {3, 6}, {5, 7}, {4, 7}, {3, 7},
175    {11, 9}, {10, 9}, {9, 9}, {17, 10}, {16, 10}, {15, 10}, {14, 10}, {13, 10},
176    {12, 10}, {11, 10}, {10, 10}, {9, 10}, {8, 10}, {7, 10}, {6, 10}, {5, 10},
177    {4, 10}, {7, 11}, {6, 11}, {5, 11}, {4, 11}, {3, 11}, {2, 11}, {3, 12},
178    {2, 12}
179};
180
181
182/* MCBPC Indexing by cbpc in first two bits, mode in last two.
183 CBPC as in table 4/H.263, MB type (mode): 3 = 01, 4 = 10.
184 Example: cbpc = 01 and mode = 4 gives index = 0110 = 6. */
185
186static const VLCtable mcbpc_intra_tab[15] =
187{
188    {0x01, 9}, {0x01, 1}, {0x01, 4}, {0x00, 0},
189    {0x00, 0}, {0x01, 3}, {0x01, 6}, {0x00, 0},
190    {0x00, 0}, {0x02, 3}, {0x02, 6}, {0x00, 0},
191    {0x00, 0}, {0x03, 3}, {0x03, 6}
192};
193
194
195/* MCBPC inter.
196   Addressing: 5 bit ccmmm (cc = CBPC, mmm = mode (1-4 binary)) */
197
198static const VLCtable mcbpc_inter_tab[29] =
199{
200    {1, 1}, {3, 3}, {2, 3}, {3, 5}, {4, 6}, {1, 9}, {0, 0}, {0, 0},
201    {3, 4}, {7, 7}, {5, 7}, {4, 8}, {4, 9}, {0, 0}, {0, 0}, {0, 0},
202    {2, 4}, {6, 7}, {4, 7}, {3, 8}, {3, 9}, {0, 0}, {0, 0}, {0, 0},
203    {5, 6}, {5, 9}, {5, 8}, {3, 7}, {2, 9}
204};
205
206
207
208/* CBPY. Straightforward indexing */
209
210static const VLCtable cbpy_tab[16] =
211{
212    {3, 4}, {5, 5}, {4, 5}, {9, 4}, {3, 5}, {7, 4}, {2, 6}, {11, 4},
213    {2, 5}, {3, 6}, {5, 4}, {10, 4}, {4, 4}, {8, 4}, {6, 4}, {3, 2}
214};
215
216static const VLCtable cbpy_tab3[8] =
217{
218    {3, 3}, {1, 6}, {1, 5}, {2, 3}, {2, 5}, {3, 5}, {1, 3}, {1, 1}
219};
220static const VLCtable cbpy_tab2[4] =
221{
222    {1, 4}, {1, 3}, {1, 2}, {1, 1}
223};
224
225/* DCT coefficients. Four tables, two for last = 0, two for last = 1.
226   the sign bit must be added afterwards. */
227
228/* first part of coeffs for last = 0. Indexed by [run][level-1] */
229
230static const VLCtable coeff_tab0[2][12] =
231{
232    /* run = 0 */
233    {
234        {0x02, 2}, {0x0f, 4}, {0x15, 6}, {0x17, 7},
235        {0x1f, 8}, {0x25, 9}, {0x24, 9}, {0x21, 10},
236        {0x20, 10}, {0x07, 11}, {0x06, 11}, {0x20, 11}
237    },
238    /* run = 1 */
239    {
240        {0x06, 3}, {0x14, 6}, {0x1e, 8}, {0x0f, 10},
241        {0x21, 11}, {0x50, 12}, {0x00, 0}, {0x00, 0},
242        {0x00, 0}, {0x00, 0}, {0x00, 0}, {0x00, 0}
243    }
244};
245
246/* rest of coeffs for last = 0. indexing by [run-2][level-1] */
247
248static const VLCtable coeff_tab1[25][4] =
249{
250    /* run = 2 */
251    {
252        {0x0e, 4}, {0x1d, 8}, {0x0e, 10}, {0x51, 12}
253    },
254    /* run = 3 */
255    {
256        {0x0d, 5}, {0x23, 9}, {0x0d, 10}, {0x00, 0}
257    },
258    /* run = 4-26 */
259    {
260        {0x0c, 5}, {0x22, 9}, {0x52, 12}, {0x00, 0}
261    },
262    {
263        {0x0b, 5}, {0x0c, 10}, {0x53, 12}, {0x00, 0}
264    },
265    {
266        {0x13, 6}, {0x0b, 10}, {0x54, 12}, {0x00, 0}
267    },
268    {
269        {0x12, 6}, {0x0a, 10}, {0x00, 0}, {0x00, 0}
270    },
271    {
272        {0x11, 6}, {0x09, 10}, {0x00, 0}, {0x00, 0}
273    },
274    {
275        {0x10, 6}, {0x08, 10}, {0x00, 0}, {0x00, 0}
276    },
277    {
278        {0x16, 7}, {0x55, 12}, {0x00, 0}, {0x00, 0}
279    },
280    {
281        {0x15, 7}, {0x00, 0}, {0x00, 0}, {0x00, 0}
282    },
283    {
284        {0x14, 7}, {0x00, 0}, {0x00, 0}, {0x00, 0}
285    },
286    {
287        {0x1c, 8}, {0x00, 0}, {0x00, 0}, {0x00, 0}
288    },
289    {
290        {0x1b, 8}, {0x00, 0}, {0x00, 0}, {0x00, 0}
291    },
292    {
293        {0x21, 9}, {0x00, 0}, {0x00, 0}, {0x00, 0}
294    },
295    {
296        {0x20, 9}, {0x00, 0}, {0x00, 0}, {0x00, 0}
297    },
298    {
299        {0x1f, 9}, {0x00, 0}, {0x00, 0}, {0x00, 0}
300    },
301    {
302        {0x1e, 9}, {0x00, 0}, {0x00, 0}, {0x00, 0}
303    },
304    {
305        {0x1d, 9}, {0x00, 0}, {0x00, 0}, {0x00, 0}
306    },
307    {
308        {0x1c, 9}, {0x00, 0}, {0x00, 0}, {0x00, 0}
309    },
310    {
311        {0x1b, 9}, {0x00, 0}, {0x00, 0}, {0x00, 0}
312    },
313    {
314        {0x1a, 9}, {0x00, 0}, {0x00, 0}, {0x00, 0}
315    },
316    {
317        {0x22, 11}, {0x00, 0}, {0x00, 0}, {0x00, 0}
318    },
319    {
320        {0x23, 11}, {0x00, 0}, {0x00, 0}, {0x00, 0}
321    },
322    {
323        {0x56, 12}, {0x00, 0}, {0x00, 0}, {0x00, 0}
324    },
325    {
326        {0x57, 12}, {0x00, 0}, {0x00, 0}, {0x00, 0}
327    }
328};
329
330/* first coeffs of last = 1. indexing by [run][level-1] */
331
332static const VLCtable coeff_tab2[2][3] =
333{
334    /* run = 0 */
335    {
336        {0x07, 4}, {0x19, 9}, {0x05, 11}
337    },
338    /* run = 1 */
339    {
340        {0x0f, 6}, {0x04, 11}, {0x00, 0}
341    }
342};
343
344/* rest of coeffs for last = 1. indexing by [run-2] */
345
346static const VLCtable coeff_tab3[40] =
347{
348    {0x0e, 6}, {0x0d, 6}, {0x0c, 6},
349    {0x13, 7}, {0x12, 7}, {0x11, 7}, {0x10, 7},
350    {0x1a, 8}, {0x19, 8}, {0x18, 8}, {0x17, 8},
351    {0x16, 8}, {0x15, 8}, {0x14, 8}, {0x13, 8},
352    {0x18, 9}, {0x17, 9}, {0x16, 9}, {0x15, 9},
353    {0x14, 9}, {0x13, 9}, {0x12, 9}, {0x11, 9},
354    {0x07, 10}, {0x06, 10}, {0x05, 10}, {0x04, 10},
355    {0x24, 11}, {0x25, 11}, {0x26, 11}, {0x27, 11},
356    {0x58, 12}, {0x59, 12}, {0x5a, 12}, {0x5b, 12},
357    {0x5c, 12}, {0x5d, 12}, {0x5e, 12}, {0x5f, 12},
358    {0x00, 0}
359};
360
361/* New tables for Intra luminance coefficients. Same codewords,
362   different meaning */
363
364/* Coeffs for last = 0, run = 0. Indexed by [level-1] */
365
366static const VLCtable coeff_tab4[27] =
367{
368    /* run = 0 */
369    {0x02, 2}, {0x06, 3}, {0x0f, 4}, {0x0d, 5},
370    {0x0c, 5}, {0x15, 6}, {0x13, 6}, {0x12, 6},
371    {0x17, 7}, {0x1f, 8}, {0x1e, 8}, {0x1d, 8},
372    {0x25, 9}, {0x24, 9}, {0x23, 9}, {0x21, 9},
373    {0x21, 10}, {0x20, 10}, {0x0f, 10}, {0x0e, 10},
374    {0x07, 11}, {0x06, 11}, {0x20, 11}, {0x21, 11},
375    {0x50, 12}, {0x51, 12}, {0x52, 12}
376};
377
378/* Coeffs for last = 0, run = 1. Indexed by [level-1] */
379
380static const VLCtable coeff_tab5[10] =
381{
382    {0x0e, 4}, {0x14, 6}, {0x16, 7}, {0x1c, 8},
383    {0x20, 9}, {0x1f, 9}, {0x0d, 10}, {0x22, 11},
384    {0x53, 12}, {0x55, 12}
385};
386
387/* Coeffs for last = 0, run = 2 -> 9. Indexed by [run-2][level-1] */
388
389static const VLCtable coeff_tab6[8][5] =
390{
391    /* run = 2 */
392    {
393        {0x0b, 5}, {0x15, 7}, {0x1e, 9}, {0x0c, 10},
394        {0x56, 12}
395    },
396    /* run = 3 */
397    {
398        {0x11, 6}, {0x1b, 8}, {0x1d, 9}, {0x0b, 10},
399        {0x00, 0}
400    },
401    /* run = 4 */
402    {
403        {0x10, 6}, {0x22, 9}, {0x0a, 10}, {0x00, 0},
404        {0x00, 0}
405    },
406    /* run = 5 */
407    {
408        {0x0d, 6}, {0x1c, 9}, {0x08, 10}, {0x00, 0},
409        {0x00, 0}
410    },
411    /* run = 6 */
412    {
413        {0x12, 7}, {0x1b, 9}, {0x54, 12}, {0x00, 0},
414        {0x00, 0}
415    },
416    /* run = 7 */
417    {
418        {0x14, 7}, {0x1a, 9}, {0x57, 12}, {0x00, 0},
419        {0x00, 0}
420    },
421    /* run = 8 */
422    {
423        {0x19, 8}, {0x09, 10}, {0x00, 0}, {0x00, 0},
424        {0x00, 0}
425    },
426    /* run = 9 */
427    {
428        {0x18, 8}, {0x23, 11}, {0x00, 0}, {0x00, 0},
429        {0x00, 0}
430    }
431};
432
433/* Coeffs for last = 0, run = 10 -> 14. Indexed by [run-10] */
434
435static const VLCtable coeff_tab7[5] =
436{
437    {0x17, 8}, {0x19, 9}, {0x18, 9}, {0x07, 10},
438    {0x58, 12}
439};
440
441/* Coeffs for last = 1, run = 0. Indexed by [level-1] */
442
443static const VLCtable coeff_tab8[8] =
444{
445    {0x07, 4}, {0x0c, 6}, {0x16, 8}, {0x17, 9},
446    {0x06, 10}, {0x05, 11}, {0x04, 11}, {0x59, 12}
447};
448
449/* Coeffs for last = 1, run = 1 -> 6. Indexed by [run-1][level-1] */
450
451static const VLCtable coeff_tab9[6][3] =
452{
453    /* run = 1 */
454    {
455        {0x0f, 6}, {0x16, 9}, {0x05, 10}
456    },
457    /* run = 2 */
458    {
459        {0x0e, 6}, {0x04, 10}, {0x00, 0}
460    },
461    /* run = 3 */
462    {
463        {0x11, 7}, {0x24, 11}, {0x00, 0}
464    },
465    /* run = 4 */
466    {
467        {0x10, 7}, {0x25, 11}, {0x00, 0}
468    },
469    /* run = 5 */
470    {
471        {0x13, 7}, {0x5a, 12}, {0x00, 0}
472    },
473    /* run = 6 */
474    {
475        {0x15, 8}, {0x5b, 12}, {0x00, 0}
476    }
477};
478
479/* Coeffs for last = 1, run = 7 -> 20. Indexed by [run-7] */
480
481static const VLCtable coeff_tab10[14] =
482{
483    {0x14, 8}, {0x13, 8}, {0x1a, 8}, {0x15, 9},
484    {0x14, 9}, {0x13, 9}, {0x12, 9}, {0x11, 9},
485    {0x26, 11}, {0x27, 11}, {0x5c, 12}, {0x5d, 12},
486    {0x5e, 12}, {0x5f, 12}
487};
488
489
490#ifndef NO_RVLC
491/* RVLC tables */
492/* DCT coefficients. Four tables, two for last = 0, two for last = 1.
493   the sign bit must be added afterwards. */
494
495/* DCT  coeffs (intra) for last = 0.  */
496
497/* Indexed by [level-1] */
498
499static const VLCtable coeff_RVLCtab1[27] =
500{
501    /* run = 0 */
502    {     0x6,  3},
503    {     0x7,  3},
504    {     0xa,  4},
505    {     0x9,  5},
506    {    0x14,  6},
507    {    0x15,  6},
508    {    0x34,  7},
509    {    0x74,  8},
510    {    0x75,  8},
511    {    0xdd,  9},
512    {    0xec,  9},
513    {   0x1ec, 10},
514    {   0x1ed, 10},
515    {   0x1f4, 10},
516    {   0x3ec, 11},
517    {   0x3ed, 11},
518    {   0x3f4, 11},
519    {   0x77d, 12},
520    {   0x7bc, 12},
521    {   0xfbd, 13},
522    {   0xfdc, 13},
523    {   0x7bd, 12},
524    {   0xfdd, 13},
525    {  0x1fbd, 14},
526    {  0x1fdc, 14},
527    {  0x1fdd, 14},
528    {  0x1ffc, 15}
529};
530
531
532/* Indexed by [level-1] */
533
534static const VLCtable coeff_RVLCtab2[13] =
535{
536    /* run = 1 */
537    {     0x1,  4},
538    {     0x8,  5},
539    {    0x2d,  7},
540    {    0x6c,  8},
541    {    0x6d,  8},
542    {    0xdc,  9},
543    {   0x1dd, 10},
544    {   0x3dc, 11},
545    {   0x3dd, 11},
546    {   0x77c, 12},
547    {   0xfbc, 13},
548    {  0x1f7d, 14},
549    {  0x1fbc, 14}
550};
551
552
553/* Indexed by [level-1] */
554
555static const VLCtable coeff_RVLCtab3[11] =
556{
557    /* run = 2 */
558
559    {     0x4,  5},
560    {    0x2c,  7},
561    {    0xbc,  9},
562    {   0x1dc, 10},
563    {   0x3bc, 11},
564    {   0x3bd, 11},
565    {   0xefd, 13},
566    {   0xf7c, 13},
567    {   0xf7d, 13},
568    {  0x1efd, 14},
569    {  0x1f7c, 14}
570};
571
572
573/* Indexed by [level-1] */
574
575static const VLCtable coeff_RVLCtab4[9] =
576{
577    /* run = 3 */
578    {     0x5,  5},
579    {    0x5c,  8},
580    {    0xbd,  9},
581    {   0x37d, 11},
582    {   0x6fc, 12},
583    {   0xefc, 13},
584    {  0x1dfd, 14},
585    {  0x1efc, 14},
586    {  0x1ffd, 15}
587};
588
589
590/* Indexed by [run-4][level-1] */
591
592static const VLCtable coeff_RVLCtab5[2][6] =
593{
594    /* run = 4 */
595    {
596        {     0xc,  6},
597        {    0x5d,  8},
598        {   0x1bd, 10},
599        {   0x3fd, 12},
600        {   0x6fd, 12},
601        {  0x1bfd, 14}
602    },
603    /* run = 5 */
604    {
605        {     0xd,  6},
606        {    0x7d,  9},
607        {   0x2fc, 11},
608        {   0x5fc, 12},
609        {  0x1bfc, 14},
610        {  0x1dfc, 14}
611    }
612};
613
614
615/* Indexed by [run-6][level-1]       */
616
617static const VLCtable coeff_RVLCtab6[2][5] =
618{
619
620    /* run = 6 */
621    {
622        {    0x1c,  7},
623        {   0x17c, 10},
624        {   0x2fd, 11},
625        {   0x5fd, 12},
626        {  0x2ffc, 15}
627    },
628    /* run = 7 */
629    {
630        {    0x1d,  7},
631        {   0x17d, 10},
632        {   0x37c, 11},
633        {   0xdfd, 13},
634        {  0x2ffd, 15}
635    }
636
637};
638/* Indexed by [run-8][level-1] */
639
640static const VLCtable coeff_RVLCtab7[2][4] =
641{
642    /* run = 8 */
643    {
644        {    0x3c,  8},
645        {   0x1bc, 10},
646        {   0xbfd, 13},
647        {  0x17fd, 14}
648    },
649    /* run = 9 */
650    {
651        {    0x3d,  8},
652        {   0x1fd, 11},
653        {   0xdfc, 13},
654        {  0x37fc, 15},
655    }
656};
657
658
659
660/* Indexed by [run-10][level-1] */
661
662static const VLCtable coeff_RVLCtab8[3][2] =
663{
664    /* run = 10 */
665    {
666        {    0x7c,  9},
667        {   0x3fc, 12}
668    },
669    /* run = 11 */
670    {
671        {    0xfc, 10},
672        {   0xbfc, 13}
673    },
674    /* run = 12 */
675    {
676        {    0xfd, 10},
677        {  0x37fd, 15}
678    }
679};
680
681
682/* Indexed by [level-1] */
683
684static const VLCtable coeff_RVLCtab9[7] =
685{
686    /* run = 13 -> 19 */
687    {   0x1fc, 11},
688    {   0x7fc, 13},
689    {   0x7fd, 13},
690    {   0xffc, 14},
691    {   0xffd, 14},
692    {  0x17fc, 14},
693    {  0x3bfc, 15}
694};
695
696
697
698/* first coeffs of last = 1. indexing by [run][level-1] */
699
700static const VLCtable coeff_RVLCtab10[2][5] =
701{
702    /* run = 0 */
703    {
704        {     0xb,  4},
705        {    0x78,  8},
706        {   0x3f5, 11},
707        {   0xfec, 13},
708        {  0x1fec, 14}
709    },
710    /* run = 1 */
711    {
712        {    0x12,  5},
713        {    0xed,  9},
714        {   0x7dc, 12},
715        {  0x1fed, 14},
716        {  0x3bfd, 15}
717    }
718
719};
720
721static const VLCtable coeff_RVLCtab11[3] =
722{
723    /* run = 2 */
724    {    0x13,  5},
725    {   0x3f8, 11},
726    {  0x3dfc, 15}
727
728};
729
730static const VLCtable coeff_RVLCtab12[11][2] =
731{
732    /* run = 3 */
733    {
734        {    0x18,  6},
735        {   0x7dd, 12}
736    },
737    /* run = 4 */
738    {
739        {    0x19,  6},
740        {   0x7ec, 12}
741    },
742    /* run = 5 */
743    {
744        {    0x22,  6},
745        {   0xfed, 13}
746    },
747    /* run = 6 */
748    {
749        {    0x23,  6},
750        {   0xff4, 13}
751    },
752    /* run = 7 */
753    {
754        {    0x35,  7},
755        {   0xff5, 13}
756    },
757    /* run = 8 */
758    {
759        {    0x38,  7},
760        {   0xff8, 13}
761    },
762    /* run = 9 */
763    {
764        {    0x39,  7},
765        {   0xff9, 13}
766    },
767    /* run = 10 */
768    {
769        {    0x42,  7},
770        {  0x1ff4, 14}
771    },
772    /* run = 11 */
773    {
774        {    0x43,  7},
775        {  0x1ff5, 14}
776    },
777    /* run = 12 */
778    {
779        {    0x79,  8},
780        {  0x1ff8, 14}
781    },
782    /* run = 13 */
783    {
784        {    0x82,  8},
785        {  0x3dfd, 15}
786    }
787
788};
789
790static const VLCtable coeff_RVLCtab13[32] =
791{
792    /* run = 14 -> 44 */
793    {    0x83,  8},
794    {    0xf4,  9},
795    {    0xf5,  9},
796    {    0xf8,  9},
797    {    0xf9,  9},
798    {   0x102,  9},
799    {   0x103,  9},
800    {   0x1f5, 10},
801    {   0x1f8, 10},
802    {   0x1f9, 10},
803    {   0x202, 10},
804    {   0x203, 10},
805    {   0x3f9, 11},
806    {   0x402, 11},
807    {   0x403, 11},
808    {   0x7ed, 12},
809    {   0x7f4, 12},
810    {   0x7f5, 12},
811    {   0x7f8, 12},
812    {   0x7f9, 12},
813    {   0x802, 12},
814    {   0x803, 12},
815    {  0x1002, 13},
816    {  0x1003, 13},
817    {  0x1ff9, 14},
818    {  0x2002, 14},
819    {  0x2003, 14},
820    {  0x3efc, 15},
821    {  0x3efd, 15},
822    {  0x3f7c, 15},
823    {  0x3f7d, 15}
824};
825
826
827
828/* Coeffs for last = 0, run = 0. Indexed by [level-1] */
829
830static const VLCtable coeff_RVLCtab14[19] =
831{
832    /* run = 0 */
833    {     0x6,  3},
834    {     0x1,  4},
835    {     0x4,  5},
836    {    0x1c,  7},
837    {    0x3c,  8},
838    {    0x3d,  8},
839    {    0x7c,  9},
840    {    0xfc, 10},
841    {    0xfd, 10},
842    {   0x1fc, 11},
843    {   0x1fd, 11},
844    {   0x3fc, 12},
845    {   0x7fc, 13},
846    {   0x7fd, 13},
847    {   0xbfc, 13},
848    {   0xbfd, 13},
849    {   0xffc, 14},
850    {   0xffd, 14},
851    {  0x1ffc, 15}
852};
853
854static const VLCtable coeff_RVLCtab15[10] =
855{
856    /* run = 1 */
857    {     0x7,  3},
858    {     0xc,  6},
859    {    0x5c,  8},
860    {    0x7d,  9},
861    {   0x17c, 10},
862    {   0x2fc, 11},
863    {   0x3fd, 12},
864    {   0xdfc, 13},
865    {  0x17fc, 14},
866    {  0x17fd, 14}
867};
868
869static const VLCtable coeff_RVLCtab16[2][7] =
870{
871    /* run = 2 */
872    {
873        {     0xa,  4},
874        {    0x1d,  7},
875        {    0xbc,  9},
876        {   0x2fd, 11},
877        {   0x5fc, 12},
878        {  0x1bfc, 14},
879        {  0x1bfd, 14}
880    },
881    /* run = 3 */
882    {
883        {     0x5,  5},
884        {    0x5d,  8},
885        {   0x17d, 10},
886        {   0x5fd, 12},
887        {   0xdfd, 13},
888        {  0x1dfc, 14},
889        {  0x1ffd, 15}
890    }
891};
892
893static const VLCtable coeff_RVLCtab17[5] =
894{
895    /* run = 4 */
896    {     0x8,  5},
897    {    0x6c,  8},
898    {   0x37c, 11},
899    {   0xefc, 13},
900    {  0x2ffc, 15}
901};
902
903static const VLCtable coeff_RVLCtab18[3][4] =
904{
905    /* run = 5 */
906    {
907        {     0x9,  5},
908        {    0xbd,  9},
909        {   0x37d, 11},
910        {   0xefd, 13}
911    },
912    /* run = 6 */
913    {
914        {     0xd,  6},
915        {   0x1bc, 10},
916        {   0x6fc, 12},
917        {  0x1dfd, 14}
918    },
919    /* run = 7 */
920    {
921        {    0x14,  6},
922        {   0x1bd, 10},
923        {   0x6fd, 12},
924        {  0x2ffd, 15}
925    }
926};
927
928static const VLCtable coeff_RVLCtab19[2][3] =
929{
930    /* run = 8 */
931    {
932        {    0x15,  6},
933        {   0x1dc, 10},
934        {   0xf7c, 13}
935    },
936    /* run = 9 */
937    {
938        {    0x2c,  7},
939        {   0x1dd, 10},
940        {  0x1efc, 14}
941    }
942};
943
944static const VLCtable coeff_RVLCtab20[8][2] =
945{
946    /* run = 10 */
947    {
948        {    0x2d,  7},
949        {   0x3bc, 11}
950    },
951    /* run = 11 */
952    {
953        {    0x34,  7},
954        {   0x77c, 12}
955    },
956    /* run = 12 */
957    {
958        {    0x6d,  8},
959        {   0xf7d, 13}
960    },
961    /* run = 13 */
962    {
963        {    0x74,  8},
964        {  0x1efd, 14}
965    },
966    /* run = 14 */
967    {
968        {    0x75,  8},
969        {  0x1f7c, 14}
970    },
971    /* run = 15 */
972    {
973        {    0xdc,  9},
974        {  0x1f7d, 14}
975    },
976    /* run = 16 */
977    {
978        {    0xdd,  9},
979        {  0x1fbc, 14}
980    },
981    /* run = 17 */
982    {
983        {    0xec,  9},
984        {  0x37fc, 15}
985    }
986};
987
988static const VLCtable coeff_RVLCtab21[21] =
989{
990    /* run = 18 -> 38 */
991    {   0x1ec, 10},
992    {   0x1ed, 10},
993    {   0x1f4, 10},
994    {   0x3bd, 11},
995    {   0x3dc, 11},
996    {   0x3dd, 11},
997    {   0x3ec, 11},
998    {   0x3ed, 11},
999    {   0x3f4, 11},
1000    {   0x77d, 12},
1001    {   0x7bc, 12},
1002    {   0x7bd, 12},
1003    {   0xfbc, 13},
1004    {   0xfbd, 13},
1005    {   0xfdc, 13},
1006    {   0xfdd, 13},
1007    {  0x1fbd, 14},
1008    {  0x1fdc, 14},
1009    {  0x1fdd, 14},
1010    {  0x37fd, 15},
1011    {  0x3bfc, 15}
1012};
1013
1014
1015/* first coeffs of last = 1. indexing by [run][level-1] */
1016
1017static const VLCtable coeff_RVLCtab22[2][5] =
1018{
1019    /* run = 0 */
1020    {
1021        {     0xb,  4},
1022        {    0x78,  8},
1023        {   0x3f5, 11},
1024        {   0xfec, 13},
1025        {  0x1fec, 14}
1026    },
1027    /* run = 1 */
1028    {
1029        {    0x12,  5},
1030        {    0xed,  9},
1031        {   0x7dc, 12},
1032        {  0x1fed, 14},
1033        {  0x3bfd, 15}
1034    }
1035
1036};
1037
1038static const VLCtable coeff_RVLCtab23[3] =
1039{
1040    /* run = 2 */
1041    {    0x13,  5},
1042    {   0x3f8, 11},
1043    {  0x3dfc, 15}
1044
1045};
1046
1047static const VLCtable coeff_RVLCtab24[11][2] =
1048{
1049    /* run = 3 */
1050    {
1051        {    0x18,  6},
1052        {   0x7dd, 12}
1053    },
1054    /* run = 4 */
1055    {
1056        {    0x19,  6},
1057        {   0x7ec, 12}
1058    },
1059    /* run = 5 */
1060    {
1061        {    0x22,  6},
1062        {   0xfed, 13}
1063    },
1064    /* run = 6 */
1065    {
1066        {    0x23,  6},
1067        {   0xff4, 13}
1068    },
1069    /* run = 7 */
1070    {
1071        {    0x35,  7},
1072        {   0xff5, 13}
1073    },
1074    /* run = 8 */
1075    {
1076        {    0x38,  7},
1077        {   0xff8, 13}
1078    },
1079    /* run = 9 */
1080    {
1081        {    0x39,  7},
1082        {   0xff9, 13}
1083    },
1084    /* run = 10 */
1085    {
1086        {    0x42,  7},
1087        {  0x1ff4, 14}
1088    },
1089    /* run = 11 */
1090    {
1091        {    0x43,  7},
1092        {  0x1ff5, 14}
1093    },
1094    /* run = 12 */
1095    {
1096        {    0x79,  8},
1097        {  0x1ff8, 14}
1098    },
1099    /* run = 13 */
1100    {
1101        {    0x82,  8},
1102        {  0x3dfd, 15}
1103    }
1104
1105};
1106
1107static const VLCtable coeff_RVLCtab25[32] =
1108{
1109    /* run = 14 -> 44 */
1110    {    0x83,  8},
1111    {    0xf4,  9},
1112    {    0xf5,  9},
1113    {    0xf8,  9},
1114    {    0xf9,  9},
1115    {   0x102,  9},
1116    {   0x103,  9},
1117    {   0x1f5, 10},
1118    {   0x1f8, 10},
1119    {   0x1f9, 10},
1120    {   0x202, 10},
1121    {   0x203, 10},
1122    {   0x3f9, 11},
1123    {   0x402, 11},
1124    {   0x403, 11},
1125    {   0x7ed, 12},
1126    {   0x7f4, 12},
1127    {   0x7f5, 12},
1128    {   0x7f8, 12},
1129    {   0x7f9, 12},
1130    {   0x802, 12},
1131    {   0x803, 12},
1132    {  0x1002, 13},
1133    {  0x1003, 13},
1134    {  0x1ff9, 14},
1135    {  0x2002, 14},
1136    {  0x2003, 14},
1137    {  0x3efc, 15},
1138    {  0x3efd, 15},
1139    {  0x3f7c, 15},
1140    {  0x3f7d, 15}
1141};
1142
1143#endif /* NO_RVLC */
1144
1145#endif /* _VLC_ENC_TAB_H_ */
1146
1147