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