Statistics
| Branch: | Revision:

ffmpeg / libavcodec / avcodec.h @ 5ab65707

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