Statistics
| Branch: | Revision:

ffmpeg / libavcodec / avcodec.h @ f7e97aaf

History | View | Annotate | Download (89.9 KB)

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