Statistics
| Branch: | Revision:

ffmpeg / libavcodec / avcodec.h @ 359bbdab

History | View | Annotate | Download (92.9 KB)

1 04d7f601 Diego Biurrun
/*
2
 * copyright (c) 2001 Fabrice Bellard
3
 *
4 b78e7197 Diego Biurrun
 * This file is part of FFmpeg.
5
 *
6
 * FFmpeg is free software; you can redistribute it and/or
7 04d7f601 Diego Biurrun
 * modify it under the terms of the GNU Lesser General Public
8
 * License as published by the Free Software Foundation; either
9 b78e7197 Diego Biurrun
 * version 2.1 of the License, or (at your option) any later version.
10 04d7f601 Diego Biurrun
 *
11 b78e7197 Diego Biurrun
 * FFmpeg is distributed in the hope that it will be useful,
12 04d7f601 Diego Biurrun
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14
 * Lesser General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU Lesser General Public
17 b78e7197 Diego Biurrun
 * License along with FFmpeg; if not, write to the Free Software
18 e5a389a1 Diego Biurrun
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19 04d7f601 Diego Biurrun
 */
20
21 5b21bdab Diego Biurrun
#ifndef FFMPEG_AVCODEC_H
22
#define FFMPEG_AVCODEC_H
23 a96b68b7 Fabrice Bellard
24 36df8805 Michael Niedermayer
/**
25
 * @file avcodec.h
26 f5bccd85 Diego Biurrun
 * external API header
27 36df8805 Michael Niedermayer
 */
28
29
30 76a448ed Måns Rullgård
#include "libavutil/avutil.h"
31 de6d9b64 Fabrice Bellard
32 800c289a Måns Rullgård
#define LIBAVCODEC_VERSION_MAJOR 51
33 1472b7dd Lars Täuber
#define LIBAVCODEC_VERSION_MINOR 57
34 89223ef6 Baptiste Coudurier
#define LIBAVCODEC_VERSION_MICRO  2
35 e97ac1e6 Måns Rullgård
36 800c289a Måns Rullgård
#define LIBAVCODEC_VERSION_INT  AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
37
                                               LIBAVCODEC_VERSION_MINOR, \
38
                                               LIBAVCODEC_VERSION_MICRO)
39
#define LIBAVCODEC_VERSION      AV_VERSION(LIBAVCODEC_VERSION_MAJOR,    \
40
                                           LIBAVCODEC_VERSION_MINOR,    \
41
                                           LIBAVCODEC_VERSION_MICRO)
42 bb270c08 Diego Biurrun
#define LIBAVCODEC_BUILD        LIBAVCODEC_VERSION_INT
43 5aa083ee Michael Niedermayer
44 bb270c08 Diego Biurrun
#define LIBAVCODEC_IDENT        "Lavc" AV_STRINGIFY(LIBAVCODEC_VERSION)
45 ce2749d2 Alex Beregszaszi
46 8da9266c Måns Rullgård
#define AV_NOPTS_VALUE          INT64_C(0x8000000000000000)
47 bb270c08 Diego Biurrun
#define AV_TIME_BASE            1000000
48
#define AV_TIME_BASE_Q          (AVRational){1, AV_TIME_BASE}
49 9740beff Michael Niedermayer
50 7ebf5927 Michael Niedermayer
/**
51 6b0cdb6e Nicolas George
 * Identifies the syntax and semantics of the bitstream.
52
 * The principle is roughly:
53
 * Two decoders with the same ID can decode the same streams.
54
 * Two encoders with the same ID can encode compatible streams.
55
 * There may be slight deviations from the principle due to implementation
56
 * details.
57 7ebf5927 Michael Niedermayer
 *
58 f5bccd85 Diego Biurrun
 * If you add a codec ID to this list, add it so that
59
 * 1. no value of a existing codec ID changes (that would break ABI),
60
 * 2. it is as close as possible to similar codecs.
61 7ebf5927 Michael Niedermayer
 */
62 de6d9b64 Fabrice Bellard
enum CodecID {
63 115329f1 Diego Biurrun
    CODEC_ID_NONE,
64 ba0dabbf Diego Biurrun
65
    /* video codecs */
66 de6d9b64 Fabrice Bellard
    CODEC_ID_MPEG1VIDEO,
67 0e373b95 Michael Niedermayer
    CODEC_ID_MPEG2VIDEO, ///< preferred ID for MPEG-1/2 video decoding
68 fb364ada Ivan Kalvachev
    CODEC_ID_MPEG2VIDEO_XVMC,
69 c6148de2 Michael Niedermayer
    CODEC_ID_H261,
70 de6d9b64 Fabrice Bellard
    CODEC_ID_H263,
71
    CODEC_ID_RV10,
72 68b94c35 Michael Niedermayer
    CODEC_ID_RV20,
73 de6d9b64 Fabrice Bellard
    CODEC_ID_MJPEG,
74 b135d9fb Alex Beregszaszi
    CODEC_ID_MJPEGB,
75 b1e6b355 Michael Niedermayer
    CODEC_ID_LJPEG,
76 5e83dec4 Alex Beregszaszi
    CODEC_ID_SP5X,
77 5639729b Michael Niedermayer
    CODEC_ID_JPEGLS,
78 bf89e6b1 Fabrice Bellard
    CODEC_ID_MPEG4,
79 de6d9b64 Fabrice Bellard
    CODEC_ID_RAWVIDEO,
80 84afee34 Michael Niedermayer
    CODEC_ID_MSMPEG4V1,
81
    CODEC_ID_MSMPEG4V2,
82
    CODEC_ID_MSMPEG4V3,
83 e1a9dbff Michael Niedermayer
    CODEC_ID_WMV1,
84 b50eef3a Michael Niedermayer
    CODEC_ID_WMV2,
85 de6d9b64 Fabrice Bellard
    CODEC_ID_H263P,
86
    CODEC_ID_H263I,
87 d4f5d74a Garrick Meeker
    CODEC_ID_FLV1,
88 be8ffec9 Nick Kurshev
    CODEC_ID_SVQ1,
89 8b82a956 Michael Niedermayer
    CODEC_ID_SVQ3,
90 020fcc94 Fabrice Bellard
    CODEC_ID_DVVIDEO,
91 11f18faf Michael Niedermayer
    CODEC_ID_HUFFYUV,
92 f70f7c6d Michael Niedermayer
    CODEC_ID_CYUV,
93 0da71265 Michael Niedermayer
    CODEC_ID_H264,
94 deabd4fd Mike Melanson
    CODEC_ID_INDEO3,
95 d86053a4 Mike Melanson
    CODEC_ID_VP3,
96 f44ee2c3 Alex Beregszaszi
    CODEC_ID_THEORA,
97 3d2e8cce Michael Niedermayer
    CODEC_ID_ASV1,
98 9b56edf5 Michael Niedermayer
    CODEC_ID_ASV2,
99 5e20f836 Michael Niedermayer
    CODEC_ID_FFV1,
100 e2a7bb28 Mike Melanson
    CODEC_ID_4XM,
101 be3564ed Michael Niedermayer
    CODEC_ID_VCR1,
102 3aff069b Alex Beregszaszi
    CODEC_ID_CLJR,
103 c3bf0288 Michael Niedermayer
    CODEC_ID_MDEC,
104 3ef8be2b Mike Melanson
    CODEC_ID_ROQ,
105
    CODEC_ID_INTERPLAY_VIDEO,
106 9937e686 Mike Melanson
    CODEC_ID_XAN_WC3,
107
    CODEC_ID_XAN_WC4,
108 2fdf638b Mike Melanson
    CODEC_ID_RPZA,
109
    CODEC_ID_CINEPAK,
110
    CODEC_ID_WS_VQA,
111
    CODEC_ID_MSRLE,
112
    CODEC_ID_MSVIDEO1,
113 4120a53a Mike Melanson
    CODEC_ID_IDCIN,
114 1dc1ed99 Roberto Togni
    CODEC_ID_8BPS,
115 11e29a41 Mike Melanson
    CODEC_ID_SMC,
116 42cad81a Mike Melanson
    CODEC_ID_FLIC,
117 9a4117d5 Mike Melanson
    CODEC_ID_TRUEMOTION1,
118 fafa0b75 Mike Melanson
    CODEC_ID_VMDVIDEO,
119 a273bbfb Roberto Togni
    CODEC_ID_MSZH,
120
    CODEC_ID_ZLIB,
121 070ed1bc Mike Melanson
    CODEC_ID_QTRLE,
122 791e7b83 Michael Niedermayer
    CODEC_ID_SNOW,
123 9d53d58e Mike Melanson
    CODEC_ID_TSCC,
124 d0a0bbd2 Mike Melanson
    CODEC_ID_ULTI,
125 d08d7142 Mike Melanson
    CODEC_ID_QDRAW,
126 ab711b3c Mike Melanson
    CODEC_ID_VIXL,
127 acfd8f0f Mike Melanson
    CODEC_ID_QPEG,
128 17179d2d Michael Niedermayer
    CODEC_ID_XVID,
129
    CODEC_ID_PNG,
130
    CODEC_ID_PPM,
131
    CODEC_ID_PBM,
132
    CODEC_ID_PGM,
133
    CODEC_ID_PGMYUV,
134
    CODEC_ID_PAM,
135 f37b9768 Loren Merritt
    CODEC_ID_FFVHUFF,
136 3f05305d Michael Niedermayer
    CODEC_ID_RV30,
137
    CODEC_ID_RV40,
138 10b9c374 Kostya Shishkov
    CODEC_ID_VC1,
139 21aa398f Alex Beregszaszi
    CODEC_ID_WMV3,
140 9c7fb608 Mike Melanson
    CODEC_ID_LOCO,
141 a8a15e9d Mike Melanson
    CODEC_ID_WNV1,
142 589f8220 Mike Melanson
    CODEC_ID_AASC,
143 856dbbff Michael Niedermayer
    CODEC_ID_INDEO2,
144 b81f8949 Mike Melanson
    CODEC_ID_FRAPS,
145 64af6168 Mike Melanson
    CODEC_ID_TRUEMOTION2,
146 9fa62f2a Måns Rullgård
    CODEC_ID_BMP,
147 e0f80bd7 Reimar Döffinger
    CODEC_ID_CSCD,
148 4e114829 Mike Melanson
    CODEC_ID_MMVIDEO,
149 9c8d8e84 Mike Melanson
    CODEC_ID_ZMBV,
150 26376701 Mike Melanson
    CODEC_ID_AVS,
151 348efc18 Kostya Shishkov
    CODEC_ID_SMACKVIDEO,
152 dfca23e3 Reimar Döffinger
    CODEC_ID_NUV,
153 fd7b1991 Kostya Shishkov
    CODEC_ID_KMVC,
154 0919e788 Benjamin Larsson
    CODEC_ID_FLASHSV,
155 20ffddb9 Stefan Gehrer
    CODEC_ID_CAVS,
156 f31065f6 Baptiste Coudurier
    CODEC_ID_JPEG2000,
157 eb57c889 Kostya Shishkov
    CODEC_ID_VMNC,
158 5ce117c3 Aurelien Jacobs
    CODEC_ID_VP5,
159
    CODEC_ID_VP6,
160
    CODEC_ID_VP6F,
161 3689cf16 Kostya Shishkov
    CODEC_ID_TARGA,
162 72450e50 Baptiste Coudurier
    CODEC_ID_DSICINVIDEO,
163 29f86228 Baptiste Coudurier
    CODEC_ID_TIERTEXSEQVIDEO,
164 a991b1fe Kostya Shishkov
    CODEC_ID_TIFF,
165 06d392a7 Baptiste Coudurier
    CODEC_ID_GIF,
166 3edeab82 Panagiotis Issaris
    CODEC_ID_FFH264,
167 33a0dd37 Kostya Shishkov
    CODEC_ID_DXA,
168 52b6bad2 Baptiste Coudurier
    CODEC_ID_DNXHD,
169 efb0c399 Diego Biurrun
    CODEC_ID_THP,
170 2d99eed1 Xiaohui Sun
    CODEC_ID_SGI,
171 9a0ddd09 Anssi Hannula
    CODEC_ID_C93,
172 1e6c6759 Nicholas Tung
    CODEC_ID_BETHSOFTVID,
173 b46d68c6 Ivo van Poorten
    CODEC_ID_PTX,
174 1ca779e7 Ivo van Poorten
    CODEC_ID_TXD,
175 91fc2cf1 Aurelien Jacobs
    CODEC_ID_VP6A,
176 8787d837 Vladimir Voroshilov
    CODEC_ID_AMV,
177 66f7679c Kostya Shishkov
    CODEC_ID_VB,
178 b4abe1d1 Ivo van Poorten
    CODEC_ID_PCX,
179 d43df959 Ivo van Poorten
    CODEC_ID_SUNRAST,
180 800b9c24 Benjamin Larsson
    CODEC_ID_INDEO4,
181
    CODEC_ID_INDEO5,
182 a7129de5 Ramiro Polla
    CODEC_ID_MIMIC,
183 975cdc8f Sascha Sommer
    CODEC_ID_RL2,
184 cb21e0a7 Jai Menon
    CODEC_ID_8SVX_EXP,
185
    CODEC_ID_8SVX_FIB,
186 40d26273 Eli Friedman
    CODEC_ID_ESCAPE124,
187 782a58ec Michael Niedermayer
    CODEC_ID_DIRAC,
188 b64c096b Sisir Koppaka
    CODEC_ID_BFI,
189 a96b68b7 Fabrice Bellard
190 f5bccd85 Diego Biurrun
    /* various PCM "codecs" */
191 17179d2d Michael Niedermayer
    CODEC_ID_PCM_S16LE= 0x10000,
192 a96b68b7 Fabrice Bellard
    CODEC_ID_PCM_S16BE,
193
    CODEC_ID_PCM_U16LE,
194
    CODEC_ID_PCM_U16BE,
195
    CODEC_ID_PCM_S8,
196
    CODEC_ID_PCM_U8,
197
    CODEC_ID_PCM_MULAW,
198
    CODEC_ID_PCM_ALAW,
199 b461b3bc Reimar Döffinger
    CODEC_ID_PCM_S32LE,
200
    CODEC_ID_PCM_S32BE,
201
    CODEC_ID_PCM_U32LE,
202
    CODEC_ID_PCM_U32BE,
203
    CODEC_ID_PCM_S24LE,
204
    CODEC_ID_PCM_S24BE,
205
    CODEC_ID_PCM_U24LE,
206
    CODEC_ID_PCM_U24BE,
207
    CODEC_ID_PCM_S24DAUD,
208 a11c2a2c Michael Niedermayer
    CODEC_ID_PCM_ZORK,
209 725d86bf Aurelien Jacobs
    CODEC_ID_PCM_S16LE_PLANAR,
210 1472b7dd Lars Täuber
    CODEC_ID_PCM_DVD,
211 0147f198 François Revol
212 f5bccd85 Diego Biurrun
    /* various ADPCM codecs */
213 17179d2d Michael Niedermayer
    CODEC_ID_ADPCM_IMA_QT= 0x11000,
214 0147f198 François Revol
    CODEC_ID_ADPCM_IMA_WAV,
215 9937e686 Mike Melanson
    CODEC_ID_ADPCM_IMA_DK3,
216
    CODEC_ID_ADPCM_IMA_DK4,
217 2fdf638b Mike Melanson
    CODEC_ID_ADPCM_IMA_WS,
218 7d8379f2 Mike Melanson
    CODEC_ID_ADPCM_IMA_SMJPEG,
219 0147f198 François Revol
    CODEC_ID_ADPCM_MS,
220 e2a7bb28 Mike Melanson
    CODEC_ID_ADPCM_4XM,
221 fc384777 Mike Melanson
    CODEC_ID_ADPCM_XA,
222
    CODEC_ID_ADPCM_ADX,
223 7d8379f2 Mike Melanson
    CODEC_ID_ADPCM_EA,
224 e5966052 Roman Shaposhnik
    CODEC_ID_ADPCM_G726,
225 b3bfb299 Mike Melanson
    CODEC_ID_ADPCM_CT,
226 659c3692 Alex Beregszaszi
    CODEC_ID_ADPCM_SWF,
227 2ff4524e Vidar Madsen
    CODEC_ID_ADPCM_YAMAHA,
228 2433f24f Aurelien Jacobs
    CODEC_ID_ADPCM_SBPRO_4,
229
    CODEC_ID_ADPCM_SBPRO_3,
230
    CODEC_ID_ADPCM_SBPRO_2,
231 d1e0d21f Marco Gerards
    CODEC_ID_ADPCM_THP,
232 3a7f5d07 Vitor Sessak
    CODEC_ID_ADPCM_IMA_AMV,
233 e7583962 Peter Ross
    CODEC_ID_ADPCM_EA_R1,
234
    CODEC_ID_ADPCM_EA_R3,
235
    CODEC_ID_ADPCM_EA_R2,
236 7bb65d89 Peter Ross
    CODEC_ID_ADPCM_IMA_EA_SEAD,
237 fac84d3c Peter Ross
    CODEC_ID_ADPCM_IMA_EA_EACS,
238 271b4095 Aurelien Jacobs
    CODEC_ID_ADPCM_EA_XAS,
239 861c63a2 Robert Marston
    CODEC_ID_ADPCM_EA_MAXIS_XA,
240 891f64b3 joca@rixmail.se
241 17179d2d Michael Niedermayer
    /* AMR */
242
    CODEC_ID_AMR_NB= 0x12000,
243 d663a1fd Michael Niedermayer
    CODEC_ID_AMR_WB,
244
245 b8414bbd Nick Kurshev
    /* RealAudio codecs*/
246 17179d2d Michael Niedermayer
    CODEC_ID_RA_144= 0x13000,
247 b8414bbd Nick Kurshev
    CODEC_ID_RA_288,
248 3ef8be2b Mike Melanson
249
    /* various DPCM codecs */
250 17179d2d Michael Niedermayer
    CODEC_ID_ROQ_DPCM= 0x14000,
251 3ef8be2b Mike Melanson
    CODEC_ID_INTERPLAY_DPCM,
252 9937e686 Mike Melanson
    CODEC_ID_XAN_DPCM,
253 d08d7142 Mike Melanson
    CODEC_ID_SOL_DPCM,
254 115329f1 Diego Biurrun
255 ba0dabbf Diego Biurrun
    /* audio codecs */
256 17179d2d Michael Niedermayer
    CODEC_ID_MP2= 0x15000,
257 0e373b95 Michael Niedermayer
    CODEC_ID_MP3, ///< preferred ID for decoding MPEG audio layer 1, 2 or 3
258 17179d2d Michael Niedermayer
    CODEC_ID_AAC,
259 cbee7a69 Baptiste Coudurier
#if LIBAVCODEC_VERSION_INT < ((52<<16)+(0<<8)+0)
260 17179d2d Michael Niedermayer
    CODEC_ID_MPEG4AAC,
261 cbee7a69 Baptiste Coudurier
#endif
262 17179d2d Michael Niedermayer
    CODEC_ID_AC3,
263
    CODEC_ID_DTS,
264
    CODEC_ID_VORBIS,
265
    CODEC_ID_DVAUDIO,
266
    CODEC_ID_WMAV1,
267
    CODEC_ID_WMAV2,
268
    CODEC_ID_MACE3,
269
    CODEC_ID_MACE6,
270
    CODEC_ID_VMDAUDIO,
271
    CODEC_ID_SONIC,
272
    CODEC_ID_SONIC_LS,
273 ac2570a8 Michael Niedermayer
    CODEC_ID_FLAC,
274 1ede228a Roberto Togni
    CODEC_ID_MP3ADU,
275 d2a7718d Roberto Togni
    CODEC_ID_MP3ON4,
276 85ad5695 Michael Niedermayer
    CODEC_ID_SHORTEN,
277 5df8a0c6 Michael Niedermayer
    CODEC_ID_ALAC,
278 034eeaa1 Mike Melanson
    CODEC_ID_WESTWOOD_SND1,
279 0e373b95 Michael Niedermayer
    CODEC_ID_GSM, ///< as in Berlin toast format
280 d9b1c197 Roberto Togni
    CODEC_ID_QDM2,
281 e0f7e329 Benjamin Larsson
    CODEC_ID_COOK,
282 bf3027c8 Diego Biurrun
    CODEC_ID_TRUESPEECH,
283 a24c4a2a Alex Beregszaszi
    CODEC_ID_TTA,
284 348efc18 Kostya Shishkov
    CODEC_ID_SMACKAUDIO,
285 6c496518 Benjamin Larsson
    CODEC_ID_QCELP,
286 730581f3 Kostya Shishkov
    CODEC_ID_WAVPACK,
287 72450e50 Baptiste Coudurier
    CODEC_ID_DSICINAUDIO,
288 84ed36da Kostya Shishkov
    CODEC_ID_IMC,
289 185c7b6b Kostya Shishkov
    CODEC_ID_MUSEPACK7,
290 aad512b4 Michael Niedermayer
    CODEC_ID_MLP,
291 f5bccd85 Diego Biurrun
    CODEC_ID_GSM_MS, /* as found in WAV */
292 10e26bc7 Benjamin Larsson
    CODEC_ID_ATRAC3,
293 8950f828 Michael Niedermayer
    CODEC_ID_VOXWARE,
294 bf4a1f17 Kostya Shishkov
    CODEC_ID_APE,
295 636b13c5 Benjamin Larsson
    CODEC_ID_NELLYMOSER,
296 12877faf Kostya Shishkov
    CODEC_ID_MUSEPACK8,
297 cb4ddf77 Reimar Döffinger
    CODEC_ID_SPEEX,
298 7bb8d51c Benjamin Larsson
    CODEC_ID_WMAVOICE,
299
    CODEC_ID_WMAPRO,
300 800b9c24 Benjamin Larsson
    CODEC_ID_WMALOSSLESS,
301 115329f1 Diego Biurrun
302 240c1657 Fabrice Bellard
    /* subtitle codecs */
303 115329f1 Diego Biurrun
    CODEC_ID_DVD_SUBTITLE= 0x17000,
304
    CODEC_ID_DVB_SUBTITLE,
305 0e373b95 Michael Niedermayer
    CODEC_ID_TEXT,  ///< raw UTF-8 text
306 7e2643ae Reimar Döffinger
    CODEC_ID_XSUB,
307 f9a9b350 Evgeniy Stepanov
    CODEC_ID_SSA,
308 cc8c2c6a Reimar Döffinger
    CODEC_ID_MOV_TEXT,
309 115329f1 Diego Biurrun
310 7ce68923 Diego Biurrun
    /* other specific kind of codecs (generally used for attachments) */
311 f8d7c9d3 Evgeniy Stepanov
    CODEC_ID_TTF= 0x18000,
312
313 0e373b95 Michael Niedermayer
    CODEC_ID_MPEG2TS= 0x20000, /**< _FAKE_ codec to indicate a raw MPEG-2 TS
314 f5bccd85 Diego Biurrun
                                * stream (only used by libavformat) */
315 de6d9b64 Fabrice Bellard
};
316 dcedf586 Fabrice Bellard
317 abd6a4fc Baptiste Coudurier
#if LIBAVCODEC_VERSION_INT < ((52<<16)+(0<<8)+0)
318 f5bccd85 Diego Biurrun
/* CODEC_ID_MP3LAME is obsolete */
319 dcedf586 Fabrice Bellard
#define CODEC_ID_MP3LAME CODEC_ID_MP3
320 abd6a4fc Baptiste Coudurier
#define CODEC_ID_MPEG4AAC CODEC_ID_AAC
321
#endif
322 de6d9b64 Fabrice Bellard
323
enum CodecType {
324 4a663d80 Philip Gladstone
    CODEC_TYPE_UNKNOWN = -1,
325 de6d9b64 Fabrice Bellard
    CODEC_TYPE_VIDEO,
326
    CODEC_TYPE_AUDIO,
327 985180a1 Fabrice Bellard
    CODEC_TYPE_DATA,
328 240c1657 Fabrice Bellard
    CODEC_TYPE_SUBTITLE,
329 f8d7c9d3 Evgeniy Stepanov
    CODEC_TYPE_ATTACHMENT,
330 9ff77d17 Benoit Fouet
    CODEC_TYPE_NB
331 de6d9b64 Fabrice Bellard
};
332
333 0e373b95 Michael Niedermayer
/**
334
 * Currently unused, may be used if 24/32 bits samples are ever supported.
335
 * all in native-endian format
336
 */
337 a96b68b7 Fabrice Bellard
enum SampleFormat {
338 9076fee4 Måns Rullgård
    SAMPLE_FMT_NONE = -1,
339 1319a77b Alex Beregszaszi
    SAMPLE_FMT_U8,              ///< unsigned 8 bits
340
    SAMPLE_FMT_S16,             ///< signed 16 bits
341
    SAMPLE_FMT_S24,             ///< signed 24 bits
342 115329f1 Diego Biurrun
    SAMPLE_FMT_S32,             ///< signed 32 bits
343 a3a5f4d6 Michael Niedermayer
    SAMPLE_FMT_FLT,             ///< float
344 a96b68b7 Fabrice Bellard
};
345
346 de6d9b64 Fabrice Bellard
/* in bytes */
347 8170e5fb Alex Beregszaszi
#define AVCODEC_MAX_AUDIO_FRAME_SIZE 192000 // 1 second of 48khz 32bit audio
348 de6d9b64 Fabrice Bellard
349 d7425f59 Michael Niedermayer
/**
350 cf713bb8 Michael Niedermayer
 * Required number of additionally allocated bytes at the end of the input bitstream for decoding.
351 f5bccd85 Diego Biurrun
 * This is mainly needed because some optimized bitstream readers read
352
 * 32 or 64 bit at once and could read over the end.<br>
353
 * Note: If the first 23 bits of the additional bytes are not 0, then damaged
354
 * MPEG bitstreams could cause overread and segfault.
355 d7425f59 Michael Niedermayer
 */
356
#define FF_INPUT_BUFFER_PADDING_SIZE 8
357
358 0ecca7a4 Michael Niedermayer
/**
359 f5bccd85 Diego Biurrun
 * minimum encoding buffer size
360
 * Used to avoid some checks during header writing.
361 0ecca7a4 Michael Niedermayer
 */
362
#define FF_MIN_BUFFER_SIZE 16384
363
364 0e373b95 Michael Niedermayer
/**
365 bafc102b Michael Niedermayer
 * motion estimation type.
366 0e373b95 Michael Niedermayer
 */
367 e4986da9 Juanjo
enum Motion_Est_ID {
368 9b4dd1b8 Michael Niedermayer
    ME_ZERO = 1,    ///< no search, that is use 0,0 vector whenever one is needed
369 e4986da9 Juanjo
    ME_FULL,
370
    ME_LOG,
371
    ME_PHODS,
372 9b4dd1b8 Michael Niedermayer
    ME_EPZS,        ///< enhanced predictive zonal search
373
    ME_X1,          ///< reserved for experiments
374
    ME_HEX,         ///< hexagon based search
375
    ME_UMH,         ///< uneven multi-hexagon search
376
    ME_ITER,        ///< iterative search
377 359bbdab Loren Merritt
    ME_TESA,        ///< transformed exhaustive search algorithm
378 e4986da9 Juanjo
};
379
380 8c3eba7c Michael Niedermayer
enum AVDiscard{
381 f5bccd85 Diego Biurrun
    /* We leave some space between them for extensions (drop some
382
     * keyframes for intra-only or drop just some bidir frames). */
383 8c3eba7c Michael Niedermayer
    AVDISCARD_NONE   =-16, ///< discard nothing
384
    AVDISCARD_DEFAULT=  0, ///< discard useless packets like 0 size packets in avi
385
    AVDISCARD_NONREF =  8, ///< discard all non reference
386
    AVDISCARD_BIDIR  = 16, ///< discard all bidirectional frames
387
    AVDISCARD_NONKEY = 32, ///< discard all frames except keyframes
388
    AVDISCARD_ALL    = 48, ///< discard all
389
};
390
391 ce980a95 Michael Niedermayer
typedef struct RcOverride{
392
    int start_frame;
393
    int end_frame;
394 f5bccd85 Diego Biurrun
    int qscale; // If this is 0 then quality_factor will be used instead.
395 ce980a95 Michael Niedermayer
    float quality_factor;
396
} RcOverride;
397
398 b0ec9efd Erik Slagter
#define FF_MAX_B_FRAMES 16
399 9dbcbd92 Michael Niedermayer
400 a949d72e Michael Niedermayer
/* encoding support
401 f5bccd85 Diego Biurrun
   These flags can be passed in AVCodecContext.flags before initialization.
402
   Note: Not everything is supported yet.
403 a949d72e Michael Niedermayer
*/
404 de6d9b64 Fabrice Bellard
405 f5bccd85 Diego Biurrun
#define CODEC_FLAG_QSCALE 0x0002  ///< Use fixed qscale.
406
#define CODEC_FLAG_4MV    0x0004  ///< 4 MV per MB allowed / advanced prediction for H.263.
407
#define CODEC_FLAG_QPEL   0x0010  ///< Use qpel MC.
408
#define CODEC_FLAG_GMC    0x0020  ///< Use GMC.
409
#define CODEC_FLAG_MV0    0x0040  ///< Always try a MB with MV=<0,0>.
410
#define CODEC_FLAG_PART   0x0080  ///< Use data partitioning.
411 1ba8f5eb Michael Niedermayer
/**
412
 * The parent program guarantees that the input for B-frames containing
413 f5bccd85 Diego Biurrun
 * streams is not written to for at least s->max_b_frames+1 frames, if
414 1ba8f5eb Michael Niedermayer
 * this is not set the input will be copied.
415
 */
416 8b4c7dbc Michael Niedermayer
#define CODEC_FLAG_INPUT_PRESERVED 0x0100
417 273b0cd3 Diego Biurrun
#define CODEC_FLAG_PASS1           0x0200   ///< Use internal 2pass ratecontrol in first pass mode.
418
#define CODEC_FLAG_PASS2           0x0400   ///< Use internal 2pass ratecontrol in second pass mode.
419
#define CODEC_FLAG_EXTERN_HUFF     0x1000   ///< Use external Huffman table (for MJPEG).
420
#define CODEC_FLAG_GRAY            0x2000   ///< Only decode/encode grayscale.
421
#define CODEC_FLAG_EMU_EDGE        0x4000   ///< Don't draw edges.
422
#define CODEC_FLAG_PSNR            0x8000   ///< error[?] variables will be set during encoding.
423
#define CODEC_FLAG_TRUNCATED       0x00010000 /** Input bitstream might be truncated at a random
424
                                                  location instead of only at frame boundaries. */
425 f5bccd85 Diego Biurrun
#define CODEC_FLAG_NORMALIZE_AQP  0x00020000 ///< Normalize adaptive quantization.
426
#define CODEC_FLAG_INTERLACED_DCT 0x00040000 ///< Use interlaced DCT.
427
#define CODEC_FLAG_LOW_DELAY      0x00080000 ///< Force low delay.
428
#define CODEC_FLAG_ALT_SCAN       0x00100000 ///< Use alternate scan.
429
#define CODEC_FLAG_TRELLIS_QUANT  0x00200000 ///< Use trellis quantization.
430
#define CODEC_FLAG_GLOBAL_HEADER  0x00400000 ///< Place global headers in extradata instead of every keyframe.
431
#define CODEC_FLAG_BITEXACT       0x00800000 ///< Use only bitexact stuff (except (I)DCT).
432 21e59552 Michael Niedermayer
/* Fx : Flag for h263+ extra options */
433 6b936ec6 Baptiste Coudurier
#if LIBAVCODEC_VERSION_INT < ((52<<16)+(0<<8)+0)
434 f5bccd85 Diego Biurrun
#define CODEC_FLAG_H263P_AIC      0x01000000 ///< H.263 advanced intra coding / MPEG-4 AC prediction (remove this)
435 6b936ec6 Baptiste Coudurier
#endif
436 f5bccd85 Diego Biurrun
#define CODEC_FLAG_AC_PRED        0x01000000 ///< H.263 advanced intra coding / MPEG-4 AC prediction
437
#define CODEC_FLAG_H263P_UMV      0x02000000 ///< unlimited motion vector
438
#define CODEC_FLAG_CBP_RD         0x04000000 ///< Use rate distortion optimization for cbp.
439
#define CODEC_FLAG_QP_RD          0x08000000 ///< Use rate distortion optimization for qp selectioon.
440
#define CODEC_FLAG_H263P_AIV      0x00000008 ///< H.263 alternative inter VLC
441 332f9ac4 Michael Niedermayer
#define CODEC_FLAG_OBMC           0x00000001 ///< OBMC
442
#define CODEC_FLAG_LOOP_FILTER    0x00000800 ///< loop filter
443 bb198e19 Michael Niedermayer
#define CODEC_FLAG_H263P_SLICE_STRUCT 0x10000000
444
#define CODEC_FLAG_INTERLACED_ME  0x20000000 ///< interlaced motion estimation
445 f5bccd85 Diego Biurrun
#define CODEC_FLAG_SVCD_SCAN_OFFSET 0x40000000 ///< Will reserve space for SVCD scan offset user data.
446 f3eec1cf Michael Niedermayer
#define CODEC_FLAG_CLOSED_GOP     0x80000000
447 f5bccd85 Diego Biurrun
#define CODEC_FLAG2_FAST          0x00000001 ///< Allow non spec compliant speedup tricks.
448
#define CODEC_FLAG2_STRICT_GOP    0x00000002 ///< Strictly enforce GOP size.
449
#define CODEC_FLAG2_NO_OUTPUT     0x00000004 ///< Skip bitstream encoding.
450
#define CODEC_FLAG2_LOCAL_HEADER  0x00000008 ///< Place global headers at every keyframe instead of in extradata.
451
#define CODEC_FLAG2_BPYRAMID      0x00000010 ///< H.264 allow B-frames to be used as references.
452
#define CODEC_FLAG2_WPRED         0x00000020 ///< H.264 weighted biprediction for B-frames
453 d3075ed5 Panagiotis Issaris
#define CODEC_FLAG2_MIXED_REFS    0x00000040 ///< H.264 one reference per partition, as opposed to one reference per macroblock
454 58f7833e Robert Swain
#define CODEC_FLAG2_8X8DCT        0x00000080 ///< H.264 high profile 8x8 transform
455
#define CODEC_FLAG2_FASTPSKIP     0x00000100 ///< H.264 fast pskip
456
#define CODEC_FLAG2_AUD           0x00000200 ///< H.264 access unit delimiters
457 f5bccd85 Diego Biurrun
#define CODEC_FLAG2_BRDO          0x00000400 ///< B-frame rate-distortion optimization
458
#define CODEC_FLAG2_INTRA_VLC     0x00000800 ///< Use MPEG-2 intra VLC table.
459
#define CODEC_FLAG2_MEMC_ONLY     0x00001000 ///< Only do ME/MC (I frames -> ref, P frame -> ME+MC).
460
#define CODEC_FLAG2_DROP_FRAME_TIMECODE 0x00002000 ///< timecode is in drop frame format.
461
#define CODEC_FLAG2_SKIP_RD       0x00004000 ///< RD optimal MB level residual skipping
462
#define CODEC_FLAG2_CHUNKS        0x00008000 ///< Input bitstream might be truncated at a packet boundaries instead of only at frame boundaries.
463
#define CODEC_FLAG2_NON_LINEAR_QUANT 0x00010000 ///< Use MPEG-2 nonlinear quantizer.
464 f1618fd9 Paul Kelly
#define CODEC_FLAG2_BIT_RESERVOIR 0x00020000 ///< Use a bit reservoir when encoding if possible
465 6fc5b059 Michael Niedermayer
466 21e59552 Michael Niedermayer
/* Unsupported options :
467 bb270c08 Diego Biurrun
 *              Syntax Arithmetic coding (SAC)
468
 *              Reference Picture Selection
469 eafcac6a Diego Biurrun
 *              Independent Segment Decoding */
470 21e59552 Michael Niedermayer
/* /Fx */
471 bf89e6b1 Fabrice Bellard
/* codec capabilities */
472
473 f5bccd85 Diego Biurrun
#define CODEC_CAP_DRAW_HORIZ_BAND 0x0001 ///< Decoder can use draw_horiz_band callback.
474 6814a25c Michael Niedermayer
/**
475
 * Codec uses get_buffer() for allocating buffers.
476
 * direct rendering method 1
477
 */
478
#define CODEC_CAP_DR1             0x0002
479 f5bccd85 Diego Biurrun
/* If 'parse_only' field is true, then avcodec_parse_frame() can be used. */
480 917e06c8 Fabrice Bellard
#define CODEC_CAP_PARSE_ONLY      0x0004
481 d7425f59 Michael Niedermayer
#define CODEC_CAP_TRUNCATED       0x0008
482 f5bccd85 Diego Biurrun
/* Codec can export data for HW decoding (XvMC). */
483 5e5c247a Ivan Kalvachev
#define CODEC_CAP_HWACCEL         0x0010
484 115329f1 Diego Biurrun
/**
485 f5bccd85 Diego Biurrun
 * Codec has a nonzero delay and needs to be fed with NULL at the end to get the delayed data.
486
 * If this is not set, the codec is guaranteed to never be fed with NULL data.
487 934982c4 Michael Niedermayer
 */
488 6f824977 Michael Niedermayer
#define CODEC_CAP_DELAY           0x0020
489 cef7cc72 Justin Ruggles
/**
490
 * Codec can be fed a final frame with a smaller size.
491
 * This can be used to prevent truncation of the last audio samples.
492
 */
493
#define CODEC_CAP_SMALL_LAST_FRAME 0x0040
494 bf89e6b1 Fabrice Bellard
495 f5bccd85 Diego Biurrun
//The following defines may change, don't expect compatibility if you use them.
496 8d7ec294 Wolfgang Hesseler
#define MB_TYPE_INTRA4x4   0x0001
497 f5bccd85 Diego Biurrun
#define MB_TYPE_INTRA16x16 0x0002 //FIXME H.264-specific
498
#define MB_TYPE_INTRA_PCM  0x0004 //FIXME H.264-specific
499 8d7ec294 Wolfgang Hesseler
#define MB_TYPE_16x16      0x0008
500
#define MB_TYPE_16x8       0x0010
501
#define MB_TYPE_8x16       0x0020
502
#define MB_TYPE_8x8        0x0040
503
#define MB_TYPE_INTERLACED 0x0080
504 273b0cd3 Diego Biurrun
#define MB_TYPE_DIRECT2    0x0100 //FIXME
505 8d7ec294 Wolfgang Hesseler
#define MB_TYPE_ACPRED     0x0200
506
#define MB_TYPE_GMC        0x0400
507
#define MB_TYPE_SKIP       0x0800
508
#define MB_TYPE_P0L0       0x1000
509
#define MB_TYPE_P1L0       0x2000
510
#define MB_TYPE_P0L1       0x4000
511
#define MB_TYPE_P1L1       0x8000
512
#define MB_TYPE_L0         (MB_TYPE_P0L0 | MB_TYPE_P1L0)
513
#define MB_TYPE_L1         (MB_TYPE_P0L1 | MB_TYPE_P1L1)
514
#define MB_TYPE_L0L1       (MB_TYPE_L0   | MB_TYPE_L1)
515
#define MB_TYPE_QUANT      0x00010000
516
#define MB_TYPE_CBP        0x00020000
517
//Note bits 24-31 are reserved for codec specific use (h264 ref0, mpeg1 0mv, ...)
518
519 fa384dcc Michael Niedermayer
/**
520
 * Pan Scan area.
521 f5bccd85 Diego Biurrun
 * This specifies the area which should be displayed.
522
 * Note there may be multiple such areas for one frame.
523 fa384dcc Michael Niedermayer
 */
524
typedef struct AVPanScan{
525
    /**
526 f5bccd85 Diego Biurrun
     * id
527
     * - encoding: Set by user.
528
     * - decoding: Set by libavcodec.
529 fa384dcc Michael Niedermayer
     */
530
    int id;
531
532
    /**
533
     * width and height in 1/16 pel
534 f5bccd85 Diego Biurrun
     * - encoding: Set by user.
535
     * - decoding: Set by libavcodec.
536 fa384dcc Michael Niedermayer
     */
537
    int width;
538
    int height;
539
540
    /**
541 f5bccd85 Diego Biurrun
     * position of the top left corner in 1/16 pel for up to 3 fields/frames
542
     * - encoding: Set by user.
543
     * - decoding: Set by libavcodec.
544 fa384dcc Michael Niedermayer
     */
545
    int16_t position[3][2];
546
}AVPanScan;
547
548 492cd3a9 Michael Niedermayer
#define FF_COMMON_FRAME \
549 b536d0aa Michael Niedermayer
    /**\
550
     * pointer to the picture planes.\
551 f5bccd85 Diego Biurrun
     * This might be different from the first allocated byte\
552 b536d0aa Michael Niedermayer
     * - encoding: \
553
     * - decoding: \
554
     */\
555 1e491e29 Michael Niedermayer
    uint8_t *data[4];\
556
    int linesize[4];\
557
    /**\
558 f5bccd85 Diego Biurrun
     * pointer to the first allocated byte of the picture. Can be used in get_buffer/release_buffer.\
559
     * This isn't used by libavcodec unless the default get/release_buffer() is used.\
560 64863965 Michael Niedermayer
     * - encoding: \
561
     * - decoding: \
562 1e491e29 Michael Niedermayer
     */\
563
    uint8_t *base[4];\
564
    /**\
565
     * 1 -> keyframe, 0-> not\
566 f5bccd85 Diego Biurrun
     * - encoding: Set by libavcodec.\
567
     * - decoding: Set by libavcodec.\
568 1e491e29 Michael Niedermayer
     */\
569
    int key_frame;\
570
\
571
    /**\
572 f5bccd85 Diego Biurrun
     * Picture type of the frame, see ?_TYPE below.\
573
     * - encoding: Set by libavcodec. for coded_picture (and set by user for input).\
574
     * - decoding: Set by libavcodec.\
575 1e491e29 Michael Niedermayer
     */\
576
    int pict_type;\
577
\
578
    /**\
579 c0df9d75 Michael Niedermayer
     * presentation timestamp in time_base units (time when frame should be shown to user)\
580 f5bccd85 Diego Biurrun
     * If AV_NOPTS_VALUE then frame_rate = 1/time_base will be assumed.\
581
     * - encoding: MUST be set by user.\
582
     * - decoding: Set by libavcodec.\
583 1e491e29 Michael Niedermayer
     */\
584 be6784dc Richard Hodges
    int64_t pts;\
585 1e491e29 Michael Niedermayer
\
586
    /**\
587 f5bccd85 Diego Biurrun
     * picture number in bitstream order\
588 64863965 Michael Niedermayer
     * - encoding: set by\
589 f5bccd85 Diego Biurrun
     * - decoding: Set by libavcodec.\
590 1e491e29 Michael Niedermayer
     */\
591
    int coded_picture_number;\
592
    /**\
593 f5bccd85 Diego Biurrun
     * picture number in display order\
594 64863965 Michael Niedermayer
     * - encoding: set by\
595 f5bccd85 Diego Biurrun
     * - decoding: Set by libavcodec.\
596 1e491e29 Michael Niedermayer
     */\
597
    int display_picture_number;\
598
\
599
    /**\
600 158c7f05 Michael Niedermayer
     * quality (between 1 (good) and FF_LAMBDA_MAX (bad)) \
601 f5bccd85 Diego Biurrun
     * - encoding: Set by libavcodec. for coded_picture (and set by user for input).\
602
     * - decoding: Set by libavcodec.\
603 1e491e29 Michael Niedermayer
     */\
604 158c7f05 Michael Niedermayer
    int quality; \
605 1e491e29 Michael Niedermayer
\
606
    /**\
607
     * buffer age (1->was last buffer and dint change, 2->..., ...).\
608 f5bccd85 Diego Biurrun
     * Set to INT_MAX if the buffer has not been used yet.\
609 64863965 Michael Niedermayer
     * - encoding: unused\
610 f5bccd85 Diego Biurrun
     * - decoding: MUST be set by get_buffer().\
611 1e491e29 Michael Niedermayer
     */\
612
    int age;\
613
\
614
    /**\
615
     * is this picture used as reference\
616 8474f58e Michael Niedermayer
     * The values for this are the same as the MpegEncContext.picture_structure\
617
     * variable, that is 1->top field, 2->bottom field, 3->frame/both fields.\
618 64863965 Michael Niedermayer
     * - encoding: unused\
619 f5bccd85 Diego Biurrun
     * - decoding: Set by libavcodec. (before get_buffer() call)).\
620 1e491e29 Michael Niedermayer
     */\
621
    int reference;\
622
\
623
    /**\
624
     * QP table\
625 64863965 Michael Niedermayer
     * - encoding: unused\
626 f5bccd85 Diego Biurrun
     * - decoding: Set by libavcodec.\
627 1e491e29 Michael Niedermayer
     */\
628
    int8_t *qscale_table;\
629
    /**\
630
     * QP store stride\
631 64863965 Michael Niedermayer
     * - encoding: unused\
632 f5bccd85 Diego Biurrun
     * - decoding: Set by libavcodec.\
633 1e491e29 Michael Niedermayer
     */\
634
    int qstride;\
635
\
636
    /**\
637 f5bccd85 Diego Biurrun
     * mbskip_table[mb]>=1 if MB didn't change\
638 1e491e29 Michael Niedermayer
     * stride= mb_width = (width+15)>>4\
639 64863965 Michael Niedermayer
     * - encoding: unused\
640 f5bccd85 Diego Biurrun
     * - decoding: Set by libavcodec.\
641 1e491e29 Michael Niedermayer
     */\
642
    uint8_t *mbskip_table;\
643
\
644
    /**\
645 f5bccd85 Diego Biurrun
     * motion vector table\
646 61436073 Michael Niedermayer
     * @code\
647
     * example:\
648
     * int mv_sample_log2= 4 - motion_subsample_log2;\
649
     * int mb_width= (width+15)>>4;\
650
     * int mv_stride= (mb_width << mv_sample_log2) + 1;\
651
     * motion_val[direction][x + y*mv_stride][0->mv_x, 1->mv_y];\
652
     * @endcode\
653 f5bccd85 Diego Biurrun
     * - encoding: Set by user.\
654
     * - decoding: Set by libavcodec.\
655 8d7ec294 Wolfgang Hesseler
     */\
656
    int16_t (*motion_val[2])[2];\
657
\
658
    /**\
659 f5bccd85 Diego Biurrun
     * macroblock type table\
660 8d7ec294 Wolfgang Hesseler
     * mb_type_base + mb_width + 2\
661 f5bccd85 Diego Biurrun
     * - encoding: Set by user.\
662
     * - decoding: Set by libavcodec.\
663 8d7ec294 Wolfgang Hesseler
     */\
664
    uint32_t *mb_type;\
665
\
666
    /**\
667 f0b77c69 Michael Niedermayer
     * log2 of the size of the block which a single vector in motion_val represents: \
668
     * (4->16x16, 3->8x8, 2-> 4x4, 1-> 2x2)\
669 8d7ec294 Wolfgang Hesseler
     * - encoding: unused\
670 f5bccd85 Diego Biurrun
     * - decoding: Set by libavcodec.\
671 8d7ec294 Wolfgang Hesseler
     */\
672
    uint8_t motion_subsample_log2;\
673
\
674
    /**\
675 1e491e29 Michael Niedermayer
     * for some private data of the user\
676 64863965 Michael Niedermayer
     * - encoding: unused\
677 f5bccd85 Diego Biurrun
     * - decoding: Set by user.\
678 1e491e29 Michael Niedermayer
     */\
679
    void *opaque;\
680 140cb663 Michael Niedermayer
\
681
    /**\
682
     * error\
683 f5bccd85 Diego Biurrun
     * - encoding: Set by libavcodec. if flags&CODEC_FLAG_PSNR.\
684 64863965 Michael Niedermayer
     * - decoding: unused\
685 140cb663 Michael Niedermayer
     */\
686
    uint64_t error[4];\
687 4e00e76b Michael Niedermayer
\
688
    /**\
689 f5bccd85 Diego Biurrun
     * type of the buffer (to keep track of who has to deallocate data[*])\
690
     * - encoding: Set by the one who allocates it.\
691
     * - decoding: Set by the one who allocates it.\
692
     * Note: User allocated (direct rendering) & internal buffers cannot coexist currently.\
693 4e00e76b Michael Niedermayer
     */\
694
    int type;\
695 2ec23b6d Michael Niedermayer
    \
696
    /**\
697 f5bccd85 Diego Biurrun
     * When decoding, this signals how much the picture must be delayed.\
698 2ec23b6d Michael Niedermayer
     * extra_delay = repeat_pict / (2*fps)\
699 64863965 Michael Niedermayer
     * - encoding: unused\
700 f5bccd85 Diego Biurrun
     * - decoding: Set by libavcodec.\
701 2ec23b6d Michael Niedermayer
     */\
702 0426af31 Michael Niedermayer
    int repeat_pict;\
703
    \
704
    /**\
705
     * \
706
     */\
707
    int qscale_type;\
708 2744ca9a Roman Shaposhnik
    \
709
    /**\
710
     * The content of the picture is interlaced.\
711 f5bccd85 Diego Biurrun
     * - encoding: Set by user.\
712
     * - decoding: Set by libavcodec. (default 0)\
713 2744ca9a Roman Shaposhnik
     */\
714
    int interlaced_frame;\
715
    \
716
    /**\
717 f5bccd85 Diego Biurrun
     * If the content is interlaced, is top field displayed first.\
718
     * - encoding: Set by user.\
719
     * - decoding: Set by libavcodec.\
720 2744ca9a Roman Shaposhnik
     */\
721 9dad924e Michael Niedermayer
    int top_field_first;\
722 fa384dcc Michael Niedermayer
    \
723
    /**\
724
     * Pan scan.\
725 f5bccd85 Diego Biurrun
     * - encoding: Set by user.\
726
     * - decoding: Set by libavcodec.\
727 fa384dcc Michael Niedermayer
     */\
728
    AVPanScan *pan_scan;\
729 2a2bbcb0 Mike Melanson
    \
730
    /**\
731 f5bccd85 Diego Biurrun
     * Tell user application that palette has changed from previous frame.\
732 2a2bbcb0 Mike Melanson
     * - encoding: ??? (no palette-enabled encoder yet)\
733 f5bccd85 Diego Biurrun
     * - decoding: Set by libavcodec. (default 0).\
734 2a2bbcb0 Mike Melanson
     */\
735
    int palette_has_changed;\
736 074c4ca7 Roberto Togni
    \
737
    /**\
738 f5bccd85 Diego Biurrun
     * codec suggestion on buffer type if != 0\
739 074c4ca7 Roberto Togni
     * - encoding: unused\
740 f5bccd85 Diego Biurrun
     * - decoding: Set by libavcodec. (before get_buffer() call)).\
741 074c4ca7 Roberto Togni
     */\
742
    int buffer_hints;\
743 8289c6fa Wolfgang Hesseler
\
744
    /**\
745 f5bccd85 Diego Biurrun
     * DCT coefficients\
746 8289c6fa Wolfgang Hesseler
     * - encoding: unused\
747 f5bccd85 Diego Biurrun
     * - decoding: Set by libavcodec.\
748 8289c6fa Wolfgang Hesseler
     */\
749
    short *dct_coeff;\
750 a4d36c11 Michael Niedermayer
\
751
    /**\
752 f5bccd85 Diego Biurrun
     * motion referece frame index\
753
     * - encoding: Set by user.\
754
     * - decoding: Set by libavcodec.\
755 a4d36c11 Michael Niedermayer
     */\
756
    int8_t *ref_index[2];
757 2ec23b6d Michael Niedermayer
758 bb270c08 Diego Biurrun
#define FF_QSCALE_TYPE_MPEG1 0
759
#define FF_QSCALE_TYPE_MPEG2 1
760
#define FF_QSCALE_TYPE_H264  2
761 4e00e76b Michael Niedermayer
762
#define FF_BUFFER_TYPE_INTERNAL 1
763 f5bccd85 Diego Biurrun
#define FF_BUFFER_TYPE_USER     2 ///< direct rendering buffers (image is (de)allocated by user)
764
#define FF_BUFFER_TYPE_SHARED   4 ///< Buffer from somewhere else; don't deallocate image (data/base), all other tables are not shared.
765
#define FF_BUFFER_TYPE_COPY     8 ///< Just a (modified) copy of some other buffer, don't deallocate anything.
766 4e00e76b Michael Niedermayer
767 1e491e29 Michael Niedermayer
768 dc85e859 Aurelien Jacobs
#define FF_I_TYPE  1 ///< Intra
769
#define FF_P_TYPE  2 ///< Predicted
770
#define FF_B_TYPE  3 ///< Bi-dir predicted
771
#define FF_S_TYPE  4 ///< S(GMC)-VOP MPEG4
772
#define FF_SI_TYPE 5 ///< Switching Intra
773
#define FF_SP_TYPE 6 ///< Switching Predicted
774 48d533e6 Aurelien Jacobs
#define FF_BI_TYPE 7
775 1e491e29 Michael Niedermayer
776 f5bccd85 Diego Biurrun
#define FF_BUFFER_HINTS_VALID    0x01 // Buffer hints value is meaningful (if 0 ignore).
777
#define FF_BUFFER_HINTS_READABLE 0x02 // Codec will read from buffer.
778
#define FF_BUFFER_HINTS_PRESERVE 0x04 // User must not alter buffer content.
779
#define FF_BUFFER_HINTS_REUSABLE 0x08 // Codec will reuse the buffer (update).
780 074c4ca7 Roberto Togni
781 0da71265 Michael Niedermayer
/**
782
 * Audio Video Frame.
783 ba66ae94 Michael Niedermayer
 * New fields can be added to the end of FF_COMMON_FRAME with minor version
784
 * bumps.
785 8bfb108b Diego Biurrun
 * Removal, reordering and changes to existing fields require a major
786 ba66ae94 Michael Niedermayer
 * version bump. No fields should be added into AVFrame before or after
787
 * FF_COMMON_FRAME!
788 8bfb108b Diego Biurrun
 * sizeof(AVFrame) must not be used outside libav*.
789 0da71265 Michael Niedermayer
 */
790 492cd3a9 Michael Niedermayer
typedef struct AVFrame {
791
    FF_COMMON_FRAME
792
} AVFrame;
793 1e491e29 Michael Niedermayer
794 14bea432 Michael Niedermayer
#define DEFAULT_FRAME_RATE_BASE 1001000
795 d33c949c Michael Niedermayer
796
/**
797 252f17e2 Michael Niedermayer
 * main external API structure.
798
 * New fields can be added to the end with minor version bumps.
799 8bfb108b Diego Biurrun
 * Removal, reordering and changes to existing fields require a major
800 252f17e2 Michael Niedermayer
 * version bump.
801 8bfb108b Diego Biurrun
 * sizeof(AVCodecContext) must not be used outside libav*.
802 d33c949c Michael Niedermayer
 */
803 de6d9b64 Fabrice Bellard
typedef struct AVCodecContext {
804 b71901e6 Michael Niedermayer
    /**
805 f5bccd85 Diego Biurrun
     * information on struct for av_log
806 bc874dae Michel Bardiaux
     * - set by avcodec_alloc_context
807
     */
808 d42a814e Panagiotis Issaris
    const AVClass *av_class;
809 bc874dae Michel Bardiaux
    /**
810 f5bccd85 Diego Biurrun
     * the average bitrate
811
     * - encoding: Set by user; unused for constant quantizer encoding.
812
     * - decoding: Set by libavcodec. 0 or some bitrate if this info is available in the stream.
813 b71901e6 Michael Niedermayer
     */
814 de6d9b64 Fabrice Bellard
    int bit_rate;
815 b71901e6 Michael Niedermayer
816
    /**
817 64863965 Michael Niedermayer
     * number of bits the bitstream is allowed to diverge from the reference.
818 b71901e6 Michael Niedermayer
     *           the reference can be CBR (for CBR pass1) or VBR (for pass2)
819 f5bccd85 Diego Biurrun
     * - encoding: Set by user; unused for constant quantizer encoding.
820 64863965 Michael Niedermayer
     * - decoding: unused
821 b71901e6 Michael Niedermayer
     */
822 115329f1 Diego Biurrun
    int bit_rate_tolerance;
823 b71901e6 Michael Niedermayer
824
    /**
825 64863965 Michael Niedermayer
     * CODEC_FLAG_*.
826 f5bccd85 Diego Biurrun
     * - encoding: Set by user.
827
     * - decoding: Set by user.
828 b71901e6 Michael Niedermayer
     */
829 de6d9b64 Fabrice Bellard
    int flags;
830 b71901e6 Michael Niedermayer
831
    /**
832 f5bccd85 Diego Biurrun
     * Some codecs need additional format info. It is stored here.
833
     * If any muxer uses this then ALL demuxers/parsers AND encoders for the
834
     * specific codec MUST set it correctly otherwise stream copy breaks.
835
     * In general use of this field by muxers is not recommanded.
836
     * - encoding: Set by libavcodec.
837
     * - decoding: Set by libavcodec. (FIXME: Is this OK?)
838 b71901e6 Michael Niedermayer
     */
839
    int sub_id;
840
841
    /**
842 f5bccd85 Diego Biurrun
     * Motion estimation algorithm used for video coding.
843 58f7833e Robert Swain
     * 1 (zero), 2 (full), 3 (log), 4 (phods), 5 (epzs), 6 (x1), 7 (hex),
844 89223ef6 Baptiste Coudurier
     * 8 (umh), 9 (iter), 10 (tesa) [7, 8, 10 are x264 specific, 9 is snow specific]
845 64863965 Michael Niedermayer
     * - encoding: MUST be set by user.
846
     * - decoding: unused
847 b71901e6 Michael Niedermayer
     */
848
    int me_method;
849
850
    /**
851 f5bccd85 Diego Biurrun
     * some codecs need / can use extradata like Huffman tables.
852
     * mjpeg: Huffman tables
853 b71901e6 Michael Niedermayer
     * rv10: additional flags
854 b704e742 Michael Niedermayer
     * mpeg4: global headers (they can be in the bitstream or here)
855 f5bccd85 Diego Biurrun
     * The allocated memory should be FF_INPUT_BUFFER_PADDING_SIZE bytes larger
856
     * than extradata_size to avoid prolems if it is read with the bitstream reader.
857
     * The bytewise contents of extradata must not depend on the architecture or CPU endianness.
858
     * - encoding: Set/allocated/freed by libavcodec.
859
     * - decoding: Set/allocated/freed by user.
860 b71901e6 Michael Niedermayer
     */
861 58f2a4b0 Baptiste Coudurier
    uint8_t *extradata;
862 e84c31dc Arpi
    int extradata_size;
863 115329f1 Diego Biurrun
864 b71901e6 Michael Niedermayer
    /**
865 f5bccd85 Diego Biurrun
     * This is the fundamental unit of time (in seconds) in terms
866
     * of which frame timestamps are represented. For fixed-fps content,
867 5b28c8c3 Michael Niedermayer
     * timebase should be 1/framerate and timestamp increments should be
868
     * identically 1.
869 f5bccd85 Diego Biurrun
     * - encoding: MUST be set by user.
870
     * - decoding: Set by libavcodec.
871 b71901e6 Michael Niedermayer
     */
872 c0df9d75 Michael Niedermayer
    AVRational time_base;
873 115329f1 Diego Biurrun
874 5b28c8c3 Michael Niedermayer
    /* video only */
875 14bea432 Michael Niedermayer
    /**
876 21adafec Michael Niedermayer
     * picture width / height.
877 115329f1 Diego Biurrun
     * - encoding: MUST be set by user.
878 f5bccd85 Diego Biurrun
     * - decoding: Set by libavcodec.
879
     * Note: For compatibility it is possible to set this instead of
880
     * coded_width/height before decoding.
881 b71901e6 Michael Niedermayer
     */
882 de6d9b64 Fabrice Bellard
    int width, height;
883 115329f1 Diego Biurrun
884 e769f053 Alex Beregszaszi
#define FF_ASPECT_EXTENDED 15
885 b71901e6 Michael Niedermayer
886
    /**
887 f5bccd85 Diego Biurrun
     * the number of pictures in a group of pictures, or 0 for intra_only
888
     * - encoding: Set by user.
889 64863965 Michael Niedermayer
     * - decoding: unused
890 b71901e6 Michael Niedermayer
     */
891
    int gop_size;
892
893
    /**
894 f5bccd85 Diego Biurrun
     * Pixel format, see PIX_FMT_xxx.
895
     * - encoding: Set by user.
896
     * - decoding: Set by libavcodec.
897 b71901e6 Michael Niedermayer
     */
898 e4eadb4b Michael Niedermayer
    enum PixelFormat pix_fmt;
899 115329f1 Diego Biurrun
900 bdfcbbed Max Krasnyansky
    /**
901 f5bccd85 Diego Biurrun
     * Frame rate emulation. If not zero, the lower layer (i.e. format handler)
902 bdfcbbed Max Krasnyansky
     * has to read frames at native frame rate.
903 f5bccd85 Diego Biurrun
     * - encoding: Set by user.
904
     * - decoding: unused
905 bdfcbbed Max Krasnyansky
     */
906
    int rate_emu;
907 115329f1 Diego Biurrun
908 b71901e6 Michael Niedermayer
    /**
909 f5bccd85 Diego Biurrun
     * If non NULL, 'draw_horiz_band' is called by the libavcodec
910
     * decoder to draw a horizontal band. It improves cache usage. Not
911 b71901e6 Michael Niedermayer
     * all codecs can do that. You must check the codec capabilities
912 f5bccd85 Diego Biurrun
     * beforehand.
913 64863965 Michael Niedermayer
     * - encoding: unused
914 f5bccd85 Diego Biurrun
     * - decoding: Set by user.
915 3bb07d61 Michael Niedermayer
     * @param height the height of the slice
916
     * @param y the y position of the slice
917
     * @param type 1->top field, 2->bottom field, 3->frame
918
     * @param offset offset into the AVFrame.data from which the slice should be read
919 b71901e6 Michael Niedermayer
     */
920 bf89e6b1 Fabrice Bellard
    void (*draw_horiz_band)(struct AVCodecContext *s,
921 da64ecc3 Drew Hess
                            const AVFrame *src, int offset[4],
922 3bb07d61 Michael Niedermayer
                            int y, int type, int height);
923 bf89e6b1 Fabrice Bellard
924 de6d9b64 Fabrice Bellard
    /* audio only */
925 f5bccd85 Diego Biurrun
    int sample_rate; ///< samples per second
926 5fcc4a23 Stefano Sabatini
    int channels;    ///< number of audio channels
927 a3a5f4d6 Michael Niedermayer
928
    /**
929 f5bccd85 Diego Biurrun
     * audio sample format
930
     * - encoding: Set by user.
931
     * - decoding: Set by libavcodec.
932 a3a5f4d6 Michael Niedermayer
     */
933 f5bccd85 Diego Biurrun
    enum SampleFormat sample_fmt;  ///< sample format, currently unused
934 de6d9b64 Fabrice Bellard
935 f5bccd85 Diego Biurrun
    /* The following data should not be initialized. */
936 718b27a7 Michael Niedermayer
    /**
937 f5bccd85 Diego Biurrun
     * Samples per packet, initialized when calling 'init'.
938 718b27a7 Michael Niedermayer
     */
939
    int frame_size;
940 115329f1 Diego Biurrun
    int frame_number;   ///< audio or video frame number
941 f5bccd85 Diego Biurrun
    int real_pict_num;  ///< Returns the real picture number of previous encoded frame.
942 115329f1 Diego Biurrun
943 b71901e6 Michael Niedermayer
    /**
944 f5bccd85 Diego Biurrun
     * Number of frames the decoded output will be delayed relative to
945 64863965 Michael Niedermayer
     * the encoded input.
946 f5bccd85 Diego Biurrun
     * - encoding: Set by libavcodec.
947 64863965 Michael Niedermayer
     * - decoding: unused
948 b71901e6 Michael Niedermayer
     */
949
    int delay;
950 115329f1 Diego Biurrun
951 64863965 Michael Niedermayer
    /* - encoding parameters */
952
    float qcompress;  ///< amount of qscale change between easy & hard scenes (0.0-1.0)
953 115329f1 Diego Biurrun
    float qblur;      ///< amount of qscale smoothing over time (0.0-1.0)
954
955 b71901e6 Michael Niedermayer
    /**
956 f5bccd85 Diego Biurrun
     * minimum quantizer
957
     * - encoding: Set by user.
958 64863965 Michael Niedermayer
     * - decoding: unused
959 b71901e6 Michael Niedermayer
     */
960
    int qmin;
961
962
    /**
963 f5bccd85 Diego Biurrun
     * maximum quantizer
964
     * - encoding: Set by user.
965 64863965 Michael Niedermayer
     * - decoding: unused
966 b71901e6 Michael Niedermayer
     */
967
    int qmax;
968
969
    /**
970 f5bccd85 Diego Biurrun
     * maximum quantizer difference between frames
971
     * - encoding: Set by user.
972 64863965 Michael Niedermayer
     * - decoding: unused
973 b71901e6 Michael Niedermayer
     */
974
    int max_qdiff;
975
976
    /**
977 f5bccd85 Diego Biurrun
     * maximum number of B-frames between non-B-frames
978
     * Note: The output will be delayed by max_b_frames+1 relative to the input.
979
     * - encoding: Set by user.
980 64863965 Michael Niedermayer
     * - decoding: unused
981 b71901e6 Michael Niedermayer
     */
982
    int max_b_frames;
983
984
    /**
985 f5bccd85 Diego Biurrun
     * qscale factor between IP and B-frames
986
     * - encoding: Set by user.
987 64863965 Michael Niedermayer
     * - decoding: unused
988 b71901e6 Michael Niedermayer
     */
989
    float b_quant_factor;
990 115329f1 Diego Biurrun
991 b71901e6 Michael Niedermayer
    /** obsolete FIXME remove */
992
    int rc_strategy;
993 64b7c5b6 Michael Niedermayer
#define FF_RC_STRATEGY_XVID 1
994
995 8b4c7dbc Michael Niedermayer
    int b_frame_strategy;
996 9dbcbd92 Michael Niedermayer
997 b71901e6 Michael Niedermayer
    /**
998 f5bccd85 Diego Biurrun
     * hurry up amount
999 64863965 Michael Niedermayer
     * - encoding: unused
1000 f5bccd85 Diego Biurrun
     * - decoding: Set by user. 1-> Skip B-frames, 2-> Skip IDCT/dequant too, 5-> Skip everything except header
1001 f9ec0aa1 Panagiotis Issaris
     * @deprecated Deprecated in favor of skip_idct and skip_frame.
1002 b71901e6 Michael Niedermayer
     */
1003
    int hurry_up;
1004 115329f1 Diego Biurrun
1005 de6d9b64 Fabrice Bellard
    struct AVCodec *codec;
1006 115329f1 Diego Biurrun
1007 de6d9b64 Fabrice Bellard
    void *priv_data;
1008
1009 ccec0f4f Baptiste Coudurier
#if LIBAVCODEC_VERSION_INT < ((52<<16)+(0<<8)+0)
1010 ba58dabc Michael Niedermayer
    /* unused, FIXME remove*/
1011
    int rtp_mode;
1012 ccec0f4f Baptiste Coudurier
#endif
1013 115329f1 Diego Biurrun
1014 bb628dae Diego Biurrun
    int rtp_payload_size;   /* The size of the RTP payload: the coder will  */
1015 f5bccd85 Diego Biurrun
                            /* do its best to deliver a chunk with size     */
1016 644d98a4 Juanjo
                            /* below rtp_payload_size, the chunk will start */
1017 f5bccd85 Diego Biurrun
                            /* with a start code on some codecs like H.263. */
1018 644d98a4 Juanjo
                            /* This doesn't take account of any particular  */
1019 f5bccd85 Diego Biurrun
                            /* headers inside the transmitted RTP payload.  */
1020 81401c1f Juanjo
1021 115329f1 Diego Biurrun
1022 f5bccd85 Diego Biurrun
    /* The RTP callback: This function is called    */
1023
    /* every time the encoder has a packet to send. */
1024
    /* It depends on the encoder if the data starts */
1025
    /* with a Start Code (it should). H.263 does.   */
1026
    /* mb_nb contains the number of macroblocks     */
1027
    /* encoded in the RTP payload.                  */
1028 115329f1 Diego Biurrun
    void (*rtp_callback)(struct AVCodecContext *avctx, void *data, int size, int mb_nb);
1029 81401c1f Juanjo
1030 098eefe1 Michael Niedermayer
    /* statistics, used for 2-pass encoding */
1031
    int mv_bits;
1032
    int header_bits;
1033
    int i_tex_bits;
1034
    int p_tex_bits;
1035
    int i_count;
1036
    int p_count;
1037
    int skip_count;
1038 b71901e6 Michael Niedermayer
    int misc_bits;
1039 115329f1 Diego Biurrun
1040 b71901e6 Michael Niedermayer
    /**
1041 f5bccd85 Diego Biurrun
     * number of bits used for the previously encoded frame
1042
     * - encoding: Set by libavcodec.
1043 7004ffb3 Michael Niedermayer
     * - decoding: unused
1044 b71901e6 Michael Niedermayer
     */
1045 098eefe1 Michael Niedermayer
    int frame_bits;
1046 7004ffb3 Michael Niedermayer
1047 b71901e6 Michael Niedermayer
    /**
1048 f5bccd85 Diego Biurrun
     * Private data of the user, can be used to carry app specific stuff.
1049
     * - encoding: Set by user.
1050
     * - decoding: Set by user.
1051 b71901e6 Michael Niedermayer
     */
1052
    void *opaque;
1053
1054 de6d9b64 Fabrice Bellard
    char codec_name[32];
1055 4a663d80 Philip Gladstone
    enum CodecType codec_type; /* see CODEC_TYPE_xxx */
1056
    enum CodecID codec_id; /* see CODEC_ID_xxx */
1057 115329f1 Diego Biurrun
1058 7004ffb3 Michael Niedermayer
    /**
1059
     * fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A').
1060 f5bccd85 Diego Biurrun
     * This is used to work around some encoder bugs.
1061
     * A demuxer should set this to what is stored in the field used to identify the codec.
1062
     * If there are multiple such fields in a container then the demuxer should choose the one
1063
     * which maximizes the information about the used codec.
1064
     * If the codec tag field in a container is larger then 32 bits then the demuxer should
1065
     * remap the longer ID to 32 bits with a table or other structure. Alternatively a new
1066 47bbf8a7 Michael Niedermayer
     * extra_codec_tag + size could be added but for this a clear advantage must be demonstrated
1067 f5bccd85 Diego Biurrun
     * first.
1068
     * - encoding: Set by user, if not then the default based on codec_id will be used.
1069
     * - decoding: Set by user, will be converted to uppercase by libavcodec during init.
1070 7004ffb3 Michael Niedermayer
     */
1071
    unsigned int codec_tag;
1072 115329f1 Diego Biurrun
1073 b71901e6 Michael Niedermayer
    /**
1074 f5bccd85 Diego Biurrun
     * Work around bugs in encoders which sometimes cannot be detected automatically.
1075
     * - encoding: Set by user
1076
     * - decoding: Set by user
1077 b71901e6 Michael Niedermayer
     */
1078
    int workaround_bugs;
1079 64863965 Michael Niedermayer
#define FF_BUG_AUTODETECT       1  ///< autodetection
1080 4d2858de Michael Niedermayer
#define FF_BUG_OLD_MSMPEG4      2
1081
#define FF_BUG_XVID_ILACE       4
1082
#define FF_BUG_UMP4             8
1083
#define FF_BUG_NO_PADDING       16
1084 3116cb14 Michael Niedermayer
#define FF_BUG_AMV              32
1085 f5bccd85 Diego Biurrun
#define FF_BUG_AC_VLC           0  ///< Will be removed, libavcodec can now handle these non-compliant files by default.
1086 03e93d35 Michael Niedermayer
#define FF_BUG_QPEL_CHROMA      64
1087 db794953 Michael Niedermayer
#define FF_BUG_STD_QPEL         128
1088 36df8805 Michael Niedermayer
#define FF_BUG_QPEL_CHROMA2     256
1089 c40c3482 Michael Niedermayer
#define FF_BUG_DIRECT_BLOCKSIZE 512
1090 1c6dcb0f Michael Niedermayer
#define FF_BUG_EDGE             1024
1091 b44bdf7e Michael Niedermayer
#define FF_BUG_HPEL_CHROMA      2048
1092 4ccde216 Michael Niedermayer
#define FF_BUG_DC_CLIP          4096
1093 f5bccd85 Diego Biurrun
#define FF_BUG_MS               8192 ///< Work around various bugs in Microsoft's broken decoders.
1094
//#define FF_BUG_FAKE_SCALABILITY 16 //Autodetection should work 100%.
1095 115329f1 Diego Biurrun
1096 b71901e6 Michael Niedermayer
    /**
1097 f5bccd85 Diego Biurrun
     * luma single coefficient elimination threshold
1098
     * - encoding: Set by user.
1099 64863965 Michael Niedermayer
     * - decoding: unused
1100 b71901e6 Michael Niedermayer
     */
1101 1f6b6e50 Michael Niedermayer
    int luma_elim_threshold;
1102 115329f1 Diego Biurrun
1103 b71901e6 Michael Niedermayer
    /**
1104 f5bccd85 Diego Biurrun
     * chroma single coeff elimination threshold
1105
     * - encoding: Set by user.
1106 64863965 Michael Niedermayer
     * - decoding: unused
1107 b71901e6 Michael Niedermayer
     */
1108 1f6b6e50 Michael Niedermayer
    int chroma_elim_threshold;
1109 115329f1 Diego Biurrun
1110 b71901e6 Michael Niedermayer
    /**
1111 f5bccd85 Diego Biurrun
     * strictly follow the standard (MPEG4, ...).
1112
     * - encoding: Set by user.
1113 64863965 Michael Niedermayer
     * - decoding: unused
1114 b71901e6 Michael Niedermayer
     */
1115
    int strict_std_compliance;
1116 f5bccd85 Diego Biurrun
#define FF_COMPLIANCE_VERY_STRICT   2 ///< Strictly conform to a older more strict version of the spec or reference software.
1117
#define FF_COMPLIANCE_STRICT        1 ///< Strictly conform to all the things in the spec no matter what consequences.
1118 9cd81798 Michael Niedermayer
#define FF_COMPLIANCE_NORMAL        0
1119 f5bccd85 Diego Biurrun
#define FF_COMPLIANCE_INOFFICIAL   -1 ///< Allow inofficial extensions.
1120
#define FF_COMPLIANCE_EXPERIMENTAL -2 ///< Allow nonstandardized experimental things.
1121 9cd81798 Michael Niedermayer
1122 b71901e6 Michael Niedermayer
    /**
1123 f5bccd85 Diego Biurrun
     * qscale offset between IP and B-frames
1124
     * If > 0 then the last P-frame quantizer will be used (q= lastp_q*factor+offset).
1125
     * If < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset).
1126
     * - encoding: Set by user.
1127 64863965 Michael Niedermayer
     * - decoding: unused
1128 b71901e6 Michael Niedermayer
     */
1129
    float b_quant_offset;
1130 115329f1 Diego Biurrun
1131 b71901e6 Michael Niedermayer
    /**
1132 f5bccd85 Diego Biurrun
     * Error resilience; higher values will detect more errors but may
1133
     * misdetect some more or less valid parts as errors.
1134 64863965 Michael Niedermayer
     * - encoding: unused
1135 f5bccd85 Diego Biurrun
     * - decoding: Set by user.
1136 b71901e6 Michael Niedermayer
     */
1137 1f6b6e50 Michael Niedermayer
    int error_resilience;
1138 1471c6c2 Diego Biurrun
#define FF_ER_CAREFUL         1
1139 ce3bcaed Michael Niedermayer
#define FF_ER_COMPLIANT       2
1140
#define FF_ER_AGGRESSIVE      3
1141
#define FF_ER_VERY_AGGRESSIVE 4
1142 115329f1 Diego Biurrun
1143 6b72ac63 Michael Niedermayer
    /**
1144 f5bccd85 Diego Biurrun
     * Called at the beginning of each frame to get a buffer for it.
1145
     * If pic.reference is set then the frame will be read later by libavcodec.
1146 2b5296d2 Michael Niedermayer
     * avcodec_align_dimensions() should be used to find the required width and
1147 f5bccd85 Diego Biurrun
     * height, as they normally need to be rounded up to the next multiple of 16.
1148 64863965 Michael Niedermayer
     * - encoding: unused
1149 f5bccd85 Diego Biurrun
     * - decoding: Set by libavcodec., user can override.
1150 b71901e6 Michael Niedermayer
     */
1151 492cd3a9 Michael Niedermayer
    int (*get_buffer)(struct AVCodecContext *c, AVFrame *pic);
1152 115329f1 Diego Biurrun
1153 b71901e6 Michael Niedermayer
    /**
1154 69b192ac Ramiro Polla
     * Called to release buffers which were allocated with get_buffer.
1155 f5bccd85 Diego Biurrun
     * A released buffer can be reused in get_buffer().
1156
     * pic.data[*] must be set to NULL.
1157 64863965 Michael Niedermayer
     * - encoding: unused
1158 f5bccd85 Diego Biurrun
     * - decoding: Set by libavcodec., user can override.
1159 b71901e6 Michael Niedermayer
     */
1160 492cd3a9 Michael Niedermayer
    void (*release_buffer)(struct AVCodecContext *c, AVFrame *pic);
1161 0fd90455 Michael Niedermayer
1162 b71901e6 Michael Niedermayer
    /**
1163 f5bccd85 Diego Biurrun
     * If 1 the stream has a 1 frame delay during decoding.
1164
     * - encoding: Set by libavcodec.
1165
     * - decoding: Set by libavcodec.
1166 b71901e6 Michael Niedermayer
     */
1167
    int has_b_frames;
1168 718b27a7 Michael Niedermayer
1169
    /**
1170
     * number of bytes per packet if constant and known or 0
1171 f5bccd85 Diego Biurrun
     * Used by some WAV based audio codecs.
1172 718b27a7 Michael Niedermayer
     */
1173
    int block_align;
1174 115329f1 Diego Biurrun
1175 f5bccd85 Diego Biurrun
    int parse_only; /* - decoding only: If true, only parsing is done
1176 917e06c8 Fabrice Bellard
                       (function avcodec_parse_frame()). The frame
1177
                       data is returned. Only MPEG codecs support this now. */
1178 115329f1 Diego Biurrun
1179 b71901e6 Michael Niedermayer
    /**
1180 f5bccd85 Diego Biurrun
     * 0-> h263 quant 1-> mpeg quant
1181
     * - encoding: Set by user.
1182 64863965 Michael Niedermayer
     * - decoding: unused
1183 b71901e6 Michael Niedermayer
     */
1184
    int mpeg_quant;
1185 115329f1 Diego Biurrun
1186 b71901e6 Michael Niedermayer
    /**
1187 f5bccd85 Diego Biurrun
     * pass1 encoding statistics output buffer
1188
     * - encoding: Set by libavcodec.
1189 64863965 Michael Niedermayer
     * - decoding: unused
1190 b71901e6 Michael Niedermayer
     */
1191 64863965 Michael Niedermayer
    char *stats_out;
1192 115329f1 Diego Biurrun
1193 b71901e6 Michael Niedermayer
    /**
1194 f5bccd85 Diego Biurrun
     * pass2 encoding statistics input buffer
1195
     * Concatenated stuff from stats_out of pass1 should be placed here.
1196
     * - encoding: Allocated/set/freed by user.
1197 64863965 Michael Niedermayer
     * - decoding: unused
1198 b71901e6 Michael Niedermayer
     */
1199
    char *stats_in;
1200 115329f1 Diego Biurrun
1201 b71901e6 Michael Niedermayer
    /**
1202 f5bccd85 Diego Biurrun
     * ratecontrol qmin qmax limiting method
1203
     * 0-> clipping, 1-> use a nice continous function to limit qscale wthin qmin/qmax.
1204
     * - encoding: Set by user.
1205 64863965 Michael Niedermayer
     * - decoding: unused
1206 b71901e6 Michael Niedermayer
     */
1207 ce980a95 Michael Niedermayer
    float rc_qsquish;
1208 b71901e6 Michael Niedermayer
1209 ce980a95 Michael Niedermayer
    float rc_qmod_amp;
1210
    int rc_qmod_freq;
1211 115329f1 Diego Biurrun
1212 b71901e6 Michael Niedermayer
    /**
1213 f5bccd85 Diego Biurrun
     * ratecontrol override, see RcOverride
1214
     * - encoding: Allocated/set/freed by user.
1215 64863965 Michael Niedermayer
     * - decoding: unused
1216 b71901e6 Michael Niedermayer
     */
1217 ce980a95 Michael Niedermayer
    RcOverride *rc_override;
1218
    int rc_override_count;
1219 115329f1 Diego Biurrun
1220 b71901e6 Michael Niedermayer
    /**
1221 f5bccd85 Diego Biurrun
     * rate control equation
1222
     * - encoding: Set by user
1223 64863965 Michael Niedermayer
     * - decoding: unused
1224 b71901e6 Michael Niedermayer
     */
1225 6881b8e5 Luca Abeni
    const char *rc_eq;
1226 115329f1 Diego Biurrun
1227 b71901e6 Michael Niedermayer
    /**
1228 f5bccd85 Diego Biurrun
     * maximum bitrate
1229
     * - encoding: Set by user.
1230 64863965 Michael Niedermayer
     * - decoding: unused
1231 b71901e6 Michael Niedermayer
     */
1232 ce980a95 Michael Niedermayer
    int rc_max_rate;
1233 115329f1 Diego Biurrun
1234 b71901e6 Michael Niedermayer
    /**
1235 f5bccd85 Diego Biurrun
     * minimum bitrate
1236
     * - encoding: Set by user.
1237 64863965 Michael Niedermayer
     * - decoding: unused
1238 b71901e6 Michael Niedermayer
     */
1239 ce980a95 Michael Niedermayer
    int rc_min_rate;
1240 115329f1 Diego Biurrun
1241 b71901e6 Michael Niedermayer
    /**
1242 f5bccd85 Diego Biurrun
     * decoder bitstream buffer size
1243
     * - encoding: Set by user.
1244 64863965 Michael Niedermayer
     * - decoding: unused
1245 b71901e6 Michael Niedermayer
     */
1246 ce980a95 Michael Niedermayer
    int rc_buffer_size;
1247
    float rc_buffer_aggressivity;
1248 b71901e6 Michael Niedermayer
1249
    /**
1250 f5bccd85 Diego Biurrun
     * qscale factor between P and I-frames
1251
     * If > 0 then the last p frame quantizer will be used (q= lastp_q*factor+offset).
1252
     * If < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset).
1253
     * - encoding: Set by user.
1254 64863965 Michael Niedermayer
     * - decoding: unused
1255 b71901e6 Michael Niedermayer
     */
1256
    float i_quant_factor;
1257 115329f1 Diego Biurrun
1258 b71901e6 Michael Niedermayer
    /**
1259 f5bccd85 Diego Biurrun
     * qscale offset between P and I-frames
1260
     * - encoding: Set by user.
1261 64863965 Michael Niedermayer
     * - decoding: unused
1262 b71901e6 Michael Niedermayer
     */
1263
    float i_quant_offset;
1264 115329f1 Diego Biurrun
1265 b71901e6 Michael Niedermayer
    /**
1266 f5bccd85 Diego Biurrun
     * initial complexity for pass1 ratecontrol
1267
     * - encoding: Set by user.
1268 64863965 Michael Niedermayer
     * - decoding: unused
1269 b71901e6 Michael Niedermayer
     */
1270 ce980a95 Michael Niedermayer
    float rc_initial_cplx;
1271 917e06c8 Fabrice Bellard
1272 b71901e6 Michael Niedermayer
    /**
1273 f5bccd85 Diego Biurrun
     * DCT algorithm, see FF_DCT_* below
1274
     * - encoding: Set by user.
1275 64863965 Michael Niedermayer
     * - decoding: unused
1276 b71901e6 Michael Niedermayer
     */
1277 28db7fce Michael Niedermayer
    int dct_algo;
1278 c7e07931 Martin Olschewski
#define FF_DCT_AUTO    0
1279 28db7fce Michael Niedermayer
#define FF_DCT_FASTINT 1
1280 c7e07931 Martin Olschewski
#define FF_DCT_INT     2
1281
#define FF_DCT_MMX     3
1282
#define FF_DCT_MLIB    4
1283 05c4072b Michael Niedermayer
#define FF_DCT_ALTIVEC 5
1284 65e4c8c9 Michael Niedermayer
#define FF_DCT_FAAN    6
1285 115329f1 Diego Biurrun
1286 c5d309f2 Michael Niedermayer
    /**
1287 f5bccd85 Diego Biurrun
     * luminance masking (0-> disabled)
1288
     * - encoding: Set by user.
1289 64863965 Michael Niedermayer
     * - decoding: unused
1290 c5d309f2 Michael Niedermayer
     */
1291
    float lumi_masking;
1292 115329f1 Diego Biurrun
1293 c5d309f2 Michael Niedermayer
    /**
1294 f5bccd85 Diego Biurrun
     * temporary complexity masking (0-> disabled)
1295
     * - encoding: Set by user.
1296 64863965 Michael Niedermayer
     * - decoding: unused
1297 c5d309f2 Michael Niedermayer
     */
1298
    float temporal_cplx_masking;
1299 115329f1 Diego Biurrun
1300 c5d309f2 Michael Niedermayer
    /**
1301 f5bccd85 Diego Biurrun
     * spatial complexity masking (0-> disabled)
1302
     * - encoding: Set by user.
1303 64863965 Michael Niedermayer
     * - decoding: unused
1304 c5d309f2 Michael Niedermayer
     */
1305
    float spatial_cplx_masking;
1306 115329f1 Diego Biurrun
1307 c5d309f2 Michael Niedermayer
    /**
1308 f5bccd85 Diego Biurrun
     * p block masking (0-> disabled)
1309
     * - encoding: Set by user.
1310 64863965 Michael Niedermayer
     * - decoding: unused
1311 c5d309f2 Michael Niedermayer
     */
1312
    float p_masking;
1313 15415af4 Michael Niedermayer
1314 5e746b99 Michael Niedermayer
    /**
1315 f5bccd85 Diego Biurrun
     * darkness masking (0-> disabled)
1316
     * - encoding: Set by user.
1317 64863965 Michael Niedermayer
     * - decoding: unused
1318 5e746b99 Michael Niedermayer
     */
1319
    float dark_masking;
1320 115329f1 Diego Biurrun
1321
1322 3e0b7b56 Michael Niedermayer
#if LIBAVCODEC_VERSION_INT < ((52<<16)+(0<<8)+0)
1323 3a694b04 Nick Kurshev
    /* for binary compatibility */
1324
    int unused;
1325 3e0b7b56 Michael Niedermayer
#endif
1326 115329f1 Diego Biurrun
1327 0c2dd16e Michael Niedermayer
    /**
1328 f5bccd85 Diego Biurrun
     * IDCT algorithm, see FF_IDCT_* below.
1329
     * - encoding: Set by user.
1330
     * - decoding: Set by user.
1331 2ad1516a Michael Niedermayer
     */
1332
    int idct_algo;
1333 273b0cd3 Diego Biurrun
#define FF_IDCT_AUTO          0
1334
#define FF_IDCT_INT           1
1335
#define FF_IDCT_SIMPLE        2
1336
#define FF_IDCT_SIMPLEMMX     3
1337
#define FF_IDCT_LIBMPEG2MMX   4
1338
#define FF_IDCT_PS2           5
1339
#define FF_IDCT_MLIB          6
1340
#define FF_IDCT_ARM           7
1341
#define FF_IDCT_ALTIVEC       8
1342
#define FF_IDCT_SH4           9
1343
#define FF_IDCT_SIMPLEARM     10
1344
#define FF_IDCT_H264          11
1345
#define FF_IDCT_VP3           12
1346
#define FF_IDCT_IPP           13
1347
#define FF_IDCT_XVIDMMX       14
1348
#define FF_IDCT_CAVS          15
1349 a0403006 Måns Rullgård
#define FF_IDCT_SIMPLEARMV5TE 16
1350 273b0cd3 Diego Biurrun
#define FF_IDCT_SIMPLEARMV6   17
1351 d9420d4d Denes Balatoni
#define FF_IDCT_SIMPLEVIS     18
1352 9abc7e0f Michael Niedermayer
#define FF_IDCT_WMV2          19
1353 6f08c541 Michael Niedermayer
#define FF_IDCT_FAAN          20
1354 2ad1516a Michael Niedermayer
1355 144f0625 Michael Niedermayer
    /**
1356 f5bccd85 Diego Biurrun
     * slice count
1357
     * - encoding: Set by libavcodec.
1358
     * - decoding: Set by user (or 0).
1359 144f0625 Michael Niedermayer
     */
1360
    int slice_count;
1361
    /**
1362 f5bccd85 Diego Biurrun
     * slice offsets in the frame in bytes
1363
     * - encoding: Set/allocated by libavcodec.
1364
     * - decoding: Set/allocated by user (or NULL).
1365 144f0625 Michael Niedermayer
     */
1366
    int *slice_offset;
1367
1368 4d2858de Michael Niedermayer
    /**
1369 f5bccd85 Diego Biurrun
     * error concealment flags
1370 64863965 Michael Niedermayer
     * - encoding: unused
1371 f5bccd85 Diego Biurrun
     * - decoding: Set by user.
1372 4d2858de Michael Niedermayer
     */
1373
    int error_concealment;
1374
#define FF_EC_GUESS_MVS   1
1375
#define FF_EC_DEBLOCK     2
1376
1377 6b72ac63 Michael Niedermayer
    /**
1378 bec89a84 Zdenek Kabelac
     * dsp_mask could be add used to disable unwanted CPU features
1379 8350df97 Zdenek Kabelac
     * CPU features (i.e. MMX, SSE. ...)
1380 bec89a84 Zdenek Kabelac
     *
1381 f5bccd85 Diego Biurrun
     * With the FORCE flag you may instead enable given CPU features.
1382
     * (Dangerous: Usable in case of misdetection, improper usage however will
1383
     * result into program crash.)
1384 bec89a84 Zdenek Kabelac
     */
1385
    unsigned dsp_mask;
1386 f5bccd85 Diego Biurrun
#define FF_MM_FORCE    0x80000000 /* Force usage of selected flags (OR) */
1387 bec89a84 Zdenek Kabelac
    /* lower 16 bits - CPU features */
1388 0cd60abf Michael Niedermayer
#define FF_MM_MMX      0x0001 ///< standard MMX
1389
#define FF_MM_3DNOW    0x0004 ///< AMD 3DNOW
1390
#define FF_MM_MMXEXT   0x0002 ///< SSE integer functions or AMD MMX ext
1391
#define FF_MM_SSE      0x0008 ///< SSE functions
1392
#define FF_MM_SSE2     0x0010 ///< PIV SSE2 functions
1393
#define FF_MM_3DNOWEXT 0x0020 ///< AMD 3DNowExt
1394
#define FF_MM_SSE3     0x0040 ///< Prescott SSE3 functions
1395
#define FF_MM_SSSE3    0x0080 ///< Conroe SSSE3 functions
1396
#define FF_MM_IWMMXT   0x0100 ///< XScale IWMMXT
1397 11f18faf Michael Niedermayer
1398
    /**
1399 64863965 Michael Niedermayer
     * bits per sample/pixel from the demuxer (needed for huffyuv).
1400 f5bccd85 Diego Biurrun
     * - encoding: Set by libavcodec.
1401
     * - decoding: Set by user.
1402 11f18faf Michael Niedermayer
     */
1403
     int bits_per_sample;
1404 115329f1 Diego Biurrun
1405 11f18faf Michael Niedermayer
    /**
1406 f5bccd85 Diego Biurrun
     * prediction method (needed for huffyuv)
1407
     * - encoding: Set by user.
1408 64863965 Michael Niedermayer
     * - decoding: unused
1409 11f18faf Michael Niedermayer
     */
1410
     int prediction_method;
1411
#define FF_PRED_LEFT   0
1412
#define FF_PRED_PLANE  1
1413
#define FF_PRED_MEDIAN 2
1414 115329f1 Diego Biurrun
1415 5d3cea3a Michael Niedermayer
    /**
1416 f5bccd85 Diego Biurrun
     * sample aspect ratio (0 if unknown)
1417
     * Numerator and denominator must be relatively prime and smaller than 256 for some video standards.
1418
     * - encoding: Set by user.
1419
     * - decoding: Set by libavcodec.
1420 5d3cea3a Michael Niedermayer
     */
1421 5ff85f1d Michael Niedermayer
    AVRational sample_aspect_ratio;
1422 1e491e29 Michael Niedermayer
1423
    /**
1424 f5bccd85 Diego Biurrun
     * the picture in the bitstream
1425
     * - encoding: Set by libavcodec.
1426
     * - decoding: Set by libavcodec.
1427 1e491e29 Michael Niedermayer
     */
1428 492cd3a9 Michael Niedermayer
    AVFrame *coded_frame;
1429 c8c437bc Michael Niedermayer
1430
    /**
1431 f5bccd85 Diego Biurrun
     * debug
1432
     * - encoding: Set by user.
1433
     * - decoding: Set by user.
1434 c8c437bc Michael Niedermayer
     */
1435
    int debug;
1436 273b0cd3 Diego Biurrun
#define FF_DEBUG_PICT_INFO   1
1437
#define FF_DEBUG_RC          2
1438
#define FF_DEBUG_BITSTREAM   4
1439
#define FF_DEBUG_MB_TYPE     8
1440
#define FF_DEBUG_QP          16
1441
#define FF_DEBUG_MV          32
1442
#define FF_DEBUG_DCT_COEFF   0x00000040
1443
#define FF_DEBUG_SKIP        0x00000080
1444
#define FF_DEBUG_STARTCODE   0x00000100
1445
#define FF_DEBUG_PTS         0x00000200
1446
#define FF_DEBUG_ER          0x00000400
1447
#define FF_DEBUG_MMCO        0x00000800
1448
#define FF_DEBUG_BUGS        0x00001000
1449
#define FF_DEBUG_VIS_QP      0x00002000
1450 864119b6 Michael Niedermayer
#define FF_DEBUG_VIS_MB_TYPE 0x00004000
1451 115329f1 Diego Biurrun
1452 140cb663 Michael Niedermayer
    /**
1453 f5bccd85 Diego Biurrun
     * debug
1454
     * - encoding: Set by user.
1455
     * - decoding: Set by user.
1456 0c9bbaec Wolfgang Hesseler
     */
1457
    int debug_mv;
1458
#define FF_DEBUG_VIS_MV_P_FOR  0x00000001 //visualize forward predicted MVs of P frames
1459
#define FF_DEBUG_VIS_MV_B_FOR  0x00000002 //visualize forward predicted MVs of B frames
1460
#define FF_DEBUG_VIS_MV_B_BACK 0x00000004 //visualize backward predicted MVs of B frames
1461
1462
    /**
1463 f5bccd85 Diego Biurrun
     * error
1464
     * - encoding: Set by libavcodec if flags&CODEC_FLAG_PSNR.
1465 64863965 Michael Niedermayer
     * - decoding: unused
1466 140cb663 Michael Niedermayer
     */
1467
    uint64_t error[4];
1468 115329f1 Diego Biurrun
1469 17a70fde Michael Niedermayer
    /**
1470 f5bccd85 Diego Biurrun
     * minimum MB quantizer
1471 6e0d8c06 Michael Niedermayer
     * - encoding: unused
1472 64863965 Michael Niedermayer
     * - decoding: unused
1473 17a70fde Michael Niedermayer
     */
1474
    int mb_qmin;
1475
1476
    /**
1477 f5bccd85 Diego Biurrun
     * maximum MB quantizer
1478 6e0d8c06 Michael Niedermayer
     * - encoding: unused
1479 64863965 Michael Niedermayer
     * - decoding: unused
1480 17a70fde Michael Niedermayer
     */
1481
    int mb_qmax;
1482 115329f1 Diego Biurrun
1483 1457ab52 Michael Niedermayer
    /**
1484 f5bccd85 Diego Biurrun
     * motion estimation comparison function
1485
     * - encoding: Set by user.
1486 64863965 Michael Niedermayer
     * - decoding: unused
1487 1457ab52 Michael Niedermayer
     */
1488
    int me_cmp;
1489
    /**
1490 f5bccd85 Diego Biurrun
     * subpixel motion estimation comparison function
1491
     * - encoding: Set by user.
1492 64863965 Michael Niedermayer
     * - decoding: unused
1493 1457ab52 Michael Niedermayer
     */
1494
    int me_sub_cmp;
1495
    /**
1496 f5bccd85 Diego Biurrun
     * macroblock comparison function (not supported yet)
1497
     * - encoding: Set by user.
1498 64863965 Michael Niedermayer
     * - decoding: unused
1499 1457ab52 Michael Niedermayer
     */
1500
    int mb_cmp;
1501 622348f9 Michael Niedermayer
    /**
1502 f5bccd85 Diego Biurrun
     * interlaced DCT comparison function
1503
     * - encoding: Set by user.
1504 622348f9 Michael Niedermayer
     * - decoding: unused
1505
     */
1506
    int ildct_cmp;
1507 273b0cd3 Diego Biurrun
#define FF_CMP_SAD    0
1508
#define FF_CMP_SSE    1
1509
#define FF_CMP_SATD   2
1510
#define FF_CMP_DCT    3
1511
#define FF_CMP_PSNR   4
1512
#define FF_CMP_BIT    5
1513
#define FF_CMP_RD     6
1514
#define FF_CMP_ZERO   7
1515
#define FF_CMP_VSAD   8
1516
#define FF_CMP_VSSE   9
1517
#define FF_CMP_NSSE   10
1518
#define FF_CMP_W53    11
1519
#define FF_CMP_W97    12
1520 0fd6aea1 Michael Niedermayer
#define FF_CMP_DCTMAX 13
1521 27c61ac5 Michael Niedermayer
#define FF_CMP_DCT264 14
1522 1457ab52 Michael Niedermayer
#define FF_CMP_CHROMA 256
1523 115329f1 Diego Biurrun
1524 1457ab52 Michael Niedermayer
    /**
1525 f5bccd85 Diego Biurrun
     * ME diamond size & shape
1526
     * - encoding: Set by user.
1527 64863965 Michael Niedermayer
     * - decoding: unused
1528 1457ab52 Michael Niedermayer
     */
1529
    int dia_size;
1530 b07a5980 Michael Niedermayer
1531
    /**
1532 f5bccd85 Diego Biurrun
     * amount of previous MV predictors (2a+1 x 2a+1 square)
1533
     * - encoding: Set by user.
1534 64863965 Michael Niedermayer
     * - decoding: unused
1535 b07a5980 Michael Niedermayer
     */
1536
    int last_predictor_count;
1537 70ac76c0 Michael Niedermayer
1538 f5fb6b34 Michael Niedermayer
    /**
1539 f5bccd85 Diego Biurrun
     * prepass for motion estimation
1540
     * - encoding: Set by user.
1541 64863965 Michael Niedermayer
     * - decoding: unused
1542 f5fb6b34 Michael Niedermayer
     */
1543
    int pre_me;
1544 b07a5980 Michael Niedermayer
1545 70ac76c0 Michael Niedermayer
    /**
1546 f5bccd85 Diego Biurrun
     * motion estimation prepass comparison function
1547
     * - encoding: Set by user.
1548 64863965 Michael Niedermayer
     * - decoding: unused
1549 70ac76c0 Michael Niedermayer
     */
1550
    int me_pre_cmp;
1551 826f429a Michael Niedermayer
1552 70ac76c0 Michael Niedermayer
    /**
1553 f5bccd85 Diego Biurrun
     * ME prepass diamond size & shape
1554
     * - encoding: Set by user.
1555 64863965 Michael Niedermayer
     * - decoding: unused
1556 70ac76c0 Michael Niedermayer
     */
1557
    int pre_dia_size;
1558
1559 826f429a Michael Niedermayer
    /**
1560 f5bccd85 Diego Biurrun
     * subpel ME quality
1561
     * - encoding: Set by user.
1562 64863965 Michael Niedermayer
     * - decoding: unused
1563 826f429a Michael Niedermayer
     */
1564
    int me_subpel_quality;
1565
1566 a33c7159 Michael Niedermayer
    /**
1567 f5bccd85 Diego Biurrun
     * callback to negotiate the pixelFormat
1568 a33c7159 Michael Niedermayer
     * @param fmt is the list of formats which are supported by the codec,
1569 f5bccd85 Diego Biurrun
     * it is terminated by -1 as 0 is a valid format, the formats are ordered by quality.
1570
     * The first is always the native one.
1571
     * @return the chosen format
1572 64863965 Michael Niedermayer
     * - encoding: unused
1573 f5bccd85 Diego Biurrun
     * - decoding: Set by user, if not set the native format will be chosen.
1574 a33c7159 Michael Niedermayer
     */
1575 494c56d3 Ivan Kalvachev
    enum PixelFormat (*get_format)(struct AVCodecContext *s, const enum PixelFormat * fmt);
1576 e2f9490e Fabrice Bellard
1577
    /**
1578 f5bccd85 Diego Biurrun
     * DTG active format information (additional aspect ratio
1579
     * information only used in DVB MPEG-2 transport streams)
1580
     * 0 if not set.
1581 115329f1 Diego Biurrun
     *
1582 f5bccd85 Diego Biurrun
     * - encoding: unused
1583
     * - decoding: Set by decoder.
1584 e2f9490e Fabrice Bellard
     */
1585
    int dtg_active_format;
1586
#define FF_DTG_AFD_SAME         8
1587
#define FF_DTG_AFD_4_3          9
1588
#define FF_DTG_AFD_16_9         10
1589
#define FF_DTG_AFD_14_9         11
1590
#define FF_DTG_AFD_4_3_SP_14_9  13
1591
#define FF_DTG_AFD_16_9_SP_14_9 14
1592
#define FF_DTG_AFD_SP_4_3       15
1593
1594 ebbcdc9a Michael Niedermayer
    /**
1595 f5bccd85 Diego Biurrun
     * maximum motion estimation search range in subpel units
1596
     * If 0 then no limit.
1597 115329f1 Diego Biurrun
     *
1598 f5bccd85 Diego Biurrun
     * - encoding: Set by user.
1599
     * - decoding: unused
1600 ebbcdc9a Michael Niedermayer
     */
1601 59e0ac8e Zdenek Kabelac
    int me_range;
1602 ebbcdc9a Michael Niedermayer
1603 65f7062d Michael Niedermayer
    /**
1604 f5bccd85 Diego Biurrun
     * intra quantizer bias
1605
     * - encoding: Set by user.
1606 1984f635 Michael Niedermayer
     * - decoding: unused
1607
     */
1608
    int intra_quant_bias;
1609
#define FF_DEFAULT_QUANT_BIAS 999999
1610 115329f1 Diego Biurrun
1611 1984f635 Michael Niedermayer
    /**
1612 f5bccd85 Diego Biurrun
     * inter quantizer bias
1613
     * - encoding: Set by user.
1614 1984f635 Michael Niedermayer
     * - decoding: unused
1615
     */
1616
    int inter_quant_bias;
1617 5cd62665 Zdenek Kabelac
1618
    /**
1619 f5bccd85 Diego Biurrun
     * color table ID
1620
     * - encoding: unused
1621
     * - decoding: Which clrtable should be used for 8bit RGB images.
1622
     *             Tables have to be stored somewhere. FIXME
1623 5cd62665 Zdenek Kabelac
     */
1624
    int color_table_id;
1625 115329f1 Diego Biurrun
1626 d90cf87b Michael Niedermayer
    /**
1627 f5bccd85 Diego Biurrun
     * internal_buffer count
1628
     * Don't touch, used by libavcodec default_get_buffer().
1629 d90cf87b Michael Niedermayer
     */
1630
    int internal_buffer_count;
1631 115329f1 Diego Biurrun
1632 d90cf87b Michael Niedermayer
    /**
1633 f5bccd85 Diego Biurrun
     * internal_buffers
1634
     * Don't touch, used by libavcodec default_get_buffer().
1635 d90cf87b Michael Niedermayer
     */
1636
    void *internal_buffer;
1637 158c7f05 Michael Niedermayer
1638
#define FF_LAMBDA_SHIFT 7
1639
#define FF_LAMBDA_SCALE (1<<FF_LAMBDA_SHIFT)
1640
#define FF_QP2LAMBDA 118 ///< factor to convert from H.263 QP to lambda
1641
#define FF_LAMBDA_MAX (256*128-1)
1642
1643
#define FF_QUALITY_SCALE FF_LAMBDA_SCALE //FIXME maybe remove
1644 3d2e8cce Michael Niedermayer
    /**
1645 f5bccd85 Diego Biurrun
     * Global quality for codecs which cannot change it per frame.
1646
     * This should be proportional to MPEG-1/2/4 qscale.
1647
     * - encoding: Set by user.
1648 3d2e8cce Michael Niedermayer
     * - decoding: unused
1649
     */
1650
    int global_quality;
1651 115329f1 Diego Biurrun
1652 bd446bb1 Michael Niedermayer
#define FF_CODER_TYPE_VLC       0
1653
#define FF_CODER_TYPE_AC        1
1654 f87459e4 Kamil Nowosad
#define FF_CODER_TYPE_RAW       2
1655
#define FF_CODER_TYPE_RLE       3
1656
#define FF_CODER_TYPE_DEFLATE   4
1657 11e659c2 Michael Niedermayer
    /**
1658
     * coder type
1659 f5bccd85 Diego Biurrun
     * - encoding: Set by user.
1660 11e659c2 Michael Niedermayer
     * - decoding: unused
1661
     */
1662
    int coder_type;
1663
1664
    /**
1665
     * context model
1666 f5bccd85 Diego Biurrun
     * - encoding: Set by user.
1667 11e659c2 Michael Niedermayer
     * - decoding: unused
1668
     */
1669
    int context_model;
1670 5639729b Michael Niedermayer
#if 0
1671
    /**
1672
     *
1673
     * - encoding: unused
1674 f5bccd85 Diego Biurrun
     * - decoding: Set by user.
1675 5639729b Michael Niedermayer
     */
1676
    uint8_t * (*realloc)(struct AVCodecContext *s, uint8_t *buf, int buf_size);
1677
#endif
1678 115329f1 Diego Biurrun
1679 3bb07d61 Michael Niedermayer
    /**
1680
     * slice flags
1681
     * - encoding: unused
1682 f5bccd85 Diego Biurrun
     * - decoding: Set by user.
1683 3bb07d61 Michael Niedermayer
     */
1684
    int slice_flags;
1685
#define SLICE_FLAG_CODED_ORDER    0x0001 ///< draw_horiz_band() is called in coded order instead of display
1686
#define SLICE_FLAG_ALLOW_FIELD    0x0002 ///< allow draw_horiz_band() with field slices (MPEG2 field pics)
1687
#define SLICE_FLAG_ALLOW_PLANE    0x0004 ///< allow draw_horiz_band() with 1 component at a time (SVQ1)
1688
1689 fb364ada Ivan Kalvachev
    /**
1690
     * XVideo Motion Acceleration
1691
     * - encoding: forbidden
1692
     * - decoding: set by decoder
1693
     */
1694
    int xvmc_acceleration;
1695 115329f1 Diego Biurrun
1696 7d1c3fc1 Michael Niedermayer
    /**
1697
     * macroblock decision mode
1698 f5bccd85 Diego Biurrun
     * - encoding: Set by user.
1699 7d1c3fc1 Michael Niedermayer
     * - decoding: unused
1700
     */
1701
    int mb_decision;
1702
#define FF_MB_DECISION_SIMPLE 0        ///< uses mb_cmp
1703
#define FF_MB_DECISION_BITS   1        ///< chooses the one which needs the fewest bits
1704 e6dba5df Ramiro Polla
#define FF_MB_DECISION_RD     2        ///< rate distortion
1705 d6eb3c50 Michael Niedermayer
1706
    /**
1707
     * custom intra quantization matrix
1708 f5bccd85 Diego Biurrun
     * - encoding: Set by user, can be NULL.
1709
     * - decoding: Set by libavcodec.
1710 d6eb3c50 Michael Niedermayer
     */
1711
    uint16_t *intra_matrix;
1712
1713
    /**
1714
     * custom inter quantization matrix
1715 f5bccd85 Diego Biurrun
     * - encoding: Set by user, can be NULL.
1716
     * - decoding: Set by libavcodec.
1717 d6eb3c50 Michael Niedermayer
     */
1718
    uint16_t *inter_matrix;
1719 115329f1 Diego Biurrun
1720 541ae140 Michael Niedermayer
    /**
1721
     * fourcc from the AVI stream header (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A').
1722 f5bccd85 Diego Biurrun
     * This is used to work around some encoder bugs.
1723 541ae140 Michael Niedermayer
     * - encoding: unused
1724 f5bccd85 Diego Biurrun
     * - decoding: Set by user, will be converted to uppercase by libavcodec during init.
1725 541ae140 Michael Niedermayer
     */
1726
    unsigned int stream_codec_tag;
1727 05fbd0a2 Michael Niedermayer
1728
    /**
1729 f5bccd85 Diego Biurrun
     * scene change detection threshold
1730
     * 0 is default, larger means fewer detected scene changes.
1731
     * - encoding: Set by user.
1732 05fbd0a2 Michael Niedermayer
     * - decoding: unused
1733
     */
1734
    int scenechange_threshold;
1735 158c7f05 Michael Niedermayer
1736
    /**
1737 f5bccd85 Diego Biurrun
     * minimum Lagrange multipler
1738
     * - encoding: Set by user.
1739 158c7f05 Michael Niedermayer
     * - decoding: unused
1740
     */
1741
    int lmin;
1742
1743
    /**
1744 f5bccd85 Diego Biurrun
     * maximum Lagrange multipler
1745
     * - encoding: Set by user.
1746 158c7f05 Michael Niedermayer
     * - decoding: unused
1747
     */
1748
    int lmax;
1749 2a2bbcb0 Mike Melanson
1750
    /**
1751 f5bccd85 Diego Biurrun
     * palette control structure
1752 2a2bbcb0 Mike Melanson
     * - encoding: ??? (no palette-enabled encoder yet)
1753 f5bccd85 Diego Biurrun
     * - decoding: Set by user.
1754 2a2bbcb0 Mike Melanson
     */
1755
    struct AVPaletteControl *palctrl;
1756 821cb11f Michael Niedermayer
1757
    /**
1758
     * noise reduction strength
1759 f5bccd85 Diego Biurrun
     * - encoding: Set by user.
1760 821cb11f Michael Niedermayer
     * - decoding: unused
1761
     */
1762
    int noise_reduction;
1763 115329f1 Diego Biurrun
1764 074c4ca7 Roberto Togni
    /**
1765 f5bccd85 Diego Biurrun
     * Called at the beginning of a frame to get cr buffer for it.
1766
     * Buffer type (size, hints) must be the same. libavcodec won't check it.
1767
     * libavcodec will pass previous buffer in pic, function should return
1768 e1c2a5a0 Roberto Togni
     * same buffer or new buffer with old frame "painted" into it.
1769 f5bccd85 Diego Biurrun
     * If pic.data[0] == NULL must behave like get_buffer().
1770 074c4ca7 Roberto Togni
     * - encoding: unused
1771 f5bccd85 Diego Biurrun
     * - decoding: Set by libavcodec., user can override
1772 074c4ca7 Roberto Togni
     */
1773 e1c2a5a0 Roberto Togni
    int (*reget_buffer)(struct AVCodecContext *c, AVFrame *pic);
1774 ba58dabc Michael Niedermayer
1775
    /**
1776 f5bccd85 Diego Biurrun
     * Number of bits which should be loaded into the rc buffer before decoding starts.
1777
     * - encoding: Set by user.
1778 ba58dabc Michael Niedermayer
     * - decoding: unused
1779
     */
1780
    int rc_initial_buffer_occupancy;
1781
1782
    /**
1783
     *
1784 f5bccd85 Diego Biurrun
     * - encoding: Set by user.
1785 ba58dabc Michael Niedermayer
     * - decoding: unused
1786
     */
1787
    int inter_threshold;
1788
1789
    /**
1790 f5bccd85 Diego Biurrun
     * CODEC_FLAG2_*
1791
     * - encoding: Set by user.
1792
     * - decoding: Set by user.
1793 ba58dabc Michael Niedermayer
     */
1794
    int flags2;
1795 7ebfc0ea Michael Niedermayer
1796
    /**
1797 f5bccd85 Diego Biurrun
     * Simulates errors in the bitstream to test error concealment.
1798
     * - encoding: Set by user.
1799
     * - decoding: unused
1800 7ebfc0ea Michael Niedermayer
     */
1801
    int error_rate;
1802 115329f1 Diego Biurrun
1803 a1e257b2 Michael Niedermayer
    /**
1804
     * MP3 antialias algorithm, see FF_AA_* below.
1805
     * - encoding: unused
1806 f5bccd85 Diego Biurrun
     * - decoding: Set by user.
1807 a1e257b2 Michael Niedermayer
     */
1808
    int antialias_algo;
1809
#define FF_AA_AUTO    0
1810
#define FF_AA_FASTINT 1 //not implemented yet
1811
#define FF_AA_INT     2
1812
#define FF_AA_FLOAT   3
1813 77ea0d4b Michael Niedermayer
    /**
1814 f5bccd85 Diego Biurrun
     * quantizer noise shaping
1815
     * - encoding: Set by user.
1816 77ea0d4b Michael Niedermayer
     * - decoding: unused
1817
     */
1818
    int quantizer_noise_shaping;
1819 9c3d33d6 Michael Niedermayer
1820
    /**
1821 f5bccd85 Diego Biurrun
     * thread count
1822 eafcac6a Diego Biurrun
     * is used to decide how many independent tasks should be passed to execute()
1823 f5bccd85 Diego Biurrun
     * - encoding: Set by user.
1824
     * - decoding: Set by user.
1825 9c3d33d6 Michael Niedermayer
     */
1826
    int thread_count;
1827 115329f1 Diego Biurrun
1828 9c3d33d6 Michael Niedermayer
    /**
1829 f5bccd85 Diego Biurrun
     * The codec may call this to execute several independent things.
1830
     * It will return only after finishing all tasks.
1831
     * The user may replace this with some multithreaded implementation,
1832
     * the default implementation will execute the parts serially.
1833 399cec2f Michael Niedermayer
     * @param count the number of things to execute
1834 f5bccd85 Diego Biurrun
     * - encoding: Set by libavcodec, user can override.
1835
     * - decoding: Set by libavcodec, user can override.
1836 9c3d33d6 Michael Niedermayer
     */
1837
    int (*execute)(struct AVCodecContext *c, int (*func)(struct AVCodecContext *c2, void *arg), void **arg2, int *ret, int count);
1838 115329f1 Diego Biurrun
1839 9c3d33d6 Michael Niedermayer
    /**
1840 f5bccd85 Diego Biurrun
     * thread opaque
1841
     * Can be used by execute() to store some per AVCodecContext stuff.
1842 9c3d33d6 Michael Niedermayer
     * - encoding: set by execute()
1843
     * - decoding: set by execute()
1844
     */
1845
    void *thread_opaque;
1846 a4d36c11 Michael Niedermayer
1847
    /**
1848 f5bccd85 Diego Biurrun
     * Motion estimation threshold below which no motion estimation is
1849
     * performed, but instead the user specified motion vectors are used.
1850 115329f1 Diego Biurrun
     *
1851 f5bccd85 Diego Biurrun
     * - encoding: Set by user.
1852 f20f8a8b Michael Niedermayer
     * - decoding: unused
1853 a4d36c11 Michael Niedermayer
     */
1854 2750b827 Michael Niedermayer
     int me_threshold;
1855 f20f8a8b Michael Niedermayer
1856
    /**
1857 f5bccd85 Diego Biurrun
     * Macroblock threshold below which the user specified macroblock types will be used.
1858
     * - encoding: Set by user.
1859 f20f8a8b Michael Niedermayer
     * - decoding: unused
1860
     */
1861
     int mb_threshold;
1862 bf266e19 Michael Niedermayer
1863
    /**
1864 f5bccd85 Diego Biurrun
     * precision of the intra DC coefficient - 8
1865
     * - encoding: Set by user.
1866 bf266e19 Michael Niedermayer
     * - decoding: unused
1867
     */
1868
     int intra_dc_precision;
1869 d4c5d2ad Michael Niedermayer
1870
    /**
1871 f5bccd85 Diego Biurrun
     * noise vs. sse weight for the nsse comparsion function
1872
     * - encoding: Set by user.
1873 d4c5d2ad Michael Niedermayer
     * - decoding: unused
1874
     */
1875
     int nsse_weight;
1876 0dfd33c3 Michael Niedermayer
1877
    /**
1878 f5bccd85 Diego Biurrun
     * Number of macroblock rows at the top which are skipped.
1879 0dfd33c3 Michael Niedermayer
     * - encoding: unused
1880 f5bccd85 Diego Biurrun
     * - decoding: Set by user.
1881 0dfd33c3 Michael Niedermayer
     */
1882
     int skip_top;
1883
1884
    /**
1885 f5bccd85 Diego Biurrun
     * Number of macroblock rows at the bottom which are skipped.
1886 0dfd33c3 Michael Niedermayer
     * - encoding: unused
1887 f5bccd85 Diego Biurrun
     * - decoding: Set by user.
1888 0dfd33c3 Michael Niedermayer
     */
1889
     int skip_bottom;
1890 baced9f5 Michael Niedermayer
1891
    /**
1892
     * profile
1893 f5bccd85 Diego Biurrun
     * - encoding: Set by user.
1894
     * - decoding: Set by libavcodec.
1895 baced9f5 Michael Niedermayer
     */
1896
     int profile;
1897
#define FF_PROFILE_UNKNOWN -99
1898 4f2c36ac Nicolas George
#define FF_PROFILE_AAC_MAIN 0
1899 273b0cd3 Diego Biurrun
#define FF_PROFILE_AAC_LOW  1
1900
#define FF_PROFILE_AAC_SSR  2
1901
#define FF_PROFILE_AAC_LTP  3
1902 baced9f5 Michael Niedermayer
1903
    /**
1904
     * level
1905 f5bccd85 Diego Biurrun
     * - encoding: Set by user.
1906
     * - decoding: Set by libavcodec.
1907 baced9f5 Michael Niedermayer
     */
1908
     int level;
1909
#define FF_LEVEL_UNKNOWN -99
1910 178fcca8 Michael Niedermayer
1911
    /**
1912 f5bccd85 Diego Biurrun
     * low resolution decoding, 1-> 1/2 size, 2->1/4 size
1913 178fcca8 Michael Niedermayer
     * - encoding: unused
1914 f5bccd85 Diego Biurrun
     * - decoding: Set by user.
1915 178fcca8 Michael Niedermayer
     */
1916
     int lowres;
1917 21adafec Michael Niedermayer
1918
    /**
1919 f5bccd85 Diego Biurrun
     * Bitstream width / height, may be different from width/height if lowres
1920
     * or other things are used.
1921 21adafec Michael Niedermayer
     * - encoding: unused
1922 f5bccd85 Diego Biurrun
     * - decoding: Set by user before init if known. Codec should override / dynamically change if needed.
1923 21adafec Michael Niedermayer
     */
1924
    int coded_width, coded_height;
1925 bbf18b21 Michael Niedermayer
1926
    /**
1927
     * frame skip threshold
1928 f5bccd85 Diego Biurrun
     * - encoding: Set by user.
1929 bbf18b21 Michael Niedermayer
     * - decoding: unused
1930
     */
1931
    int frame_skip_threshold;
1932
1933
    /**
1934
     * frame skip factor
1935 f5bccd85 Diego Biurrun
     * - encoding: Set by user.
1936 bbf18b21 Michael Niedermayer
     * - decoding: unused
1937
     */
1938
    int frame_skip_factor;
1939 0fd6aea1 Michael Niedermayer
1940
    /**
1941
     * frame skip exponent
1942 f5bccd85 Diego Biurrun
     * - encoding: Set by user.
1943 0fd6aea1 Michael Niedermayer
     * - decoding: unused
1944
     */
1945
    int frame_skip_exp;
1946
1947
    /**
1948 f5bccd85 Diego Biurrun
     * frame skip comparison function
1949
     * - encoding: Set by user.
1950 0fd6aea1 Michael Niedermayer
     * - decoding: unused
1951
     */
1952
    int frame_skip_cmp;
1953 957c743a Christophe Massiot
1954
    /**
1955 f5bccd85 Diego Biurrun
     * Border processing masking, raises the quantizer for mbs on the borders
1956 957c743a Christophe Massiot
     * of the picture.
1957 f5bccd85 Diego Biurrun
     * - encoding: Set by user.
1958 957c743a Christophe Massiot
     * - decoding: unused
1959
     */
1960
    float border_masking;
1961 6e0d8c06 Michael Niedermayer
1962
    /**
1963 f5bccd85 Diego Biurrun
     * minimum MB lagrange multipler
1964
     * - encoding: Set by user.
1965 6e0d8c06 Michael Niedermayer
     * - decoding: unused
1966
     */
1967
    int mb_lmin;
1968
1969
    /**
1970 f5bccd85 Diego Biurrun
     * maximum MB lagrange multipler
1971
     * - encoding: Set by user.
1972 6e0d8c06 Michael Niedermayer
     * - decoding: unused
1973
     */
1974
    int mb_lmax;
1975 09c3e44e Michael Niedermayer
1976
    /**
1977 115329f1 Diego Biurrun
     *
1978 f5bccd85 Diego Biurrun
     * - encoding: Set by user.
1979 09c3e44e Michael Niedermayer
     * - decoding: unused
1980
     */
1981
    int me_penalty_compensation;
1982 8c3eba7c Michael Niedermayer
1983
    /**
1984 115329f1 Diego Biurrun
     *
1985 8c3eba7c Michael Niedermayer
     * - encoding: unused
1986 f5bccd85 Diego Biurrun
     * - decoding: Set by user.
1987 8c3eba7c Michael Niedermayer
     */
1988
    enum AVDiscard skip_loop_filter;
1989
1990
    /**
1991 115329f1 Diego Biurrun
     *
1992 8c3eba7c Michael Niedermayer
     * - encoding: unused
1993 f5bccd85 Diego Biurrun
     * - decoding: Set by user.
1994 8c3eba7c Michael Niedermayer
     */
1995
    enum AVDiscard skip_idct;
1996
1997
    /**
1998 115329f1 Diego Biurrun
     *
1999 8c3eba7c Michael Niedermayer
     * - encoding: unused
2000 f5bccd85 Diego Biurrun
     * - decoding: Set by user.
2001 8c3eba7c Michael Niedermayer
     */
2002
    enum AVDiscard skip_frame;
2003 316a2ec8 Michael Niedermayer
2004
    /**
2005
     *
2006 f5bccd85 Diego Biurrun
     * - encoding: Set by user.
2007 316a2ec8 Michael Niedermayer
     * - decoding: unused
2008
     */
2009
    int bidir_refine;
2010 e8501c93 Michael Niedermayer
2011
    /**
2012
     *
2013 f5bccd85 Diego Biurrun
     * - encoding: Set by user.
2014 e8501c93 Michael Niedermayer
     * - decoding: unused
2015
     */
2016
    int brd_scale;
2017 58f7833e Robert Swain
2018
    /**
2019
     * constant rate factor - quality-based VBR - values ~correspond to qps
2020 f5bccd85 Diego Biurrun
     * - encoding: Set by user.
2021 58f7833e Robert Swain
     * - decoding: unused
2022
     */
2023 9f1c1c99 Luca Barbato
    float crf;
2024 58f7833e Robert Swain
2025
    /**
2026
     * constant quantization parameter rate control method
2027 f5bccd85 Diego Biurrun
     * - encoding: Set by user.
2028 58f7833e Robert Swain
     * - decoding: unused
2029
     */
2030
    int cqp;
2031
2032
    /**
2033 f5bccd85 Diego Biurrun
     * minimum GOP size
2034
     * - encoding: Set by user.
2035 58f7833e Robert Swain
     * - decoding: unused
2036
     */
2037
    int keyint_min;
2038
2039
    /**
2040
     * number of reference frames
2041 f5bccd85 Diego Biurrun
     * - encoding: Set by user.
2042 58f7833e Robert Swain
     * - decoding: unused
2043
     */
2044
    int refs;
2045
2046
    /**
2047
     * chroma qp offset from luma
2048 f5bccd85 Diego Biurrun
     * - encoding: Set by user.
2049 58f7833e Robert Swain
     * - decoding: unused
2050
     */
2051
    int chromaoffset;
2052
2053
    /**
2054 f5bccd85 Diego Biurrun
     * Influences how often B-frames are used.
2055
     * - encoding: Set by user.
2056 58f7833e Robert Swain
     * - decoding: unused
2057
     */
2058
    int bframebias;
2059
2060
    /**
2061
     * trellis RD quantization
2062 f5bccd85 Diego Biurrun
     * - encoding: Set by user.
2063 58f7833e Robert Swain
     * - decoding: unused
2064
     */
2065
    int trellis;
2066
2067
    /**
2068 f5bccd85 Diego Biurrun
     * Reduce fluctuations in qp (before curve compression).
2069
     * - encoding: Set by user.
2070 58f7833e Robert Swain
     * - decoding: unused
2071
     */
2072
    float complexityblur;
2073
2074
    /**
2075
     * in-loop deblocking filter alphac0 parameter
2076
     * alpha is in the range -6...6
2077 f5bccd85 Diego Biurrun
     * - encoding: Set by user.
2078 58f7833e Robert Swain
     * - decoding: unused
2079
     */
2080
    int deblockalpha;
2081
2082
    /**
2083
     * in-loop deblocking filter beta parameter
2084
     * beta is in the range -6...6
2085 f5bccd85 Diego Biurrun
     * - encoding: Set by user.
2086 58f7833e Robert Swain
     * - decoding: unused
2087
     */
2088
    int deblockbeta;
2089
2090
    /**
2091
     * macroblock subpartition sizes to consider - p8x8, p4x4, b8x8, i8x8, i4x4
2092 f5bccd85 Diego Biurrun
     * - encoding: Set by user.
2093 58f7833e Robert Swain
     * - decoding: unused
2094
     */
2095
    int partitions;
2096 56cc85a0 Diego Biurrun
#define X264_PART_I4X4 0x001  /* Analyze i4x4 */
2097
#define X264_PART_I8X8 0x002  /* Analyze i8x8 (requires 8x8 transform) */
2098
#define X264_PART_P8X8 0x010  /* Analyze p16x8, p8x16 and p8x8 */
2099
#define X264_PART_P4X4 0x020  /* Analyze p8x4, p4x8, p4x4 */
2100
#define X264_PART_B8X8 0x100  /* Analyze b16x8, b8x16 and b8x8 */
2101 58f7833e Robert Swain
2102
    /**
2103 f5bccd85 Diego Biurrun
     * direct MV prediction mode - 0 (none), 1 (spatial), 2 (temporal)
2104
     * - encoding: Set by user.
2105 58f7833e Robert Swain
     * - decoding: unused
2106
     */
2107
    int directpred;
2108 4f59b684 Diego Biurrun
2109 14f0c8e2 Luca Abeni
    /**
2110 02c164c1 Justin Ruggles
     * Audio cutoff bandwidth (0 means "automatic")
2111 f5bccd85 Diego Biurrun
     * - encoding: Set by user.
2112 14f0c8e2 Luca Abeni
     * - decoding: unused
2113
     */
2114
    int cutoff;
2115 39a64e30 Corey Hickey
2116
    /**
2117 f5bccd85 Diego Biurrun
     * Multiplied by qscale for each frame and added to scene_change_score.
2118
     * - encoding: Set by user.
2119 39a64e30 Corey Hickey
     * - decoding: unused
2120
     */
2121
    int scenechange_factor;
2122 1dd509b1 Michael Niedermayer
2123
    /**
2124
     *
2125 f5bccd85 Diego Biurrun
     * Note: Value depends upon the compare function used for fullpel ME.
2126
     * - encoding: Set by user.
2127 1dd509b1 Michael Niedermayer
     * - decoding: unused
2128
     */
2129
    int mv0_threshold;
2130 f9243d34 Corey Hickey
2131
    /**
2132 f5bccd85 Diego Biurrun
     * Adjusts sensitivity of b_frame_strategy 1.
2133
     * - encoding: Set by user.
2134 f9243d34 Corey Hickey
     * - decoding: unused
2135
     */
2136
    int b_sensitivity;
2137 a403fc03 Justin Ruggles
2138
    /**
2139 f5bccd85 Diego Biurrun
     * - encoding: Set by user.
2140 a403fc03 Justin Ruggles
     * - decoding: unused
2141
     */
2142
    int compression_level;
2143
#define FF_COMPRESSION_DEFAULT -1
2144
2145
    /**
2146 f5bccd85 Diego Biurrun
     * Sets whether to use LPC mode - used by FLAC encoder.
2147
     * - encoding: Set by user.
2148
     * - decoding: unused
2149 a403fc03 Justin Ruggles
     */
2150
    int use_lpc;
2151
2152
    /**
2153
     * LPC coefficient precision - used by FLAC encoder
2154 f5bccd85 Diego Biurrun
     * - encoding: Set by user.
2155
     * - decoding: unused
2156 a403fc03 Justin Ruggles
     */
2157
    int lpc_coeff_precision;
2158
2159
    /**
2160 f5bccd85 Diego Biurrun
     * - encoding: Set by user.
2161
     * - decoding: unused
2162 a403fc03 Justin Ruggles
     */
2163
    int min_prediction_order;
2164
2165
    /**
2166 f5bccd85 Diego Biurrun
     * - encoding: Set by user.
2167
     * - decoding: unused
2168 a403fc03 Justin Ruggles
     */
2169
    int max_prediction_order;
2170
2171
    /**
2172
     * search method for selecting prediction order
2173 f5bccd85 Diego Biurrun
     * - encoding: Set by user.
2174
     * - decoding: unused
2175 a403fc03 Justin Ruggles
     */
2176
    int prediction_order_method;
2177
2178
    /**
2179 f5bccd85 Diego Biurrun
     * - encoding: Set by user.
2180
     * - decoding: unused
2181 a403fc03 Justin Ruggles
     */
2182
    int min_partition_order;
2183
2184
    /**
2185 f5bccd85 Diego Biurrun
     * - encoding: Set by user.
2186
     * - decoding: unused
2187 a403fc03 Justin Ruggles
     */
2188
    int max_partition_order;
2189 80d617f5 Baptiste Coudurier
2190
    /**
2191
     * GOP timecode frame start number, in non drop frame format
2192 f5bccd85 Diego Biurrun
     * - encoding: Set by user.
2193
     * - decoding: unused
2194 80d617f5 Baptiste Coudurier
     */
2195
    int64_t timecode_frame_start;
2196 b1ec601f Reimar Döffinger
2197
    /**
2198
     * Decoder should decode to this many channels if it can (0 for default)
2199
     * - encoding: unused
2200
     * - decoding: Set by user.
2201
     */
2202
    int request_channels;
2203 1408352a Justin Ruggles
2204
    /**
2205
     * Percentage of dynamic range compression to be applied by the decoder.
2206
     * The default value is 1.0, corresponding to full compression.
2207
     * - encoding: unused
2208
     * - decoding: Set by user.
2209
     */
2210
    float drc_scale;
2211 de6d9b64 Fabrice Bellard
} AVCodecContext;
2212
2213 64863965 Michael Niedermayer
/**
2214
 * AVCodec.
2215
 */
2216 de6d9b64 Fabrice Bellard
typedef struct AVCodec {
2217 6b0cdb6e Nicolas George
    /**
2218
     * Name of the codec implementation.
2219
     * The name is globally unique among encoders and among decoders (but an
2220
     * encoder and a decoder can share the same name).
2221
     * This is the primary way to find a codec from the user perspective.
2222
     */
2223 18f77016 Zdenek Kabelac
    const char *name;
2224 5d234974 Zdenek Kabelac
    enum CodecType type;
2225 9297ddd3 Michael Niedermayer
    enum CodecID id;
2226 de6d9b64 Fabrice Bellard
    int priv_data_size;
2227
    int (*init)(AVCodecContext *);
2228 0c1a9eda Zdenek Kabelac
    int (*encode)(AVCodecContext *, uint8_t *buf, int buf_size, void *data);
2229 de6d9b64 Fabrice Bellard
    int (*close)(AVCodecContext *);
2230 0fd90455 Michael Niedermayer
    int (*decode)(AVCodecContext *, void *outdata, int *outdata_size,
2231 6ddaa63c Michael Niedermayer
                  const uint8_t *buf, int buf_size);
2232 a2d11246 Michael Niedermayer
    /**
2233
     * Codec capabilities.
2234
     * see CODEC_CAP_*
2235
     */
2236 bf89e6b1 Fabrice Bellard
    int capabilities;
2237 de6d9b64 Fabrice Bellard
    struct AVCodec *next;
2238 c8cf325a Michael Niedermayer
    /**
2239
     * Flush buffers.
2240
     * Will be called when seeking
2241
     */
2242 7a06ff14 Michael Niedermayer
    void (*flush)(AVCodecContext *);
2243 716e31ea Stefano Sabatini
    const AVRational *supported_framerates; ///< array of supported framerates, or NULL if any, array is terminated by {0,0}
2244 1beb670a Benoit Fouet
    const enum PixelFormat *pix_fmts;       ///< array of supported pixel formats, or NULL if unknown, array is terminated by -1
2245 56cce5bb Stefano Sabatini
    const char *long_name;                  ///< descriptive name for the codec, meant to be more human readable than \p name
2246 3ade5d56 Stefano Sabatini
    const int *supported_samplerates;       ///< array of supported audio samplerates, or NULL if unknown, array is terminated by 0
2247 de6d9b64 Fabrice Bellard
} AVCodec;
2248
2249 97d96aaa Zdenek Kabelac
/**
2250 d7425f59 Michael Niedermayer
 * four components are given, that's all.
2251
 * the last component is alpha
2252
 */
2253 de6d9b64 Fabrice Bellard
typedef struct AVPicture {
2254 0c1a9eda Zdenek Kabelac
    uint8_t *data[4];
2255 cd394651 Michael Niedermayer
    int linesize[4];       ///< number of bytes per line
2256 de6d9b64 Fabrice Bellard
} AVPicture;
2257
2258 ba118447 Mike Melanson
/**
2259
 * AVPaletteControl
2260
 * This structure defines a method for communicating palette changes
2261
 * between and demuxer and a decoder.
2262 671adb17 Mark Cox
 *
2263
 * @deprecated Use AVPacket to send palette changes instead.
2264
 * This is totally broken.
2265 ba118447 Mike Melanson
 */
2266 2e99641b Roberto Togni
#define AVPALETTE_SIZE 1024
2267 432d84c3 Michael Niedermayer
#define AVPALETTE_COUNT 256
2268 ba118447 Mike Melanson
typedef struct AVPaletteControl {
2269
2270 f5bccd85 Diego Biurrun
    /* Demuxer sets this to 1 to indicate the palette has changed;
2271
     * decoder resets to 0. */
2272 ba118447 Mike Melanson
    int palette_changed;
2273
2274 2a2bbcb0 Mike Melanson
    /* 4-byte ARGB palette entries, stored in native byte order; note that
2275
     * the individual palette components should be on a 8-bit scale; if
2276 f5bccd85 Diego Biurrun
     * the palette data comes from an IBM VGA native format, the component
2277
     * data is probably 6 bits in size and needs to be scaled. */
2278 2e99641b Roberto Togni
    unsigned int palette[AVPALETTE_COUNT];
2279 ba118447 Mike Melanson
2280 18239edf Michael Niedermayer
} AVPaletteControl attribute_deprecated;
2281 ba118447 Mike Melanson
2282 c6ec28b1 Michael Niedermayer
typedef struct AVSubtitleRect {
2283 240c1657 Fabrice Bellard
    uint16_t x;
2284
    uint16_t y;
2285
    uint16_t w;
2286
    uint16_t h;
2287
    uint16_t nb_colors;
2288
    int linesize;
2289
    uint32_t *rgba_palette;
2290
    uint8_t *bitmap;
2291 c6ec28b1 Michael Niedermayer
} AVSubtitleRect;
2292
2293
typedef struct AVSubtitle {
2294
    uint16_t format; /* 0 = graphics */
2295
    uint32_t start_display_time; /* relative to packet pts, in ms */
2296
    uint32_t end_display_time; /* relative to packet pts, in ms */
2297
    uint32_t num_rects;
2298
    AVSubtitleRect *rects;
2299 240c1657 Fabrice Bellard
} AVSubtitle;
2300
2301
2302 de6d9b64 Fabrice Bellard
/* resample.c */
2303
2304
struct ReSampleContext;
2305 aaaf1635 Michael Niedermayer
struct AVResampleContext;
2306 de6d9b64 Fabrice Bellard
2307
typedef struct ReSampleContext ReSampleContext;
2308
2309 115329f1 Diego Biurrun
ReSampleContext *audio_resample_init(int output_channels, int input_channels,
2310 de6d9b64 Fabrice Bellard
                                     int output_rate, int input_rate);
2311
int audio_resample(ReSampleContext *s, short *output, short *input, int nb_samples);
2312
void audio_resample_close(ReSampleContext *s);
2313
2314 6e225de2 Michael Niedermayer
struct AVResampleContext *av_resample_init(int out_rate, int in_rate, int filter_length, int log2_phase_count, int linear, double cutoff);
2315 aaaf1635 Michael Niedermayer
int av_resample(struct AVResampleContext *c, short *dst, short *src, int *consumed, int src_size, int dst_size, int update_ctx);
2316 2d48eddd Michael Niedermayer
void av_resample_compensate(struct AVResampleContext *c, int sample_delta, int compensation_distance);
2317 d88443ae William Juwono
void av_resample_close(struct AVResampleContext *c);
2318 aaaf1635 Michael Niedermayer
2319 bc2ce35b Michael Niedermayer
#if LIBAVCODEC_VERSION_INT < ((52<<16)+(0<<8)+0)
2320 de6d9b64 Fabrice Bellard
/* YUV420 format is assumed ! */
2321
2322 671adb17 Mark Cox
/**
2323
 * @deprecated Use the software scaler (swscale) instead.
2324
 */
2325 bc2ce35b Michael Niedermayer
typedef struct ImgReSampleContext ImgReSampleContext attribute_deprecated;
2326 de6d9b64 Fabrice Bellard
2327 671adb17 Mark Cox
/**
2328
 * @deprecated Use the software scaler (swscale) instead.
2329
 */
2330 bc2ce35b Michael Niedermayer
attribute_deprecated ImgReSampleContext *img_resample_init(int output_width, int output_height,
2331 de6d9b64 Fabrice Bellard
                                      int input_width, int input_height);
2332 ab6d194a Michael Niedermayer
2333 671adb17 Mark Cox
/**
2334
 * @deprecated Use the software scaler (swscale) instead.
2335
 */
2336 bc2ce35b Michael Niedermayer
attribute_deprecated ImgReSampleContext *img_resample_full_init(int owidth, int oheight,
2337 ab6d194a Michael Niedermayer
                                      int iwidth, int iheight,
2338
                                      int topBand, int bottomBand,
2339 1ff93ffc Todd Kirby
                                      int leftBand, int rightBand,
2340
                                      int padtop, int padbottom,
2341
                                      int padleft, int padright);
2342
2343 671adb17 Mark Cox
/**
2344
 * @deprecated Use the software scaler (swscale) instead.
2345
 */
2346 4f13e733 Måns Rullgård
attribute_deprecated void img_resample(struct ImgReSampleContext *s,
2347 da64ecc3 Drew Hess
                  AVPicture *output, const AVPicture *input);
2348 de6d9b64 Fabrice Bellard
2349 671adb17 Mark Cox
/**
2350
 * @deprecated Use the software scaler (swscale) instead.
2351
 */
2352 4f13e733 Måns Rullgård
attribute_deprecated void img_resample_close(struct ImgReSampleContext *s);
2353 bc2ce35b Michael Niedermayer
2354
#endif
2355 de6d9b64 Fabrice Bellard
2356 75917b88 Drew Hess
/**
2357
 * Allocate memory for a picture.  Call avpicture_free to free it.
2358
 *
2359 f5bccd85 Diego Biurrun
 * @param picture the picture to be filled in
2360
 * @param pix_fmt the format of the picture
2361
 * @param width the width of the picture
2362
 * @param height the height of the picture
2363
 * @return zero if successful, a negative value if not
2364 75917b88 Drew Hess
 */
2365
int avpicture_alloc(AVPicture *picture, int pix_fmt, int width, int height);
2366
2367 8fc3d25c Panagiotis Issaris
/**
2368
 * Free a picture previously allocated by avpicture_alloc().
2369
 *
2370 f5bccd85 Diego Biurrun
 * @param picture the AVPicture to be freed
2371 8fc3d25c Panagiotis Issaris
 */
2372 75917b88 Drew Hess
void avpicture_free(AVPicture *picture);
2373
2374 392cf77a Panagiotis Issaris
/**
2375 f5bccd85 Diego Biurrun
 * Fill in the AVPicture fields.
2376 392cf77a Panagiotis Issaris
 * The fields of the given AVPicture are filled in by using the 'ptr' address
2377
 * which points to the image data buffer. Depending on the specified picture
2378
 * format, one or multiple image data pointers and line sizes will be set.
2379
 * If a planar format is specified, several pointers will be set pointing to
2380
 * the different picture planes and the line sizes of the different planes
2381
 * will be stored in the lines_sizes array.
2382
 *
2383 f5bccd85 Diego Biurrun
 * @param picture AVPicture whose fields are to be filled in
2384 392cf77a Panagiotis Issaris
 * @param ptr Buffer which will contain or contains the actual image data
2385 f5bccd85 Diego Biurrun
 * @param pix_fmt The format in which the picture data is stored.
2386
 * @param width the width of the image in pixels
2387
 * @param height the height of the image in pixels
2388
 * @return size of the image data in bytes
2389 392cf77a Panagiotis Issaris
 */
2390 0c1a9eda Zdenek Kabelac
int avpicture_fill(AVPicture *picture, uint8_t *ptr,
2391 2d1a4094 Fabrice Bellard
                   int pix_fmt, int width, int height);
2392 da64ecc3 Drew Hess
int avpicture_layout(const AVPicture* src, int pix_fmt, int width, int height,
2393 63167088 Roman Shaposhnik
                     unsigned char *dest, int dest_size);
2394 392cf77a Panagiotis Issaris
2395
/**
2396
 * Calculate the size in bytes that a picture of the given width and height
2397
 * would occupy if stored in the given picture format.
2398
 *
2399 f5bccd85 Diego Biurrun
 * @param pix_fmt the given picture format
2400
 * @param width the width of the image
2401
 * @param height the height of the image
2402 392cf77a Panagiotis Issaris
 * @return Image data size in bytes
2403
 */
2404 219b06c6 Fabrice Bellard
int avpicture_get_size(int pix_fmt, int width, int height);
2405 dab64ebc Fabrice Bellard
void avcodec_get_chroma_sub_sample(int pix_fmt, int *h_shift, int *v_shift);
2406
const char *avcodec_get_pix_fmt_name(int pix_fmt);
2407 21adafec Michael Niedermayer
void avcodec_set_dimensions(AVCodecContext *s, int width, int height);
2408 63167088 Roman Shaposhnik
enum PixelFormat avcodec_get_pix_fmt(const char* name);
2409 d07730dd Michael Niedermayer
unsigned int avcodec_pix_fmt_to_codec_tag(enum PixelFormat p);
2410 219b06c6 Fabrice Bellard
2411 81299d42 Panagiotis Issaris
#define FF_LOSS_RESOLUTION  0x0001 /**< loss due to resolution change */
2412
#define FF_LOSS_DEPTH       0x0002 /**< loss due to color depth change */
2413
#define FF_LOSS_COLORSPACE  0x0004 /**< loss due to color space conversion */
2414
#define FF_LOSS_ALPHA       0x0008 /**< loss of alpha bits */
2415
#define FF_LOSS_COLORQUANT  0x0010 /**< loss due to color quantization */
2416
#define FF_LOSS_CHROMA      0x0020 /**< loss of chroma (e.g. RGB to gray conversion) */
2417 fab21997 Fabrice Bellard
2418 392cf77a Panagiotis Issaris
/**
2419 81299d42 Panagiotis Issaris
 * Computes what kind of losses will occur when converting from one specific
2420
 * pixel format to another.
2421
 * When converting from one pixel format to another, information loss may occur.
2422
 * For example, when converting from RGB24 to GRAY, the color information will
2423
 * be lost. Similarly, other losses occur when converting from some formats to
2424
 * other formats. These losses can involve loss of chroma, but also loss of
2425
 * resolution, loss of color depth, loss due to the color space conversion, loss
2426
 * of the alpha bits or loss due to color quantization.
2427 f5bccd85 Diego Biurrun
 * avcodec_get_fix_fmt_loss() informs you about the various types of losses
2428
 * which will occur when converting from one pixel format to another.
2429 81299d42 Panagiotis Issaris
 *
2430 f5bccd85 Diego Biurrun
 * @param[in] dst_pix_fmt destination pixel format
2431
 * @param[in] src_pix_fmt source pixel format
2432 81299d42 Panagiotis Issaris
 * @param[in] has_alpha Whether the source pixel format alpha channel is used.
2433
 * @return Combination of flags informing you what kind of losses will occur.
2434 392cf77a Panagiotis Issaris
 */
2435 fab21997 Fabrice Bellard
int avcodec_get_pix_fmt_loss(int dst_pix_fmt, int src_pix_fmt,
2436
                             int has_alpha);
2437 392cf77a Panagiotis Issaris
2438
/**
2439 81299d42 Panagiotis Issaris
 * Finds the best pixel format to convert to given a certain source pixel
2440
 * format.  When converting from one pixel format to another, information loss
2441
 * may occur.  For example, when converting from RGB24 to GRAY, the color
2442
 * information will be lost. Similarly, other losses occur when converting from
2443
 * some formats to other formats. avcodec_find_best_pix_fmt() searches which of
2444 f5bccd85 Diego Biurrun
 * the given pixel formats should be used to suffer the least amount of loss.
2445
 * The pixel formats from which it chooses one, are determined by the
2446 81299d42 Panagiotis Issaris
 * \p pix_fmt_mask parameter.
2447
 *
2448
 * @code
2449
 * src_pix_fmt = PIX_FMT_YUV420P;
2450
 * pix_fmt_mask = (1 << PIX_FMT_YUV422P) || (1 << PIX_FMT_RGB24);
2451
 * dst_pix_fmt = avcodec_find_best_pix_fmt(pix_fmt_mask, src_pix_fmt, alpha, &loss);
2452
 * @endcode
2453
 *
2454 f5bccd85 Diego Biurrun
 * @param[in] pix_fmt_mask bitmask determining which pixel format to choose from
2455
 * @param[in] src_pix_fmt source pixel format
2456 81299d42 Panagiotis Issaris
 * @param[in] has_alpha Whether the source pixel format alpha channel is used.
2457
 * @param[out] loss_ptr Combination of flags informing you what kind of losses will occur.
2458
 * @return The best pixel format to convert to or -1 if none was found.
2459 392cf77a Panagiotis Issaris
 */
2460 fab21997 Fabrice Bellard
int avcodec_find_best_pix_fmt(int pix_fmt_mask, int src_pix_fmt,
2461
                              int has_alpha, int *loss_ptr);
2462
2463 c3b95b1d Stefano Sabatini
2464
/**
2465
 * Print in buf the string corresponding to the pixel format with
2466
 * number pix_fmt, or an header if pix_fmt is negative.
2467
 *
2468 9bd51b9a Panagiotis Issaris
 * @param[in] buf the buffer where to write the string
2469
 * @param[in] buf_size the size of buf
2470
 * @param[in] pix_fmt the number of the pixel format to print the corresponding info string, or
2471 c3b95b1d Stefano Sabatini
 * a negative value to print the corresponding header.
2472
 * Meaningful values for obtaining a pixel format info vary from 0 to PIX_FMT_NB -1.
2473
 */
2474
void avcodec_pix_fmt_string (char *buf, int buf_size, int pix_fmt);
2475
2476 0469baf1 Fabrice Bellard
#define FF_ALPHA_TRANSP       0x0001 /* image has some totally transparent pixels */
2477
#define FF_ALPHA_SEMI_TRANSP  0x0002 /* image has some transparent pixels */
2478 392cf77a Panagiotis Issaris
2479
/**
2480
 * Tell if an image really has transparent alpha values.
2481
 * @return ored mask of FF_ALPHA_xxx constants
2482
 */
2483 da64ecc3 Drew Hess
int img_get_alpha_info(const AVPicture *src,
2484 bb270c08 Diego Biurrun
                       int pix_fmt, int width, int height);
2485 0469baf1 Fabrice Bellard
2486 bc2ce35b Michael Niedermayer
#if LIBAVCODEC_VERSION_INT < ((52<<16)+(0<<8)+0)
2487 671adb17 Mark Cox
/**
2488
 * convert among pixel formats
2489
 * @deprecated Use the software scaler (swscale) instead.
2490
 */
2491 bc2ce35b Michael Niedermayer
attribute_deprecated int img_convert(AVPicture *dst, int dst_pix_fmt,
2492 115329f1 Diego Biurrun
                const AVPicture *src, int pix_fmt,
2493 219b06c6 Fabrice Bellard
                int width, int height);
2494 bc2ce35b Michael Niedermayer
#endif
2495 219b06c6 Fabrice Bellard
2496
/* deinterlace a picture */
2497 392cf77a Panagiotis Issaris
/* deinterlace - if not supported return -1 */
2498 da64ecc3 Drew Hess
int avpicture_deinterlace(AVPicture *dst, const AVPicture *src,
2499 de6d9b64 Fabrice Bellard
                          int pix_fmt, int width, int height);
2500
2501
/* external high level API */
2502
2503 55b9e69a Michael Niedermayer
#if LIBAVCODEC_VERSION_INT < ((52<<16)+(0<<8)+0)
2504 de6d9b64 Fabrice Bellard
extern AVCodec *first_avcodec;
2505 55b9e69a Michael Niedermayer
#endif
2506
AVCodec *av_codec_next(AVCodec *c);
2507 de6d9b64 Fabrice Bellard
2508 156e5023 Nick Kurshev
/* returns LIBAVCODEC_VERSION_INT constant */
2509 51a49663 Fabrice Bellard
unsigned avcodec_version(void);
2510 8bceb6af Nick Kurshev
/* returns LIBAVCODEC_BUILD constant */
2511 51a49663 Fabrice Bellard
unsigned avcodec_build(void);
2512 f9ec0aa1 Panagiotis Issaris
2513
/**
2514
 * Initializes libavcodec.
2515
 *
2516
 * @warning This function \e must be called before any other libavcodec
2517
 * function.
2518
 */
2519 de6d9b64 Fabrice Bellard
void avcodec_init(void);
2520
2521
void register_avcodec(AVCodec *format);
2522 f9ec0aa1 Panagiotis Issaris
2523
/**
2524 645f7879 Ville Skyttä
 * Finds a registered encoder with a matching codec ID.
2525 f9ec0aa1 Panagiotis Issaris
 *
2526 f5bccd85 Diego Biurrun
 * @param id CodecID of the requested encoder
2527 f9ec0aa1 Panagiotis Issaris
 * @return An encoder if one was found, NULL otherwise.
2528
 */
2529 de6d9b64 Fabrice Bellard
AVCodec *avcodec_find_encoder(enum CodecID id);
2530 f9ec0aa1 Panagiotis Issaris
2531
/**
2532 645f7879 Ville Skyttä
 * Finds a registered encoder with the specified name.
2533 f9ec0aa1 Panagiotis Issaris
 *
2534 f5bccd85 Diego Biurrun
 * @param name name of the requested encoder
2535 f9ec0aa1 Panagiotis Issaris
 * @return An encoder if one was found, NULL otherwise.
2536
 */
2537 98f3b098 Arpi
AVCodec *avcodec_find_encoder_by_name(const char *name);
2538 f9ec0aa1 Panagiotis Issaris
2539
/**
2540 645f7879 Ville Skyttä
 * Finds a registered decoder with a matching codec ID.
2541 f9ec0aa1 Panagiotis Issaris
 *
2542 f5bccd85 Diego Biurrun
 * @param id CodecID of the requested decoder
2543 f9ec0aa1 Panagiotis Issaris
 * @return A decoder if one was found, NULL otherwise.
2544
 */
2545 de6d9b64 Fabrice Bellard
AVCodec *avcodec_find_decoder(enum CodecID id);
2546 f9ec0aa1 Panagiotis Issaris
2547
/**
2548 645f7879 Ville Skyttä
 * Finds a registered decoder with the specified name.
2549 f9ec0aa1 Panagiotis Issaris
 *
2550 f5bccd85 Diego Biurrun
 * @param name name of the requested decoder
2551 f9ec0aa1 Panagiotis Issaris
 * @return A decoder if one was found, NULL otherwise.
2552
 */
2553 de6d9b64 Fabrice Bellard
AVCodec *avcodec_find_decoder_by_name(const char *name);
2554
void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode);
2555
2556 f9ec0aa1 Panagiotis Issaris
/**
2557
 * Sets the fields of the given AVCodecContext to default values.
2558
 *
2559
 * @param s The AVCodecContext of which the fields should be set to default values.
2560
 */
2561 1e491e29 Michael Niedermayer
void avcodec_get_context_defaults(AVCodecContext *s);
2562 f9ec0aa1 Panagiotis Issaris
2563 29301573 Michael Niedermayer
/** THIS FUNCTION IS NOT YET PART OF THE PUBLIC API!
2564
 *  we WILL change its arguments and name a few times! */
2565
void avcodec_get_context_defaults2(AVCodecContext *s, enum CodecType);
2566
2567 f9ec0aa1 Panagiotis Issaris
/**
2568
 * Allocates an AVCodecContext and sets its fields to default values.  The
2569
 * resulting struct can be deallocated by simply calling av_free().
2570
 *
2571
 * @return An AVCodecContext filled with default values or NULL on failure.
2572
 * @see avcodec_get_context_defaults
2573
 */
2574 7ffbb60e Falk Hüffner
A