1 /* vlc.h, variable length code tables (used by routines in putvlc.c) */
3 /* Copyright (C) 1996, MPEG Software Simulation Group. All Rights Reserved. */
6 * Disclaimer of Warranty
8 * These software programs are available to the user without any license fee or
9 * royalty on an "as is" basis. The MPEG Software Simulation Group disclaims
10 * any and all warranties, whether express, implied, or statuary, including any
11 * implied warranties or merchantability or of fitness for a particular
12 * purpose. In no event shall the copyright-holder be liable for any
13 * incidental, punitive, or consequential damages of any kind whatsoever
14 * arising from the use of these programs.
16 * This disclaimer of warranty extends to the user of these programs and user's
17 * customers, employees, agents, transferees, successors, and assigns.
19 * The MPEG Software Simulation Group does not represent or warrant that the
20 * programs furnished hereunder are free of infringement of any third-party
23 * Commercial implementations of MPEG-1 and MPEG-2 video, including shareware,
24 * are subject to royalty fees to patent holders. Many of these patents are
25 * general enough such that they are unavoidable regardless of implementation
30 /* type definitions for variable length code table entries */
34 unsigned char code; /* right justified */
38 /* for codes longer than 8 bits (excluding leading zeroes) */
41 unsigned short code; /* right justified */
46 /* data from ISO/IEC 13818-2 DIS, Annex B, variable length code tables */
48 /* Table B-1, variable length codes for macroblock_address_increment
50 * indexed by [macroblock_address_increment-1]
51 * 'macroblock_escape' is treated elsewhere
54 const static VLCtable addrinctab[33]=
56 {0x01,1}, {0x03,3}, {0x02,3}, {0x03,4},
57 {0x02,4}, {0x03,5}, {0x02,5}, {0x07,7},
58 {0x06,7}, {0x0b,8}, {0x0a,8}, {0x09,8},
59 {0x08,8}, {0x07,8}, {0x06,8}, {0x17,10},
60 {0x16,10}, {0x15,10}, {0x14,10}, {0x13,10},
61 {0x12,10}, {0x23,11}, {0x22,11}, {0x21,11},
62 {0x20,11}, {0x1f,11}, {0x1e,11}, {0x1d,11},
63 {0x1c,11}, {0x1b,11}, {0x1a,11}, {0x19,11},
68 /* Table B-2, B-3, B-4 variable length codes for macroblock_type
70 * indexed by [macroblock_type]
73 const static VLCtable mbtypetab[3][32]=
77 {0,0}, {1,1}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0},
78 {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0},
79 {0,0}, {1,2}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0},
80 {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}
84 {0,0}, {3,5}, {1,2}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0},
85 {1,3}, {0,0}, {1,1}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0},
86 {0,0}, {1,6}, {1,5}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0},
87 {0,0}, {0,0}, {2,5}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}
91 {0,0}, {3,5}, {0,0}, {0,0}, {2,3}, {0,0}, {3,3}, {0,0},
92 {2,4}, {0,0}, {3,4}, {0,0}, {2,2}, {0,0}, {3,2}, {0,0},
93 {0,0}, {1,6}, {0,0}, {0,0}, {0,0}, {0,0}, {2,6}, {0,0},
94 {0,0}, {0,0}, {3,6}, {0,0}, {0,0}, {0,0}, {2,5}, {0,0}
99 /* Table B-5 ... B-8 variable length codes for macroblock_type in
105 /* Table B-9, variable length codes for coded_block_pattern
107 * indexed by [coded_block_pattern]
110 const static VLCtable cbptable[64]=
112 {0x01,9}, {0x0b,5}, {0x09,5}, {0x0d,6},
113 {0x0d,4}, {0x17,7}, {0x13,7}, {0x1f,8},
114 {0x0c,4}, {0x16,7}, {0x12,7}, {0x1e,8},
115 {0x13,5}, {0x1b,8}, {0x17,8}, {0x13,8},
116 {0x0b,4}, {0x15,7}, {0x11,7}, {0x1d,8},
117 {0x11,5}, {0x19,8}, {0x15,8}, {0x11,8},
118 {0x0f,6}, {0x0f,8}, {0x0d,8}, {0x03,9},
119 {0x0f,5}, {0x0b,8}, {0x07,8}, {0x07,9},
120 {0x0a,4}, {0x14,7}, {0x10,7}, {0x1c,8},
121 {0x0e,6}, {0x0e,8}, {0x0c,8}, {0x02,9},
122 {0x10,5}, {0x18,8}, {0x14,8}, {0x10,8},
123 {0x0e,5}, {0x0a,8}, {0x06,8}, {0x06,9},
124 {0x12,5}, {0x1a,8}, {0x16,8}, {0x12,8},
125 {0x0d,5}, {0x09,8}, {0x05,8}, {0x05,9},
126 {0x0c,5}, {0x08,8}, {0x04,8}, {0x04,9},
127 {0x07,3}, {0x0a,5}, {0x08,5}, {0x0c,6}
131 /* Table B-14, DCT coefficients table zero
133 * indexed by [run][level-1]
134 * split into two tables (dct_code_tab1, dct_code_tab2) to reduce size
135 * 'first DCT coefficient' condition and 'End of Block' are treated elsewhere
136 * codes do not include s (sign bit)
139 const static VLCtable dct_code_tab1[2][40]=
141 /* run = 0, level = 1...40 */
143 {0x03, 2}, {0x04, 4}, {0x05, 5}, {0x06, 7},
144 {0x26, 8}, {0x21, 8}, {0x0a,10}, {0x1d,12},
145 {0x18,12}, {0x13,12}, {0x10,12}, {0x1a,13},
146 {0x19,13}, {0x18,13}, {0x17,13}, {0x1f,14},
147 {0x1e,14}, {0x1d,14}, {0x1c,14}, {0x1b,14},
148 {0x1a,14}, {0x19,14}, {0x18,14}, {0x17,14},
149 {0x16,14}, {0x15,14}, {0x14,14}, {0x13,14},
150 {0x12,14}, {0x11,14}, {0x10,14}, {0x18,15},
151 {0x17,15}, {0x16,15}, {0x15,15}, {0x14,15},
152 {0x13,15}, {0x12,15}, {0x11,15}, {0x10,15}
154 /* run = 1, level = 1...18 */
156 {0x03, 3}, {0x06, 6}, {0x25, 8}, {0x0c,10},
157 {0x1b,12}, {0x16,13}, {0x15,13}, {0x1f,15},
158 {0x1e,15}, {0x1d,15}, {0x1c,15}, {0x1b,15},
159 {0x1a,15}, {0x19,15}, {0x13,16}, {0x12,16},
160 {0x11,16}, {0x10,16}, {0x00, 0}, {0x00, 0},
161 {0x00, 0}, {0x00, 0}, {0x00, 0}, {0x00, 0},
162 {0x00, 0}, {0x00, 0}, {0x00, 0}, {0x00, 0},
163 {0x00, 0}, {0x00, 0}, {0x00, 0}, {0x00, 0},
164 {0x00, 0}, {0x00, 0}, {0x00, 0}, {0x00, 0},
165 {0x00, 0}, {0x00, 0}, {0x00, 0}, {0x00, 0}
169 const static VLCtable dct_code_tab2[30][5]=
171 /* run = 2...31, level = 1...5 */
172 {{0x05, 4}, {0x04, 7}, {0x0b,10}, {0x14,12}, {0x14,13}},
173 {{0x07, 5}, {0x24, 8}, {0x1c,12}, {0x13,13}, {0x00, 0}},
174 {{0x06, 5}, {0x0f,10}, {0x12,12}, {0x00, 0}, {0x00, 0}},
175 {{0x07, 6}, {0x09,10}, {0x12,13}, {0x00, 0}, {0x00, 0}},
176 {{0x05, 6}, {0x1e,12}, {0x14,16}, {0x00, 0}, {0x00, 0}},
177 {{0x04, 6}, {0x15,12}, {0x00, 0}, {0x00, 0}, {0x00, 0}},
178 {{0x07, 7}, {0x11,12}, {0x00, 0}, {0x00, 0}, {0x00, 0}},
179 {{0x05, 7}, {0x11,13}, {0x00, 0}, {0x00, 0}, {0x00, 0}},
180 {{0x27, 8}, {0x10,13}, {0x00, 0}, {0x00, 0}, {0x00, 0}},
181 {{0x23, 8}, {0x1a,16}, {0x00, 0}, {0x00, 0}, {0x00, 0}},
182 {{0x22, 8}, {0x19,16}, {0x00, 0}, {0x00, 0}, {0x00, 0}},
183 {{0x20, 8}, {0x18,16}, {0x00, 0}, {0x00, 0}, {0x00, 0}},
184 {{0x0e,10}, {0x17,16}, {0x00, 0}, {0x00, 0}, {0x00, 0}},
185 {{0x0d,10}, {0x16,16}, {0x00, 0}, {0x00, 0}, {0x00, 0}},
186 {{0x08,10}, {0x15,16}, {0x00, 0}, {0x00, 0}, {0x00, 0}},
187 {{0x1f,12}, {0x00, 0}, {0x00, 0}, {0x00, 0}, {0x00, 0}},
188 {{0x1a,12}, {0x00, 0}, {0x00, 0}, {0x00, 0}, {0x00, 0}},
189 {{0x19,12}, {0x00, 0}, {0x00, 0}, {0x00, 0}, {0x00, 0}},
190 {{0x17,12}, {0x00, 0}, {0x00, 0}, {0x00, 0}, {0x00, 0}},
191 {{0x16,12}, {0x00, 0}, {0x00, 0}, {0x00, 0}, {0x00, 0}},
192 {{0x1f,13}, {0x00, 0}, {0x00, 0}, {0x00, 0}, {0x00, 0}},
193 {{0x1e,13}, {0x00, 0}, {0x00, 0}, {0x00, 0}, {0x00, 0}},
194 {{0x1d,13}, {0x00, 0}, {0x00, 0}, {0x00, 0}, {0x00, 0}},
195 {{0x1c,13}, {0x00, 0}, {0x00, 0}, {0x00, 0}, {0x00, 0}},
196 {{0x1b,13}, {0x00, 0}, {0x00, 0}, {0x00, 0}, {0x00, 0}},
197 {{0x1f,16}, {0x00, 0}, {0x00, 0}, {0x00, 0}, {0x00, 0}},
198 {{0x1e,16}, {0x00, 0}, {0x00, 0}, {0x00, 0}, {0x00, 0}},
199 {{0x1d,16}, {0x00, 0}, {0x00, 0}, {0x00, 0}, {0x00, 0}},
200 {{0x1c,16}, {0x00, 0}, {0x00, 0}, {0x00, 0}, {0x00, 0}},
201 {{0x1b,16}, {0x00, 0}, {0x00, 0}, {0x00, 0}, {0x00, 0}}
205 /* Table B-15, DCT coefficients table one
207 * indexed by [run][level-1]
208 * split into two tables (dct_code_tab1a, dct_code_tab2a) to reduce size
209 * 'End of Block' is treated elsewhere
210 * codes do not include s (sign bit)
213 const static VLCtable dct_code_tab1a[2][40]=
215 /* run = 0, level = 1...40 */
217 {0x02, 2}, {0x06, 3}, {0x07, 4}, {0x1c, 5},
218 {0x1d, 5}, {0x05, 6}, {0x04, 6}, {0x7b, 7},
219 {0x7c, 7}, {0x23, 8}, {0x22, 8}, {0xfa, 8},
220 {0xfb, 8}, {0xfe, 8}, {0xff, 8}, {0x1f,14},
221 {0x1e,14}, {0x1d,14}, {0x1c,14}, {0x1b,14},
222 {0x1a,14}, {0x19,14}, {0x18,14}, {0x17,14},
223 {0x16,14}, {0x15,14}, {0x14,14}, {0x13,14},
224 {0x12,14}, {0x11,14}, {0x10,14}, {0x18,15},
225 {0x17,15}, {0x16,15}, {0x15,15}, {0x14,15},
226 {0x13,15}, {0x12,15}, {0x11,15}, {0x10,15}
228 /* run = 1, level = 1...18 */
230 {0x02, 3}, {0x06, 5}, {0x79, 7}, {0x27, 8},
231 {0x20, 8}, {0x16,13}, {0x15,13}, {0x1f,15},
232 {0x1e,15}, {0x1d,15}, {0x1c,15}, {0x1b,15},
233 {0x1a,15}, {0x19,15}, {0x13,16}, {0x12,16},
234 {0x11,16}, {0x10,16}, {0x00, 0}, {0x00, 0},
235 {0x00, 0}, {0x00, 0}, {0x00, 0}, {0x00, 0},
236 {0x00, 0}, {0x00, 0}, {0x00, 0}, {0x00, 0},
237 {0x00, 0}, {0x00, 0}, {0x00, 0}, {0x00, 0},
238 {0x00, 0}, {0x00, 0}, {0x00, 0}, {0x00, 0},
239 {0x00, 0}, {0x00, 0}, {0x00, 0}, {0x00, 0}
243 const static VLCtable dct_code_tab2a[30][5]=
245 /* run = 2...31, level = 1...5 */
246 {{0x05, 5}, {0x07, 7}, {0xfc, 8}, {0x0c,10}, {0x14,13}},
247 {{0x07, 5}, {0x26, 8}, {0x1c,12}, {0x13,13}, {0x00, 0}},
248 {{0x06, 6}, {0xfd, 8}, {0x12,12}, {0x00, 0}, {0x00, 0}},
249 {{0x07, 6}, {0x04, 9}, {0x12,13}, {0x00, 0}, {0x00, 0}},
250 {{0x06, 7}, {0x1e,12}, {0x14,16}, {0x00, 0}, {0x00, 0}},
251 {{0x04, 7}, {0x15,12}, {0x00, 0}, {0x00, 0}, {0x00, 0}},
252 {{0x05, 7}, {0x11,12}, {0x00, 0}, {0x00, 0}, {0x00, 0}},
253 {{0x78, 7}, {0x11,13}, {0x00, 0}, {0x00, 0}, {0x00, 0}},
254 {{0x7a, 7}, {0x10,13}, {0x00, 0}, {0x00, 0}, {0x00, 0}},
255 {{0x21, 8}, {0x1a,16}, {0x00, 0}, {0x00, 0}, {0x00, 0}},
256 {{0x25, 8}, {0x19,16}, {0x00, 0}, {0x00, 0}, {0x00, 0}},
257 {{0x24, 8}, {0x18,16}, {0x00, 0}, {0x00, 0}, {0x00, 0}},
258 {{0x05, 9}, {0x17,16}, {0x00, 0}, {0x00, 0}, {0x00, 0}},
259 {{0x07, 9}, {0x16,16}, {0x00, 0}, {0x00, 0}, {0x00, 0}},
260 {{0x0d,10}, {0x15,16}, {0x00, 0}, {0x00, 0}, {0x00, 0}},
261 {{0x1f,12}, {0x00, 0}, {0x00, 0}, {0x00, 0}, {0x00, 0}},
262 {{0x1a,12}, {0x00, 0}, {0x00, 0}, {0x00, 0}, {0x00, 0}},
263 {{0x19,12}, {0x00, 0}, {0x00, 0}, {0x00, 0}, {0x00, 0}},
264 {{0x17,12}, {0x00, 0}, {0x00, 0}, {0x00, 0}, {0x00, 0}},
265 {{0x16,12}, {0x00, 0}, {0x00, 0}, {0x00, 0}, {0x00, 0}},
266 {{0x1f,13}, {0x00, 0}, {0x00, 0}, {0x00, 0}, {0x00, 0}},
267 {{0x1e,13}, {0x00, 0}, {0x00, 0}, {0x00, 0}, {0x00, 0}},
268 {{0x1d,13}, {0x00, 0}, {0x00, 0}, {0x00, 0}, {0x00, 0}},
269 {{0x1c,13}, {0x00, 0}, {0x00, 0}, {0x00, 0}, {0x00, 0}},
270 {{0x1b,13}, {0x00, 0}, {0x00, 0}, {0x00, 0}, {0x00, 0}},
271 {{0x1f,16}, {0x00, 0}, {0x00, 0}, {0x00, 0}, {0x00, 0}},
272 {{0x1e,16}, {0x00, 0}, {0x00, 0}, {0x00, 0}, {0x00, 0}},
273 {{0x1d,16}, {0x00, 0}, {0x00, 0}, {0x00, 0}, {0x00, 0}},
274 {{0x1c,16}, {0x00, 0}, {0x00, 0}, {0x00, 0}, {0x00, 0}},
275 {{0x1b,16}, {0x00, 0}, {0x00, 0}, {0x00, 0}, {0x00, 0}}
278 /* MPEG-4 matrices */
279 static const uint8_t mpeg4_default_intra_matrix[64] = {
280 8, 17, 18, 19, 21, 23, 25, 27,
281 17, 18, 19, 21, 23, 25, 27, 28,
282 20, 21, 22, 23, 24, 26, 28, 30,
283 21, 22, 23, 24, 26, 28, 30, 32,
284 22, 23, 24, 26, 28, 30, 32, 35,
285 23, 24, 26, 28, 30, 32, 35, 38,
286 25, 26, 28, 30, 32, 35, 38, 41,
287 27, 28, 30, 32, 35, 38, 41, 45,
290 static const uint8_t mpeg4_default_non_intra_matrix[64] = {
291 16, 17, 18, 19, 20, 21, 22, 23,
292 17, 18, 19, 20, 21, 22, 23, 24,
293 18, 19, 20, 21, 22, 23, 24, 25,
294 19, 20, 21, 22, 23, 24, 26, 27,
295 20, 21, 22, 23, 25, 26, 27, 28,
296 21, 22, 23, 24, 26, 27, 28, 30,
297 22, 23, 24, 26, 27, 28, 30, 31,
298 23, 24, 25, 27, 28, 30, 31, 33,