Imported Debian version 2.4.3~trusty1
[deb_ffmpeg.git] / ffmpeg / libavcodec / indeo4data.h
CommitLineData
2ba45a60
DM
1/*
2 * Indeo Video Interactive 4 compatible decoder
3 * Copyright (c) 2009-2010 Maxim Poliakovski
4 *
5 * This file is part of FFmpeg.
6 *
7 * FFmpeg is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
11 *
12 * FFmpeg is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with FFmpeg; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 */
21
22/**
23 * @file
24 * This file contains data needed for the Indeo 4 decoder.
25 */
26
27#ifndef AVCODEC_INDEO4DATA_H
28#define AVCODEC_INDEO4DATA_H
29
30#include <stdint.h>
31
32#include "ivi_common.h"
33#include "mathops.h"
34
35/**
36 * standard picture dimensions
37 */
38static const uint16_t ivi4_common_pic_sizes[14] = {
39 640, 480, 320, 240, 160, 120, 704, 480, 352, 240, 352, 288, 176, 144
40};
41
42/**
43 * Indeo 4 8x8 scan (zigzag) patterns
44 */
45static const uint8_t ivi4_alternate_scan_8x8[64] = {
46 0, 8, 1, 9, 16, 24, 2, 3, 17, 25, 10, 11, 32, 40, 48, 56,
47 4, 5, 6, 7, 33, 41, 49, 57, 18, 19, 26, 27, 12, 13, 14, 15,
48 34, 35, 43, 42, 50, 51, 59, 58, 20, 21, 22, 23, 31, 30, 29, 28,
49 36, 37, 38, 39, 47, 46, 45, 44, 52, 53, 54, 55, 63, 62, 61, 60
50};
51
52static const uint8_t ivi4_alternate_scan_4x4[16] = {
53 0, 1, 4, 5, 8, 12, 2, 3, 9, 13, 6, 7, 10, 11, 14, 15
54};
55
56static const uint8_t ivi4_vertical_scan_4x4[16] = {
57 0, 4, 8, 12, 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15
58};
59
60static const uint8_t ivi4_horizontal_scan_4x4[16] = {
61 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
62};
63
64static const uint8_t * const scan_index_to_tab[15] = {
65 // for 8x8 transforms
66 ff_zigzag_direct,
67 ivi4_alternate_scan_8x8,
68 ff_ivi_horizontal_scan_8x8,
69 ff_ivi_vertical_scan_8x8,
70 ff_zigzag_direct,
71
72 // for 4x4 transforms
73 ff_ivi_direct_scan_4x4,
74 ivi4_alternate_scan_4x4,
75 ivi4_vertical_scan_4x4,
76 ivi4_horizontal_scan_4x4,
77 ff_ivi_direct_scan_4x4,
78
79 // TODO: check if those are needed
80 ff_ivi_horizontal_scan_8x8,
81 ff_ivi_horizontal_scan_8x8,
82 ff_ivi_horizontal_scan_8x8,
83 ff_ivi_horizontal_scan_8x8,
84 ff_ivi_horizontal_scan_8x8
85};
86
87/**
88 * Indeo 4 dequant tables
89 */
90static const uint16_t ivi4_quant_8x8_intra[9][64] = {
91 {
92 43, 342, 385, 470, 555, 555, 598, 726,
93 342, 342, 470, 513, 555, 598, 726, 769,
94 385, 470, 555, 555, 598, 726, 726, 811,
95 470, 470, 555, 555, 598, 726, 769, 854,
96 470, 555, 555, 598, 683, 726, 854, 1025,
97 555, 555, 598, 683, 726, 854, 1025, 1153,
98 555, 555, 598, 726, 811, 982, 1195, 1451,
99 555, 598, 726, 811, 982, 1195, 1451, 1793
100 },
101 {
102 86, 1195, 2390, 2390, 4865, 4865, 4865, 4865,
103 1195, 1195, 2390, 2390, 4865, 4865, 4865, 4865,
104 2390, 2390, 4865, 4865, 6827, 6827, 6827, 6827,
105 2390, 2390, 4865, 4865, 6827, 6827, 6827, 6827,
106 4865, 4865, 6827, 6827, 6827, 6827, 6827, 6827,
107 4865, 4865, 6827, 6827, 6827, 6827, 6827, 6827,
108 4865, 4865, 6827, 6827, 6827, 6827, 6827, 6827,
109 4865, 4865, 6827, 6827, 6827, 6827, 6827, 6827
110 },
111 {
112 235, 1067, 1195, 1323, 1451, 1579, 1707, 1835,
113 235, 1067, 1195, 1323, 1451, 1579, 1707, 1835,
114 235, 1067, 1195, 1323, 1451, 1579, 1707, 1835,
115 235, 1067, 1195, 1323, 1451, 1579, 1707, 1835,
116 235, 1067, 1195, 1323, 1451, 1579, 1707, 1835,
117 235, 1067, 1195, 1323, 1451, 1579, 1707, 1835,
118 235, 1067, 1195, 1323, 1451, 1579, 1707, 1835,
119 235, 1067, 1195, 1323, 1451, 1579, 1707, 1835
120 },
121 {
122 1707, 1707, 3414, 3414, 3414, 3414, 3414, 3414,
123 1707, 1707, 3414, 3414, 3414, 3414, 3414, 3414,
124 1707, 1707, 3414, 3414, 3414, 3414, 3414, 3414,
125 1707, 1707, 3414, 3414, 3414, 3414, 3414, 3414,
126 1707, 1707, 3414, 3414, 3414, 3414, 3414, 3414,
127 1707, 1707, 3414, 3414, 3414, 3414, 3414, 3414,
128 1707, 1707, 3414, 3414, 3414, 3414, 3414, 3414,
129 1707, 1707, 3414, 3414, 3414, 3414, 3414, 3414
130 },
131 {
132 897, 897, 897, 897, 897, 897, 897, 897,
133 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067,
134 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238,
135 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
136 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579,
137 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
138 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921,
139 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091
140 },
141 {
142 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707,
143 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707,
144 3414, 3414, 3414, 3414, 3414, 3414, 3414, 3414,
145 3414, 3414, 3414, 3414, 3414, 3414, 3414, 3414,
146 3414, 3414, 3414, 3414, 3414, 3414, 3414, 3414,
147 3414, 3414, 3414, 3414, 3414, 3414, 3414, 3414,
148 3414, 3414, 3414, 3414, 3414, 3414, 3414, 3414,
149 3414, 3414, 3414, 3414, 3414, 3414, 3414, 3414
150 },
151 {
152 2390, 2390, 2390, 2390, 2390, 2390, 2390, 2390,
153 2390, 2390, 2390, 2390, 2390, 2390, 2390, 2390,
154 2390, 2390, 2390, 2390, 2390, 2390, 2390, 2390,
155 2390, 2390, 2390, 2390, 2390, 2390, 2390, 2390,
156 2390, 2390, 2390, 2390, 2390, 2390, 2390, 2390,
157 2390, 2390, 2390, 2390, 2390, 2390, 2390, 2390,
158 2390, 2390, 2390, 2390, 2390, 2390, 2390, 2390,
159 2390, 2390, 2390, 2390, 2390, 2390, 2390, 2390
160 },
161 {
162 22, 171, 214, 257, 257, 299, 299, 342,
163 171, 171, 257, 257, 299, 299, 342, 385,
164 214, 257, 257, 299, 299, 342, 342, 385,
165 257, 257, 257, 299, 299, 342, 385, 427,
166 257, 257, 299, 299, 342, 385, 427, 513,
167 257, 299, 299, 342, 385, 427, 513, 598,
168 299, 299, 299, 385, 385, 470, 598, 726,
169 299, 299, 385, 385, 470, 598, 726, 897
170 },
171 {
172 86, 598, 1195, 1195, 2390, 2390, 2390, 2390,
173 598, 598, 1195, 1195, 2390, 2390, 2390, 2390,
174 1195, 1195, 2390, 2390, 3414, 3414, 3414, 3414,
175 1195, 1195, 2390, 2390, 3414, 3414, 3414, 3414,
176 2390, 2390, 3414, 3414, 3414, 3414, 3414, 3414,
177 2390, 2390, 3414, 3414, 3414, 3414, 3414, 3414,
178 2390, 2390, 3414, 3414, 3414, 3414, 3414, 3414,
179 2390, 2390, 3414, 3414, 3414, 3414, 3414, 3414
180 }
181};
182
183static const uint16_t ivi4_quant_8x8_inter[9][64] = {
184 {
185 427, 427, 470, 427, 427, 427, 470, 470,
186 427, 427, 470, 427, 427, 427, 470, 470,
187 470, 470, 470, 470, 470, 470, 470, 470,
188 427, 427, 470, 470, 427, 427, 470, 470,
189 427, 427, 470, 427, 427, 427, 470, 470,
190 427, 427, 470, 427, 427, 427, 470, 470,
191 470, 470, 470, 470, 470, 470, 470, 470,
192 470, 470, 470, 470, 470, 470, 470, 470
193 },
194 {
195 1707, 1707, 2433, 2433, 3414, 3414, 3414, 3414,
196 1707, 1707, 2433, 2433, 3414, 3414, 3414, 3414,
197 2433, 2433, 3414, 3414, 4822, 4822, 4822, 4822,
198 2433, 2433, 3414, 3414, 4822, 4822, 4822, 4822,
199 3414, 3414, 4822, 4822, 3414, 3414, 3414, 3414,
200 3414, 3414, 4822, 4822, 3414, 3414, 3414, 3414,
201 3414, 3414, 4822, 4822, 3414, 3414, 3414, 3414,
202 3414, 3414, 4822, 4822, 3414, 3414, 3414, 3414
203 },
204 {
205 1195, 1195, 1281, 1238, 1195, 1195, 1281, 1281,
206 1195, 1195, 1281, 1238, 1195, 1195, 1281, 1281,
207 1195, 1195, 1281, 1238, 1195, 1195, 1281, 1281,
208 1195, 1195, 1281, 1238, 1195, 1195, 1281, 1281,
209 1195, 1195, 1281, 1238, 1195, 1195, 1281, 1281,
210 1195, 1195, 1281, 1238, 1195, 1195, 1281, 1281,
211 1195, 1195, 1281, 1238, 1195, 1195, 1281, 1281,
212 1195, 1195, 1281, 1238, 1195, 1195, 1281, 1281
213 },
214 {
215 2433, 2433, 3414, 3414, 2433, 2433, 2433, 2433,
216 2433, 2433, 3414, 3414, 2433, 2433, 2433, 2433,
217 2433, 2433, 3414, 3414, 2433, 2433, 2433, 2433,
218 2433, 2433, 3414, 3414, 2433, 2433, 2433, 2433,
219 2433, 2433, 3414, 3414, 2433, 2433, 2433, 2433,
220 2433, 2433, 3414, 3414, 2433, 2433, 2433, 2433,
221 2433, 2433, 3414, 3414, 2433, 2433, 2433, 2433,
222 2433, 2433, 3414, 3414, 2433, 2433, 2433, 2433
223 },
224 {
225 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195,
226 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195,
227 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281,
228 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238,
229 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195,
230 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195,
231 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281,
232 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281
233 },
234 {
235 2433, 2433, 2433, 2433, 2433, 2433, 2433, 2433,
236 2433, 2433, 2433, 2433, 2433, 2433, 2433, 2433,
237 3414, 3414, 3414, 3414, 3414, 3414, 3414, 3414,
238 3414, 3414, 3414, 3414, 3414, 3414, 3414, 3414,
239 2433, 2433, 2433, 2433, 2433, 2433, 2433, 2433,
240 2433, 2433, 2433, 2433, 2433, 2433, 2433, 2433,
241 2433, 2433, 2433, 2433, 2433, 2433, 2433, 2433,
242 2433, 2433, 2433, 2433, 2433, 2433, 2433, 2433
243 },
244 {
245 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707,
246 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707,
247 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707,
248 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707,
249 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707,
250 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707,
251 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707,
252 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707
253 },
254 {
255 86, 171, 171, 214, 214, 214, 214, 257,
256 171, 171, 214, 214, 214, 214, 257, 257,
257 171, 214, 214, 214, 214, 257, 257, 257,
258 214, 214, 214, 214, 257, 257, 257, 299,
259 214, 214, 214, 257, 257, 257, 299, 299,
260 214, 214, 257, 257, 257, 299, 299, 299,
261 214, 257, 257, 257, 299, 299, 299, 342,
262 257, 257, 257, 299, 299, 299, 342, 342
263 },
264 {
265 854, 854, 1195, 1195, 1707, 1707, 1707, 1707,
266 854, 854, 1195, 1195, 1707, 1707, 1707, 1707,
267 1195, 1195, 1707, 1707, 2390, 2390, 2390, 2390,
268 1195, 1195, 1707, 1707, 2390, 2390, 2390, 2390,
269 1707, 1707, 2390, 2390, 1707, 1707, 1707, 1707,
270 1707, 1707, 2390, 2390, 1707, 1707, 1707, 1707,
271 1707, 1707, 2390, 2390, 1707, 1707, 1707, 1707,
272 1707, 1707, 2390, 2390, 1707, 1707, 1707, 1707
273 }
274};
275
276static const uint16_t ivi4_quant_4x4_intra[5][16] = {
277 {
278 22, 214, 257, 299,
279 214, 257, 299, 342,
280 257, 299, 342, 427,
281 299, 342, 427, 513
282 },
283 {
284 129, 1025, 1451, 1451,
285 1025, 1025, 1451, 1451,
286 1451, 1451, 2049, 2049,
287 1451, 1451, 2049, 2049
288 },
289 {
290 43, 171, 171, 171,
291 43, 171, 171, 171,
292 43, 171, 171, 171,
293 43, 171, 171, 171
294 },
295 {
296 43, 43, 43, 43,
297 171, 171, 171, 171,
298 171, 171, 171, 171,
299 171, 171, 171, 171
300 },
301 {
302 43, 43, 43, 43,
303 43, 43, 43, 43,
304 43, 43, 43, 43,
305 43, 43, 43, 43
306 }
307};
308
309static const uint16_t ivi4_quant_4x4_inter[5][16] = {
310 {
311 107, 214, 257, 299,
312 214, 257, 299, 299,
313 257, 299, 299, 342,
314 299, 299, 342, 342
315 },
316 {
317 513, 1025, 1238, 1238,
318 1025, 1025, 1238, 1238,
319 1238, 1238, 1451, 1451,
320 1238, 1238, 1451, 1451
321 },
322 {
323 43, 171, 171, 171,
324 43, 171, 171, 171,
325 43, 171, 171, 171,
326 43, 171, 171, 171
327 },
328 {
329 43, 43, 43, 43,
330 171, 171, 171, 171,
331 171, 171, 171, 171,
332 171, 171, 171, 171
333 },
334 {
335 43, 43, 43, 43,
336 43, 43, 43, 43,
337 43, 43, 43, 43,
338 43, 43, 43, 43
339 }
340};
341
342/**
343 * Table for mapping quant matrix index from the bitstream
344 * into internal quant table number.
345 */
346static const uint8_t quant_index_to_tab[22] = {
347 0, 1, 0, 2, 1, 3, 0, 4, 1, 5, 0, 1, 6, 7, 8, // for 8x8 quant matrixes
348 0, 1, 2, 2, 3, 3, 4 // for 4x4 quant matrixes
349};
350
351#endif /* AVCODEC_INDEO4DATA_H */