* filling bitdepth
[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
FB
14#include "common.h"
15
4b1f4f23
J
16#define LIBAVCODEC_VERSION_INT 0x000406
17#define LIBAVCODEC_VERSION "0.4.6"
0469baf1
FB
18#define LIBAVCODEC_BUILD 4666
19#define LIBAVCODEC_BUILD_STR "4666"
4b1f4f23 20
ce2749d2
AB
21#define LIBAVCODEC_IDENT "FFmpeg" LIBAVCODEC_VERSION "b" LIBAVCODEC_BUILD_STR
22
de6d9b64
FB
23enum CodecID {
24 CODEC_ID_NONE,
25 CODEC_ID_MPEG1VIDEO,
26 CODEC_ID_H263,
27 CODEC_ID_RV10,
28 CODEC_ID_MP2,
9d36bdc9 29 CODEC_ID_MP3LAME,
81e0d0b4 30 CODEC_ID_VORBIS,
de6d9b64
FB
31 CODEC_ID_AC3,
32 CODEC_ID_MJPEG,
b135d9fb 33 CODEC_ID_MJPEGB,
bf89e6b1 34 CODEC_ID_MPEG4,
de6d9b64 35 CODEC_ID_RAWVIDEO,
84afee34
MN
36 CODEC_ID_MSMPEG4V1,
37 CODEC_ID_MSMPEG4V2,
38 CODEC_ID_MSMPEG4V3,
e1a9dbff 39 CODEC_ID_WMV1,
b50eef3a 40 CODEC_ID_WMV2,
de6d9b64
FB
41 CODEC_ID_H263P,
42 CODEC_ID_H263I,
be8ffec9 43 CODEC_ID_SVQ1,
020fcc94
FB
44 CODEC_ID_DVVIDEO,
45 CODEC_ID_DVAUDIO,
bc8d1857
FB
46 CODEC_ID_WMAV1,
47 CODEC_ID_WMAV2,
3f95e843
FR
48 CODEC_ID_MACE3,
49 CODEC_ID_MACE6,
11f18faf 50 CODEC_ID_HUFFYUV,
f70f7c6d 51 CODEC_ID_CYUV,
0da71265 52 CODEC_ID_H264,
deabd4fd 53 CODEC_ID_INDEO3,
a96b68b7
FB
54
55 /* various pcm "codecs" */
56 CODEC_ID_PCM_S16LE,
57 CODEC_ID_PCM_S16BE,
58 CODEC_ID_PCM_U16LE,
59 CODEC_ID_PCM_U16BE,
60 CODEC_ID_PCM_S8,
61 CODEC_ID_PCM_U8,
62 CODEC_ID_PCM_MULAW,
63 CODEC_ID_PCM_ALAW,
0147f198
FR
64
65 /* various adpcm codecs */
66 CODEC_ID_ADPCM_IMA_QT,
67 CODEC_ID_ADPCM_IMA_WAV,
68 CODEC_ID_ADPCM_MS,
de6d9b64
FB
69};
70
71enum CodecType {
4a663d80 72 CODEC_TYPE_UNKNOWN = -1,
de6d9b64
FB
73 CODEC_TYPE_VIDEO,
74 CODEC_TYPE_AUDIO,
75};
76
64863965
MN
77/**
78 * Pixel format.
79 */
de6d9b64
FB
80enum PixelFormat {
81 PIX_FMT_YUV420P,
82 PIX_FMT_YUV422,
64863965
MN
83 PIX_FMT_RGB24, ///< 3 bytes, R is first
84 PIX_FMT_BGR24, ///< 3 bytes, B is first
d9fea0b5
FB
85 PIX_FMT_YUV422P,
86 PIX_FMT_YUV444P,
64863965 87 PIX_FMT_RGBA32, ///< always stored in cpu endianness
e9feea59 88 PIX_FMT_YUV410P,
a32072d0 89 PIX_FMT_YUV411P,
64863965
MN
90 PIX_FMT_RGB565, ///< always stored in cpu endianness
91 PIX_FMT_RGB555, ///< always stored in cpu endianness, most significant bit to 1
dab64ebc 92 PIX_FMT_GRAY8,
64863965
MN
93 PIX_FMT_MONOWHITE, ///< 0 is white
94 PIX_FMT_MONOBLACK, ///< 0 is black
95 PIX_FMT_PAL8, ///< 8 bit with RGBA palette
fab21997
FB
96 PIX_FMT_YUVJ420P, ///< YUV full scale (jpeg)
97 PIX_FMT_YUVJ422P, ///< YUV full scale (jpeg)
98 PIX_FMT_YUVJ444P, ///< YUV full scale (jpeg)
dab64ebc 99 PIX_FMT_NB,
de6d9b64
FB
100};
101
a96b68b7
FB
102/* currently unused, may be used if 24/32 bits samples ever supported */
103enum SampleFormat {
64863965 104 SAMPLE_FMT_S16 = 0, ///< signed 16 bits
a96b68b7
FB
105};
106
de6d9b64 107/* in bytes */
bc8d1857 108#define AVCODEC_MAX_AUDIO_FRAME_SIZE 131072
de6d9b64 109
d7425f59
MN
110/**
111 * Required number of zero bytes at the end of the input bitstream for decoding.
112 * to avoid overreading (and possibly segfaulting)
113 */
114#define FF_INPUT_BUFFER_PADDING_SIZE 8
115
e4986da9
J
116/* motion estimation type, EPZS by default */
117enum Motion_Est_ID {
101bea5f 118 ME_ZERO = 1,
e4986da9
J
119 ME_FULL,
120 ME_LOG,
121 ME_PHODS,
122 ME_EPZS,
123 ME_X1
124};
125
ce980a95
MN
126typedef struct RcOverride{
127 int start_frame;
128 int end_frame;
129 int qscale; // if this is 0 then quality_factor will be used instead
130 float quality_factor;
131} RcOverride;
132
101bea5f
J
133/* only for ME compatiblity with old apps */
134extern int motion_estimation_method;
135
e4986da9 136/* ME algos sorted by quality */
bc6caae2
J
137static const int Motion_Est_QTab[] = { ME_ZERO, ME_PHODS, ME_LOG,
138 ME_X1, ME_EPZS, ME_FULL };
de6d9b64 139
28db7fce 140
4e00e76b 141#define FF_MAX_B_FRAMES 8
9dbcbd92 142
a949d72e
MN
143/* encoding support
144 these flags can be passed in AVCodecContext.flags before initing
145 Note: note not everything is supported yet
146*/
de6d9b64 147
64863965
MN
148#define CODEC_FLAG_HQ 0x0001 ///< brute force MB-type decission mode (slow)
149#define CODEC_FLAG_QSCALE 0x0002 ///< use fixed qscale
150#define CODEC_FLAG_4MV 0x0004 ///< 4 MV per MB allowed
151#define CODEC_FLAG_QPEL 0x0010 ///< use qpel MC
152#define CODEC_FLAG_GMC 0x0020 ///< use GMC
153#define CODEC_FLAG_PART 0x0080 ///< use data partitioning
9dbcbd92
MN
154/* parent program gurantees that the input for b-frame containing streams is not written to
155 for at least s->max_b_frames+1 frames, if this is not set than the input will be copied */
8b4c7dbc 156#define CODEC_FLAG_INPUT_PRESERVED 0x0100
64863965
MN
157#define CODEC_FLAG_PASS1 0x0200 ///< use internal 2pass ratecontrol in first pass mode
158#define CODEC_FLAG_PASS2 0x0400 ///< use internal 2pass ratecontrol in second pass mode
159#define CODEC_FLAG_EXTERN_HUFF 0x1000 ///< use external huffman table (for mjpeg)
160#define CODEC_FLAG_GRAY 0x2000 ///< only decode/encode grayscale
161#define CODEC_FLAG_EMU_EDGE 0x4000///< dont draw edges
162#define CODEC_FLAG_PSNR 0x8000 ///< error[?] variables will be set during encoding
163#define CODEC_FLAG_TRUNCATED 0x00010000 /** input bitstream might be truncated at a random location instead
d7425f59 164 of only at frame boundaries */
64863965
MN
165#define CODEC_FLAG_NORMALIZE_AQP 0x00020000 ///< normalize adaptive quantization
166#define CODEC_FLAG_INTERLACED_DCT 0x00040000 ///< use interlaced dct
167#define CODEC_FLAG_LOW_DELAY 0x00080000 ///< force low delay / will fail on b frames
168#define CODEC_FLAG_ALT_SCAN 0x00100000 ///< use alternate scan
169#define CODEC_FLAG_TRELLIS_QUANT 0x00200000 ///< use trellis quantization
170#define CODEC_FLAG_GLOBAL_HEADER 0x00400000 ///< place global headers in extradata instead of every keyframe
171#define CODEC_FLAG_BITEXACT 0x00800000 ///< use only bitexact stuff (except (i)dct)
21e59552 172/* Fx : Flag for h263+ extra options */
64863965
MN
173#define CODEC_FLAG_H263P_AIC 0x01000000 ///< Advanced intra coding
174#define CODEC_FLAG_H263P_UMV 0x02000000 ///< Unlimited motion vector
21e59552
MN
175/* For advanced prediction mode, we reuse the 4MV flag */
176/* Unsupported options :
177 * Syntax Arithmetic coding (SAC)
178 * Deblocking filter internal loop
179 * Slice structured
180 * Reference Picture Selection
181 * Independant Segment Decoding
182 * Alternative Inter * VLC
183 * Modified Quantization */
184/* /Fx */
bf89e6b1
FB
185/* codec capabilities */
186
64863965 187#define CODEC_CAP_DRAW_HORIZ_BAND 0x0001 ///< decoder can use draw_horiz_band callback
6814a25c
MN
188/**
189 * Codec uses get_buffer() for allocating buffers.
190 * direct rendering method 1
191 */
192#define CODEC_CAP_DR1 0x0002
917e06c8
FB
193/* if 'parse_only' field is true, then avcodec_parse_frame() can be
194 used */
195#define CODEC_CAP_PARSE_ONLY 0x0004
d7425f59 196#define CODEC_CAP_TRUNCATED 0x0008
bf89e6b1 197
492cd3a9 198#define FF_COMMON_FRAME \
b536d0aa
MN
199 /**\
200 * pointer to the picture planes.\
201 * this might be different from the first allocated byte\
202 * - encoding: \
203 * - decoding: \
204 */\
1e491e29
MN
205 uint8_t *data[4];\
206 int linesize[4];\
207 /**\
32db2b1d 208 * pointer to the first allocated byte of the picture. can be used in get_buffer/release_buffer\
1e491e29 209 * this isnt used by lavc unless the default get/release_buffer() is used\
64863965
MN
210 * - encoding: \
211 * - decoding: \
1e491e29
MN
212 */\
213 uint8_t *base[4];\
214 /**\
215 * 1 -> keyframe, 0-> not\
64863965
MN
216 * - encoding: set by lavc\
217 * - decoding: set by lavc\
1e491e29
MN
218 */\
219 int key_frame;\
220\
221 /**\
0da71265 222 * picture type of the frame, see ?_TYPE below.\
64863965
MN
223 * - encoding: set by lavc for coded_picture (and set by user for input)\
224 * - decoding: set by lavc\
1e491e29
MN
225 */\
226 int pict_type;\
227\
228 /**\
229 * presentation timestamp in micro seconds (time when frame should be shown to user)\
230 * if 0 then the frame_rate will be used as reference\
64863965
MN
231 * - encoding: MUST be set by user\
232 * - decoding: set by lavc\
1e491e29 233 */\
be6784dc 234 int64_t pts;\
1e491e29
MN
235\
236 /**\
237 * picture number in bitstream order.\
64863965
MN
238 * - encoding: set by\
239 * - decoding: set by lavc\
1e491e29
MN
240 */\
241 int coded_picture_number;\
242 /**\
1e491e29 243 * picture number in display order.\
64863965
MN
244 * - encoding: set by\
245 * - decoding: set by lavc\
1e491e29
MN
246 */\
247 int display_picture_number;\
248\
249 /**\
250 * quality (between 1 (good) and 31 (bad)) \
64863965
MN
251 * - encoding: set by lavc for coded_picture (and set by user for input)\
252 * - decoding: set by lavc\
1e491e29
MN
253 */\
254 float quality; \
255\
256 /**\
257 * buffer age (1->was last buffer and dint change, 2->..., ...).\
258 * set to something large if the buffer has not been used yet \
64863965
MN
259 * - encoding: unused\
260 * - decoding: MUST be set by get_buffer()\
1e491e29
MN
261 */\
262 int age;\
263\
264 /**\
265 * is this picture used as reference\
64863965
MN
266 * - encoding: unused\
267 * - decoding: set by lavc (before get_buffer() call))\
1e491e29
MN
268 */\
269 int reference;\
270\
271 /**\
272 * QP table\
64863965
MN
273 * - encoding: unused\
274 * - decoding: set by lavc\
1e491e29
MN
275 */\
276 int8_t *qscale_table;\
277 /**\
278 * QP store stride\
64863965
MN
279 * - encoding: unused\
280 * - decoding: set by lavc\
1e491e29
MN
281 */\
282 int qstride;\
283\
284 /**\
285 * mbskip_table[mb]>=1 if MB didnt change\
286 * stride= mb_width = (width+15)>>4\
64863965
MN
287 * - encoding: unused\
288 * - decoding: set by lavc\
1e491e29
MN
289 */\
290 uint8_t *mbskip_table;\
291\
292 /**\
293 * for some private data of the user\
64863965
MN
294 * - encoding: unused\
295 * - decoding: set by user\
1e491e29
MN
296 */\
297 void *opaque;\
140cb663
MN
298\
299 /**\
300 * error\
64863965
MN
301 * - encoding: set by lavc if flags&CODEC_FLAG_PSNR\
302 * - decoding: unused\
140cb663
MN
303 */\
304 uint64_t error[4];\
4e00e76b
MN
305\
306 /**\
307 * type of the buffer (to keep track of who has to dealloc data[*])\
64863965
MN
308 * - encoding: set by the one who allocs it\
309 * - decoding: set by the one who allocs it\
4e00e76b
MN
310 * Note: user allocated (direct rendering) & internal buffers can not coexist currently\
311 */\
312 int type;\
2ec23b6d
MN
313 \
314 /**\
315 * when decoding, this signal how much the picture must be delayed.\
316 * extra_delay = repeat_pict / (2*fps)\
64863965
MN
317 * - encoding: unused\
318 * - decoding: set by lavc\
2ec23b6d 319 */\
0426af31
MN
320 int repeat_pict;\
321 \
322 /**\
323 * \
324 */\
325 int qscale_type;\
2ec23b6d 326
0426af31
MN
327#define FF_QSCALE_TYPE_MPEG1 0
328#define FF_QSCALE_TYPE_MPEG2 1
4e00e76b
MN
329
330#define FF_BUFFER_TYPE_INTERNAL 1
b536d0aa
MN
331#define FF_BUFFER_TYPE_USER 2 ///< Direct rendering buffers
332#define FF_BUFFER_TYPE_SHARED 4 ///< buffer from somewher else, dont dealloc
4e00e76b 333
1e491e29 334
140cb663
MN
335#define FF_I_TYPE 1 // Intra
336#define FF_P_TYPE 2 // Predicted
337#define FF_B_TYPE 3 // Bi-dir predicted
338#define FF_S_TYPE 4 // S(GMC)-VOP MPEG4
0da71265
MN
339#define FF_SI_TYPE 5
340#define FF_SP_TYPE 6
1e491e29 341
0da71265
MN
342/**
343 * Audio Video Frame.
344 */
492cd3a9
MN
345typedef struct AVFrame {
346 FF_COMMON_FRAME
347} AVFrame;
1e491e29 348
14bea432 349#define DEFAULT_FRAME_RATE_BASE 1001000
d33c949c
MN
350
351/**
352 * main external api structure.
353 */
de6d9b64 354typedef struct AVCodecContext {
b71901e6 355 /**
64863965
MN
356 * the average bitrate.
357 * - encoding: set by user. unused for constant quantizer encoding
358 * - decoding: set by lavc. 0 or some bitrate if this info is available in the stream
b71901e6 359 */
de6d9b64 360 int bit_rate;
b71901e6
MN
361
362 /**
64863965 363 * number of bits the bitstream is allowed to diverge from the reference.
b71901e6 364 * the reference can be CBR (for CBR pass1) or VBR (for pass2)
64863965
MN
365 * - encoding: set by user. unused for constant quantizer encoding
366 * - decoding: unused
b71901e6
MN
367 */
368 int bit_rate_tolerance;
369
370 /**
64863965
MN
371 * CODEC_FLAG_*.
372 * - encoding: set by user.
373 * - decoding: set by user.
b71901e6 374 */
de6d9b64 375 int flags;
b71901e6
MN
376
377 /**
378 * some codecs needs additionnal format info. It is stored here
64863965
MN
379 * - encoding: set by user.
380 * - decoding: set by lavc. (FIXME is this ok?)
b71901e6
MN
381 */
382 int sub_id;
383
384 /**
64863965
MN
385 * motion estimation algorithm used for video coding.
386 * - encoding: MUST be set by user.
387 * - decoding: unused
b71901e6
MN
388 */
389 int me_method;
390
391 /**
64863965 392 * some codecs need / can use extra-data like huffman tables.
b71901e6
MN
393 * mjpeg: huffman tables
394 * rv10: additional flags
b704e742 395 * mpeg4: global headers (they can be in the bitstream or here)
64863965
MN
396 * - encoding: set/allocated/freed by lavc.
397 * - decoding: set/allocated/freed by user.
b71901e6 398 */
e84c31dc
A
399 void *extradata;
400 int extradata_size;
401
de6d9b64 402 /* video only */
b71901e6 403 /**
14bea432 404 * frames per sec multiplied by frame_rate_base.
b71901e6 405 * for variable fps this is the precission, so if the timestamps
14bea432 406 * can be specified in msec precssion then this is 1000*frame_rate_base
64863965
MN
407 * - encoding: MUST be set by user
408 * - decoding: set by lavc. 0 or the frame_rate if available
b71901e6
MN
409 */
410 int frame_rate;
14bea432
MN
411
412 /**
64863965
MN
413 * width / height.
414 * - encoding: MUST be set by user.
415 * - decoding: set by user, some codecs might override / change it during playback
b71901e6 416 */
de6d9b64 417 int width, height;
b71901e6 418
2efe097a
MN
419#define FF_ASPECT_SQUARE 1
420#define FF_ASPECT_4_3_625 2
421#define FF_ASPECT_4_3_525 3
422#define FF_ASPECT_16_9_625 4
423#define FF_ASPECT_16_9_525 5
e769f053 424#define FF_ASPECT_EXTENDED 15
b71901e6
MN
425
426 /**
64863965
MN
427 * the number of pictures in a group of pitures, or 0 for intra_only.
428 * - encoding: set by user.
429 * - decoding: unused
b71901e6
MN
430 */
431 int gop_size;
432
433 /**
64863965
MN
434 * pixel format, see PIX_FMT_xxx.
435 * - encoding: unused
436 * - decoding: set by lavc.
b71901e6
MN
437 */
438 enum PixelFormat pix_fmt;
bdfcbbed
MK
439
440 /**
441 * Frame rate emulation. If not zero lower layer (i.e. format handler)
442 * has to read frames at native frame rate.
443 * - encoding: set by user.
444 * - decoding: unused.
445 */
446 int rate_emu;
447
b71901e6
MN
448 /**
449 * if non NULL, 'draw_horiz_band' is called by the libavcodec
450 * decoder to draw an horizontal band. It improve cache usage. Not
451 * all codecs can do that. You must check the codec capabilities
452 * before
64863965
MN
453 * - encoding: unused
454 * - decoding: set by user.
b71901e6 455 */
bf89e6b1 456 void (*draw_horiz_band)(struct AVCodecContext *s,
0c1a9eda 457 uint8_t **src_ptr, int linesize,
bf89e6b1
FB
458 int y, int width, int height);
459
de6d9b64 460 /* audio only */
64863965 461 int sample_rate; ///< samples per sec
de6d9b64 462 int channels;
64863965 463 int sample_fmt; ///< sample format, currenly unused
de6d9b64
FB
464
465 /* the following data should not be initialized */
64863965
MN
466 int frame_size; ///< in samples, initialized when calling 'init'
467 int frame_number; ///< audio or video frame number
468 int real_pict_num; ///< returns the real picture number of previous encoded frame
1e491e29 469
b71901e6 470 /**
b71901e6 471 * number of frames the decoded output will be delayed relative to
64863965
MN
472 * the encoded input.
473 * - encoding: set by lavc.
474 * - decoding: unused
b71901e6
MN
475 */
476 int delay;
1ff662cc 477
64863965
MN
478 /* - encoding parameters */
479 float qcompress; ///< amount of qscale change between easy & hard scenes (0.0-1.0)
480 float qblur; ///< amount of qscale smoothing over time (0.0-1.0)
b71901e6
MN
481
482 /**
64863965
MN
483 * minimum quantizer.
484 * - encoding: set by user.
485 * - decoding: unused
b71901e6
MN
486 */
487 int qmin;
488
489 /**
64863965
MN
490 * maximum quantizer.
491 * - encoding: set by user.
492 * - decoding: unused
b71901e6
MN
493 */
494 int qmax;
495
496 /**
64863965
MN
497 * maximum quantizer difference etween frames.
498 * - encoding: set by user.
499 * - decoding: unused
b71901e6
MN
500 */
501 int max_qdiff;
502
503 /**
64863965 504 * maximum number of b frames between non b frames.
b71901e6 505 * note: the output will be delayed by max_b_frames+1 relative to the input
64863965
MN
506 * - encoding: set by user.
507 * - decoding: unused
b71901e6
MN
508 */
509 int max_b_frames;
510
511 /**
64863965
MN
512 * qscale factor between ip and b frames.
513 * - encoding: set by user.
514 * - decoding: unused
b71901e6
MN
515 */
516 float b_quant_factor;
517
518 /** obsolete FIXME remove */
519 int rc_strategy;
8b4c7dbc 520 int b_frame_strategy;
9dbcbd92 521
b71901e6 522 /**
64863965
MN
523 * hurry up amount.
524 * - encoding: unused
525 * - decoding: set by user. 1-> skip b frames, 2-> skip idct/dequant too, 5-> skip everything except header
b71901e6
MN
526 */
527 int hurry_up;
2417652e 528
de6d9b64 529 struct AVCodec *codec;
b71901e6 530
de6d9b64
FB
531 void *priv_data;
532
644d98a4 533 /* The following data is for RTP friendly coding */
1f6b6e50 534 /* By now only H.263/H.263+/MPEG4 coder honours this */
644d98a4
J
535 int rtp_mode; /* 1 for activate RTP friendly-mode */
536 /* highers numbers represent more error-prone */
537 /* enviroments, by now just "1" exist */
538
539 int rtp_payload_size; /* The size of the RTP payload, the coder will */
540 /* do it's best to deliver a chunk with size */
541 /* below rtp_payload_size, the chunk will start */
542 /* with a start code on some codecs like H.263 */
543 /* This doesn't take account of any particular */
544 /* headers inside the transmited RTP payload */
81401c1f
J
545
546
547 /* The RTP callcack: This function is called */
548 /* every time the encoder as a packet to send */
549 /* Depends on the encoder if the data starts */
550 /* with a Start Code (it should) H.263 does */
551 void (*rtp_callback)(void *data, int size, int packet_number);
552
098eefe1
MN
553 /* statistics, used for 2-pass encoding */
554 int mv_bits;
555 int header_bits;
556 int i_tex_bits;
557 int p_tex_bits;
558 int i_count;
559 int p_count;
560 int skip_count;
b71901e6
MN
561 int misc_bits;
562
563 /**
64863965
MN
564 * number of bits used for the previously encoded frame.
565 * - encoding: set by lavc
7004ffb3 566 * - decoding: unused
b71901e6 567 */
098eefe1 568 int frame_bits;
7004ffb3 569
b71901e6 570 /**
64863965
MN
571 * private data of the user, can be used to carry app specific stuff.
572 * - encoding: set by user
573 * - decoding: set by user
b71901e6
MN
574 */
575 void *opaque;
576
de6d9b64 577 char codec_name[32];
4a663d80
PG
578 enum CodecType codec_type; /* see CODEC_TYPE_xxx */
579 enum CodecID codec_id; /* see CODEC_ID_xxx */
7004ffb3
MN
580
581 /**
582 * fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A').
583 * this is used to workaround some encoder bugs
584 * - encoding: unused
585 * - decoding: set by user, will be converted to upper case by lavc during init
586 */
587 unsigned int codec_tag;
92ba5ffb 588
b71901e6 589 /**
64863965
MN
590 * workaround bugs in encoders which sometimes cannot be detected automatically.
591 * - encoding: unused
592 * - decoding: set by user
b71901e6
MN
593 */
594 int workaround_bugs;
64863965 595#define FF_BUG_AUTODETECT 1 ///< autodetection
4d2858de
MN
596#define FF_BUG_OLD_MSMPEG4 2
597#define FF_BUG_XVID_ILACE 4
598#define FF_BUG_UMP4 8
599#define FF_BUG_NO_PADDING 16
600#define FF_BUG_AC_VLC 32
03e93d35 601#define FF_BUG_QPEL_CHROMA 64
db794953 602#define FF_BUG_STD_QPEL 128
36df8805 603#define FF_BUG_QPEL_CHROMA2 256
c40c3482 604#define FF_BUG_DIRECT_BLOCKSIZE 512
1c6dcb0f 605#define FF_BUG_EDGE 1024
4d2858de
MN
606//#define FF_BUG_FAKE_SCALABILITY 16 //autodetection should work 100%
607
b71901e6 608 /**
64863965
MN
609 * luma single coeff elimination threshold.
610 * - encoding: set by user
611 * - decoding: unused
b71901e6 612 */
1f6b6e50 613 int luma_elim_threshold;
b71901e6
MN
614
615 /**
64863965
MN
616 * chroma single coeff elimination threshold.
617 * - encoding: set by user
618 * - decoding: unused
b71901e6 619 */
1f6b6e50 620 int chroma_elim_threshold;
b71901e6
MN
621
622 /**
64863965
MN
623 * strictly follow the std (MPEG4, ...).
624 * - encoding: set by user
625 * - decoding: unused
b71901e6
MN
626 */
627 int strict_std_compliance;
628
629 /**
64863965 630 * qscale offset between ip and b frames.
b3a391e8
MN
631 * if > 0 then the last p frame quantizer will be used (q= lastp_q*factor+offset)
632 * if < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset)
64863965
MN
633 * - encoding: set by user.
634 * - decoding: unused
b71901e6
MN
635 */
636 float b_quant_offset;
637
638 /**
ce3bcaed 639 * error resilience higher values will detect more errors but may missdetect
64863965
MN
640 * some more or less valid parts as errors.
641 * - encoding: unused
642 * - decoding: set by user
b71901e6 643 */
1f6b6e50 644 int error_resilience;
ce3bcaed
MN
645#define FF_ER_CAREFULL 1
646#define FF_ER_COMPLIANT 2
647#define FF_ER_AGGRESSIVE 3
648#define FF_ER_VERY_AGGRESSIVE 4
ae72cda6 649
6b72ac63 650 /**
1e491e29
MN
651 * called at the beginning of each frame to get a buffer for it.
652 * if pic.reference is set then the frame will be read later by lavc
64863965
MN
653 * - encoding: unused
654 * - decoding: set by lavc, user can override
b71901e6 655 */
492cd3a9 656 int (*get_buffer)(struct AVCodecContext *c, AVFrame *pic);
b71901e6
MN
657
658 /**
1e491e29
MN
659 * called to release buffers which where allocated with get_buffer.
660 * a released buffer can be reused in get_buffer()
661 * pic.data[*] must be set to NULL
64863965
MN
662 * - encoding: unused
663 * - decoding: set by lavc, user can override
b71901e6 664 */
492cd3a9 665 void (*release_buffer)(struct AVCodecContext *c, AVFrame *pic);
0fd90455 666
b71901e6 667 /**
64863965
MN
668 * is 1 if the decoded stream contains b frames, 0 otherwise.
669 * - encoding: unused
670 * - decoding: set by lavc
b71901e6
MN
671 */
672 int has_b_frames;
b71901e6 673
64863965 674 int block_align; ///< used by some WAV based audio codecs
ce980a95 675
64863965 676 int parse_only; /* - decoding only: if true, only parsing is done
917e06c8
FB
677 (function avcodec_parse_frame()). The frame
678 data is returned. Only MPEG codecs support this now. */
ce980a95 679
b71901e6 680 /**
64863965
MN
681 * 0-> h263 quant 1-> mpeg quant.
682 * - encoding: set by user.
683 * - decoding: unused
b71901e6
MN
684 */
685 int mpeg_quant;
ce980a95 686
b71901e6 687 /**
64863965
MN
688 * pass1 encoding statistics output buffer.
689 * - encoding: set by lavc
690 * - decoding: unused
b71901e6 691 */
64863965 692 char *stats_out;
b71901e6
MN
693
694 /**
695 * pass2 encoding statistics input buffer.
696 * concatenated stuff from stats_out of pass1 should be placed here
64863965
MN
697 * - encoding: allocated/set/freed by user
698 * - decoding: unused
b71901e6
MN
699 */
700 char *stats_in;
701
702 /**
64863965 703 * ratecontrol qmin qmax limiting method.
b71901e6 704 * 0-> clipping, 1-> use a nice continous function to limit qscale wthin qmin/qmax
64863965
MN
705 * - encoding: set by user.
706 * - decoding: unused
b71901e6 707 */
ce980a95 708 float rc_qsquish;
b71901e6 709
ce980a95
MN
710 float rc_qmod_amp;
711 int rc_qmod_freq;
b71901e6
MN
712
713 /**
64863965
MN
714 * ratecontrol override, see RcOverride.
715 * - encoding: allocated/set/freed by user.
716 * - decoding: unused
b71901e6 717 */
ce980a95
MN
718 RcOverride *rc_override;
719 int rc_override_count;
b71901e6
MN
720
721 /**
64863965
MN
722 * rate control equation.
723 * - encoding: set by user
724 * - decoding: unused
b71901e6 725 */
ce980a95 726 char *rc_eq;
b71901e6
MN
727
728 /**
64863965
MN
729 * maximum bitrate.
730 * - encoding: set by user.
731 * - decoding: unused
b71901e6 732 */
ce980a95 733 int rc_max_rate;
b71901e6
MN
734
735 /**
64863965
MN
736 * minimum bitrate.
737 * - encoding: set by user.
738 * - decoding: unused
b71901e6 739 */
ce980a95 740 int rc_min_rate;
b71901e6
MN
741
742 /**
64863965
MN
743 * decoder bitstream buffer size.
744 * - encoding: set by user.
745 * - decoding: unused
b71901e6 746 */
ce980a95
MN
747 int rc_buffer_size;
748 float rc_buffer_aggressivity;
b71901e6
MN
749
750 /**
64863965
MN
751 * qscale factor between p and i frames.
752 * - encoding: set by user.
753 * - decoding: unused
b71901e6
MN
754 */
755 float i_quant_factor;
756
757 /**
64863965 758 * qscale offset between p and i frames.
b3a391e8
MN
759 * if > 0 then the last p frame quantizer will be used (q= lastp_q*factor+offset)
760 * if < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset)
64863965
MN
761 * - encoding: set by user.
762 * - decoding: unused
b71901e6
MN
763 */
764 float i_quant_offset;
765
766 /**
64863965
MN
767 * initial complexity for pass1 ratecontrol.
768 * - encoding: set by user.
769 * - decoding: unused
b71901e6 770 */
ce980a95 771 float rc_initial_cplx;
917e06c8 772
b71901e6 773 /**
64863965
MN
774 * dct algorithm, see FF_DCT_* below.
775 * - encoding: set by user
776 * - decoding: unused
b71901e6 777 */
28db7fce 778 int dct_algo;
c7e07931 779#define FF_DCT_AUTO 0
28db7fce 780#define FF_DCT_FASTINT 1
c7e07931
MO
781#define FF_DCT_INT 2
782#define FF_DCT_MMX 3
783#define FF_DCT_MLIB 4
05c4072b 784#define FF_DCT_ALTIVEC 5
c5d309f2
MN
785
786 /**
64863965
MN
787 * luminance masking (0-> disabled).
788 * - encoding: set by user
789 * - decoding: unused
c5d309f2
MN
790 */
791 float lumi_masking;
792
793 /**
64863965
MN
794 * temporary complexity masking (0-> disabled).
795 * - encoding: set by user
796 * - decoding: unused
c5d309f2
MN
797 */
798 float temporal_cplx_masking;
799
800 /**
64863965
MN
801 * spatial complexity masking (0-> disabled).
802 * - encoding: set by user
803 * - decoding: unused
c5d309f2
MN
804 */
805 float spatial_cplx_masking;
806
807 /**
64863965
MN
808 * p block masking (0-> disabled).
809 * - encoding: set by user
810 * - decoding: unused
c5d309f2
MN
811 */
812 float p_masking;
15415af4 813
5e746b99 814 /**
64863965
MN
815 * darkness masking (0-> disabled).
816 * - encoding: set by user
817 * - decoding: unused
5e746b99
MN
818 */
819 float dark_masking;
0c2dd16e 820
3a694b04
NK
821
822 /* for binary compatibility */
823 int unused;
824
0c2dd16e 825 /**
64863965
MN
826 * idct algorithm, see FF_IDCT_* below.
827 * - encoding: set by user
828 * - decoding: set by user
2ad1516a
MN
829 */
830 int idct_algo;
831#define FF_IDCT_AUTO 0
832#define FF_IDCT_INT 1
833#define FF_IDCT_SIMPLE 2
834#define FF_IDCT_SIMPLEMMX 3
835#define FF_IDCT_LIBMPEG2MMX 4
836#define FF_IDCT_PS2 5
837#define FF_IDCT_MLIB 6
838#define FF_IDCT_ARM 7
05c4072b 839#define FF_IDCT_ALTIVEC 8
2ad1516a 840
144f0625 841 /**
64863965
MN
842 * slice count.
843 * - encoding: set by lavc
844 * - decoding: set by user (or 0)
144f0625
MN
845 */
846 int slice_count;
847 /**
64863965
MN
848 * slice offsets in the frame in bytes.
849 * - encoding: set/allocated by lavc
850 * - decoding: set/allocated by user (or NULL)
144f0625
MN
851 */
852 int *slice_offset;
853
4d2858de 854 /**
64863965
MN
855 * error concealment flags.
856 * - encoding: unused
857 * - decoding: set by user
4d2858de
MN
858 */
859 int error_concealment;
860#define FF_EC_GUESS_MVS 1
861#define FF_EC_DEBLOCK 2
862
6b72ac63 863 /**
bec89a84 864 * dsp_mask could be add used to disable unwanted CPU features
8350df97 865 * CPU features (i.e. MMX, SSE. ...)
bec89a84
ZK
866 *
867 * with FORCE flag you may instead enable given CPU features
868 * (Dangerous: usable in case of misdetection, improper usage however will
869 * result into program crash)
870 */
871 unsigned dsp_mask;
872#define FF_MM_FORCE 0x80000000 /* force usage of selected flags (OR) */
873 /* lower 16 bits - CPU features */
874#ifdef HAVE_MMX
875#define FF_MM_MMX 0x0001 /* standard MMX */
876#define FF_MM_3DNOW 0x0004 /* AMD 3DNOW */
877#define FF_MM_MMXEXT 0x0002 /* SSE integer functions or AMD MMX ext */
878#define FF_MM_SSE 0x0008 /* SSE functions */
879#define FF_MM_SSE2 0x0010 /* PIV SSE2 functions */
880#endif /* HAVE_MMX */
11f18faf
MN
881
882 /**
64863965
MN
883 * bits per sample/pixel from the demuxer (needed for huffyuv).
884 * - encoding: set by lavc
885 * - decoding: set by user
11f18faf
MN
886 */
887 int bits_per_sample;
888
889 /**
64863965
MN
890 * prediction method (needed for huffyuv).
891 * - encoding: set by user
892 * - decoding: unused
11f18faf
MN
893 */
894 int prediction_method;
895#define FF_PRED_LEFT 0
896#define FF_PRED_PLANE 1
897#define FF_PRED_MEDIAN 2
5d3cea3a
MN
898
899 /**
64863965
MN
900 * aspect ratio (0 if unknown).
901 * - encoding: set by user.
902 * - decoding: set by lavc.
5d3cea3a
MN
903 */
904 float aspect_ratio;
1e491e29
MN
905
906 /**
64863965
MN
907 * the picture in the bitstream.
908 * - encoding: set by lavc
909 * - decoding: set by lavc
1e491e29 910 */
492cd3a9 911 AVFrame *coded_frame;
c8c437bc
MN
912
913 /**
64863965
MN
914 * debug.
915 * - encoding: set by user.
916 * - decoding: set by user.
c8c437bc
MN
917 */
918 int debug;
919#define FF_DEBUG_PICT_INFO 1
920#define FF_DEBUG_RC 2
921#define FF_DEBUG_BITSTREAM 4
922#define FF_DEBUG_MB_TYPE 8
923#define FF_DEBUG_QP 16
924#define FF_DEBUG_MV 32
41773b73
MN
925#define FF_DEBUG_VIS_MV 0x00000040
926#define FF_DEBUG_SKIP 0x00000080
927#define FF_DEBUG_STARTCODE 0x00000100
928#define FF_DEBUG_PTS 0x00000200
46b4feec 929#define FF_DEBUG_ER 0x00000400
0da71265 930#define FF_DEBUG_MMCO 0x00000800
140cb663
MN
931
932 /**
64863965
MN
933 * error.
934 * - encoding: set by lavc if flags&CODEC_FLAG_PSNR
935 * - decoding: unused
140cb663
MN
936 */
937 uint64_t error[4];
17a70fde
MN
938
939 /**
64863965
MN
940 * minimum MB quantizer.
941 * - encoding: set by user.
942 * - decoding: unused
17a70fde
MN
943 */
944 int mb_qmin;
945
946 /**
64863965
MN
947 * maximum MB quantizer.
948 * - encoding: set by user.
949 * - decoding: unused
17a70fde
MN
950 */
951 int mb_qmax;
1457ab52
MN
952
953 /**
64863965
MN
954 * motion estimation compare function.
955 * - encoding: set by user.
956 * - decoding: unused
1457ab52
MN
957 */
958 int me_cmp;
959 /**
64863965
MN
960 * subpixel motion estimation compare function.
961 * - encoding: set by user.
962 * - decoding: unused
1457ab52
MN
963 */
964 int me_sub_cmp;
965 /**
64863965
MN
966 * macroblock compare function (not supported yet).
967 * - encoding: set by user.
968 * - decoding: unused
1457ab52
MN
969 */
970 int mb_cmp;
971#define FF_CMP_SAD 0
972#define FF_CMP_SSE 1
973#define FF_CMP_SATD 2
974#define FF_CMP_DCT 3
975#define FF_CMP_PSNR 4
976#define FF_CMP_BIT 5
977#define FF_CMP_RD 6
978#define FF_CMP_ZERO 7
979#define FF_CMP_CHROMA 256
980
981 /**
64863965
MN
982 * ME diamond size & shape.
983 * - encoding: set by user.
984 * - decoding: unused
1457ab52
MN
985 */
986 int dia_size;
b07a5980
MN
987
988 /**
64863965
MN
989 * amount of previous MV predictors (2a+1 x 2a+1 square).
990 * - encoding: set by user.
991 * - decoding: unused
b07a5980
MN
992 */
993 int last_predictor_count;
70ac76c0 994
f5fb6b34 995 /**
64863965
MN
996 * pre pass for motion estimation.
997 * - encoding: set by user.
998 * - decoding: unused
f5fb6b34
MN
999 */
1000 int pre_me;
b07a5980 1001
70ac76c0 1002 /**
64863965
MN
1003 * motion estimation pre pass compare function.
1004 * - encoding: set by user.
1005 * - decoding: unused
70ac76c0
MN
1006 */
1007 int me_pre_cmp;
826f429a 1008
70ac76c0 1009 /**
64863965
MN
1010 * ME pre pass diamond size & shape.
1011 * - encoding: set by user.
1012 * - decoding: unused
70ac76c0
MN
1013 */
1014 int pre_dia_size;
1015
826f429a 1016 /**
64863965
MN
1017 * subpel ME quality.
1018 * - encoding: set by user.
1019 * - decoding: unused
826f429a
MN
1020 */
1021 int me_subpel_quality;
1022
a33c7159 1023 /**
64863965 1024 * callback to negotiate the pixelFormat.
a33c7159
MN
1025 * @param fmt is the list of formats which are supported by the codec,
1026 * its terminated by -1 as 0 is a valid format, the formats are ordered by quality
1027 * the first is allways the native one
1028 * @return the choosen format
64863965
MN
1029 * - encoding: unused
1030 * - decoding: set by user, if not set then the native format will always be choosen
a33c7159
MN
1031 */
1032 enum PixelFormat (*get_format)(struct AVCodecContext *s, enum PixelFormat * fmt);
e2f9490e
FB
1033
1034 /**
1035 * DTG active format information (additionnal aspect ratio
1036 * information only used in DVB MPEG2 transport streams). 0 if
1037 * not set.
1038 *
64863965
MN
1039 * - encoding: unused.
1040 * - decoding: set by decoder
e2f9490e
FB
1041 */
1042 int dtg_active_format;
1043#define FF_DTG_AFD_SAME 8
1044#define FF_DTG_AFD_4_3 9
1045#define FF_DTG_AFD_16_9 10
1046#define FF_DTG_AFD_14_9 11
1047#define FF_DTG_AFD_4_3_SP_14_9 13
1048#define FF_DTG_AFD_16_9_SP_14_9 14
1049#define FF_DTG_AFD_SP_4_3 15
1050
ebbcdc9a
MN
1051 /**
1052 * Maximum motion estimation search range in subpel units.
1053 * if 0 then no limit
1054 *
64863965
MN
1055 * - encoding: set by user.
1056 * - decoding: unused.
ebbcdc9a 1057 */
59e0ac8e 1058 int me_range;
ebbcdc9a 1059
65f7062d
MN
1060 /**
1061 * frame_rate_base.
1062 * for variable fps this is 1
1063 * - encoding: set by user.
1064 * - decoding: set by lavc.
1065 * @todo move this after frame_rate
1066 */
65f7062d 1067
1984f635
MN
1068 int frame_rate_base;
1069 /**
1070 * intra quantizer bias.
1071 * - encoding: set by user.
1072 * - decoding: unused
1073 */
1074 int intra_quant_bias;
1075#define FF_DEFAULT_QUANT_BIAS 999999
1076
1077 /**
1078 * inter quantizer bias.
1079 * - encoding: set by user.
1080 * - decoding: unused
1081 */
1082 int inter_quant_bias;
1083
de6d9b64
FB
1084} AVCodecContext;
1085
97d96aaa 1086
64863965
MN
1087/**
1088 * AVOption.
1089 */
97d96aaa
ZK
1090typedef struct AVOption {
1091 /** options' name */
1092 const char *name; /* if name is NULL, it indicates a link to next */
bec89a84
ZK
1093 /** short English text help or const struct AVOption* subpointer */
1094 const char *help; // const struct AVOption* sub;
97d96aaa
ZK
1095 /** offset to context structure where the parsed value should be stored */
1096 int offset;
1097 /** options' type */
1098 int type;
64863965
MN
1099#define FF_OPT_TYPE_BOOL 1 ///< boolean - true,1,on (or simply presence)
1100#define FF_OPT_TYPE_DOUBLE 2 ///< double
1101#define FF_OPT_TYPE_INT 3 ///< integer
1102#define FF_OPT_TYPE_STRING 4 ///< string (finished with \0)
1103#define FF_OPT_TYPE_MASK 0x1f ///< mask for types - upper bits are various flags
97d96aaa
ZK
1104//#define FF_OPT_TYPE_EXPERT 0x20 // flag for expert option
1105#define FF_OPT_TYPE_FLAG (FF_OPT_TYPE_BOOL | 0x40)
1106#define FF_OPT_TYPE_RCOVERRIDE (FF_OPT_TYPE_STRING | 0x80)
1107 /** min value (min == max -> no limits) */
1108 double min;
1109 /** maximum value for double/int */
1110 double max;
1111 /** default boo [0,1]l/double/int value */
1112 double defval;
1113 /**
1114 * default string value (with optional semicolon delimited extra option-list
1115 * i.e. option1;option2;option3
1116 * defval might select other then first argument as default
1117 */
1118 const char *defstr;
97d96aaa
ZK
1119#define FF_OPT_MAX_DEPTH 10
1120} AVOption;
1121
64863965 1122/**
bec89a84
ZK
1123 * Parse option(s) and sets fields in passed structure
1124 * @param strct structure where the parsed results will be written
1125 * @param list list with AVOptions
1126 * @param opts string with options for parsing
1127 */
1128int avoption_parse(void* strct, const AVOption* list, const char* opts);
1129
1130
1131/**
64863965
MN
1132 * AVCodec.
1133 */
de6d9b64 1134typedef struct AVCodec {
18f77016 1135 const char *name;
de6d9b64
FB
1136 int type;
1137 int id;
1138 int priv_data_size;
1139 int (*init)(AVCodecContext *);
0c1a9eda 1140 int (*encode)(AVCodecContext *, uint8_t *buf, int buf_size, void *data);
de6d9b64 1141 int (*close)(AVCodecContext *);
0fd90455 1142 int (*decode)(AVCodecContext *, void *outdata, int *outdata_size,
0c1a9eda 1143 uint8_t *buf, int buf_size);
bf89e6b1 1144 int capabilities;
97d96aaa 1145 const AVOption *options;
de6d9b64
FB
1146 struct AVCodec *next;
1147} AVCodec;
1148
97d96aaa 1149/**
d7425f59
MN
1150 * four components are given, that's all.
1151 * the last component is alpha
1152 */
de6d9b64 1153typedef struct AVPicture {
0c1a9eda 1154 uint8_t *data[4];
d7425f59 1155 int linesize[4];
de6d9b64
FB
1156} AVPicture;
1157
1158extern AVCodec ac3_encoder;
1159extern AVCodec mp2_encoder;
9d36bdc9 1160extern AVCodec mp3lame_encoder;
81e0d0b4 1161extern AVCodec oggvorbis_encoder;
de6d9b64
FB
1162extern AVCodec mpeg1video_encoder;
1163extern AVCodec h263_encoder;
1164extern AVCodec h263p_encoder;
1165extern AVCodec rv10_encoder;
1166extern AVCodec mjpeg_encoder;
bf89e6b1 1167extern AVCodec mpeg4_encoder;
84afee34
MN
1168extern AVCodec msmpeg4v1_encoder;
1169extern AVCodec msmpeg4v2_encoder;
1170extern AVCodec msmpeg4v3_encoder;
0151a6f5
MN
1171extern AVCodec wmv1_encoder;
1172extern AVCodec wmv2_encoder;
11f18faf 1173extern AVCodec huffyuv_encoder;
0da71265 1174extern AVCodec h264_encoder;
de6d9b64
FB
1175
1176extern AVCodec h263_decoder;
bf89e6b1 1177extern AVCodec mpeg4_decoder;
84afee34
MN
1178extern AVCodec msmpeg4v1_decoder;
1179extern AVCodec msmpeg4v2_decoder;
1180extern AVCodec msmpeg4v3_decoder;
e1a9dbff 1181extern AVCodec wmv1_decoder;
0151a6f5 1182extern AVCodec wmv2_decoder;
de6d9b64
FB
1183extern AVCodec mpeg_decoder;
1184extern AVCodec h263i_decoder;
1185extern AVCodec rv10_decoder;
be8ffec9 1186extern AVCodec svq1_decoder;
020fcc94
FB
1187extern AVCodec dvvideo_decoder;
1188extern AVCodec dvaudio_decoder;
bc8d1857
FB
1189extern AVCodec wmav1_decoder;
1190extern AVCodec wmav2_decoder;
4e66ab3b 1191extern AVCodec mjpeg_decoder;
b135d9fb 1192extern AVCodec mjpegb_decoder;
4b1f4f23 1193extern AVCodec mp2_decoder;
a96b68b7 1194extern AVCodec mp3_decoder;
3f95e843
FR
1195extern AVCodec mace3_decoder;
1196extern AVCodec mace6_decoder;
11f18faf 1197extern AVCodec huffyuv_decoder;
3aca208a 1198extern AVCodec oggvorbis_decoder;
f70f7c6d 1199extern AVCodec cyuv_decoder;
0da71265 1200extern AVCodec h264_decoder;
deabd4fd 1201extern AVCodec indeo3_decoder;
de6d9b64 1202
a96b68b7
FB
1203/* pcm codecs */
1204#define PCM_CODEC(id, name) \
1205extern AVCodec name ## _decoder; \
f11d3f23 1206extern AVCodec name ## _encoder
a96b68b7
FB
1207
1208PCM_CODEC(CODEC_ID_PCM_S16LE, pcm_s16le);
1209PCM_CODEC(CODEC_ID_PCM_S16BE, pcm_s16be);
1210PCM_CODEC(CODEC_ID_PCM_U16LE, pcm_u16le);
1211PCM_CODEC(CODEC_ID_PCM_U16BE, pcm_u16be);
1212PCM_CODEC(CODEC_ID_PCM_S8, pcm_s8);
1213PCM_CODEC(CODEC_ID_PCM_U8, pcm_u8);
1214PCM_CODEC(CODEC_ID_PCM_ALAW, pcm_alaw);
1215PCM_CODEC(CODEC_ID_PCM_MULAW, pcm_mulaw);
1216
0147f198
FR
1217/* adpcm codecs */
1218
1219PCM_CODEC(CODEC_ID_ADPCM_IMA_QT, adpcm_ima_qt);
1220PCM_CODEC(CODEC_ID_ADPCM_IMA_WAV, adpcm_ima_wav);
1221PCM_CODEC(CODEC_ID_ADPCM_MS, adpcm_ms);
1222
a96b68b7
FB
1223#undef PCM_CODEC
1224
1225/* dummy raw video codec */
de6d9b64
FB
1226extern AVCodec rawvideo_codec;
1227
1228/* the following codecs use external GPL libs */
de6d9b64
FB
1229extern AVCodec ac3_decoder;
1230
1231/* resample.c */
1232
1233struct ReSampleContext;
1234
1235typedef struct ReSampleContext ReSampleContext;
1236
1237ReSampleContext *audio_resample_init(int output_channels, int input_channels,
1238 int output_rate, int input_rate);
1239int audio_resample(ReSampleContext *s, short *output, short *input, int nb_samples);
1240void audio_resample_close(ReSampleContext *s);
1241
1242/* YUV420 format is assumed ! */
1243
1244struct ImgReSampleContext;
1245
1246typedef struct ImgReSampleContext ImgReSampleContext;
1247
1248ImgReSampleContext *img_resample_init(int output_width, int output_height,
1249 int input_width, int input_height);
ab6d194a
MN
1250
1251ImgReSampleContext *img_resample_full_init(int owidth, int oheight,
1252 int iwidth, int iheight,
1253 int topBand, int bottomBand,
1254 int leftBand, int rightBand);
1255
de6d9b64
FB
1256void img_resample(ImgReSampleContext *s,
1257 AVPicture *output, AVPicture *input);
1258
1259void img_resample_close(ImgReSampleContext *s);
1260
0c1a9eda 1261int avpicture_fill(AVPicture *picture, uint8_t *ptr,
2d1a4094 1262 int pix_fmt, int width, int height);
219b06c6 1263int avpicture_get_size(int pix_fmt, int width, int height);
dab64ebc
FB
1264void avcodec_get_chroma_sub_sample(int pix_fmt, int *h_shift, int *v_shift);
1265const char *avcodec_get_pix_fmt_name(int pix_fmt);
219b06c6 1266
fab21997
FB
1267#define FF_LOSS_RESOLUTION 0x0001 /* loss due to resolution change */
1268#define FF_LOSS_DEPTH 0x0002 /* loss due to color depth change */
1269#define FF_LOSS_COLORSPACE 0x0004 /* loss due to color space conversion */
1270#define FF_LOSS_ALPHA 0x0008 /* loss of alpha bits */
1271#define FF_LOSS_COLORQUANT 0x0010 /* loss due to color quantization */
1272#define FF_LOSS_CHROMA 0x0020 /* loss of chroma (e.g. rgb to gray conversion) */
1273
1274int avcodec_get_pix_fmt_loss(int dst_pix_fmt, int src_pix_fmt,
1275 int has_alpha);
1276int avcodec_find_best_pix_fmt(int pix_fmt_mask, int src_pix_fmt,
1277 int has_alpha, int *loss_ptr);
1278
0469baf1
FB
1279#define FF_ALPHA_TRANSP 0x0001 /* image has some totally transparent pixels */
1280#define FF_ALPHA_SEMI_TRANSP 0x0002 /* image has some transparent pixels */
1281int img_get_alpha_info(AVPicture *src, int pix_fmt, int width, int height);
1282
219b06c6
FB
1283/* convert among pixel formats */
1284int img_convert(AVPicture *dst, int dst_pix_fmt,
1285 AVPicture *src, int pix_fmt,
1286 int width, int height);
1287
1288/* deinterlace a picture */
1289int avpicture_deinterlace(AVPicture *dst, AVPicture *src,
de6d9b64
FB
1290 int pix_fmt, int width, int height);
1291
1292/* external high level API */
1293
1294extern AVCodec *first_avcodec;
1295
156e5023 1296/* returns LIBAVCODEC_VERSION_INT constant */
51a49663 1297unsigned avcodec_version(void);
8bceb6af 1298/* returns LIBAVCODEC_BUILD constant */
51a49663 1299unsigned avcodec_build(void);
de6d9b64
FB
1300void avcodec_init(void);
1301
1302void register_avcodec(AVCodec *format);
1303AVCodec *avcodec_find_encoder(enum CodecID id);
98f3b098 1304AVCodec *avcodec_find_encoder_by_name(const char *name);
de6d9b64
FB
1305AVCodec *avcodec_find_decoder(enum CodecID id);
1306AVCodec *avcodec_find_decoder_by_name(const char *name);
1307void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode);
1308
1e491e29 1309void avcodec_get_context_defaults(AVCodecContext *s);
7ffbb60e 1310AVCodecContext *avcodec_alloc_context(void);
492cd3a9 1311AVFrame *avcodec_alloc_frame(void);
1e491e29 1312
492cd3a9
MN
1313int avcodec_default_get_buffer(AVCodecContext *s, AVFrame *pic);
1314void avcodec_default_release_buffer(AVCodecContext *s, AVFrame *pic);
1e491e29 1315
de6d9b64 1316int avcodec_open(AVCodecContext *avctx, AVCodec *codec);
0c1a9eda 1317int avcodec_decode_audio(AVCodecContext *avctx, int16_t *samples,
de6d9b64 1318 int *frame_size_ptr,
0c1a9eda 1319 uint8_t *buf, int buf_size);
492cd3a9 1320int avcodec_decode_video(AVCodecContext *avctx, AVFrame *picture,
de6d9b64 1321 int *got_picture_ptr,
0c1a9eda
ZK
1322 uint8_t *buf, int buf_size);
1323int avcodec_parse_frame(AVCodecContext *avctx, uint8_t **pdata,
917e06c8 1324 int *data_size_ptr,
0c1a9eda
ZK
1325 uint8_t *buf, int buf_size);
1326int avcodec_encode_audio(AVCodecContext *avctx, uint8_t *buf, int buf_size,
de6d9b64 1327 const short *samples);
0c1a9eda 1328int avcodec_encode_video(AVCodecContext *avctx, uint8_t *buf, int buf_size,
492cd3a9 1329 const AVFrame *pict);
de6d9b64
FB
1330
1331int avcodec_close(AVCodecContext *avctx);
1332
1333void avcodec_register_all(void);
a96b68b7 1334
1c2a8c7f
MN
1335void avcodec_flush_buffers(AVCodecContext *avctx);
1336
14bea432
MN
1337/* misc usefull functions */
1338/**
1339 * reduce a fraction.
1340 * this is usefull for framerate calculations
1341 * @param max the maximum allowed for dst_nom & dst_den
1342 * @return 1 if exact, 0 otherwise
1343 */
1344int av_reduce(int *dst_nom, int *dst_den, int64_t nom, int64_t den, int64_t max);
1345
1346/**
1347 * rescale a 64bit integer.
1348 * a simple a*b/c isnt possible as it can overflow
1349 */
1350int64_t av_rescale(int64_t a, int b, int c);
628d601b 1351
628d601b 1352
e8f14793
ZK
1353/**
1354 * Interface for 0.5.0 version
1355 *
1356 * do not even think about it's usage for this moment
1357 */
1358
1359typedef struct {
64863965 1360 /// compressed size used from given memory buffer
e8f14793
ZK
1361 int size;
1362 /// I/P/B frame type
1363 int frame_type;
1364} avc_enc_result_t;
1365
1366/**
1367 * Commands
1368 * order can't be changed - once it was defined
1369 */
1370typedef enum {
1371 // general commands
1372 AVC_OPEN_BY_NAME = 0xACA000,
1373 AVC_OPEN_BY_CODEC_ID,
1374 AVC_OPEN_BY_FOURCC,
1375 AVC_CLOSE,
1376
1377 AVC_FLUSH,
1378 // pin - struct { uint8_t* src, uint_t src_size }
1379 // pout - struct { AVPicture* img, consumed_bytes,
1380 AVC_DECODE,
1381 // pin - struct { AVPicture* img, uint8_t* dest, uint_t dest_size }
1382 // pout - uint_t used_from_dest_size
1383 AVC_ENCODE,
1384
1385 // query/get video commands
1386 AVC_GET_VERSION = 0xACB000,
1387 AVC_GET_WIDTH,
1388 AVC_GET_HEIGHT,
1389 AVC_GET_DELAY,
1390 AVC_GET_QUANT_TABLE,
1391 // ...
1392
1393 // query/get audio commands
1394 AVC_GET_FRAME_SIZE = 0xABC000,
1395
1396 // maybe define some simple structure which
1397 // might be passed to the user - but they can't
1398 // contain any codec specific parts and these
1399 // calls are usualy necessary only few times
1400
1401 // set video commands
1402 AVC_SET_WIDTH = 0xACD000,
1403 AVC_SET_HEIGHT,
1404
1405 // set video encoding commands
1406 AVC_SET_FRAME_RATE = 0xACD800,
1407 AVC_SET_QUALITY,
1408 AVC_SET_HURRY_UP,
1409
1410 // set audio commands
1411 AVC_SET_SAMPLE_RATE = 0xACE000,
1412 AVC_SET_CHANNELS,
1413
1414} avc_cmd_t;
1415
1416/**
1417 * \param handle allocated private structure by libavcodec
1418 * for initialization pass NULL - will be returned pout
1419 * user is supposed to know nothing about its structure
1420 * \param cmd type of operation to be performed
1421 * \param pint input parameter
1422 * \param pout output parameter
1423 *
1424 * \returns command status - eventually for query command it might return
1425 * integer resulting value
1426 */
1427int avcodec(void* handle, avc_cmd_t cmd, void* pin, void* pout);
1428
544eb99c 1429/* memory */
18f77016
ZK
1430void *av_malloc(unsigned int size);
1431void *av_mallocz(unsigned int size);
8e1e6f31 1432void *av_realloc(void *ptr, unsigned int size);
544eb99c 1433void av_free(void *ptr);
8e1e6f31 1434char *av_strdup(const char *s);
544eb99c
FB
1435void __av_freep(void **ptr);
1436#define av_freep(p) __av_freep((void **)(p))
97d96aaa 1437void *av_fast_realloc(void *ptr, unsigned int *size, unsigned int min_size);
855ea723
ZK
1438/* for static data only */
1439/* call av_free_static to release all staticaly allocated tables */
628d601b 1440void av_free_static(void);
855ea723
ZK
1441void *__av_mallocz_static(void** location, unsigned int size);
1442#define av_mallocz_static(p, s) __av_mallocz_static((void **)(p), s)
544eb99c 1443
02d697aa
ZK
1444#ifdef __cplusplus
1445}
1446#endif
1447
a96b68b7 1448#endif /* AVCODEC_H */