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 
23 /**
24  * @file
25  * This file contains structures and macros shared by both Indeo4 and
26  * Indeo5 decoders.
27  */
28 
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 ///< max number of bits of the ivi's huffman codes
37 #define IVI4_STREAM_ANALYSER 0
38 #define IVI5_IS_PROTECTED 0x20
39 
40 /**
41  * huffman codebook descriptor
42  */
43 typedef struct IVIHuffDesc {
46 } IVIHuffDesc;
47 
48 /**
49  * macroblock/block huffman table descriptor
50  */
51 typedef struct IVIHuffTab {
52  int32_t tab_sel; /// index of one of the predefined tables
53  /// or "7" for custom one
54  VLC *tab; /// pointer to the table associated with tab_sel
55 
56  /// the following are used only when tab_sel == 7
57  IVIHuffDesc cust_desc; /// custom Huffman codebook descriptor
58  VLC cust_tab; /// vlc table for custom codebook
59 } IVIHuffTab;
60 
61 enum {
62  IVI_MB_HUFF = 0, /// Huffman table is used for coding macroblocks
63  IVI_BLK_HUFF = 1 /// Huffman table is used for coding blocks
64 };
65 
66 
67 /**
68  * Common scan patterns (defined in ivi_common.c)
69  */
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 
75 /**
76  * Declare inverse transform function types
77  */
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 
82 /**
83  * run-value (RLE) table descriptor
84  */
85 typedef struct RVMapDesc {
86  uint8_t eob_sym; ///< end of block symbol
87  uint8_t esc_sym; ///< escape symbol
88  uint8_t runtab[256];
89  int8_t valtab[256];
90 } RVMapDesc;
91 
92 extern const RVMapDesc ff_ivi_rvmap_tabs[9];
93 
94 
95 /**
96  * information for Indeo macroblock (16x16, 8x8 or 4x4)
97  */
98 typedef struct IVIMbInfo {
99  int16_t xpos;
100  int16_t ypos;
101  uint32_t buf_offs; ///< address in the output buffer for this mb
102  uint8_t type; ///< macroblock type: 0 - INTRA, 1 - INTER
103  uint8_t cbp; ///< coded block pattern
104  int8_t q_delta; ///< quant delta
105  int8_t mv_x; ///< motion vector (x component)
106  int8_t mv_y; ///< motion vector (y component)
107 } IVIMbInfo;
108 
109 
110 /**
111  * information for Indeo tile
112  */
113 typedef struct IVITile {
114  int xpos;
115  int ypos;
116  int width;
117  int height;
118  int mb_size;
119  int is_empty; ///< = 1 if this tile doesn't contain any data
120  int data_size; ///< size of the data in bytes
121  int num_MBs; ///< number of macroblocks in this tile
122  IVIMbInfo *mbs; ///< array of macroblock descriptors
123  IVIMbInfo *ref_mbs; ///< ptr to the macroblock descriptors of the reference tile
124 } IVITile;
125 
126 
127 /**
128  * information for Indeo wavelet band
129  */
130 typedef struct IVIBandDesc {
131  int plane; ///< plane number this band belongs to
132  int band_num; ///< band number
133  int width;
134  int height;
135  int aheight; ///< aligned band height
136  const uint8_t *data_ptr; ///< ptr to the first byte of the band data
137  int data_size; ///< size of the band data
138  int16_t *buf; ///< pointer to the output buffer for this band
139  int16_t *ref_buf; ///< pointer to the reference frame buffer (for motion compensation)
140  int16_t *bufs[3]; ///< array of pointers to the band buffers
141  int pitch; ///< pitch associated with the buffers above
142  int is_empty; ///< = 1 if this band doesn't contain any data
143  int mb_size; ///< macroblock size
144  int blk_size; ///< block size
145  int is_halfpel; ///< precision of the motion compensation: 0 - fullpel, 1 - halfpel
146  int inherit_mv; ///< tells if motion vector is inherited from reference macroblock
147  int inherit_qdelta; ///< tells if quantiser delta is inherited from reference macroblock
148  int qdelta_present; ///< tells if Qdelta signal is present in the bitstream (Indeo5 only)
149  int quant_mat; ///< dequant matrix index
150  int glob_quant; ///< quant base for this band
151  const uint8_t *scan; ///< ptr to the scan pattern
152  int scan_size; ///< size of the scantable
153 
154  IVIHuffTab blk_vlc; ///< vlc table for decoding block data
155 
156  int num_corr; ///< number of correction entries
157  uint8_t corr[61*2]; ///< rvmap correction pairs
158  int rvmap_sel; ///< rvmap table selector
159  RVMapDesc *rv_map; ///< ptr to the RLE table for this band
160  int num_tiles; ///< number of tiles in this band
161  IVITile *tiles; ///< array of tile descriptors
164  int is_2d_trans; ///< 1 indicates that the two-dimensional inverse transform is used
165  int transform_size; ///< block size of the transform
166  int32_t checksum; ///< for debug purposes
168  int bufsize; ///< band buffer size in bytes
169  const uint16_t *intra_base; ///< quantization matrix for intra blocks
170  const uint16_t *inter_base; ///< quantization matrix for inter blocks
171  const uint8_t *intra_scale; ///< quantization coefficient for intra blocks
172  const uint8_t *inter_scale; ///< quantization coefficient for inter blocks
173 } IVIBandDesc;
174 
175 
176 /**
177  * color plane (luma or chroma) information
178  */
179 typedef struct IVIPlaneDesc {
180  uint16_t width;
181  uint16_t height;
182  uint8_t num_bands; ///< number of bands this plane subdivided into
183  IVIBandDesc *bands; ///< array of band descriptors
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;
196 } IVIPicConfig;
197 
198 typedef struct IVI45DecContext {
200  RVMapDesc rvmap_tabs[9]; ///< local corrected copy of the static rvmap tables
201 
202  uint32_t frame_num;
204  int prev_frame_type; ///< frame type of the previous frame
205  uint32_t data_size; ///< size of the frame data in bytes from picture header
207  int transp_status; ///< transparency mode status: 1 - enabled
208  const uint8_t *frame_data; ///< input frame data pointer
209  int inter_scal; ///< signals a sequence of scalable inter frames
210  uint32_t frame_size; ///< frame size in bytes
211  uint32_t pic_hdr_size; ///< picture header size in bytes
213  uint16_t checksum; ///< frame checksum
214 
216  IVIPlaneDesc planes[3]; ///< color planes
217 
218  int buf_switch; ///< used to switch between three buffers
219  int dst_buf; ///< buffer index for the currently decoded frame
220  int ref_buf; ///< inter frame reference buffer index
221  int ref2_buf; ///< temporal storage for switching buffers
222 
223  IVIHuffTab mb_vlc; ///< current macroblock table descriptor
224  IVIHuffTab blk_vlc; ///< current block table descriptor
225 
228  uint8_t in_q; ///< flag for explicitly stored quantiser delta
231 
232  uint16_t gop_hdr_size;
234  uint32_t lock_word;
235 
236 #if IVI4_STREAM_ANALYSER
237  uint8_t has_b_frames;
238  uint8_t has_transp;
239  uint8_t uses_tiling;
240  uint8_t uses_haar;
241  uint8_t uses_fullpel;
242 #endif
243 
244  int (*decode_pic_hdr) (struct IVI45DecContext *ctx, AVCodecContext *avctx);
246  int (*decode_mb_info) (struct IVI45DecContext *ctx, IVIBandDesc *band, IVITile *tile, AVCodecContext *avctx);
248  int (*is_nonnull_frame)(struct IVI45DecContext *ctx);
249 
251  int buf_invalid[3];
253 
254 /** compare some properties of two pictures */
255 static inline int ivi_pic_config_cmp(IVIPicConfig *str1, IVIPicConfig *str2)
256 {
257  return str1->pic_width != str2->pic_width || str1->pic_height != str2->pic_height ||
258  str1->chroma_width != str2->chroma_width || str1->chroma_height != str2->chroma_height ||
259  str1->tile_width != str2->tile_width || str1->tile_height != str2->tile_height ||
260  str1->luma_bands != str2->luma_bands || str1->chroma_bands != str2->chroma_bands;
261 }
262 
263 /** calculate number of tiles in a stride */
264 #define IVI_NUM_TILES(stride, tile_size) (((stride) + (tile_size) - 1) / (tile_size))
265 
266 /** calculate number of macroblocks in a tile */
267 #define IVI_MBs_PER_TILE(tile_width, tile_height, mb_size) \
268  ((((tile_width) + (mb_size) - 1) / (mb_size)) * (((tile_height) + (mb_size) - 1) / (mb_size)))
269 
270 /** convert unsigned values into signed ones (the sign is in the LSB) */
271 #define IVI_TOSIGNED(val) (-(((val) >> 1) ^ -((val) & 1)))
272 
273 /** scale motion vector */
274 static inline int ivi_scale_mv(int mv, int mv_scale)
275 {
276  return (mv + (mv > 0) + (mv_scale - 1)) >> mv_scale;
277 }
278 
279 /**
280  * Initialize static codes used for macroblock and block decoding.
281  */
282 void ff_ivi_init_static_vlc(void);
283 
284 /**
285  * Decode a huffman codebook descriptor from the bitstream
286  * and select specified huffman table.
287  *
288  * @param[in,out] gb the GetBit context
289  * @param[in] desc_coded flag signalling if table descriptor was coded
290  * @param[in] which_tab codebook purpose (IVI_MB_HUFF or IVI_BLK_HUFF)
291  * @param[out] huff_tab pointer to the descriptor of the selected table
292  * @param[in] avctx AVCodecContext pointer
293  * @return zero on success, negative value otherwise
294  */
295 int ff_ivi_dec_huff_desc(GetBitContext *gb, int desc_coded, int which_tab,
296  IVIHuffTab *huff_tab, AVCodecContext *avctx);
297 
298 /**
299  * Initialize planes (prepares descriptors, allocates buffers etc).
300  *
301  * @param[in,out] planes pointer to the array of the plane descriptors
302  * @param[in] cfg pointer to the ivi_pic_config structure describing picture layout
303  * @return result code: 0 - OK
304  */
306 
307 /**
308  * Initialize tile and macroblock descriptors.
309  *
310  * @param[in,out] planes pointer to the array of the plane descriptors
311  * @param[in] tile_width tile width
312  * @param[in] tile_height tile height
313  * @return result code: 0 - OK
314  */
315 int ff_ivi_init_tiles(IVIPlaneDesc *planes, int tile_width, int tile_height);
316 
317 int ff_ivi_decode_frame(AVCodecContext *avctx, void *data, int *got_frame,
318  AVPacket *avpkt);
320 
321 #endif /* AVCODEC_IVI_COMMON_H */
int is_empty
= 1 if this band doesn&#39;t contain any data
Definition: ivi_common.h:142
uint32_t data_size
size of the frame data in bytes from picture header
Definition: ivi_common.h:205
uint8_t type
macroblock type: 0 - INTRA, 1 - INTER
Definition: ivi_common.h:102
int num_MBs
number of macroblocks in this tile
Definition: ivi_common.h:121
macroblock/block huffman table descriptor
Definition: ivi_common.h:51
InvTransformPtr * inv_transform
Definition: ivi_common.h:162
static int decode_pic_hdr(IVI45DecContext *ctx, AVCodecContext *avctx)
Decode Indeo 4 picture header.
Definition: indeo4.c:117
void( DCTransformPtr)(const int32_t *in, int16_t *out, uint32_t pitch, int blk_size)
Definition: ivi_common.h:79
int inter_scal
signals a sequence of scalable inter frames
Definition: ivi_common.h:209
int num_tiles
number of tiles in this band
Definition: ivi_common.h:160
int dst_buf
buffer index for the currently decoded frame
Definition: ivi_common.h:219
int16_t * ref_buf
pointer to the reference frame buffer (for motion compensation)
Definition: ivi_common.h:139
uint8_t eob_sym
end of block symbol
Definition: ivi_common.h:86
int16_t * buf
pointer to the output buffer for this band
Definition: ivi_common.h:138
About Git write you should know how to use GIT properly Luckily Git comes with excellent documentation git help man git shows you the available git< command > help man git< command > shows information about the subcommand< command > The most comprehensive manual is the website Git Reference visit they are quite exhaustive You do not need a special username or password All you need is to provide a ssh public key to the Git server admin What follows now is a basic introduction to Git and some FFmpeg specific guidelines Read it at least if you are granted commit privileges to the FFmpeg project you are expected to be familiar with these rules I if not You can get git from etc no matter how small Every one of them has been saved from looking like a fool by this many times It s very easy for stray debug output or cosmetic modifications to slip in
Definition: git-howto.txt:5
IVITile * tiles
array of tile descriptors
Definition: ivi_common.h:161
int is_halfpel
precision of the motion compensation: 0 - fullpel, 1 - halfpel
Definition: ivi_common.h:145
const RVMapDesc ff_ivi_rvmap_tabs[9]
Run-value (RLE) tables.
Definition: ivi_common.c:1023
uint8_t chroma_bands
Definition: ivi_common.h:195
const uint8_t ff_ivi_direct_scan_4x4[16]
Definition: ivi_common.c:1015
int plane
plane number this band belongs to
Definition: ivi_common.h:131
int mb_size
Definition: ivi_common.h:118
int bufsize
band buffer size in bytes
Definition: ivi_common.h:168
IVIPicConfig pic_conf
Definition: ivi_common.h:215
void ff_ivi_init_static_vlc(void)
Initialize static codes used for macroblock and block decoding.
Definition: ivi_common.c:103
int quant_mat
dequant matrix index
Definition: ivi_common.h:149
uint16_t height
Definition: ivi_common.h:181
RVMapDesc * rv_map
ptr to the RLE table for this band
Definition: ivi_common.h:159
uint8_t xbits[16]
Definition: ivi_common.h:45
uint8_t luma_bands
Definition: ivi_common.h:194
VLC * tab
index of one of the predefined tables or "7" for custom one
Definition: ivi_common.h:54
uint8_t
uint8_t pic_glob_quant
Definition: ivi_common.h:229
const uint8_t * frame_data
input frame data pointer
Definition: ivi_common.h:208
const uint16_t * inter_base
quantization matrix for inter blocks
Definition: ivi_common.h:170
const uint8_t * data_ptr
ptr to the first byte of the band data
Definition: ivi_common.h:136
uint16_t pic_height
Definition: ivi_common.h:189
const uint8_t ff_ivi_vertical_scan_8x8[64]
Common scan patterns (defined in ivi_common.c)
Definition: ivi_common.c:993
int ff_ivi_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
Definition: ivi_common.c:844
int inherit_mv
tells if motion vector is inherited from reference macroblock
Definition: ivi_common.h:146
static int decode_band_hdr(IVI45DecContext *ctx, IVIBandDesc *band, AVCodecContext *avctx)
Decode Indeo 4 band header.
Definition: indeo4.c:281
uint16_t tile_height
Definition: ivi_common.h:193
GetBitContext gb
Definition: ivi_common.h:199
uint16_t chroma_width
Definition: ivi_common.h:190
struct IVIPicConfig IVIPicConfig
int pitch
pitch associated with the buffers above
Definition: ivi_common.h:141
uint8_t cbp
coded block pattern
Definition: ivi_common.h:103
int qdelta_present
tells if Qdelta signal is present in the bitstream (Indeo5 only)
Definition: ivi_common.h:148
uint16_t checksum
frame checksum
Definition: ivi_common.h:213
bitstream reader API header.
uint32_t pic_hdr_size
picture header size in bytes
Definition: ivi_common.h:211
uint16_t pic_width
Definition: ivi_common.h:188
void( InvTransformPtr)(const int32_t *in, int16_t *out, uint32_t pitch, const uint8_t *flags)
Declare inverse transform function types.
Definition: ivi_common.h:78
IVIPlaneDesc planes[3]
color planes
Definition: ivi_common.h:216
int ff_ivi_init_planes(IVIPlaneDesc *planes, const IVIPicConfig *cfg)
Initialize planes (prepares descriptors, allocates buffers etc).
Definition: ivi_common.c:222
const uint16_t * intra_base
quantization matrix for intra blocks
Definition: ivi_common.h:169
int data_size
size of the band data
Definition: ivi_common.h:137
uint8_t unknown1
Definition: ivi_common.h:230
IVIHuffDesc cust_desc
pointer to the table associated with tab_sel
Definition: ivi_common.h:57
int blk_size
block size
Definition: ivi_common.h:144
int32_t tab_sel
Definition: ivi_common.h:52
static int ivi_pic_config_cmp(IVIPicConfig *str1, IVIPicConfig *str2)
compare some properties of two pictures
Definition: ivi_common.h:255
uint8_t in_q
flag for explicitly stored quantiser delta
Definition: ivi_common.h:228
int ff_ivi_decode_close(AVCodecContext *avctx)
Close Indeo5 decoder and clean up its context.
Definition: ivi_common.c:931
Spectrum Plot time data
int ref_buf
inter frame reference buffer index
Definition: ivi_common.h:220
DCTransformPtr * dc_transform
Definition: ivi_common.h:163
int ff_ivi_init_tiles(IVIPlaneDesc *planes, int tile_width, int tile_height)
Initialize tile and macroblock descriptors.
Definition: ivi_common.c:286
int32_t num_rows
Definition: ivi_common.h:44
int buf_invalid[3]
Definition: ivi_common.h:251
struct IVI45DecContext IVI45DecContext
external API header
uint8_t esc_sym
escape symbol
Definition: ivi_common.h:87
uint16_t width
Definition: ivi_common.h:180
Definition: get_bits.h:63
struct IVIHuffTab IVIHuffTab
macroblock/block huffman table descriptor
run-value (RLE) table descriptor
Definition: ivi_common.h:85
int inherit_qdelta
tells if quantiser delta is inherited from reference macroblock
Definition: ivi_common.h:147
uint32_t frame_num
Definition: ivi_common.h:202
uint8_t num_bands
number of bands this plane subdivided into
Definition: ivi_common.h:182
IVIMbInfo * mbs
array of macroblock descriptors
Definition: ivi_common.h:122
int32_t
static void switch_buffers(IVI45DecContext *ctx)
Rearrange decoding and reference buffers.
Definition: indeo4.c:586
const uint8_t * inter_scale
quantization coefficient for inter blocks
Definition: ivi_common.h:172
uint16_t chroma_height
Definition: ivi_common.h:191
uint32_t lock_word
Definition: ivi_common.h:234
int8_t q_delta
quant delta
Definition: ivi_common.h:104
uint32_t frame_size
frame size in bytes
Definition: ivi_common.h:210
static const int8_t mv[256][2]
uint16_t tile_width
Definition: ivi_common.h:192
int ypos
Definition: ivi_common.h:115
IVIHuffTab mb_vlc
current macroblock table descriptor
Definition: ivi_common.h:223
int is_2d_trans
1 indicates that the two-dimensional inverse transform is used
Definition: ivi_common.h:164
int glob_quant
quant base for this band
Definition: ivi_common.h:150
typedef void(RENAME(mix_any_func_type))
int height
Definition: ivi_common.h:117
struct RVMapDesc RVMapDesc
run-value (RLE) table descriptor
main external API structure.
int aheight
aligned band height
Definition: ivi_common.h:135
int is_empty
= 1 if this tile doesn&#39;t contain any data
Definition: ivi_common.h:119
uint8_t frame_flags
Definition: ivi_common.h:212
int num_corr
number of correction entries
Definition: ivi_common.h:156
information for Indeo tile
Definition: ivi_common.h:113
int buf_switch
used to switch between three buffers
Definition: ivi_common.h:218
struct IVIMbInfo IVIMbInfo
information for Indeo macroblock (16x16, 8x8 or 4x4)
uint8_t in_imf
Definition: ivi_common.h:227
uint8_t gop_flags
Definition: ivi_common.h:233
Huffman table is used for coding macroblocks.
Definition: ivi_common.h:63
IVIBandDesc * bands
array of band descriptors
Definition: ivi_common.h:183
int32_t checksum
for debug purposes
Definition: ivi_common.h:166
int rvmap_sel
rvmap table selector
Definition: ivi_common.h:158
int8_t mv_x
motion vector (x component)
Definition: ivi_common.h:105
int8_t mv_y
motion vector (y component)
Definition: ivi_common.h:106
int mb_size
macroblock size
Definition: ivi_common.h:143
huffman codebook descriptor
Definition: ivi_common.h:43
IVIMbInfo * ref_mbs
ptr to the macroblock descriptors of the reference tile
Definition: ivi_common.h:123
int xpos
Definition: ivi_common.h:114
IVIHuffTab blk_vlc
current block table descriptor
Definition: ivi_common.h:224
static int flags
Definition: cpu.c:23
uint16_t gop_hdr_size
Definition: ivi_common.h:232
int16_t xpos
Definition: ivi_common.h:99
int band_num
band number
Definition: ivi_common.h:132
struct IVITile IVITile
information for Indeo tile
int transform_size
block size of the transform
Definition: ivi_common.h:165
int ref2_buf
temporal storage for switching buffers
Definition: ivi_common.h:221
static int is_nonnull_frame(IVI45DecContext *ctx)
Definition: indeo4.c:617
struct IVIPlaneDesc IVIPlaneDesc
color plane (luma or chroma) information
struct IVIBandDesc IVIBandDesc
information for Indeo wavelet band
VLC cust_tab
custom Huffman codebook descriptor
Definition: ivi_common.h:58
static int decode_mb_info(IVI45DecContext *ctx, IVIBandDesc *band, IVITile *tile, AVCodecContext *avctx)
Decode information (block type, cbp, quant delta, motion vector) for all macroblocks in the current t...
Definition: indeo4.c:451
const uint8_t * scan
ptr to the scan pattern
Definition: ivi_common.h:151
int width
Definition: ivi_common.h:116
int checksum_present
Definition: ivi_common.h:167
static int ivi_scale_mv(int mv, int mv_scale)
scale motion vector
Definition: ivi_common.h:274
int transp_status
transparency mode status: 1 - enabled
Definition: ivi_common.h:207
int16_t ypos
Definition: ivi_common.h:100
int prev_frame_type
frame type of the previous frame
Definition: ivi_common.h:204
information for Indeo macroblock (16x16, 8x8 or 4x4)
Definition: ivi_common.h:98
IVIHuffTab blk_vlc
vlc table for decoding block data
Definition: ivi_common.h:154
int scan_size
size of the scantable
Definition: ivi_common.h:152
const uint8_t * intra_scale
quantization coefficient for intra blocks
Definition: ivi_common.h:171
uint8_t pi<< 24) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_U8, uint8_t,(*(const uint8_t *) pi-0x80)*(1.0f/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_U8, uint8_t,(*(const uint8_t *) pi-0x80)*(1.0/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S16, int16_t,(*(const int16_t *) pi >> 8)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S16, int16_t,*(const int16_t *) pi *(1.0f/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S16, int16_t,*(const int16_t *) pi *(1.0/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S32, int32_t,(*(const int32_t *) pi >> 24)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S32, int32_t,*(const int32_t *) pi *(1.0f/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S32, int32_t,*(const int32_t *) pi *(1.0/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_FLT, float, av_clip_uint8(lrintf(*(const float *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_FLT, float, av_clip_int16(lrintf(*(const float *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_FLT, float, av_clipl_int32(llrintf(*(const float *) pi *(1U<< 31)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_DBL, double, av_clip_uint8(lrint(*(const double *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_DBL, double, av_clip_int16(lrint(*(const double *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_DBL, double, av_clipl_int32(llrint(*(const double *) pi *(1U<< 31))))#define SET_CONV_FUNC_GROUP(ofmt, ifmt) static void set_generic_function(AudioConvert *ac){}void ff_audio_convert_free(AudioConvert **ac){if(!*ac) return;ff_dither_free(&(*ac) ->dc);av_freep(ac);}AudioConvert *ff_audio_convert_alloc(AVAudioResampleContext *avr, enum AVSampleFormat out_fmt, enum AVSampleFormat in_fmt, int channels, int sample_rate, int apply_map){AudioConvert *ac;int in_planar, out_planar;ac=av_mallocz(sizeof(*ac));if(!ac) return NULL;ac->avr=avr;ac->out_fmt=out_fmt;ac->in_fmt=in_fmt;ac->channels=channels;ac->apply_map=apply_map;if(avr->dither_method!=AV_RESAMPLE_DITHER_NONE &&av_get_packed_sample_fmt(out_fmt)==AV_SAMPLE_FMT_S16 &&av_get_bytes_per_sample(in_fmt) > 2){ac->dc=ff_dither_alloc(avr, out_fmt, in_fmt, channels, sample_rate, apply_map);if(!ac->dc){av_free(ac);return NULL;}return ac;}in_planar=av_sample_fmt_is_planar(in_fmt);out_planar=av_sample_fmt_is_planar(out_fmt);if(in_planar==out_planar){ac->func_type=CONV_FUNC_TYPE_FLAT;ac->planes=in_planar?ac->channels:1;}else if(in_planar) ac->func_type=CONV_FUNC_TYPE_INTERLEAVE;else ac->func_type=CONV_FUNC_TYPE_DEINTERLEAVE;set_generic_function(ac);if(ARCH_ARM) ff_audio_convert_init_arm(ac);if(ARCH_X86) ff_audio_convert_init_x86(ac);return ac;}int ff_audio_convert(AudioConvert *ac, AudioData *out, AudioData *in){int use_generic=1;int len=in->nb_samples;int p;if(ac->dc){av_dlog(ac->avr,"%d samples - audio_convert: %s to %s (dithered)\n", len, av_get_sample_fmt_name(ac->in_fmt), av_get_sample_fmt_name(ac->out_fmt));return ff_convert_dither(ac-> out
color plane (luma or chroma) information
Definition: ivi_common.h:179
int ff_ivi_dec_huff_desc(GetBitContext *gb, int desc_coded, int which_tab, IVIHuffTab *huff_tab, AVCodecContext *avctx)
Decode a huffman codebook descriptor from the bitstream and select specified huffman table...
Definition: ivi_common.c:147
struct IVIHuffDesc IVIHuffDesc
huffman codebook descriptor
uint32_t buf_offs
address in the output buffer for this mb
Definition: ivi_common.h:101
information for Indeo wavelet band
Definition: ivi_common.h:130
This structure stores compressed data.
const uint8_t ff_ivi_horizontal_scan_8x8[64]
Definition: ivi_common.c:1004
uint8_t rvmap_sel
Definition: ivi_common.h:226
int data_size
size of the data in bytes
Definition: ivi_common.h:120