16
#define FFMPEG_VERSION_INT 0x000408
17
#define FFMPEG_VERSION "0.4.8"
18
#define LIBAVCODEC_BUILD 4680
20
#define LIBAVCODEC_VERSION_INT FFMPEG_VERSION_INT
21
#define LIBAVCODEC_VERSION FFMPEG_VERSION
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)
30
CODEC_ID_MPEG2VIDEO, /* prefered ID for MPEG Video 1 or 2 decoding */
31
CODEC_ID_MPEG2VIDEO_XVMC,
35
CODEC_ID_MP3, /* prefered ID for MPEG Audio layer 1, 2 or3 decoding */
74
CODEC_ID_INTERPLAY_VIDEO,
78
/* various pcm "codecs" */
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,
102
/* various DPCM codecs */
104
CODEC_ID_INTERPLAY_DPCM,
108
/* CODEC_ID_MP3LAME is absolete */
109
#define CODEC_ID_MP3LAME CODEC_ID_MP3
112
CODEC_TYPE_UNKNOWN = -1,
118
* Pixel format. Notes:
120
* PIX_FMT_RGBA32 is handled in an endian-specific manner. A RGBA
121
* color is put together as:
122
* (A << 24) | (R << 16) | (G << 8) | B
123
* This is stored as BGRA on little endian CPU architectures and ARGB on
126
* When the pixel format is palettized RGB (PIX_FMT_PAL8), the palettized
127
* image data is stored in AVFrame.data[0]. The palette is transported in
128
* AVFrame.data[1] and, is 1024 bytes long (256 4-byte entries) and is
129
* formatted the same as in PIX_FMT_RGBA32 described above (i.e., it is
130
* also endian-specific).
133
PIX_FMT_YUV420P, ///< Planar YUV 4:2:0 (1 Cr & Cb sample per 2x2 Y samples)
135
PIX_FMT_RGB24, ///< Packed pixel, 3 bytes per pixel, RGBRGB...
136
PIX_FMT_BGR24, ///< Packed pixel, 3 bytes per pixel, BGRBGR...
137
PIX_FMT_YUV422P, ///< Planar YUV 4:2:2 (1 Cr & Cb sample per 2x1 Y samples)
138
PIX_FMT_YUV444P, ///< Planar YUV 4:4:4 (1 Cr & Cb sample per 1x1 Y samples)
139
PIX_FMT_RGBA32, ///< Packed pixel, 4 bytes per pixel, BGRABGRA..., stored in cpu endianness
140
PIX_FMT_YUV410P, ///< Planar YUV 4:1:0 (1 Cr & Cb sample per 4x4 Y samples)
141
PIX_FMT_YUV411P, ///< Planar YUV 4:1:1 (1 Cr & Cb sample per 4x1 Y samples)
142
PIX_FMT_RGB565, ///< always stored in cpu endianness
143
PIX_FMT_RGB555, ///< always stored in cpu endianness, most significant bit to 1
145
PIX_FMT_MONOWHITE, ///< 0 is white
146
PIX_FMT_MONOBLACK, ///< 0 is black
147
PIX_FMT_PAL8, ///< 8 bit with RGBA palette
148
PIX_FMT_YUVJ420P, ///< Planar YUV 4:2:0 full scale (jpeg)
149
PIX_FMT_YUVJ422P, ///< Planar YUV 4:2:2 full scale (jpeg)
150
PIX_FMT_YUVJ444P, ///< Planar YUV 4:4:4 full scale (jpeg)
151
PIX_FMT_XVMC_MPEG2_MC,///< XVideo Motion Acceleration via common packet passing(xvmc_render.h)
152
PIX_FMT_XVMC_MPEG2_IDCT,
156
/* currently unused, may be used if 24/32 bits samples ever supported */
158
SAMPLE_FMT_S16 = 0, ///< signed 16 bits
162
#define AVCODEC_MAX_AUDIO_FRAME_SIZE 131072
165
* Required number of additionally allocated bytes at the end of the input bitstream for decoding.
166
* this is mainly needed because some optimized bitstream readers read
167
* 32 or 64 bit at once and could read over the end<br>
168
* Note, if the first 23 bits of the additional bytes are not 0 then damaged
169
* MPEG bitstreams could cause overread and segfault
171
#define FF_INPUT_BUFFER_PADDING_SIZE 8
173
/* motion estimation type, EPZS by default */
183
typedef struct RcOverride{
186
int qscale; // if this is 0 then quality_factor will be used instead
187
float quality_factor;
190
/* only for ME compatiblity with old apps */
191
extern int motion_estimation_method;
193
/* ME algos sorted by quality */
194
static const int Motion_Est_QTab[] = { ME_ZERO, ME_PHODS, ME_LOG,
195
ME_X1, ME_EPZS, ME_FULL };
198
#define FF_MAX_B_FRAMES 8
201
these flags can be passed in AVCodecContext.flags before initing
202
Note: note not everything is supported yet
205
#define CODEC_FLAG_QSCALE 0x0002 ///< use fixed qscale
206
#define CODEC_FLAG_4MV 0x0004 ///< 4 MV per MB allowed
207
#define CODEC_FLAG_QPEL 0x0010 ///< use qpel MC
208
#define CODEC_FLAG_GMC 0x0020 ///< use GMC
209
#define CODEC_FLAG_PART 0x0080 ///< use data partitioning
210
/* parent program gurantees that the input for b-frame containing streams is not written to
211
for at least s->max_b_frames+1 frames, if this is not set than the input will be copied */
212
#define CODEC_FLAG_INPUT_PRESERVED 0x0100
213
#define CODEC_FLAG_PASS1 0x0200 ///< use internal 2pass ratecontrol in first pass mode
214
#define CODEC_FLAG_PASS2 0x0400 ///< use internal 2pass ratecontrol in second pass mode
215
#define CODEC_FLAG_EXTERN_HUFF 0x1000 ///< use external huffman table (for mjpeg)
216
#define CODEC_FLAG_GRAY 0x2000 ///< only decode/encode grayscale
217
#define CODEC_FLAG_EMU_EDGE 0x4000///< dont draw edges
218
#define CODEC_FLAG_PSNR 0x8000 ///< error[?] variables will be set during encoding
219
#define CODEC_FLAG_TRUNCATED 0x00010000 /** input bitstream might be truncated at a random location instead
220
of only at frame boundaries */
221
#define CODEC_FLAG_NORMALIZE_AQP 0x00020000 ///< normalize adaptive quantization
222
#define CODEC_FLAG_INTERLACED_DCT 0x00040000 ///< use interlaced dct
223
#define CODEC_FLAG_LOW_DELAY 0x00080000 ///< force low delay
224
#define CODEC_FLAG_ALT_SCAN 0x00100000 ///< use alternate scan
225
#define CODEC_FLAG_TRELLIS_QUANT 0x00200000 ///< use trellis quantization
226
#define CODEC_FLAG_GLOBAL_HEADER 0x00400000 ///< place global headers in extradata instead of every keyframe
227
#define CODEC_FLAG_BITEXACT 0x00800000 ///< use only bitexact stuff (except (i)dct)
228
/* Fx : Flag for h263+ extra options */
229
#define CODEC_FLAG_H263P_AIC 0x01000000 ///< Advanced intra coding
230
#define CODEC_FLAG_H263P_UMV 0x02000000 ///< Unlimited motion vector
231
/* For advanced prediction mode, we reuse the 4MV flag */
232
/* Unsupported options :
233
* Syntax Arithmetic coding (SAC)
234
* Deblocking filter internal loop
236
* Reference Picture Selection
237
* Independant Segment Decoding
238
* Alternative Inter * VLC
239
* Modified Quantization */
241
/* codec capabilities */
243
#define CODEC_CAP_DRAW_HORIZ_BAND 0x0001 ///< decoder can use draw_horiz_band callback
245
* Codec uses get_buffer() for allocating buffers.
246
* direct rendering method 1
248
#define CODEC_CAP_DR1 0x0002
249
/* if 'parse_only' field is true, then avcodec_parse_frame() can be
251
#define CODEC_CAP_PARSE_ONLY 0x0004
252
#define CODEC_CAP_TRUNCATED 0x0008
254
#define FF_COMMON_FRAME \
256
* pointer to the picture planes.\
257
* this might be different from the first allocated byte\
264
* pointer to the first allocated byte of the picture. can be used in get_buffer/release_buffer\
265
* this isnt used by lavc unless the default get/release_buffer() is used\
271
* 1 -> keyframe, 0-> not\
272
* - encoding: set by lavc\
273
* - decoding: set by lavc\
278
* picture type of the frame, see ?_TYPE below.\
279
* - encoding: set by lavc for coded_picture (and set by user for input)\
280
* - decoding: set by lavc\
285
* presentation timestamp in micro seconds (time when frame should be shown to user)\
286
* if 0 then the frame_rate will be used as reference\
287
* - encoding: MUST be set by user\
288
* - decoding: set by lavc\
293
* picture number in bitstream order.\
294
* - encoding: set by\
295
* - decoding: set by lavc\
297
int coded_picture_number;\
299
* picture number in display order.\
300
* - encoding: set by\
301
* - decoding: set by lavc\
303
int display_picture_number;\
306
* quality (between 1 (good) and 31 (bad)) \
307
* - encoding: set by lavc for coded_picture (and set by user for input)\
308
* - decoding: set by lavc\
313
* buffer age (1->was last buffer and dint change, 2->..., ...).\
314
* set to something large if the buffer has not been used yet \
315
* - encoding: unused\
316
* - decoding: MUST be set by get_buffer()\
321
* is this picture used as reference\
322
* - encoding: unused\
323
* - decoding: set by lavc (before get_buffer() call))\
329
* - encoding: unused\
330
* - decoding: set by lavc\
332
int8_t *qscale_table;\
335
* - encoding: unused\
336
* - decoding: set by lavc\
341
* mbskip_table[mb]>=1 if MB didnt change\
342
* stride= mb_width = (width+15)>>4\
343
* - encoding: unused\
344
* - decoding: set by lavc\
346
uint8_t *mbskip_table;\
349
* for some private data of the user\
350
* - encoding: unused\
351
* - decoding: set by user\
357
* - encoding: set by lavc if flags&CODEC_FLAG_PSNR\
358
* - decoding: unused\
363
* type of the buffer (to keep track of who has to dealloc data[*])\
364
* - encoding: set by the one who allocs it\
365
* - decoding: set by the one who allocs it\
366
* Note: user allocated (direct rendering) & internal buffers can not coexist currently\
371
* when decoding, this signal how much the picture must be delayed.\
372
* extra_delay = repeat_pict / (2*fps)\
373
* - encoding: unused\
374
* - decoding: set by lavc\
383
#define FF_QSCALE_TYPE_MPEG1 0
384
#define FF_QSCALE_TYPE_MPEG2 1
386
#define FF_BUFFER_TYPE_INTERNAL 1
387
#define FF_BUFFER_TYPE_USER 2 ///< Direct rendering buffers (image is (de)allocated by user)
388
#define FF_BUFFER_TYPE_SHARED 4 ///< buffer from somewher else, dont dealloc image (data/base)
389
#define FF_BUFFER_TYPE_COPY 8 ///< just a (modified) copy of some other buffer, dont dealloc anything
392
#define FF_I_TYPE 1 // Intra
393
#define FF_P_TYPE 2 // Predicted
394
#define FF_B_TYPE 3 // Bi-dir predicted
395
#define FF_S_TYPE 4 // S(GMC)-VOP MPEG4
402
typedef struct AVFrame {
406
#define DEFAULT_FRAME_RATE_BASE 1001000
409
* main external api structure.
411
typedef struct AVCodecContext {
413
* the average bitrate.
414
* - encoding: set by user. unused for constant quantizer encoding
415
* - decoding: set by lavc. 0 or some bitrate if this info is available in the stream
420
* number of bits the bitstream is allowed to diverge from the reference.
421
* the reference can be CBR (for CBR pass1) or VBR (for pass2)
422
* - encoding: set by user. unused for constant quantizer encoding
425
int bit_rate_tolerance;
429
* - encoding: set by user.
430
* - decoding: set by user.
435
* some codecs needs additionnal format info. It is stored here
436
* - encoding: set by user.
437
* - decoding: set by lavc. (FIXME is this ok?)
442
* motion estimation algorithm used for video coding.
443
* - encoding: MUST be set by user.
449
* some codecs need / can use extra-data like huffman tables.
450
* mjpeg: huffman tables
451
* rv10: additional flags
452
* mpeg4: global headers (they can be in the bitstream or here)
453
* - encoding: set/allocated/freed by lavc.
454
* - decoding: set/allocated/freed by user.
461
* frames per sec multiplied by frame_rate_base.
462
* for variable fps this is the precission, so if the timestamps
463
* can be specified in msec precssion then this is 1000*frame_rate_base
464
* - encoding: MUST be set by user
465
* - decoding: set by lavc. 0 or the frame_rate if available
471
* - encoding: MUST be set by user.
472
* - decoding: set by user, some codecs might override / change it during playback
476
#define FF_ASPECT_SQUARE 1
477
#define FF_ASPECT_4_3_625 2
478
#define FF_ASPECT_4_3_525 3
479
#define FF_ASPECT_16_9_625 4
480
#define FF_ASPECT_16_9_525 5
481
#define FF_ASPECT_EXTENDED 15
484
* the number of pictures in a group of pitures, or 0 for intra_only.
485
* - encoding: set by user.
491
* pixel format, see PIX_FMT_xxx.
492
* - encoding: FIXME: used by ffmpeg to decide whether an pix_fmt
493
* conversion is in order. This only works for
494
* codecs with one supported pix_fmt, we should
495
* do something for a generic case as well.
496
* - decoding: set by lavc.
498
enum PixelFormat pix_fmt;
501
* Frame rate emulation. If not zero lower layer (i.e. format handler)
502
* has to read frames at native frame rate.
503
* - encoding: set by user.
504
* - decoding: unused.
509
* if non NULL, 'draw_horiz_band' is called by the libavcodec
510
* decoder to draw an horizontal band. It improve cache usage. Not
511
* all codecs can do that. You must check the codec capabilities
514
* - decoding: set by user.
515
* @param height the height of the slice
516
* @param y the y position of the slice
517
* @param type 1->top field, 2->bottom field, 3->frame
518
* @param offset offset into the AVFrame.data from which the slice should be read
520
void (*draw_horiz_band)(struct AVCodecContext *s,
521
AVFrame *src, int offset[4],
522
int y, int type, int height);
525
int sample_rate; ///< samples per sec
527
int sample_fmt; ///< sample format, currenly unused
529
/* the following data should not be initialized */
530
int frame_size; ///< in samples, initialized when calling 'init'
531
int frame_number; ///< audio or video frame number
532
int real_pict_num; ///< returns the real picture number of previous encoded frame
535
* number of frames the decoded output will be delayed relative to
537
* - encoding: set by lavc.
542
/* - encoding parameters */
543
float qcompress; ///< amount of qscale change between easy & hard scenes (0.0-1.0)
544
float qblur; ///< amount of qscale smoothing over time (0.0-1.0)
548
* - encoding: set by user.
555
* - encoding: set by user.
561
* maximum quantizer difference etween frames.
562
* - encoding: set by user.
568
* maximum number of b frames between non b frames.
569
* note: the output will be delayed by max_b_frames+1 relative to the input
570
* - encoding: set by user.
576
* qscale factor between ip and b frames.
577
* - encoding: set by user.
580
float b_quant_factor;
582
/** obsolete FIXME remove */
584
int b_frame_strategy;
589
* - decoding: set by user. 1-> skip b frames, 2-> skip idct/dequant too, 5-> skip everything except header
593
struct AVCodec *codec;
597
/* The following data is for RTP friendly coding */
598
/* By now only H.263/H.263+/MPEG4 coder honours this */
599
int rtp_mode; /* 1 for activate RTP friendly-mode */
600
/* highers numbers represent more error-prone */
601
/* enviroments, by now just "1" exist */
603
int rtp_payload_size; /* The size of the RTP payload, the coder will */
604
/* do it's best to deliver a chunk with size */
605
/* below rtp_payload_size, the chunk will start */
606
/* with a start code on some codecs like H.263 */
607
/* This doesn't take account of any particular */
608
/* headers inside the transmited RTP payload */
611
/* The RTP callcack: This function is called */
612
/* every time the encoder as a packet to send */
613
/* Depends on the encoder if the data starts */
614
/* with a Start Code (it should) H.263 does */
615
void (*rtp_callback)(void *data, int size, int packet_number);
617
/* statistics, used for 2-pass encoding */
628
* number of bits used for the previously encoded frame.
629
* - encoding: set by lavc
635
* private data of the user, can be used to carry app specific stuff.
636
* - encoding: set by user
637
* - decoding: set by user
642
enum CodecType codec_type; /* see CODEC_TYPE_xxx */
643
enum CodecID codec_id; /* see CODEC_ID_xxx */
646
* fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A').
647
* this is used to workaround some encoder bugs
648
* - encoding: set by user, if not then the default based on codec_id will be used
649
* - decoding: set by user, will be converted to upper case by lavc during init
651
unsigned int codec_tag;
654
* workaround bugs in encoders which sometimes cannot be detected automatically.
656
* - decoding: set by user
659
#define FF_BUG_AUTODETECT 1 ///< autodetection
660
#define FF_BUG_OLD_MSMPEG4 2
661
#define FF_BUG_XVID_ILACE 4
662
#define FF_BUG_UMP4 8
663
#define FF_BUG_NO_PADDING 16
664
#define FF_BUG_AC_VLC 32
665
#define FF_BUG_QPEL_CHROMA 64
666
#define FF_BUG_STD_QPEL 128
667
#define FF_BUG_QPEL_CHROMA2 256
668
#define FF_BUG_DIRECT_BLOCKSIZE 512
669
#define FF_BUG_EDGE 1024
670
//#define FF_BUG_FAKE_SCALABILITY 16 //autodetection should work 100%
673
* luma single coeff elimination threshold.
674
* - encoding: set by user
677
int luma_elim_threshold;
680
* chroma single coeff elimination threshold.
681
* - encoding: set by user
684
int chroma_elim_threshold;
687
* strictly follow the std (MPEG4, ...).
688
* - encoding: set by user
691
int strict_std_compliance;
694
* qscale offset between ip and b frames.
695
* if > 0 then the last p frame quantizer will be used (q= lastp_q*factor+offset)
696
* if < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset)
697
* - encoding: set by user.
700
float b_quant_offset;
703
* error resilience higher values will detect more errors but may missdetect
704
* some more or less valid parts as errors.
706
* - decoding: set by user
708
int error_resilience;
709
#define FF_ER_CAREFULL 1
710
#define FF_ER_COMPLIANT 2
711
#define FF_ER_AGGRESSIVE 3
712
#define FF_ER_VERY_AGGRESSIVE 4
715
* called at the beginning of each frame to get a buffer for it.
716
* if pic.reference is set then the frame will be read later by lavc
717
* width and height should be rounded up to the next multiple of 16
719
* - decoding: set by lavc, user can override
721
int (*get_buffer)(struct AVCodecContext *c, AVFrame *pic);
724
* called to release buffers which where allocated with get_buffer.
725
* a released buffer can be reused in get_buffer()
726
* pic.data[*] must be set to NULL
728
* - decoding: set by lavc, user can override
730
void (*release_buffer)(struct AVCodecContext *c, AVFrame *pic);
733
* is 1 if the decoded stream contains b frames, 0 otherwise.
735
* - decoding: set by lavc
739
int block_align; ///< used by some WAV based audio codecs
741
int parse_only; /* - decoding only: if true, only parsing is done
742
(function avcodec_parse_frame()). The frame
743
data is returned. Only MPEG codecs support this now. */
746
* 0-> h263 quant 1-> mpeg quant.
747
* - encoding: set by user.
753
* pass1 encoding statistics output buffer.
754
* - encoding: set by lavc
760
* pass2 encoding statistics input buffer.
761
* concatenated stuff from stats_out of pass1 should be placed here
762
* - encoding: allocated/set/freed by user
768
* ratecontrol qmin qmax limiting method.
769
* 0-> clipping, 1-> use a nice continous function to limit qscale wthin qmin/qmax
770
* - encoding: set by user.
779
* ratecontrol override, see RcOverride.
780
* - encoding: allocated/set/freed by user.
783
RcOverride *rc_override;
784
int rc_override_count;
787
* rate control equation.
788
* - encoding: set by user
795
* - encoding: set by user.
802
* - encoding: set by user.
808
* decoder bitstream buffer size.
809
* - encoding: set by user.
813
float rc_buffer_aggressivity;
816
* qscale factor between p and i frames.
817
* - encoding: set by user.
820
float i_quant_factor;
823
* qscale offset between p and i frames.
824
* if > 0 then the last p frame quantizer will be used (q= lastp_q*factor+offset)
825
* if < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset)
826
* - encoding: set by user.
829
float i_quant_offset;
832
* initial complexity for pass1 ratecontrol.
833
* - encoding: set by user.
836
float rc_initial_cplx;
839
* dct algorithm, see FF_DCT_* below.
840
* - encoding: set by user
844
#define FF_DCT_AUTO 0
845
#define FF_DCT_FASTINT 1
848
#define FF_DCT_MLIB 4
849
#define FF_DCT_ALTIVEC 5
852
* luminance masking (0-> disabled).
853
* - encoding: set by user
859
* temporary complexity masking (0-> disabled).
860
* - encoding: set by user
863
float temporal_cplx_masking;
866
* spatial complexity masking (0-> disabled).
867
* - encoding: set by user
870
float spatial_cplx_masking;
873
* p block masking (0-> disabled).
874
* - encoding: set by user
880
* darkness masking (0-> disabled).
881
* - encoding: set by user
887
/* for binary compatibility */
891
* idct algorithm, see FF_IDCT_* below.
892
* - encoding: set by user
893
* - decoding: set by user
896
#define FF_IDCT_AUTO 0
897
#define FF_IDCT_INT 1
898
#define FF_IDCT_SIMPLE 2
899
#define FF_IDCT_SIMPLEMMX 3
900
#define FF_IDCT_LIBMPEG2MMX 4
901
#define FF_IDCT_PS2 5
902
#define FF_IDCT_MLIB 6
903
#define FF_IDCT_ARM 7
904
#define FF_IDCT_ALTIVEC 8
905
#define FF_IDCT_SH4 9
906
#define FF_IDCT_SIMPLEARM 10
910
* - encoding: set by lavc
911
* - decoding: set by user (or 0)
915
* slice offsets in the frame in bytes.
916
* - encoding: set/allocated by lavc
917
* - decoding: set/allocated by user (or NULL)
922
* error concealment flags.
924
* - decoding: set by user
926
int error_concealment;
927
#define FF_EC_GUESS_MVS 1
928
#define FF_EC_DEBLOCK 2
931
* dsp_mask could be add used to disable unwanted CPU features
932
* CPU features (i.e. MMX, SSE. ...)
934
* with FORCE flag you may instead enable given CPU features
935
* (Dangerous: usable in case of misdetection, improper usage however will
936
* result into program crash)
939
#define FF_MM_FORCE 0x80000000 /* force usage of selected flags (OR) */
940
/* lower 16 bits - CPU features */
942
#define FF_MM_MMX 0x0001 /* standard MMX */
943
#define FF_MM_3DNOW 0x0004 /* AMD 3DNOW */
944
#define FF_MM_MMXEXT 0x0002 /* SSE integer functions or AMD MMX ext */
945
#define FF_MM_SSE 0x0008 /* SSE functions */
946
#define FF_MM_SSE2 0x0010 /* PIV SSE2 functions */
947
#endif /* HAVE_MMX */
950
* bits per sample/pixel from the demuxer (needed for huffyuv).
951
* - encoding: set by lavc
952
* - decoding: set by user
957
* prediction method (needed for huffyuv).
958
* - encoding: set by user
961
int prediction_method;
962
#define FF_PRED_LEFT 0
963
#define FF_PRED_PLANE 1
964
#define FF_PRED_MEDIAN 2
967
* aspect ratio (0 if unknown).
968
* - encoding: set by user.
969
* - decoding: set by lavc.
974
* the picture in the bitstream.
975
* - encoding: set by lavc
976
* - decoding: set by lavc
978
AVFrame *coded_frame;
982
* - encoding: set by user.
983
* - decoding: set by user.
986
#define FF_DEBUG_PICT_INFO 1
987
#define FF_DEBUG_RC 2
988
#define FF_DEBUG_BITSTREAM 4
989
#define FF_DEBUG_MB_TYPE 8
990
#define FF_DEBUG_QP 16
991
#define FF_DEBUG_MV 32
992
#define FF_DEBUG_VIS_MV 0x00000040
993
#define FF_DEBUG_SKIP 0x00000080
994
#define FF_DEBUG_STARTCODE 0x00000100
995
#define FF_DEBUG_PTS 0x00000200
996
#define FF_DEBUG_ER 0x00000400
997
#define FF_DEBUG_MMCO 0x00000800
998
#define FF_DEBUG_BUGS 0x00001000
1002
* - encoding: set by lavc if flags&CODEC_FLAG_PSNR
1003
* - decoding: unused
1008
* minimum MB quantizer.
1009
* - encoding: set by user.
1010
* - decoding: unused
1015
* maximum MB quantizer.
1016
* - encoding: set by user.
1017
* - decoding: unused
1022
* motion estimation compare function.
1023
* - encoding: set by user.
1024
* - decoding: unused
1028
* subpixel motion estimation compare function.
1029
* - encoding: set by user.
1030
* - decoding: unused
1034
* macroblock compare function (not supported yet).
1035
* - encoding: set by user.
1036
* - decoding: unused
1039
#define FF_CMP_SAD 0
1040
#define FF_CMP_SSE 1
1041
#define FF_CMP_SATD 2
1042
#define FF_CMP_DCT 3
1043
#define FF_CMP_PSNR 4
1044
#define FF_CMP_BIT 5
1046
#define FF_CMP_ZERO 7
1047
#define FF_CMP_CHROMA 256
1050
* ME diamond size & shape.
1051
* - encoding: set by user.
1052
* - decoding: unused
1057
* amount of previous MV predictors (2a+1 x 2a+1 square).
1058
* - encoding: set by user.
1059
* - decoding: unused
1061
int last_predictor_count;
1064
* pre pass for motion estimation.
1065
* - encoding: set by user.
1066
* - decoding: unused
1071
* motion estimation pre pass compare function.
1072
* - encoding: set by user.
1073
* - decoding: unused
1078
* ME pre pass diamond size & shape.
1079
* - encoding: set by user.
1080
* - decoding: unused
1085
* subpel ME quality.
1086
* - encoding: set by user.
1087
* - decoding: unused
1089
int me_subpel_quality;
1092
* callback to negotiate the pixelFormat.
1093
* @param fmt is the list of formats which are supported by the codec,
1094
* its terminated by -1 as 0 is a valid format, the formats are ordered by quality
1095
* the first is allways the native one
1096
* @return the choosen format
1097
* - encoding: unused
1098
* - decoding: set by user, if not set then the native format will always be choosen
1100
enum PixelFormat (*get_format)(struct AVCodecContext *s, enum PixelFormat * fmt);
1103
* DTG active format information (additionnal aspect ratio
1104
* information only used in DVB MPEG2 transport streams). 0 if
1107
* - encoding: unused.
1108
* - decoding: set by decoder
1110
int dtg_active_format;
1111
#define FF_DTG_AFD_SAME 8
1112
#define FF_DTG_AFD_4_3 9
1113
#define FF_DTG_AFD_16_9 10
1114
#define FF_DTG_AFD_14_9 11
1115
#define FF_DTG_AFD_4_3_SP_14_9 13
1116
#define FF_DTG_AFD_16_9_SP_14_9 14
1117
#define FF_DTG_AFD_SP_4_3 15
1120
* Maximum motion estimation search range in subpel units.
1121
* if 0 then no limit
1123
* - encoding: set by user.
1124
* - decoding: unused.
1130
* for variable fps this is 1
1131
* - encoding: set by user.
1132
* - decoding: set by lavc.
1133
* @todo move this after frame_rate
1136
int frame_rate_base;
1138
* intra quantizer bias.
1139
* - encoding: set by user.
1140
* - decoding: unused
1142
int intra_quant_bias;
1143
#define FF_DEFAULT_QUANT_BIAS 999999
1146
* inter quantizer bias.
1147
* - encoding: set by user.
1148
* - decoding: unused
1150
int inter_quant_bias;
1154
* - encoding: unused.
1155
* - decoding: which clrtable should be used for 8bit RGB images
1156
* table have to be stored somewhere FIXME
1161
* internal_buffer count.
1162
* Dont touch, used by lavc default_get_buffer()
1164
int internal_buffer_count;
1168
* Dont touch, used by lavc default_get_buffer()
1170
void *internal_buffer;
1172
#define FF_QUALITY_SCALE 256
1174
* global quality for codecs which cannot change it per frame.
1175
* this should be proportional to MPEG1/2/4 qscale.
1176
* - encoding: set by user.
1177
* - decoding: unused
1181
#define FF_CODER_TYPE_VLC 0
1182
#define FF_CODER_TYPE_AC 1
1185
* - encoding: set by user.
1186
* - decoding: unused
1192
* - encoding: set by user.
1193
* - decoding: unused
1199
* - encoding: unused
1200
* - decoding: set by user.
1203
#define SLICE_FLAG_CODED_ORDER 0x0001 ///< draw_horiz_band() is called in coded order instead of display
1204
#define SLICE_FLAG_ALLOW_FIELD 0x0002 ///< allow draw_horiz_band() with field slices (MPEG2 field pics)
1205
#define SLICE_FLAG_ALLOW_PLANE 0x0004 ///< allow draw_horiz_band() with 1 component at a time (SVQ1)
1208
* XVideo Motion Acceleration
1209
* - encoding: forbidden
1210
* - decoding: set by decoder
1212
int xvmc_acceleration;
1215
* macroblock decision mode
1216
* - encoding: set by user.
1217
* - decoding: unused
1220
#define FF_MB_DECISION_SIMPLE 0 ///< uses mb_cmp
1221
#define FF_MB_DECISION_BITS 1 ///< chooses the one which needs the fewest bits
1222
#define FF_MB_DECISION_RD 2 ///< rate distoration
1225
* custom intra quantization matrix
1226
* - encoding: set by user, can be NULL
1227
* - decoding: set by lavc
1229
uint16_t *intra_matrix;
1232
* custom inter quantization matrix
1233
* - encoding: set by user, can be NULL
1234
* - decoding: set by lavc
1236
uint16_t *inter_matrix;
1239
* fourcc from the AVI stream header (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A').
1240
* this is used to workaround some encoder bugs
1241
* - encoding: unused
1242
* - decoding: set by user, will be converted to upper case by lavc during init
1244
unsigned int stream_codec_tag;
1247
* scene change detection threshold.
1248
* 0 is default, larger means fewer detected scene changes
1249
* - encoding: set by user.
1250
* - decoding: unused
1252
int scenechange_threshold;
1259
typedef struct AVOption {
1260
/** options' name */
1261
const char *name; /* if name is NULL, it indicates a link to next */
1262
/** short English text help or const struct AVOption* subpointer */
1263
const char *help; // const struct AVOption* sub;
1264
/** offset to context structure where the parsed value should be stored */
1266
/** options' type */
1268
#define FF_OPT_TYPE_BOOL 1 ///< boolean - true,1,on (or simply presence)
1269
#define FF_OPT_TYPE_DOUBLE 2 ///< double
1270
#define FF_OPT_TYPE_INT 3 ///< integer
1271
#define FF_OPT_TYPE_STRING 4 ///< string (finished with \0)
1272
#define FF_OPT_TYPE_MASK 0x1f ///< mask for types - upper bits are various flags
1273
//#define FF_OPT_TYPE_EXPERT 0x20 // flag for expert option
1274
#define FF_OPT_TYPE_FLAG (FF_OPT_TYPE_BOOL | 0x40)
1275
#define FF_OPT_TYPE_RCOVERRIDE (FF_OPT_TYPE_STRING | 0x80)
1276
/** min value (min == max -> no limits) */
1278
/** maximum value for double/int */
1280
/** default boo [0,1]l/double/int value */
1283
* default string value (with optional semicolon delimited extra option-list
1284
* i.e. option1;option2;option3
1285
* defval might select other then first argument as default
1288
#define FF_OPT_MAX_DEPTH 10
1292
* Parse option(s) and sets fields in passed structure
1293
* @param strct structure where the parsed results will be written
1294
* @param list list with AVOptions
1295
* @param opts string with options for parsing
1297
int avoption_parse(void* strct, const AVOption* list, const char* opts);
1303
typedef struct AVCodec {
1305
enum CodecType type;
1308
int (*init)(AVCodecContext *);
1309
int (*encode)(AVCodecContext *, uint8_t *buf, int buf_size, void *data);
1310
int (*close)(AVCodecContext *);
1311
int (*decode)(AVCodecContext *, void *outdata, int *outdata_size,
1312
uint8_t *buf, int buf_size);
1314
const AVOption *options;
1315
struct AVCodec *next;
1316
void (*flush)(AVCodecContext *);
1320
* four components are given, that's all.
1321
* the last component is alpha
1323
typedef struct AVPicture {
1325
int linesize[4]; ///< number of bytes per line
1330
* This structure defines a method for communicating palette changes
1331
* between and demuxer and a decoder.
1333
typedef struct AVPaletteControl {
1335
/* demuxer sets this to 1 to indicate the palette has changed;
1336
* decoder resets to 0 */
1337
int palette_changed;
1339
/* 256 3-byte RGB palette entries; the components should be
1340
* formatted in the buffer as "RGBRGB..." and should be scaled to
1341
* 8 bits if they originally represented 6-bit VGA palette
1343
unsigned char palette[256 * 3];
1347
extern AVCodec ac3_encoder;
1348
extern AVCodec mp2_encoder;
1349
extern AVCodec mp3lame_encoder;
1350
extern AVCodec oggvorbis_encoder;
1351
extern AVCodec mpeg1video_encoder;
1352
extern AVCodec mpeg2video_encoder;
1353
extern AVCodec h263_encoder;
1354
extern AVCodec h263p_encoder;
1355
extern AVCodec flv_encoder;
1356
extern AVCodec rv10_encoder;
1357
extern AVCodec mjpeg_encoder;
1358
extern AVCodec ljpeg_encoder;
1359
extern AVCodec mpeg4_encoder;
1360
extern AVCodec msmpeg4v1_encoder;
1361
extern AVCodec msmpeg4v2_encoder;
1362
extern AVCodec msmpeg4v3_encoder;
1363
extern AVCodec wmv1_encoder;
1364
extern AVCodec wmv2_encoder;
1365
extern AVCodec huffyuv_encoder;
1366
extern AVCodec h264_encoder;
1367
extern AVCodec asv1_encoder;
1368
extern AVCodec asv2_encoder;
1369
extern AVCodec vcr1_encoder;
1370
extern AVCodec ffv1_encoder;
1371
extern AVCodec mdec_encoder;
1373
extern AVCodec h263_decoder;
1374
extern AVCodec mpeg4_decoder;
1375
extern AVCodec msmpeg4v1_decoder;
1376
extern AVCodec msmpeg4v2_decoder;
1377
extern AVCodec msmpeg4v3_decoder;
1378
extern AVCodec wmv1_decoder;
1379
extern AVCodec wmv2_decoder;
1380
extern AVCodec mpeg1video_decoder;
1381
extern AVCodec mpeg2video_decoder;
1382
extern AVCodec mpeg_xvmc_decoder;
1383
extern AVCodec h263i_decoder;
1384
extern AVCodec flv_decoder;
1385
extern AVCodec rv10_decoder;
1386
extern AVCodec svq1_decoder;
1387
extern AVCodec svq3_decoder;
1388
extern AVCodec dvvideo_decoder;
1389
extern AVCodec dvaudio_decoder;
1390
extern AVCodec wmav1_decoder;
1391
extern AVCodec wmav2_decoder;
1392
extern AVCodec mjpeg_decoder;
1393
extern AVCodec mjpegb_decoder;
1394
extern AVCodec mp2_decoder;
1395
extern AVCodec mp3_decoder;
1396
extern AVCodec mace3_decoder;
1397
extern AVCodec mace6_decoder;
1398
extern AVCodec huffyuv_decoder;
1399
extern AVCodec oggvorbis_decoder;
1400
extern AVCodec cyuv_decoder;
1401
extern AVCodec h264_decoder;
1402
extern AVCodec indeo3_decoder;
1403
extern AVCodec vp3_decoder;
1404
extern AVCodec amr_nb_decoder;
1405
extern AVCodec amr_nb_encoder;
1406
extern AVCodec aac_decoder;
1407
extern AVCodec mpeg4aac_decoder;
1408
extern AVCodec asv1_decoder;
1409
extern AVCodec asv2_decoder;
1410
extern AVCodec vcr1_decoder;
1411
extern AVCodec cljr_decoder;
1412
extern AVCodec ffv1_decoder;
1413
extern AVCodec fourxm_decoder;
1414
extern AVCodec mdec_decoder;
1415
extern AVCodec roq_decoder;
1416
extern AVCodec interplay_video_decoder;
1417
extern AVCodec xan_wc3_decoder;
1418
extern AVCodec ra_144_decoder;
1419
extern AVCodec ra_288_decoder;
1420
extern AVCodec roq_dpcm_decoder;
1421
extern AVCodec interplay_dpcm_decoder;
1422
extern AVCodec xan_dpcm_decoder;
1425
#define PCM_CODEC(id, name) \
1426
extern AVCodec name ## _decoder; \
1427
extern AVCodec name ## _encoder
1429
PCM_CODEC(CODEC_ID_PCM_S16LE, pcm_s16le);
1430
PCM_CODEC(CODEC_ID_PCM_S16BE, pcm_s16be);
1431
PCM_CODEC(CODEC_ID_PCM_U16LE, pcm_u16le);
1432
PCM_CODEC(CODEC_ID_PCM_U16BE, pcm_u16be);
1433
PCM_CODEC(CODEC_ID_PCM_S8, pcm_s8);
1434
PCM_CODEC(CODEC_ID_PCM_U8, pcm_u8);
1435
PCM_CODEC(CODEC_ID_PCM_ALAW, pcm_alaw);
1436
PCM_CODEC(CODEC_ID_PCM_MULAW, pcm_mulaw);
1440
PCM_CODEC(CODEC_ID_ADPCM_IMA_QT, adpcm_ima_qt);
1441
PCM_CODEC(CODEC_ID_ADPCM_IMA_WAV, adpcm_ima_wav);
1442
PCM_CODEC(CODEC_ID_ADPCM_IMA_DK3, adpcm_ima_dk3);
1443
PCM_CODEC(CODEC_ID_ADPCM_IMA_DK4, adpcm_ima_dk4);
1444
PCM_CODEC(CODEC_ID_ADPCM_MS, adpcm_ms);
1445
PCM_CODEC(CODEC_ID_ADPCM_4XM, adpcm_4xm);
1449
/* dummy raw video codec */
1450
extern AVCodec rawvideo_encoder;
1451
extern AVCodec rawvideo_decoder;
1453
/* the following codecs use external GPL libs */
1454
extern AVCodec ac3_decoder;
1458
struct ReSampleContext;
1460
typedef struct ReSampleContext ReSampleContext;
1462
ReSampleContext *audio_resample_init(int output_channels, int input_channels,
1463
int output_rate, int input_rate);
1464
int audio_resample(ReSampleContext *s, short *output, short *input, int nb_samples);
1465
void audio_resample_close(ReSampleContext *s);
1467
/* YUV420 format is assumed ! */
1469
struct ImgReSampleContext;
1471
typedef struct ImgReSampleContext ImgReSampleContext;
1473
ImgReSampleContext *img_resample_init(int output_width, int output_height,
1474
int input_width, int input_height);
1476
ImgReSampleContext *img_resample_full_init(int owidth, int oheight,
1477
int iwidth, int iheight,
1478
int topBand, int bottomBand,
1479
int leftBand, int rightBand);
1481
void img_resample(ImgReSampleContext *s,
1482
AVPicture *output, AVPicture *input);
1484
void img_resample_close(ImgReSampleContext *s);
1486
int avpicture_fill(AVPicture *picture, uint8_t *ptr,
1487
int pix_fmt, int width, int height);
1488
int avpicture_layout(AVPicture* src, int pix_fmt, int width, int height,
1489
unsigned char *dest, int dest_size);
1490
int avpicture_get_size(int pix_fmt, int width, int height);
1491
void avcodec_get_chroma_sub_sample(int pix_fmt, int *h_shift, int *v_shift);
1492
const char *avcodec_get_pix_fmt_name(int pix_fmt);
1493
enum PixelFormat avcodec_get_pix_fmt(const char* name);
1495
#define FF_LOSS_RESOLUTION 0x0001 /* loss due to resolution change */
1496
#define FF_LOSS_DEPTH 0x0002 /* loss due to color depth change */
1497
#define FF_LOSS_COLORSPACE 0x0004 /* loss due to color space conversion */
1498
#define FF_LOSS_ALPHA 0x0008 /* loss of alpha bits */
1499
#define FF_LOSS_COLORQUANT 0x0010 /* loss due to color quantization */
1500
#define FF_LOSS_CHROMA 0x0020 /* loss of chroma (e.g. rgb to gray conversion) */
1502
int avcodec_get_pix_fmt_loss(int dst_pix_fmt, int src_pix_fmt,
1504
int avcodec_find_best_pix_fmt(int pix_fmt_mask, int src_pix_fmt,
1505
int has_alpha, int *loss_ptr);
1507
#define FF_ALPHA_TRANSP 0x0001 /* image has some totally transparent pixels */
1508
#define FF_ALPHA_SEMI_TRANSP 0x0002 /* image has some transparent pixels */
1509
int img_get_alpha_info(AVPicture *src, int pix_fmt, int width, int height);
1511
/* convert among pixel formats */
1512
int img_convert(AVPicture *dst, int dst_pix_fmt,
1513
AVPicture *src, int pix_fmt,
1514
int width, int height);
1516
/* deinterlace a picture */
1517
int avpicture_deinterlace(AVPicture *dst, AVPicture *src,
1518
int pix_fmt, int width, int height);
1520
/* external high level API */
1522
extern AVCodec *first_avcodec;
1524
/* returns LIBAVCODEC_VERSION_INT constant */
1525
unsigned avcodec_version(void);
1526
/* returns LIBAVCODEC_BUILD constant */
1527
unsigned avcodec_build(void);
1528
void avcodec_init(void);
1530
void register_avcodec(AVCodec *format);
1531
AVCodec *avcodec_find_encoder(enum CodecID id);
1532
AVCodec *avcodec_find_encoder_by_name(const char *name);
1533
AVCodec *avcodec_find_decoder(enum CodecID id);
1534
AVCodec *avcodec_find_decoder_by_name(const char *name);
1535
void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode);
1537
void avcodec_get_context_defaults(AVCodecContext *s);
1538
AVCodecContext *avcodec_alloc_context(void);
1539
AVFrame *avcodec_alloc_frame(void);
1541
int avcodec_default_get_buffer(AVCodecContext *s, AVFrame *pic);
1542
void avcodec_default_release_buffer(AVCodecContext *s, AVFrame *pic);
1543
void avcodec_default_free_buffers(AVCodecContext *s);
1546
* opens / inits the AVCodecContext.
1549
int avcodec_open(AVCodecContext *avctx, AVCodec *codec);
1551
int avcodec_decode_audio(AVCodecContext *avctx, int16_t *samples,
1552
int *frame_size_ptr,
1553
uint8_t *buf, int buf_size);
1554
int avcodec_decode_video(AVCodecContext *avctx, AVFrame *picture,
1555
int *got_picture_ptr,
1556
uint8_t *buf, int buf_size);
1557
int avcodec_parse_frame(AVCodecContext *avctx, uint8_t **pdata,
1559
uint8_t *buf, int buf_size);
1560
int avcodec_encode_audio(AVCodecContext *avctx, uint8_t *buf, int buf_size,
1561
const short *samples);
1562
int avcodec_encode_video(AVCodecContext *avctx, uint8_t *buf, int buf_size,
1563
const AVFrame *pict);
1565
int avcodec_close(AVCodecContext *avctx);
1567
void avcodec_register_all(void);
1569
void avcodec_flush_buffers(AVCodecContext *avctx);
1571
/* misc usefull functions */
1574
* returns a single letter to describe the picture type
1576
char av_get_pict_type_char(int pict_type);
1579
* reduce a fraction.
1580
* this is usefull for framerate calculations
1581
* @param max the maximum allowed for dst_nom & dst_den
1582
* @return 1 if exact, 0 otherwise
1584
int av_reduce(int *dst_nom, int *dst_den, int64_t nom, int64_t den, int64_t max);
1587
* rescale a 64bit integer.
1588
* a simple a*b/c isnt possible as it can overflow
1590
int64_t av_rescale(int64_t a, int b, int c);
1594
* Interface for 0.5.0 version
1596
* do not even think about it's usage for this moment
1600
/// compressed size used from given memory buffer
1602
/// I/P/B frame type
1608
* order can't be changed - once it was defined
1612
AVC_OPEN_BY_NAME = 0xACA000,
1613
AVC_OPEN_BY_CODEC_ID,
1618
// pin - struct { uint8_t* src, uint_t src_size }
1619
// pout - struct { AVPicture* img, consumed_bytes,
1621
// pin - struct { AVPicture* img, uint8_t* dest, uint_t dest_size }
1622
// pout - uint_t used_from_dest_size
1625
// query/get video commands
1626
AVC_GET_VERSION = 0xACB000,
1630
AVC_GET_QUANT_TABLE,
1633
// query/get audio commands
1634
AVC_GET_FRAME_SIZE = 0xABC000,
1636
// maybe define some simple structure which
1637
// might be passed to the user - but they can't
1638
// contain any codec specific parts and these
1639
// calls are usualy necessary only few times
1641
// set video commands
1642
AVC_SET_WIDTH = 0xACD000,
1645
// set video encoding commands
1646
AVC_SET_FRAME_RATE = 0xACD800,
1650
// set audio commands
1651
AVC_SET_SAMPLE_RATE = 0xACE000,
1657
* \param handle allocated private structure by libavcodec
1658
* for initialization pass NULL - will be returned pout
1659
* user is supposed to know nothing about its structure
1660
* \param cmd type of operation to be performed
1661
* \param pint input parameter
1662
* \param pout output parameter
1664
* \returns command status - eventually for query command it might return
1665
* integer resulting value
1667
int avcodec(void* handle, avc_cmd_t cmd, void* pin, void* pout);
1670
void *av_malloc(unsigned int size);
1671
void *av_mallocz(unsigned int size);
1672
void *av_realloc(void *ptr, unsigned int size);
1673
void av_free(void *ptr);
1674
char *av_strdup(const char *s);
1675
void __av_freep(void **ptr);
1676
#define av_freep(p) __av_freep((void **)(p))
1677
void *av_fast_realloc(void *ptr, unsigned int *size, unsigned int min_size);
1678
/* for static data only */
1679
/* call av_free_static to release all staticaly allocated tables */
1680
void av_free_static(void);
1681
void *__av_mallocz_static(void** location, unsigned int size);
1682
#define av_mallocz_static(p, s) __av_mallocz_static((void **)(p), s)
1688
#endif /* AVCODEC_H */