malloc padding to avoid reading past the malloc()ed area.
[libav.git] / libavcodec / avcodec.h
CommitLineData
a96b68b7
FB
1#ifndef AVCODEC_H
2#define AVCODEC_H
3
36df8805
MN
4/**
5 * @file avcodec.h
d33c949c 6 * external api header.
36df8805
MN
7 */
8
9
02d697aa
ZK
10#ifdef __cplusplus
11extern "C" {
12#endif
13
c11c2bc2 14#include "avutil.h"
4b813d5c 15#include <sys/types.h> /* size_t */
de6d9b64 16
5aa083ee 17//FIXME the following 2 really dont belong in here
c79b8011 18#define FFMPEG_VERSION_INT 0x000409
46044471 19#define FFMPEG_VERSION "CVS"
7b7d86f1
FB
20
21#define AV_STRINGIFY(s) AV_TOSTRING(s)
22#define AV_TOSTRING(s) #s
5aa083ee 23
e0f7e329
BL
24#define LIBAVCODEC_VERSION_INT ((51<<16)+(0<<8)+0)
25#define LIBAVCODEC_VERSION 51.0.0
5aa083ee
MN
26#define LIBAVCODEC_BUILD LIBAVCODEC_VERSION_INT
27
28#define LIBAVCODEC_IDENT "Lavc" AV_STRINGIFY(LIBAVCODEC_VERSION)
ce2749d2 29
2a24fe4c 30#define AV_NOPTS_VALUE int64_t_C(0x8000000000000000)
9740beff 31#define AV_TIME_BASE 1000000
c0df9d75 32#define AV_TIME_BASE_Q (AVRational){1, AV_TIME_BASE}
9740beff 33
de6d9b64
FB
34enum CodecID {
35 CODEC_ID_NONE,
36 CODEC_ID_MPEG1VIDEO,
dcedf586 37 CODEC_ID_MPEG2VIDEO, /* prefered ID for MPEG Video 1 or 2 decoding */
fb364ada 38 CODEC_ID_MPEG2VIDEO_XVMC,
c6148de2 39 CODEC_ID_H261,
de6d9b64
FB
40 CODEC_ID_H263,
41 CODEC_ID_RV10,
68b94c35 42 CODEC_ID_RV20,
de6d9b64 43 CODEC_ID_MJPEG,
b135d9fb 44 CODEC_ID_MJPEGB,
b1e6b355 45 CODEC_ID_LJPEG,
5e83dec4 46 CODEC_ID_SP5X,
bf89e6b1 47 CODEC_ID_MPEG4,
de6d9b64 48 CODEC_ID_RAWVIDEO,
84afee34
MN
49 CODEC_ID_MSMPEG4V1,
50 CODEC_ID_MSMPEG4V2,
51 CODEC_ID_MSMPEG4V3,
e1a9dbff 52 CODEC_ID_WMV1,
b50eef3a 53 CODEC_ID_WMV2,
de6d9b64
FB
54 CODEC_ID_H263P,
55 CODEC_ID_H263I,
d4f5d74a 56 CODEC_ID_FLV1,
be8ffec9 57 CODEC_ID_SVQ1,
8b82a956 58 CODEC_ID_SVQ3,
020fcc94 59 CODEC_ID_DVVIDEO,
11f18faf 60 CODEC_ID_HUFFYUV,
f70f7c6d 61 CODEC_ID_CYUV,
0da71265 62 CODEC_ID_H264,
deabd4fd 63 CODEC_ID_INDEO3,
d86053a4 64 CODEC_ID_VP3,
f44ee2c3 65 CODEC_ID_THEORA,
3d2e8cce 66 CODEC_ID_ASV1,
9b56edf5 67 CODEC_ID_ASV2,
5e20f836 68 CODEC_ID_FFV1,
e2a7bb28 69 CODEC_ID_4XM,
be3564ed 70 CODEC_ID_VCR1,
3aff069b 71 CODEC_ID_CLJR,
c3bf0288 72 CODEC_ID_MDEC,
3ef8be2b
MM
73 CODEC_ID_ROQ,
74 CODEC_ID_INTERPLAY_VIDEO,
9937e686
MM
75 CODEC_ID_XAN_WC3,
76 CODEC_ID_XAN_WC4,
2fdf638b
MM
77 CODEC_ID_RPZA,
78 CODEC_ID_CINEPAK,
79 CODEC_ID_WS_VQA,
80 CODEC_ID_MSRLE,
81 CODEC_ID_MSVIDEO1,
4120a53a 82 CODEC_ID_IDCIN,
1dc1ed99 83 CODEC_ID_8BPS,
11e29a41 84 CODEC_ID_SMC,
42cad81a 85 CODEC_ID_FLIC,
9a4117d5 86 CODEC_ID_TRUEMOTION1,
fafa0b75 87 CODEC_ID_VMDVIDEO,
a273bbfb
RT
88 CODEC_ID_MSZH,
89 CODEC_ID_ZLIB,
070ed1bc 90 CODEC_ID_QTRLE,
791e7b83 91 CODEC_ID_SNOW,
9d53d58e 92 CODEC_ID_TSCC,
d0a0bbd2 93 CODEC_ID_ULTI,
d08d7142 94 CODEC_ID_QDRAW,
ab711b3c 95 CODEC_ID_VIXL,
acfd8f0f 96 CODEC_ID_QPEG,
17179d2d
MN
97 CODEC_ID_XVID,
98 CODEC_ID_PNG,
99 CODEC_ID_PPM,
100 CODEC_ID_PBM,
101 CODEC_ID_PGM,
102 CODEC_ID_PGMYUV,
103 CODEC_ID_PAM,
f37b9768 104 CODEC_ID_FFVHUFF,
3f05305d
MN
105 CODEC_ID_RV30,
106 CODEC_ID_RV40,
21aa398f
AB
107 CODEC_ID_VC9,
108 CODEC_ID_WMV3,
9c7fb608 109 CODEC_ID_LOCO,
a8a15e9d 110 CODEC_ID_WNV1,
589f8220 111 CODEC_ID_AASC,
856dbbff 112 CODEC_ID_INDEO2,
b81f8949 113 CODEC_ID_FRAPS,
64af6168 114 CODEC_ID_TRUEMOTION2,
9fa62f2a 115 CODEC_ID_BMP,
a96b68b7
FB
116
117 /* various pcm "codecs" */
17179d2d 118 CODEC_ID_PCM_S16LE= 0x10000,
a96b68b7
FB
119 CODEC_ID_PCM_S16BE,
120 CODEC_ID_PCM_U16LE,
121 CODEC_ID_PCM_U16BE,
122 CODEC_ID_PCM_S8,
123 CODEC_ID_PCM_U8,
124 CODEC_ID_PCM_MULAW,
125 CODEC_ID_PCM_ALAW,
b461b3bc
RD
126 CODEC_ID_PCM_S32LE,
127 CODEC_ID_PCM_S32BE,
128 CODEC_ID_PCM_U32LE,
129 CODEC_ID_PCM_U32BE,
130 CODEC_ID_PCM_S24LE,
131 CODEC_ID_PCM_S24BE,
132 CODEC_ID_PCM_U24LE,
133 CODEC_ID_PCM_U24BE,
134 CODEC_ID_PCM_S24DAUD,
0147f198
FR
135
136 /* various adpcm codecs */
17179d2d 137 CODEC_ID_ADPCM_IMA_QT= 0x11000,
0147f198 138 CODEC_ID_ADPCM_IMA_WAV,
9937e686
MM
139 CODEC_ID_ADPCM_IMA_DK3,
140 CODEC_ID_ADPCM_IMA_DK4,
2fdf638b 141 CODEC_ID_ADPCM_IMA_WS,
7d8379f2 142 CODEC_ID_ADPCM_IMA_SMJPEG,
0147f198 143 CODEC_ID_ADPCM_MS,
e2a7bb28 144 CODEC_ID_ADPCM_4XM,
fc384777
MM
145 CODEC_ID_ADPCM_XA,
146 CODEC_ID_ADPCM_ADX,
7d8379f2 147 CODEC_ID_ADPCM_EA,
e5966052 148 CODEC_ID_ADPCM_G726,
b3bfb299 149 CODEC_ID_ADPCM_CT,
659c3692 150 CODEC_ID_ADPCM_SWF,
2ff4524e 151 CODEC_ID_ADPCM_YAMAHA,
891f64b3 152
17179d2d
MN
153 /* AMR */
154 CODEC_ID_AMR_NB= 0x12000,
d663a1fd
MN
155 CODEC_ID_AMR_WB,
156
b8414bbd 157 /* RealAudio codecs*/
17179d2d 158 CODEC_ID_RA_144= 0x13000,
b8414bbd 159 CODEC_ID_RA_288,
3ef8be2b
MM
160
161 /* various DPCM codecs */
17179d2d 162 CODEC_ID_ROQ_DPCM= 0x14000,
3ef8be2b 163 CODEC_ID_INTERPLAY_DPCM,
9937e686 164 CODEC_ID_XAN_DPCM,
d08d7142 165 CODEC_ID_SOL_DPCM,
985180a1 166
17179d2d
MN
167 CODEC_ID_MP2= 0x15000,
168 CODEC_ID_MP3, /* prefered ID for MPEG Audio layer 1, 2 or3 decoding */
169 CODEC_ID_AAC,
170 CODEC_ID_MPEG4AAC,
171 CODEC_ID_AC3,
172 CODEC_ID_DTS,
173 CODEC_ID_VORBIS,
174 CODEC_ID_DVAUDIO,
175 CODEC_ID_WMAV1,
176 CODEC_ID_WMAV2,
177 CODEC_ID_MACE3,
178 CODEC_ID_MACE6,
179 CODEC_ID_VMDAUDIO,
180 CODEC_ID_SONIC,
181 CODEC_ID_SONIC_LS,
ac2570a8 182 CODEC_ID_FLAC,
1ede228a 183 CODEC_ID_MP3ADU,
d2a7718d 184 CODEC_ID_MP3ON4,
85ad5695 185 CODEC_ID_SHORTEN,
5df8a0c6 186 CODEC_ID_ALAC,
034eeaa1 187 CODEC_ID_WESTWOOD_SND1,
bb4c2140 188 CODEC_ID_GSM,
d9b1c197 189 CODEC_ID_QDM2,
e0f7e329 190 CODEC_ID_COOK,
ac2570a8 191
5c5dea3f 192 CODEC_ID_OGGTHEORA= 0x16000,
240c1657
FB
193
194 /* subtitle codecs */
195 CODEC_ID_DVD_SUBTITLE= 0x17000,
196 CODEC_ID_DVB_SUBTITLE,
5c5dea3f 197
17179d2d 198 CODEC_ID_MPEG2TS= 0x20000, /* _FAKE_ codec to indicate a raw MPEG2 transport
985180a1 199 stream (only used by libavformat) */
de6d9b64 200};
dcedf586
FB
201
202/* CODEC_ID_MP3LAME is absolete */
203#define CODEC_ID_MP3LAME CODEC_ID_MP3
de6d9b64
FB
204
205enum CodecType {
4a663d80 206 CODEC_TYPE_UNKNOWN = -1,
de6d9b64
FB
207 CODEC_TYPE_VIDEO,
208 CODEC_TYPE_AUDIO,
985180a1 209 CODEC_TYPE_DATA,
240c1657 210 CODEC_TYPE_SUBTITLE,
de6d9b64
FB
211};
212
64863965 213/**
0f371e3e
MM
214 * Pixel format. Notes:
215 *
216 * PIX_FMT_RGBA32 is handled in an endian-specific manner. A RGBA
217 * color is put together as:
218 * (A << 24) | (R << 16) | (G << 8) | B
219 * This is stored as BGRA on little endian CPU architectures and ARGB on
220 * big endian CPUs.
221 *
222 * When the pixel format is palettized RGB (PIX_FMT_PAL8), the palettized
223 * image data is stored in AVFrame.data[0]. The palette is transported in
224 * AVFrame.data[1] and, is 1024 bytes long (256 4-byte entries) and is
225 * formatted the same as in PIX_FMT_RGBA32 described above (i.e., it is
fc384777
MM
226 * also endian-specific). Note also that the individual RGB palette
227 * components stored in AVFrame.data[1] should be in the range 0..255.
228 * This is important as many custom PAL8 video codecs that were designed
229 * to run on the IBM VGA graphics adapter use 6-bit palette components.
64863965 230 */
de6d9b64 231enum PixelFormat {
644a9262 232 PIX_FMT_NONE= -1,
cd394651 233 PIX_FMT_YUV420P, ///< Planar YUV 4:2:0 (1 Cr & Cb sample per 2x2 Y samples)
ebb177dd 234 PIX_FMT_YUV422, ///< Packed pixel, Y0 Cb Y1 Cr
cd394651
MN
235 PIX_FMT_RGB24, ///< Packed pixel, 3 bytes per pixel, RGBRGB...
236 PIX_FMT_BGR24, ///< Packed pixel, 3 bytes per pixel, BGRBGR...
237 PIX_FMT_YUV422P, ///< Planar YUV 4:2:2 (1 Cr & Cb sample per 2x1 Y samples)
238 PIX_FMT_YUV444P, ///< Planar YUV 4:4:4 (1 Cr & Cb sample per 1x1 Y samples)
0f371e3e 239 PIX_FMT_RGBA32, ///< Packed pixel, 4 bytes per pixel, BGRABGRA..., stored in cpu endianness
cd394651
MN
240 PIX_FMT_YUV410P, ///< Planar YUV 4:1:0 (1 Cr & Cb sample per 4x4 Y samples)
241 PIX_FMT_YUV411P, ///< Planar YUV 4:1:1 (1 Cr & Cb sample per 4x1 Y samples)
64863965
MN
242 PIX_FMT_RGB565, ///< always stored in cpu endianness
243 PIX_FMT_RGB555, ///< always stored in cpu endianness, most significant bit to 1
dab64ebc 244 PIX_FMT_GRAY8,
64863965
MN
245 PIX_FMT_MONOWHITE, ///< 0 is white
246 PIX_FMT_MONOBLACK, ///< 0 is black
247 PIX_FMT_PAL8, ///< 8 bit with RGBA palette
cd394651
MN
248 PIX_FMT_YUVJ420P, ///< Planar YUV 4:2:0 full scale (jpeg)
249 PIX_FMT_YUVJ422P, ///< Planar YUV 4:2:2 full scale (jpeg)
250 PIX_FMT_YUVJ444P, ///< Planar YUV 4:4:4 full scale (jpeg)
fb364ada
IK
251 PIX_FMT_XVMC_MPEG2_MC,///< XVideo Motion Acceleration via common packet passing(xvmc_render.h)
252 PIX_FMT_XVMC_MPEG2_IDCT,
ebb177dd 253 PIX_FMT_UYVY422, ///< Packed pixel, Cb Y0 Cr Y1
f02be79d 254 PIX_FMT_UYVY411, ///< Packed pixel, Cb Y0 Y1 Cr Y2 Y3
dab64ebc 255 PIX_FMT_NB,
de6d9b64
FB
256};
257
a96b68b7
FB
258/* currently unused, may be used if 24/32 bits samples ever supported */
259enum SampleFormat {
64863965 260 SAMPLE_FMT_S16 = 0, ///< signed 16 bits
a3a5f4d6
MN
261 SAMPLE_FMT_S32, ///< signed 32 bits
262 SAMPLE_FMT_FLT, ///< float
263 SAMPLE_FMT_DBL, ///< double
a96b68b7
FB
264};
265
de6d9b64 266/* in bytes */
bc8d1857 267#define AVCODEC_MAX_AUDIO_FRAME_SIZE 131072
de6d9b64 268
d7425f59 269/**
cf713bb8
MN
270 * Required number of additionally allocated bytes at the end of the input bitstream for decoding.
271 * this is mainly needed because some optimized bitstream readers read
272 * 32 or 64 bit at once and could read over the end<br>
273 * Note, if the first 23 bits of the additional bytes are not 0 then damaged
274 * MPEG bitstreams could cause overread and segfault
d7425f59
MN
275 */
276#define FF_INPUT_BUFFER_PADDING_SIZE 8
277
0ecca7a4
MN
278/**
279 * minimum encoding buffer size.
280 * used to avoid some checks during header writing
281 */
282#define FF_MIN_BUFFER_SIZE 16384
283
e4986da9
J
284/* motion estimation type, EPZS by default */
285enum Motion_Est_ID {
101bea5f 286 ME_ZERO = 1,
e4986da9
J
287 ME_FULL,
288 ME_LOG,
289 ME_PHODS,
290 ME_EPZS,
291 ME_X1
292};
293
8c3eba7c
MN
294enum AVDiscard{
295//we leave some space between them for extensions (drop some keyframes for intra only or drop just some bidir frames)
296 AVDISCARD_NONE =-16, ///< discard nothing
297 AVDISCARD_DEFAULT= 0, ///< discard useless packets like 0 size packets in avi
298 AVDISCARD_NONREF = 8, ///< discard all non reference
299 AVDISCARD_BIDIR = 16, ///< discard all bidirectional frames
300 AVDISCARD_NONKEY = 32, ///< discard all frames except keyframes
301 AVDISCARD_ALL = 48, ///< discard all
302};
303
ce980a95
MN
304typedef struct RcOverride{
305 int start_frame;
306 int end_frame;
307 int qscale; // if this is 0 then quality_factor will be used instead
308 float quality_factor;
309} RcOverride;
310
101bea5f
J
311/* only for ME compatiblity with old apps */
312extern int motion_estimation_method;
313
4e00e76b 314#define FF_MAX_B_FRAMES 8
9dbcbd92 315
a949d72e
MN
316/* encoding support
317 these flags can be passed in AVCodecContext.flags before initing
bb628dae 318 Note: not everything is supported yet.
a949d72e 319*/
de6d9b64 320
64863965 321#define CODEC_FLAG_QSCALE 0x0002 ///< use fixed qscale
dba019da 322#define CODEC_FLAG_4MV 0x0004 ///< 4 MV per MB allowed / Advanced prediction for H263
64863965
MN
323#define CODEC_FLAG_QPEL 0x0010 ///< use qpel MC
324#define CODEC_FLAG_GMC 0x0020 ///< use GMC
ca7d05d5 325#define CODEC_FLAG_MV0 0x0040 ///< always try a MB with MV=<0,0>
64863965 326#define CODEC_FLAG_PART 0x0080 ///< use data partitioning
9dbcbd92
MN
327/* parent program gurantees that the input for b-frame containing streams is not written to
328 for at least s->max_b_frames+1 frames, if this is not set than the input will be copied */
8b4c7dbc 329#define CODEC_FLAG_INPUT_PRESERVED 0x0100
64863965
MN
330#define CODEC_FLAG_PASS1 0x0200 ///< use internal 2pass ratecontrol in first pass mode
331#define CODEC_FLAG_PASS2 0x0400 ///< use internal 2pass ratecontrol in second pass mode
332#define CODEC_FLAG_EXTERN_HUFF 0x1000 ///< use external huffman table (for mjpeg)
333#define CODEC_FLAG_GRAY 0x2000 ///< only decode/encode grayscale
bb628dae 334#define CODEC_FLAG_EMU_EDGE 0x4000///< don't draw edges
64863965
MN
335#define CODEC_FLAG_PSNR 0x8000 ///< error[?] variables will be set during encoding
336#define CODEC_FLAG_TRUNCATED 0x00010000 /** input bitstream might be truncated at a random location instead
d7425f59 337 of only at frame boundaries */
64863965
MN
338#define CODEC_FLAG_NORMALIZE_AQP 0x00020000 ///< normalize adaptive quantization
339#define CODEC_FLAG_INTERLACED_DCT 0x00040000 ///< use interlaced dct
3bb07d61 340#define CODEC_FLAG_LOW_DELAY 0x00080000 ///< force low delay
64863965
MN
341#define CODEC_FLAG_ALT_SCAN 0x00100000 ///< use alternate scan
342#define CODEC_FLAG_TRELLIS_QUANT 0x00200000 ///< use trellis quantization
343#define CODEC_FLAG_GLOBAL_HEADER 0x00400000 ///< place global headers in extradata instead of every keyframe
344#define CODEC_FLAG_BITEXACT 0x00800000 ///< use only bitexact stuff (except (i)dct)
21e59552 345/* Fx : Flag for h263+ extra options */
8d8c0294
MN
346#define CODEC_FLAG_H263P_AIC 0x01000000 ///< H263 Advanced intra coding / MPEG4 AC prediction (remove this)
347#define CODEC_FLAG_AC_PRED 0x01000000 ///< H263 Advanced intra coding / MPEG4 AC prediction
64863965 348#define CODEC_FLAG_H263P_UMV 0x02000000 ///< Unlimited motion vector
f2f6134b 349#define CODEC_FLAG_CBP_RD 0x04000000 ///< use rate distortion optimization for cbp
1f26c6f3 350#define CODEC_FLAG_QP_RD 0x08000000 ///< use rate distortion optimization for qp selectioon
dba019da 351#define CODEC_FLAG_H263P_AIV 0x00000008 ///< H263 Alternative inter vlc
332f9ac4
MN
352#define CODEC_FLAG_OBMC 0x00000001 ///< OBMC
353#define CODEC_FLAG_LOOP_FILTER 0x00000800 ///< loop filter
bb198e19
MN
354#define CODEC_FLAG_H263P_SLICE_STRUCT 0x10000000
355#define CODEC_FLAG_INTERLACED_ME 0x20000000 ///< interlaced motion estimation
baaf3f46 356#define CODEC_FLAG_SVCD_SCAN_OFFSET 0x40000000 ///< will reserve space for SVCD scan offset user data
303e50e6 357#define CODEC_FLAG_CLOSED_GOP 0x80000000
6fc5b059 358#define CODEC_FLAG2_FAST 0x00000001 ///< allow non spec compliant speedup tricks
03581772 359#define CODEC_FLAG2_STRICT_GOP 0x00000002 ///< strictly enforce GOP size
09b0499f 360#define CODEC_FLAG2_NO_OUTPUT 0x00000004 ///< skip bitstream encoding
90ad92b3 361#define CODEC_FLAG2_LOCAL_HEADER 0x00000008 ///< place global headers at every keyframe instead of in extradata
6fc5b059 362
21e59552
MN
363/* Unsupported options :
364 * Syntax Arithmetic coding (SAC)
21e59552 365 * Reference Picture Selection
ba58dabc 366 * Independant Segment Decoding */
21e59552 367/* /Fx */
bf89e6b1
FB
368/* codec capabilities */
369
64863965 370#define CODEC_CAP_DRAW_HORIZ_BAND 0x0001 ///< decoder can use draw_horiz_band callback
6814a25c
MN
371/**
372 * Codec uses get_buffer() for allocating buffers.
373 * direct rendering method 1
374 */
375#define CODEC_CAP_DR1 0x0002
917e06c8
FB
376/* if 'parse_only' field is true, then avcodec_parse_frame() can be
377 used */
378#define CODEC_CAP_PARSE_ONLY 0x0004
d7425f59 379#define CODEC_CAP_TRUNCATED 0x0008
5e5c247a
IK
380/* codec can export data for HW decoding (XvMC) */
381#define CODEC_CAP_HWACCEL 0x0010
934982c4
MN
382/**
383 * codec has a non zero delay and needs to be feeded with NULL at the end to get the delayed data.
384 * if this is not set, the codec is guranteed to never be feeded with NULL data
385 */
6f824977 386#define CODEC_CAP_DELAY 0x0020
bf89e6b1 387
bb628dae 388//the following defines may change, don't expect compatibility if you use them
8d7ec294
WH
389#define MB_TYPE_INTRA4x4 0x0001
390#define MB_TYPE_INTRA16x16 0x0002 //FIXME h264 specific
391#define MB_TYPE_INTRA_PCM 0x0004 //FIXME h264 specific
392#define MB_TYPE_16x16 0x0008
393#define MB_TYPE_16x8 0x0010
394#define MB_TYPE_8x16 0x0020
395#define MB_TYPE_8x8 0x0040
396#define MB_TYPE_INTERLACED 0x0080
397#define MB_TYPE_DIRECT2 0x0100 //FIXME
398#define MB_TYPE_ACPRED 0x0200
399#define MB_TYPE_GMC 0x0400
400#define MB_TYPE_SKIP 0x0800
401#define MB_TYPE_P0L0 0x1000
402#define MB_TYPE_P1L0 0x2000
403#define MB_TYPE_P0L1 0x4000
404#define MB_TYPE_P1L1 0x8000
405#define MB_TYPE_L0 (MB_TYPE_P0L0 | MB_TYPE_P1L0)
406#define MB_TYPE_L1 (MB_TYPE_P0L1 | MB_TYPE_P1L1)
407#define MB_TYPE_L0L1 (MB_TYPE_L0 | MB_TYPE_L1)
408#define MB_TYPE_QUANT 0x00010000
409#define MB_TYPE_CBP 0x00020000
410//Note bits 24-31 are reserved for codec specific use (h264 ref0, mpeg1 0mv, ...)
411
fa384dcc
MN
412/**
413 * Pan Scan area.
414 * this specifies the area which should be displayed. Note there may be multiple such areas for one frame
415 */
416typedef struct AVPanScan{
417 /**
418 * id.
419 * - encoding: set by user.
420 * - decoding: set by lavc
421 */
422 int id;
423
424 /**
425 * width and height in 1/16 pel
426 * - encoding: set by user.
427 * - decoding: set by lavc
428 */
429 int width;
430 int height;
431
432 /**
433 * position of the top left corner in 1/16 pel for up to 3 fields/frames.
434 * - encoding: set by user.
435 * - decoding: set by lavc
436 */
437 int16_t position[3][2];
438}AVPanScan;
439
492cd3a9 440#define FF_COMMON_FRAME \
b536d0aa
MN
441 /**\
442 * pointer to the picture planes.\
443 * this might be different from the first allocated byte\
444 * - encoding: \
445 * - decoding: \
446 */\
1e491e29
MN
447 uint8_t *data[4];\
448 int linesize[4];\
449 /**\
32db2b1d 450 * pointer to the first allocated byte of the picture. can be used in get_buffer/release_buffer\
bb628dae 451 * this isn't used by lavc unless the default get/release_buffer() is used\
64863965
MN
452 * - encoding: \
453 * - decoding: \
1e491e29
MN
454 */\
455 uint8_t *base[4];\
456 /**\
457 * 1 -> keyframe, 0-> not\
64863965
MN
458 * - encoding: set by lavc\
459 * - decoding: set by lavc\
1e491e29
MN
460 */\
461 int key_frame;\
462\
463 /**\
0da71265 464 * picture type of the frame, see ?_TYPE below.\
64863965
MN
465 * - encoding: set by lavc for coded_picture (and set by user for input)\
466 * - decoding: set by lavc\
1e491e29
MN
467 */\
468 int pict_type;\
469\
470 /**\
c0df9d75
MN
471 * presentation timestamp in time_base units (time when frame should be shown to user)\
472 * if AV_NOPTS_VALUE then frame_rate = 1/time_base will be assumed\
64863965
MN
473 * - encoding: MUST be set by user\
474 * - decoding: set by lavc\
1e491e29 475 */\
be6784dc 476 int64_t pts;\
1e491e29
MN
477\
478 /**\
479 * picture number in bitstream order.\
64863965
MN
480 * - encoding: set by\
481 * - decoding: set by lavc\
1e491e29
MN
482 */\
483 int coded_picture_number;\
484 /**\
1e491e29 485 * picture number in display order.\
64863965
MN
486 * - encoding: set by\
487 * - decoding: set by lavc\
1e491e29
MN
488 */\
489 int display_picture_number;\
490\
491 /**\
158c7f05 492 * quality (between 1 (good) and FF_LAMBDA_MAX (bad)) \
64863965
MN
493 * - encoding: set by lavc for coded_picture (and set by user for input)\
494 * - decoding: set by lavc\
1e491e29 495 */\
158c7f05 496 int quality; \
1e491e29
MN
497\
498 /**\
499 * buffer age (1->was last buffer and dint change, 2->..., ...).\
158c7f05 500 * set to INT_MAX if the buffer has not been used yet \
64863965
MN
501 * - encoding: unused\
502 * - decoding: MUST be set by get_buffer()\
1e491e29
MN
503 */\
504 int age;\
505\
506 /**\
507 * is this picture used as reference\
64863965
MN
508 * - encoding: unused\
509 * - decoding: set by lavc (before get_buffer() call))\
1e491e29
MN
510 */\
511 int reference;\
512\
513 /**\
514 * QP table\
64863965
MN
515 * - encoding: unused\
516 * - decoding: set by lavc\
1e491e29
MN
517 */\
518 int8_t *qscale_table;\
519 /**\
520 * QP store stride\
64863965
MN
521 * - encoding: unused\
522 * - decoding: set by lavc\
1e491e29
MN
523 */\
524 int qstride;\
525\
526 /**\
527 * mbskip_table[mb]>=1 if MB didnt change\
528 * stride= mb_width = (width+15)>>4\
64863965
MN
529 * - encoding: unused\
530 * - decoding: set by lavc\
1e491e29
MN
531 */\
532 uint8_t *mbskip_table;\
533\
534 /**\
61436073
MN
535 * Motion vector table.\
536 * @code\
537 * example:\
538 * int mv_sample_log2= 4 - motion_subsample_log2;\
539 * int mb_width= (width+15)>>4;\
540 * int mv_stride= (mb_width << mv_sample_log2) + 1;\
541 * motion_val[direction][x + y*mv_stride][0->mv_x, 1->mv_y];\
542 * @endcode\
a4d36c11 543 * - encoding: set by user\
8d7ec294
WH
544 * - decoding: set by lavc\
545 */\
546 int16_t (*motion_val[2])[2];\
547\
548 /**\
549 * Macroblock type table\
550 * mb_type_base + mb_width + 2\
a4d36c11 551 * - encoding: set by user\
8d7ec294
WH
552 * - decoding: set by lavc\
553 */\
554 uint32_t *mb_type;\
555\
556 /**\
f0b77c69
MN
557 * log2 of the size of the block which a single vector in motion_val represents: \
558 * (4->16x16, 3->8x8, 2-> 4x4, 1-> 2x2)\
8d7ec294
WH
559 * - encoding: unused\
560 * - decoding: set by lavc\
561 */\
562 uint8_t motion_subsample_log2;\
563\
564 /**\
1e491e29 565 * for some private data of the user\
64863965
MN
566 * - encoding: unused\
567 * - decoding: set by user\
1e491e29
MN
568 */\
569 void *opaque;\
140cb663
MN
570\
571 /**\
572 * error\
64863965
MN
573 * - encoding: set by lavc if flags&CODEC_FLAG_PSNR\
574 * - decoding: unused\
140cb663
MN
575 */\
576 uint64_t error[4];\
4e00e76b
MN
577\
578 /**\
579 * type of the buffer (to keep track of who has to dealloc data[*])\
64863965
MN
580 * - encoding: set by the one who allocs it\
581 * - decoding: set by the one who allocs it\
3db320ea 582 * Note: user allocated (direct rendering) & internal buffers can not coexist currently\
4e00e76b
MN
583 */\
584 int type;\
2ec23b6d
MN
585 \
586 /**\
587 * when decoding, this signal how much the picture must be delayed.\
588 * extra_delay = repeat_pict / (2*fps)\
64863965
MN
589 * - encoding: unused\
590 * - decoding: set by lavc\
2ec23b6d 591 */\
0426af31
MN
592 int repeat_pict;\
593 \
594 /**\
595 * \
596 */\
597 int qscale_type;\
2744ca9a
RS
598 \
599 /**\
600 * The content of the picture is interlaced.\
601 * - encoding: set by user\
602 * - decoding: set by lavc (default 0)\
603 */\
604 int interlaced_frame;\
605 \
606 /**\
9dad924e 607 * if the content is interlaced, is top field displayed first.\
2744ca9a 608 * - encoding: set by user\
9dad924e 609 * - decoding: set by lavc\
2744ca9a 610 */\
9dad924e 611 int top_field_first;\
fa384dcc
MN
612 \
613 /**\
614 * Pan scan.\
615 * - encoding: set by user\
616 * - decoding: set by lavc\
617 */\
618 AVPanScan *pan_scan;\
2a2bbcb0
MM
619 \
620 /**\
621 * tell user application that palette has changed from previous frame.\
622 * - encoding: ??? (no palette-enabled encoder yet)\
623 * - decoding: set by lavc (default 0)\
624 */\
625 int palette_has_changed;\
074c4ca7
RT
626 \
627 /**\
628 * Codec suggestion on buffer type if != 0\
629 * - encoding: unused\
630 * - decoding: set by lavc (before get_buffer() call))\
631 */\
632 int buffer_hints;\
8289c6fa
WH
633\
634 /**\
635 * DCT coeffitients\
636 * - encoding: unused\
637 * - decoding: set by lavc\
638 */\
639 short *dct_coeff;\
a4d36c11
MN
640\
641 /**\
642 * Motion referece frame index\
643 * - encoding: set by user\
644 * - decoding: set by lavc\
645 */\
646 int8_t *ref_index[2];
2ec23b6d 647
0426af31
MN
648#define FF_QSCALE_TYPE_MPEG1 0
649#define FF_QSCALE_TYPE_MPEG2 1
4e00e76b
MN
650
651#define FF_BUFFER_TYPE_INTERNAL 1
9b56edf5 652#define FF_BUFFER_TYPE_USER 2 ///< Direct rendering buffers (image is (de)allocated by user)
bb628dae
DB
653#define FF_BUFFER_TYPE_SHARED 4 ///< buffer from somewhere else, don't dealloc image (data/base), all other tables are not shared
654#define FF_BUFFER_TYPE_COPY 8 ///< just a (modified) copy of some other buffer, don't dealloc anything
4e00e76b 655
1e491e29 656
140cb663
MN
657#define FF_I_TYPE 1 // Intra
658#define FF_P_TYPE 2 // Predicted
659#define FF_B_TYPE 3 // Bi-dir predicted
660#define FF_S_TYPE 4 // S(GMC)-VOP MPEG4
0da71265
MN
661#define FF_SI_TYPE 5
662#define FF_SP_TYPE 6
1e491e29 663
074c4ca7
RT
664#define FF_BUFFER_HINTS_VALID 0x01 // Buffer hints value is meaningful (if 0 ignore)
665#define FF_BUFFER_HINTS_READABLE 0x02 // Codec will read from buffer
666#define FF_BUFFER_HINTS_PRESERVE 0x04 // User must not alter buffer content
667#define FF_BUFFER_HINTS_REUSABLE 0x08 // Codec will reuse the buffer (update)
668
0da71265
MN
669/**
670 * Audio Video Frame.
671 */
492cd3a9
MN
672typedef struct AVFrame {
673 FF_COMMON_FRAME
674} AVFrame;
1e491e29 675
14bea432 676#define DEFAULT_FRAME_RATE_BASE 1001000
d33c949c
MN
677
678/**
bc874dae
MB
679 * Used by av_log
680 */
681typedef struct AVCLASS AVClass;
682struct AVCLASS {
683 const char* class_name;
684 const char* (*item_name)(void*); /* actually passing a pointer to an AVCodecContext
685 or AVFormatContext, which begin with an AVClass.
686 Needed because av_log is in libavcodec and has no visibility
687 of AVIn/OutputFormat */
6fd46414 688 struct AVOption *option;
bc874dae
MB
689};
690
691/**
d33c949c
MN
692 * main external api structure.
693 */
de6d9b64 694typedef struct AVCodecContext {
b71901e6 695 /**
bc874dae
MB
696 * Info on struct for av_log
697 * - set by avcodec_alloc_context
698 */
43465395 699 AVClass *av_class;
bc874dae 700 /**
64863965
MN
701 * the average bitrate.
702 * - encoding: set by user. unused for constant quantizer encoding
703 * - decoding: set by lavc. 0 or some bitrate if this info is available in the stream
b71901e6 704 */
de6d9b64 705 int bit_rate;
b71901e6
MN
706
707 /**
64863965 708 * number of bits the bitstream is allowed to diverge from the reference.
b71901e6 709 * the reference can be CBR (for CBR pass1) or VBR (for pass2)
64863965
MN
710 * - encoding: set by user. unused for constant quantizer encoding
711 * - decoding: unused
b71901e6
MN
712 */
713 int bit_rate_tolerance;
714
715 /**
64863965
MN
716 * CODEC_FLAG_*.
717 * - encoding: set by user.
718 * - decoding: set by user.
b71901e6 719 */
de6d9b64 720 int flags;
b71901e6
MN
721
722 /**
723 * some codecs needs additionnal format info. It is stored here
64863965
MN
724 * - encoding: set by user.
725 * - decoding: set by lavc. (FIXME is this ok?)
b71901e6
MN
726 */
727 int sub_id;
728
729 /**
64863965
MN
730 * motion estimation algorithm used for video coding.
731 * - encoding: MUST be set by user.
732 * - decoding: unused
b71901e6
MN
733 */
734 int me_method;
735
736 /**
64863965 737 * some codecs need / can use extra-data like huffman tables.
b71901e6
MN
738 * mjpeg: huffman tables
739 * rv10: additional flags
b704e742 740 * mpeg4: global headers (they can be in the bitstream or here)
dffcdbb5
MN
741 * the allocated memory should be FF_INPUT_BUFFER_PADDING_SIZE bytes larger
742 * then extradata_size to avoid prolems if its read with the bitstream reader
ed57bb79 743 * the bytewise contents of extradata must not depend on the architecture or cpu endianness
64863965
MN
744 * - encoding: set/allocated/freed by lavc.
745 * - decoding: set/allocated/freed by user.
b71901e6 746 */
e84c31dc
A
747 void *extradata;
748 int extradata_size;
749
b71901e6 750 /**
5b28c8c3
MN
751 * this is the fundamental unit of time (in seconds) in terms
752 * of which frame timestamps are represented. for fixed-fps content,
753 * timebase should be 1/framerate and timestamp increments should be
754 * identically 1.
64863965 755 * - encoding: MUST be set by user
c0df9d75 756 * - decoding: set by lavc.
b71901e6 757 */
c0df9d75 758 AVRational time_base;
14bea432 759
5b28c8c3 760 /* video only */
14bea432 761 /**
21adafec 762 * picture width / height.
64863965 763 * - encoding: MUST be set by user.
21adafec
MN
764 * - decoding: set by lavc.
765 * Note, for compatibility its possible to set this instead of
766 * coded_width/height before decoding
b71901e6 767 */
de6d9b64 768 int width, height;
b71901e6 769
e769f053 770#define FF_ASPECT_EXTENDED 15
b71901e6
MN
771
772 /**
64863965
MN
773 * the number of pictures in a group of pitures, or 0 for intra_only.
774 * - encoding: set by user.
775 * - decoding: unused
b71901e6
MN
776 */
777 int gop_size;
778
779 /**
64863965 780 * pixel format, see PIX_FMT_xxx.
a3a5f4d6 781 * - encoding: set by user.
64863965 782 * - decoding: set by lavc.
b71901e6 783 */
e4eadb4b 784 enum PixelFormat pix_fmt;
bdfcbbed
MK
785
786 /**
787 * Frame rate emulation. If not zero lower layer (i.e. format handler)
788 * has to read frames at native frame rate.
789 * - encoding: set by user.
790 * - decoding: unused.
791 */
792 int rate_emu;
793
b71901e6
MN
794 /**
795 * if non NULL, 'draw_horiz_band' is called by the libavcodec
796 * decoder to draw an horizontal band. It improve cache usage. Not
797 * all codecs can do that. You must check the codec capabilities
798 * before
64863965
MN
799 * - encoding: unused
800 * - decoding: set by user.
3bb07d61
MN
801 * @param height the height of the slice
802 * @param y the y position of the slice
803 * @param type 1->top field, 2->bottom field, 3->frame
804 * @param offset offset into the AVFrame.data from which the slice should be read
b71901e6 805 */
bf89e6b1 806 void (*draw_horiz_band)(struct AVCodecContext *s,
da64ecc3 807 const AVFrame *src, int offset[4],
3bb07d61 808 int y, int type, int height);
bf89e6b1 809
de6d9b64 810 /* audio only */
64863965 811 int sample_rate; ///< samples per sec
de6d9b64 812 int channels;
a3a5f4d6
MN
813
814 /**
815 * audio sample format.
816 * - encoding: set by user.
817 * - decoding: set by lavc.
818 */
819 enum SampleFormat sample_fmt; ///< sample format, currenly unused
de6d9b64
FB
820
821 /* the following data should not be initialized */
718b27a7
MN
822 /**
823 * samples per packet. initialized when calling 'init'
824 */
825 int frame_size;
64863965
MN
826 int frame_number; ///< audio or video frame number
827 int real_pict_num; ///< returns the real picture number of previous encoded frame
1e491e29 828
b71901e6 829 /**
b71901e6 830 * number of frames the decoded output will be delayed relative to
64863965
MN
831 * the encoded input.
832 * - encoding: set by lavc.
833 * - decoding: unused
b71901e6
MN
834 */
835 int delay;
1ff662cc 836
64863965
MN
837 /* - encoding parameters */
838 float qcompress; ///< amount of qscale change between easy & hard scenes (0.0-1.0)
839 float qblur; ///< amount of qscale smoothing over time (0.0-1.0)
b71901e6
MN
840
841 /**
64863965
MN
842 * minimum quantizer.
843 * - encoding: set by user.
844 * - decoding: unused
b71901e6
MN
845 */
846 int qmin;
847
848 /**
64863965
MN
849 * maximum quantizer.
850 * - encoding: set by user.
851 * - decoding: unused
b71901e6
MN
852 */
853 int qmax;
854
855 /**
64863965
MN
856 * maximum quantizer difference etween frames.
857 * - encoding: set by user.
858 * - decoding: unused
b71901e6
MN
859 */
860 int max_qdiff;
861
862 /**
64863965 863 * maximum number of b frames between non b frames.
b71901e6 864 * note: the output will be delayed by max_b_frames+1 relative to the input
64863965
MN
865 * - encoding: set by user.
866 * - decoding: unused
b71901e6
MN
867 */
868 int max_b_frames;
869
870 /**
64863965
MN
871 * qscale factor between ip and b frames.
872 * - encoding: set by user.
873 * - decoding: unused
b71901e6
MN
874 */
875 float b_quant_factor;
876
877 /** obsolete FIXME remove */
878 int rc_strategy;
8b4c7dbc 879 int b_frame_strategy;
9dbcbd92 880
b71901e6 881 /**
64863965 882 * hurry up amount.
8c3eba7c 883 * deprecated in favor of skip_idct and skip_frame
64863965
MN
884 * - encoding: unused
885 * - decoding: set by user. 1-> skip b frames, 2-> skip idct/dequant too, 5-> skip everything except header
b71901e6
MN
886 */
887 int hurry_up;
2417652e 888
de6d9b64 889 struct AVCodec *codec;
b71901e6 890
de6d9b64
FB
891 void *priv_data;
892
ba58dabc
MN
893 /* unused, FIXME remove*/
894 int rtp_mode;
644d98a4 895
bb628dae 896 int rtp_payload_size; /* The size of the RTP payload: the coder will */
644d98a4
J
897 /* do it's best to deliver a chunk with size */
898 /* below rtp_payload_size, the chunk will start */
899 /* with a start code on some codecs like H.263 */
900 /* This doesn't take account of any particular */
901 /* headers inside the transmited RTP payload */
81401c1f
J
902
903
bb628dae
DB
904 /* The RTP callback: This function is called */
905 /* every time the encoder has a packet to send */
906 /* Depends on the encoder if the data starts */
907 /* with a Start Code (it should) H.263 does. */
908 /* mb_nb contains the number of macroblocks */
909 /* encoded in the RTP payload */
ebaa7e03 910 void (*rtp_callback)(struct AVCodecContext *avctx, void *data, int size, int mb_nb);
81401c1f 911
098eefe1
MN
912 /* statistics, used for 2-pass encoding */
913 int mv_bits;
914 int header_bits;
915 int i_tex_bits;
916 int p_tex_bits;
917 int i_count;
918 int p_count;
919 int skip_count;
b71901e6
MN
920 int misc_bits;
921
922 /**
64863965
MN
923 * number of bits used for the previously encoded frame.
924 * - encoding: set by lavc
7004ffb3 925 * - decoding: unused
b71901e6 926 */
098eefe1 927 int frame_bits;
7004ffb3 928
b71901e6 929 /**
64863965
MN
930 * private data of the user, can be used to carry app specific stuff.
931 * - encoding: set by user
932 * - decoding: set by user
b71901e6
MN
933 */
934 void *opaque;
935
de6d9b64 936 char codec_name[32];
4a663d80
PG
937 enum CodecType codec_type; /* see CODEC_TYPE_xxx */
938 enum CodecID codec_id; /* see CODEC_ID_xxx */
7004ffb3
MN
939
940 /**
941 * fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A').
942 * this is used to workaround some encoder bugs
bd5a6020 943 * - encoding: set by user, if not then the default based on codec_id will be used
7004ffb3
MN
944 * - decoding: set by user, will be converted to upper case by lavc during init
945 */
946 unsigned int codec_tag;
92ba5ffb 947
b71901e6 948 /**
64863965 949 * workaround bugs in encoders which sometimes cannot be detected automatically.
59fa3f96 950 * - encoding: set by user
64863965 951 * - decoding: set by user
b71901e6
MN
952 */
953 int workaround_bugs;
64863965 954#define FF_BUG_AUTODETECT 1 ///< autodetection
4d2858de
MN
955#define FF_BUG_OLD_MSMPEG4 2
956#define FF_BUG_XVID_ILACE 4
957#define FF_BUG_UMP4 8
958#define FF_BUG_NO_PADDING 16
3116cb14 959#define FF_BUG_AMV 32
ac0c6638 960#define FF_BUG_AC_VLC 0 ///< will be removed, libavcodec can now handle these non compliant files by default
03e93d35 961#define FF_BUG_QPEL_CHROMA 64
db794953 962#define FF_BUG_STD_QPEL 128
36df8805 963#define FF_BUG_QPEL_CHROMA2 256
c40c3482 964#define FF_BUG_DIRECT_BLOCKSIZE 512
1c6dcb0f 965#define FF_BUG_EDGE 1024
b44bdf7e 966#define FF_BUG_HPEL_CHROMA 2048
4ccde216 967#define FF_BUG_DC_CLIP 4096
59fa3f96 968#define FF_BUG_MS 8192 ///< workaround various bugs in microsofts broken decoders
4d2858de
MN
969//#define FF_BUG_FAKE_SCALABILITY 16 //autodetection should work 100%
970
b71901e6 971 /**
64863965
MN
972 * luma single coeff elimination threshold.
973 * - encoding: set by user
974 * - decoding: unused
b71901e6 975 */
1f6b6e50 976 int luma_elim_threshold;
b71901e6
MN
977
978 /**
64863965
MN
979 * chroma single coeff elimination threshold.
980 * - encoding: set by user
981 * - decoding: unused
b71901e6 982 */
1f6b6e50 983 int chroma_elim_threshold;
b71901e6
MN
984
985 /**
64863965
MN
986 * strictly follow the std (MPEG4, ...).
987 * - encoding: set by user
988 * - decoding: unused
b71901e6
MN
989 */
990 int strict_std_compliance;
9cd81798
MN
991#define FF_COMPLIANCE_VERY_STRICT 2 ///< strictly conform to a older more strict version of the spec or reference software
992#define FF_COMPLIANCE_STRICT 1 ///< strictly conform to all the things in the spec no matter what consequences
993#define FF_COMPLIANCE_NORMAL 0
994#define FF_COMPLIANCE_INOFFICIAL -1 ///< allow inofficial extensions
995#define FF_COMPLIANCE_EXPERIMENTAL -2 ///< allow non standarized experimental things
996
b71901e6 997 /**
64863965 998 * qscale offset between ip and b frames.
b3a391e8
MN
999 * if > 0 then the last p frame quantizer will be used (q= lastp_q*factor+offset)
1000 * if < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset)
64863965
MN
1001 * - encoding: set by user.
1002 * - decoding: unused
b71901e6
MN
1003 */
1004 float b_quant_offset;
1005
1006 /**
ce3bcaed 1007 * error resilience higher values will detect more errors but may missdetect
64863965
MN
1008 * some more or less valid parts as errors.
1009 * - encoding: unused
1010 * - decoding: set by user
b71901e6 1011 */
1f6b6e50 1012 int error_resilience;
1471c6c2 1013#define FF_ER_CAREFUL 1
ce3bcaed
MN
1014#define FF_ER_COMPLIANT 2
1015#define FF_ER_AGGRESSIVE 3
1016#define FF_ER_VERY_AGGRESSIVE 4
ae72cda6 1017
6b72ac63 1018 /**
1e491e29
MN
1019 * called at the beginning of each frame to get a buffer for it.
1020 * if pic.reference is set then the frame will be read later by lavc
2b5296d2
MN
1021 * avcodec_align_dimensions() should be used to find the required width and
1022 * height, as they normally need to be rounded up to the next multiple of 16
64863965
MN
1023 * - encoding: unused
1024 * - decoding: set by lavc, user can override
b71901e6 1025 */
492cd3a9 1026 int (*get_buffer)(struct AVCodecContext *c, AVFrame *pic);
b71901e6
MN
1027
1028 /**
1e491e29
MN
1029 * called to release buffers which where allocated with get_buffer.
1030 * a released buffer can be reused in get_buffer()
1031 * pic.data[*] must be set to NULL
64863965
MN
1032 * - encoding: unused
1033 * - decoding: set by lavc, user can override
b71901e6 1034 */
492cd3a9 1035 void (*release_buffer)(struct AVCodecContext *c, AVFrame *pic);
0fd90455 1036
b71901e6 1037 /**
e6a2ac34
MN
1038 * if 1 the stream has a 1 frame delay during decoding.
1039 * - encoding: set by lavc
64863965 1040 * - decoding: set by lavc
b71901e6
MN
1041 */
1042 int has_b_frames;
718b27a7
MN
1043
1044 /**
1045 * number of bytes per packet if constant and known or 0
1046 * used by some WAV based audio codecs
1047 */
1048 int block_align;
ce980a95 1049
64863965 1050 int parse_only; /* - decoding only: if true, only parsing is done
917e06c8
FB
1051 (function avcodec_parse_frame()). The frame
1052 data is returned. Only MPEG codecs support this now. */
ce980a95 1053
b71901e6 1054 /**
e4eadb4b 1055 * 0-> h263 quant 1-> mpeg quant.
64863965
MN
1056 * - encoding: set by user.
1057 * - decoding: unused
b71901e6
MN
1058 */
1059 int mpeg_quant;
ce980a95 1060
b71901e6 1061 /**
64863965
MN
1062 * pass1 encoding statistics output buffer.
1063 * - encoding: set by lavc
1064 * - decoding: unused
b71901e6 1065 */
64863965 1066 char *stats_out;
b71901e6
MN
1067
1068 /**
1069 * pass2 encoding statistics input buffer.
1070 * concatenated stuff from stats_out of pass1 should be placed here
64863965
MN
1071 * - encoding: allocated/set/freed by user
1072 * - decoding: unused
b71901e6
MN
1073 */
1074 char *stats_in;
1075
1076 /**
64863965 1077 * ratecontrol qmin qmax limiting method.
b71901e6 1078 * 0-> clipping, 1-> use a nice continous function to limit qscale wthin qmin/qmax
64863965
MN
1079 * - encoding: set by user.
1080 * - decoding: unused
b71901e6 1081 */
ce980a95 1082 float rc_qsquish;
b71901e6 1083
ce980a95
MN
1084 float rc_qmod_amp;
1085 int rc_qmod_freq;
b71901e6
MN
1086
1087 /**
64863965
MN
1088 * ratecontrol override, see RcOverride.
1089 * - encoding: allocated/set/freed by user.
1090 * - decoding: unused
b71901e6 1091 */
ce980a95
MN
1092 RcOverride *rc_override;
1093 int rc_override_count;
b71901e6
MN
1094
1095 /**
64863965
MN
1096 * rate control equation.
1097 * - encoding: set by user
1098 * - decoding: unused
b71901e6 1099 */
ce980a95 1100 char *rc_eq;
b71901e6
MN
1101
1102 /**
64863965
MN
1103 * maximum bitrate.
1104 * - encoding: set by user.
1105 * - decoding: unused
b71901e6 1106 */
ce980a95 1107 int rc_max_rate;
b71901e6
MN
1108
1109 /**
64863965
MN
1110 * minimum bitrate.
1111 * - encoding: set by user.
1112 * - decoding: unused
b71901e6 1113 */
ce980a95 1114 int rc_min_rate;
b71901e6
MN
1115
1116 /**
64863965
MN
1117 * decoder bitstream buffer size.
1118 * - encoding: set by user.
1119 * - decoding: unused
b71901e6 1120 */
ce980a95
MN
1121 int rc_buffer_size;
1122 float rc_buffer_aggressivity;
b71901e6
MN
1123
1124 /**
64863965 1125 * qscale factor between p and i frames.
a1e257b2
MN
1126 * if > 0 then the last p frame quantizer will be used (q= lastp_q*factor+offset)
1127 * if < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset)
64863965
MN
1128 * - encoding: set by user.
1129 * - decoding: unused
b71901e6
MN
1130 */
1131 float i_quant_factor;
1132
1133 /**
64863965 1134 * qscale offset between p and i frames.
64863965
MN
1135 * - encoding: set by user.
1136 * - decoding: unused
b71901e6
MN
1137 */
1138 float i_quant_offset;
1139
1140 /**
64863965
MN
1141 * initial complexity for pass1 ratecontrol.
1142 * - encoding: set by user.
1143 * - decoding: unused
b71901e6 1144 */
ce980a95 1145 float rc_initial_cplx;
917e06c8 1146
b71901e6 1147 /**
64863965
MN
1148 * dct algorithm, see FF_DCT_* below.
1149 * - encoding: set by user
1150 * - decoding: unused
b71901e6 1151 */
28db7fce 1152 int dct_algo;
c7e07931 1153#define FF_DCT_AUTO 0
28db7fce 1154#define FF_DCT_FASTINT 1
c7e07931
MO
1155#define FF_DCT_INT 2
1156#define FF_DCT_MMX 3
1157#define FF_DCT_MLIB 4
05c4072b 1158#define FF_DCT_ALTIVEC 5
65e4c8c9 1159#define FF_DCT_FAAN 6
c5d309f2
MN
1160
1161 /**
64863965
MN
1162 * luminance masking (0-> disabled).
1163 * - encoding: set by user
1164 * - decoding: unused
c5d309f2
MN
1165 */
1166 float lumi_masking;
1167
1168 /**
64863965
MN
1169 * temporary complexity masking (0-> disabled).
1170 * - encoding: set by user
1171 * - decoding: unused
c5d309f2
MN
1172 */
1173 float temporal_cplx_masking;
1174
1175 /**
64863965
MN
1176 * spatial complexity masking (0-> disabled).
1177 * - encoding: set by user
1178 * - decoding: unused
c5d309f2
MN
1179 */
1180 float spatial_cplx_masking;
1181
1182 /**
64863965
MN
1183 * p block masking (0-> disabled).
1184 * - encoding: set by user
1185 * - decoding: unused
c5d309f2
MN
1186 */
1187 float p_masking;
15415af4 1188
5e746b99 1189 /**
64863965
MN
1190 * darkness masking (0-> disabled).
1191 * - encoding: set by user
1192 * - decoding: unused
5e746b99
MN
1193 */
1194 float dark_masking;
0c2dd16e 1195
3a694b04
NK
1196
1197 /* for binary compatibility */
1198 int unused;
1199
0c2dd16e 1200 /**
64863965
MN
1201 * idct algorithm, see FF_IDCT_* below.
1202 * - encoding: set by user
1203 * - decoding: set by user
2ad1516a
MN
1204 */
1205 int idct_algo;
1206#define FF_IDCT_AUTO 0
1207#define FF_IDCT_INT 1
1208#define FF_IDCT_SIMPLE 2
1209#define FF_IDCT_SIMPLEMMX 3
1210#define FF_IDCT_LIBMPEG2MMX 4
1211#define FF_IDCT_PS2 5
1212#define FF_IDCT_MLIB 6
1213#define FF_IDCT_ARM 7
05c4072b 1214#define FF_IDCT_ALTIVEC 8
b82cdc72 1215#define FF_IDCT_SH4 9
bd7d1ea7 1216#define FF_IDCT_SIMPLEARM 10
0fa8158d 1217#define FF_IDCT_H264 11
8b6103da 1218#define FF_IDCT_VP3 12
eba9ae3c 1219#define FF_IDCT_IPP 13
84740d59 1220#define FF_IDCT_XVIDMMX 14
2ad1516a 1221
144f0625 1222 /**
64863965
MN
1223 * slice count.
1224 * - encoding: set by lavc
1225 * - decoding: set by user (or 0)
144f0625
MN
1226 */
1227 int slice_count;
1228 /**
64863965
MN
1229 * slice offsets in the frame in bytes.
1230 * - encoding: set/allocated by lavc
1231 * - decoding: set/allocated by user (or NULL)
144f0625
MN
1232 */
1233 int *slice_offset;
1234
4d2858de 1235 /**
64863965
MN
1236 * error concealment flags.
1237 * - encoding: unused
1238 * - decoding: set by user
4d2858de
MN
1239 */
1240 int error_concealment;
1241#define FF_EC_GUESS_MVS 1
1242#define FF_EC_DEBLOCK 2
1243
6b72ac63 1244 /**
bec89a84 1245 * dsp_mask could be add used to disable unwanted CPU features
8350df97 1246 * CPU features (i.e. MMX, SSE. ...)
bec89a84
ZK
1247 *
1248 * with FORCE flag you may instead enable given CPU features
1249 * (Dangerous: usable in case of misdetection, improper usage however will
1250 * result into program crash)
1251 */
1252 unsigned dsp_mask;
1253#define FF_MM_FORCE 0x80000000 /* force usage of selected flags (OR) */
1254 /* lower 16 bits - CPU features */
1255#ifdef HAVE_MMX
1256#define FF_MM_MMX 0x0001 /* standard MMX */
1257#define FF_MM_3DNOW 0x0004 /* AMD 3DNOW */
1258#define FF_MM_MMXEXT 0x0002 /* SSE integer functions or AMD MMX ext */
1259#define FF_MM_SSE 0x0008 /* SSE functions */
1260#define FF_MM_SSE2 0x0010 /* PIV SSE2 functions */
e42a152b 1261#define FF_MM_3DNOWEXT 0x0020 /* AMD 3DNowExt */
bec89a84 1262#endif /* HAVE_MMX */
eba9ae3c
GB
1263#ifdef HAVE_IWMMXT
1264#define FF_MM_IWMMXT 0x0100 /* XScale IWMMXT */
1265#endif /* HAVE_IWMMXT */
11f18faf
MN
1266
1267 /**
64863965
MN
1268 * bits per sample/pixel from the demuxer (needed for huffyuv).
1269 * - encoding: set by lavc
1270 * - decoding: set by user
11f18faf
MN
1271 */
1272 int bits_per_sample;
1273
1274 /**
64863965
MN
1275 * prediction method (needed for huffyuv).
1276 * - encoding: set by user
1277 * - decoding: unused
11f18faf
MN
1278 */
1279 int prediction_method;
1280#define FF_PRED_LEFT 0
1281#define FF_PRED_PLANE 1
1282#define FF_PRED_MEDIAN 2
5d3cea3a
MN
1283
1284 /**
5ff85f1d 1285 * sample aspect ratio (0 if unknown).
1f26c6f3 1286 * numerator and denominator must be relative prime and smaller then 256 for some video standards
64863965
MN
1287 * - encoding: set by user.
1288 * - decoding: set by lavc.
5d3cea3a 1289 */
5ff85f1d 1290 AVRational sample_aspect_ratio;
1e491e29
MN
1291
1292 /**
64863965
MN
1293 * the picture in the bitstream.
1294 * - encoding: set by lavc
1295 * - decoding: set by lavc
1e491e29 1296 */
492cd3a9 1297 AVFrame *coded_frame;
c8c437bc
MN
1298
1299 /**
64863965
MN
1300 * debug.
1301 * - encoding: set by user.
1302 * - decoding: set by user.
c8c437bc
MN
1303 */
1304 int debug;
1305#define FF_DEBUG_PICT_INFO 1
1306#define FF_DEBUG_RC 2
1307#define FF_DEBUG_BITSTREAM 4
1308#define FF_DEBUG_MB_TYPE 8
1309#define FF_DEBUG_QP 16
1310#define FF_DEBUG_MV 32
8289c6fa 1311#define FF_DEBUG_DCT_COEFF 0x00000040
41773b73
MN
1312#define FF_DEBUG_SKIP 0x00000080
1313#define FF_DEBUG_STARTCODE 0x00000100
1314#define FF_DEBUG_PTS 0x00000200
46b4feec 1315#define FF_DEBUG_ER 0x00000400
0da71265 1316#define FF_DEBUG_MMCO 0x00000800
8fc6c2b5 1317#define FF_DEBUG_BUGS 0x00001000
864119b6
MN
1318#define FF_DEBUG_VIS_QP 0x00002000
1319#define FF_DEBUG_VIS_MB_TYPE 0x00004000
140cb663
MN
1320
1321 /**
0c9bbaec
WH
1322 * debug.
1323 * - encoding: set by user.
1324 * - decoding: set by user.
1325 */
1326 int debug_mv;
1327#define FF_DEBUG_VIS_MV_P_FOR 0x00000001 //visualize forward predicted MVs of P frames
1328#define FF_DEBUG_VIS_MV_B_FOR 0x00000002 //visualize forward predicted MVs of B frames
1329#define FF_DEBUG_VIS_MV_B_BACK 0x00000004 //visualize backward predicted MVs of B frames
1330
1331 /**
64863965
MN
1332 * error.
1333 * - encoding: set by lavc if flags&CODEC_FLAG_PSNR
1334 * - decoding: unused
140cb663
MN
1335 */
1336 uint64_t error[4];
17a70fde
MN
1337
1338 /**
64863965 1339 * minimum MB quantizer.
6e0d8c06 1340 * - encoding: unused
64863965 1341 * - decoding: unused
17a70fde
MN
1342 */
1343 int mb_qmin;
1344
1345 /**
64863965 1346 * maximum MB quantizer.
6e0d8c06 1347 * - encoding: unused
64863965 1348 * - decoding: unused
17a70fde
MN
1349 */
1350 int mb_qmax;
1457ab52
MN
1351
1352 /**
64863965
MN
1353 * motion estimation compare function.
1354 * - encoding: set by user.
1355 * - decoding: unused
1457ab52
MN
1356 */
1357 int me_cmp;
1358 /**
64863965
MN
1359 * subpixel motion estimation compare function.
1360 * - encoding: set by user.
1361 * - decoding: unused
1457ab52
MN
1362 */
1363 int me_sub_cmp;
1364 /**
64863965
MN
1365 * macroblock compare function (not supported yet).
1366 * - encoding: set by user.
1367 * - decoding: unused
1457ab52
MN
1368 */
1369 int mb_cmp;
622348f9
MN
1370 /**
1371 * interlaced dct compare function
1372 * - encoding: set by user.
1373 * - decoding: unused
1374 */
1375 int ildct_cmp;
1457ab52
MN
1376#define FF_CMP_SAD 0
1377#define FF_CMP_SSE 1
1378#define FF_CMP_SATD 2
1379#define FF_CMP_DCT 3
1380#define FF_CMP_PSNR 4
1381#define FF_CMP_BIT 5
1382#define FF_CMP_RD 6
1383#define FF_CMP_ZERO 7
622348f9
MN
1384#define FF_CMP_VSAD 8
1385#define FF_CMP_VSSE 9
e6a2ac34 1386#define FF_CMP_NSSE 10
26efc54e
MN
1387#define FF_CMP_W53 11
1388#define FF_CMP_W97 12
0fd6aea1 1389#define FF_CMP_DCTMAX 13
1457ab52
MN
1390#define FF_CMP_CHROMA 256
1391
1392 /**
64863965
MN
1393 * ME diamond size & shape.
1394 * - encoding: set by user.
1395 * - decoding: unused
1457ab52
MN
1396 */
1397 int dia_size;
b07a5980
MN
1398
1399 /**
64863965
MN
1400 * amount of previous MV predictors (2a+1 x 2a+1 square).
1401 * - encoding: set by user.
1402 * - decoding: unused
b07a5980
MN
1403 */
1404 int last_predictor_count;
70ac76c0 1405
f5fb6b34 1406 /**
64863965
MN
1407 * pre pass for motion estimation.
1408 * - encoding: set by user.
1409 * - decoding: unused
f5fb6b34
MN
1410 */
1411 int pre_me;
b07a5980 1412
70ac76c0 1413 /**
64863965
MN
1414 * motion estimation pre pass compare function.
1415 * - encoding: set by user.
1416 * - decoding: unused
70ac76c0
MN
1417 */
1418 int me_pre_cmp;
826f429a 1419
70ac76c0 1420 /**
64863965
MN
1421 * ME pre pass diamond size & shape.
1422 * - encoding: set by user.
1423 * - decoding: unused
70ac76c0
MN
1424 */
1425 int pre_dia_size;
1426
826f429a 1427 /**
64863965
MN
1428 * subpel ME quality.
1429 * - encoding: set by user.
1430 * - decoding: unused
826f429a
MN
1431 */
1432 int me_subpel_quality;
1433
a33c7159 1434 /**
64863965 1435 * callback to negotiate the pixelFormat.
a33c7159
MN
1436 * @param fmt is the list of formats which are supported by the codec,
1437 * its terminated by -1 as 0 is a valid format, the formats are ordered by quality
1438 * the first is allways the native one
1439 * @return the choosen format
64863965
MN
1440 * - encoding: unused
1441 * - decoding: set by user, if not set then the native format will always be choosen
a33c7159 1442 */
494c56d3 1443 enum PixelFormat (*get_format)(struct AVCodecContext *s, const enum PixelFormat * fmt);
e2f9490e
FB
1444
1445 /**
1446 * DTG active format information (additionnal aspect ratio
1447 * information only used in DVB MPEG2 transport streams). 0 if
1448 * not set.
1449 *
64863965
MN
1450 * - encoding: unused.
1451 * - decoding: set by decoder
e2f9490e
FB
1452 */
1453 int dtg_active_format;
1454#define FF_DTG_AFD_SAME 8
1455#define FF_DTG_AFD_4_3 9
1456#define FF_DTG_AFD_16_9 10
1457#define FF_DTG_AFD_14_9 11
1458#define FF_DTG_AFD_4_3_SP_14_9 13
1459#define FF_DTG_AFD_16_9_SP_14_9 14
1460#define FF_DTG_AFD_SP_4_3 15
1461
ebbcdc9a
MN
1462 /**
1463 * Maximum motion estimation search range in subpel units.
1464 * if 0 then no limit
1465 *
64863965
MN
1466 * - encoding: set by user.
1467 * - decoding: unused.
ebbcdc9a 1468 */
59e0ac8e 1469 int me_range;
ebbcdc9a 1470
65f7062d 1471 /**
1984f635
MN
1472 * intra quantizer bias.
1473 * - encoding: set by user.
1474 * - decoding: unused
1475 */
1476 int intra_quant_bias;
1477#define FF_DEFAULT_QUANT_BIAS 999999
1478
1479 /**
1480 * inter quantizer bias.
1481 * - encoding: set by user.
1482 * - decoding: unused
1483 */
1484 int inter_quant_bias;
5cd62665
ZK
1485
1486 /**
1487 * color table ID.
1488 * - encoding: unused.
1489 * - decoding: which clrtable should be used for 8bit RGB images
1490 * table have to be stored somewhere FIXME
1491 */
1492 int color_table_id;
1984f635 1493
d90cf87b
MN
1494 /**
1495 * internal_buffer count.
bb628dae 1496 * Don't touch, used by lavc default_get_buffer()
d90cf87b
MN
1497 */
1498 int internal_buffer_count;
1499
1500 /**
1501 * internal_buffers.
bb628dae 1502 * Don't touch, used by lavc default_get_buffer()
d90cf87b
MN
1503 */
1504 void *internal_buffer;
158c7f05
MN
1505
1506#define FF_LAMBDA_SHIFT 7
1507#define FF_LAMBDA_SCALE (1<<FF_LAMBDA_SHIFT)
1508#define FF_QP2LAMBDA 118 ///< factor to convert from H.263 QP to lambda
1509#define FF_LAMBDA_MAX (256*128-1)
1510
1511#define FF_QUALITY_SCALE FF_LAMBDA_SCALE //FIXME maybe remove
3d2e8cce
MN
1512 /**
1513 * global quality for codecs which cannot change it per frame.
1514 * this should be proportional to MPEG1/2/4 qscale.
1515 * - encoding: set by user.
1516 * - decoding: unused
1517 */
1518 int global_quality;
11e659c2
MN
1519
1520#define FF_CODER_TYPE_VLC 0
1521#define FF_CODER_TYPE_AC 1
1522 /**
1523 * coder type
1524 * - encoding: set by user.
1525 * - decoding: unused
1526 */
1527 int coder_type;
1528
1529 /**
1530 * context model
1531 * - encoding: set by user.
1532 * - decoding: unused
1533 */
1534 int context_model;
3bb07d61
MN
1535
1536 /**
1537 * slice flags
1538 * - encoding: unused
1539 * - decoding: set by user.
1540 */
1541 int slice_flags;
1542#define SLICE_FLAG_CODED_ORDER 0x0001 ///< draw_horiz_band() is called in coded order instead of display
1543#define SLICE_FLAG_ALLOW_FIELD 0x0002 ///< allow draw_horiz_band() with field slices (MPEG2 field pics)
1544#define SLICE_FLAG_ALLOW_PLANE 0x0004 ///< allow draw_horiz_band() with 1 component at a time (SVQ1)
1545
fb364ada
IK
1546 /**
1547 * XVideo Motion Acceleration
1548 * - encoding: forbidden
1549 * - decoding: set by decoder
1550 */
1551 int xvmc_acceleration;
7d1c3fc1
MN
1552
1553 /**
1554 * macroblock decision mode
1555 * - encoding: set by user.
1556 * - decoding: unused
1557 */
1558 int mb_decision;
1559#define FF_MB_DECISION_SIMPLE 0 ///< uses mb_cmp
1560#define FF_MB_DECISION_BITS 1 ///< chooses the one which needs the fewest bits
1561#define FF_MB_DECISION_RD 2 ///< rate distoration
d6eb3c50
MN
1562
1563 /**
1564 * custom intra quantization matrix
1565 * - encoding: set by user, can be NULL
1566 * - decoding: set by lavc
1567 */
1568 uint16_t *intra_matrix;
1569
1570 /**
1571 * custom inter quantization matrix
1572 * - encoding: set by user, can be NULL
1573 * - decoding: set by lavc
1574 */
1575 uint16_t *inter_matrix;
7d1c3fc1 1576
541ae140
MN
1577 /**
1578 * fourcc from the AVI stream header (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A').
1579 * this is used to workaround some encoder bugs
1580 * - encoding: unused
1581 * - decoding: set by user, will be converted to upper case by lavc during init
1582 */
1583 unsigned int stream_codec_tag;
05fbd0a2
MN
1584
1585 /**
1586 * scene change detection threshold.
1587 * 0 is default, larger means fewer detected scene changes
1588 * - encoding: set by user.
1589 * - decoding: unused
1590 */
1591 int scenechange_threshold;
158c7f05
MN
1592
1593 /**
1594 * minimum lagrange multipler
1595 * - encoding: set by user.
1596 * - decoding: unused
1597 */
1598 int lmin;
1599
1600 /**
1601 * maximum lagrange multipler
1602 * - encoding: set by user.
1603 * - decoding: unused
1604 */
1605 int lmax;
2a2bbcb0
MM
1606
1607 /**
1608 * Palette control structure
1609 * - encoding: ??? (no palette-enabled encoder yet)
1610 * - decoding: set by user.
1611 */
1612 struct AVPaletteControl *palctrl;
821cb11f
MN
1613
1614 /**
1615 * noise reduction strength
1616 * - encoding: set by user.
1617 * - decoding: unused
1618 */
1619 int noise_reduction;
fa384dcc 1620
074c4ca7 1621 /**
e1c2a5a0
RT
1622 * called at the beginning of a frame to get cr buffer for it.
1623 * buffer type (size, hints) must be the same. lavc won't check it.
1624 * lavc will pass previous buffer in pic, function should return
1625 * same buffer or new buffer with old frame "painted" into it.
1626 * if pic.data[0] == NULL must behave like get_buffer().
074c4ca7 1627 * - encoding: unused
e1c2a5a0 1628 * - decoding: set by lavc, user can override
074c4ca7 1629 */
e1c2a5a0 1630 int (*reget_buffer)(struct AVCodecContext *c, AVFrame *pic);
ba58dabc
MN
1631
1632 /**
1633 * number of bits which should be loaded into the rc buffer before decoding starts
1634 * - encoding: set by user.
1635 * - decoding: unused
1636 */
1637 int rc_initial_buffer_occupancy;
1638
1639 /**
1640 *
1641 * - encoding: set by user.
1642 * - decoding: unused
1643 */
1644 int inter_threshold;
1645
1646 /**
1647 * CODEC_FLAG2_*.
1648 * - encoding: set by user.
1649 * - decoding: set by user.
1650 */
1651 int flags2;
7ebfc0ea
MN
1652
1653 /**
1654 * simulates errors in the bitstream to test error concealment.
1655 * - encoding: set by user.
1656 * - decoding: unused.
1657 */
1658 int error_rate;
a1e257b2
MN
1659
1660 /**
1661 * MP3 antialias algorithm, see FF_AA_* below.
1662 * - encoding: unused
1663 * - decoding: set by user
1664 */
1665 int antialias_algo;
1666#define FF_AA_AUTO 0
1667#define FF_AA_FASTINT 1 //not implemented yet
1668#define FF_AA_INT 2
1669#define FF_AA_FLOAT 3
77ea0d4b
MN
1670 /**
1671 * Quantizer noise shaping.
1672 * - encoding: set by user
1673 * - decoding: unused
1674 */
1675 int quantizer_noise_shaping;
9c3d33d6
MN
1676
1677 /**
1678 * Thread count.
1679 * is used to decide how many independant tasks should be passed to execute()
1680 * - encoding: set by user
1681 * - decoding: set by user
1682 */
1683 int thread_count;
1684
1685 /**
1686 * the codec may call this to execute several independant things. it will return only after
1687 * finishing all tasks, the user may replace this with some multithreaded implementation, the
1688 * default implementation will execute the parts serially
399cec2f 1689 * @param count the number of things to execute
9c3d33d6
MN
1690 * - encoding: set by lavc, user can override
1691 * - decoding: set by lavc, user can override
1692 */
1693 int (*execute)(struct AVCodecContext *c, int (*func)(struct AVCodecContext *c2, void *arg), void **arg2, int *ret, int count);
1694
1695 /**
1696 * Thread opaque.
1697 * can be used by execute() to store some per AVCodecContext stuff.
1698 * - encoding: set by execute()
1699 * - decoding: set by execute()
1700 */
1701 void *thread_opaque;
a4d36c11
MN
1702
1703 /**
f20f8a8b
MN
1704 * Motion estimation threshold. under which no motion estimation is
1705 * performed, but instead the user specified motion vectors are used
a4d36c11
MN
1706 *
1707 * - encoding: set by user
f20f8a8b 1708 * - decoding: unused
a4d36c11 1709 */
2750b827 1710 int me_threshold;
f20f8a8b
MN
1711
1712 /**
1713 * Macroblock threshold. under which the user specified macroblock types will be used
1714 * - encoding: set by user
1715 * - decoding: unused
1716 */
1717 int mb_threshold;
bf266e19
MN
1718
1719 /**
d4c5d2ad 1720 * precision of the intra dc coefficient - 8.
bf266e19
MN
1721 * - encoding: set by user
1722 * - decoding: unused
1723 */
1724 int intra_dc_precision;
d4c5d2ad
MN
1725
1726 /**
1727 * noise vs. sse weight for the nsse comparsion function.
1728 * - encoding: set by user
1729 * - decoding: unused
1730 */
1731 int nsse_weight;
0dfd33c3
MN
1732
1733 /**
160d679c 1734 * number of macroblock rows at the top which are skipped.
0dfd33c3
MN
1735 * - encoding: unused
1736 * - decoding: set by user
1737 */
1738 int skip_top;
1739
1740 /**
160d679c 1741 * number of macroblock rows at the bottom which are skipped.
0dfd33c3
MN
1742 * - encoding: unused
1743 * - decoding: set by user
1744 */
1745 int skip_bottom;
baced9f5
MN
1746
1747 /**
1748 * profile
1749 * - encoding: set by user
1750 * - decoding: set by lavc
1751 */
1752 int profile;
1753#define FF_PROFILE_UNKNOWN -99
1754
1755 /**
1756 * level
1757 * - encoding: set by user
1758 * - decoding: set by lavc
1759 */
1760 int level;
1761#define FF_LEVEL_UNKNOWN -99
178fcca8
MN
1762
1763 /**
1764 * low resolution decoding. 1-> 1/2 size, 2->1/4 size
1765 * - encoding: unused
1766 * - decoding: set by user
1767 */
1768 int lowres;
21adafec
MN
1769
1770 /**
bbf18b21 1771 * bitsream width / height. may be different from width/height if lowres
21adafec
MN
1772 * or other things are used
1773 * - encoding: unused
1774 * - decoding: set by user before init if known, codec should override / dynamically change if needed
1775 */
1776 int coded_width, coded_height;
bbf18b21
MN
1777
1778 /**
1779 * frame skip threshold
1780 * - encoding: set by user
1781 * - decoding: unused
1782 */
1783 int frame_skip_threshold;
1784
1785 /**
1786 * frame skip factor
1787 * - encoding: set by user
1788 * - decoding: unused
1789 */
1790 int frame_skip_factor;
0fd6aea1
MN
1791
1792 /**
1793 * frame skip exponent
1794 * - encoding: set by user
1795 * - decoding: unused
1796 */
1797 int frame_skip_exp;
1798
1799 /**
1800 * frame skip comparission function
1801 * - encoding: set by user.
1802 * - decoding: unused
1803 */
1804 int frame_skip_cmp;
957c743a
CM
1805
1806 /**
1807 * border processing masking. raises the quantizer for mbs on the borders
1808 * of the picture.
1809 * - encoding: set by user
1810 * - decoding: unused
1811 */
1812 float border_masking;
6e0d8c06
MN
1813
1814 /**
1815 * minimum MB lagrange multipler.
1816 * - encoding: set by user.
1817 * - decoding: unused
1818 */
1819 int mb_lmin;
1820
1821 /**
1822 * maximum MB lagrange multipler.
1823 * - encoding: set by user.
1824 * - decoding: unused
1825 */
1826 int mb_lmax;
09c3e44e
MN
1827
1828 /**
1829 *
1830 * - encoding: set by user.
1831 * - decoding: unused
1832 */
1833 int me_penalty_compensation;
8c3eba7c
MN
1834
1835 /**
1836 *
1837 * - encoding: unused
1838 * - decoding: set by user.
1839 */
1840 enum AVDiscard skip_loop_filter;
1841
1842 /**
1843 *
1844 * - encoding: unused
1845 * - decoding: set by user.
1846 */
1847 enum AVDiscard skip_idct;
1848
1849 /**
1850 *
1851 * - encoding: unused
1852 * - decoding: set by user.
1853 */
1854 enum AVDiscard skip_frame;
de6d9b64
FB
1855} AVCodecContext;
1856
64863965
MN
1857/**
1858 * AVCodec.
1859 */
de6d9b64 1860typedef struct AVCodec {
18f77016 1861 const char *name;
5d234974 1862 enum CodecType type;
9297ddd3 1863 enum CodecID id;
de6d9b64
FB
1864 int priv_data_size;
1865 int (*init)(AVCodecContext *);
0c1a9eda 1866 int (*encode)(AVCodecContext *, uint8_t *buf, int buf_size, void *data);
de6d9b64 1867 int (*close)(AVCodecContext *);
0fd90455 1868 int (*decode)(AVCodecContext *, void *outdata, int *outdata_size,
0c1a9eda 1869 uint8_t *buf, int buf_size);
bf89e6b1 1870 int capabilities;
a1043f9c 1871#if LIBAVCODEC_VERSION_INT < ((50<<16)+(0<<8)+0)
40c5fa26 1872 void *dummy; // FIXME remove next time we break binary compatibility
a1043f9c 1873#endif
de6d9b64 1874 struct AVCodec *next;
7a06ff14 1875 void (*flush)(AVCodecContext *);
b0df362b 1876 const AVRational *supported_framerates; ///array of supported framerates, or NULL if any, array is terminated by {0,0}
fcee0164 1877 const enum PixelFormat *pix_fmts; ///array of supported pixel formats, or NULL if unknown, array is terminanted by -1
de6d9b64
FB
1878} AVCodec;
1879
97d96aaa 1880/**
d7425f59
MN
1881 * four components are given, that's all.
1882 * the last component is alpha
1883 */
de6d9b64 1884typedef struct AVPicture {
0c1a9eda 1885 uint8_t *data[4];
cd394651 1886 int linesize[4]; ///< number of bytes per line
de6d9b64
FB
1887} AVPicture;
1888
ba118447
MM
1889/**
1890 * AVPaletteControl
1891 * This structure defines a method for communicating palette changes
1892 * between and demuxer and a decoder.
1893 */
2e99641b 1894#define AVPALETTE_SIZE 1024
432d84c3 1895#define AVPALETTE_COUNT 256
ba118447
MM
1896typedef struct AVPaletteControl {
1897
1898 /* demuxer sets this to 1 to indicate the palette has changed;
1899 * decoder resets to 0 */
1900 int palette_changed;
1901
2a2bbcb0
MM
1902 /* 4-byte ARGB palette entries, stored in native byte order; note that
1903 * the individual palette components should be on a 8-bit scale; if
1904 * the palette data comes from a IBM VGA native format, the component
1905 * data is probably 6 bits in size and needs to be scaled */
2e99641b 1906 unsigned int palette[AVPALETTE_COUNT];
ba118447
MM
1907
1908} AVPaletteControl;
1909
c6ec28b1 1910typedef struct AVSubtitleRect {
240c1657
FB
1911 uint16_t x;
1912 uint16_t y;
1913 uint16_t w;
1914 uint16_t h;
1915 uint16_t nb_colors;
240c1657
FB
1916 int linesize;
1917 uint32_t *rgba_palette;
1918 uint8_t *bitmap;
c6ec28b1
MN
1919} AVSubtitleRect;
1920
1921typedef struct AVSubtitle {
1922 uint16_t format; /* 0 = graphics */
1923 uint32_t start_display_time; /* relative to packet pts, in ms */
1924 uint32_t end_display_time; /* relative to packet pts, in ms */
1925 uint32_t num_rects;
1926 AVSubtitleRect *rects;
240c1657
FB
1927} AVSubtitle;
1928
de6d9b64
FB
1929extern AVCodec ac3_encoder;
1930extern AVCodec mp2_encoder;
9d36bdc9 1931extern AVCodec mp3lame_encoder;
81e0d0b4 1932extern AVCodec oggvorbis_encoder;
5c5dea3f 1933extern AVCodec oggtheora_encoder;
29d48296 1934extern AVCodec faac_encoder;
1ddadfa9 1935extern AVCodec xvid_encoder;
de6d9b64 1936extern AVCodec mpeg1video_encoder;
029911d1 1937extern AVCodec mpeg2video_encoder;
1c3990db 1938extern AVCodec h261_encoder;
de6d9b64
FB
1939extern AVCodec h263_encoder;
1940extern AVCodec h263p_encoder;
d4f5d74a 1941extern AVCodec flv_encoder;
de6d9b64 1942extern AVCodec rv10_encoder;
68b94c35 1943extern AVCodec rv20_encoder;
6faa4645 1944extern AVCodec dvvideo_encoder;
de6d9b64 1945extern AVCodec mjpeg_encoder;
b1e6b355 1946extern AVCodec ljpeg_encoder;
4eff7cf4 1947extern AVCodec png_encoder;
5b6d5596
MN
1948extern AVCodec ppm_encoder;
1949extern AVCodec pgm_encoder;
1950extern AVCodec pgmyuv_encoder;
1951extern AVCodec pbm_encoder;
1952extern AVCodec pam_encoder;
bf89e6b1 1953extern AVCodec mpeg4_encoder;
84afee34
MN
1954extern AVCodec msmpeg4v1_encoder;
1955extern AVCodec msmpeg4v2_encoder;
1956extern AVCodec msmpeg4v3_encoder;
0151a6f5
MN
1957extern AVCodec wmv1_encoder;
1958extern AVCodec wmv2_encoder;
11f18faf 1959extern AVCodec huffyuv_encoder;
f37b9768 1960extern AVCodec ffvhuff_encoder;
0da71265 1961extern AVCodec h264_encoder;
3d2e8cce 1962extern AVCodec asv1_encoder;
9b56edf5 1963extern AVCodec asv2_encoder;
be3564ed 1964extern AVCodec vcr1_encoder;
5e20f836 1965extern AVCodec ffv1_encoder;
791e7b83 1966extern AVCodec snow_encoder;
c3bf0288 1967extern AVCodec mdec_encoder;
a273bbfb 1968extern AVCodec zlib_encoder;
54f5fd22
AB
1969extern AVCodec sonic_encoder;
1970extern AVCodec sonic_ls_encoder;
3b64893d 1971extern AVCodec svq1_encoder;
6662ec29 1972extern AVCodec x264_encoder;
de6d9b64
FB
1973
1974extern AVCodec h263_decoder;
c6148de2 1975extern AVCodec h261_decoder;
bf89e6b1 1976extern AVCodec mpeg4_decoder;
84afee34
MN
1977extern AVCodec msmpeg4v1_decoder;
1978extern AVCodec msmpeg4v2_decoder;
1979extern AVCodec msmpeg4v3_decoder;
e1a9dbff 1980extern AVCodec wmv1_decoder;
0151a6f5 1981extern AVCodec wmv2_decoder;
21aa398f
AB
1982extern AVCodec vc9_decoder;
1983extern AVCodec wmv3_decoder;
922bc38d
MN
1984extern AVCodec mpeg1video_decoder;
1985extern AVCodec mpeg2video_decoder;
c512b303 1986extern AVCodec mpegvideo_decoder;
fb364ada 1987extern AVCodec mpeg_xvmc_decoder;
de6d9b64 1988extern AVCodec h263i_decoder;
d4f5d74a 1989extern AVCodec flv_decoder;
de6d9b64 1990extern AVCodec rv10_decoder;
68b94c35 1991extern AVCodec rv20_decoder;
3f05305d
MN
1992extern AVCodec rv30_decoder;
1993extern AVCodec rv40_decoder;
be8ffec9 1994extern AVCodec svq1_decoder;
8b82a956 1995extern AVCodec svq3_decoder;
020fcc94 1996extern AVCodec dvvideo_decoder;
bc8d1857
FB
1997extern AVCodec wmav1_decoder;
1998extern AVCodec wmav2_decoder;
4e66ab3b 1999extern AVCodec mjpeg_decoder;
b135d9fb 2000extern AVCodec mjpegb_decoder;
5e83dec4 2001extern AVCodec sp5x_decoder;
4eff7cf4 2002extern AVCodec png_decoder;
4b1f4f23 2003extern AVCodec mp2_decoder;
a96b68b7 2004extern AVCodec mp3_decoder;
1ede228a 2005extern AVCodec mp3adu_decoder;
d2a7718d 2006extern AVCodec mp3on4_decoder;
d9b1c197 2007extern AVCodec qdm2_decoder;
e0f7e329 2008extern AVCodec cook_decoder;
3f95e843
FR
2009extern AVCodec mace3_decoder;
2010extern AVCodec mace6_decoder;
11f18faf 2011extern AVCodec huffyuv_decoder;
f37b9768 2012extern AVCodec ffvhuff_decoder;
3aca208a 2013extern AVCodec oggvorbis_decoder;
5c5dea3f 2014extern AVCodec oggtheora_decoder;
f70f7c6d 2015extern AVCodec cyuv_decoder;
0da71265 2016extern AVCodec h264_decoder;
deabd4fd 2017extern AVCodec indeo3_decoder;
d86053a4 2018extern AVCodec vp3_decoder;
f44ee2c3 2019extern AVCodec theora_decoder;
891f64b3 2020extern AVCodec amr_nb_decoder;
bc634f6f 2021extern AVCodec amr_nb_encoder;
d663a1fd
MN
2022extern AVCodec amr_wb_encoder;
2023extern AVCodec amr_wb_decoder;
280bd7b7
ZK
2024extern AVCodec aac_decoder;
2025extern AVCodec mpeg4aac_decoder;
3d2e8cce 2026extern AVCodec asv1_decoder;
9b56edf5 2027extern AVCodec asv2_decoder;
be3564ed 2028extern AVCodec vcr1_decoder;
3aff069b 2029extern AVCodec cljr_decoder;
5e20f836 2030extern AVCodec ffv1_decoder;
791e7b83 2031extern AVCodec snow_decoder;
8809cfee 2032extern AVCodec fourxm_decoder;
c3bf0288 2033extern AVCodec mdec_decoder;
3ef8be2b
MM
2034extern AVCodec roq_decoder;
2035extern AVCodec interplay_video_decoder;
9937e686 2036extern AVCodec xan_wc3_decoder;
2fdf638b
MM
2037extern AVCodec rpza_decoder;
2038extern AVCodec cinepak_decoder;
2039extern AVCodec msrle_decoder;
2040extern AVCodec msvideo1_decoder;
6955a882 2041extern AVCodec vqa_decoder;
4120a53a 2042extern AVCodec idcin_decoder;
1dc1ed99 2043extern AVCodec eightbps_decoder;
11e29a41 2044extern AVCodec smc_decoder;
42cad81a 2045extern AVCodec flic_decoder;
fafa0b75
MM
2046extern AVCodec vmdvideo_decoder;
2047extern AVCodec vmdaudio_decoder;
9a4117d5 2048extern AVCodec truemotion1_decoder;
64af6168 2049extern AVCodec truemotion2_decoder;
a273bbfb
RT
2050extern AVCodec mszh_decoder;
2051extern AVCodec zlib_decoder;
b8414bbd
NK
2052extern AVCodec ra_144_decoder;
2053extern AVCodec ra_288_decoder;
3ef8be2b
MM
2054extern AVCodec roq_dpcm_decoder;
2055extern AVCodec interplay_dpcm_decoder;
9937e686 2056extern AVCodec xan_dpcm_decoder;
d08d7142 2057extern AVCodec sol_dpcm_decoder;
54f5fd22 2058extern AVCodec sonic_decoder;
070ed1bc 2059extern AVCodec qtrle_decoder;
ac2570a8 2060extern AVCodec flac_decoder;
9d53d58e 2061extern AVCodec tscc_decoder;
d0a0bbd2 2062extern AVCodec ulti_decoder;
d08d7142 2063extern AVCodec qdraw_decoder;
ab711b3c 2064extern AVCodec xl_decoder;
acfd8f0f 2065extern AVCodec qpeg_decoder;
85ad5695 2066extern AVCodec shorten_decoder;
9c7fb608 2067extern AVCodec loco_decoder;
a8a15e9d 2068extern AVCodec wnv1_decoder;
589f8220 2069extern AVCodec aasc_decoder;
6d6d7970 2070extern AVCodec alac_decoder;
034eeaa1 2071extern AVCodec ws_snd1_decoder;
856dbbff 2072extern AVCodec indeo2_decoder;
0bde73d9 2073extern AVCodec vorbis_decoder;
b81f8949 2074extern AVCodec fraps_decoder;
bb4c2140
MN
2075extern AVCodec libgsm_encoder;
2076extern AVCodec libgsm_decoder;
9fa62f2a 2077extern AVCodec bmp_decoder;
de6d9b64 2078
a96b68b7
FB
2079/* pcm codecs */
2080#define PCM_CODEC(id, name) \
2081extern AVCodec name ## _decoder; \
f11d3f23 2082extern AVCodec name ## _encoder
a96b68b7 2083
b461b3bc
RD
2084PCM_CODEC(CODEC_ID_PCM_S32LE, pcm_s32le);
2085PCM_CODEC(CODEC_ID_PCM_S32BE, pcm_s32be);
2086PCM_CODEC(CODEC_ID_PCM_U32LE, pcm_u32le);
2087PCM_CODEC(CODEC_ID_PCM_U32BE, pcm_u32be);
2088PCM_CODEC(CODEC_ID_PCM_S24LE, pcm_s24le);
2089PCM_CODEC(CODEC_ID_PCM_S24BE, pcm_s24be);
2090PCM_CODEC(CODEC_ID_PCM_U24LE, pcm_u24le);
2091PCM_CODEC(CODEC_ID_PCM_U24BE, pcm_u24be);
2092PCM_CODEC(CODEC_ID_PCM_S24DAUD, pcm_s24daud);
a96b68b7
FB
2093PCM_CODEC(CODEC_ID_PCM_S16LE, pcm_s16le);
2094PCM_CODEC(CODEC_ID_PCM_S16BE, pcm_s16be);
2095PCM_CODEC(CODEC_ID_PCM_U16LE, pcm_u16le);
2096PCM_CODEC(CODEC_ID_PCM_U16BE, pcm_u16be);
2097PCM_CODEC(CODEC_ID_PCM_S8, pcm_s8);
2098PCM_CODEC(CODEC_ID_PCM_U8, pcm_u8);
2099PCM_CODEC(CODEC_ID_PCM_ALAW, pcm_alaw);
2100PCM_CODEC(CODEC_ID_PCM_MULAW, pcm_mulaw);
2101
0147f198
FR
2102/* adpcm codecs */
2103
2104PCM_CODEC(CODEC_ID_ADPCM_IMA_QT, adpcm_ima_qt);
2105PCM_CODEC(CODEC_ID_ADPCM_IMA_WAV, adpcm_ima_wav);
9937e686
MM
2106PCM_CODEC(CODEC_ID_ADPCM_IMA_DK3, adpcm_ima_dk3);
2107PCM_CODEC(CODEC_ID_ADPCM_IMA_DK4, adpcm_ima_dk4);
2fdf638b 2108PCM_CODEC(CODEC_ID_ADPCM_IMA_WS, adpcm_ima_ws);
7d8379f2 2109PCM_CODEC(CODEC_ID_ADPCM_SMJPEG, adpcm_ima_smjpeg);
0147f198 2110PCM_CODEC(CODEC_ID_ADPCM_MS, adpcm_ms);
4b465299 2111PCM_CODEC(CODEC_ID_ADPCM_4XM, adpcm_4xm);
fc384777
MM
2112PCM_CODEC(CODEC_ID_ADPCM_XA, adpcm_xa);
2113PCM_CODEC(CODEC_ID_ADPCM_ADX, adpcm_adx);
7d8379f2 2114PCM_CODEC(CODEC_ID_ADPCM_EA, adpcm_ea);
e5966052 2115PCM_CODEC(CODEC_ID_ADPCM_G726, adpcm_g726);
b3bfb299 2116PCM_CODEC(CODEC_ID_ADPCM_CT, adpcm_ct);
659c3692 2117PCM_CODEC(CODEC_ID_ADPCM_SWF, adpcm_swf);
2ff4524e 2118PCM_CODEC(CODEC_ID_ADPCM_YAMAHA, adpcm_yamaha);
0147f198 2119
a96b68b7
FB
2120#undef PCM_CODEC
2121
2122/* dummy raw video codec */
63167088
RS
2123extern AVCodec rawvideo_encoder;
2124extern AVCodec rawvideo_decoder;
de6d9b64
FB
2125
2126/* the following codecs use external GPL libs */
de6d9b64 2127extern AVCodec ac3_decoder;
23c99253 2128extern AVCodec dts_decoder;
de6d9b64 2129
240c1657 2130/* subtitles */
689abe56 2131extern AVCodec dvdsub_encoder;
240c1657
FB
2132extern AVCodec dvdsub_decoder;
2133extern AVCodec dvbsub_encoder;
c6ec28b1 2134extern AVCodec dvbsub_decoder;
240c1657 2135
de6d9b64
FB
2136/* resample.c */
2137
2138struct ReSampleContext;
aaaf1635 2139struct AVResampleContext;
de6d9b64
FB
2140
2141typedef struct ReSampleContext ReSampleContext;
2142
2143ReSampleContext *audio_resample_init(int output_channels, int input_channels,
2144 int output_rate, int input_rate);
2145int audio_resample(ReSampleContext *s, short *output, short *input, int nb_samples);
2146void audio_resample_close(ReSampleContext *s);
2147
6e225de2 2148struct AVResampleContext *av_resample_init(int out_rate, int in_rate, int filter_length, int log2_phase_count, int linear, double cutoff);
aaaf1635 2149int av_resample(struct AVResampleContext *c, short *dst, short *src, int *consumed, int src_size, int dst_size, int update_ctx);
2d48eddd 2150void av_resample_compensate(struct AVResampleContext *c, int sample_delta, int compensation_distance);
d88443ae 2151void av_resample_close(struct AVResampleContext *c);
aaaf1635 2152
de6d9b64
FB
2153/* YUV420 format is assumed ! */
2154
2155struct ImgReSampleContext;
2156
2157typedef struct ImgReSampleContext ImgReSampleContext;
2158
2159ImgReSampleContext *img_resample_init(int output_width, int output_height,
2160 int input_width, int input_height);
ab6d194a
MN
2161
2162ImgReSampleContext *img_resample_full_init(int owidth, int oheight,
2163 int iwidth, int iheight,
2164 int topBand, int bottomBand,
1ff93ffc
TK
2165 int leftBand, int rightBand,
2166 int padtop, int padbottom,
2167 int padleft, int padright);
2168
ab6d194a 2169
de6d9b64 2170void img_resample(ImgReSampleContext *s,
da64ecc3 2171 AVPicture *output, const AVPicture *input);
de6d9b64
FB
2172
2173void img_resample_close(ImgReSampleContext *s);
2174
75917b88
DH
2175/**
2176 * Allocate memory for a picture. Call avpicture_free to free it.
2177 *
2178 * @param picture the picture to be filled in.
2179 * @param pix_fmt the format of the picture.
2180 * @param width the width of the picture.
2181 * @param height the height of the picture.
2182 * @return 0 if successful, -1 if not.
2183 */
2184int avpicture_alloc(AVPicture *picture, int pix_fmt, int width, int height);
2185
2186/* Free a picture previously allocated by avpicture_alloc. */
2187void avpicture_free(AVPicture *picture);
2188
0c1a9eda 2189int avpicture_fill(AVPicture *picture, uint8_t *ptr,
2d1a4094 2190 int pix_fmt, int width, int height);
da64ecc3 2191int avpicture_layout(const AVPicture* src, int pix_fmt, int width, int height,
63167088 2192 unsigned char *dest, int dest_size);
219b06c6 2193int avpicture_get_size(int pix_fmt, int width, int height);
dab64ebc
FB
2194void avcodec_get_chroma_sub_sample(int pix_fmt, int *h_shift, int *v_shift);
2195const char *avcodec_get_pix_fmt_name(int pix_fmt);
21adafec 2196void avcodec_set_dimensions(AVCodecContext *s, int width, int height);
63167088 2197enum PixelFormat avcodec_get_pix_fmt(const char* name);
d07730dd 2198unsigned int avcodec_pix_fmt_to_codec_tag(enum PixelFormat p);
219b06c6 2199
fab21997
FB
2200#define FF_LOSS_RESOLUTION 0x0001 /* loss due to resolution change */
2201#define FF_LOSS_DEPTH 0x0002 /* loss due to color depth change */
2202#define FF_LOSS_COLORSPACE 0x0004 /* loss due to color space conversion */
2203#define FF_LOSS_ALPHA 0x0008 /* loss of alpha bits */
2204#define FF_LOSS_COLORQUANT 0x0010 /* loss due to color quantization */
2205#define FF_LOSS_CHROMA 0x0020 /* loss of chroma (e.g. rgb to gray conversion) */
2206
2207int avcodec_get_pix_fmt_loss(int dst_pix_fmt, int src_pix_fmt,
2208 int has_alpha);
2209int avcodec_find_best_pix_fmt(int pix_fmt_mask, int src_pix_fmt,
2210 int has_alpha, int *loss_ptr);
2211
0469baf1
FB
2212#define FF_ALPHA_TRANSP 0x0001 /* image has some totally transparent pixels */
2213#define FF_ALPHA_SEMI_TRANSP 0x0002 /* image has some transparent pixels */
da64ecc3
DH
2214int img_get_alpha_info(const AVPicture *src,
2215 int pix_fmt, int width, int height);
0469baf1 2216
219b06c6
FB
2217/* convert among pixel formats */
2218int img_convert(AVPicture *dst, int dst_pix_fmt,
da64ecc3 2219 const AVPicture *src, int pix_fmt,
219b06c6
FB
2220 int width, int height);
2221
2222/* deinterlace a picture */
da64ecc3 2223int avpicture_deinterlace(AVPicture *dst, const AVPicture *src,
de6d9b64
FB
2224 int pix_fmt, int width, int height);
2225
2226/* external high level API */
2227
2228extern AVCodec *first_avcodec;
2229
156e5023 2230/* returns LIBAVCODEC_VERSION_INT constant */
51a49663 2231unsigned avcodec_version(void);
8bceb6af 2232/* returns LIBAVCODEC_BUILD constant */
51a49663 2233unsigned avcodec_build(void);
de6d9b64
FB
2234void avcodec_init(void);
2235
2236void register_avcodec(AVCodec *format);
2237AVCodec *avcodec_find_encoder(enum CodecID id);
98f3b098 2238AVCodec *avcodec_find_encoder_by_name(const char *name);
de6d9b64
FB
2239AVCodec *avcodec_find_decoder(enum CodecID id);
2240AVCodec *avcodec_find_decoder_by_name(const char *name);
2241void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode);
2242
1e491e29 2243void avcodec_get_context_defaults(AVCodecContext *s);
7ffbb60e 2244AVCodecContext *avcodec_alloc_context(void);
7906085f 2245void avcodec_get_frame_defaults(AVFrame *pic);
492cd3a9 2246AVFrame *avcodec_alloc_frame(void);
1e491e29 2247
492cd3a9
MN
2248int avcodec_default_get_buffer(AVCodecContext *s, AVFrame *pic);
2249void avcodec_default_release_buffer(AVCodecContext *s, AVFrame *pic);
3a569751
MN
2250int avcodec_default_reget_buffer(AVCodecContext *s, AVFrame *pic);
2251void avcodec_align_dimensions(AVCodecContext *s, int *width, int *height);
0ecca7a4 2252int avcodec_check_dimensions(void *av_log_ctx, unsigned int w, unsigned int h);
3a569751 2253enum PixelFormat avcodec_default_get_format(struct AVCodecContext *s, const enum PixelFormat * fmt);
1e491e29 2254
5a815088
MN
2255int avcodec_thread_init(AVCodecContext *s, int thread_count);
2256void avcodec_thread_free(AVCodecContext *s);
2257int avcodec_thread_execute(AVCodecContext *s, int (*func)(AVCodecContext *c2, void *arg2),void **arg, int *ret, int count);
3a569751 2258int avcodec_default_execute(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2),void **arg, int *ret, int count);
9c3d33d6
MN
2259//FIXME func typedef
2260
7a06ff14
MN
2261/**
2262 * opens / inits the AVCodecContext.
2263 * not thread save!
2264 */
de6d9b64 2265int avcodec_open(AVCodecContext *avctx, AVCodec *codec);
7a06ff14 2266
0c1a9eda 2267int avcodec_decode_audio(AVCodecContext *avctx, int16_t *samples,
de6d9b64 2268 int *frame_size_ptr,
0c1a9eda 2269 uint8_t *buf, int buf_size);
492cd3a9 2270int avcodec_decode_video(AVCodecContext *avctx, AVFrame *picture,
de6d9b64 2271 int *got_picture_ptr,
0c1a9eda 2272 uint8_t *buf, int buf_size);
240c1657
FB
2273int avcodec_decode_subtitle(AVCodecContext *avctx, AVSubtitle *sub,
2274 int *got_sub_ptr,
2275 const uint8_t *buf, int buf_size);
0c1a9eda 2276int avcodec_parse_frame(AVCodecContext *avctx, uint8_t **pdata,
917e06c8 2277 int *data_size_ptr,
0c1a9eda
ZK
2278 uint8_t *buf, int buf_size);
2279int avcodec_encode_audio(AVCodecContext *avctx, uint8_t *buf, int buf_size,
de6d9b64 2280 const short *samples);
0c1a9eda 2281int avcodec_encode_video(AVCodecContext *avctx, uint8_t *buf, int buf_size,
492cd3a9 2282 const AVFrame *pict);
240c1657
FB
2283int avcodec_encode_subtitle(AVCodecContext *avctx, uint8_t *buf, int buf_size,
2284 const AVSubtitle *sub);
de6d9b64
FB
2285
2286int avcodec_close(AVCodecContext *avctx);
2287
2288void avcodec_register_all(void);
a96b68b7 2289
1c2a8c7f
MN
2290void avcodec_flush_buffers(AVCodecContext *avctx);
2291
88730be6
MR
2292void avcodec_default_free_buffers(AVCodecContext *s);
2293
14bea432 2294/* misc usefull functions */
d8085ea7
MN
2295
2296/**
2297 * returns a single letter to describe the picture type
2298 */
2299char av_get_pict_type_char(int pict_type);
2300
2e8f2c20 2301
8424cf50
FB
2302/* frame parsing */
2303typedef struct AVCodecParserContext {
2304 void *priv_data;
2305 struct AVCodecParser *parser;
2306 int64_t frame_offset; /* offset of the current frame */
2307 int64_t cur_offset; /* current offset
2308 (incremented by each av_parser_parse()) */
2309 int64_t last_frame_offset; /* offset of the last frame */
2310 /* video info */
2311 int pict_type; /* XXX: put it back in AVCodecContext */
2312 int repeat_pict; /* XXX: put it back in AVCodecContext */
b84f2a35
FB
2313 int64_t pts; /* pts of the current frame */
2314 int64_t dts; /* dts of the current frame */
2315
2316 /* private data */
2317 int64_t last_pts;
2318 int64_t last_dts;
a62aecce 2319 int fetch_timestamp;
b84f2a35
FB
2320
2321#define AV_PARSER_PTS_NB 4
2322 int cur_frame_start_index;
2323 int64_t cur_frame_offset[AV_PARSER_PTS_NB];
2324 int64_t cur_frame_pts[AV_PARSER_PTS_NB];
2325 int64_t cur_frame_dts[AV_PARSER_PTS_NB];
7cbaa7ba
MN
2326
2327 int flags;
2328#define PARSER_FLAG_COMPLETE_FRAMES 0x0001
8424cf50
FB
2329} AVCodecParserContext;
2330
2331typedef struct AVCodecParser {
99f06236 2332 int codec_ids[5]; /* several codec IDs are permitted */
8424cf50
FB
2333 int priv_data_size;
2334 int (*parser_init)(AVCodecParserContext *s);
2335 int (*parser_parse)(AVCodecParserContext *s,
2336 AVCodecContext *avctx,
2337 uint8_t **poutbuf, int *poutbuf_size,
2338 const uint8_t *buf, int buf_size);
2339 void (*parser_close)(AVCodecParserContext *s);
90ad92b3 2340 int (*split)(AVCodecContext *avctx, const uint8_t *buf, int buf_size);
8424cf50
FB
2341 struct AVCodecParser *next;
2342} AVCodecParser;
2343
2344extern AVCodecParser *av_first_parser;
2345
2346void av_register_codec_parser(AVCodecParser *parser);
2347AVCodecParserContext *av_parser_init(int codec_id);
2348int av_parser_parse(AVCodecParserContext *s,
2349 AVCodecContext *avctx,
2350 uint8_t **poutbuf, int *poutbuf_size,
b84f2a35
FB
2351 const uint8_t *buf, int buf_size,
2352 int64_t pts, int64_t dts);
90ad92b3
MN
2353int av_parser_change(AVCodecParserContext *s,
2354 AVCodecContext *avctx,
2355 uint8_t **poutbuf, int *poutbuf_size,
2356 const uint8_t *buf, int buf_size, int keyframe);
8424cf50
FB
2357void av_parser_close(AVCodecParserContext *s);
2358
2359extern AVCodecParser mpegvideo_parser;
2360extern AVCodecParser mpeg4video_parser;
c6148de2 2361extern AVCodecParser h261_parser;
8424cf50
FB
2362extern AVCodecParser h263_parser;
2363extern AVCodecParser h264_parser;
8e6325b9 2364extern AVCodecParser mjpeg_parser;
99f06236 2365extern AVCodecParser pnm_parser;
8424cf50
FB
2366extern AVCodecParser mpegaudio_parser;
2367extern AVCodecParser ac3_parser;
240c1657 2368extern AVCodecParser dvdsub_parser;
c6ec28b1 2369extern AVCodecParser dvbsub_parser;
8424cf50 2370
544eb99c 2371/* memory */
e4eadb4b 2372void *av_malloc(unsigned int size);
18f77016 2373void *av_mallocz(unsigned int size);
8e1e6f31 2374void *av_realloc(void *ptr, unsigned int size);
544eb99c 2375void av_free(void *ptr);
8e1e6f31 2376char *av_strdup(const char *s);
81c5f887 2377void av_freep(void *ptr);
97d96aaa 2378void *av_fast_realloc(void *ptr, unsigned int *size, unsigned int min_size);
855ea723
ZK
2379/* for static data only */
2380/* call av_free_static to release all staticaly allocated tables */
628d601b 2381void av_free_static(void);
8d1f2ba5 2382void *av_mallocz_static(unsigned int size);
073c2593 2383void *av_realloc_static(void *ptr, unsigned int size);
544eb99c 2384
fc384777
MM
2385/* add by bero : in adx.c */
2386int is_adx(const unsigned char *buf,size_t bufsize);
2387
e1c2a5a0
RT
2388void img_copy(AVPicture *dst, const AVPicture *src,
2389 int pix_fmt, int width, int height);
2390
9b879566
MB
2391/* av_log API */
2392
2393#include <stdarg.h>
2394
d8019eb5 2395#define AV_LOG_QUIET -1
9b879566
MB
2396#define AV_LOG_ERROR 0
2397#define AV_LOG_INFO 1
2398#define AV_LOG_DEBUG 2
2399
f4bd8cf0 2400#ifdef __GNUC__
bc874dae 2401extern void av_log(void*, int level, const char *fmt, ...) __attribute__ ((__format__ (__printf__, 3, 4)));
f4bd8cf0
MN
2402#else
2403extern void av_log(void*, int level, const char *fmt, ...);
2404#endif
2405
bc874dae 2406extern void av_vlog(void*, int level, const char *fmt, va_list);
9b879566
MB
2407extern int av_log_get_level(void);
2408extern void av_log_set_level(int);
bc874dae 2409extern void av_log_set_callback(void (*)(void*, int, const char*, va_list));
9b879566 2410
3a278992 2411/* endian macros */
e96682e6 2412#if !defined(BE_16) || !defined(BE_32) || !defined(LE_16) || !defined(LE_32)
3a278992
MM
2413#define BE_16(x) ((((uint8_t*)(x))[0] << 8) | ((uint8_t*)(x))[1])
2414#define BE_32(x) ((((uint8_t*)(x))[0] << 24) | \
2415 (((uint8_t*)(x))[1] << 16) | \
2416 (((uint8_t*)(x))[2] << 8) | \
2417 ((uint8_t*)(x))[3])
2418#define LE_16(x) ((((uint8_t*)(x))[1] << 8) | ((uint8_t*)(x))[0])
2419#define LE_32(x) ((((uint8_t*)(x))[3] << 24) | \
2420 (((uint8_t*)(x))[2] << 16) | \
2421 (((uint8_t*)(x))[1] << 8) | \
2422 ((uint8_t*)(x))[0])
e96682e6 2423#endif
3a278992 2424
ad2b531d
MR
2425extern unsigned int av_xiphlacing(unsigned char *s, unsigned int v);
2426
02d697aa
ZK
2427#ifdef __cplusplus
2428}
2429#endif
2430
a96b68b7 2431#endif /* AVCODEC_H */