Quote path expression to take care of $(prefix) possibly containing spaces.
[libav.git] / libavcodec / avcodec.h
CommitLineData
a96b68b7
FB
1#ifndef AVCODEC_H
2#define AVCODEC_H
3
36df8805
MN
4/**
5 * @file avcodec.h
d33c949c 6 * external api header.
36df8805
MN
7 */
8
9
02d697aa
ZK
10#ifdef __cplusplus
11extern "C" {
12#endif
13
de6d9b64 14#include "common.h"
5ff85f1d 15#include "rational.h"
4b813d5c 16#include <sys/types.h> /* size_t */
de6d9b64 17
c79b8011
MN
18#define FFMPEG_VERSION_INT 0x000409
19#define FFMPEG_VERSION "0.4.9-pre1"
0fd6aea1 20#define LIBAVCODEC_BUILD 4736
4b1f4f23 21
7b7d86f1
FB
22#define LIBAVCODEC_VERSION_INT FFMPEG_VERSION_INT
23#define LIBAVCODEC_VERSION FFMPEG_VERSION
24
25#define AV_STRINGIFY(s) AV_TOSTRING(s)
26#define AV_TOSTRING(s) #s
27#define LIBAVCODEC_IDENT "FFmpeg" LIBAVCODEC_VERSION "b" AV_STRINGIFY(LIBAVCODEC_BUILD)
ce2749d2 28
2a24fe4c 29#define AV_NOPTS_VALUE int64_t_C(0x8000000000000000)
9740beff
MN
30#define AV_TIME_BASE 1000000
31
de6d9b64
FB
32enum CodecID {
33 CODEC_ID_NONE,
34 CODEC_ID_MPEG1VIDEO,
dcedf586 35 CODEC_ID_MPEG2VIDEO, /* prefered ID for MPEG Video 1 or 2 decoding */
fb364ada 36 CODEC_ID_MPEG2VIDEO_XVMC,
c6148de2 37 CODEC_ID_H261,
de6d9b64
FB
38 CODEC_ID_H263,
39 CODEC_ID_RV10,
68b94c35 40 CODEC_ID_RV20,
de6d9b64 41 CODEC_ID_MJPEG,
b135d9fb 42 CODEC_ID_MJPEGB,
b1e6b355 43 CODEC_ID_LJPEG,
5e83dec4 44 CODEC_ID_SP5X,
bf89e6b1 45 CODEC_ID_MPEG4,
de6d9b64 46 CODEC_ID_RAWVIDEO,
84afee34
MN
47 CODEC_ID_MSMPEG4V1,
48 CODEC_ID_MSMPEG4V2,
49 CODEC_ID_MSMPEG4V3,
e1a9dbff 50 CODEC_ID_WMV1,
b50eef3a 51 CODEC_ID_WMV2,
de6d9b64
FB
52 CODEC_ID_H263P,
53 CODEC_ID_H263I,
d4f5d74a 54 CODEC_ID_FLV1,
be8ffec9 55 CODEC_ID_SVQ1,
8b82a956 56 CODEC_ID_SVQ3,
020fcc94 57 CODEC_ID_DVVIDEO,
11f18faf 58 CODEC_ID_HUFFYUV,
f70f7c6d 59 CODEC_ID_CYUV,
0da71265 60 CODEC_ID_H264,
deabd4fd 61 CODEC_ID_INDEO3,
d86053a4 62 CODEC_ID_VP3,
f44ee2c3 63 CODEC_ID_THEORA,
3d2e8cce 64 CODEC_ID_ASV1,
9b56edf5 65 CODEC_ID_ASV2,
5e20f836 66 CODEC_ID_FFV1,
e2a7bb28 67 CODEC_ID_4XM,
be3564ed 68 CODEC_ID_VCR1,
3aff069b 69 CODEC_ID_CLJR,
c3bf0288 70 CODEC_ID_MDEC,
3ef8be2b
MM
71 CODEC_ID_ROQ,
72 CODEC_ID_INTERPLAY_VIDEO,
9937e686
MM
73 CODEC_ID_XAN_WC3,
74 CODEC_ID_XAN_WC4,
2fdf638b
MM
75 CODEC_ID_RPZA,
76 CODEC_ID_CINEPAK,
77 CODEC_ID_WS_VQA,
78 CODEC_ID_MSRLE,
79 CODEC_ID_MSVIDEO1,
4120a53a 80 CODEC_ID_IDCIN,
1dc1ed99 81 CODEC_ID_8BPS,
11e29a41 82 CODEC_ID_SMC,
42cad81a 83 CODEC_ID_FLIC,
9a4117d5 84 CODEC_ID_TRUEMOTION1,
fafa0b75 85 CODEC_ID_VMDVIDEO,
a273bbfb
RT
86 CODEC_ID_MSZH,
87 CODEC_ID_ZLIB,
070ed1bc 88 CODEC_ID_QTRLE,
791e7b83 89 CODEC_ID_SNOW,
9d53d58e 90 CODEC_ID_TSCC,
d0a0bbd2 91 CODEC_ID_ULTI,
d08d7142 92 CODEC_ID_QDRAW,
ab711b3c 93 CODEC_ID_VIXL,
acfd8f0f 94 CODEC_ID_QPEG,
17179d2d
MN
95 CODEC_ID_XVID,
96 CODEC_ID_PNG,
97 CODEC_ID_PPM,
98 CODEC_ID_PBM,
99 CODEC_ID_PGM,
100 CODEC_ID_PGMYUV,
101 CODEC_ID_PAM,
f37b9768 102 CODEC_ID_FFVHUFF,
3f05305d
MN
103 CODEC_ID_RV30,
104 CODEC_ID_RV40,
105
a96b68b7
FB
106
107 /* various pcm "codecs" */
17179d2d 108 CODEC_ID_PCM_S16LE= 0x10000,
a96b68b7
FB
109 CODEC_ID_PCM_S16BE,
110 CODEC_ID_PCM_U16LE,
111 CODEC_ID_PCM_U16BE,
112 CODEC_ID_PCM_S8,
113 CODEC_ID_PCM_U8,
114 CODEC_ID_PCM_MULAW,
115 CODEC_ID_PCM_ALAW,
0147f198
FR
116
117 /* various adpcm codecs */
17179d2d 118 CODEC_ID_ADPCM_IMA_QT= 0x11000,
0147f198 119 CODEC_ID_ADPCM_IMA_WAV,
9937e686
MM
120 CODEC_ID_ADPCM_IMA_DK3,
121 CODEC_ID_ADPCM_IMA_DK4,
2fdf638b 122 CODEC_ID_ADPCM_IMA_WS,
7d8379f2 123 CODEC_ID_ADPCM_IMA_SMJPEG,
0147f198 124 CODEC_ID_ADPCM_MS,
e2a7bb28 125 CODEC_ID_ADPCM_4XM,
fc384777
MM
126 CODEC_ID_ADPCM_XA,
127 CODEC_ID_ADPCM_ADX,
7d8379f2 128 CODEC_ID_ADPCM_EA,
e5966052 129 CODEC_ID_ADPCM_G726,
b3bfb299 130 CODEC_ID_ADPCM_CT,
891f64b3 131
17179d2d
MN
132 /* AMR */
133 CODEC_ID_AMR_NB= 0x12000,
d663a1fd
MN
134 CODEC_ID_AMR_WB,
135
b8414bbd 136 /* RealAudio codecs*/
17179d2d 137 CODEC_ID_RA_144= 0x13000,
b8414bbd 138 CODEC_ID_RA_288,
3ef8be2b
MM
139
140 /* various DPCM codecs */
17179d2d 141 CODEC_ID_ROQ_DPCM= 0x14000,
3ef8be2b 142 CODEC_ID_INTERPLAY_DPCM,
9937e686 143 CODEC_ID_XAN_DPCM,
d08d7142 144 CODEC_ID_SOL_DPCM,
985180a1 145
17179d2d
MN
146 CODEC_ID_MP2= 0x15000,
147 CODEC_ID_MP3, /* prefered ID for MPEG Audio layer 1, 2 or3 decoding */
148 CODEC_ID_AAC,
149 CODEC_ID_MPEG4AAC,
150 CODEC_ID_AC3,
151 CODEC_ID_DTS,
152 CODEC_ID_VORBIS,
153 CODEC_ID_DVAUDIO,
154 CODEC_ID_WMAV1,
155 CODEC_ID_WMAV2,
156 CODEC_ID_MACE3,
157 CODEC_ID_MACE6,
158 CODEC_ID_VMDAUDIO,
159 CODEC_ID_SONIC,
160 CODEC_ID_SONIC_LS,
ac2570a8
MN
161 CODEC_ID_FLAC,
162
17179d2d 163 CODEC_ID_MPEG2TS= 0x20000, /* _FAKE_ codec to indicate a raw MPEG2 transport
985180a1 164 stream (only used by libavformat) */
de6d9b64 165};
dcedf586
FB
166
167/* CODEC_ID_MP3LAME is absolete */
168#define CODEC_ID_MP3LAME CODEC_ID_MP3
de6d9b64
FB
169
170enum CodecType {
4a663d80 171 CODEC_TYPE_UNKNOWN = -1,
de6d9b64
FB
172 CODEC_TYPE_VIDEO,
173 CODEC_TYPE_AUDIO,
985180a1 174 CODEC_TYPE_DATA,
de6d9b64
FB
175};
176
64863965 177/**
0f371e3e
MM
178 * Pixel format. Notes:
179 *
180 * PIX_FMT_RGBA32 is handled in an endian-specific manner. A RGBA
181 * color is put together as:
182 * (A << 24) | (R << 16) | (G << 8) | B
183 * This is stored as BGRA on little endian CPU architectures and ARGB on
184 * big endian CPUs.
185 *
186 * When the pixel format is palettized RGB (PIX_FMT_PAL8), the palettized
187 * image data is stored in AVFrame.data[0]. The palette is transported in
188 * AVFrame.data[1] and, is 1024 bytes long (256 4-byte entries) and is
189 * formatted the same as in PIX_FMT_RGBA32 described above (i.e., it is
fc384777
MM
190 * also endian-specific). Note also that the individual RGB palette
191 * components stored in AVFrame.data[1] should be in the range 0..255.
192 * This is important as many custom PAL8 video codecs that were designed
193 * to run on the IBM VGA graphics adapter use 6-bit palette components.
64863965 194 */
de6d9b64 195enum PixelFormat {
cd394651 196 PIX_FMT_YUV420P, ///< Planar YUV 4:2:0 (1 Cr & Cb sample per 2x2 Y samples)
ebb177dd 197 PIX_FMT_YUV422, ///< Packed pixel, Y0 Cb Y1 Cr
cd394651
MN
198 PIX_FMT_RGB24, ///< Packed pixel, 3 bytes per pixel, RGBRGB...
199 PIX_FMT_BGR24, ///< Packed pixel, 3 bytes per pixel, BGRBGR...
200 PIX_FMT_YUV422P, ///< Planar YUV 4:2:2 (1 Cr & Cb sample per 2x1 Y samples)
201 PIX_FMT_YUV444P, ///< Planar YUV 4:4:4 (1 Cr & Cb sample per 1x1 Y samples)
0f371e3e 202 PIX_FMT_RGBA32, ///< Packed pixel, 4 bytes per pixel, BGRABGRA..., stored in cpu endianness
cd394651
MN
203 PIX_FMT_YUV410P, ///< Planar YUV 4:1:0 (1 Cr & Cb sample per 4x4 Y samples)
204 PIX_FMT_YUV411P, ///< Planar YUV 4:1:1 (1 Cr & Cb sample per 4x1 Y samples)
64863965
MN
205 PIX_FMT_RGB565, ///< always stored in cpu endianness
206 PIX_FMT_RGB555, ///< always stored in cpu endianness, most significant bit to 1
dab64ebc 207 PIX_FMT_GRAY8,
64863965
MN
208 PIX_FMT_MONOWHITE, ///< 0 is white
209 PIX_FMT_MONOBLACK, ///< 0 is black
210 PIX_FMT_PAL8, ///< 8 bit with RGBA palette
cd394651
MN
211 PIX_FMT_YUVJ420P, ///< Planar YUV 4:2:0 full scale (jpeg)
212 PIX_FMT_YUVJ422P, ///< Planar YUV 4:2:2 full scale (jpeg)
213 PIX_FMT_YUVJ444P, ///< Planar YUV 4:4:4 full scale (jpeg)
fb364ada
IK
214 PIX_FMT_XVMC_MPEG2_MC,///< XVideo Motion Acceleration via common packet passing(xvmc_render.h)
215 PIX_FMT_XVMC_MPEG2_IDCT,
ebb177dd 216 PIX_FMT_UYVY422, ///< Packed pixel, Cb Y0 Cr Y1
f02be79d 217 PIX_FMT_UYVY411, ///< Packed pixel, Cb Y0 Y1 Cr Y2 Y3
dab64ebc 218 PIX_FMT_NB,
de6d9b64
FB
219};
220
a96b68b7
FB
221/* currently unused, may be used if 24/32 bits samples ever supported */
222enum SampleFormat {
64863965 223 SAMPLE_FMT_S16 = 0, ///< signed 16 bits
a96b68b7
FB
224};
225
de6d9b64 226/* in bytes */
bc8d1857 227#define AVCODEC_MAX_AUDIO_FRAME_SIZE 131072
de6d9b64 228
d7425f59 229/**
cf713bb8
MN
230 * Required number of additionally allocated bytes at the end of the input bitstream for decoding.
231 * this is mainly needed because some optimized bitstream readers read
232 * 32 or 64 bit at once and could read over the end<br>
233 * Note, if the first 23 bits of the additional bytes are not 0 then damaged
234 * MPEG bitstreams could cause overread and segfault
d7425f59
MN
235 */
236#define FF_INPUT_BUFFER_PADDING_SIZE 8
237
e4986da9
J
238/* motion estimation type, EPZS by default */
239enum Motion_Est_ID {
101bea5f 240 ME_ZERO = 1,
e4986da9
J
241 ME_FULL,
242 ME_LOG,
243 ME_PHODS,
244 ME_EPZS,
245 ME_X1
246};
247
1f018225
MN
248enum AVRounding {
249 AV_ROUND_ZERO = 0, ///< round toward zero
250 AV_ROUND_INF = 1, ///< round away from zero
251 AV_ROUND_DOWN = 2, ///< round toward -infinity
252 AV_ROUND_UP = 3, ///< round toward +infinity
253 AV_ROUND_NEAR_INF = 5, ///< round to nearest and halfway cases away from zero
254};
255
ce980a95
MN
256typedef struct RcOverride{
257 int start_frame;
258 int end_frame;
259 int qscale; // if this is 0 then quality_factor will be used instead
260 float quality_factor;
261} RcOverride;
262
101bea5f
J
263/* only for ME compatiblity with old apps */
264extern int motion_estimation_method;
265
4e00e76b 266#define FF_MAX_B_FRAMES 8
9dbcbd92 267
a949d72e
MN
268/* encoding support
269 these flags can be passed in AVCodecContext.flags before initing
270 Note: note not everything is supported yet
271*/
de6d9b64 272
64863965 273#define CODEC_FLAG_QSCALE 0x0002 ///< use fixed qscale
dba019da 274#define CODEC_FLAG_4MV 0x0004 ///< 4 MV per MB allowed / Advanced prediction for H263
64863965
MN
275#define CODEC_FLAG_QPEL 0x0010 ///< use qpel MC
276#define CODEC_FLAG_GMC 0x0020 ///< use GMC
ca7d05d5 277#define CODEC_FLAG_MV0 0x0040 ///< always try a MB with MV=<0,0>
64863965 278#define CODEC_FLAG_PART 0x0080 ///< use data partitioning
9dbcbd92
MN
279/* parent program gurantees that the input for b-frame containing streams is not written to
280 for at least s->max_b_frames+1 frames, if this is not set than the input will be copied */
8b4c7dbc 281#define CODEC_FLAG_INPUT_PRESERVED 0x0100
64863965
MN
282#define CODEC_FLAG_PASS1 0x0200 ///< use internal 2pass ratecontrol in first pass mode
283#define CODEC_FLAG_PASS2 0x0400 ///< use internal 2pass ratecontrol in second pass mode
284#define CODEC_FLAG_EXTERN_HUFF 0x1000 ///< use external huffman table (for mjpeg)
285#define CODEC_FLAG_GRAY 0x2000 ///< only decode/encode grayscale
286#define CODEC_FLAG_EMU_EDGE 0x4000///< dont draw edges
287#define CODEC_FLAG_PSNR 0x8000 ///< error[?] variables will be set during encoding
288#define CODEC_FLAG_TRUNCATED 0x00010000 /** input bitstream might be truncated at a random location instead
d7425f59 289 of only at frame boundaries */
64863965
MN
290#define CODEC_FLAG_NORMALIZE_AQP 0x00020000 ///< normalize adaptive quantization
291#define CODEC_FLAG_INTERLACED_DCT 0x00040000 ///< use interlaced dct
3bb07d61 292#define CODEC_FLAG_LOW_DELAY 0x00080000 ///< force low delay
64863965
MN
293#define CODEC_FLAG_ALT_SCAN 0x00100000 ///< use alternate scan
294#define CODEC_FLAG_TRELLIS_QUANT 0x00200000 ///< use trellis quantization
295#define CODEC_FLAG_GLOBAL_HEADER 0x00400000 ///< place global headers in extradata instead of every keyframe
296#define CODEC_FLAG_BITEXACT 0x00800000 ///< use only bitexact stuff (except (i)dct)
21e59552 297/* Fx : Flag for h263+ extra options */
8d8c0294
MN
298#define CODEC_FLAG_H263P_AIC 0x01000000 ///< H263 Advanced intra coding / MPEG4 AC prediction (remove this)
299#define CODEC_FLAG_AC_PRED 0x01000000 ///< H263 Advanced intra coding / MPEG4 AC prediction
64863965 300#define CODEC_FLAG_H263P_UMV 0x02000000 ///< Unlimited motion vector
f2f6134b 301#define CODEC_FLAG_CBP_RD 0x04000000 ///< use rate distortion optimization for cbp
1f26c6f3 302#define CODEC_FLAG_QP_RD 0x08000000 ///< use rate distortion optimization for qp selectioon
dba019da 303#define CODEC_FLAG_H263P_AIV 0x00000008 ///< H263 Alternative inter vlc
332f9ac4
MN
304#define CODEC_FLAG_OBMC 0x00000001 ///< OBMC
305#define CODEC_FLAG_LOOP_FILTER 0x00000800 ///< loop filter
bb198e19
MN
306#define CODEC_FLAG_H263P_SLICE_STRUCT 0x10000000
307#define CODEC_FLAG_INTERLACED_ME 0x20000000 ///< interlaced motion estimation
baaf3f46 308#define CODEC_FLAG_SVCD_SCAN_OFFSET 0x40000000 ///< will reserve space for SVCD scan offset user data
303e50e6 309#define CODEC_FLAG_CLOSED_GOP 0x80000000
6fc5b059 310#define CODEC_FLAG2_FAST 0x00000001 ///< allow non spec compliant speedup tricks
03581772 311#define CODEC_FLAG2_STRICT_GOP 0x00000002 ///< strictly enforce GOP size
6fc5b059 312
21e59552
MN
313/* Unsupported options :
314 * Syntax Arithmetic coding (SAC)
21e59552 315 * Reference Picture Selection
ba58dabc 316 * Independant Segment Decoding */
21e59552 317/* /Fx */
bf89e6b1
FB
318/* codec capabilities */
319
64863965 320#define CODEC_CAP_DRAW_HORIZ_BAND 0x0001 ///< decoder can use draw_horiz_band callback
6814a25c
MN
321/**
322 * Codec uses get_buffer() for allocating buffers.
323 * direct rendering method 1
324 */
325#define CODEC_CAP_DR1 0x0002
917e06c8
FB
326/* if 'parse_only' field is true, then avcodec_parse_frame() can be
327 used */
328#define CODEC_CAP_PARSE_ONLY 0x0004
d7425f59 329#define CODEC_CAP_TRUNCATED 0x0008
5e5c247a
IK
330/* codec can export data for HW decoding (XvMC) */
331#define CODEC_CAP_HWACCEL 0x0010
6f824977
MN
332/** codec has a non zero delay and needs to be feeded with NULL at the end to get the delayed data */
333#define CODEC_CAP_DELAY 0x0020
bf89e6b1 334
8d7ec294
WH
335//the following defines might change, so dont expect compatibility if u use them
336#define MB_TYPE_INTRA4x4 0x0001
337#define MB_TYPE_INTRA16x16 0x0002 //FIXME h264 specific
338#define MB_TYPE_INTRA_PCM 0x0004 //FIXME h264 specific
339#define MB_TYPE_16x16 0x0008
340#define MB_TYPE_16x8 0x0010
341#define MB_TYPE_8x16 0x0020
342#define MB_TYPE_8x8 0x0040
343#define MB_TYPE_INTERLACED 0x0080
344#define MB_TYPE_DIRECT2 0x0100 //FIXME
345#define MB_TYPE_ACPRED 0x0200
346#define MB_TYPE_GMC 0x0400
347#define MB_TYPE_SKIP 0x0800
348#define MB_TYPE_P0L0 0x1000
349#define MB_TYPE_P1L0 0x2000
350#define MB_TYPE_P0L1 0x4000
351#define MB_TYPE_P1L1 0x8000
352#define MB_TYPE_L0 (MB_TYPE_P0L0 | MB_TYPE_P1L0)
353#define MB_TYPE_L1 (MB_TYPE_P0L1 | MB_TYPE_P1L1)
354#define MB_TYPE_L0L1 (MB_TYPE_L0 | MB_TYPE_L1)
355#define MB_TYPE_QUANT 0x00010000
356#define MB_TYPE_CBP 0x00020000
357//Note bits 24-31 are reserved for codec specific use (h264 ref0, mpeg1 0mv, ...)
358
fa384dcc
MN
359/**
360 * Pan Scan area.
361 * this specifies the area which should be displayed. Note there may be multiple such areas for one frame
362 */
363typedef struct AVPanScan{
364 /**
365 * id.
366 * - encoding: set by user.
367 * - decoding: set by lavc
368 */
369 int id;
370
371 /**
372 * width and height in 1/16 pel
373 * - encoding: set by user.
374 * - decoding: set by lavc
375 */
376 int width;
377 int height;
378
379 /**
380 * position of the top left corner in 1/16 pel for up to 3 fields/frames.
381 * - encoding: set by user.
382 * - decoding: set by lavc
383 */
384 int16_t position[3][2];
385}AVPanScan;
386
492cd3a9 387#define FF_COMMON_FRAME \
b536d0aa
MN
388 /**\
389 * pointer to the picture planes.\
390 * this might be different from the first allocated byte\
391 * - encoding: \
392 * - decoding: \
393 */\
1e491e29
MN
394 uint8_t *data[4];\
395 int linesize[4];\
396 /**\
32db2b1d 397 * pointer to the first allocated byte of the picture. can be used in get_buffer/release_buffer\
1e491e29 398 * this isnt used by lavc unless the default get/release_buffer() is used\
64863965
MN
399 * - encoding: \
400 * - decoding: \
1e491e29
MN
401 */\
402 uint8_t *base[4];\
403 /**\
404 * 1 -> keyframe, 0-> not\
64863965
MN
405 * - encoding: set by lavc\
406 * - decoding: set by lavc\
1e491e29
MN
407 */\
408 int key_frame;\
409\
410 /**\
0da71265 411 * picture type of the frame, see ?_TYPE below.\
64863965
MN
412 * - encoding: set by lavc for coded_picture (and set by user for input)\
413 * - decoding: set by lavc\
1e491e29
MN
414 */\
415 int pict_type;\
416\
417 /**\
9740beff
MN
418 * presentation timestamp in AV_TIME_BASE (=micro seconds currently) (time when frame should be shown to user)\
419 * if AV_NOPTS_VALUE then the frame_rate will be used as reference\
64863965
MN
420 * - encoding: MUST be set by user\
421 * - decoding: set by lavc\
1e491e29 422 */\
be6784dc 423 int64_t pts;\
1e491e29
MN
424\
425 /**\
426 * picture number in bitstream order.\
64863965
MN
427 * - encoding: set by\
428 * - decoding: set by lavc\
1e491e29
MN
429 */\
430 int coded_picture_number;\
431 /**\
1e491e29 432 * picture number in display order.\
64863965
MN
433 * - encoding: set by\
434 * - decoding: set by lavc\
1e491e29
MN
435 */\
436 int display_picture_number;\
437\
438 /**\
158c7f05 439 * quality (between 1 (good) and FF_LAMBDA_MAX (bad)) \
64863965
MN
440 * - encoding: set by lavc for coded_picture (and set by user for input)\
441 * - decoding: set by lavc\
1e491e29 442 */\
158c7f05 443 int quality; \
1e491e29
MN
444\
445 /**\
446 * buffer age (1->was last buffer and dint change, 2->..., ...).\
158c7f05 447 * set to INT_MAX if the buffer has not been used yet \
64863965
MN
448 * - encoding: unused\
449 * - decoding: MUST be set by get_buffer()\
1e491e29
MN
450 */\
451 int age;\
452\
453 /**\
454 * is this picture used as reference\
64863965
MN
455 * - encoding: unused\
456 * - decoding: set by lavc (before get_buffer() call))\
1e491e29
MN
457 */\
458 int reference;\
459\
460 /**\
461 * QP table\
64863965
MN
462 * - encoding: unused\
463 * - decoding: set by lavc\
1e491e29
MN
464 */\
465 int8_t *qscale_table;\
466 /**\
467 * QP store stride\
64863965
MN
468 * - encoding: unused\
469 * - decoding: set by lavc\
1e491e29
MN
470 */\
471 int qstride;\
472\
473 /**\
474 * mbskip_table[mb]>=1 if MB didnt change\
475 * stride= mb_width = (width+15)>>4\
64863965
MN
476 * - encoding: unused\
477 * - decoding: set by lavc\
1e491e29
MN
478 */\
479 uint8_t *mbskip_table;\
480\
481 /**\
61436073
MN
482 * Motion vector table.\
483 * @code\
484 * example:\
485 * int mv_sample_log2= 4 - motion_subsample_log2;\
486 * int mb_width= (width+15)>>4;\
487 * int mv_stride= (mb_width << mv_sample_log2) + 1;\
488 * motion_val[direction][x + y*mv_stride][0->mv_x, 1->mv_y];\
489 * @endcode\
a4d36c11 490 * - encoding: set by user\
8d7ec294
WH
491 * - decoding: set by lavc\
492 */\
493 int16_t (*motion_val[2])[2];\
494\
495 /**\
496 * Macroblock type table\
497 * mb_type_base + mb_width + 2\
a4d36c11 498 * - encoding: set by user\
8d7ec294
WH
499 * - decoding: set by lavc\
500 */\
501 uint32_t *mb_type;\
502\
503 /**\
f0b77c69
MN
504 * log2 of the size of the block which a single vector in motion_val represents: \
505 * (4->16x16, 3->8x8, 2-> 4x4, 1-> 2x2)\
8d7ec294
WH
506 * - encoding: unused\
507 * - decoding: set by lavc\
508 */\
509 uint8_t motion_subsample_log2;\
510\
511 /**\
1e491e29 512 * for some private data of the user\
64863965
MN
513 * - encoding: unused\
514 * - decoding: set by user\
1e491e29
MN
515 */\
516 void *opaque;\
140cb663
MN
517\
518 /**\
519 * error\
64863965
MN
520 * - encoding: set by lavc if flags&CODEC_FLAG_PSNR\
521 * - decoding: unused\
140cb663
MN
522 */\
523 uint64_t error[4];\
4e00e76b
MN
524\
525 /**\
526 * type of the buffer (to keep track of who has to dealloc data[*])\
64863965
MN
527 * - encoding: set by the one who allocs it\
528 * - decoding: set by the one who allocs it\
3db320ea 529 * Note: user allocated (direct rendering) & internal buffers can not coexist currently\
4e00e76b
MN
530 */\
531 int type;\
2ec23b6d
MN
532 \
533 /**\
534 * when decoding, this signal how much the picture must be delayed.\
535 * extra_delay = repeat_pict / (2*fps)\
64863965
MN
536 * - encoding: unused\
537 * - decoding: set by lavc\
2ec23b6d 538 */\
0426af31
MN
539 int repeat_pict;\
540 \
541 /**\
542 * \
543 */\
544 int qscale_type;\
2744ca9a
RS
545 \
546 /**\
547 * The content of the picture is interlaced.\
548 * - encoding: set by user\
549 * - decoding: set by lavc (default 0)\
550 */\
551 int interlaced_frame;\
552 \
553 /**\
9dad924e 554 * if the content is interlaced, is top field displayed first.\
2744ca9a 555 * - encoding: set by user\
9dad924e 556 * - decoding: set by lavc\
2744ca9a 557 */\
9dad924e 558 int top_field_first;\
fa384dcc
MN
559 \
560 /**\
561 * Pan scan.\
562 * - encoding: set by user\
563 * - decoding: set by lavc\
564 */\
565 AVPanScan *pan_scan;\
2a2bbcb0
MM
566 \
567 /**\
568 * tell user application that palette has changed from previous frame.\
569 * - encoding: ??? (no palette-enabled encoder yet)\
570 * - decoding: set by lavc (default 0)\
571 */\
572 int palette_has_changed;\
074c4ca7
RT
573 \
574 /**\
575 * Codec suggestion on buffer type if != 0\
576 * - encoding: unused\
577 * - decoding: set by lavc (before get_buffer() call))\
578 */\
579 int buffer_hints;\
8289c6fa
WH
580\
581 /**\
582 * DCT coeffitients\
583 * - encoding: unused\
584 * - decoding: set by lavc\
585 */\
586 short *dct_coeff;\
a4d36c11
MN
587\
588 /**\
589 * Motion referece frame index\
590 * - encoding: set by user\
591 * - decoding: set by lavc\
592 */\
593 int8_t *ref_index[2];
2ec23b6d 594
0426af31
MN
595#define FF_QSCALE_TYPE_MPEG1 0
596#define FF_QSCALE_TYPE_MPEG2 1
4e00e76b
MN
597
598#define FF_BUFFER_TYPE_INTERNAL 1
9b56edf5 599#define FF_BUFFER_TYPE_USER 2 ///< Direct rendering buffers (image is (de)allocated by user)
a4d36c11 600#define FF_BUFFER_TYPE_SHARED 4 ///< buffer from somewher else, dont dealloc image (data/base), all other tables are not shared
9b56edf5 601#define FF_BUFFER_TYPE_COPY 8 ///< just a (modified) copy of some other buffer, dont dealloc anything
4e00e76b 602
1e491e29 603
140cb663
MN
604#define FF_I_TYPE 1 // Intra
605#define FF_P_TYPE 2 // Predicted
606#define FF_B_TYPE 3 // Bi-dir predicted
607#define FF_S_TYPE 4 // S(GMC)-VOP MPEG4
0da71265
MN
608#define FF_SI_TYPE 5
609#define FF_SP_TYPE 6
1e491e29 610
074c4ca7
RT
611#define FF_BUFFER_HINTS_VALID 0x01 // Buffer hints value is meaningful (if 0 ignore)
612#define FF_BUFFER_HINTS_READABLE 0x02 // Codec will read from buffer
613#define FF_BUFFER_HINTS_PRESERVE 0x04 // User must not alter buffer content
614#define FF_BUFFER_HINTS_REUSABLE 0x08 // Codec will reuse the buffer (update)
615
0da71265
MN
616/**
617 * Audio Video Frame.
618 */
492cd3a9
MN
619typedef struct AVFrame {
620 FF_COMMON_FRAME
621} AVFrame;
1e491e29 622
14bea432 623#define DEFAULT_FRAME_RATE_BASE 1001000
d33c949c
MN
624
625/**
bc874dae
MB
626 * Used by av_log
627 */
628typedef struct AVCLASS AVClass;
629struct AVCLASS {
630 const char* class_name;
631 const char* (*item_name)(void*); /* actually passing a pointer to an AVCodecContext
632 or AVFormatContext, which begin with an AVClass.
633 Needed because av_log is in libavcodec and has no visibility
634 of AVIn/OutputFormat */
635};
636
637/**
d33c949c
MN
638 * main external api structure.
639 */
de6d9b64 640typedef struct AVCodecContext {
b71901e6 641 /**
bc874dae
MB
642 * Info on struct for av_log
643 * - set by avcodec_alloc_context
644 */
43465395 645 AVClass *av_class;
bc874dae 646 /**
64863965
MN
647 * the average bitrate.
648 * - encoding: set by user. unused for constant quantizer encoding
649 * - decoding: set by lavc. 0 or some bitrate if this info is available in the stream
b71901e6 650 */
de6d9b64 651 int bit_rate;
b71901e6
MN
652
653 /**
64863965 654 * number of bits the bitstream is allowed to diverge from the reference.
b71901e6 655 * the reference can be CBR (for CBR pass1) or VBR (for pass2)
64863965
MN
656 * - encoding: set by user. unused for constant quantizer encoding
657 * - decoding: unused
b71901e6
MN
658 */
659 int bit_rate_tolerance;
660
661 /**
64863965
MN
662 * CODEC_FLAG_*.
663 * - encoding: set by user.
664 * - decoding: set by user.
b71901e6 665 */
de6d9b64 666 int flags;
b71901e6
MN
667
668 /**
669 * some codecs needs additionnal format info. It is stored here
64863965
MN
670 * - encoding: set by user.
671 * - decoding: set by lavc. (FIXME is this ok?)
b71901e6
MN
672 */
673 int sub_id;
674
675 /**
64863965
MN
676 * motion estimation algorithm used for video coding.
677 * - encoding: MUST be set by user.
678 * - decoding: unused
b71901e6
MN
679 */
680 int me_method;
681
682 /**
64863965 683 * some codecs need / can use extra-data like huffman tables.
b71901e6
MN
684 * mjpeg: huffman tables
685 * rv10: additional flags
b704e742 686 * mpeg4: global headers (they can be in the bitstream or here)
dffcdbb5
MN
687 * the allocated memory should be FF_INPUT_BUFFER_PADDING_SIZE bytes larger
688 * then extradata_size to avoid prolems if its read with the bitstream reader
64863965
MN
689 * - encoding: set/allocated/freed by lavc.
690 * - decoding: set/allocated/freed by user.
b71901e6 691 */
e84c31dc
A
692 void *extradata;
693 int extradata_size;
694
de6d9b64 695 /* video only */
b71901e6 696 /**
14bea432 697 * frames per sec multiplied by frame_rate_base.
b71901e6 698 * for variable fps this is the precission, so if the timestamps
14bea432 699 * can be specified in msec precssion then this is 1000*frame_rate_base
64863965
MN
700 * - encoding: MUST be set by user
701 * - decoding: set by lavc. 0 or the frame_rate if available
b71901e6
MN
702 */
703 int frame_rate;
14bea432
MN
704
705 /**
21adafec 706 * picture width / height.
64863965 707 * - encoding: MUST be set by user.
21adafec
MN
708 * - decoding: set by lavc.
709 * Note, for compatibility its possible to set this instead of
710 * coded_width/height before decoding
b71901e6 711 */
de6d9b64 712 int width, height;
b71901e6 713
e769f053 714#define FF_ASPECT_EXTENDED 15
b71901e6
MN
715
716 /**
64863965
MN
717 * the number of pictures in a group of pitures, or 0 for intra_only.
718 * - encoding: set by user.
719 * - decoding: unused
b71901e6
MN
720 */
721 int gop_size;
722
723 /**
64863965 724 * pixel format, see PIX_FMT_xxx.
36b58e85
RS
725 * - encoding: FIXME: used by ffmpeg to decide whether an pix_fmt
726 * conversion is in order. This only works for
727 * codecs with one supported pix_fmt, we should
728 * do something for a generic case as well.
64863965 729 * - decoding: set by lavc.
b71901e6 730 */
e4eadb4b 731 enum PixelFormat pix_fmt;
bdfcbbed
MK
732
733 /**
734 * Frame rate emulation. If not zero lower layer (i.e. format handler)
735 * has to read frames at native frame rate.
736 * - encoding: set by user.
737 * - decoding: unused.
738 */
739 int rate_emu;
740
b71901e6
MN
741 /**
742 * if non NULL, 'draw_horiz_band' is called by the libavcodec
743 * decoder to draw an horizontal band. It improve cache usage. Not
744 * all codecs can do that. You must check the codec capabilities
745 * before
64863965
MN
746 * - encoding: unused
747 * - decoding: set by user.
3bb07d61
MN
748 * @param height the height of the slice
749 * @param y the y position of the slice
750 * @param type 1->top field, 2->bottom field, 3->frame
751 * @param offset offset into the AVFrame.data from which the slice should be read
b71901e6 752 */
bf89e6b1 753 void (*draw_horiz_band)(struct AVCodecContext *s,
da64ecc3 754 const AVFrame *src, int offset[4],
3bb07d61 755 int y, int type, int height);
bf89e6b1 756
de6d9b64 757 /* audio only */
64863965 758 int sample_rate; ///< samples per sec
de6d9b64 759 int channels;
64863965 760 int sample_fmt; ///< sample format, currenly unused
de6d9b64
FB
761
762 /* the following data should not be initialized */
64863965
MN
763 int frame_size; ///< in samples, initialized when calling 'init'
764 int frame_number; ///< audio or video frame number
765 int real_pict_num; ///< returns the real picture number of previous encoded frame
1e491e29 766
b71901e6 767 /**
b71901e6 768 * number of frames the decoded output will be delayed relative to
64863965
MN
769 * the encoded input.
770 * - encoding: set by lavc.
771 * - decoding: unused
b71901e6
MN
772 */
773 int delay;
1ff662cc 774
64863965
MN
775 /* - encoding parameters */
776 float qcompress; ///< amount of qscale change between easy & hard scenes (0.0-1.0)
777 float qblur; ///< amount of qscale smoothing over time (0.0-1.0)
b71901e6
MN
778
779 /**
64863965
MN
780 * minimum quantizer.
781 * - encoding: set by user.
782 * - decoding: unused
b71901e6
MN
783 */
784 int qmin;
785
786 /**
64863965
MN
787 * maximum quantizer.
788 * - encoding: set by user.
789 * - decoding: unused
b71901e6
MN
790 */
791 int qmax;
792
793 /**
64863965
MN
794 * maximum quantizer difference etween frames.
795 * - encoding: set by user.
796 * - decoding: unused
b71901e6
MN
797 */
798 int max_qdiff;
799
800 /**
64863965 801 * maximum number of b frames between non b frames.
b71901e6 802 * note: the output will be delayed by max_b_frames+1 relative to the input
64863965
MN
803 * - encoding: set by user.
804 * - decoding: unused
b71901e6
MN
805 */
806 int max_b_frames;
807
808 /**
64863965
MN
809 * qscale factor between ip and b frames.
810 * - encoding: set by user.
811 * - decoding: unused
b71901e6
MN
812 */
813 float b_quant_factor;
814
815 /** obsolete FIXME remove */
816 int rc_strategy;
8b4c7dbc 817 int b_frame_strategy;
9dbcbd92 818
b71901e6 819 /**
64863965
MN
820 * hurry up amount.
821 * - encoding: unused
822 * - decoding: set by user. 1-> skip b frames, 2-> skip idct/dequant too, 5-> skip everything except header
b71901e6
MN
823 */
824 int hurry_up;
2417652e 825
de6d9b64 826 struct AVCodec *codec;
b71901e6 827
de6d9b64
FB
828 void *priv_data;
829
ba58dabc
MN
830 /* unused, FIXME remove*/
831 int rtp_mode;
644d98a4
J
832
833 int rtp_payload_size; /* The size of the RTP payload, the coder will */
834 /* do it's best to deliver a chunk with size */
835 /* below rtp_payload_size, the chunk will start */
836 /* with a start code on some codecs like H.263 */
837 /* This doesn't take account of any particular */
838 /* headers inside the transmited RTP payload */
81401c1f
J
839
840
841 /* The RTP callcack: This function is called */
842 /* every time the encoder as a packet to send */
843 /* Depends on the encoder if the data starts */
844 /* with a Start Code (it should) H.263 does */
a7fcb3ea 845 void (*rtp_callback)(struct AVCodecContext *avctx, void *data, int size, int packet_number);
81401c1f 846
098eefe1
MN
847 /* statistics, used for 2-pass encoding */
848 int mv_bits;
849 int header_bits;
850 int i_tex_bits;
851 int p_tex_bits;
852 int i_count;
853 int p_count;
854 int skip_count;
b71901e6
MN
855 int misc_bits;
856
857 /**
64863965
MN
858 * number of bits used for the previously encoded frame.
859 * - encoding: set by lavc
7004ffb3 860 * - decoding: unused
b71901e6 861 */
098eefe1 862 int frame_bits;
7004ffb3 863
b71901e6 864 /**
64863965
MN
865 * private data of the user, can be used to carry app specific stuff.
866 * - encoding: set by user
867 * - decoding: set by user
b71901e6
MN
868 */
869 void *opaque;
870
de6d9b64 871 char codec_name[32];
4a663d80
PG
872 enum CodecType codec_type; /* see CODEC_TYPE_xxx */
873 enum CodecID codec_id; /* see CODEC_ID_xxx */
7004ffb3
MN
874
875 /**
876 * fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A').
877 * this is used to workaround some encoder bugs
bd5a6020 878 * - encoding: set by user, if not then the default based on codec_id will be used
7004ffb3
MN
879 * - decoding: set by user, will be converted to upper case by lavc during init
880 */
881 unsigned int codec_tag;
92ba5ffb 882
b71901e6 883 /**
64863965
MN
884 * workaround bugs in encoders which sometimes cannot be detected automatically.
885 * - encoding: unused
886 * - decoding: set by user
b71901e6
MN
887 */
888 int workaround_bugs;
64863965 889#define FF_BUG_AUTODETECT 1 ///< autodetection
4d2858de
MN
890#define FF_BUG_OLD_MSMPEG4 2
891#define FF_BUG_XVID_ILACE 4
892#define FF_BUG_UMP4 8
893#define FF_BUG_NO_PADDING 16
3116cb14 894#define FF_BUG_AMV 32
ac0c6638 895#define FF_BUG_AC_VLC 0 ///< will be removed, libavcodec can now handle these non compliant files by default
03e93d35 896#define FF_BUG_QPEL_CHROMA 64
db794953 897#define FF_BUG_STD_QPEL 128
36df8805 898#define FF_BUG_QPEL_CHROMA2 256
c40c3482 899#define FF_BUG_DIRECT_BLOCKSIZE 512
1c6dcb0f 900#define FF_BUG_EDGE 1024
b44bdf7e 901#define FF_BUG_HPEL_CHROMA 2048
4ccde216 902#define FF_BUG_DC_CLIP 4096
4d2858de
MN
903//#define FF_BUG_FAKE_SCALABILITY 16 //autodetection should work 100%
904
b71901e6 905 /**
64863965
MN
906 * luma single coeff elimination threshold.
907 * - encoding: set by user
908 * - decoding: unused
b71901e6 909 */
1f6b6e50 910 int luma_elim_threshold;
b71901e6
MN
911
912 /**
64863965
MN
913 * chroma single coeff elimination threshold.
914 * - encoding: set by user
915 * - decoding: unused
b71901e6 916 */
1f6b6e50 917 int chroma_elim_threshold;
b71901e6
MN
918
919 /**
64863965
MN
920 * strictly follow the std (MPEG4, ...).
921 * - encoding: set by user
922 * - decoding: unused
b71901e6
MN
923 */
924 int strict_std_compliance;
925
926 /**
64863965 927 * qscale offset between ip and b frames.
b3a391e8
MN
928 * if > 0 then the last p frame quantizer will be used (q= lastp_q*factor+offset)
929 * if < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset)
64863965
MN
930 * - encoding: set by user.
931 * - decoding: unused
b71901e6
MN
932 */
933 float b_quant_offset;
934
935 /**
ce3bcaed 936 * error resilience higher values will detect more errors but may missdetect
64863965
MN
937 * some more or less valid parts as errors.
938 * - encoding: unused
939 * - decoding: set by user
b71901e6 940 */
1f6b6e50 941 int error_resilience;
ce3bcaed
MN
942#define FF_ER_CAREFULL 1
943#define FF_ER_COMPLIANT 2
944#define FF_ER_AGGRESSIVE 3
945#define FF_ER_VERY_AGGRESSIVE 4
ae72cda6 946
6b72ac63 947 /**
1e491e29
MN
948 * called at the beginning of each frame to get a buffer for it.
949 * if pic.reference is set then the frame will be read later by lavc
2b5296d2
MN
950 * avcodec_align_dimensions() should be used to find the required width and
951 * height, as they normally need to be rounded up to the next multiple of 16
64863965
MN
952 * - encoding: unused
953 * - decoding: set by lavc, user can override
b71901e6 954 */
492cd3a9 955 int (*get_buffer)(struct AVCodecContext *c, AVFrame *pic);
b71901e6
MN
956
957 /**
1e491e29
MN
958 * called to release buffers which where allocated with get_buffer.
959 * a released buffer can be reused in get_buffer()
960 * pic.data[*] must be set to NULL
64863965
MN
961 * - encoding: unused
962 * - decoding: set by lavc, user can override
b71901e6 963 */
492cd3a9 964 void (*release_buffer)(struct AVCodecContext *c, AVFrame *pic);
0fd90455 965
b71901e6 966 /**
e6a2ac34
MN
967 * if 1 the stream has a 1 frame delay during decoding.
968 * - encoding: set by lavc
64863965 969 * - decoding: set by lavc
b71901e6
MN
970 */
971 int has_b_frames;
b71901e6 972
64863965 973 int block_align; ///< used by some WAV based audio codecs
ce980a95 974
64863965 975 int parse_only; /* - decoding only: if true, only parsing is done
917e06c8
FB
976 (function avcodec_parse_frame()). The frame
977 data is returned. Only MPEG codecs support this now. */
ce980a95 978
b71901e6 979 /**
e4eadb4b 980 * 0-> h263 quant 1-> mpeg quant.
64863965
MN
981 * - encoding: set by user.
982 * - decoding: unused
b71901e6
MN
983 */
984 int mpeg_quant;
ce980a95 985
b71901e6 986 /**
64863965
MN
987 * pass1 encoding statistics output buffer.
988 * - encoding: set by lavc
989 * - decoding: unused
b71901e6 990 */
64863965 991 char *stats_out;
b71901e6
MN
992
993 /**
994 * pass2 encoding statistics input buffer.
995 * concatenated stuff from stats_out of pass1 should be placed here
64863965
MN
996 * - encoding: allocated/set/freed by user
997 * - decoding: unused
b71901e6
MN
998 */
999 char *stats_in;
1000
1001 /**
64863965 1002 * ratecontrol qmin qmax limiting method.
b71901e6 1003 * 0-> clipping, 1-> use a nice continous function to limit qscale wthin qmin/qmax
64863965
MN
1004 * - encoding: set by user.
1005 * - decoding: unused
b71901e6 1006 */
ce980a95 1007 float rc_qsquish;
b71901e6 1008
ce980a95
MN
1009 float rc_qmod_amp;
1010 int rc_qmod_freq;
b71901e6
MN
1011
1012 /**
64863965
MN
1013 * ratecontrol override, see RcOverride.
1014 * - encoding: allocated/set/freed by user.
1015 * - decoding: unused
b71901e6 1016 */
ce980a95
MN
1017 RcOverride *rc_override;
1018 int rc_override_count;
b71901e6
MN
1019
1020 /**
64863965
MN
1021 * rate control equation.
1022 * - encoding: set by user
1023 * - decoding: unused
b71901e6 1024 */
ce980a95 1025 char *rc_eq;
b71901e6
MN
1026
1027 /**
64863965
MN
1028 * maximum bitrate.
1029 * - encoding: set by user.
1030 * - decoding: unused
b71901e6 1031 */
ce980a95 1032 int rc_max_rate;
b71901e6
MN
1033
1034 /**
64863965
MN
1035 * minimum bitrate.
1036 * - encoding: set by user.
1037 * - decoding: unused
b71901e6 1038 */
ce980a95 1039 int rc_min_rate;
b71901e6
MN
1040
1041 /**
64863965
MN
1042 * decoder bitstream buffer size.
1043 * - encoding: set by user.
1044 * - decoding: unused
b71901e6 1045 */
ce980a95
MN
1046 int rc_buffer_size;
1047 float rc_buffer_aggressivity;
b71901e6
MN
1048
1049 /**
64863965 1050 * qscale factor between p and i frames.
a1e257b2
MN
1051 * if > 0 then the last p frame quantizer will be used (q= lastp_q*factor+offset)
1052 * if < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset)
64863965
MN
1053 * - encoding: set by user.
1054 * - decoding: unused
b71901e6
MN
1055 */
1056 float i_quant_factor;
1057
1058 /**
64863965 1059 * qscale offset between p and i frames.
64863965
MN
1060 * - encoding: set by user.
1061 * - decoding: unused
b71901e6
MN
1062 */
1063 float i_quant_offset;
1064
1065 /**
64863965
MN
1066 * initial complexity for pass1 ratecontrol.
1067 * - encoding: set by user.
1068 * - decoding: unused
b71901e6 1069 */
ce980a95 1070 float rc_initial_cplx;
917e06c8 1071
b71901e6 1072 /**
64863965
MN
1073 * dct algorithm, see FF_DCT_* below.
1074 * - encoding: set by user
1075 * - decoding: unused
b71901e6 1076 */
28db7fce 1077 int dct_algo;
c7e07931 1078#define FF_DCT_AUTO 0
28db7fce 1079#define FF_DCT_FASTINT 1
c7e07931
MO
1080#define FF_DCT_INT 2
1081#define FF_DCT_MMX 3
1082#define FF_DCT_MLIB 4
05c4072b 1083#define FF_DCT_ALTIVEC 5
65e4c8c9 1084#define FF_DCT_FAAN 6
c5d309f2
MN
1085
1086 /**
64863965
MN
1087 * luminance masking (0-> disabled).
1088 * - encoding: set by user
1089 * - decoding: unused
c5d309f2
MN
1090 */
1091 float lumi_masking;
1092
1093 /**
64863965
MN
1094 * temporary complexity masking (0-> disabled).
1095 * - encoding: set by user
1096 * - decoding: unused
c5d309f2
MN
1097 */
1098 float temporal_cplx_masking;
1099
1100 /**
64863965
MN
1101 * spatial complexity masking (0-> disabled).
1102 * - encoding: set by user
1103 * - decoding: unused
c5d309f2
MN
1104 */
1105 float spatial_cplx_masking;
1106
1107 /**
64863965
MN
1108 * p block masking (0-> disabled).
1109 * - encoding: set by user
1110 * - decoding: unused
c5d309f2
MN
1111 */
1112 float p_masking;
15415af4 1113
5e746b99 1114 /**
64863965
MN
1115 * darkness masking (0-> disabled).
1116 * - encoding: set by user
1117 * - decoding: unused
5e746b99
MN
1118 */
1119 float dark_masking;
0c2dd16e 1120
3a694b04
NK
1121
1122 /* for binary compatibility */
1123 int unused;
1124
0c2dd16e 1125 /**
64863965
MN
1126 * idct algorithm, see FF_IDCT_* below.
1127 * - encoding: set by user
1128 * - decoding: set by user
2ad1516a
MN
1129 */
1130 int idct_algo;
1131#define FF_IDCT_AUTO 0
1132#define FF_IDCT_INT 1
1133#define FF_IDCT_SIMPLE 2
1134#define FF_IDCT_SIMPLEMMX 3
1135#define FF_IDCT_LIBMPEG2MMX 4
1136#define FF_IDCT_PS2 5
1137#define FF_IDCT_MLIB 6
1138#define FF_IDCT_ARM 7
05c4072b 1139#define FF_IDCT_ALTIVEC 8
b82cdc72 1140#define FF_IDCT_SH4 9
bd7d1ea7 1141#define FF_IDCT_SIMPLEARM 10
0fa8158d 1142#define FF_IDCT_H264 11
2ad1516a 1143
144f0625 1144 /**
64863965
MN
1145 * slice count.
1146 * - encoding: set by lavc
1147 * - decoding: set by user (or 0)
144f0625
MN
1148 */
1149 int slice_count;
1150 /**
64863965
MN
1151 * slice offsets in the frame in bytes.
1152 * - encoding: set/allocated by lavc
1153 * - decoding: set/allocated by user (or NULL)
144f0625
MN
1154 */
1155 int *slice_offset;
1156
4d2858de 1157 /**
64863965
MN
1158 * error concealment flags.
1159 * - encoding: unused
1160 * - decoding: set by user
4d2858de
MN
1161 */
1162 int error_concealment;
1163#define FF_EC_GUESS_MVS 1
1164#define FF_EC_DEBLOCK 2
1165
6b72ac63 1166 /**
bec89a84 1167 * dsp_mask could be add used to disable unwanted CPU features
8350df97 1168 * CPU features (i.e. MMX, SSE. ...)
bec89a84
ZK
1169 *
1170 * with FORCE flag you may instead enable given CPU features
1171 * (Dangerous: usable in case of misdetection, improper usage however will
1172 * result into program crash)
1173 */
1174 unsigned dsp_mask;
1175#define FF_MM_FORCE 0x80000000 /* force usage of selected flags (OR) */
1176 /* lower 16 bits - CPU features */
1177#ifdef HAVE_MMX
1178#define FF_MM_MMX 0x0001 /* standard MMX */
1179#define FF_MM_3DNOW 0x0004 /* AMD 3DNOW */
1180#define FF_MM_MMXEXT 0x0002 /* SSE integer functions or AMD MMX ext */
1181#define FF_MM_SSE 0x0008 /* SSE functions */
1182#define FF_MM_SSE2 0x0010 /* PIV SSE2 functions */
e42a152b 1183#define FF_MM_3DNOWEXT 0x0020 /* AMD 3DNowExt */
bec89a84 1184#endif /* HAVE_MMX */
11f18faf
MN
1185
1186 /**
64863965
MN
1187 * bits per sample/pixel from the demuxer (needed for huffyuv).
1188 * - encoding: set by lavc
1189 * - decoding: set by user
11f18faf
MN
1190 */
1191 int bits_per_sample;
1192
1193 /**
64863965
MN
1194 * prediction method (needed for huffyuv).
1195 * - encoding: set by user
1196 * - decoding: unused
11f18faf
MN
1197 */
1198 int prediction_method;
1199#define FF_PRED_LEFT 0
1200#define FF_PRED_PLANE 1
1201#define FF_PRED_MEDIAN 2
5d3cea3a
MN
1202
1203 /**
5ff85f1d 1204 * sample aspect ratio (0 if unknown).
1f26c6f3 1205 * numerator and denominator must be relative prime and smaller then 256 for some video standards
64863965
MN
1206 * - encoding: set by user.
1207 * - decoding: set by lavc.
5d3cea3a 1208 */
5ff85f1d 1209 AVRational sample_aspect_ratio;
1e491e29
MN
1210
1211 /**
64863965
MN
1212 * the picture in the bitstream.
1213 * - encoding: set by lavc
1214 * - decoding: set by lavc
1e491e29 1215 */
492cd3a9 1216 AVFrame *coded_frame;
c8c437bc
MN
1217
1218 /**
64863965
MN
1219 * debug.
1220 * - encoding: set by user.
1221 * - decoding: set by user.
c8c437bc
MN
1222 */
1223 int debug;
1224#define FF_DEBUG_PICT_INFO 1
1225#define FF_DEBUG_RC 2
1226#define FF_DEBUG_BITSTREAM 4
1227#define FF_DEBUG_MB_TYPE 8
1228#define FF_DEBUG_QP 16
1229#define FF_DEBUG_MV 32
8289c6fa 1230#define FF_DEBUG_DCT_COEFF 0x00000040
41773b73
MN
1231#define FF_DEBUG_SKIP 0x00000080
1232#define FF_DEBUG_STARTCODE 0x00000100
1233#define FF_DEBUG_PTS 0x00000200
46b4feec 1234#define FF_DEBUG_ER 0x00000400
0da71265 1235#define FF_DEBUG_MMCO 0x00000800
8fc6c2b5 1236#define FF_DEBUG_BUGS 0x00001000
864119b6
MN
1237#define FF_DEBUG_VIS_QP 0x00002000
1238#define FF_DEBUG_VIS_MB_TYPE 0x00004000
140cb663
MN
1239
1240 /**
0c9bbaec
WH
1241 * debug.
1242 * - encoding: set by user.
1243 * - decoding: set by user.
1244 */
1245 int debug_mv;
1246#define FF_DEBUG_VIS_MV_P_FOR 0x00000001 //visualize forward predicted MVs of P frames
1247#define FF_DEBUG_VIS_MV_B_FOR 0x00000002 //visualize forward predicted MVs of B frames
1248#define FF_DEBUG_VIS_MV_B_BACK 0x00000004 //visualize backward predicted MVs of B frames
1249
1250 /**
64863965
MN
1251 * error.
1252 * - encoding: set by lavc if flags&CODEC_FLAG_PSNR
1253 * - decoding: unused
140cb663
MN
1254 */
1255 uint64_t error[4];
17a70fde
MN
1256
1257 /**
64863965
MN
1258 * minimum MB quantizer.
1259 * - encoding: set by user.
1260 * - decoding: unused
17a70fde
MN
1261 */
1262 int mb_qmin;
1263
1264 /**
64863965
MN
1265 * maximum MB quantizer.
1266 * - encoding: set by user.
1267 * - decoding: unused
17a70fde
MN
1268 */
1269 int mb_qmax;
1457ab52
MN
1270
1271 /**
64863965
MN
1272 * motion estimation compare function.
1273 * - encoding: set by user.
1274 * - decoding: unused
1457ab52
MN
1275 */
1276 int me_cmp;
1277 /**
64863965
MN
1278 * subpixel motion estimation compare function.
1279 * - encoding: set by user.
1280 * - decoding: unused
1457ab52
MN
1281 */
1282 int me_sub_cmp;
1283 /**
64863965
MN
1284 * macroblock compare function (not supported yet).
1285 * - encoding: set by user.
1286 * - decoding: unused
1457ab52
MN
1287 */
1288 int mb_cmp;
622348f9
MN
1289 /**
1290 * interlaced dct compare function
1291 * - encoding: set by user.
1292 * - decoding: unused
1293 */
1294 int ildct_cmp;
1457ab52
MN
1295#define FF_CMP_SAD 0
1296#define FF_CMP_SSE 1
1297#define FF_CMP_SATD 2
1298#define FF_CMP_DCT 3
1299#define FF_CMP_PSNR 4
1300#define FF_CMP_BIT 5
1301#define FF_CMP_RD 6
1302#define FF_CMP_ZERO 7
622348f9
MN
1303#define FF_CMP_VSAD 8
1304#define FF_CMP_VSSE 9
e6a2ac34 1305#define FF_CMP_NSSE 10
26efc54e
MN
1306#define FF_CMP_W53 11
1307#define FF_CMP_W97 12
0fd6aea1 1308#define FF_CMP_DCTMAX 13
1457ab52
MN
1309#define FF_CMP_CHROMA 256
1310
1311 /**
64863965
MN
1312 * ME diamond size & shape.
1313 * - encoding: set by user.
1314 * - decoding: unused
1457ab52
MN
1315 */
1316 int dia_size;
b07a5980
MN
1317
1318 /**
64863965
MN
1319 * amount of previous MV predictors (2a+1 x 2a+1 square).
1320 * - encoding: set by user.
1321 * - decoding: unused
b07a5980
MN
1322 */
1323 int last_predictor_count;
70ac76c0 1324
f5fb6b34 1325 /**
64863965
MN
1326 * pre pass for motion estimation.
1327 * - encoding: set by user.
1328 * - decoding: unused
f5fb6b34
MN
1329 */
1330 int pre_me;
b07a5980 1331
70ac76c0 1332 /**
64863965
MN
1333 * motion estimation pre pass compare function.
1334 * - encoding: set by user.
1335 * - decoding: unused
70ac76c0
MN
1336 */
1337 int me_pre_cmp;
826f429a 1338
70ac76c0 1339 /**
64863965
MN
1340 * ME pre pass diamond size & shape.
1341 * - encoding: set by user.
1342 * - decoding: unused
70ac76c0
MN
1343 */
1344 int pre_dia_size;
1345
826f429a 1346 /**
64863965
MN
1347 * subpel ME quality.
1348 * - encoding: set by user.
1349 * - decoding: unused
826f429a
MN
1350 */
1351 int me_subpel_quality;
1352
a33c7159 1353 /**
64863965 1354 * callback to negotiate the pixelFormat.
a33c7159
MN
1355 * @param fmt is the list of formats which are supported by the codec,
1356 * its terminated by -1 as 0 is a valid format, the formats are ordered by quality
1357 * the first is allways the native one
1358 * @return the choosen format
64863965
MN
1359 * - encoding: unused
1360 * - decoding: set by user, if not set then the native format will always be choosen
a33c7159 1361 */
494c56d3 1362 enum PixelFormat (*get_format)(struct AVCodecContext *s, const enum PixelFormat * fmt);
e2f9490e
FB
1363
1364 /**
1365 * DTG active format information (additionnal aspect ratio
1366 * information only used in DVB MPEG2 transport streams). 0 if
1367 * not set.
1368 *
64863965
MN
1369 * - encoding: unused.
1370 * - decoding: set by decoder
e2f9490e
FB
1371 */
1372 int dtg_active_format;
1373#define FF_DTG_AFD_SAME 8
1374#define FF_DTG_AFD_4_3 9
1375#define FF_DTG_AFD_16_9 10
1376#define FF_DTG_AFD_14_9 11
1377#define FF_DTG_AFD_4_3_SP_14_9 13
1378#define FF_DTG_AFD_16_9_SP_14_9 14
1379#define FF_DTG_AFD_SP_4_3 15
1380
ebbcdc9a
MN
1381 /**
1382 * Maximum motion estimation search range in subpel units.
1383 * if 0 then no limit
1384 *
64863965
MN
1385 * - encoding: set by user.
1386 * - decoding: unused.
ebbcdc9a 1387 */
59e0ac8e 1388 int me_range;
ebbcdc9a 1389
65f7062d
MN
1390 /**
1391 * frame_rate_base.
1392 * for variable fps this is 1
1393 * - encoding: set by user.
1394 * - decoding: set by lavc.
1395 * @todo move this after frame_rate
1396 */
65f7062d 1397
1984f635
MN
1398 int frame_rate_base;
1399 /**
1400 * intra quantizer bias.
1401 * - encoding: set by user.
1402 * - decoding: unused
1403 */
1404 int intra_quant_bias;
1405#define FF_DEFAULT_QUANT_BIAS 999999
1406
1407 /**
1408 * inter quantizer bias.
1409 * - encoding: set by user.
1410 * - decoding: unused
1411 */
1412 int inter_quant_bias;
5cd62665
ZK
1413
1414 /**
1415 * color table ID.
1416 * - encoding: unused.
1417 * - decoding: which clrtable should be used for 8bit RGB images
1418 * table have to be stored somewhere FIXME
1419 */
1420 int color_table_id;
1984f635 1421
d90cf87b
MN
1422 /**
1423 * internal_buffer count.
1424 * Dont touch, used by lavc default_get_buffer()
1425 */
1426 int internal_buffer_count;
1427
1428 /**
1429 * internal_buffers.
1430 * Dont touch, used by lavc default_get_buffer()
1431 */
1432 void *internal_buffer;
158c7f05
MN
1433
1434#define FF_LAMBDA_SHIFT 7
1435#define FF_LAMBDA_SCALE (1<<FF_LAMBDA_SHIFT)
1436#define FF_QP2LAMBDA 118 ///< factor to convert from H.263 QP to lambda
1437#define FF_LAMBDA_MAX (256*128-1)
1438
1439#define FF_QUALITY_SCALE FF_LAMBDA_SCALE //FIXME maybe remove
3d2e8cce
MN
1440 /**
1441 * global quality for codecs which cannot change it per frame.
1442 * this should be proportional to MPEG1/2/4 qscale.
1443 * - encoding: set by user.
1444 * - decoding: unused
1445 */
1446 int global_quality;
11e659c2
MN
1447
1448#define FF_CODER_TYPE_VLC 0
1449#define FF_CODER_TYPE_AC 1
1450 /**
1451 * coder type
1452 * - encoding: set by user.
1453 * - decoding: unused
1454 */
1455 int coder_type;
1456
1457 /**
1458 * context model
1459 * - encoding: set by user.
1460 * - decoding: unused
1461 */
1462 int context_model;
3bb07d61
MN
1463
1464 /**
1465 * slice flags
1466 * - encoding: unused
1467 * - decoding: set by user.
1468 */
1469 int slice_flags;
1470#define SLICE_FLAG_CODED_ORDER 0x0001 ///< draw_horiz_band() is called in coded order instead of display
1471#define SLICE_FLAG_ALLOW_FIELD 0x0002 ///< allow draw_horiz_band() with field slices (MPEG2 field pics)
1472#define SLICE_FLAG_ALLOW_PLANE 0x0004 ///< allow draw_horiz_band() with 1 component at a time (SVQ1)
1473
fb364ada
IK
1474 /**
1475 * XVideo Motion Acceleration
1476 * - encoding: forbidden
1477 * - decoding: set by decoder
1478 */
1479 int xvmc_acceleration;
7d1c3fc1
MN
1480
1481 /**
1482 * macroblock decision mode
1483 * - encoding: set by user.
1484 * - decoding: unused
1485 */
1486 int mb_decision;
1487#define FF_MB_DECISION_SIMPLE 0 ///< uses mb_cmp
1488#define FF_MB_DECISION_BITS 1 ///< chooses the one which needs the fewest bits
1489#define FF_MB_DECISION_RD 2 ///< rate distoration
d6eb3c50
MN
1490
1491 /**
1492 * custom intra quantization matrix
1493 * - encoding: set by user, can be NULL
1494 * - decoding: set by lavc
1495 */
1496 uint16_t *intra_matrix;
1497
1498 /**
1499 * custom inter quantization matrix
1500 * - encoding: set by user, can be NULL
1501 * - decoding: set by lavc
1502 */
1503 uint16_t *inter_matrix;
7d1c3fc1 1504
541ae140
MN
1505 /**
1506 * fourcc from the AVI stream header (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A').
1507 * this is used to workaround some encoder bugs
1508 * - encoding: unused
1509 * - decoding: set by user, will be converted to upper case by lavc during init
1510 */
1511 unsigned int stream_codec_tag;
05fbd0a2
MN
1512
1513 /**
1514 * scene change detection threshold.
1515 * 0 is default, larger means fewer detected scene changes
1516 * - encoding: set by user.
1517 * - decoding: unused
1518 */
1519 int scenechange_threshold;
158c7f05
MN
1520
1521 /**
1522 * minimum lagrange multipler
1523 * - encoding: set by user.
1524 * - decoding: unused
1525 */
1526 int lmin;
1527
1528 /**
1529 * maximum lagrange multipler
1530 * - encoding: set by user.
1531 * - decoding: unused
1532 */
1533 int lmax;
2a2bbcb0
MM
1534
1535 /**
1536 * Palette control structure
1537 * - encoding: ??? (no palette-enabled encoder yet)
1538 * - decoding: set by user.
1539 */
1540 struct AVPaletteControl *palctrl;
821cb11f
MN
1541
1542 /**
1543 * noise reduction strength
1544 * - encoding: set by user.
1545 * - decoding: unused
1546 */
1547 int noise_reduction;
fa384dcc 1548
074c4ca7 1549 /**
e1c2a5a0
RT
1550 * called at the beginning of a frame to get cr buffer for it.
1551 * buffer type (size, hints) must be the same. lavc won't check it.
1552 * lavc will pass previous buffer in pic, function should return
1553 * same buffer or new buffer with old frame "painted" into it.
1554 * if pic.data[0] == NULL must behave like get_buffer().
074c4ca7 1555 * - encoding: unused
e1c2a5a0 1556 * - decoding: set by lavc, user can override
074c4ca7 1557 */
e1c2a5a0 1558 int (*reget_buffer)(struct AVCodecContext *c, AVFrame *pic);
ba58dabc
MN
1559
1560 /**
1561 * number of bits which should be loaded into the rc buffer before decoding starts
1562 * - encoding: set by user.
1563 * - decoding: unused
1564 */
1565 int rc_initial_buffer_occupancy;
1566
1567 /**
1568 *
1569 * - encoding: set by user.
1570 * - decoding: unused
1571 */
1572 int inter_threshold;
1573
1574 /**
1575 * CODEC_FLAG2_*.
1576 * - encoding: set by user.
1577 * - decoding: set by user.
1578 */
1579 int flags2;
7ebfc0ea
MN
1580
1581 /**
1582 * simulates errors in the bitstream to test error concealment.
1583 * - encoding: set by user.
1584 * - decoding: unused.
1585 */
1586 int error_rate;
a1e257b2
MN
1587
1588 /**
1589 * MP3 antialias algorithm, see FF_AA_* below.
1590 * - encoding: unused
1591 * - decoding: set by user
1592 */
1593 int antialias_algo;
1594#define FF_AA_AUTO 0
1595#define FF_AA_FASTINT 1 //not implemented yet
1596#define FF_AA_INT 2
1597#define FF_AA_FLOAT 3
77ea0d4b
MN
1598 /**
1599 * Quantizer noise shaping.
1600 * - encoding: set by user
1601 * - decoding: unused
1602 */
1603 int quantizer_noise_shaping;
9c3d33d6
MN
1604
1605 /**
1606 * Thread count.
1607 * is used to decide how many independant tasks should be passed to execute()
1608 * - encoding: set by user
1609 * - decoding: set by user
1610 */
1611 int thread_count;
1612
1613 /**
1614 * the codec may call this to execute several independant things. it will return only after
1615 * finishing all tasks, the user may replace this with some multithreaded implementation, the
1616 * default implementation will execute the parts serially
399cec2f 1617 * @param count the number of things to execute
9c3d33d6
MN
1618 * - encoding: set by lavc, user can override
1619 * - decoding: set by lavc, user can override
1620 */
1621 int (*execute)(struct AVCodecContext *c, int (*func)(struct AVCodecContext *c2, void *arg), void **arg2, int *ret, int count);
1622
1623 /**
1624 * Thread opaque.
1625 * can be used by execute() to store some per AVCodecContext stuff.
1626 * - encoding: set by execute()
1627 * - decoding: set by execute()
1628 */
1629 void *thread_opaque;
a4d36c11
MN
1630
1631 /**
f20f8a8b
MN
1632 * Motion estimation threshold. under which no motion estimation is
1633 * performed, but instead the user specified motion vectors are used
a4d36c11
MN
1634 *
1635 * - encoding: set by user
f20f8a8b 1636 * - decoding: unused
a4d36c11 1637 */
2750b827 1638 int me_threshold;
f20f8a8b
MN
1639
1640 /**
1641 * Macroblock threshold. under which the user specified macroblock types will be used
1642 * - encoding: set by user
1643 * - decoding: unused
1644 */
1645 int mb_threshold;
bf266e19
MN
1646
1647 /**
d4c5d2ad 1648 * precision of the intra dc coefficient - 8.
bf266e19
MN
1649 * - encoding: set by user
1650 * - decoding: unused
1651 */
1652 int intra_dc_precision;
d4c5d2ad
MN
1653
1654 /**
1655 * noise vs. sse weight for the nsse comparsion function.
1656 * - encoding: set by user
1657 * - decoding: unused
1658 */
1659 int nsse_weight;
0dfd33c3
MN
1660
1661 /**
1662 * number of macroblock rows at the top which are skiped.
1663 * - encoding: unused
1664 * - decoding: set by user
1665 */
1666 int skip_top;
1667
1668 /**
1669 * number of macroblock rows at the bottom which are skiped.
1670 * - encoding: unused
1671 * - decoding: set by user
1672 */
1673 int skip_bottom;
baced9f5
MN
1674
1675 /**
1676 * profile
1677 * - encoding: set by user
1678 * - decoding: set by lavc
1679 */
1680 int profile;
1681#define FF_PROFILE_UNKNOWN -99
1682
1683 /**
1684 * level
1685 * - encoding: set by user
1686 * - decoding: set by lavc
1687 */
1688 int level;
1689#define FF_LEVEL_UNKNOWN -99
178fcca8
MN
1690
1691 /**
1692 * low resolution decoding. 1-> 1/2 size, 2->1/4 size
1693 * - encoding: unused
1694 * - decoding: set by user
1695 */
1696 int lowres;
21adafec
MN
1697
1698 /**
bbf18b21 1699 * bitsream width / height. may be different from width/height if lowres
21adafec
MN
1700 * or other things are used
1701 * - encoding: unused
1702 * - decoding: set by user before init if known, codec should override / dynamically change if needed
1703 */
1704 int coded_width, coded_height;
bbf18b21
MN
1705
1706 /**
1707 * frame skip threshold
1708 * - encoding: set by user
1709 * - decoding: unused
1710 */
1711 int frame_skip_threshold;
1712
1713 /**
1714 * frame skip factor
1715 * - encoding: set by user
1716 * - decoding: unused
1717 */
1718 int frame_skip_factor;
0fd6aea1
MN
1719
1720 /**
1721 * frame skip exponent
1722 * - encoding: set by user
1723 * - decoding: unused
1724 */
1725 int frame_skip_exp;
1726
1727 /**
1728 * frame skip comparission function
1729 * - encoding: set by user.
1730 * - decoding: unused
1731 */
1732 int frame_skip_cmp;
de6d9b64
FB
1733} AVCodecContext;
1734
97d96aaa 1735
64863965
MN
1736/**
1737 * AVOption.
1738 */
97d96aaa
ZK
1739typedef struct AVOption {
1740 /** options' name */
1741 const char *name; /* if name is NULL, it indicates a link to next */
bec89a84
ZK
1742 /** short English text help or const struct AVOption* subpointer */
1743 const char *help; // const struct AVOption* sub;
97d96aaa
ZK
1744 /** offset to context structure where the parsed value should be stored */
1745 int offset;
1746 /** options' type */
1747 int type;
64863965
MN
1748#define FF_OPT_TYPE_BOOL 1 ///< boolean - true,1,on (or simply presence)
1749#define FF_OPT_TYPE_DOUBLE 2 ///< double
1750#define FF_OPT_TYPE_INT 3 ///< integer
1751#define FF_OPT_TYPE_STRING 4 ///< string (finished with \0)
1752#define FF_OPT_TYPE_MASK 0x1f ///< mask for types - upper bits are various flags
97d96aaa
ZK
1753//#define FF_OPT_TYPE_EXPERT 0x20 // flag for expert option
1754#define FF_OPT_TYPE_FLAG (FF_OPT_TYPE_BOOL | 0x40)
1755#define FF_OPT_TYPE_RCOVERRIDE (FF_OPT_TYPE_STRING | 0x80)
1756 /** min value (min == max -> no limits) */
1757 double min;
1758 /** maximum value for double/int */
1759 double max;
1760 /** default boo [0,1]l/double/int value */
1761 double defval;
1762 /**
1763 * default string value (with optional semicolon delimited extra option-list
1764 * i.e. option1;option2;option3
1765 * defval might select other then first argument as default
1766 */
1767 const char *defstr;
97d96aaa
ZK
1768#define FF_OPT_MAX_DEPTH 10
1769} AVOption;
1770
64863965 1771/**
bec89a84
ZK
1772 * Parse option(s) and sets fields in passed structure
1773 * @param strct structure where the parsed results will be written
1774 * @param list list with AVOptions
1775 * @param opts string with options for parsing
1776 */
1777int avoption_parse(void* strct, const AVOption* list, const char* opts);
1778
1779
1780/**
64863965
MN
1781 * AVCodec.
1782 */
de6d9b64 1783typedef struct AVCodec {
18f77016 1784 const char *name;
5d234974 1785 enum CodecType type;
9297ddd3 1786 enum CodecID id;
de6d9b64
FB
1787 int priv_data_size;
1788 int (*init)(AVCodecContext *);
0c1a9eda 1789 int (*encode)(AVCodecContext *, uint8_t *buf, int buf_size, void *data);
de6d9b64 1790 int (*close)(AVCodecContext *);
0fd90455 1791 int (*decode)(AVCodecContext *, void *outdata, int *outdata_size,
0c1a9eda 1792 uint8_t *buf, int buf_size);
bf89e6b1 1793 int capabilities;
97d96aaa 1794 const AVOption *options;
de6d9b64 1795 struct AVCodec *next;
7a06ff14 1796 void (*flush)(AVCodecContext *);
b0df362b 1797 const AVRational *supported_framerates; ///array of supported framerates, or NULL if any, array is terminated by {0,0}
fcee0164 1798 const enum PixelFormat *pix_fmts; ///array of supported pixel formats, or NULL if unknown, array is terminanted by -1
de6d9b64
FB
1799} AVCodec;
1800
97d96aaa 1801/**
d7425f59
MN
1802 * four components are given, that's all.
1803 * the last component is alpha
1804 */
de6d9b64 1805typedef struct AVPicture {
0c1a9eda 1806 uint8_t *data[4];
cd394651 1807 int linesize[4]; ///< number of bytes per line
de6d9b64
FB
1808} AVPicture;
1809
ba118447
MM
1810/**
1811 * AVPaletteControl
1812 * This structure defines a method for communicating palette changes
1813 * between and demuxer and a decoder.
1814 */
2e99641b 1815#define AVPALETTE_SIZE 1024
432d84c3 1816#define AVPALETTE_COUNT 256
ba118447
MM
1817typedef struct AVPaletteControl {
1818
1819 /* demuxer sets this to 1 to indicate the palette has changed;
1820 * decoder resets to 0 */
1821 int palette_changed;
1822
2a2bbcb0
MM
1823 /* 4-byte ARGB palette entries, stored in native byte order; note that
1824 * the individual palette components should be on a 8-bit scale; if
1825 * the palette data comes from a IBM VGA native format, the component
1826 * data is probably 6 bits in size and needs to be scaled */
2e99641b 1827 unsigned int palette[AVPALETTE_COUNT];
ba118447
MM
1828
1829} AVPaletteControl;
1830
de6d9b64
FB
1831extern AVCodec ac3_encoder;
1832extern AVCodec mp2_encoder;
9d36bdc9 1833extern AVCodec mp3lame_encoder;
81e0d0b4 1834extern AVCodec oggvorbis_encoder;
29d48296 1835extern AVCodec faac_encoder;
1ddadfa9 1836extern AVCodec xvid_encoder;
de6d9b64 1837extern AVCodec mpeg1video_encoder;
029911d1 1838extern AVCodec mpeg2video_encoder;
1c3990db 1839extern AVCodec h261_encoder;
de6d9b64
FB
1840extern AVCodec h263_encoder;
1841extern AVCodec h263p_encoder;
d4f5d74a 1842extern AVCodec flv_encoder;
de6d9b64 1843extern AVCodec rv10_encoder;
68b94c35 1844extern AVCodec rv20_encoder;
6faa4645 1845extern AVCodec dvvideo_encoder;
de6d9b64 1846extern AVCodec mjpeg_encoder;
b1e6b355 1847extern AVCodec ljpeg_encoder;
4eff7cf4 1848extern AVCodec png_encoder;
5b6d5596
MN
1849extern AVCodec ppm_encoder;
1850extern AVCodec pgm_encoder;
1851extern AVCodec pgmyuv_encoder;
1852extern AVCodec pbm_encoder;
1853extern AVCodec pam_encoder;
bf89e6b1 1854extern AVCodec mpeg4_encoder;
84afee34
MN
1855extern AVCodec msmpeg4v1_encoder;
1856extern AVCodec msmpeg4v2_encoder;
1857extern AVCodec msmpeg4v3_encoder;
0151a6f5
MN
1858extern AVCodec wmv1_encoder;
1859extern AVCodec wmv2_encoder;
11f18faf 1860extern AVCodec huffyuv_encoder;
f37b9768 1861extern AVCodec ffvhuff_encoder;
0da71265 1862extern AVCodec h264_encoder;
3d2e8cce 1863extern AVCodec asv1_encoder;
9b56edf5 1864extern AVCodec asv2_encoder;
be3564ed 1865extern AVCodec vcr1_encoder;
5e20f836 1866extern AVCodec ffv1_encoder;
791e7b83 1867extern AVCodec snow_encoder;
c3bf0288 1868extern AVCodec mdec_encoder;
a273bbfb 1869extern AVCodec zlib_encoder;
54f5fd22
AB
1870extern AVCodec sonic_encoder;
1871extern AVCodec sonic_ls_encoder;
3b64893d 1872extern AVCodec svq1_encoder;
de6d9b64
FB
1873
1874extern AVCodec h263_decoder;
c6148de2 1875extern AVCodec h261_decoder;
bf89e6b1 1876extern AVCodec mpeg4_decoder;
84afee34
MN
1877extern AVCodec msmpeg4v1_decoder;
1878extern AVCodec msmpeg4v2_decoder;
1879extern AVCodec msmpeg4v3_decoder;
e1a9dbff 1880extern AVCodec wmv1_decoder;
0151a6f5 1881extern AVCodec wmv2_decoder;
922bc38d
MN
1882extern AVCodec mpeg1video_decoder;
1883extern AVCodec mpeg2video_decoder;
c512b303 1884extern AVCodec mpegvideo_decoder;
fb364ada 1885extern AVCodec mpeg_xvmc_decoder;
de6d9b64 1886extern AVCodec h263i_decoder;
d4f5d74a 1887extern AVCodec flv_decoder;
de6d9b64 1888extern AVCodec rv10_decoder;
68b94c35 1889extern AVCodec rv20_decoder;
3f05305d
MN
1890extern AVCodec rv30_decoder;
1891extern AVCodec rv40_decoder;
be8ffec9 1892extern AVCodec svq1_decoder;
8b82a956 1893extern AVCodec svq3_decoder;
020fcc94 1894extern AVCodec dvvideo_decoder;
bc8d1857
FB
1895extern AVCodec wmav1_decoder;
1896extern AVCodec wmav2_decoder;
4e66ab3b 1897extern AVCodec mjpeg_decoder;
b135d9fb 1898extern AVCodec mjpegb_decoder;
5e83dec4 1899extern AVCodec sp5x_decoder;
4eff7cf4 1900extern AVCodec png_decoder;
4b1f4f23 1901extern AVCodec mp2_decoder;
a96b68b7 1902extern AVCodec mp3_decoder;
3f95e843
FR
1903extern AVCodec mace3_decoder;
1904extern AVCodec mace6_decoder;
11f18faf 1905extern AVCodec huffyuv_decoder;
f37b9768 1906extern AVCodec ffvhuff_decoder;
3aca208a 1907extern AVCodec oggvorbis_decoder;
f70f7c6d 1908extern AVCodec cyuv_decoder;
0da71265 1909extern AVCodec h264_decoder;
deabd4fd 1910extern AVCodec indeo3_decoder;
d86053a4 1911extern AVCodec vp3_decoder;
f44ee2c3 1912extern AVCodec theora_decoder;
891f64b3 1913extern AVCodec amr_nb_decoder;
bc634f6f 1914extern AVCodec amr_nb_encoder;
d663a1fd
MN
1915extern AVCodec amr_wb_encoder;
1916extern AVCodec amr_wb_decoder;
280bd7b7
ZK
1917extern AVCodec aac_decoder;
1918extern AVCodec mpeg4aac_decoder;
3d2e8cce 1919extern AVCodec asv1_decoder;
9b56edf5 1920extern AVCodec asv2_decoder;
be3564ed 1921extern AVCodec vcr1_decoder;
3aff069b 1922extern AVCodec cljr_decoder;
5e20f836 1923extern AVCodec ffv1_decoder;
791e7b83 1924extern AVCodec snow_decoder;
8809cfee 1925extern AVCodec fourxm_decoder;
c3bf0288 1926extern AVCodec mdec_decoder;
3ef8be2b
MM
1927extern AVCodec roq_decoder;
1928extern AVCodec interplay_video_decoder;
9937e686 1929extern AVCodec xan_wc3_decoder;
2fdf638b
MM
1930extern AVCodec rpza_decoder;
1931extern AVCodec cinepak_decoder;
1932extern AVCodec msrle_decoder;
1933extern AVCodec msvideo1_decoder;
6955a882 1934extern AVCodec vqa_decoder;
4120a53a 1935extern AVCodec idcin_decoder;
1dc1ed99 1936extern AVCodec eightbps_decoder;
11e29a41 1937extern AVCodec smc_decoder;
42cad81a 1938extern AVCodec flic_decoder;
fafa0b75
MM
1939extern AVCodec vmdvideo_decoder;
1940extern AVCodec vmdaudio_decoder;
9a4117d5 1941extern AVCodec truemotion1_decoder;
a273bbfb
RT
1942extern AVCodec mszh_decoder;
1943extern AVCodec zlib_decoder;
b8414bbd
NK
1944extern AVCodec ra_144_decoder;
1945extern AVCodec ra_288_decoder;
3ef8be2b
MM
1946extern AVCodec roq_dpcm_decoder;
1947extern AVCodec interplay_dpcm_decoder;
9937e686 1948extern AVCodec xan_dpcm_decoder;
d08d7142 1949extern AVCodec sol_dpcm_decoder;
54f5fd22 1950extern AVCodec sonic_decoder;
070ed1bc 1951extern AVCodec qtrle_decoder;
ac2570a8 1952extern AVCodec flac_decoder;
9d53d58e 1953extern AVCodec tscc_decoder;
d0a0bbd2 1954extern AVCodec ulti_decoder;
d08d7142 1955extern AVCodec qdraw_decoder;
ab711b3c 1956extern AVCodec xl_decoder;
acfd8f0f 1957extern AVCodec qpeg_decoder;
de6d9b64 1958
a96b68b7
FB
1959/* pcm codecs */
1960#define PCM_CODEC(id, name) \
1961extern AVCodec name ## _decoder; \
f11d3f23 1962extern AVCodec name ## _encoder
a96b68b7
FB
1963
1964PCM_CODEC(CODEC_ID_PCM_S16LE, pcm_s16le);
1965PCM_CODEC(CODEC_ID_PCM_S16BE, pcm_s16be);
1966PCM_CODEC(CODEC_ID_PCM_U16LE, pcm_u16le);
1967PCM_CODEC(CODEC_ID_PCM_U16BE, pcm_u16be);
1968PCM_CODEC(CODEC_ID_PCM_S8, pcm_s8);
1969PCM_CODEC(CODEC_ID_PCM_U8, pcm_u8);
1970PCM_CODEC(CODEC_ID_PCM_ALAW, pcm_alaw);
1971PCM_CODEC(CODEC_ID_PCM_MULAW, pcm_mulaw);
1972
0147f198
FR
1973/* adpcm codecs */
1974
1975PCM_CODEC(CODEC_ID_ADPCM_IMA_QT, adpcm_ima_qt);
1976PCM_CODEC(CODEC_ID_ADPCM_IMA_WAV, adpcm_ima_wav);
9937e686
MM
1977PCM_CODEC(CODEC_ID_ADPCM_IMA_DK3, adpcm_ima_dk3);
1978PCM_CODEC(CODEC_ID_ADPCM_IMA_DK4, adpcm_ima_dk4);
2fdf638b 1979PCM_CODEC(CODEC_ID_ADPCM_IMA_WS, adpcm_ima_ws);
7d8379f2 1980PCM_CODEC(CODEC_ID_ADPCM_SMJPEG, adpcm_ima_smjpeg);
0147f198 1981PCM_CODEC(CODEC_ID_ADPCM_MS, adpcm_ms);
4b465299 1982PCM_CODEC(CODEC_ID_ADPCM_4XM, adpcm_4xm);
fc384777
MM
1983PCM_CODEC(CODEC_ID_ADPCM_XA, adpcm_xa);
1984PCM_CODEC(CODEC_ID_ADPCM_ADX, adpcm_adx);
7d8379f2 1985PCM_CODEC(CODEC_ID_ADPCM_EA, adpcm_ea);
e5966052 1986PCM_CODEC(CODEC_ID_ADPCM_G726, adpcm_g726);
b3bfb299 1987PCM_CODEC(CODEC_ID_ADPCM_CT, adpcm_ct);
0147f198 1988
a96b68b7
FB
1989#undef PCM_CODEC
1990
1991/* dummy raw video codec */
63167088
RS
1992extern AVCodec rawvideo_encoder;
1993extern AVCodec rawvideo_decoder;
de6d9b64
FB
1994
1995/* the following codecs use external GPL libs */
de6d9b64 1996extern AVCodec ac3_decoder;
23c99253 1997extern AVCodec dts_decoder;
de6d9b64
FB
1998
1999/* resample.c */
2000
2001struct ReSampleContext;
aaaf1635 2002struct AVResampleContext;
de6d9b64
FB
2003
2004typedef struct ReSampleContext ReSampleContext;
2005
2006ReSampleContext *audio_resample_init(int output_channels, int input_channels,
2007 int output_rate, int input_rate);
2008int audio_resample(ReSampleContext *s, short *output, short *input, int nb_samples);
2009void audio_resample_close(ReSampleContext *s);
2010
6e225de2 2011struct AVResampleContext *av_resample_init(int out_rate, int in_rate, int filter_length, int log2_phase_count, int linear, double cutoff);
aaaf1635 2012int av_resample(struct AVResampleContext *c, short *dst, short *src, int *consumed, int src_size, int dst_size, int update_ctx);
2d48eddd 2013void av_resample_compensate(struct AVResampleContext *c, int sample_delta, int compensation_distance);
d88443ae 2014void av_resample_close(struct AVResampleContext *c);
aaaf1635 2015
de6d9b64
FB
2016/* YUV420 format is assumed ! */
2017
2018struct ImgReSampleContext;
2019
2020typedef struct ImgReSampleContext ImgReSampleContext;
2021
2022ImgReSampleContext *img_resample_init(int output_width, int output_height,
2023 int input_width, int input_height);
ab6d194a
MN
2024
2025ImgReSampleContext *img_resample_full_init(int owidth, int oheight,
2026 int iwidth, int iheight,
2027 int topBand, int bottomBand,
1ff93ffc
TK
2028 int leftBand, int rightBand,
2029 int padtop, int padbottom,
2030 int padleft, int padright);
2031
ab6d194a 2032
de6d9b64 2033void img_resample(ImgReSampleContext *s,
da64ecc3 2034 AVPicture *output, const AVPicture *input);
de6d9b64
FB
2035
2036void img_resample_close(ImgReSampleContext *s);
2037
75917b88
DH
2038/**
2039 * Allocate memory for a picture. Call avpicture_free to free it.
2040 *
2041 * @param picture the picture to be filled in.
2042 * @param pix_fmt the format of the picture.
2043 * @param width the width of the picture.
2044 * @param height the height of the picture.
2045 * @return 0 if successful, -1 if not.
2046 */
2047int avpicture_alloc(AVPicture *picture, int pix_fmt, int width, int height);
2048
2049/* Free a picture previously allocated by avpicture_alloc. */
2050void avpicture_free(AVPicture *picture);
2051
0c1a9eda 2052int avpicture_fill(AVPicture *picture, uint8_t *ptr,
2d1a4094 2053 int pix_fmt, int width, int height);
da64ecc3 2054int avpicture_layout(const AVPicture* src, int pix_fmt, int width, int height,
63167088 2055 unsigned char *dest, int dest_size);
219b06c6 2056int avpicture_get_size(int pix_fmt, int width, int height);
dab64ebc
FB
2057void avcodec_get_chroma_sub_sample(int pix_fmt, int *h_shift, int *v_shift);
2058const char *avcodec_get_pix_fmt_name(int pix_fmt);
21adafec 2059void avcodec_set_dimensions(AVCodecContext *s, int width, int height);
63167088 2060enum PixelFormat avcodec_get_pix_fmt(const char* name);
d07730dd 2061unsigned int avcodec_pix_fmt_to_codec_tag(enum PixelFormat p);
219b06c6 2062
fab21997
FB
2063#define FF_LOSS_RESOLUTION 0x0001 /* loss due to resolution change */
2064#define FF_LOSS_DEPTH 0x0002 /* loss due to color depth change */
2065#define FF_LOSS_COLORSPACE 0x0004 /* loss due to color space conversion */
2066#define FF_LOSS_ALPHA 0x0008 /* loss of alpha bits */
2067#define FF_LOSS_COLORQUANT 0x0010 /* loss due to color quantization */
2068#define FF_LOSS_CHROMA 0x0020 /* loss of chroma (e.g. rgb to gray conversion) */
2069
2070int avcodec_get_pix_fmt_loss(int dst_pix_fmt, int src_pix_fmt,
2071 int has_alpha);
2072int avcodec_find_best_pix_fmt(int pix_fmt_mask, int src_pix_fmt,
2073 int has_alpha, int *loss_ptr);
2074
0469baf1
FB
2075#define FF_ALPHA_TRANSP 0x0001 /* image has some totally transparent pixels */
2076#define FF_ALPHA_SEMI_TRANSP 0x0002 /* image has some transparent pixels */
da64ecc3
DH
2077int img_get_alpha_info(const AVPicture *src,
2078 int pix_fmt, int width, int height);
0469baf1 2079
219b06c6
FB
2080/* convert among pixel formats */
2081int img_convert(AVPicture *dst, int dst_pix_fmt,
da64ecc3 2082 const AVPicture *src, int pix_fmt,
219b06c6
FB
2083 int width, int height);
2084
2085/* deinterlace a picture */
da64ecc3 2086int avpicture_deinterlace(AVPicture *dst, const AVPicture *src,
de6d9b64
FB
2087 int pix_fmt, int width, int height);
2088
2089/* external high level API */
2090
2091extern AVCodec *first_avcodec;
2092
156e5023 2093/* returns LIBAVCODEC_VERSION_INT constant */
51a49663 2094unsigned avcodec_version(void);
8bceb6af 2095/* returns LIBAVCODEC_BUILD constant */
51a49663 2096unsigned avcodec_build(void);
de6d9b64
FB
2097void avcodec_init(void);
2098
2099void register_avcodec(AVCodec *format);
2100AVCodec *avcodec_find_encoder(enum CodecID id);
98f3b098 2101AVCodec *avcodec_find_encoder_by_name(const char *name);
de6d9b64
FB
2102AVCodec *avcodec_find_decoder(enum CodecID id);
2103AVCodec *avcodec_find_decoder_by_name(const char *name);
2104void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode);
2105
1e491e29 2106void avcodec_get_context_defaults(AVCodecContext *s);
7ffbb60e 2107AVCodecContext *avcodec_alloc_context(void);
7906085f 2108void avcodec_get_frame_defaults(AVFrame *pic);
492cd3a9 2109AVFrame *avcodec_alloc_frame(void);
1e491e29 2110
492cd3a9
MN
2111int avcodec_default_get_buffer(AVCodecContext *s, AVFrame *pic);
2112void avcodec_default_release_buffer(AVCodecContext *s, AVFrame *pic);
3a569751
MN
2113int avcodec_default_reget_buffer(AVCodecContext *s, AVFrame *pic);
2114void avcodec_align_dimensions(AVCodecContext *s, int *width, int *height);
2115enum PixelFormat avcodec_default_get_format(struct AVCodecContext *s, const enum PixelFormat * fmt);
1e491e29 2116
5a815088
MN
2117int avcodec_thread_init(AVCodecContext *s, int thread_count);
2118void avcodec_thread_free(AVCodecContext *s);
2119int avcodec_thread_execute(AVCodecContext *s, int (*func)(AVCodecContext *c2, void *arg2),void **arg, int *ret, int count);
3a569751 2120int avcodec_default_execute(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2),void **arg, int *ret, int count);
9c3d33d6
MN
2121//FIXME func typedef
2122
7a06ff14
MN
2123/**
2124 * opens / inits the AVCodecContext.
2125 * not thread save!
2126 */
de6d9b64 2127int avcodec_open(AVCodecContext *avctx, AVCodec *codec);
7a06ff14 2128
0c1a9eda 2129int avcodec_decode_audio(AVCodecContext *avctx, int16_t *samples,
de6d9b64 2130 int *frame_size_ptr,
0c1a9eda 2131 uint8_t *buf, int buf_size);
492cd3a9 2132int avcodec_decode_video(AVCodecContext *avctx, AVFrame *picture,
de6d9b64 2133 int *got_picture_ptr,
0c1a9eda
ZK
2134 uint8_t *buf, int buf_size);
2135int avcodec_parse_frame(AVCodecContext *avctx, uint8_t **pdata,
917e06c8 2136 int *data_size_ptr,
0c1a9eda
ZK
2137 uint8_t *buf, int buf_size);
2138int avcodec_encode_audio(AVCodecContext *avctx, uint8_t *buf, int buf_size,
de6d9b64 2139 const short *samples);
0c1a9eda 2140int avcodec_encode_video(AVCodecContext *avctx, uint8_t *buf, int buf_size,
492cd3a9 2141 const AVFrame *pict);
de6d9b64
FB
2142
2143int avcodec_close(AVCodecContext *avctx);
2144
2145void avcodec_register_all(void);
a96b68b7 2146
1c2a8c7f
MN
2147void avcodec_flush_buffers(AVCodecContext *avctx);
2148
14bea432 2149/* misc usefull functions */
d8085ea7
MN
2150
2151/**
2152 * returns a single letter to describe the picture type
2153 */
2154char av_get_pict_type_char(int pict_type);
2155
14bea432
MN
2156/**
2157 * reduce a fraction.
2158 * this is usefull for framerate calculations
2159 * @param max the maximum allowed for dst_nom & dst_den
2160 * @return 1 if exact, 0 otherwise
2161 */
2162int av_reduce(int *dst_nom, int *dst_den, int64_t nom, int64_t den, int64_t max);
2163
2164/**
1f018225 2165 * rescale a 64bit integer with rounding to nearest.
14bea432
MN
2166 * a simple a*b/c isnt possible as it can overflow
2167 */
4c263142 2168int64_t av_rescale(int64_t a, int64_t b, int64_t c);
628d601b 2169
1f018225
MN
2170/**
2171 * rescale a 64bit integer with specified rounding.
2172 * a simple a*b/c isnt possible as it can overflow
2173 */
2174int64_t av_rescale_rnd(int64_t a, int64_t b, int64_t c, enum AVRounding);
628d601b 2175
8424cf50
FB
2176/* frame parsing */
2177typedef struct AVCodecParserContext {
2178 void *priv_data;
2179 struct AVCodecParser *parser;
2180 int64_t frame_offset; /* offset of the current frame */
2181 int64_t cur_offset; /* current offset
2182 (incremented by each av_parser_parse()) */
2183 int64_t last_frame_offset; /* offset of the last frame */
2184 /* video info */
2185 int pict_type; /* XXX: put it back in AVCodecContext */
2186 int repeat_pict; /* XXX: put it back in AVCodecContext */
b84f2a35
FB
2187 int64_t pts; /* pts of the current frame */
2188 int64_t dts; /* dts of the current frame */
2189
2190 /* private data */
2191 int64_t last_pts;
2192 int64_t last_dts;
a62aecce 2193 int fetch_timestamp;
b84f2a35
FB
2194
2195#define AV_PARSER_PTS_NB 4
2196 int cur_frame_start_index;
2197 int64_t cur_frame_offset[AV_PARSER_PTS_NB];
2198 int64_t cur_frame_pts[AV_PARSER_PTS_NB];
2199 int64_t cur_frame_dts[AV_PARSER_PTS_NB];
8424cf50
FB
2200} AVCodecParserContext;
2201
2202typedef struct AVCodecParser {
99f06236 2203 int codec_ids[5]; /* several codec IDs are permitted */
8424cf50
FB
2204 int priv_data_size;
2205 int (*parser_init)(AVCodecParserContext *s);
2206 int (*parser_parse)(AVCodecParserContext *s,
2207 AVCodecContext *avctx,
2208 uint8_t **poutbuf, int *poutbuf_size,
2209 const uint8_t *buf, int buf_size);
2210 void (*parser_close)(AVCodecParserContext *s);
2211 struct AVCodecParser *next;
2212} AVCodecParser;
2213
2214extern AVCodecParser *av_first_parser;
2215
2216void av_register_codec_parser(AVCodecParser *parser);
2217AVCodecParserContext *av_parser_init(int codec_id);
2218int av_parser_parse(AVCodecParserContext *s,
2219 AVCodecContext *avctx,
2220 uint8_t **poutbuf, int *poutbuf_size,
b84f2a35
FB
2221 const uint8_t *buf, int buf_size,
2222 int64_t pts, int64_t dts);
8424cf50
FB
2223void av_parser_close(AVCodecParserContext *s);
2224
2225extern AVCodecParser mpegvideo_parser;
2226extern AVCodecParser mpeg4video_parser;
c6148de2 2227extern AVCodecParser h261_parser;
8424cf50
FB
2228extern AVCodecParser h263_parser;
2229extern AVCodecParser h264_parser;
8e6325b9 2230extern AVCodecParser mjpeg_parser;
99f06236 2231extern AVCodecParser pnm_parser;
8424cf50
FB
2232extern AVCodecParser mpegaudio_parser;
2233extern AVCodecParser ac3_parser;
2234
544eb99c 2235/* memory */
e4eadb4b 2236void *av_malloc(unsigned int size);
18f77016 2237void *av_mallocz(unsigned int size);
8e1e6f31 2238void *av_realloc(void *ptr, unsigned int size);
544eb99c 2239void av_free(void *ptr);
8e1e6f31 2240char *av_strdup(const char *s);
81c5f887 2241void av_freep(void *ptr);
97d96aaa 2242void *av_fast_realloc(void *ptr, unsigned int *size, unsigned int min_size);
855ea723
ZK
2243/* for static data only */
2244/* call av_free_static to release all staticaly allocated tables */
628d601b 2245void av_free_static(void);
8d1f2ba5 2246void *av_mallocz_static(unsigned int size);
073c2593 2247void *av_realloc_static(void *ptr, unsigned int size);
544eb99c 2248
fc384777
MM
2249/* add by bero : in adx.c */
2250int is_adx(const unsigned char *buf,size_t bufsize);
2251
e1c2a5a0
RT
2252void img_copy(AVPicture *dst, const AVPicture *src,
2253 int pix_fmt, int width, int height);
2254
9b879566
MB
2255/* av_log API */
2256
2257#include <stdarg.h>
2258
d8019eb5 2259#define AV_LOG_QUIET -1
9b879566
MB
2260#define AV_LOG_ERROR 0
2261#define AV_LOG_INFO 1
2262#define AV_LOG_DEBUG 2
2263
f4bd8cf0 2264#ifdef __GNUC__
bc874dae 2265extern void av_log(void*, int level, const char *fmt, ...) __attribute__ ((__format__ (__printf__, 3, 4)));
f4bd8cf0
MN
2266#else
2267extern void av_log(void*, int level, const char *fmt, ...);
2268#endif
2269
bc874dae 2270extern void av_vlog(void*, int level, const char *fmt, va_list);
9b879566
MB
2271extern int av_log_get_level(void);
2272extern void av_log_set_level(int);
bc874dae 2273extern void av_log_set_callback(void (*)(void*, int, const char*, va_list));
9b879566 2274
3a278992 2275/* endian macros */
e96682e6 2276#if !defined(BE_16) || !defined(BE_32) || !defined(LE_16) || !defined(LE_32)
3a278992
MM
2277#define BE_16(x) ((((uint8_t*)(x))[0] << 8) | ((uint8_t*)(x))[1])
2278#define BE_32(x) ((((uint8_t*)(x))[0] << 24) | \
2279 (((uint8_t*)(x))[1] << 16) | \
2280 (((uint8_t*)(x))[2] << 8) | \
2281 ((uint8_t*)(x))[3])
2282#define LE_16(x) ((((uint8_t*)(x))[1] << 8) | ((uint8_t*)(x))[0])
2283#define LE_32(x) ((((uint8_t*)(x))[3] << 24) | \
2284 (((uint8_t*)(x))[2] << 16) | \
2285 (((uint8_t*)(x))[1] << 8) | \
2286 ((uint8_t*)(x))[0])
e96682e6 2287#endif
3a278992 2288
02d697aa
ZK
2289#ifdef __cplusplus
2290}
2291#endif
2292
a96b68b7 2293#endif /* AVCODEC_H */