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