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