Statistics
| Branch: | Revision:

ffmpeg / libavcodec / avcodec.h @ f025588b

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