yuy2 output support
[libav.git] / libavcodec / avcodec.h
CommitLineData
a96b68b7
FB
1#ifndef AVCODEC_H
2#define AVCODEC_H
3
de6d9b64
FB
4#include "common.h"
5
4b1f4f23
J
6#define LIBAVCODEC_VERSION_INT 0x000406
7#define LIBAVCODEC_VERSION "0.4.6"
144f0625
MN
8#define LIBAVCODEC_BUILD 4630
9#define LIBAVCODEC_BUILD_STR "4630"
4b1f4f23 10
de6d9b64
FB
11enum CodecID {
12 CODEC_ID_NONE,
13 CODEC_ID_MPEG1VIDEO,
14 CODEC_ID_H263,
15 CODEC_ID_RV10,
16 CODEC_ID_MP2,
9d36bdc9 17 CODEC_ID_MP3LAME,
81e0d0b4 18 CODEC_ID_VORBIS,
de6d9b64
FB
19 CODEC_ID_AC3,
20 CODEC_ID_MJPEG,
bf89e6b1 21 CODEC_ID_MPEG4,
de6d9b64 22 CODEC_ID_RAWVIDEO,
84afee34
MN
23 CODEC_ID_MSMPEG4V1,
24 CODEC_ID_MSMPEG4V2,
25 CODEC_ID_MSMPEG4V3,
e1a9dbff 26 CODEC_ID_WMV1,
b50eef3a 27 CODEC_ID_WMV2,
de6d9b64
FB
28 CODEC_ID_H263P,
29 CODEC_ID_H263I,
be8ffec9 30 CODEC_ID_SVQ1,
020fcc94
FB
31 CODEC_ID_DVVIDEO,
32 CODEC_ID_DVAUDIO,
a96b68b7
FB
33
34 /* various pcm "codecs" */
35 CODEC_ID_PCM_S16LE,
36 CODEC_ID_PCM_S16BE,
37 CODEC_ID_PCM_U16LE,
38 CODEC_ID_PCM_U16BE,
39 CODEC_ID_PCM_S8,
40 CODEC_ID_PCM_U8,
41 CODEC_ID_PCM_MULAW,
42 CODEC_ID_PCM_ALAW,
0147f198
FR
43
44 /* various adpcm codecs */
45 CODEC_ID_ADPCM_IMA_QT,
46 CODEC_ID_ADPCM_IMA_WAV,
47 CODEC_ID_ADPCM_MS,
de6d9b64 48};
84afee34 49#define CODEC_ID_MSMPEG4 CODEC_ID_MSMPEG4V3
de6d9b64
FB
50
51enum CodecType {
4a663d80 52 CODEC_TYPE_UNKNOWN = -1,
de6d9b64
FB
53 CODEC_TYPE_VIDEO,
54 CODEC_TYPE_AUDIO,
55};
56
57enum PixelFormat {
9f862d11 58 PIX_FMT_ANY = -1,
de6d9b64
FB
59 PIX_FMT_YUV420P,
60 PIX_FMT_YUV422,
61 PIX_FMT_RGB24,
62 PIX_FMT_BGR24,
d9fea0b5
FB
63 PIX_FMT_YUV422P,
64 PIX_FMT_YUV444P,
b71472eb
PG
65 PIX_FMT_RGBA32,
66 PIX_FMT_BGRA32,
e9feea59
A
67 PIX_FMT_YUV410P,
68 PIX_FMT_YUV411P
de6d9b64
FB
69};
70
a96b68b7
FB
71/* currently unused, may be used if 24/32 bits samples ever supported */
72enum SampleFormat {
73 SAMPLE_FMT_S16 = 0, /* signed 16 bits */
74};
75
de6d9b64
FB
76/* in bytes */
77#define AVCODEC_MAX_AUDIO_FRAME_SIZE 18432
78
e4986da9
J
79/* motion estimation type, EPZS by default */
80enum Motion_Est_ID {
101bea5f 81 ME_ZERO = 1,
e4986da9
J
82 ME_FULL,
83 ME_LOG,
84 ME_PHODS,
85 ME_EPZS,
86 ME_X1
87};
88
ce980a95
MN
89typedef struct RcOverride{
90 int start_frame;
91 int end_frame;
92 int qscale; // if this is 0 then quality_factor will be used instead
93 float quality_factor;
94} RcOverride;
95
101bea5f
J
96/* only for ME compatiblity with old apps */
97extern int motion_estimation_method;
98
e4986da9 99/* ME algos sorted by quality */
bc6caae2
J
100static const int Motion_Est_QTab[] = { ME_ZERO, ME_PHODS, ME_LOG,
101 ME_X1, ME_EPZS, ME_FULL };
de6d9b64 102
28db7fce 103
9dbcbd92
MN
104#define FF_MAX_B_FRAMES 4
105
a949d72e
MN
106/* encoding support
107 these flags can be passed in AVCodecContext.flags before initing
108 Note: note not everything is supported yet
109*/
de6d9b64 110
b71901e6
MN
111#define CODEC_FLAG_HQ 0x0001 /* brute force MB-type decission mode (slow) */
112#define CODEC_FLAG_QSCALE 0x0002 /* use fixed qscale */
113#define CODEC_FLAG_4MV 0x0004 /* 4 MV per MB allowed */
114#define CODEC_FLAG_QPEL 0x0010 /* use qpel MC */
115#define CODEC_FLAG_GMC 0x0020 /* use GMC */
116#define CODEC_FLAG_TYPE 0x0040 /* fixed I/P frame type, from avctx->key_frame */
117#define CODEC_FLAG_PART 0x0080 /* use data partitioning */
9dbcbd92
MN
118/* parent program gurantees that the input for b-frame containing streams is not written to
119 for at least s->max_b_frames+1 frames, if this is not set than the input will be copied */
8b4c7dbc 120#define CODEC_FLAG_INPUT_PRESERVED 0x0100
b71901e6
MN
121#define CODEC_FLAG_PASS1 0x0200 /* use internal 2pass ratecontrol in first pass mode */
122#define CODEC_FLAG_PASS2 0x0400 /* use internal 2pass ratecontrol in second pass mode */
e84c31dc 123#define CODEC_FLAG_EXTERN_HUFF 0x1000 /* use external huffman table (for mjpeg) */
b71901e6 124#define CODEC_FLAG_GRAY 0x2000 /* only decode/encode grayscale */
93a21abd 125#define CODEC_FLAG_EMU_EDGE 0x4000/* dont draw edges */
b71901e6
MN
126#define CODEC_FLAG_DR1 0x8000 /* direct renderig type 1 (store internal frames in external buffers) */
127#define CODEC_FLAG_NOT_TRUNCATED 0x00010000 /* input bitstream is not truncated, except before a startcode
128 allows the last part of a frame to be decoded earlier */
c5d309f2 129#define CODEC_FLAG_NORMALIZE_AQP 0x00020000 /* normalize adaptive quantization */
fcb48651 130#define CODEC_FLAG_INTERLACED_DCT 0x00040000 /* use interlaced dct */
c5d309f2 131
bf89e6b1
FB
132/* codec capabilities */
133
b71901e6 134#define CODEC_CAP_DRAW_HORIZ_BAND 0x0001 /* decoder can use draw_horiz_band callback */
93a21abd 135#define CODEC_CAP_DR1 0x0002 /* direct rendering method 1 */
917e06c8
FB
136/* if 'parse_only' field is true, then avcodec_parse_frame() can be
137 used */
138#define CODEC_CAP_PARSE_ONLY 0x0004
bf89e6b1 139
de6d9b64
FB
140#define FRAME_RATE_BASE 10000
141
142typedef struct AVCodecContext {
b71901e6
MN
143 /**
144 * the average bitrate
145 * encoding: set by user. unused for constant quantizer encoding
146 * decoding: set by lavc. 0 or some bitrate if this info is available in the stream
147 */
de6d9b64 148 int bit_rate;
b71901e6
MN
149
150 /**
151 * number of bits the bitstream is allowed to diverge from the reference
152 * the reference can be CBR (for CBR pass1) or VBR (for pass2)
153 * encoding: set by user. unused for constant quantizer encoding
154 * decoding: unused
155 */
156 int bit_rate_tolerance;
157
158 /**
159 * CODEC_FLAG_*
160 * encoding: set by user.
161 * decoding: set by user.
162 */
de6d9b64 163 int flags;
b71901e6
MN
164
165 /**
166 * some codecs needs additionnal format info. It is stored here
167 * encoding: set by user.
168 * decoding: set by lavc. (FIXME is this ok?)
169 */
170 int sub_id;
171
172 /**
173 * motion estimation algorithm used for video coding
174 * encoding: set by user.
175 * decoding: unused
176 */
177 int me_method;
178
179 /**
180 * some codecs need / can use extra-data like huffman tables
181 * mjpeg: huffman tables
182 * rv10: additional flags
c5d309f2
MN
183 * encoding: set/allocated/freed by lavc.
184 * decoding: set/allocated/freed by user.
b71901e6 185 */
e84c31dc
A
186 void *extradata;
187 int extradata_size;
188
de6d9b64 189 /* video only */
b71901e6
MN
190 /**
191 * frames per sec multiplied by FRAME_RATE_BASE
192 * for variable fps this is the precission, so if the timestamps
193 * can be specified in msec precssion then this is 1000*FRAME_RATE_BASE
194 * encoding: set by user
195 * decoding: set by lavc. 0 or the frame_rate if available
196 */
197 int frame_rate;
198
199 /**
200 * encoding: set by user.
201 * decoding: set by user, some codecs might override / change it during playback
202 */
de6d9b64 203 int width, height;
b71901e6
MN
204
205 /**
206 * encoding: set by user. 0 if not known
207 * decoding: set by lavc. 0 if not known
208 */
11ce8834 209 int aspect_ratio_info;
2efe097a
MN
210#define FF_ASPECT_SQUARE 1
211#define FF_ASPECT_4_3_625 2
212#define FF_ASPECT_4_3_525 3
213#define FF_ASPECT_16_9_625 4
214#define FF_ASPECT_16_9_525 5
e769f053 215#define FF_ASPECT_EXTENDED 15
b71901e6
MN
216
217 /**
218 * the number of pictures in a group of pitures, or 0 for intra_only
219 * encoding: set by user.
220 * decoding: unused
221 */
222 int gop_size;
223
224 /**
225 * pixel format, see PIX_FMT_xxx
226 * encoding: unused
227 * decoding: set by lavc.
228 */
229 enum PixelFormat pix_fmt;
230
e0a3d744
J
231 int repeat_pict; /* when decoding, this signal how much the picture */
232 /* must be delayed. */
233 /* extra_delay = (repeat_pict / 2) * (1/fps) */
b71901e6
MN
234
235 /**
236 * if non NULL, 'draw_horiz_band' is called by the libavcodec
237 * decoder to draw an horizontal band. It improve cache usage. Not
238 * all codecs can do that. You must check the codec capabilities
239 * before
240 * encoding: unused
241 * decoding: set by user.
242 */
bf89e6b1
FB
243 void (*draw_horiz_band)(struct AVCodecContext *s,
244 UINT8 **src_ptr, int linesize,
245 int y, int width, int height);
246
de6d9b64
FB
247 /* audio only */
248 int sample_rate; /* samples per sec */
249 int channels;
a96b68b7 250 int sample_fmt; /* sample format, currenly unused */
de6d9b64
FB
251
252 /* the following data should not be initialized */
9cd3766f
J
253 int frame_size; /* in samples, initialized when calling 'init' */
254 int frame_number; /* audio or video frame number */
255 int real_pict_num; /* returns the real picture number of
256 previous encoded frame */
b71901e6
MN
257
258 /**
259 * 1 -> keyframe, 0-> not
260 * encoding: set by lavc (for the outputed bitstream, not the input frame)
261 * decoding: set by lavc (for the decoded bitstream, not the displayed frame)
262 */
263 int key_frame;
264
265 /**
266 * picture type of the previous en/decoded frame, see ?_TYPE below
267 * encoding: set by lavc (for the outputed bitstream, not the input frame)
268 * decoding: set by lavc (for the decoded bitstream, not the displayed frame)
269 */
270 int pict_type;
9cd3766f
J
271/* FIXME: these should have FF_ */
272#define I_TYPE 1 // Intra
273#define P_TYPE 2 // Predicted
274#define B_TYPE 3 // Bi-dir predicted
275#define S_TYPE 4 // S(GMC)-VOP MPEG4
276
b71901e6
MN
277 /**
278 * number of frames the decoded output will be delayed relative to
279 * the encoded input
280 * encoding: set by lavc.
281 * decoding: unused
282 */
283 int delay;
284
285 /**
286 * mbskip_table[mb]=1 if MB didnt change, is only valid for I/P frames
287 * stride= mb_width = (width+15)>>4 (FIXME export stride?)
288 * encoding: unused
289 * decoding: set by lavc
290 */
291 uint8_t *mbskip_table;
1ff662cc
MN
292
293 /* encoding parameters */
c5d309f2
MN
294 /**
295 * quality (between 1 (good) and 31 (bad))
296 * encoding: set by user if CODEC_FLAG_QSCALE is set otherwise set by lavc
297 * decoding: set by lavc
298 */
de6d9b64 299 int quality; /* quality of the previous encoded frame
c5d309f2 300
8b4c7dbc
MN
301 this is allso used to set the quality in vbr mode
302 and the per frame quality in CODEC_FLAG_TYPE (second pass mode) */
9cdd6a24
MN
303 float qcompress; /* amount of qscale change between easy & hard scenes (0.0-1.0)*/
304 float qblur; /* amount of qscale smoothing over time (0.0-1.0) */
b71901e6
MN
305
306 /**
307 * minimum quantizer
308 * encoding: set by user.
309 * decoding: unused
310 */
311 int qmin;
312
313 /**
314 * maximum quantizer
315 * encoding: set by user.
316 * decoding: unused
317 */
318 int qmax;
319
320 /**
321 * maximum quantizer difference etween frames
322 * encoding: set by user.
323 * decoding: unused
324 */
325 int max_qdiff;
326
327 /**
328 * maximum number of b frames between non b frames
329 * note: the output will be delayed by max_b_frames+1 relative to the input
330 * encoding: set by user.
331 * decoding: unused
332 */
333 int max_b_frames;
334
335 /**
336 * qscale factor between ip and b frames
337 * encoding: set by user.
338 * decoding: unused
339 */
340 float b_quant_factor;
341
342 /** obsolete FIXME remove */
343 int rc_strategy;
8b4c7dbc 344 int b_frame_strategy;
9dbcbd92 345
b71901e6
MN
346 /**
347 * encoding: unused
348 * decoding: set by user. 1-> skip b frames, 2-> skip idct/dequant too
349 */
350 int hurry_up;
2417652e 351
de6d9b64 352 struct AVCodec *codec;
b71901e6 353
de6d9b64
FB
354 void *priv_data;
355
644d98a4 356 /* The following data is for RTP friendly coding */
1f6b6e50 357 /* By now only H.263/H.263+/MPEG4 coder honours this */
644d98a4
J
358 int rtp_mode; /* 1 for activate RTP friendly-mode */
359 /* highers numbers represent more error-prone */
360 /* enviroments, by now just "1" exist */
361
362 int rtp_payload_size; /* The size of the RTP payload, the coder will */
363 /* do it's best to deliver a chunk with size */
364 /* below rtp_payload_size, the chunk will start */
365 /* with a start code on some codecs like H.263 */
366 /* This doesn't take account of any particular */
367 /* headers inside the transmited RTP payload */
81401c1f
J
368
369
370 /* The RTP callcack: This function is called */
371 /* every time the encoder as a packet to send */
372 /* Depends on the encoder if the data starts */
373 /* with a Start Code (it should) H.263 does */
374 void (*rtp_callback)(void *data, int size, int packet_number);
375
b71901e6
MN
376 /**
377 * if you set get_psnr to 1 then after encoding you will have the
378 * PSNR on psnr_y/cb/cr
379 * encoding: set by user (1-> on, 0-> off)
380 * decoding: unused
381 */
43f1708f
J
382 int get_psnr;
383 float psnr_y;
384 float psnr_cb;
385 float psnr_cr;
098eefe1
MN
386
387 /* statistics, used for 2-pass encoding */
388 int mv_bits;
389 int header_bits;
390 int i_tex_bits;
391 int p_tex_bits;
392 int i_count;
393 int p_count;
394 int skip_count;
b71901e6
MN
395 int misc_bits;
396
397 /**
398 * number of bits used for the previously encoded frame
399 * encoding: set by lavc
400 * decoding: unused
401 */
098eefe1 402 int frame_bits;
644d98a4 403
b71901e6
MN
404 /**
405 * private data of the user, can be used to carry app specific stuff
406 * encoding: set by user
407 * decoding: set by user
408 */
409 void *opaque;
410
de6d9b64 411 char codec_name[32];
4a663d80
PG
412 enum CodecType codec_type; /* see CODEC_TYPE_xxx */
413 enum CodecID codec_id; /* see CODEC_ID_xxx */
de6d9b64 414 unsigned int codec_tag; /* codec tag, only used if unknown codec */
92ba5ffb 415
b71901e6
MN
416 /**
417 * workaround bugs in encoders which cannot be detected automatically
418 * encoding: unused
419 * decoding: set by user
420 */
421 int workaround_bugs;
422
423 /**
424 * encoding: set by user
425 * decoding: unused
426 */
1f6b6e50 427 int luma_elim_threshold;
b71901e6
MN
428
429 /**
430 * encoding: set by user
431 * decoding: unused
432 */
1f6b6e50 433 int chroma_elim_threshold;
b71901e6
MN
434
435 /**
436 * strictly follow the std (MPEG4, ...)
437 * encoding: set by user
438 * decoding: unused
439 */
440 int strict_std_compliance;
441
442 /**
443 * qscale offset between ip and b frames
b3a391e8
MN
444 * if > 0 then the last p frame quantizer will be used (q= lastp_q*factor+offset)
445 * if < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset)
b71901e6
MN
446 * encoding: set by user.
447 * decoding: unused
448 */
449 float b_quant_offset;
450
451 /**
452 * error resilience {-1,0,1} higher values will detect more errors but may missdetect
453 * some more or less valid parts as errors
454 * encoding: unused
455 * decoding: set by user
456 */
1f6b6e50 457 int error_resilience;
ae72cda6
NK
458
459#ifndef MBC
460#define MBC 128
461#define MBR 96
462#endif
93a21abd
MN
463#define QP_TYPE int //FIXME note xxx this might be changed to int8_t
464
465 QP_TYPE *quant_store; /* field for communicating with external postprocessing */
93a21abd 466
917e06c8 467 unsigned qstride;
b71901e6
MN
468
469 /**
470 * buffer, where the next picture should be decoded into
471 * encoding: unused
472 * decoding: set by user in get_buffer_callback to a buffer into which the next part
473 * of the bitstream will be decoded, and set by lavc at end of frame to the
474 * next frame which needs to be displayed
475 */
93a21abd 476 uint8_t *dr_buffer[3];
b71901e6
MN
477
478 /**
479 * stride of the luminance part of the dr buffer
480 * encoding: unused
481 * decoding: set by user
482 */
93a21abd 483 int dr_stride;
b71901e6
MN
484
485 /**
486 * same behavior as dr_buffer, just for some private data of the user
487 * encoding: unused
488 * decoding: set by user in get_buffer_callback, and set by lavc at end of frame
489 */
93a21abd 490 void *dr_opaque_frame;
b71901e6
MN
491
492 /**
493 * called at the beginning of each frame to get a buffer for it
494 * encoding: unused
495 * decoding: set by user
496 */
0fd90455
MN
497 void (*get_buffer_callback)(struct AVCodecContext *c, int width, int height, int pict_type);
498
b71901e6
MN
499 /**
500 * is 1 if the decoded stream contains b frames, 0 otherwise
501 * encoding: unused
502 * decoding: set by lavc
503 */
504 int has_b_frames;
505
506 /**
507 * stride of the chrominance part of the dr buffer
508 * encoding: unused
509 * decoding: set by user
510 */
0fd90455 511 int dr_uvstride;
b71901e6
MN
512
513 /**
514 * number of dr buffers
515 * encoding: unused
516 * decoding: set by user
517 */
0fd90455 518 int dr_ip_buffer_count;
b71901e6 519
0147f198 520 int block_align; /* currently only for adpcm codec in wav/avi */
ce980a95 521
917e06c8
FB
522 int parse_only; /* decoding only: if true, only parsing is done
523 (function avcodec_parse_frame()). The frame
524 data is returned. Only MPEG codecs support this now. */
ce980a95 525
b71901e6
MN
526 /**
527 * 0-> h263 quant 1-> mpeg quant
528 * encoding: set by user.
529 * decoding: unused
530 */
531 int mpeg_quant;
ce980a95 532
b71901e6
MN
533 /**
534 * pass1 encoding statistics output buffer
535 * encoding: set by lavc
536 * decoding: unused
537 */
ce980a95 538 char *stats_out; /* encoding statistics output buffer */
b71901e6
MN
539
540 /**
541 * pass2 encoding statistics input buffer.
542 * concatenated stuff from stats_out of pass1 should be placed here
543 * encoding: allocated/set/freed by user
544 * decoding: unused
545 */
546 char *stats_in;
547
548 /**
549 * ratecontrol qmin qmax limiting method
550 * 0-> clipping, 1-> use a nice continous function to limit qscale wthin qmin/qmax
551 * encoding: set by user.
552 * decoding: unused
553 */
ce980a95 554 float rc_qsquish;
b71901e6 555
ce980a95
MN
556 float rc_qmod_amp;
557 int rc_qmod_freq;
b71901e6
MN
558
559 /**
560 * ratecontrol override, see RcOverride
561 * encoding: allocated/set/freed by user.
562 * decoding: unused
563 */
ce980a95
MN
564 RcOverride *rc_override;
565 int rc_override_count;
b71901e6
MN
566
567 /**
568 * rate control equation
569 * encoding: set by user
570 * decoding: unused
571 */
ce980a95 572 char *rc_eq;
b71901e6
MN
573
574 /**
575 * maximum bitrate
576 * encoding: set by user.
577 * decoding: unused
578 */
ce980a95 579 int rc_max_rate;
b71901e6
MN
580
581 /**
582 * minimum bitrate
583 * encoding: set by user.
584 * decoding: unused
585 */
ce980a95 586 int rc_min_rate;
b71901e6
MN
587
588 /**
589 * decoder bitstream buffer size
590 * encoding: set by user.
591 * decoding: unused
592 */
ce980a95
MN
593 int rc_buffer_size;
594 float rc_buffer_aggressivity;
b71901e6
MN
595
596 /**
597 * qscale factor between p and i frames
598 * encoding: set by user.
599 * decoding: unused
600 */
601 float i_quant_factor;
602
603 /**
604 * qscale offset between p and i frames
b3a391e8
MN
605 * if > 0 then the last p frame quantizer will be used (q= lastp_q*factor+offset)
606 * if < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset)
b71901e6
MN
607 * encoding: set by user.
608 * decoding: unused
609 */
610 float i_quant_offset;
611
612 /**
613 * initial complexity for pass1 ratecontrol
614 * encoding: set by user.
615 * decoding: unused
616 */
ce980a95 617 float rc_initial_cplx;
917e06c8 618
b71901e6
MN
619 /**
620 * custom aspect ratio, used if aspect_info==FF_ASPECT_EXTENDED
621 * encoding: set by user.
622 * decoding: set by lavc.
623 */
e769f053
AB
624 int aspected_width;
625 int aspected_height;
626
b71901e6
MN
627 /**
628 * dct algorithm, see FF_DCT_* below
629 * encoding: set by user
630 * decoding: unused
631 */
28db7fce 632 int dct_algo;
c7e07931 633#define FF_DCT_AUTO 0
28db7fce 634#define FF_DCT_FASTINT 1
c7e07931
MO
635#define FF_DCT_INT 2
636#define FF_DCT_MMX 3
637#define FF_DCT_MLIB 4
28db7fce 638
b71901e6
MN
639 /**
640 * presentation timestamp in micro seconds (time when frame should be shown to user)
641 * if 0 then the frame_rate will be used as reference
642 * encoding: set by user
643 * decoding; set by lavc
644 */
645 long long int pts;
c5d309f2
MN
646
647 /**
648 * luminance masking (0-> disabled)
649 * encoding: set by user
650 * decoding: unused
651 */
652 float lumi_masking;
653
654 /**
655 * temporary complexity masking (0-> disabled)
656 * encoding: set by user
657 * decoding: unused
658 */
659 float temporal_cplx_masking;
660
661 /**
662 * spatial complexity masking (0-> disabled)
663 * encoding: set by user
664 * decoding: unused
665 */
666 float spatial_cplx_masking;
667
668 /**
669 * p block masking (0-> disabled)
670 * encoding: set by user
671 * decoding: unused
672 */
673 float p_masking;
15415af4 674
5e746b99
MN
675 /**
676 * darkness masking (0-> disabled)
677 * encoding: set by user
678 * decoding: unused
679 */
680 float dark_masking;
0c2dd16e
MN
681
682 /**
683 * fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A')
684 * this is used to workaround some encoder bugs
685 * encoding: unused
202ef8b8 686 * decoding: set by user, will be converted to upper case by lavc during init
0c2dd16e
MN
687 */
688 int fourcc;
5e746b99 689
2ad1516a
MN
690 /**
691 * idct algorithm, see FF_IDCT_* below
692 * encoding: set by user
693 * decoding: set by user
694 */
695 int idct_algo;
696#define FF_IDCT_AUTO 0
697#define FF_IDCT_INT 1
698#define FF_IDCT_SIMPLE 2
699#define FF_IDCT_SIMPLEMMX 3
700#define FF_IDCT_LIBMPEG2MMX 4
701#define FF_IDCT_PS2 5
702#define FF_IDCT_MLIB 6
703#define FF_IDCT_ARM 7
704
144f0625
MN
705 /**
706 * slice count
707 * encoding: set by lavc
708 * decoding: set by user (or 0)
709 */
710 int slice_count;
711 /**
712 * slice offsets in the frame in bytes
713 * encoding: set/allocated by lavc
714 * decoding: set/allocated by user (or NULL)
715 */
716 int *slice_offset;
717
1f6b6e50 718 //FIXME this should be reordered after kabis API is finished ...
ce980a95 719 //TODO kill kabi
5d27890a
NK
720 /*
721 Note: Below are located reserved fields for further usage
722 It requires for ABI !!!
723 If you'll perform some changes then borrow new space from these fields
724 (void * can be safety replaced with struct * ;)
725 P L E A S E ! ! !
b71901e6
MN
726 Note: use avcodec_alloc_context instead of malloc to allocate this,
727 otherwise the ABI compatibility will be broken between versions
728 IMPORTANT: Never change order of already declared fields!!!
729 */
730 //TODO: remove mess below
5d27890a
NK
731 unsigned long long int
732 ull_res0,ull_res1,ull_res2,ull_res3,ull_res4,ull_res5,
15415af4 733 ull_res6,ull_res7,ull_res8,ull_res9,ull_res10,ull_res11;
5d27890a
NK
734 float
735 flt_res0,flt_res1,flt_res2,flt_res3,flt_res4,flt_res5,
ce980a95 736 flt_res6,flt_res7,flt_res8,flt_res9,flt_res10,flt_res11,flt_res12;
5d27890a
NK
737 void
738 *ptr_res0,*ptr_res1,*ptr_res2,*ptr_res3,*ptr_res4,*ptr_res5,
ce980a95 739 *ptr_res6,*ptr_res7,*ptr_res8,*ptr_res9,*ptr_res10,*ptr_res11,*ptr_res12;
5d27890a
NK
740 unsigned long int
741 ul_res0,ul_res1,ul_res2,ul_res3,ul_res4,ul_res5,
742 ul_res6,ul_res7,ul_res8,ul_res9,ul_res10,ul_res11,ul_res12;
5d27890a
NK
743 unsigned short int
744 us_res0,us_res1,us_res2,us_res3,us_res4,us_res5,
745 us_res6,us_res7,us_res8,us_res9,us_res10,us_res11,us_res12;
746 unsigned char
747 uc_res0,uc_res1,uc_res2,uc_res3,uc_res4,uc_res5,
0fd90455 748 uc_res6,uc_res7,uc_res8,uc_res9,uc_res10,uc_res11,uc_res12;
ce980a95
MN
749 unsigned int
750 ui_res0,ui_res1,ui_res2,ui_res3,ui_res4,ui_res5,ui_res6,ui_res7,ui_res8,ui_res9,
28db7fce 751 ui_res10,ui_res11,ui_res12,ui_res13,ui_res14,ui_res15,ui_res16;
de6d9b64
FB
752} AVCodecContext;
753
754typedef struct AVCodec {
755 char *name;
756 int type;
757 int id;
758 int priv_data_size;
759 int (*init)(AVCodecContext *);
760 int (*encode)(AVCodecContext *, UINT8 *buf, int buf_size, void *data);
761 int (*close)(AVCodecContext *);
0fd90455 762 int (*decode)(AVCodecContext *, void *outdata, int *outdata_size,
de6d9b64 763 UINT8 *buf, int buf_size);
bf89e6b1 764 int capabilities;
de6d9b64 765 struct AVCodec *next;
5d27890a
NK
766 /*
767 Note: Below are located reserved fields for further usage
768 It requires for ABI !!!
769 If you'll perform some changes then borrow new space from these fields
770 (void * can be safety replaced with struct * ;)
771 P L E A S E ! ! !
772 IMPORTANT: Never change order of already declared fields!!!
773 */
774 unsigned long long int
775 ull_res0,ull_res1,ull_res2,ull_res3,ull_res4,ull_res5,
776 ull_res6,ull_res7,ull_res8,ull_res9,ull_res10,ull_res11,ull_res12;
777 float
778 flt_res0,flt_res1,flt_res2,flt_res3,flt_res4,flt_res5,
779 flt_res6,flt_res7,flt_res8,flt_res9,flt_res10,flt_res11,flt_res12;
780 void
781 *ptr_res0,*ptr_res1,*ptr_res2,*ptr_res3,*ptr_res4,*ptr_res5,
782 *ptr_res6,*ptr_res7,*ptr_res8,*ptr_res9,*ptr_res10,*ptr_res11,*ptr_res12;
de6d9b64
FB
783} AVCodec;
784
785/* three components are given, that's all */
786typedef struct AVPicture {
787 UINT8 *data[3];
788 int linesize[3];
789} AVPicture;
790
791extern AVCodec ac3_encoder;
792extern AVCodec mp2_encoder;
9d36bdc9 793extern AVCodec mp3lame_encoder;
81e0d0b4 794extern AVCodec oggvorbis_encoder;
de6d9b64
FB
795extern AVCodec mpeg1video_encoder;
796extern AVCodec h263_encoder;
797extern AVCodec h263p_encoder;
798extern AVCodec rv10_encoder;
799extern AVCodec mjpeg_encoder;
bf89e6b1 800extern AVCodec mpeg4_encoder;
84afee34
MN
801extern AVCodec msmpeg4v1_encoder;
802extern AVCodec msmpeg4v2_encoder;
803extern AVCodec msmpeg4v3_encoder;
0151a6f5
MN
804extern AVCodec wmv1_encoder;
805extern AVCodec wmv2_encoder;
de6d9b64
FB
806
807extern AVCodec h263_decoder;
bf89e6b1 808extern AVCodec mpeg4_decoder;
84afee34
MN
809extern AVCodec msmpeg4v1_decoder;
810extern AVCodec msmpeg4v2_decoder;
811extern AVCodec msmpeg4v3_decoder;
e1a9dbff 812extern AVCodec wmv1_decoder;
0151a6f5 813extern AVCodec wmv2_decoder;
de6d9b64
FB
814extern AVCodec mpeg_decoder;
815extern AVCodec h263i_decoder;
816extern AVCodec rv10_decoder;
be8ffec9 817extern AVCodec svq1_decoder;
020fcc94
FB
818extern AVCodec dvvideo_decoder;
819extern AVCodec dvaudio_decoder;
4e66ab3b 820extern AVCodec mjpeg_decoder;
4b1f4f23 821extern AVCodec mp2_decoder;
a96b68b7 822extern AVCodec mp3_decoder;
de6d9b64 823
a96b68b7
FB
824/* pcm codecs */
825#define PCM_CODEC(id, name) \
826extern AVCodec name ## _decoder; \
827extern AVCodec name ## _encoder;
828
829PCM_CODEC(CODEC_ID_PCM_S16LE, pcm_s16le);
830PCM_CODEC(CODEC_ID_PCM_S16BE, pcm_s16be);
831PCM_CODEC(CODEC_ID_PCM_U16LE, pcm_u16le);
832PCM_CODEC(CODEC_ID_PCM_U16BE, pcm_u16be);
833PCM_CODEC(CODEC_ID_PCM_S8, pcm_s8);
834PCM_CODEC(CODEC_ID_PCM_U8, pcm_u8);
835PCM_CODEC(CODEC_ID_PCM_ALAW, pcm_alaw);
836PCM_CODEC(CODEC_ID_PCM_MULAW, pcm_mulaw);
837
0147f198
FR
838/* adpcm codecs */
839
840PCM_CODEC(CODEC_ID_ADPCM_IMA_QT, adpcm_ima_qt);
841PCM_CODEC(CODEC_ID_ADPCM_IMA_WAV, adpcm_ima_wav);
842PCM_CODEC(CODEC_ID_ADPCM_MS, adpcm_ms);
843
a96b68b7
FB
844#undef PCM_CODEC
845
846/* dummy raw video codec */
de6d9b64
FB
847extern AVCodec rawvideo_codec;
848
849/* the following codecs use external GPL libs */
de6d9b64
FB
850extern AVCodec ac3_decoder;
851
852/* resample.c */
853
854struct ReSampleContext;
855
856typedef struct ReSampleContext ReSampleContext;
857
858ReSampleContext *audio_resample_init(int output_channels, int input_channels,
859 int output_rate, int input_rate);
860int audio_resample(ReSampleContext *s, short *output, short *input, int nb_samples);
861void audio_resample_close(ReSampleContext *s);
862
863/* YUV420 format is assumed ! */
864
865struct ImgReSampleContext;
866
867typedef struct ImgReSampleContext ImgReSampleContext;
868
869ImgReSampleContext *img_resample_init(int output_width, int output_height,
870 int input_width, int input_height);
ab6d194a
MN
871
872ImgReSampleContext *img_resample_full_init(int owidth, int oheight,
873 int iwidth, int iheight,
874 int topBand, int bottomBand,
875 int leftBand, int rightBand);
876
de6d9b64
FB
877void img_resample(ImgReSampleContext *s,
878 AVPicture *output, AVPicture *input);
879
880void img_resample_close(ImgReSampleContext *s);
881
219b06c6
FB
882void avpicture_fill(AVPicture *picture, UINT8 *ptr,
883 int pix_fmt, int width, int height);
884int avpicture_get_size(int pix_fmt, int width, int height);
885
886/* convert among pixel formats */
887int img_convert(AVPicture *dst, int dst_pix_fmt,
888 AVPicture *src, int pix_fmt,
889 int width, int height);
890
891/* deinterlace a picture */
892int avpicture_deinterlace(AVPicture *dst, AVPicture *src,
de6d9b64
FB
893 int pix_fmt, int width, int height);
894
895/* external high level API */
896
897extern AVCodec *first_avcodec;
898
156e5023 899/* returns LIBAVCODEC_VERSION_INT constant */
51a49663 900unsigned avcodec_version(void);
8bceb6af 901/* returns LIBAVCODEC_BUILD constant */
51a49663 902unsigned avcodec_build(void);
de6d9b64
FB
903void avcodec_init(void);
904
51a49663
FB
905void avcodec_set_bit_exact(void);
906
de6d9b64
FB
907void register_avcodec(AVCodec *format);
908AVCodec *avcodec_find_encoder(enum CodecID id);
98f3b098 909AVCodec *avcodec_find_encoder_by_name(const char *name);
de6d9b64
FB
910AVCodec *avcodec_find_decoder(enum CodecID id);
911AVCodec *avcodec_find_decoder_by_name(const char *name);
912void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode);
913
7ffbb60e 914AVCodecContext *avcodec_alloc_context(void);
de6d9b64
FB
915int avcodec_open(AVCodecContext *avctx, AVCodec *codec);
916int avcodec_decode_audio(AVCodecContext *avctx, INT16 *samples,
917 int *frame_size_ptr,
918 UINT8 *buf, int buf_size);
919int avcodec_decode_video(AVCodecContext *avctx, AVPicture *picture,
920 int *got_picture_ptr,
921 UINT8 *buf, int buf_size);
917e06c8
FB
922int avcodec_parse_frame(AVCodecContext *avctx, UINT8 **pdata,
923 int *data_size_ptr,
924 UINT8 *buf, int buf_size);
de6d9b64
FB
925int avcodec_encode_audio(AVCodecContext *avctx, UINT8 *buf, int buf_size,
926 const short *samples);
927int avcodec_encode_video(AVCodecContext *avctx, UINT8 *buf, int buf_size,
928 const AVPicture *pict);
929
930int avcodec_close(AVCodecContext *avctx);
931
932void avcodec_register_all(void);
a96b68b7 933
1c2a8c7f
MN
934void avcodec_flush_buffers(AVCodecContext *avctx);
935
79e7b305 936#ifdef FF_POSTPROCESS
79e7b305
A
937extern int quant_store[MBR+1][MBC+1]; // [Review]
938#endif
939
e8f14793
ZK
940
941/**
942 * Interface for 0.5.0 version
943 *
944 * do not even think about it's usage for this moment
945 */
946
947typedef struct {
948 // compressed size used from given memory buffer
949 int size;
950 /// I/P/B frame type
951 int frame_type;
952} avc_enc_result_t;
953
954/**
955 * Commands
956 * order can't be changed - once it was defined
957 */
958typedef enum {
959 // general commands
960 AVC_OPEN_BY_NAME = 0xACA000,
961 AVC_OPEN_BY_CODEC_ID,
962 AVC_OPEN_BY_FOURCC,
963 AVC_CLOSE,
964
965 AVC_FLUSH,
966 // pin - struct { uint8_t* src, uint_t src_size }
967 // pout - struct { AVPicture* img, consumed_bytes,
968 AVC_DECODE,
969 // pin - struct { AVPicture* img, uint8_t* dest, uint_t dest_size }
970 // pout - uint_t used_from_dest_size
971 AVC_ENCODE,
972
973 // query/get video commands
974 AVC_GET_VERSION = 0xACB000,
975 AVC_GET_WIDTH,
976 AVC_GET_HEIGHT,
977 AVC_GET_DELAY,
978 AVC_GET_QUANT_TABLE,
979 // ...
980
981 // query/get audio commands
982 AVC_GET_FRAME_SIZE = 0xABC000,
983
984 // maybe define some simple structure which
985 // might be passed to the user - but they can't
986 // contain any codec specific parts and these
987 // calls are usualy necessary only few times
988
989 // set video commands
990 AVC_SET_WIDTH = 0xACD000,
991 AVC_SET_HEIGHT,
992
993 // set video encoding commands
994 AVC_SET_FRAME_RATE = 0xACD800,
995 AVC_SET_QUALITY,
996 AVC_SET_HURRY_UP,
997
998 // set audio commands
999 AVC_SET_SAMPLE_RATE = 0xACE000,
1000 AVC_SET_CHANNELS,
1001
1002} avc_cmd_t;
1003
1004/**
1005 * \param handle allocated private structure by libavcodec
1006 * for initialization pass NULL - will be returned pout
1007 * user is supposed to know nothing about its structure
1008 * \param cmd type of operation to be performed
1009 * \param pint input parameter
1010 * \param pout output parameter
1011 *
1012 * \returns command status - eventually for query command it might return
1013 * integer resulting value
1014 */
1015int avcodec(void* handle, avc_cmd_t cmd, void* pin, void* pout);
1016
544eb99c
FB
1017/* memory */
1018void *av_malloc(int size);
1019void *av_mallocz(int size);
1020void av_free(void *ptr);
1021void __av_freep(void **ptr);
1022#define av_freep(p) __av_freep((void **)(p))
1023
a96b68b7 1024#endif /* AVCODEC_H */