FFmpeg
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
indeo4data.h
Go to the documentation of this file.
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  */
38 static 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  */
45 static 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 
52 static 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 
56 static 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 
60 static 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 
64 static const uint8_t * const scan_index_to_tab[15] = {
65  // for 8x8 transforms
71 
72  // for 4x4 transforms
78 
79  // TODO: check if those are needed
84  ff_ivi_horizontal_scan_8x8
85 };
86 
87 /**
88  * Indeo 4 dequant tables
89  */
90 static 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 
183 static 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 
276 static 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 
309 static 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  */
346 static 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 */