Statistics
| Branch: | Revision:

ffmpeg / libavcodec / avcodec.h @ 9bf1b724

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