Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
4349 Serge 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 
31
#include "dsputil.h"
32
#include "ivi_common.h"
33
 
34
/**
35
 *  standard picture dimensions
36
 */
37
static const uint16_t ivi4_common_pic_sizes[14] = {
38
    640, 480, 320, 240, 160, 120, 704, 480, 352, 240, 352, 288, 176, 144
39
};
40
 
41
/**
42
 *  Indeo 4 8x8 scan (zigzag) patterns
43
 */
44
static const uint8_t ivi4_alternate_scan_8x8[64] = {
45
     0,  8,  1,  9, 16, 24,  2,  3, 17, 25, 10, 11, 32, 40, 48, 56,
46
     4,  5,  6,  7, 33, 41, 49, 57, 18, 19, 26, 27, 12, 13, 14, 15,
47
    34, 35, 43, 42, 50, 51, 59, 58, 20, 21, 22, 23, 31, 30, 29, 28,
48
    36, 37, 38, 39, 47, 46, 45, 44, 52, 53, 54, 55, 63, 62, 61, 60
49
};
50
 
51
static const uint8_t ivi4_alternate_scan_4x4[16] = {
52
    0, 1, 4, 5, 8, 12, 2, 3, 9, 13, 6, 7, 10, 11, 14, 15
53
};
54
 
55
static const uint8_t ivi4_vertical_scan_4x4[16] = {
56
    0, 4, 8, 12, 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15
57
};
58
 
59
static const uint8_t ivi4_horizontal_scan_4x4[16] = {
60
    0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
61
};
62
 
63
static const uint8_t *scan_index_to_tab[15] = {
64
    // for 8x8 transforms
65
    ff_zigzag_direct,
66
    ivi4_alternate_scan_8x8,
67
    ff_ivi_horizontal_scan_8x8,
68
    ff_ivi_vertical_scan_8x8,
69
    ff_zigzag_direct,
70
 
71
    // for 4x4 transforms
72
    ff_ivi_direct_scan_4x4,
73
    ivi4_alternate_scan_4x4,
74
    ivi4_vertical_scan_4x4,
75
    ivi4_horizontal_scan_4x4,
76
    ff_ivi_direct_scan_4x4,
77
 
78
    // TODO: check if those are needed
79
    ff_ivi_horizontal_scan_8x8,
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
};
85
 
86
/**
87
 *  Indeo 4 dequant tables
88
 */
89
static const uint16_t ivi4_quant_8x8_intra[9][64] = {
90
  {
91
      43,  342,  385,  470,  555,  555,  598,  726,
92
     342,  342,  470,  513,  555,  598,  726,  769,
93
     385,  470,  555,  555,  598,  726,  726,  811,
94
     470,  470,  555,  555,  598,  726,  769,  854,
95
     470,  555,  555,  598,  683,  726,  854, 1025,
96
     555,  555,  598,  683,  726,  854, 1025, 1153,
97
     555,  555,  598,  726,  811,  982, 1195, 1451,
98
     555,  598,  726,  811,  982, 1195, 1451, 1793
99
  },
100
  {
101
      86, 1195, 2390, 2390, 4865, 4865, 4865, 4865,
102
    1195, 1195, 2390, 2390, 4865, 4865, 4865, 4865,
103
    2390, 2390, 4865, 4865, 6827, 6827, 6827, 6827,
104
    2390, 2390, 4865, 4865, 6827, 6827, 6827, 6827,
105
    4865, 4865, 6827, 6827, 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
  },
110
  {
111
     235, 1067, 1195, 1323, 1451, 1579, 1707, 1835,
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
  },
120
  {
121
    1707, 1707, 3414, 3414, 3414, 3414, 3414, 3414,
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
  },
130
  {
131
     897,  897,  897,  897,  897,  897,  897,  897,
132
    1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067,
133
    1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238,
134
    1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
135
    1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579,
136
    1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
137
    1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921,
138
    2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091
139
  },
140
  {
141
    1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707,
142
    1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707,
143
    3414, 3414, 3414, 3414, 3414, 3414, 3414, 3414,
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
  },
150
  {
151
    2390, 2390, 2390, 2390, 2390, 2390, 2390, 2390,
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
  },
160
  {
161
      22,  171,  214,  257,  257,  299,  299,  342,
162
     171,  171,  257,  257,  299,  299,  342,  385,
163
     214,  257,  257,  299,  299,  342,  342,  385,
164
     257,  257,  257,  299,  299,  342,  385,  427,
165
     257,  257,  299,  299,  342,  385,  427,  513,
166
     257,  299,  299,  342,  385,  427,  513,  598,
167
     299,  299,  299,  385,  385,  470,  598,  726,
168
     299,  299,  385,  385,  470,  598,  726,  897
169
  },
170
  {
171
      86,  598, 1195, 1195, 2390, 2390, 2390, 2390,
172
     598,  598, 1195, 1195, 2390, 2390, 2390, 2390,
173
    1195, 1195, 2390, 2390, 3414, 3414, 3414, 3414,
174
    1195, 1195, 2390, 2390, 3414, 3414, 3414, 3414,
175
    2390, 2390, 3414, 3414, 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
  }
180
};
181
 
182
static const uint16_t ivi4_quant_8x8_inter[9][64] = {
183
  {
184
     427,  427,  470,  427,  427,  427,  470,  470,
185
     427,  427,  470,  427,  427,  427,  470,  470,
186
     470,  470,  470,  470,  470,  470,  470,  470,
187
     427,  427,  470,  470,  427,  427,  470,  470,
188
     427,  427,  470,  427,  427,  427,  470,  470,
189
     427,  427,  470,  427,  427,  427,  470,  470,
190
     470,  470,  470,  470,  470,  470,  470,  470,
191
     470,  470,  470,  470,  470,  470,  470,  470
192
  },
193
  {
194
    1707, 1707, 2433, 2433, 3414, 3414, 3414, 3414,
195
    1707, 1707, 2433, 2433, 3414, 3414, 3414, 3414,
196
    2433, 2433, 3414, 3414, 4822, 4822, 4822, 4822,
197
    2433, 2433, 3414, 3414, 4822, 4822, 4822, 4822,
198
    3414, 3414, 4822, 4822, 3414, 3414, 3414, 3414,
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
  },
203
  {
204
    1195, 1195, 1281, 1238, 1195, 1195, 1281, 1281,
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
  },
213
  {
214
    2433, 2433, 3414, 3414, 2433, 2433, 2433, 2433,
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
  },
223
  {
224
    1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195,
225
    1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195,
226
    1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281,
227
    1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238,
228
    1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195,
229
    1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195,
230
    1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281,
231
    1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281
232
  },
233
  {
234
    2433, 2433, 2433, 2433, 2433, 2433, 2433, 2433,
235
    2433, 2433, 2433, 2433, 2433, 2433, 2433, 2433,
236
    3414, 3414, 3414, 3414, 3414, 3414, 3414, 3414,
237
    3414, 3414, 3414, 3414, 3414, 3414, 3414, 3414,
238
    2433, 2433, 2433, 2433, 2433, 2433, 2433, 2433,
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
  },
243
  {
244
    1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707,
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
  },
253
  {
254
      86,  171,  171,  214,  214,  214,  214,  257,
255
     171,  171,  214,  214,  214,  214,  257,  257,
256
     171,  214,  214,  214,  214,  257,  257,  257,
257
     214,  214,  214,  214,  257,  257,  257,  299,
258
     214,  214,  214,  257,  257,  257,  299,  299,
259
     214,  214,  257,  257,  257,  299,  299,  299,
260
     214,  257,  257,  257,  299,  299,  299,  342,
261
     257,  257,  257,  299,  299,  299,  342,  342
262
  },
263
  {
264
     854,  854, 1195, 1195, 1707, 1707, 1707, 1707,
265
     854,  854, 1195, 1195, 1707, 1707, 1707, 1707,
266
    1195, 1195, 1707, 1707, 2390, 2390, 2390, 2390,
267
    1195, 1195, 1707, 1707, 2390, 2390, 2390, 2390,
268
    1707, 1707, 2390, 2390, 1707, 1707, 1707, 1707,
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
  }
273
};
274
 
275
static const uint16_t ivi4_quant_4x4_intra[5][16] = {
276
  {
277
      22,  214,  257,  299,
278
     214,  257,  299,  342,
279
     257,  299,  342,  427,
280
     299,  342,  427,  513
281
  },
282
  {
283
     129, 1025, 1451, 1451,
284
    1025, 1025, 1451, 1451,
285
    1451, 1451, 2049, 2049,
286
    1451, 1451, 2049, 2049
287
  },
288
  {
289
      43,  171,  171,  171,
290
      43,  171,  171,  171,
291
      43,  171,  171,  171,
292
      43,  171,  171,  171
293
  },
294
  {
295
      43,   43,   43,   43,
296
     171,  171,  171,  171,
297
     171,  171,  171,  171,
298
     171,  171,  171,  171
299
  },
300
  {
301
      43,   43,   43,   43,
302
      43,   43,   43,   43,
303
      43,   43,   43,   43,
304
      43,   43,   43,   43
305
  }
306
};
307
 
308
static const uint16_t ivi4_quant_4x4_inter[5][16] = {
309
  {
310
     107,  214,  257,  299,
311
     214,  257,  299,  299,
312
     257,  299,  299,  342,
313
     299,  299,  342,  342
314
  },
315
  {
316
     513, 1025, 1238, 1238,
317
    1025, 1025, 1238, 1238,
318
    1238, 1238, 1451, 1451,
319
    1238, 1238, 1451, 1451
320
  },
321
  {
322
      43,  171,  171,  171,
323
      43,  171,  171,  171,
324
      43,  171,  171,  171,
325
      43,  171,  171,  171
326
  },
327
  {
328
      43,   43,   43,   43,
329
     171,  171,  171,  171,
330
     171,  171,  171,  171,
331
     171,  171,  171,  171
332
  },
333
  {
334
      43,   43,   43,   43,
335
      43,   43,   43,   43,
336
      43,   43,   43,   43,
337
      43,   43,   43,   43
338
  }
339
};
340
 
341
/**
342
 *  Table for mapping quant matrix index from the bitstream
343
 *  into internal quant table number.
344
 */
345
static const uint8_t quant_index_to_tab[22] = {
346
    0, 1, 0, 2, 1, 3, 0, 4, 1, 5, 0, 1, 6, 7, 8, // for 8x8 quant matrixes
347
    0, 1, 2, 2, 3, 3, 4                          // for 4x4 quant matrixes
348
};
349
 
350
#endif /* AVCODEC_INDEO4DATA_H */