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