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