FFmpeg
1.2.4
Main Page
Related Pages
Modules
Data Structures
Files
Examples
File List
Globals
libavcodec
ivi_common.h
Go to the documentation of this file.
1
/*
2
* common functions for Indeo Video Interactive codecs (Indeo4 and Indeo5)
3
*
4
* Copyright (c) 2009 Maxim Poliakovski
5
*
6
* This file is part of FFmpeg.
7
*
8
* FFmpeg is free software; you can redistribute it and/or
9
* modify it under the terms of the GNU Lesser General Public
10
* License as published by the Free Software Foundation; either
11
* version 2.1 of the License, or (at your option) any later version.
12
*
13
* FFmpeg is distributed in the hope that it will be useful,
14
* but WITHOUT ANY WARRANTY; without even the implied warranty of
15
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16
* Lesser General Public License for more details.
17
*
18
* You should have received a copy of the GNU Lesser General Public
19
* License along with FFmpeg; if not, write to the Free Software
20
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21
*/
22
29
#ifndef AVCODEC_IVI_COMMON_H
30
#define AVCODEC_IVI_COMMON_H
31
32
#include "
avcodec.h
"
33
#include "
get_bits.h
"
34
#include <stdint.h>
35
36
#define IVI_VLC_BITS 13
37
#define IVI4_STREAM_ANALYSER 0
38
#define IVI5_IS_PROTECTED 0x20
39
43
typedef
struct
IVIHuffDesc
{
44
int32_t
num_rows
;
45
uint8_t
xbits
[16];
46
}
IVIHuffDesc
;
47
51
typedef
struct
IVIHuffTab
{
52
int32_t
tab_sel
;
53
54
VLC
*
tab
;
55
57
IVIHuffDesc
cust_desc
;
58
VLC
cust_tab
;
59
}
IVIHuffTab
;
60
61
enum
{
62
IVI_MB_HUFF
= 0,
63
IVI_BLK_HUFF
= 1
64
};
65
66
70
extern
const
uint8_t
ff_ivi_vertical_scan_8x8
[64];
71
extern
const
uint8_t
ff_ivi_horizontal_scan_8x8
[64];
72
extern
const
uint8_t
ff_ivi_direct_scan_4x4
[16];
73
74
78
typedef
void
(
InvTransformPtr
)(
const
int32_t
*
in
, int16_t *
out
, uint32_t pitch,
const
uint8_t
*
flags
);
79
typedef
void
(
DCTransformPtr
) (
const
int32_t
*
in
, int16_t *
out
, uint32_t pitch,
int
blk_size);
80
81
85
typedef
struct
RVMapDesc
{
86
uint8_t
eob_sym
;
87
uint8_t
esc_sym
;
88
uint8_t
runtab
[256];
89
int8_t
valtab
[256];
90
}
RVMapDesc
;
91
92
extern
const
RVMapDesc
ff_ivi_rvmap_tabs
[9];
93
94
98
typedef
struct
IVIMbInfo
{
99
int16_t
xpos
;
100
int16_t
ypos
;
101
uint32_t
buf_offs
;
102
uint8_t
type
;
103
uint8_t
cbp
;
104
int8_t
q_delta
;
105
int8_t
mv_x
;
106
int8_t
mv_y
;
107
}
IVIMbInfo
;
108
109
113
typedef
struct
IVITile
{
114
int
xpos
;
115
int
ypos
;
116
int
width
;
117
int
height
;
118
int
mb_size
;
119
int
is_empty
;
120
int
data_size
;
121
int
num_MBs
;
122
IVIMbInfo
*
mbs
;
123
IVIMbInfo
*
ref_mbs
;
124
}
IVITile
;
125
126
130
typedef
struct
IVIBandDesc
{
131
int
plane
;
132
int
band_num
;
133
int
width
;
134
int
height
;
135
int
aheight
;
136
const
uint8_t
*
data_ptr
;
137
int
data_size
;
138
int16_t *
buf
;
139
int16_t *
ref_buf
;
140
int16_t *
bufs
[3];
141
int
pitch
;
142
int
is_empty
;
143
int
mb_size
;
144
int
blk_size
;
145
int
is_halfpel
;
146
int
inherit_mv
;
147
int
inherit_qdelta
;
148
int
qdelta_present
;
149
int
quant_mat
;
150
int
glob_quant
;
151
const
uint8_t
*
scan
;
152
int
scan_size
;
153
154
IVIHuffTab
blk_vlc
;
155
156
int
num_corr
;
157
uint8_t
corr
[61*2];
158
int
rvmap_sel
;
159
RVMapDesc
*
rv_map
;
160
int
num_tiles
;
161
IVITile
*
tiles
;
162
InvTransformPtr
*
inv_transform
;
163
DCTransformPtr
*
dc_transform
;
164
int
is_2d_trans
;
165
int
transform_size
;
166
int32_t
checksum
;
167
int
checksum_present
;
168
int
bufsize
;
169
const
uint16_t *
intra_base
;
170
const
uint16_t *
inter_base
;
171
const
uint8_t
*
intra_scale
;
172
const
uint8_t
*
inter_scale
;
173
}
IVIBandDesc
;
174
175
179
typedef
struct
IVIPlaneDesc
{
180
uint16_t
width
;
181
uint16_t
height
;
182
uint8_t
num_bands
;
183
IVIBandDesc
*
bands
;
184
}
IVIPlaneDesc
;
185
186
187
typedef
struct
IVIPicConfig
{
188
uint16_t
pic_width
;
189
uint16_t
pic_height
;
190
uint16_t
chroma_width
;
191
uint16_t
chroma_height
;
192
uint16_t
tile_width
;
193
uint16_t
tile_height
;
194
uint8_t
luma_bands
;
195
uint8_t
chroma_bands
;
196
}
IVIPicConfig
;
197
198
typedef
struct
IVI45DecContext
{
199
GetBitContext
gb
;
200
AVFrame
frame
;
201
RVMapDesc
rvmap_tabs
[9];
202
203
uint32_t
frame_num
;
204
int
frame_type
;
205
int
prev_frame_type
;
206
uint32_t
data_size
;
207
int
is_scalable
;
208
int
transp_status
;
209
const
uint8_t
*
frame_data
;
210
int
inter_scal
;
211
uint32_t
frame_size
;
212
uint32_t
pic_hdr_size
;
213
uint8_t
frame_flags
;
214
uint16_t
checksum
;
215
216
IVIPicConfig
pic_conf
;
217
IVIPlaneDesc
planes
[3];
218
219
int
buf_switch
;
220
int
dst_buf
;
221
int
ref_buf
;
222
int
ref2_buf
;
223
224
IVIHuffTab
mb_vlc
;
225
IVIHuffTab
blk_vlc
;
226
227
uint8_t
rvmap_sel
;
228
uint8_t
in_imf
;
229
uint8_t
in_q
;
230
uint8_t
pic_glob_quant
;
231
uint8_t
unknown1
;
232
233
uint16_t
gop_hdr_size
;
234
uint8_t
gop_flags
;
235
uint32_t
lock_word
;
236
237
#if IVI4_STREAM_ANALYSER
238
uint8_t
has_b_frames;
239
uint8_t
has_transp;
240
uint8_t
uses_tiling;
241
uint8_t
uses_haar;
242
uint8_t
uses_fullpel;
243
#endif
244
245
int (*
decode_pic_hdr
) (
struct
IVI45DecContext
*ctx,
AVCodecContext
*avctx);
246
int (*
decode_band_hdr
) (
struct
IVI45DecContext
*ctx,
IVIBandDesc
*
band
,
AVCodecContext
*avctx);
247
int (*
decode_mb_info
) (
struct
IVI45DecContext
*ctx,
IVIBandDesc
*
band
,
IVITile
*tile,
AVCodecContext
*avctx);
248
void
(*
switch_buffers
) (
struct
IVI45DecContext
*ctx);
249
int (*
is_nonnull_frame
)(
struct
IVI45DecContext
*ctx);
250
251
int
gop_invalid
;
252
int
buf_invalid
[3];
253
}
IVI45DecContext
;
254
256
static
inline
int
ivi_pic_config_cmp
(
IVIPicConfig
*str1,
IVIPicConfig
*str2)
257
{
258
return
str1->
pic_width
!= str2->
pic_width
|| str1->
pic_height
!= str2->
pic_height
||
259
str1->
chroma_width
!= str2->
chroma_width
|| str1->
chroma_height
!= str2->
chroma_height
||
260
str1->
tile_width
!= str2->
tile_width
|| str1->
tile_height
!= str2->
tile_height
||
261
str1->
luma_bands
!= str2->
luma_bands
|| str1->
chroma_bands
!= str2->
chroma_bands
;
262
}
263
265
#define IVI_NUM_TILES(stride, tile_size) (((stride) + (tile_size) - 1) / (tile_size))
266
268
#define IVI_MBs_PER_TILE(tile_width, tile_height, mb_size) \
269
((((tile_width) + (mb_size) - 1) / (mb_size)) * (((tile_height) + (mb_size) - 1) / (mb_size)))
270
272
#define IVI_TOSIGNED(val) (-(((val) >> 1) ^ -((val) & 1)))
273
275
static
inline
int
ivi_scale_mv
(
int
mv
,
int
mv_scale)
276
{
277
return
(mv + (mv > 0) + (mv_scale - 1)) >> mv_scale;
278
}
279
283
void
ff_ivi_init_static_vlc
(
void
);
284
296
int
ff_ivi_dec_huff_desc
(
GetBitContext
*
gb
,
int
desc_coded,
int
which_tab,
297
IVIHuffTab
*huff_tab,
AVCodecContext
*avctx);
298
306
int
ff_ivi_init_planes
(
IVIPlaneDesc
*
planes
,
const
IVIPicConfig
*cfg);
307
316
int
ff_ivi_init_tiles
(
IVIPlaneDesc
*
planes
,
int
tile_width,
int
tile_height);
317
318
int
ff_ivi_decode_frame
(
AVCodecContext
*avctx,
void
*
data
,
int
*got_frame,
319
AVPacket
*avpkt);
320
int
ff_ivi_decode_close
(
AVCodecContext
*avctx);
321
322
#endif
/* AVCODEC_IVI_COMMON_H */
Generated on Fri Nov 29 2013 19:15:03 for FFmpeg by
1.8.1.2