summaryrefslogtreecommitdiff
path: root/apps/codecs/libwmapro/avcodec.h
diff options
context:
space:
mode:
authorMohamed Tarek <mt@rockbox.org>2010-04-30 11:11:56 +0000
committerMohamed Tarek <mt@rockbox.org>2010-04-30 11:11:56 +0000
commitcf43e5083b9e0f87de262ea31fd8067225ebfcda (patch)
tree073e6f4cd9561564d85e410a35432e1f4ead5b11 /apps/codecs/libwmapro/avcodec.h
parentbc3c5c16571487bf71fed8c22b30ee40481e156e (diff)
downloadrockbox-cf43e5083b9e0f87de262ea31fd8067225ebfcda.tar.gz
rockbox-cf43e5083b9e0f87de262ea31fd8067225ebfcda.zip
Add libwmapro to apps/codecs. These files comprise a set of unmodified files needed from ffmpeg's libavcodec and libavutil to compile and use the wma pro decoder standalone. The files were taken from ffmpeg's svn r22886 dated 15 April 2010.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@25763 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/codecs/libwmapro/avcodec.h')
-rw-r--r--apps/codecs/libwmapro/avcodec.h3952
1 files changed, 3952 insertions, 0 deletions
diff --git a/apps/codecs/libwmapro/avcodec.h b/apps/codecs/libwmapro/avcodec.h
new file mode 100644
index 0000000000..add4b100ae
--- /dev/null
+++ b/apps/codecs/libwmapro/avcodec.h
@@ -0,0 +1,3952 @@
1/*
2 * copyright (c) 2001 Fabrice Bellard
3 *
4 * This file is part of FFmpeg.
5 *
6 * FFmpeg is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
10 *
11 * FFmpeg is distributed in the hope that it will be useful,
12 * 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 * License along with FFmpeg; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19 */
20
21#ifndef AVCODEC_AVCODEC_H
22#define AVCODEC_AVCODEC_H
23
24/**
25 * @file libavcodec/avcodec.h
26 * external API header
27 */
28
29#include <errno.h>
30#include "libavutil/avutil.h"
31
32#define LIBAVCODEC_VERSION_MAJOR 52
33#define LIBAVCODEC_VERSION_MINOR 66
34#define LIBAVCODEC_VERSION_MICRO 0
35
36#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
37 LIBAVCODEC_VERSION_MINOR, \
38 LIBAVCODEC_VERSION_MICRO)
39#define LIBAVCODEC_VERSION AV_VERSION(LIBAVCODEC_VERSION_MAJOR, \
40 LIBAVCODEC_VERSION_MINOR, \
41 LIBAVCODEC_VERSION_MICRO)
42#define LIBAVCODEC_BUILD LIBAVCODEC_VERSION_INT
43
44#define LIBAVCODEC_IDENT "Lavc" AV_STRINGIFY(LIBAVCODEC_VERSION)
45
46#define AV_NOPTS_VALUE INT64_C(0x8000000000000000)
47#define AV_TIME_BASE 1000000
48#define AV_TIME_BASE_Q (AVRational){1, AV_TIME_BASE}
49
50/**
51 * Identifies the syntax and semantics of the bitstream.
52 * The principle is roughly:
53 * Two decoders with the same ID can decode the same streams.
54 * Two encoders with the same ID can encode compatible streams.
55 * There may be slight deviations from the principle due to implementation
56 * details.
57 *
58 * If you add a codec ID to this list, add it so that
59 * 1. no value of a existing codec ID changes (that would break ABI),
60 * 2. it is as close as possible to similar codecs.
61 */
62enum CodecID {
63 CODEC_ID_NONE,
64
65 /* video codecs */
66 CODEC_ID_MPEG1VIDEO,
67 CODEC_ID_MPEG2VIDEO, ///< preferred ID for MPEG-1/2 video decoding
68 CODEC_ID_MPEG2VIDEO_XVMC,
69 CODEC_ID_H261,
70 CODEC_ID_H263,
71 CODEC_ID_RV10,
72 CODEC_ID_RV20,
73 CODEC_ID_MJPEG,
74 CODEC_ID_MJPEGB,
75 CODEC_ID_LJPEG,
76 CODEC_ID_SP5X,
77 CODEC_ID_JPEGLS,
78 CODEC_ID_MPEG4,
79 CODEC_ID_RAWVIDEO,
80 CODEC_ID_MSMPEG4V1,
81 CODEC_ID_MSMPEG4V2,
82 CODEC_ID_MSMPEG4V3,
83 CODEC_ID_WMV1,
84 CODEC_ID_WMV2,
85 CODEC_ID_H263P,
86 CODEC_ID_H263I,
87 CODEC_ID_FLV1,
88 CODEC_ID_SVQ1,
89 CODEC_ID_SVQ3,
90 CODEC_ID_DVVIDEO,
91 CODEC_ID_HUFFYUV,
92 CODEC_ID_CYUV,
93 CODEC_ID_H264,
94 CODEC_ID_INDEO3,
95 CODEC_ID_VP3,
96 CODEC_ID_THEORA,
97 CODEC_ID_ASV1,
98 CODEC_ID_ASV2,
99 CODEC_ID_FFV1,
100 CODEC_ID_4XM,
101 CODEC_ID_VCR1,
102 CODEC_ID_CLJR,
103 CODEC_ID_MDEC,
104 CODEC_ID_ROQ,
105 CODEC_ID_INTERPLAY_VIDEO,
106 CODEC_ID_XAN_WC3,
107 CODEC_ID_XAN_WC4,
108 CODEC_ID_RPZA,
109 CODEC_ID_CINEPAK,
110 CODEC_ID_WS_VQA,
111 CODEC_ID_MSRLE,
112 CODEC_ID_MSVIDEO1,
113 CODEC_ID_IDCIN,
114 CODEC_ID_8BPS,
115 CODEC_ID_SMC,
116 CODEC_ID_FLIC,
117 CODEC_ID_TRUEMOTION1,
118 CODEC_ID_VMDVIDEO,
119 CODEC_ID_MSZH,
120 CODEC_ID_ZLIB,
121 CODEC_ID_QTRLE,
122 CODEC_ID_SNOW,
123 CODEC_ID_TSCC,
124 CODEC_ID_ULTI,
125 CODEC_ID_QDRAW,
126 CODEC_ID_VIXL,
127 CODEC_ID_QPEG,
128#if LIBAVCODEC_VERSION_MAJOR < 53
129 CODEC_ID_XVID,
130#endif
131 CODEC_ID_PNG,
132 CODEC_ID_PPM,
133 CODEC_ID_PBM,
134 CODEC_ID_PGM,
135 CODEC_ID_PGMYUV,
136 CODEC_ID_PAM,
137 CODEC_ID_FFVHUFF,
138 CODEC_ID_RV30,
139 CODEC_ID_RV40,
140 CODEC_ID_VC1,
141 CODEC_ID_WMV3,
142 CODEC_ID_LOCO,
143 CODEC_ID_WNV1,
144 CODEC_ID_AASC,
145 CODEC_ID_INDEO2,
146 CODEC_ID_FRAPS,
147 CODEC_ID_TRUEMOTION2,
148 CODEC_ID_BMP,
149 CODEC_ID_CSCD,
150 CODEC_ID_MMVIDEO,
151 CODEC_ID_ZMBV,
152 CODEC_ID_AVS,
153 CODEC_ID_SMACKVIDEO,
154 CODEC_ID_NUV,
155 CODEC_ID_KMVC,
156 CODEC_ID_FLASHSV,
157 CODEC_ID_CAVS,
158 CODEC_ID_JPEG2000,
159 CODEC_ID_VMNC,
160 CODEC_ID_VP5,
161 CODEC_ID_VP6,
162 CODEC_ID_VP6F,
163 CODEC_ID_TARGA,
164 CODEC_ID_DSICINVIDEO,
165 CODEC_ID_TIERTEXSEQVIDEO,
166 CODEC_ID_TIFF,
167 CODEC_ID_GIF,
168 CODEC_ID_FFH264,
169 CODEC_ID_DXA,
170 CODEC_ID_DNXHD,
171 CODEC_ID_THP,
172 CODEC_ID_SGI,
173 CODEC_ID_C93,
174 CODEC_ID_BETHSOFTVID,
175 CODEC_ID_PTX,
176 CODEC_ID_TXD,
177 CODEC_ID_VP6A,
178 CODEC_ID_AMV,
179 CODEC_ID_VB,
180 CODEC_ID_PCX,
181 CODEC_ID_SUNRAST,
182 CODEC_ID_INDEO4,
183 CODEC_ID_INDEO5,
184 CODEC_ID_MIMIC,
185 CODEC_ID_RL2,
186 CODEC_ID_8SVX_EXP,
187 CODEC_ID_8SVX_FIB,
188 CODEC_ID_ESCAPE124,
189 CODEC_ID_DIRAC,
190 CODEC_ID_BFI,
191 CODEC_ID_CMV,
192 CODEC_ID_MOTIONPIXELS,
193 CODEC_ID_TGV,
194 CODEC_ID_TGQ,
195 CODEC_ID_TQI,
196 CODEC_ID_AURA,
197 CODEC_ID_AURA2,
198 CODEC_ID_V210X,
199 CODEC_ID_TMV,
200 CODEC_ID_V210,
201 CODEC_ID_DPX,
202 CODEC_ID_MAD,
203 CODEC_ID_FRWU,
204 CODEC_ID_FLASHSV2,
205 CODEC_ID_CDGRAPHICS,
206 CODEC_ID_R210,
207 CODEC_ID_ANM,
208 CODEC_ID_BINKVIDEO,
209 CODEC_ID_IFF_ILBM,
210 CODEC_ID_IFF_BYTERUN1,
211 CODEC_ID_KGV1,
212 CODEC_ID_YOP,
213
214 /* various PCM "codecs" */
215 CODEC_ID_PCM_S16LE= 0x10000,
216 CODEC_ID_PCM_S16BE,
217 CODEC_ID_PCM_U16LE,
218 CODEC_ID_PCM_U16BE,
219 CODEC_ID_PCM_S8,
220 CODEC_ID_PCM_U8,
221 CODEC_ID_PCM_MULAW,
222 CODEC_ID_PCM_ALAW,
223 CODEC_ID_PCM_S32LE,
224 CODEC_ID_PCM_S32BE,
225 CODEC_ID_PCM_U32LE,
226 CODEC_ID_PCM_U32BE,
227 CODEC_ID_PCM_S24LE,
228 CODEC_ID_PCM_S24BE,
229 CODEC_ID_PCM_U24LE,
230 CODEC_ID_PCM_U24BE,
231 CODEC_ID_PCM_S24DAUD,
232 CODEC_ID_PCM_ZORK,
233 CODEC_ID_PCM_S16LE_PLANAR,
234 CODEC_ID_PCM_DVD,
235 CODEC_ID_PCM_F32BE,
236 CODEC_ID_PCM_F32LE,
237 CODEC_ID_PCM_F64BE,
238 CODEC_ID_PCM_F64LE,
239 CODEC_ID_PCM_BLURAY,
240
241 /* various ADPCM codecs */
242 CODEC_ID_ADPCM_IMA_QT= 0x11000,
243 CODEC_ID_ADPCM_IMA_WAV,
244 CODEC_ID_ADPCM_IMA_DK3,
245 CODEC_ID_ADPCM_IMA_DK4,
246 CODEC_ID_ADPCM_IMA_WS,
247 CODEC_ID_ADPCM_IMA_SMJPEG,
248 CODEC_ID_ADPCM_MS,
249 CODEC_ID_ADPCM_4XM,
250 CODEC_ID_ADPCM_XA,
251 CODEC_ID_ADPCM_ADX,
252 CODEC_ID_ADPCM_EA,
253 CODEC_ID_ADPCM_G726,
254 CODEC_ID_ADPCM_CT,
255 CODEC_ID_ADPCM_SWF,
256 CODEC_ID_ADPCM_YAMAHA,
257 CODEC_ID_ADPCM_SBPRO_4,
258 CODEC_ID_ADPCM_SBPRO_3,
259 CODEC_ID_ADPCM_SBPRO_2,
260 CODEC_ID_ADPCM_THP,
261 CODEC_ID_ADPCM_IMA_AMV,
262 CODEC_ID_ADPCM_EA_R1,
263 CODEC_ID_ADPCM_EA_R3,
264 CODEC_ID_ADPCM_EA_R2,
265 CODEC_ID_ADPCM_IMA_EA_SEAD,
266 CODEC_ID_ADPCM_IMA_EA_EACS,
267 CODEC_ID_ADPCM_EA_XAS,
268 CODEC_ID_ADPCM_EA_MAXIS_XA,
269 CODEC_ID_ADPCM_IMA_ISS,
270
271 /* AMR */
272 CODEC_ID_AMR_NB= 0x12000,
273 CODEC_ID_AMR_WB,
274
275 /* RealAudio codecs*/
276 CODEC_ID_RA_144= 0x13000,
277 CODEC_ID_RA_288,
278
279 /* various DPCM codecs */
280 CODEC_ID_ROQ_DPCM= 0x14000,
281 CODEC_ID_INTERPLAY_DPCM,
282 CODEC_ID_XAN_DPCM,
283 CODEC_ID_SOL_DPCM,
284
285 /* audio codecs */
286 CODEC_ID_MP2= 0x15000,
287 CODEC_ID_MP3, ///< preferred ID for decoding MPEG audio layer 1, 2 or 3
288 CODEC_ID_AAC,
289 CODEC_ID_AC3,
290 CODEC_ID_DTS,
291 CODEC_ID_VORBIS,
292 CODEC_ID_DVAUDIO,
293 CODEC_ID_WMAV1,
294 CODEC_ID_WMAV2,
295 CODEC_ID_MACE3,
296 CODEC_ID_MACE6,
297 CODEC_ID_VMDAUDIO,
298 CODEC_ID_SONIC,
299 CODEC_ID_SONIC_LS,
300 CODEC_ID_FLAC,
301 CODEC_ID_MP3ADU,
302 CODEC_ID_MP3ON4,
303 CODEC_ID_SHORTEN,
304 CODEC_ID_ALAC,
305 CODEC_ID_WESTWOOD_SND1,
306 CODEC_ID_GSM, ///< as in Berlin toast format
307 CODEC_ID_QDM2,
308 CODEC_ID_COOK,
309 CODEC_ID_TRUESPEECH,
310 CODEC_ID_TTA,
311 CODEC_ID_SMACKAUDIO,
312 CODEC_ID_QCELP,
313 CODEC_ID_WAVPACK,
314 CODEC_ID_DSICINAUDIO,
315 CODEC_ID_IMC,
316 CODEC_ID_MUSEPACK7,
317 CODEC_ID_MLP,
318 CODEC_ID_GSM_MS, /* as found in WAV */
319 CODEC_ID_ATRAC3,
320 CODEC_ID_VOXWARE,
321 CODEC_ID_APE,
322 CODEC_ID_NELLYMOSER,
323 CODEC_ID_MUSEPACK8,
324 CODEC_ID_SPEEX,
325 CODEC_ID_WMAVOICE,
326 CODEC_ID_WMAPRO,
327 CODEC_ID_WMALOSSLESS,
328 CODEC_ID_ATRAC3P,
329 CODEC_ID_EAC3,
330 CODEC_ID_SIPR,
331 CODEC_ID_MP1,
332 CODEC_ID_TWINVQ,
333 CODEC_ID_TRUEHD,
334 CODEC_ID_MP4ALS,
335 CODEC_ID_ATRAC1,
336 CODEC_ID_BINKAUDIO_RDFT,
337 CODEC_ID_BINKAUDIO_DCT,
338
339 /* subtitle codecs */
340 CODEC_ID_DVD_SUBTITLE= 0x17000,
341 CODEC_ID_DVB_SUBTITLE,
342 CODEC_ID_TEXT, ///< raw UTF-8 text
343 CODEC_ID_XSUB,
344 CODEC_ID_SSA,
345 CODEC_ID_MOV_TEXT,
346 CODEC_ID_HDMV_PGS_SUBTITLE,
347 CODEC_ID_DVB_TELETEXT,
348
349 /* other specific kind of codecs (generally used for attachments) */
350 CODEC_ID_TTF= 0x18000,
351
352 CODEC_ID_PROBE= 0x19000, ///< codec_id is not known (like CODEC_ID_NONE) but lavf should attempt to identify it
353
354 CODEC_ID_MPEG2TS= 0x20000, /**< _FAKE_ codec to indicate a raw MPEG-2 TS
355 * stream (only used by libavformat) */
356};
357
358#if LIBAVCODEC_VERSION_MAJOR < 53
359#define CodecType AVMediaType
360
361#define CODEC_TYPE_UNKNOWN AVMEDIA_TYPE_UNKNOWN
362#define CODEC_TYPE_VIDEO AVMEDIA_TYPE_VIDEO
363#define CODEC_TYPE_AUDIO AVMEDIA_TYPE_AUDIO
364#define CODEC_TYPE_DATA AVMEDIA_TYPE_DATA
365#define CODEC_TYPE_SUBTITLE AVMEDIA_TYPE_SUBTITLE
366#define CODEC_TYPE_ATTACHMENT AVMEDIA_TYPE_ATTACHMENT
367#define CODEC_TYPE_NB AVMEDIA_TYPE_NB
368#endif
369
370/**
371 * all in native-endian format
372 */
373enum SampleFormat {
374 SAMPLE_FMT_NONE = -1,
375 SAMPLE_FMT_U8, ///< unsigned 8 bits
376 SAMPLE_FMT_S16, ///< signed 16 bits
377 SAMPLE_FMT_S32, ///< signed 32 bits
378 SAMPLE_FMT_FLT, ///< float
379 SAMPLE_FMT_DBL, ///< double
380 SAMPLE_FMT_NB ///< Number of sample formats. DO NOT USE if dynamically linking to libavcodec
381};
382
383/* Audio channel masks */
384#define CH_FRONT_LEFT 0x00000001
385#define CH_FRONT_RIGHT 0x00000002
386#define CH_FRONT_CENTER 0x00000004
387#define CH_LOW_FREQUENCY 0x00000008
388#define CH_BACK_LEFT 0x00000010
389#define CH_BACK_RIGHT 0x00000020
390#define CH_FRONT_LEFT_OF_CENTER 0x00000040
391#define CH_FRONT_RIGHT_OF_CENTER 0x00000080
392#define CH_BACK_CENTER 0x00000100
393#define CH_SIDE_LEFT 0x00000200
394#define CH_SIDE_RIGHT 0x00000400
395#define CH_TOP_CENTER 0x00000800
396#define CH_TOP_FRONT_LEFT 0x00001000
397#define CH_TOP_FRONT_CENTER 0x00002000
398#define CH_TOP_FRONT_RIGHT 0x00004000
399#define CH_TOP_BACK_LEFT 0x00008000
400#define CH_TOP_BACK_CENTER 0x00010000
401#define CH_TOP_BACK_RIGHT 0x00020000
402#define CH_STEREO_LEFT 0x20000000 ///< Stereo downmix.
403#define CH_STEREO_RIGHT 0x40000000 ///< See CH_STEREO_LEFT.
404
405/** Channel mask value used for AVCodecContext.request_channel_layout
406 to indicate that the user requests the channel order of the decoder output
407 to be the native codec channel order. */
408#define CH_LAYOUT_NATIVE 0x8000000000000000LL
409
410/* Audio channel convenience macros */
411#define CH_LAYOUT_MONO (CH_FRONT_CENTER)
412#define CH_LAYOUT_STEREO (CH_FRONT_LEFT|CH_FRONT_RIGHT)
413#define CH_LAYOUT_2_1 (CH_LAYOUT_STEREO|CH_BACK_CENTER)
414#define CH_LAYOUT_SURROUND (CH_LAYOUT_STEREO|CH_FRONT_CENTER)
415#define CH_LAYOUT_4POINT0 (CH_LAYOUT_SURROUND|CH_BACK_CENTER)
416#define CH_LAYOUT_2_2 (CH_LAYOUT_STEREO|CH_SIDE_LEFT|CH_SIDE_RIGHT)
417#define CH_LAYOUT_QUAD (CH_LAYOUT_STEREO|CH_BACK_LEFT|CH_BACK_RIGHT)
418#define CH_LAYOUT_5POINT0 (CH_LAYOUT_SURROUND|CH_SIDE_LEFT|CH_SIDE_RIGHT)
419#define CH_LAYOUT_5POINT1 (CH_LAYOUT_5POINT0|CH_LOW_FREQUENCY)
420#define CH_LAYOUT_5POINT0_BACK (CH_LAYOUT_SURROUND|CH_BACK_LEFT|CH_BACK_RIGHT)
421#define CH_LAYOUT_5POINT1_BACK (CH_LAYOUT_5POINT0_BACK|CH_LOW_FREQUENCY)
422#define CH_LAYOUT_7POINT0 (CH_LAYOUT_5POINT0|CH_BACK_LEFT|CH_BACK_RIGHT)
423#define CH_LAYOUT_7POINT1 (CH_LAYOUT_5POINT1|CH_BACK_LEFT|CH_BACK_RIGHT)
424#define CH_LAYOUT_7POINT1_WIDE (CH_LAYOUT_5POINT1_BACK|\
425 CH_FRONT_LEFT_OF_CENTER|CH_FRONT_RIGHT_OF_CENTER)
426#define CH_LAYOUT_STEREO_DOWNMIX (CH_STEREO_LEFT|CH_STEREO_RIGHT)
427
428/* in bytes */
429#define AVCODEC_MAX_AUDIO_FRAME_SIZE 192000 // 1 second of 48khz 32bit audio
430
431/**
432 * Required number of additionally allocated bytes at the end of the input bitstream for decoding.
433 * This is mainly needed because some optimized bitstream readers read
434 * 32 or 64 bit at once and could read over the end.<br>
435 * Note: If the first 23 bits of the additional bytes are not 0, then damaged
436 * MPEG bitstreams could cause overread and segfault.
437 */
438#define FF_INPUT_BUFFER_PADDING_SIZE 8
439
440/**
441 * minimum encoding buffer size
442 * Used to avoid some checks during header writing.
443 */
444#define FF_MIN_BUFFER_SIZE 16384
445
446
447/**
448 * motion estimation type.
449 */
450enum Motion_Est_ID {
451 ME_ZERO = 1, ///< no search, that is use 0,0 vector whenever one is needed
452 ME_FULL,
453 ME_LOG,
454 ME_PHODS,
455 ME_EPZS, ///< enhanced predictive zonal search
456 ME_X1, ///< reserved for experiments
457 ME_HEX, ///< hexagon based search
458 ME_UMH, ///< uneven multi-hexagon search
459 ME_ITER, ///< iterative search
460 ME_TESA, ///< transformed exhaustive search algorithm
461};
462
463enum AVDiscard{
464 /* We leave some space between them for extensions (drop some
465 * keyframes for intra-only or drop just some bidir frames). */
466 AVDISCARD_NONE =-16, ///< discard nothing
467 AVDISCARD_DEFAULT= 0, ///< discard useless packets like 0 size packets in avi
468 AVDISCARD_NONREF = 8, ///< discard all non reference
469 AVDISCARD_BIDIR = 16, ///< discard all bidirectional frames
470 AVDISCARD_NONKEY = 32, ///< discard all frames except keyframes
471 AVDISCARD_ALL = 48, ///< discard all
472};
473
474enum AVColorPrimaries{
475 AVCOL_PRI_BT709 =1, ///< also ITU-R BT1361 / IEC 61966-2-4 / SMPTE RP177 Annex B
476 AVCOL_PRI_UNSPECIFIED=2,
477 AVCOL_PRI_BT470M =4,
478 AVCOL_PRI_BT470BG =5, ///< also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM
479 AVCOL_PRI_SMPTE170M =6, ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC
480 AVCOL_PRI_SMPTE240M =7, ///< functionally identical to above
481 AVCOL_PRI_FILM =8,
482 AVCOL_PRI_NB , ///< Not part of ABI
483};
484
485enum AVColorTransferCharacteristic{
486 AVCOL_TRC_BT709 =1, ///< also ITU-R BT1361
487 AVCOL_TRC_UNSPECIFIED=2,
488 AVCOL_TRC_GAMMA22 =4, ///< also ITU-R BT470M / ITU-R BT1700 625 PAL & SECAM
489 AVCOL_TRC_GAMMA28 =5, ///< also ITU-R BT470BG
490 AVCOL_TRC_NB , ///< Not part of ABI
491};
492
493enum AVColorSpace{
494 AVCOL_SPC_RGB =0,
495 AVCOL_SPC_BT709 =1, ///< also ITU-R BT1361 / IEC 61966-2-4 xvYCC709 / SMPTE RP177 Annex B
496 AVCOL_SPC_UNSPECIFIED=2,
497 AVCOL_SPC_FCC =4,
498 AVCOL_SPC_BT470BG =5, ///< also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM / IEC 61966-2-4 xvYCC601
499 AVCOL_SPC_SMPTE170M =6, ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC / functionally identical to above
500 AVCOL_SPC_SMPTE240M =7,
501 AVCOL_SPC_NB , ///< Not part of ABI
502};
503
504enum AVColorRange{
505 AVCOL_RANGE_UNSPECIFIED=0,
506 AVCOL_RANGE_MPEG =1, ///< the normal 219*2^(n-8) "MPEG" YUV ranges
507 AVCOL_RANGE_JPEG =2, ///< the normal 2^n-1 "JPEG" YUV ranges
508 AVCOL_RANGE_NB , ///< Not part of ABI
509};
510
511/**
512 * X X 3 4 X X are luma samples,
513 * 1 2 1-6 are possible chroma positions
514 * X X 5 6 X 0 is undefined/unknown position
515 */
516enum AVChromaLocation{
517 AVCHROMA_LOC_UNSPECIFIED=0,
518 AVCHROMA_LOC_LEFT =1, ///< mpeg2/4, h264 default
519 AVCHROMA_LOC_CENTER =2, ///< mpeg1, jpeg, h263
520 AVCHROMA_LOC_TOPLEFT =3, ///< DV
521 AVCHROMA_LOC_TOP =4,
522 AVCHROMA_LOC_BOTTOMLEFT =5,
523 AVCHROMA_LOC_BOTTOM =6,
524 AVCHROMA_LOC_NB , ///< Not part of ABI
525};
526
527typedef struct RcOverride{
528 int start_frame;
529 int end_frame;
530 int qscale; // If this is 0 then quality_factor will be used instead.
531 float quality_factor;
532} RcOverride;
533
534#define FF_MAX_B_FRAMES 16
535
536/* encoding support
537 These flags can be passed in AVCodecContext.flags before initialization.
538 Note: Not everything is supported yet.
539*/
540
541#define CODEC_FLAG_QSCALE 0x0002 ///< Use fixed qscale.
542#define CODEC_FLAG_4MV 0x0004 ///< 4 MV per MB allowed / advanced prediction for H.263.
543#define CODEC_FLAG_QPEL 0x0010 ///< Use qpel MC.
544#define CODEC_FLAG_GMC 0x0020 ///< Use GMC.
545#define CODEC_FLAG_MV0 0x0040 ///< Always try a MB with MV=<0,0>.
546#define CODEC_FLAG_PART 0x0080 ///< Use data partitioning.
547/**
548 * The parent program guarantees that the input for B-frames containing
549 * streams is not written to for at least s->max_b_frames+1 frames, if
550 * this is not set the input will be copied.
551 */
552#define CODEC_FLAG_INPUT_PRESERVED 0x0100
553#define CODEC_FLAG_PASS1 0x0200 ///< Use internal 2pass ratecontrol in first pass mode.
554#define CODEC_FLAG_PASS2 0x0400 ///< Use internal 2pass ratecontrol in second pass mode.
555#define CODEC_FLAG_EXTERN_HUFF 0x1000 ///< Use external Huffman table (for MJPEG).
556#define CODEC_FLAG_GRAY 0x2000 ///< Only decode/encode grayscale.
557#define CODEC_FLAG_EMU_EDGE 0x4000 ///< Don't draw edges.
558#define CODEC_FLAG_PSNR 0x8000 ///< error[?] variables will be set during encoding.
559#define CODEC_FLAG_TRUNCATED 0x00010000 /** Input bitstream might be truncated at a random
560 location instead of only at frame boundaries. */
561#define CODEC_FLAG_NORMALIZE_AQP 0x00020000 ///< Normalize adaptive quantization.
562#define CODEC_FLAG_INTERLACED_DCT 0x00040000 ///< Use interlaced DCT.
563#define CODEC_FLAG_LOW_DELAY 0x00080000 ///< Force low delay.
564#define CODEC_FLAG_ALT_SCAN 0x00100000 ///< Use alternate scan.
565#define CODEC_FLAG_GLOBAL_HEADER 0x00400000 ///< Place global headers in extradata instead of every keyframe.
566#define CODEC_FLAG_BITEXACT 0x00800000 ///< Use only bitexact stuff (except (I)DCT).
567/* Fx : Flag for h263+ extra options */
568#define CODEC_FLAG_AC_PRED 0x01000000 ///< H.263 advanced intra coding / MPEG-4 AC prediction
569#define CODEC_FLAG_H263P_UMV 0x02000000 ///< unlimited motion vector
570#define CODEC_FLAG_CBP_RD 0x04000000 ///< Use rate distortion optimization for cbp.
571#define CODEC_FLAG_QP_RD 0x08000000 ///< Use rate distortion optimization for qp selectioon.
572#define CODEC_FLAG_H263P_AIV 0x00000008 ///< H.263 alternative inter VLC
573#define CODEC_FLAG_OBMC 0x00000001 ///< OBMC
574#define CODEC_FLAG_LOOP_FILTER 0x00000800 ///< loop filter
575#define CODEC_FLAG_H263P_SLICE_STRUCT 0x10000000
576#define CODEC_FLAG_INTERLACED_ME 0x20000000 ///< interlaced motion estimation
577#define CODEC_FLAG_SVCD_SCAN_OFFSET 0x40000000 ///< Will reserve space for SVCD scan offset user data.
578#define CODEC_FLAG_CLOSED_GOP 0x80000000
579#define CODEC_FLAG2_FAST 0x00000001 ///< Allow non spec compliant speedup tricks.
580#define CODEC_FLAG2_STRICT_GOP 0x00000002 ///< Strictly enforce GOP size.
581#define CODEC_FLAG2_NO_OUTPUT 0x00000004 ///< Skip bitstream encoding.
582#define CODEC_FLAG2_LOCAL_HEADER 0x00000008 ///< Place global headers at every keyframe instead of in extradata.
583#define CODEC_FLAG2_BPYRAMID 0x00000010 ///< H.264 allow B-frames to be used as references.
584#define CODEC_FLAG2_WPRED 0x00000020 ///< H.264 weighted biprediction for B-frames
585#define CODEC_FLAG2_MIXED_REFS 0x00000040 ///< H.264 one reference per partition, as opposed to one reference per macroblock
586#define CODEC_FLAG2_8X8DCT 0x00000080 ///< H.264 high profile 8x8 transform
587#define CODEC_FLAG2_FASTPSKIP 0x00000100 ///< H.264 fast pskip
588#define CODEC_FLAG2_AUD 0x00000200 ///< H.264 access unit delimiters
589#define CODEC_FLAG2_BRDO 0x00000400 ///< B-frame rate-distortion optimization
590#define CODEC_FLAG2_INTRA_VLC 0x00000800 ///< Use MPEG-2 intra VLC table.
591#define CODEC_FLAG2_MEMC_ONLY 0x00001000 ///< Only do ME/MC (I frames -> ref, P frame -> ME+MC).
592#define CODEC_FLAG2_DROP_FRAME_TIMECODE 0x00002000 ///< timecode is in drop frame format.
593#define CODEC_FLAG2_SKIP_RD 0x00004000 ///< RD optimal MB level residual skipping
594#define CODEC_FLAG2_CHUNKS 0x00008000 ///< Input bitstream might be truncated at a packet boundaries instead of only at frame boundaries.
595#define CODEC_FLAG2_NON_LINEAR_QUANT 0x00010000 ///< Use MPEG-2 nonlinear quantizer.
596#define CODEC_FLAG2_BIT_RESERVOIR 0x00020000 ///< Use a bit reservoir when encoding if possible
597#define CODEC_FLAG2_MBTREE 0x00040000 ///< Use macroblock tree ratecontrol (x264 only)
598#define CODEC_FLAG2_PSY 0x00080000 ///< Use psycho visual optimizations.
599#define CODEC_FLAG2_SSIM 0x00100000 ///< Compute SSIM during encoding, error[] values are undefined.
600
601/* Unsupported options :
602 * Syntax Arithmetic coding (SAC)
603 * Reference Picture Selection
604 * Independent Segment Decoding */
605/* /Fx */
606/* codec capabilities */
607
608#define CODEC_CAP_DRAW_HORIZ_BAND 0x0001 ///< Decoder can use draw_horiz_band callback.
609/**
610 * Codec uses get_buffer() for allocating buffers and supports custom allocators.
611 * If not set, it might not use get_buffer() at all or use operations that
612 * assume the buffer was allocated by avcodec_default_get_buffer.
613 */
614#define CODEC_CAP_DR1 0x0002
615/* If 'parse_only' field is true, then avcodec_parse_frame() can be used. */
616#define CODEC_CAP_PARSE_ONLY 0x0004
617#define CODEC_CAP_TRUNCATED 0x0008
618/* Codec can export data for HW decoding (XvMC). */
619#define CODEC_CAP_HWACCEL 0x0010
620/**
621 * Codec has a nonzero delay and needs to be fed with NULL at the end to get the delayed data.
622 * If this is not set, the codec is guaranteed to never be fed with NULL data.
623 */
624#define CODEC_CAP_DELAY 0x0020
625/**
626 * Codec can be fed a final frame with a smaller size.
627 * This can be used to prevent truncation of the last audio samples.
628 */
629#define CODEC_CAP_SMALL_LAST_FRAME 0x0040
630/**
631 * Codec can export data for HW decoding (VDPAU).
632 */
633#define CODEC_CAP_HWACCEL_VDPAU 0x0080
634/**
635 * Codec can output multiple frames per AVPacket
636 * Normally demuxers return one frame at a time, demuxers which do not do
637 * are connected to a parser to split what they return into proper frames.
638 * This flag is reserved to the very rare category of codecs which have a
639 * bitstream that cannot be split into frames without timeconsuming
640 * operations like full decoding. Demuxers carring such bitstreams thus
641 * may return multiple frames in a packet. This has many disadvantages like
642 * prohibiting stream copy in many cases thus it should only be considered
643 * as a last resort.
644 */
645#define CODEC_CAP_SUBFRAMES 0x0100
646
647//The following defines may change, don't expect compatibility if you use them.
648#define MB_TYPE_INTRA4x4 0x0001
649#define MB_TYPE_INTRA16x16 0x0002 //FIXME H.264-specific
650#define MB_TYPE_INTRA_PCM 0x0004 //FIXME H.264-specific
651#define MB_TYPE_16x16 0x0008
652#define MB_TYPE_16x8 0x0010
653#define MB_TYPE_8x16 0x0020
654#define MB_TYPE_8x8 0x0040
655#define MB_TYPE_INTERLACED 0x0080
656#define MB_TYPE_DIRECT2 0x0100 //FIXME
657#define MB_TYPE_ACPRED 0x0200
658#define MB_TYPE_GMC 0x0400
659#define MB_TYPE_SKIP 0x0800
660#define MB_TYPE_P0L0 0x1000
661#define MB_TYPE_P1L0 0x2000
662#define MB_TYPE_P0L1 0x4000
663#define MB_TYPE_P1L1 0x8000
664#define MB_TYPE_L0 (MB_TYPE_P0L0 | MB_TYPE_P1L0)
665#define MB_TYPE_L1 (MB_TYPE_P0L1 | MB_TYPE_P1L1)
666#define MB_TYPE_L0L1 (MB_TYPE_L0 | MB_TYPE_L1)
667#define MB_TYPE_QUANT 0x00010000
668#define MB_TYPE_CBP 0x00020000
669//Note bits 24-31 are reserved for codec specific use (h264 ref0, mpeg1 0mv, ...)
670
671/**
672 * Pan Scan area.
673 * This specifies the area which should be displayed.
674 * Note there may be multiple such areas for one frame.
675 */
676typedef struct AVPanScan{
677 /**
678 * id
679 * - encoding: Set by user.
680 * - decoding: Set by libavcodec.
681 */
682 int id;
683
684 /**
685 * width and height in 1/16 pel
686 * - encoding: Set by user.
687 * - decoding: Set by libavcodec.
688 */
689 int width;
690 int height;
691
692 /**
693 * position of the top left corner in 1/16 pel for up to 3 fields/frames
694 * - encoding: Set by user.
695 * - decoding: Set by libavcodec.
696 */
697 int16_t position[3][2];
698}AVPanScan;
699
700#define FF_COMMON_FRAME \
701 /**\
702 * pointer to the picture planes.\
703 * This might be different from the first allocated byte\
704 * - encoding: \
705 * - decoding: \
706 */\
707 uint8_t *data[4];\
708 int linesize[4];\
709 /**\
710 * pointer to the first allocated byte of the picture. Can be used in get_buffer/release_buffer.\
711 * This isn't used by libavcodec unless the default get/release_buffer() is used.\
712 * - encoding: \
713 * - decoding: \
714 */\
715 uint8_t *base[4];\
716 /**\
717 * 1 -> keyframe, 0-> not\
718 * - encoding: Set by libavcodec.\
719 * - decoding: Set by libavcodec.\
720 */\
721 int key_frame;\
722\
723 /**\
724 * Picture type of the frame, see ?_TYPE below.\
725 * - encoding: Set by libavcodec. for coded_picture (and set by user for input).\
726 * - decoding: Set by libavcodec.\
727 */\
728 int pict_type;\
729\
730 /**\
731 * presentation timestamp in time_base units (time when frame should be shown to user)\
732 * If AV_NOPTS_VALUE then frame_rate = 1/time_base will be assumed.\
733 * - encoding: MUST be set by user.\
734 * - decoding: Set by libavcodec.\
735 */\
736 int64_t pts;\
737\
738 /**\
739 * picture number in bitstream order\
740 * - encoding: set by\
741 * - decoding: Set by libavcodec.\
742 */\
743 int coded_picture_number;\
744 /**\
745 * picture number in display order\
746 * - encoding: set by\
747 * - decoding: Set by libavcodec.\
748 */\
749 int display_picture_number;\
750\
751 /**\
752 * quality (between 1 (good) and FF_LAMBDA_MAX (bad)) \
753 * - encoding: Set by libavcodec. for coded_picture (and set by user for input).\
754 * - decoding: Set by libavcodec.\
755 */\
756 int quality; \
757\
758 /**\
759 * buffer age (1->was last buffer and dint change, 2->..., ...).\
760 * Set to INT_MAX if the buffer has not been used yet.\
761 * - encoding: unused\
762 * - decoding: MUST be set by get_buffer().\
763 */\
764 int age;\
765\
766 /**\
767 * is this picture used as reference\
768 * The values for this are the same as the MpegEncContext.picture_structure\
769 * variable, that is 1->top field, 2->bottom field, 3->frame/both fields.\
770 * Set to 4 for delayed, non-reference frames.\
771 * - encoding: unused\
772 * - decoding: Set by libavcodec. (before get_buffer() call)).\
773 */\
774 int reference;\
775\
776 /**\
777 * QP table\
778 * - encoding: unused\
779 * - decoding: Set by libavcodec.\
780 */\
781 int8_t *qscale_table;\
782 /**\
783 * QP store stride\
784 * - encoding: unused\
785 * - decoding: Set by libavcodec.\
786 */\
787 int qstride;\
788\
789 /**\
790 * mbskip_table[mb]>=1 if MB didn't change\
791 * stride= mb_width = (width+15)>>4\
792 * - encoding: unused\
793 * - decoding: Set by libavcodec.\
794 */\
795 uint8_t *mbskip_table;\
796\
797 /**\
798 * motion vector table\
799 * @code\
800 * example:\
801 * int mv_sample_log2= 4 - motion_subsample_log2;\
802 * int mb_width= (width+15)>>4;\
803 * int mv_stride= (mb_width << mv_sample_log2) + 1;\
804 * motion_val[direction][x + y*mv_stride][0->mv_x, 1->mv_y];\
805 * @endcode\
806 * - encoding: Set by user.\
807 * - decoding: Set by libavcodec.\
808 */\
809 int16_t (*motion_val[2])[2];\
810\
811 /**\
812 * macroblock type table\
813 * mb_type_base + mb_width + 2\
814 * - encoding: Set by user.\
815 * - decoding: Set by libavcodec.\
816 */\
817 uint32_t *mb_type;\
818\
819 /**\
820 * log2 of the size of the block which a single vector in motion_val represents: \
821 * (4->16x16, 3->8x8, 2-> 4x4, 1-> 2x2)\
822 * - encoding: unused\
823 * - decoding: Set by libavcodec.\
824 */\
825 uint8_t motion_subsample_log2;\
826\
827 /**\
828 * for some private data of the user\
829 * - encoding: unused\
830 * - decoding: Set by user.\
831 */\
832 void *opaque;\
833\
834 /**\
835 * error\
836 * - encoding: Set by libavcodec. if flags&CODEC_FLAG_PSNR.\
837 * - decoding: unused\
838 */\
839 uint64_t error[4];\
840\
841 /**\
842 * type of the buffer (to keep track of who has to deallocate data[*])\
843 * - encoding: Set by the one who allocates it.\
844 * - decoding: Set by the one who allocates it.\
845 * Note: User allocated (direct rendering) & internal buffers cannot coexist currently.\
846 */\
847 int type;\
848 \
849 /**\
850 * When decoding, this signals how much the picture must be delayed.\
851 * extra_delay = repeat_pict / (2*fps)\
852 * - encoding: unused\
853 * - decoding: Set by libavcodec.\
854 */\
855 int repeat_pict;\
856 \
857 /**\
858 * \
859 */\
860 int qscale_type;\
861 \
862 /**\
863 * The content of the picture is interlaced.\
864 * - encoding: Set by user.\
865 * - decoding: Set by libavcodec. (default 0)\
866 */\
867 int interlaced_frame;\
868 \
869 /**\
870 * If the content is interlaced, is top field displayed first.\
871 * - encoding: Set by user.\
872 * - decoding: Set by libavcodec.\
873 */\
874 int top_field_first;\
875 \
876 /**\
877 * Pan scan.\
878 * - encoding: Set by user.\
879 * - decoding: Set by libavcodec.\
880 */\
881 AVPanScan *pan_scan;\
882 \
883 /**\
884 * Tell user application that palette has changed from previous frame.\
885 * - encoding: ??? (no palette-enabled encoder yet)\
886 * - decoding: Set by libavcodec. (default 0).\
887 */\
888 int palette_has_changed;\
889 \
890 /**\
891 * codec suggestion on buffer type if != 0\
892 * - encoding: unused\
893 * - decoding: Set by libavcodec. (before get_buffer() call)).\
894 */\
895 int buffer_hints;\
896\
897 /**\
898 * DCT coefficients\
899 * - encoding: unused\
900 * - decoding: Set by libavcodec.\
901 */\
902 short *dct_coeff;\
903\
904 /**\
905 * motion reference frame index\
906 * the order in which these are stored can depend on the codec.\
907 * - encoding: Set by user.\
908 * - decoding: Set by libavcodec.\
909 */\
910 int8_t *ref_index[2];\
911\
912 /**\
913 * reordered opaque 64bit number (generally a PTS) from AVCodecContext.reordered_opaque\
914 * output in AVFrame.reordered_opaque\
915 * - encoding: unused\
916 * - decoding: Read by user.\
917 */\
918 int64_t reordered_opaque;\
919\
920 /**\
921 * hardware accelerator private data (FFmpeg allocated)\
922 * - encoding: unused\
923 * - decoding: Set by libavcodec\
924 */\
925 void *hwaccel_picture_private;\
926
927
928#define FF_QSCALE_TYPE_MPEG1 0
929#define FF_QSCALE_TYPE_MPEG2 1
930#define FF_QSCALE_TYPE_H264 2
931#define FF_QSCALE_TYPE_VP56 3
932
933#define FF_BUFFER_TYPE_INTERNAL 1
934#define FF_BUFFER_TYPE_USER 2 ///< direct rendering buffers (image is (de)allocated by user)
935#define FF_BUFFER_TYPE_SHARED 4 ///< Buffer from somewhere else; don't deallocate image (data/base), all other tables are not shared.
936#define FF_BUFFER_TYPE_COPY 8 ///< Just a (modified) copy of some other buffer, don't deallocate anything.
937
938
939#define FF_I_TYPE 1 ///< Intra
940#define FF_P_TYPE 2 ///< Predicted
941#define FF_B_TYPE 3 ///< Bi-dir predicted
942#define FF_S_TYPE 4 ///< S(GMC)-VOP MPEG4
943#define FF_SI_TYPE 5 ///< Switching Intra
944#define FF_SP_TYPE 6 ///< Switching Predicted
945#define FF_BI_TYPE 7
946
947#define FF_BUFFER_HINTS_VALID 0x01 // Buffer hints value is meaningful (if 0 ignore).
948#define FF_BUFFER_HINTS_READABLE 0x02 // Codec will read from buffer.
949#define FF_BUFFER_HINTS_PRESERVE 0x04 // User must not alter buffer content.
950#define FF_BUFFER_HINTS_REUSABLE 0x08 // Codec will reuse the buffer (update).
951
952typedef struct AVPacket {
953 /**
954 * Presentation timestamp in AVStream->time_base units; the time at which
955 * the decompressed packet will be presented to the user.
956 * Can be AV_NOPTS_VALUE if it is not stored in the file.
957 * pts MUST be larger or equal to dts as presentation cannot happen before
958 * decompression, unless one wants to view hex dumps. Some formats misuse
959 * the terms dts and pts/cts to mean something different. Such timestamps
960 * must be converted to true pts/dts before they are stored in AVPacket.
961 */
962 int64_t pts;
963 /**
964 * Decompression timestamp in AVStream->time_base units; the time at which
965 * the packet is decompressed.
966 * Can be AV_NOPTS_VALUE if it is not stored in the file.
967 */
968 int64_t dts;
969 uint8_t *data;
970 int size;
971 int stream_index;
972 int flags;
973 /**
974 * Duration of this packet in AVStream->time_base units, 0 if unknown.
975 * Equals next_pts - this_pts in presentation order.
976 */
977 int duration;
978 void (*destruct)(struct AVPacket *);
979 void *priv;
980 int64_t pos; ///< byte position in stream, -1 if unknown
981
982 /**
983 * Time difference in AVStream->time_base units from the pts of this
984 * packet to the point at which the output from the decoder has converged
985 * independent from the availability of previous frames. That is, the
986 * frames are virtually identical no matter if decoding started from
987 * the very first frame or from this keyframe.
988 * Is AV_NOPTS_VALUE if unknown.
989 * This field is not the display duration of the current packet.
990 *
991 * The purpose of this field is to allow seeking in streams that have no
992 * keyframes in the conventional sense. It corresponds to the
993 * recovery point SEI in H.264 and match_time_delta in NUT. It is also
994 * essential for some types of subtitle streams to ensure that all
995 * subtitles are correctly displayed after seeking.
996 */
997 int64_t convergence_duration;
998} AVPacket;
999#define AV_PKT_FLAG_KEY 0x0001
1000#if LIBAVCODEC_VERSION_MAJOR < 53
1001#define PKT_FLAG_KEY AV_PKT_FLAG_KEY
1002#endif
1003
1004/**
1005 * Audio Video Frame.
1006 * New fields can be added to the end of FF_COMMON_FRAME with minor version
1007 * bumps.
1008 * Removal, reordering and changes to existing fields require a major
1009 * version bump. No fields should be added into AVFrame before or after
1010 * FF_COMMON_FRAME!
1011 * sizeof(AVFrame) must not be used outside libav*.
1012 */
1013typedef struct AVFrame {
1014 FF_COMMON_FRAME
1015} AVFrame;
1016
1017/**
1018 * main external API structure.
1019 * New fields can be added to the end with minor version bumps.
1020 * Removal, reordering and changes to existing fields require a major
1021 * version bump.
1022 * sizeof(AVCodecContext) must not be used outside libav*.
1023 */
1024typedef struct AVCodecContext {
1025 /**
1026 * information on struct for av_log
1027 * - set by avcodec_alloc_context
1028 */
1029 const AVClass *av_class;
1030 /**
1031 * the average bitrate
1032 * - encoding: Set by user; unused for constant quantizer encoding.
1033 * - decoding: Set by libavcodec. 0 or some bitrate if this info is available in the stream.
1034 */
1035 int bit_rate;
1036
1037 /**
1038 * number of bits the bitstream is allowed to diverge from the reference.
1039 * the reference can be CBR (for CBR pass1) or VBR (for pass2)
1040 * - encoding: Set by user; unused for constant quantizer encoding.
1041 * - decoding: unused
1042 */
1043 int bit_rate_tolerance;
1044
1045 /**
1046 * CODEC_FLAG_*.
1047 * - encoding: Set by user.
1048 * - decoding: Set by user.
1049 */
1050 int flags;
1051
1052 /**
1053 * Some codecs need additional format info. It is stored here.
1054 * If any muxer uses this then ALL demuxers/parsers AND encoders for the
1055 * specific codec MUST set it correctly otherwise stream copy breaks.
1056 * In general use of this field by muxers is not recommanded.
1057 * - encoding: Set by libavcodec.
1058 * - decoding: Set by libavcodec. (FIXME: Is this OK?)
1059 */
1060 int sub_id;
1061
1062 /**
1063 * Motion estimation algorithm used for video coding.
1064 * 1 (zero), 2 (full), 3 (log), 4 (phods), 5 (epzs), 6 (x1), 7 (hex),
1065 * 8 (umh), 9 (iter), 10 (tesa) [7, 8, 10 are x264 specific, 9 is snow specific]
1066 * - encoding: MUST be set by user.
1067 * - decoding: unused
1068 */
1069 int me_method;
1070
1071 /**
1072 * some codecs need / can use extradata like Huffman tables.
1073 * mjpeg: Huffman tables
1074 * rv10: additional flags
1075 * mpeg4: global headers (they can be in the bitstream or here)
1076 * The allocated memory should be FF_INPUT_BUFFER_PADDING_SIZE bytes larger
1077 * than extradata_size to avoid prolems if it is read with the bitstream reader.
1078 * The bytewise contents of extradata must not depend on the architecture or CPU endianness.
1079 * - encoding: Set/allocated/freed by libavcodec.
1080 * - decoding: Set/allocated/freed by user.
1081 */
1082 uint8_t *extradata;
1083 int extradata_size;
1084
1085 /**
1086 * This is the fundamental unit of time (in seconds) in terms
1087 * of which frame timestamps are represented. For fixed-fps content,
1088 * timebase should be 1/framerate and timestamp increments should be
1089 * identically 1.
1090 * - encoding: MUST be set by user.
1091 * - decoding: Set by libavcodec.
1092 */
1093 AVRational time_base;
1094
1095 /* video only */
1096 /**
1097 * picture width / height.
1098 * - encoding: MUST be set by user.
1099 * - decoding: Set by libavcodec.
1100 * Note: For compatibility it is possible to set this instead of
1101 * coded_width/height before decoding.
1102 */
1103 int width, height;
1104
1105#define FF_ASPECT_EXTENDED 15
1106
1107 /**
1108 * the number of pictures in a group of pictures, or 0 for intra_only
1109 * - encoding: Set by user.
1110 * - decoding: unused
1111 */
1112 int gop_size;
1113
1114 /**
1115 * Pixel format, see PIX_FMT_xxx.
1116 * - encoding: Set by user.
1117 * - decoding: Set by libavcodec.
1118 */
1119 enum PixelFormat pix_fmt;
1120
1121 /**
1122 * Frame rate emulation. If not zero, the lower layer (i.e. format handler)
1123 * has to read frames at native frame rate.
1124 * - encoding: Set by user.
1125 * - decoding: unused
1126 */
1127 int rate_emu;
1128
1129 /**
1130 * If non NULL, 'draw_horiz_band' is called by the libavcodec
1131 * decoder to draw a horizontal band. It improves cache usage. Not
1132 * all codecs can do that. You must check the codec capabilities
1133 * beforehand.
1134 * The function is also used by hardware acceleration APIs.
1135 * It is called at least once during frame decoding to pass
1136 * the data needed for hardware render.
1137 * In that mode instead of pixel data, AVFrame points to
1138 * a structure specific to the acceleration API. The application
1139 * reads the structure and can change some fields to indicate progress
1140 * or mark state.
1141 * - encoding: unused
1142 * - decoding: Set by user.
1143 * @param height the height of the slice
1144 * @param y the y position of the slice
1145 * @param type 1->top field, 2->bottom field, 3->frame
1146 * @param offset offset into the AVFrame.data from which the slice should be read
1147 */
1148 void (*draw_horiz_band)(struct AVCodecContext *s,
1149 const AVFrame *src, int offset[4],
1150 int y, int type, int height);
1151
1152 /* audio only */
1153 int sample_rate; ///< samples per second
1154 int channels; ///< number of audio channels
1155
1156 /**
1157 * audio sample format
1158 * - encoding: Set by user.
1159 * - decoding: Set by libavcodec.
1160 */
1161 enum SampleFormat sample_fmt; ///< sample format
1162
1163 /* The following data should not be initialized. */
1164 /**
1165 * Samples per packet, initialized when calling 'init'.
1166 */
1167 int frame_size;
1168 int frame_number; ///< audio or video frame number
1169#if LIBAVCODEC_VERSION_MAJOR < 53
1170 int real_pict_num; ///< Returns the real picture number of previous encoded frame.
1171#endif
1172
1173 /**
1174 * Number of frames the decoded output will be delayed relative to
1175 * the encoded input.
1176 * - encoding: Set by libavcodec.
1177 * - decoding: unused
1178 */
1179 int delay;
1180
1181 /* - encoding parameters */
1182 float qcompress; ///< amount of qscale change between easy & hard scenes (0.0-1.0)
1183 float qblur; ///< amount of qscale smoothing over time (0.0-1.0)
1184
1185 /**
1186 * minimum quantizer
1187 * - encoding: Set by user.
1188 * - decoding: unused
1189 */
1190 int qmin;
1191
1192 /**
1193 * maximum quantizer
1194 * - encoding: Set by user.
1195 * - decoding: unused
1196 */
1197 int qmax;
1198
1199 /**
1200 * maximum quantizer difference between frames
1201 * - encoding: Set by user.
1202 * - decoding: unused
1203 */
1204 int max_qdiff;
1205
1206 /**
1207 * maximum number of B-frames between non-B-frames
1208 * Note: The output will be delayed by max_b_frames+1 relative to the input.
1209 * - encoding: Set by user.
1210 * - decoding: unused
1211 */
1212 int max_b_frames;
1213
1214 /**
1215 * qscale factor between IP and B-frames
1216 * If > 0 then the last P-frame quantizer will be used (q= lastp_q*factor+offset).
1217 * If < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset).
1218 * - encoding: Set by user.
1219 * - decoding: unused
1220 */
1221 float b_quant_factor;
1222
1223 /** obsolete FIXME remove */
1224 int rc_strategy;
1225#define FF_RC_STRATEGY_XVID 1
1226
1227 int b_frame_strategy;
1228
1229 /**
1230 * hurry up amount
1231 * - encoding: unused
1232 * - decoding: Set by user. 1-> Skip B-frames, 2-> Skip IDCT/dequant too, 5-> Skip everything except header
1233 * @deprecated Deprecated in favor of skip_idct and skip_frame.
1234 */
1235 int hurry_up;
1236
1237 struct AVCodec *codec;
1238
1239 void *priv_data;
1240
1241 int rtp_payload_size; /* The size of the RTP payload: the coder will */
1242 /* do its best to deliver a chunk with size */
1243 /* below rtp_payload_size, the chunk will start */
1244 /* with a start code on some codecs like H.263. */
1245 /* This doesn't take account of any particular */
1246 /* headers inside the transmitted RTP payload. */
1247
1248
1249 /* The RTP callback: This function is called */
1250 /* every time the encoder has a packet to send. */
1251 /* It depends on the encoder if the data starts */
1252 /* with a Start Code (it should). H.263 does. */
1253 /* mb_nb contains the number of macroblocks */
1254 /* encoded in the RTP payload. */
1255 void (*rtp_callback)(struct AVCodecContext *avctx, void *data, int size, int mb_nb);
1256
1257 /* statistics, used for 2-pass encoding */
1258 int mv_bits;
1259 int header_bits;
1260 int i_tex_bits;
1261 int p_tex_bits;
1262 int i_count;
1263 int p_count;
1264 int skip_count;
1265 int misc_bits;
1266
1267 /**
1268 * number of bits used for the previously encoded frame
1269 * - encoding: Set by libavcodec.
1270 * - decoding: unused
1271 */
1272 int frame_bits;
1273
1274 /**
1275 * Private data of the user, can be used to carry app specific stuff.
1276 * - encoding: Set by user.
1277 * - decoding: Set by user.
1278 */
1279 void *opaque;
1280
1281 char codec_name[32];
1282 enum AVMediaType codec_type; /* see AVMEDIA_TYPE_xxx */
1283 enum CodecID codec_id; /* see CODEC_ID_xxx */
1284
1285 /**
1286 * fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A').
1287 * This is used to work around some encoder bugs.
1288 * A demuxer should set this to what is stored in the field used to identify the codec.
1289 * If there are multiple such fields in a container then the demuxer should choose the one
1290 * which maximizes the information about the used codec.
1291 * If the codec tag field in a container is larger then 32 bits then the demuxer should
1292 * remap the longer ID to 32 bits with a table or other structure. Alternatively a new
1293 * extra_codec_tag + size could be added but for this a clear advantage must be demonstrated
1294 * first.
1295 * - encoding: Set by user, if not then the default based on codec_id will be used.
1296 * - decoding: Set by user, will be converted to uppercase by libavcodec during init.
1297 */
1298 unsigned int codec_tag;
1299
1300 /**
1301 * Work around bugs in encoders which sometimes cannot be detected automatically.
1302 * - encoding: Set by user
1303 * - decoding: Set by user
1304 */
1305 int workaround_bugs;
1306#define FF_BUG_AUTODETECT 1 ///< autodetection
1307#define FF_BUG_OLD_MSMPEG4 2
1308#define FF_BUG_XVID_ILACE 4
1309#define FF_BUG_UMP4 8
1310#define FF_BUG_NO_PADDING 16
1311#define FF_BUG_AMV 32
1312#define FF_BUG_AC_VLC 0 ///< Will be removed, libavcodec can now handle these non-compliant files by default.
1313#define FF_BUG_QPEL_CHROMA 64
1314#define FF_BUG_STD_QPEL 128
1315#define FF_BUG_QPEL_CHROMA2 256
1316#define FF_BUG_DIRECT_BLOCKSIZE 512
1317#define FF_BUG_EDGE 1024
1318#define FF_BUG_HPEL_CHROMA 2048
1319#define FF_BUG_DC_CLIP 4096
1320#define FF_BUG_MS 8192 ///< Work around various bugs in Microsoft's broken decoders.
1321#define FF_BUG_TRUNCATED 16384
1322//#define FF_BUG_FAKE_SCALABILITY 16 //Autodetection should work 100%.
1323
1324 /**
1325 * luma single coefficient elimination threshold
1326 * - encoding: Set by user.
1327 * - decoding: unused
1328 */
1329 int luma_elim_threshold;
1330
1331 /**
1332 * chroma single coeff elimination threshold
1333 * - encoding: Set by user.
1334 * - decoding: unused
1335 */
1336 int chroma_elim_threshold;
1337
1338 /**
1339 * strictly follow the standard (MPEG4, ...).
1340 * - encoding: Set by user.
1341 * - decoding: Set by user.
1342 * Setting this to STRICT or higher means the encoder and decoder will
1343 * generally do stupid things. While setting it to inofficial or lower
1344 * will mean the encoder might use things that are not supported by all
1345 * spec compliant decoders. Decoders make no difference between normal,
1346 * inofficial and experimental, that is they always try to decode things
1347 * when they can unless they are explicitly asked to behave stupid
1348 * (=strictly conform to the specs)
1349 */
1350 int strict_std_compliance;
1351#define FF_COMPLIANCE_VERY_STRICT 2 ///< Strictly conform to a older more strict version of the spec or reference software.
1352#define FF_COMPLIANCE_STRICT 1 ///< Strictly conform to all the things in the spec no matter what consequences.
1353#define FF_COMPLIANCE_NORMAL 0
1354#define FF_COMPLIANCE_INOFFICIAL -1 ///< Allow inofficial extensions.
1355#define FF_COMPLIANCE_EXPERIMENTAL -2 ///< Allow nonstandardized experimental things.
1356
1357 /**
1358 * qscale offset between IP and B-frames
1359 * - encoding: Set by user.
1360 * - decoding: unused
1361 */
1362 float b_quant_offset;
1363
1364 /**
1365 * Error recognization; higher values will detect more errors but may
1366 * misdetect some more or less valid parts as errors.
1367 * - encoding: unused
1368 * - decoding: Set by user.
1369 */
1370 int error_recognition;
1371#define FF_ER_CAREFUL 1
1372#define FF_ER_COMPLIANT 2
1373#define FF_ER_AGGRESSIVE 3
1374#define FF_ER_VERY_AGGRESSIVE 4
1375
1376 /**
1377 * Called at the beginning of each frame to get a buffer for it.
1378 * If pic.reference is set then the frame will be read later by libavcodec.
1379 * avcodec_align_dimensions2() should be used to find the required width and
1380 * height, as they normally need to be rounded up to the next multiple of 16.
1381 * if CODEC_CAP_DR1 is not set then get_buffer() must call
1382 * avcodec_default_get_buffer() instead of providing buffers allocated by
1383 * some other means.
1384 * - encoding: unused
1385 * - decoding: Set by libavcodec., user can override.
1386 */
1387 int (*get_buffer)(struct AVCodecContext *c, AVFrame *pic);
1388
1389 /**
1390 * Called to release buffers which were allocated with get_buffer.
1391 * A released buffer can be reused in get_buffer().
1392 * pic.data[*] must be set to NULL.
1393 * - encoding: unused
1394 * - decoding: Set by libavcodec., user can override.
1395 */
1396 void (*release_buffer)(struct AVCodecContext *c, AVFrame *pic);
1397
1398 /**
1399 * Size of the frame reordering buffer in the decoder.
1400 * For MPEG-2 it is 1 IPB or 0 low delay IP.
1401 * - encoding: Set by libavcodec.
1402 * - decoding: Set by libavcodec.
1403 */
1404 int has_b_frames;
1405
1406 /**
1407 * number of bytes per packet if constant and known or 0
1408 * Used by some WAV based audio codecs.
1409 */
1410 int block_align;
1411
1412 int parse_only; /* - decoding only: If true, only parsing is done
1413 (function avcodec_parse_frame()). The frame
1414 data is returned. Only MPEG codecs support this now. */
1415
1416 /**
1417 * 0-> h263 quant 1-> mpeg quant
1418 * - encoding: Set by user.
1419 * - decoding: unused
1420 */
1421 int mpeg_quant;
1422
1423 /**
1424 * pass1 encoding statistics output buffer
1425 * - encoding: Set by libavcodec.
1426 * - decoding: unused
1427 */
1428 char *stats_out;
1429
1430 /**
1431 * pass2 encoding statistics input buffer
1432 * Concatenated stuff from stats_out of pass1 should be placed here.
1433 * - encoding: Allocated/set/freed by user.
1434 * - decoding: unused
1435 */
1436 char *stats_in;
1437
1438 /**
1439 * ratecontrol qmin qmax limiting method
1440 * 0-> clipping, 1-> use a nice continous function to limit qscale wthin qmin/qmax.
1441 * - encoding: Set by user.
1442 * - decoding: unused
1443 */
1444 float rc_qsquish;
1445
1446 float rc_qmod_amp;
1447 int rc_qmod_freq;
1448
1449 /**
1450 * ratecontrol override, see RcOverride
1451 * - encoding: Allocated/set/freed by user.
1452 * - decoding: unused
1453 */
1454 RcOverride *rc_override;
1455 int rc_override_count;
1456
1457 /**
1458 * rate control equation
1459 * - encoding: Set by user
1460 * - decoding: unused
1461 */
1462 const char *rc_eq;
1463
1464 /**
1465 * maximum bitrate
1466 * - encoding: Set by user.
1467 * - decoding: unused
1468 */
1469 int rc_max_rate;
1470
1471 /**
1472 * minimum bitrate
1473 * - encoding: Set by user.
1474 * - decoding: unused
1475 */
1476 int rc_min_rate;
1477
1478 /**
1479 * decoder bitstream buffer size
1480 * - encoding: Set by user.
1481 * - decoding: unused
1482 */
1483 int rc_buffer_size;
1484 float rc_buffer_aggressivity;
1485
1486 /**
1487 * qscale factor between P and I-frames
1488 * If > 0 then the last p frame quantizer will be used (q= lastp_q*factor+offset).
1489 * If < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset).
1490 * - encoding: Set by user.
1491 * - decoding: unused
1492 */
1493 float i_quant_factor;
1494
1495 /**
1496 * qscale offset between P and I-frames
1497 * - encoding: Set by user.
1498 * - decoding: unused
1499 */
1500 float i_quant_offset;
1501
1502 /**
1503 * initial complexity for pass1 ratecontrol
1504 * - encoding: Set by user.
1505 * - decoding: unused
1506 */
1507 float rc_initial_cplx;
1508
1509 /**
1510 * DCT algorithm, see FF_DCT_* below
1511 * - encoding: Set by user.
1512 * - decoding: unused
1513 */
1514 int dct_algo;
1515#define FF_DCT_AUTO 0
1516#define FF_DCT_FASTINT 1
1517#define FF_DCT_INT 2
1518#define FF_DCT_MMX 3
1519#define FF_DCT_MLIB 4
1520#define FF_DCT_ALTIVEC 5
1521#define FF_DCT_FAAN 6
1522
1523 /**
1524 * luminance masking (0-> disabled)
1525 * - encoding: Set by user.
1526 * - decoding: unused
1527 */
1528 float lumi_masking;
1529
1530 /**
1531 * temporary complexity masking (0-> disabled)
1532 * - encoding: Set by user.
1533 * - decoding: unused
1534 */
1535 float temporal_cplx_masking;
1536
1537 /**
1538 * spatial complexity masking (0-> disabled)
1539 * - encoding: Set by user.
1540 * - decoding: unused
1541 */
1542 float spatial_cplx_masking;
1543
1544 /**
1545 * p block masking (0-> disabled)
1546 * - encoding: Set by user.
1547 * - decoding: unused
1548 */
1549 float p_masking;
1550
1551 /**
1552 * darkness masking (0-> disabled)
1553 * - encoding: Set by user.
1554 * - decoding: unused
1555 */
1556 float dark_masking;
1557
1558 /**
1559 * IDCT algorithm, see FF_IDCT_* below.
1560 * - encoding: Set by user.
1561 * - decoding: Set by user.
1562 */
1563 int idct_algo;
1564#define FF_IDCT_AUTO 0
1565#define FF_IDCT_INT 1
1566#define FF_IDCT_SIMPLE 2
1567#define FF_IDCT_SIMPLEMMX 3
1568#define FF_IDCT_LIBMPEG2MMX 4
1569#define FF_IDCT_PS2 5
1570#define FF_IDCT_MLIB 6
1571#define FF_IDCT_ARM 7
1572#define FF_IDCT_ALTIVEC 8
1573#define FF_IDCT_SH4 9
1574#define FF_IDCT_SIMPLEARM 10
1575#define FF_IDCT_H264 11
1576#define FF_IDCT_VP3 12
1577#define FF_IDCT_IPP 13
1578#define FF_IDCT_XVIDMMX 14
1579#define FF_IDCT_CAVS 15
1580#define FF_IDCT_SIMPLEARMV5TE 16
1581#define FF_IDCT_SIMPLEARMV6 17
1582#define FF_IDCT_SIMPLEVIS 18
1583#define FF_IDCT_WMV2 19
1584#define FF_IDCT_FAAN 20
1585#define FF_IDCT_EA 21
1586#define FF_IDCT_SIMPLENEON 22
1587#define FF_IDCT_SIMPLEALPHA 23
1588#define FF_IDCT_BINK 24
1589
1590 /**
1591 * slice count
1592 * - encoding: Set by libavcodec.
1593 * - decoding: Set by user (or 0).
1594 */
1595 int slice_count;
1596 /**
1597 * slice offsets in the frame in bytes
1598 * - encoding: Set/allocated by libavcodec.
1599 * - decoding: Set/allocated by user (or NULL).
1600 */
1601 int *slice_offset;
1602
1603 /**
1604 * error concealment flags
1605 * - encoding: unused
1606 * - decoding: Set by user.
1607 */
1608 int error_concealment;
1609#define FF_EC_GUESS_MVS 1
1610#define FF_EC_DEBLOCK 2
1611
1612 /**
1613 * dsp_mask could be add used to disable unwanted CPU features
1614 * CPU features (i.e. MMX, SSE. ...)
1615 *
1616 * With the FORCE flag you may instead enable given CPU features.
1617 * (Dangerous: Usable in case of misdetection, improper usage however will
1618 * result into program crash.)
1619 */
1620 unsigned dsp_mask;
1621#define FF_MM_FORCE 0x80000000 /* Force usage of selected flags (OR) */
1622 /* lower 16 bits - CPU features */
1623#define FF_MM_MMX 0x0001 ///< standard MMX
1624#define FF_MM_3DNOW 0x0004 ///< AMD 3DNOW
1625#if LIBAVCODEC_VERSION_MAJOR < 53
1626#define FF_MM_MMXEXT 0x0002 ///< SSE integer functions or AMD MMX ext
1627#endif
1628#define FF_MM_MMX2 0x0002 ///< SSE integer functions or AMD MMX ext
1629#define FF_MM_SSE 0x0008 ///< SSE functions
1630#define FF_MM_SSE2 0x0010 ///< PIV SSE2 functions
1631#define FF_MM_3DNOWEXT 0x0020 ///< AMD 3DNowExt
1632#define FF_MM_SSE3 0x0040 ///< Prescott SSE3 functions
1633#define FF_MM_SSSE3 0x0080 ///< Conroe SSSE3 functions
1634#define FF_MM_SSE4 0x0100 ///< Penryn SSE4.1 functions
1635#define FF_MM_SSE42 0x0200 ///< Nehalem SSE4.2 functions
1636#define FF_MM_IWMMXT 0x0100 ///< XScale IWMMXT
1637#define FF_MM_ALTIVEC 0x0001 ///< standard AltiVec
1638
1639 /**
1640 * bits per sample/pixel from the demuxer (needed for huffyuv).
1641 * - encoding: Set by libavcodec.
1642 * - decoding: Set by user.
1643 */
1644 int bits_per_coded_sample;
1645
1646 /**
1647 * prediction method (needed for huffyuv)
1648 * - encoding: Set by user.
1649 * - decoding: unused
1650 */
1651 int prediction_method;
1652#define FF_PRED_LEFT 0
1653#define FF_PRED_PLANE 1
1654#define FF_PRED_MEDIAN 2
1655
1656 /**
1657 * sample aspect ratio (0 if unknown)
1658 * That is the width of a pixel divided by the height of the pixel.
1659 * Numerator and denominator must be relatively prime and smaller than 256 for some video standards.
1660 * - encoding: Set by user.
1661 * - decoding: Set by libavcodec.
1662 */
1663 AVRational sample_aspect_ratio;
1664
1665 /**
1666 * the picture in the bitstream
1667 * - encoding: Set by libavcodec.
1668 * - decoding: Set by libavcodec.
1669 */
1670 AVFrame *coded_frame;
1671
1672 /**
1673 * debug
1674 * - encoding: Set by user.
1675 * - decoding: Set by user.
1676 */
1677 int debug;
1678#define FF_DEBUG_PICT_INFO 1
1679#define FF_DEBUG_RC 2
1680#define FF_DEBUG_BITSTREAM 4
1681#define FF_DEBUG_MB_TYPE 8
1682#define FF_DEBUG_QP 16
1683#define FF_DEBUG_MV 32
1684#define FF_DEBUG_DCT_COEFF 0x00000040
1685#define FF_DEBUG_SKIP 0x00000080
1686#define FF_DEBUG_STARTCODE 0x00000100
1687#define FF_DEBUG_PTS 0x00000200
1688#define FF_DEBUG_ER 0x00000400
1689#define FF_DEBUG_MMCO 0x00000800
1690#define FF_DEBUG_BUGS 0x00001000
1691#define FF_DEBUG_VIS_QP 0x00002000
1692#define FF_DEBUG_VIS_MB_TYPE 0x00004000
1693#define FF_DEBUG_BUFFERS 0x00008000
1694
1695 /**
1696 * debug
1697 * - encoding: Set by user.
1698 * - decoding: Set by user.
1699 */
1700 int debug_mv;
1701#define FF_DEBUG_VIS_MV_P_FOR 0x00000001 //visualize forward predicted MVs of P frames
1702#define FF_DEBUG_VIS_MV_B_FOR 0x00000002 //visualize forward predicted MVs of B frames
1703#define FF_DEBUG_VIS_MV_B_BACK 0x00000004 //visualize backward predicted MVs of B frames
1704
1705 /**
1706 * error
1707 * - encoding: Set by libavcodec if flags&CODEC_FLAG_PSNR.
1708 * - decoding: unused
1709 */
1710 uint64_t error[4];
1711
1712 /**
1713 * minimum MB quantizer
1714 * - encoding: unused
1715 * - decoding: unused
1716 */
1717 int mb_qmin;
1718
1719 /**
1720 * maximum MB quantizer
1721 * - encoding: unused
1722 * - decoding: unused
1723 */
1724 int mb_qmax;
1725
1726 /**
1727 * motion estimation comparison function
1728 * - encoding: Set by user.
1729 * - decoding: unused
1730 */
1731 int me_cmp;
1732 /**
1733 * subpixel motion estimation comparison function
1734 * - encoding: Set by user.
1735 * - decoding: unused
1736 */
1737 int me_sub_cmp;
1738 /**
1739 * macroblock comparison function (not supported yet)
1740 * - encoding: Set by user.
1741 * - decoding: unused
1742 */
1743 int mb_cmp;
1744 /**
1745 * interlaced DCT comparison function
1746 * - encoding: Set by user.
1747 * - decoding: unused
1748 */
1749 int ildct_cmp;
1750#define FF_CMP_SAD 0
1751#define FF_CMP_SSE 1
1752#define FF_CMP_SATD 2
1753#define FF_CMP_DCT 3
1754#define FF_CMP_PSNR 4
1755#define FF_CMP_BIT 5
1756#define FF_CMP_RD 6
1757#define FF_CMP_ZERO 7
1758#define FF_CMP_VSAD 8
1759#define FF_CMP_VSSE 9
1760#define FF_CMP_NSSE 10
1761#define FF_CMP_W53 11
1762#define FF_CMP_W97 12
1763#define FF_CMP_DCTMAX 13
1764#define FF_CMP_DCT264 14
1765#define FF_CMP_CHROMA 256
1766
1767 /**
1768 * ME diamond size & shape
1769 * - encoding: Set by user.
1770 * - decoding: unused
1771 */
1772 int dia_size;
1773
1774 /**
1775 * amount of previous MV predictors (2a+1 x 2a+1 square)
1776 * - encoding: Set by user.
1777 * - decoding: unused
1778 */
1779 int last_predictor_count;
1780
1781 /**
1782 * prepass for motion estimation
1783 * - encoding: Set by user.
1784 * - decoding: unused
1785 */
1786 int pre_me;
1787
1788 /**
1789 * motion estimation prepass comparison function
1790 * - encoding: Set by user.
1791 * - decoding: unused
1792 */
1793 int me_pre_cmp;
1794
1795 /**
1796 * ME prepass diamond size & shape
1797 * - encoding: Set by user.
1798 * - decoding: unused
1799 */
1800 int pre_dia_size;
1801
1802 /**
1803 * subpel ME quality
1804 * - encoding: Set by user.
1805 * - decoding: unused
1806 */
1807 int me_subpel_quality;
1808
1809 /**
1810 * callback to negotiate the pixelFormat
1811 * @param fmt is the list of formats which are supported by the codec,
1812 * it is terminated by -1 as 0 is a valid format, the formats are ordered by quality.
1813 * The first is always the native one.
1814 * @return the chosen format
1815 * - encoding: unused
1816 * - decoding: Set by user, if not set the native format will be chosen.
1817 */
1818 enum PixelFormat (*get_format)(struct AVCodecContext *s, const enum PixelFormat * fmt);
1819
1820 /**
1821 * DTG active format information (additional aspect ratio
1822 * information only used in DVB MPEG-2 transport streams)
1823 * 0 if not set.
1824 *
1825 * - encoding: unused
1826 * - decoding: Set by decoder.
1827 */
1828 int dtg_active_format;
1829#define FF_DTG_AFD_SAME 8
1830#define FF_DTG_AFD_4_3 9
1831#define FF_DTG_AFD_16_9 10
1832#define FF_DTG_AFD_14_9 11
1833#define FF_DTG_AFD_4_3_SP_14_9 13
1834#define FF_DTG_AFD_16_9_SP_14_9 14
1835#define FF_DTG_AFD_SP_4_3 15
1836
1837 /**
1838 * maximum motion estimation search range in subpel units
1839 * If 0 then no limit.
1840 *
1841 * - encoding: Set by user.
1842 * - decoding: unused
1843 */
1844 int me_range;
1845
1846 /**
1847 * intra quantizer bias
1848 * - encoding: Set by user.
1849 * - decoding: unused
1850 */
1851 int intra_quant_bias;
1852#define FF_DEFAULT_QUANT_BIAS 999999
1853
1854 /**
1855 * inter quantizer bias
1856 * - encoding: Set by user.
1857 * - decoding: unused
1858 */
1859 int inter_quant_bias;
1860
1861 /**
1862 * color table ID
1863 * - encoding: unused
1864 * - decoding: Which clrtable should be used for 8bit RGB images.
1865 * Tables have to be stored somewhere. FIXME
1866 */
1867 int color_table_id;
1868
1869 /**
1870 * internal_buffer count
1871 * Don't touch, used by libavcodec default_get_buffer().
1872 */
1873 int internal_buffer_count;
1874
1875 /**
1876 * internal_buffers
1877 * Don't touch, used by libavcodec default_get_buffer().
1878 */
1879 void *internal_buffer;
1880
1881#define FF_LAMBDA_SHIFT 7
1882#define FF_LAMBDA_SCALE (1<<FF_LAMBDA_SHIFT)
1883#define FF_QP2LAMBDA 118 ///< factor to convert from H.263 QP to lambda
1884#define FF_LAMBDA_MAX (256*128-1)
1885
1886#define FF_QUALITY_SCALE FF_LAMBDA_SCALE //FIXME maybe remove
1887 /**
1888 * Global quality for codecs which cannot change it per frame.
1889 * This should be proportional to MPEG-1/2/4 qscale.
1890 * - encoding: Set by user.
1891 * - decoding: unused
1892 */
1893 int global_quality;
1894
1895#define FF_CODER_TYPE_VLC 0
1896#define FF_CODER_TYPE_AC 1
1897#define FF_CODER_TYPE_RAW 2
1898#define FF_CODER_TYPE_RLE 3
1899#define FF_CODER_TYPE_DEFLATE 4
1900 /**
1901 * coder type
1902 * - encoding: Set by user.
1903 * - decoding: unused
1904 */
1905 int coder_type;
1906
1907 /**
1908 * context model
1909 * - encoding: Set by user.
1910 * - decoding: unused
1911 */
1912 int context_model;
1913#if 0
1914 /**
1915 *
1916 * - encoding: unused
1917 * - decoding: Set by user.
1918 */
1919 uint8_t * (*realloc)(struct AVCodecContext *s, uint8_t *buf, int buf_size);
1920#endif
1921
1922 /**
1923 * slice flags
1924 * - encoding: unused
1925 * - decoding: Set by user.
1926 */
1927 int slice_flags;
1928#define SLICE_FLAG_CODED_ORDER 0x0001 ///< draw_horiz_band() is called in coded order instead of display
1929#define SLICE_FLAG_ALLOW_FIELD 0x0002 ///< allow draw_horiz_band() with field slices (MPEG2 field pics)
1930#define SLICE_FLAG_ALLOW_PLANE 0x0004 ///< allow draw_horiz_band() with 1 component at a time (SVQ1)
1931
1932 /**
1933 * XVideo Motion Acceleration
1934 * - encoding: forbidden
1935 * - decoding: set by decoder
1936 */
1937 int xvmc_acceleration;
1938
1939 /**
1940 * macroblock decision mode
1941 * - encoding: Set by user.
1942 * - decoding: unused
1943 */
1944 int mb_decision;
1945#define FF_MB_DECISION_SIMPLE 0 ///< uses mb_cmp
1946#define FF_MB_DECISION_BITS 1 ///< chooses the one which needs the fewest bits
1947#define FF_MB_DECISION_RD 2 ///< rate distortion
1948
1949 /**
1950 * custom intra quantization matrix
1951 * - encoding: Set by user, can be NULL.
1952 * - decoding: Set by libavcodec.
1953 */
1954 uint16_t *intra_matrix;
1955
1956 /**
1957 * custom inter quantization matrix
1958 * - encoding: Set by user, can be NULL.
1959 * - decoding: Set by libavcodec.
1960 */
1961 uint16_t *inter_matrix;
1962
1963 /**
1964 * fourcc from the AVI stream header (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A').
1965 * This is used to work around some encoder bugs.
1966 * - encoding: unused
1967 * - decoding: Set by user, will be converted to uppercase by libavcodec during init.
1968 */
1969 unsigned int stream_codec_tag;
1970
1971 /**
1972 * scene change detection threshold
1973 * 0 is default, larger means fewer detected scene changes.
1974 * - encoding: Set by user.
1975 * - decoding: unused
1976 */
1977 int scenechange_threshold;
1978
1979 /**
1980 * minimum Lagrange multipler
1981 * - encoding: Set by user.
1982 * - decoding: unused
1983 */
1984 int lmin;
1985
1986 /**
1987 * maximum Lagrange multipler
1988 * - encoding: Set by user.
1989 * - decoding: unused
1990 */
1991 int lmax;
1992
1993 /**
1994 * palette control structure
1995 * - encoding: ??? (no palette-enabled encoder yet)
1996 * - decoding: Set by user.
1997 */
1998 struct AVPaletteControl *palctrl;
1999
2000 /**
2001 * noise reduction strength
2002 * - encoding: Set by user.
2003 * - decoding: unused
2004 */
2005 int noise_reduction;
2006
2007 /**
2008 * Called at the beginning of a frame to get cr buffer for it.
2009 * Buffer type (size, hints) must be the same. libavcodec won't check it.
2010 * libavcodec will pass previous buffer in pic, function should return
2011 * same buffer or new buffer with old frame "painted" into it.
2012 * If pic.data[0] == NULL must behave like get_buffer().
2013 * if CODEC_CAP_DR1 is not set then reget_buffer() must call
2014 * avcodec_default_reget_buffer() instead of providing buffers allocated by
2015 * some other means.
2016 * - encoding: unused
2017 * - decoding: Set by libavcodec., user can override
2018 */
2019 int (*reget_buffer)(struct AVCodecContext *c, AVFrame *pic);
2020
2021 /**
2022 * Number of bits which should be loaded into the rc buffer before decoding starts.
2023 * - encoding: Set by user.
2024 * - decoding: unused
2025 */
2026 int rc_initial_buffer_occupancy;
2027
2028 /**
2029 *
2030 * - encoding: Set by user.
2031 * - decoding: unused
2032 */
2033 int inter_threshold;
2034
2035 /**
2036 * CODEC_FLAG2_*
2037 * - encoding: Set by user.
2038 * - decoding: Set by user.
2039 */
2040 int flags2;
2041
2042 /**
2043 * Simulates errors in the bitstream to test error concealment.
2044 * - encoding: Set by user.
2045 * - decoding: unused
2046 */
2047 int error_rate;
2048
2049 /**
2050 * MP3 antialias algorithm, see FF_AA_* below.
2051 * - encoding: unused
2052 * - decoding: Set by user.
2053 */
2054 int antialias_algo;
2055#define FF_AA_AUTO 0
2056#define FF_AA_FASTINT 1 //not implemented yet
2057#define FF_AA_INT 2
2058#define FF_AA_FLOAT 3
2059 /**
2060 * quantizer noise shaping
2061 * - encoding: Set by user.
2062 * - decoding: unused
2063 */
2064 int quantizer_noise_shaping;
2065
2066 /**
2067 * thread count
2068 * is used to decide how many independent tasks should be passed to execute()
2069 * - encoding: Set by user.
2070 * - decoding: Set by user.
2071 */
2072 int thread_count;
2073
2074 /**
2075 * The codec may call this to execute several independent things.
2076 * It will return only after finishing all tasks.
2077 * The user may replace this with some multithreaded implementation,
2078 * the default implementation will execute the parts serially.
2079 * @param count the number of things to execute
2080 * - encoding: Set by libavcodec, user can override.
2081 * - decoding: Set by libavcodec, user can override.
2082 */
2083 int (*execute)(struct AVCodecContext *c, int (*func)(struct AVCodecContext *c2, void *arg), void *arg2, int *ret, int count, int size);
2084
2085 /**
2086 * thread opaque
2087 * Can be used by execute() to store some per AVCodecContext stuff.
2088 * - encoding: set by execute()
2089 * - decoding: set by execute()
2090 */
2091 void *thread_opaque;
2092
2093 /**
2094 * Motion estimation threshold below which no motion estimation is
2095 * performed, but instead the user specified motion vectors are used.
2096 *
2097 * - encoding: Set by user.
2098 * - decoding: unused
2099 */
2100 int me_threshold;
2101
2102 /**
2103 * Macroblock threshold below which the user specified macroblock types will be used.
2104 * - encoding: Set by user.
2105 * - decoding: unused
2106 */
2107 int mb_threshold;
2108
2109 /**
2110 * precision of the intra DC coefficient - 8
2111 * - encoding: Set by user.
2112 * - decoding: unused
2113 */
2114 int intra_dc_precision;
2115
2116 /**
2117 * noise vs. sse weight for the nsse comparsion function
2118 * - encoding: Set by user.
2119 * - decoding: unused
2120 */
2121 int nsse_weight;
2122
2123 /**
2124 * Number of macroblock rows at the top which are skipped.
2125 * - encoding: unused
2126 * - decoding: Set by user.
2127 */
2128 int skip_top;
2129
2130 /**
2131 * Number of macroblock rows at the bottom which are skipped.
2132 * - encoding: unused
2133 * - decoding: Set by user.
2134 */
2135 int skip_bottom;
2136
2137 /**
2138 * profile
2139 * - encoding: Set by user.
2140 * - decoding: Set by libavcodec.
2141 */
2142 int profile;
2143#define FF_PROFILE_UNKNOWN -99
2144
2145#define FF_PROFILE_AAC_MAIN 0
2146#define FF_PROFILE_AAC_LOW 1
2147#define FF_PROFILE_AAC_SSR 2
2148#define FF_PROFILE_AAC_LTP 3
2149
2150#define FF_PROFILE_H264_BASELINE 66
2151#define FF_PROFILE_H264_MAIN 77
2152#define FF_PROFILE_H264_EXTENDED 88
2153#define FF_PROFILE_H264_HIGH 100
2154#define FF_PROFILE_H264_HIGH_10 110
2155#define FF_PROFILE_H264_HIGH_422 122
2156#define FF_PROFILE_H264_HIGH_444 244
2157#define FF_PROFILE_H264_CAVLC_444 44
2158
2159 /**
2160 * level
2161 * - encoding: Set by user.
2162 * - decoding: Set by libavcodec.
2163 */
2164 int level;
2165#define FF_LEVEL_UNKNOWN -99
2166
2167 /**
2168 * low resolution decoding, 1-> 1/2 size, 2->1/4 size
2169 * - encoding: unused
2170 * - decoding: Set by user.
2171 */
2172 int lowres;
2173
2174 /**
2175 * Bitstream width / height, may be different from width/height if lowres
2176 * or other things are used.
2177 * - encoding: unused
2178 * - decoding: Set by user before init if known. Codec should override / dynamically change if needed.
2179 */
2180 int coded_width, coded_height;
2181
2182 /**
2183 * frame skip threshold
2184 * - encoding: Set by user.
2185 * - decoding: unused
2186 */
2187 int frame_skip_threshold;
2188
2189 /**
2190 * frame skip factor
2191 * - encoding: Set by user.
2192 * - decoding: unused
2193 */
2194 int frame_skip_factor;
2195
2196 /**
2197 * frame skip exponent
2198 * - encoding: Set by user.
2199 * - decoding: unused
2200 */
2201 int frame_skip_exp;
2202
2203 /**
2204 * frame skip comparison function
2205 * - encoding: Set by user.
2206 * - decoding: unused
2207 */
2208 int frame_skip_cmp;
2209
2210 /**
2211 * Border processing masking, raises the quantizer for mbs on the borders
2212 * of the picture.
2213 * - encoding: Set by user.
2214 * - decoding: unused
2215 */
2216 float border_masking;
2217
2218 /**
2219 * minimum MB lagrange multipler
2220 * - encoding: Set by user.
2221 * - decoding: unused
2222 */
2223 int mb_lmin;
2224
2225 /**
2226 * maximum MB lagrange multipler
2227 * - encoding: Set by user.
2228 * - decoding: unused
2229 */
2230 int mb_lmax;
2231
2232 /**
2233 *
2234 * - encoding: Set by user.
2235 * - decoding: unused
2236 */
2237 int me_penalty_compensation;
2238
2239 /**
2240 *
2241 * - encoding: unused
2242 * - decoding: Set by user.
2243 */
2244 enum AVDiscard skip_loop_filter;
2245
2246 /**
2247 *
2248 * - encoding: unused
2249 * - decoding: Set by user.
2250 */
2251 enum AVDiscard skip_idct;
2252
2253 /**
2254 *
2255 * - encoding: unused
2256 * - decoding: Set by user.
2257 */
2258 enum AVDiscard skip_frame;
2259
2260 /**
2261 *
2262 * - encoding: Set by user.
2263 * - decoding: unused
2264 */
2265 int bidir_refine;
2266
2267 /**
2268 *
2269 * - encoding: Set by user.
2270 * - decoding: unused
2271 */
2272 int brd_scale;
2273
2274 /**
2275 * constant rate factor - quality-based VBR - values ~correspond to qps
2276 * - encoding: Set by user.
2277 * - decoding: unused
2278 */
2279 float crf;
2280
2281 /**
2282 * constant quantization parameter rate control method
2283 * - encoding: Set by user.
2284 * - decoding: unused
2285 */
2286 int cqp;
2287
2288 /**
2289 * minimum GOP size
2290 * - encoding: Set by user.
2291 * - decoding: unused
2292 */
2293 int keyint_min;
2294
2295 /**
2296 * number of reference frames
2297 * - encoding: Set by user.
2298 * - decoding: Set by lavc.
2299 */
2300 int refs;
2301
2302 /**
2303 * chroma qp offset from luma
2304 * - encoding: Set by user.
2305 * - decoding: unused
2306 */
2307 int chromaoffset;
2308
2309 /**
2310 * Influences how often B-frames are used.
2311 * - encoding: Set by user.
2312 * - decoding: unused
2313 */
2314 int bframebias;
2315
2316 /**
2317 * trellis RD quantization
2318 * - encoding: Set by user.
2319 * - decoding: unused
2320 */
2321 int trellis;
2322
2323 /**
2324 * Reduce fluctuations in qp (before curve compression).
2325 * - encoding: Set by user.
2326 * - decoding: unused
2327 */
2328 float complexityblur;
2329
2330 /**
2331 * in-loop deblocking filter alphac0 parameter
2332 * alpha is in the range -6...6
2333 * - encoding: Set by user.
2334 * - decoding: unused
2335 */
2336 int deblockalpha;
2337
2338 /**
2339 * in-loop deblocking filter beta parameter
2340 * beta is in the range -6...6
2341 * - encoding: Set by user.
2342 * - decoding: unused
2343 */
2344 int deblockbeta;
2345
2346 /**
2347 * macroblock subpartition sizes to consider - p8x8, p4x4, b8x8, i8x8, i4x4
2348 * - encoding: Set by user.
2349 * - decoding: unused
2350 */
2351 int partitions;
2352#define X264_PART_I4X4 0x001 /* Analyze i4x4 */
2353#define X264_PART_I8X8 0x002 /* Analyze i8x8 (requires 8x8 transform) */
2354#define X264_PART_P8X8 0x010 /* Analyze p16x8, p8x16 and p8x8 */
2355#define X264_PART_P4X4 0x020 /* Analyze p8x4, p4x8, p4x4 */
2356#define X264_PART_B8X8 0x100 /* Analyze b16x8, b8x16 and b8x8 */
2357
2358 /**
2359 * direct MV prediction mode - 0 (none), 1 (spatial), 2 (temporal), 3 (auto)
2360 * - encoding: Set by user.
2361 * - decoding: unused
2362 */
2363 int directpred;
2364
2365 /**
2366 * Audio cutoff bandwidth (0 means "automatic")
2367 * - encoding: Set by user.
2368 * - decoding: unused
2369 */
2370 int cutoff;
2371
2372 /**
2373 * Multiplied by qscale for each frame and added to scene_change_score.
2374 * - encoding: Set by user.
2375 * - decoding: unused
2376 */
2377 int scenechange_factor;
2378
2379 /**
2380 *
2381 * Note: Value depends upon the compare function used for fullpel ME.
2382 * - encoding: Set by user.
2383 * - decoding: unused
2384 */
2385 int mv0_threshold;
2386
2387 /**
2388 * Adjusts sensitivity of b_frame_strategy 1.
2389 * - encoding: Set by user.
2390 * - decoding: unused
2391 */
2392 int b_sensitivity;
2393
2394 /**
2395 * - encoding: Set by user.
2396 * - decoding: unused
2397 */
2398 int compression_level;
2399#define FF_COMPRESSION_DEFAULT -1
2400
2401 /**
2402 * Sets whether to use LPC mode - used by FLAC encoder.
2403 * - encoding: Set by user.
2404 * - decoding: unused
2405 */
2406 int use_lpc;
2407
2408 /**
2409 * LPC coefficient precision - used by FLAC encoder
2410 * - encoding: Set by user.
2411 * - decoding: unused
2412 */
2413 int lpc_coeff_precision;
2414
2415 /**
2416 * - encoding: Set by user.
2417 * - decoding: unused
2418 */
2419 int min_prediction_order;
2420
2421 /**
2422 * - encoding: Set by user.
2423 * - decoding: unused
2424 */
2425 int max_prediction_order;
2426
2427 /**
2428 * search method for selecting prediction order
2429 * - encoding: Set by user.
2430 * - decoding: unused
2431 */
2432 int prediction_order_method;
2433
2434 /**
2435 * - encoding: Set by user.
2436 * - decoding: unused
2437 */
2438 int min_partition_order;
2439
2440 /**
2441 * - encoding: Set by user.
2442 * - decoding: unused
2443 */
2444 int max_partition_order;
2445
2446 /**
2447 * GOP timecode frame start number, in non drop frame format
2448 * - encoding: Set by user.
2449 * - decoding: unused
2450 */
2451 int64_t timecode_frame_start;
2452
2453#if LIBAVCODEC_VERSION_MAJOR < 53
2454 /**
2455 * Decoder should decode to this many channels if it can (0 for default)
2456 * - encoding: unused
2457 * - decoding: Set by user.
2458 * @deprecated Deprecated in favor of request_channel_layout.
2459 */
2460 int request_channels;
2461#endif
2462
2463 /**
2464 * Percentage of dynamic range compression to be applied by the decoder.
2465 * The default value is 1.0, corresponding to full compression.
2466 * - encoding: unused
2467 * - decoding: Set by user.
2468 */
2469 float drc_scale;
2470
2471 /**
2472 * opaque 64bit number (generally a PTS) that will be reordered and
2473 * output in AVFrame.reordered_opaque
2474 * - encoding: unused
2475 * - decoding: Set by user.
2476 */
2477 int64_t reordered_opaque;
2478
2479 /**
2480 * Bits per sample/pixel of internal libavcodec pixel/sample format.
2481 * This field is applicable only when sample_fmt is SAMPLE_FMT_S32.
2482 * - encoding: set by user.
2483 * - decoding: set by libavcodec.
2484 */
2485 int bits_per_raw_sample;
2486
2487 /**
2488 * Audio channel layout.
2489 * - encoding: set by user.
2490 * - decoding: set by libavcodec.
2491 */
2492 int64_t channel_layout;
2493
2494 /**
2495 * Request decoder to use this channel layout if it can (0 for default)
2496 * - encoding: unused
2497 * - decoding: Set by user.
2498 */
2499 int64_t request_channel_layout;
2500
2501 /**
2502 * Ratecontrol attempt to use, at maximum, <value> of what can be used without an underflow.
2503 * - encoding: Set by user.
2504 * - decoding: unused.
2505 */
2506 float rc_max_available_vbv_use;
2507
2508 /**
2509 * Ratecontrol attempt to use, at least, <value> times the amount needed to prevent a vbv overflow.
2510 * - encoding: Set by user.
2511 * - decoding: unused.
2512 */
2513 float rc_min_vbv_overflow_use;
2514
2515 /**
2516 * Hardware accelerator in use
2517 * - encoding: unused.
2518 * - decoding: Set by libavcodec
2519 */
2520 struct AVHWAccel *hwaccel;
2521
2522 /**
2523 * For some codecs, the time base is closer to the field rate than the frame rate.
2524 * Most notably, H.264 and MPEG-2 specify time_base as half of frame duration
2525 * if no telecine is used ...
2526 *
2527 * Set to time_base ticks per frame. Default 1, e.g., H.264/MPEG-2 set it to 2.
2528 */
2529 int ticks_per_frame;
2530
2531 /**
2532 * Hardware accelerator context.
2533 * For some hardware accelerators, a global context needs to be
2534 * provided by the user. In that case, this holds display-dependent
2535 * data FFmpeg cannot instantiate itself. Please refer to the
2536 * FFmpeg HW accelerator documentation to know how to fill this
2537 * is. e.g. for VA API, this is a struct vaapi_context.
2538 * - encoding: unused
2539 * - decoding: Set by user
2540 */
2541 void *hwaccel_context;
2542
2543 /**
2544 * Chromaticity coordinates of the source primaries.
2545 * - encoding: Set by user
2546 * - decoding: Set by libavcodec
2547 */
2548 enum AVColorPrimaries color_primaries;
2549
2550 /**
2551 * Color Transfer Characteristic.
2552 * - encoding: Set by user
2553 * - decoding: Set by libavcodec
2554 */
2555 enum AVColorTransferCharacteristic color_trc;
2556
2557 /**
2558 * YUV colorspace type.
2559 * - encoding: Set by user
2560 * - decoding: Set by libavcodec
2561 */
2562 enum AVColorSpace colorspace;
2563
2564 /**
2565 * MPEG vs JPEG YUV range.
2566 * - encoding: Set by user
2567 * - decoding: Set by libavcodec
2568 */
2569 enum AVColorRange color_range;
2570
2571 /**
2572 * This defines the location of chroma samples.
2573 * - encoding: Set by user
2574 * - decoding: Set by libavcodec
2575 */
2576 enum AVChromaLocation chroma_sample_location;
2577
2578 /**
2579 * The codec may call this to execute several independent things.
2580 * It will return only after finishing all tasks.
2581 * The user may replace this with some multithreaded implementation,
2582 * the default implementation will execute the parts serially.
2583 * Also see avcodec_thread_init and e.g. the --enable-pthread configure option.
2584 * @param c context passed also to func
2585 * @param count the number of things to execute
2586 * @param arg2 argument passed unchanged to func
2587 * @param ret return values of executed functions, must have space for "count" values. May be NULL.
2588 * @param func function that will be called count times, with jobnr from 0 to count-1.
2589 * threadnr will be in the range 0 to c->thread_count-1 < MAX_THREADS and so that no
2590 * two instances of func executing at the same time will have the same threadnr.
2591 * @return always 0 currently, but code should handle a future improvement where when any call to func
2592 * returns < 0 no further calls to func may be done and < 0 is returned.
2593 * - encoding: Set by libavcodec, user can override.
2594 * - decoding: Set by libavcodec, user can override.
2595 */
2596 int (*execute2)(struct AVCodecContext *c, int (*func)(struct AVCodecContext *c2, void *arg, int jobnr, int threadnr), void *arg2, int *ret, int count);
2597
2598 /**
2599 * explicit P-frame weighted prediction analysis method
2600 * 0: off
2601 * 1: fast blind weighting (one reference duplicate with -1 offset)
2602 * 2: smart weighting (full fade detection analysis)
2603 * - encoding: Set by user.
2604 * - decoding: unused
2605 */
2606 int weighted_p_pred;
2607
2608 /**
2609 * AQ mode
2610 * 0: Disabled
2611 * 1: Variance AQ (complexity mask)
2612 * 2: Auto-variance AQ (experimental)
2613 * - encoding: Set by user
2614 * - decoding: unused
2615 */
2616 int aq_mode;
2617
2618 /**
2619 * AQ strength
2620 * Reduces blocking and blurring in flat and textured areas.
2621 * - encoding: Set by user
2622 * - decoding: unused
2623 */
2624 float aq_strength;
2625
2626 /**
2627 * PSY RD
2628 * Strength of psychovisual optimization
2629 * - encoding: Set by user
2630 * - decoding: unused
2631 */
2632 float psy_rd;
2633
2634 /**
2635 * PSY trellis
2636 * Strength of psychovisual optimization
2637 * - encoding: Set by user
2638 * - decoding: unused
2639 */
2640 float psy_trellis;
2641
2642 /**
2643 * RC lookahead
2644 * Number of frames for frametype and ratecontrol lookahead
2645 * - encoding: Set by user
2646 * - decoding: unused
2647 */
2648 int rc_lookahead;
2649} AVCodecContext;
2650
2651/**
2652 * AVCodec.
2653 */
2654typedef struct AVCodec {
2655 /**
2656 * Name of the codec implementation.
2657 * The name is globally unique among encoders and among decoders (but an
2658 * encoder and a decoder can share the same name).
2659 * This is the primary way to find a codec from the user perspective.
2660 */
2661 const char *name;
2662 enum AVMediaType type;
2663 enum CodecID id;
2664 int priv_data_size;
2665 int (*init)(AVCodecContext *);
2666 int (*encode)(AVCodecContext *, uint8_t *buf, int buf_size, void *data);
2667 int (*close)(AVCodecContext *);
2668 int (*decode)(AVCodecContext *, void *outdata, int *outdata_size, AVPacket *avpkt);
2669 /**
2670 * Codec capabilities.
2671 * see CODEC_CAP_*
2672 */
2673 int capabilities;
2674 struct AVCodec *next;
2675 /**
2676 * Flush buffers.
2677 * Will be called when seeking
2678 */
2679 void (*flush)(AVCodecContext *);
2680 const AVRational *supported_framerates; ///< array of supported framerates, or NULL if any, array is terminated by {0,0}
2681 const enum PixelFormat *pix_fmts; ///< array of supported pixel formats, or NULL if unknown, array is terminated by -1
2682 /**
2683 * Descriptive name for the codec, meant to be more human readable than name.
2684 * You should use the NULL_IF_CONFIG_SMALL() macro to define it.
2685 */
2686 const char *long_name;
2687 const int *supported_samplerates; ///< array of supported audio samplerates, or NULL if unknown, array is terminated by 0
2688 const enum SampleFormat *sample_fmts; ///< array of supported sample formats, or NULL if unknown, array is terminated by -1
2689 const int64_t *channel_layouts; ///< array of support channel layouts, or NULL if unknown. array is terminated by 0
2690} AVCodec;
2691
2692/**
2693 * AVHWAccel.
2694 */
2695typedef struct AVHWAccel {
2696 /**
2697 * Name of the hardware accelerated codec.
2698 * The name is globally unique among encoders and among decoders (but an
2699 * encoder and a decoder can share the same name).
2700 */
2701 const char *name;
2702
2703 /**
2704 * Type of codec implemented by the hardware accelerator.
2705 *
2706 * See AVMEDIA_TYPE_xxx
2707 */
2708 enum AVMediaType type;
2709
2710 /**
2711 * Codec implemented by the hardware accelerator.
2712 *
2713 * See CODEC_ID_xxx
2714 */
2715 enum CodecID id;
2716
2717 /**
2718 * Supported pixel format.
2719 *
2720 * Only hardware accelerated formats are supported here.
2721 */
2722 enum PixelFormat pix_fmt;
2723
2724 /**
2725 * Hardware accelerated codec capabilities.
2726 * see FF_HWACCEL_CODEC_CAP_*
2727 */
2728 int capabilities;
2729
2730 struct AVHWAccel *next;
2731
2732 /**
2733 * Called at the beginning of each frame or field picture.
2734 *
2735 * Meaningful frame information (codec specific) is guaranteed to
2736 * be parsed at this point. This function is mandatory.
2737 *
2738 * Note that buf can be NULL along with buf_size set to 0.
2739 * Otherwise, this means the whole frame is available at this point.
2740 *
2741 * @param avctx the codec context
2742 * @param buf the frame data buffer base
2743 * @param buf_size the size of the frame in bytes
2744 * @return zero if successful, a negative value otherwise
2745 */
2746 int (*start_frame)(AVCodecContext *avctx, const uint8_t *buf, uint32_t buf_size);
2747
2748 /**
2749 * Callback for each slice.
2750 *
2751 * Meaningful slice information (codec specific) is guaranteed to
2752 * be parsed at this point. This function is mandatory.
2753 *
2754 * @param avctx the codec context
2755 * @param buf the slice data buffer base
2756 * @param buf_size the size of the slice in bytes
2757 * @return zero if successful, a negative value otherwise
2758 */
2759 int (*decode_slice)(AVCodecContext *avctx, const uint8_t *buf, uint32_t buf_size);
2760
2761 /**
2762 * Called at the end of each frame or field picture.
2763 *
2764 * The whole picture is parsed at this point and can now be sent
2765 * to the hardware accelerator. This function is mandatory.
2766 *
2767 * @param avctx the codec context
2768 * @return zero if successful, a negative value otherwise
2769 */
2770 int (*end_frame)(AVCodecContext *avctx);
2771
2772 /**
2773 * Size of HW accelerator private data.
2774 *
2775 * Private data is allocated with av_mallocz() before
2776 * AVCodecContext.get_buffer() and deallocated after
2777 * AVCodecContext.release_buffer().
2778 */
2779 int priv_data_size;
2780} AVHWAccel;
2781
2782/**
2783 * four components are given, that's all.
2784 * the last component is alpha
2785 */
2786typedef struct AVPicture {
2787 uint8_t *data[4];
2788 int linesize[4]; ///< number of bytes per line
2789} AVPicture;
2790
2791#if LIBAVCODEC_VERSION_MAJOR < 53
2792/**
2793 * AVPaletteControl
2794 * This structure defines a method for communicating palette changes
2795 * between and demuxer and a decoder.
2796 *
2797 * @deprecated Use AVPacket to send palette changes instead.
2798 * This is totally broken.
2799 */
2800#define AVPALETTE_SIZE 1024
2801#define AVPALETTE_COUNT 256
2802typedef struct AVPaletteControl {
2803
2804 /* Demuxer sets this to 1 to indicate the palette has changed;
2805 * decoder resets to 0. */
2806 int palette_changed;
2807
2808 /* 4-byte ARGB palette entries, stored in native byte order; note that
2809 * the individual palette components should be on a 8-bit scale; if
2810 * the palette data comes from an IBM VGA native format, the component
2811 * data is probably 6 bits in size and needs to be scaled. */
2812 unsigned int palette[AVPALETTE_COUNT];
2813
2814} AVPaletteControl attribute_deprecated;
2815#endif
2816
2817enum AVSubtitleType {
2818 SUBTITLE_NONE,
2819
2820 SUBTITLE_BITMAP, ///< A bitmap, pict will be set
2821
2822 /**
2823 * Plain text, the text field must be set by the decoder and is
2824 * authoritative. ass and pict fields may contain approximations.
2825 */
2826 SUBTITLE_TEXT,
2827
2828 /**
2829 * Formatted text, the ass field must be set by the decoder and is
2830 * authoritative. pict and text fields may contain approximations.
2831 */
2832 SUBTITLE_ASS,
2833};
2834
2835typedef struct AVSubtitleRect {
2836 int x; ///< top left corner of pict, undefined when pict is not set
2837 int y; ///< top left corner of pict, undefined when pict is not set
2838 int w; ///< width of pict, undefined when pict is not set
2839 int h; ///< height of pict, undefined when pict is not set
2840 int nb_colors; ///< number of colors in pict, undefined when pict is not set
2841
2842 /**
2843 * data+linesize for the bitmap of this subtitle.
2844 * can be set for text/ass as well once they where rendered
2845 */
2846 AVPicture pict;
2847 enum AVSubtitleType type;
2848
2849 char *text; ///< 0 terminated plain UTF-8 text
2850
2851 /**
2852 * 0 terminated ASS/SSA compatible event line.
2853 * The pressentation of this is unaffected by the other values in this
2854 * struct.
2855 */
2856 char *ass;
2857} AVSubtitleRect;
2858
2859typedef struct AVSubtitle {
2860 uint16_t format; /* 0 = graphics */
2861 uint32_t start_display_time; /* relative to packet pts, in ms */
2862 uint32_t end_display_time; /* relative to packet pts, in ms */
2863 unsigned num_rects;
2864 AVSubtitleRect **rects;
2865 int64_t pts; ///< Same as packet pts, in AV_TIME_BASE
2866} AVSubtitle;
2867
2868/* packet functions */
2869
2870/**
2871 * @deprecated use NULL instead
2872 */
2873attribute_deprecated void av_destruct_packet_nofree(AVPacket *pkt);
2874
2875/**
2876 * Default packet destructor.
2877 */
2878void av_destruct_packet(AVPacket *pkt);
2879
2880/**
2881 * Initialize optional fields of a packet with default values.
2882 *
2883 * @param pkt packet
2884 */
2885void av_init_packet(AVPacket *pkt);
2886
2887/**
2888 * Allocate the payload of a packet and initialize its fields with
2889 * default values.
2890 *
2891 * @param pkt packet
2892 * @param size wanted payload size
2893 * @return 0 if OK, AVERROR_xxx otherwise
2894 */
2895int av_new_packet(AVPacket *pkt, int size);
2896
2897/**
2898 * Reduce packet size, correctly zeroing padding
2899 *
2900 * @param pkt packet
2901 * @param size new size
2902 */
2903void av_shrink_packet(AVPacket *pkt, int size);
2904
2905/**
2906 * @warning This is a hack - the packet memory allocation stuff is broken. The
2907 * packet is allocated if it was not really allocated.
2908 */
2909int av_dup_packet(AVPacket *pkt);
2910
2911/**
2912 * Free a packet.
2913 *
2914 * @param pkt packet to free
2915 */
2916void av_free_packet(AVPacket *pkt);
2917
2918/* resample.c */
2919
2920struct ReSampleContext;
2921struct AVResampleContext;
2922
2923typedef struct ReSampleContext ReSampleContext;
2924
2925#if LIBAVCODEC_VERSION_MAJOR < 53
2926/**
2927 * @deprecated Use av_audio_resample_init() instead.
2928 */
2929attribute_deprecated ReSampleContext *audio_resample_init(int output_channels, int input_channels,
2930 int output_rate, int input_rate);
2931#endif
2932/**
2933 * Initializes audio resampling context
2934 *
2935 * @param output_channels number of output channels
2936 * @param input_channels number of input channels
2937 * @param output_rate output sample rate
2938 * @param input_rate input sample rate
2939 * @param sample_fmt_out requested output sample format
2940 * @param sample_fmt_in input sample format
2941 * @param filter_length length of each FIR filter in the filterbank relative to the cutoff freq
2942 * @param log2_phase_count log2 of the number of entries in the polyphase filterbank
2943 * @param linear If 1 then the used FIR filter will be linearly interpolated
2944 between the 2 closest, if 0 the closest will be used
2945 * @param cutoff cutoff frequency, 1.0 corresponds to half the output sampling rate
2946 * @return allocated ReSampleContext, NULL if error occured
2947 */
2948ReSampleContext *av_audio_resample_init(int output_channels, int input_channels,
2949 int output_rate, int input_rate,
2950 enum SampleFormat sample_fmt_out,
2951 enum SampleFormat sample_fmt_in,
2952 int filter_length, int log2_phase_count,
2953 int linear, double cutoff);
2954
2955int audio_resample(ReSampleContext *s, short *output, short *input, int nb_samples);
2956void audio_resample_close(ReSampleContext *s);
2957
2958
2959/**
2960 * Initializes an audio resampler.
2961 * Note, if either rate is not an integer then simply scale both rates up so they are.
2962 * @param filter_length length of each FIR filter in the filterbank relative to the cutoff freq
2963 * @param log2_phase_count log2 of the number of entries in the polyphase filterbank
2964 * @param linear If 1 then the used FIR filter will be linearly interpolated
2965 between the 2 closest, if 0 the closest will be used
2966 * @param cutoff cutoff frequency, 1.0 corresponds to half the output sampling rate
2967 */
2968struct AVResampleContext *av_resample_init(int out_rate, int in_rate, int filter_length, int log2_phase_count, int linear, double cutoff);
2969
2970/**
2971 * resamples.
2972 * @param src an array of unconsumed samples
2973 * @param consumed the number of samples of src which have been consumed are returned here
2974 * @param src_size the number of unconsumed samples available
2975 * @param dst_size the amount of space in samples available in dst
2976 * @param update_ctx If this is 0 then the context will not be modified, that way several channels can be resampled with the same context.
2977 * @return the number of samples written in dst or -1 if an error occurred
2978 */
2979int av_resample(struct AVResampleContext *c, short *dst, short *src, int *consumed, int src_size, int dst_size, int update_ctx);
2980
2981
2982/**
2983 * Compensates samplerate/timestamp drift. The compensation is done by changing
2984 * the resampler parameters, so no audible clicks or similar distortions occur
2985 * @param compensation_distance distance in output samples over which the compensation should be performed
2986 * @param sample_delta number of output samples which should be output less
2987 *
2988 * example: av_resample_compensate(c, 10, 500)
2989 * here instead of 510 samples only 500 samples would be output
2990 *
2991 * note, due to rounding the actual compensation might be slightly different,
2992 * especially if the compensation_distance is large and the in_rate used during init is small
2993 */
2994void av_resample_compensate(struct AVResampleContext *c, int sample_delta, int compensation_distance);
2995void av_resample_close(struct AVResampleContext *c);
2996
2997/**
2998 * Allocate memory for a picture. Call avpicture_free to free it.
2999 *
3000 * @param picture the picture to be filled in
3001 * @param pix_fmt the format of the picture
3002 * @param width the width of the picture
3003 * @param height the height of the picture
3004 * @return zero if successful, a negative value if not
3005 */
3006int avpicture_alloc(AVPicture *picture, enum PixelFormat pix_fmt, int width, int height);
3007
3008/**
3009 * Free a picture previously allocated by avpicture_alloc().
3010 *
3011 * @param picture the AVPicture to be freed
3012 */
3013void avpicture_free(AVPicture *picture);
3014
3015/**
3016 * Fill in the AVPicture fields.
3017 * The fields of the given AVPicture are filled in by using the 'ptr' address
3018 * which points to the image data buffer. Depending on the specified picture
3019 * format, one or multiple image data pointers and line sizes will be set.
3020 * If a planar format is specified, several pointers will be set pointing to
3021 * the different picture planes and the line sizes of the different planes
3022 * will be stored in the lines_sizes array.
3023 * Call with ptr == NULL to get the required size for the ptr buffer.
3024 *
3025 * @param picture AVPicture whose fields are to be filled in
3026 * @param ptr Buffer which will contain or contains the actual image data
3027 * @param pix_fmt The format in which the picture data is stored.
3028 * @param width the width of the image in pixels
3029 * @param height the height of the image in pixels
3030 * @return size of the image data in bytes
3031 */
3032int avpicture_fill(AVPicture *picture, uint8_t *ptr,
3033 enum PixelFormat pix_fmt, int width, int height);
3034int avpicture_layout(const AVPicture* src, enum PixelFormat pix_fmt, int width, int height,
3035 unsigned char *dest, int dest_size);
3036
3037/**
3038 * Calculate the size in bytes that a picture of the given width and height
3039 * would occupy if stored in the given picture format.
3040 * Note that this returns the size of a compact representation as generated
3041 * by avpicture_layout, which can be smaller than the size required for e.g.
3042 * avpicture_fill.
3043 *
3044 * @param pix_fmt the given picture format
3045 * @param width the width of the image
3046 * @param height the height of the image
3047 * @return Image data size in bytes or -1 on error (e.g. too large dimensions).
3048 */
3049int avpicture_get_size(enum PixelFormat pix_fmt, int width, int height);
3050void avcodec_get_chroma_sub_sample(enum PixelFormat pix_fmt, int *h_shift, int *v_shift);
3051const char *avcodec_get_pix_fmt_name(enum PixelFormat pix_fmt);
3052void avcodec_set_dimensions(AVCodecContext *s, int width, int height);
3053
3054#if LIBAVCODEC_VERSION_MAJOR < 53
3055/**
3056 * Returns the pixel format corresponding to the name name.
3057 *
3058 * If there is no pixel format with name name, then looks for a
3059 * pixel format with the name corresponding to the native endian
3060 * format of name.
3061 * For example in a little-endian system, first looks for "gray16",
3062 * then for "gray16le".
3063 *
3064 * Finally if no pixel format has been found, returns PIX_FMT_NONE.
3065 *
3066 * @deprecated Deprecated in favor of av_get_pix_fmt().
3067 */
3068attribute_deprecated enum PixelFormat avcodec_get_pix_fmt(const char* name);
3069#endif
3070
3071/**
3072 * Returns a value representing the fourCC code associated to the
3073 * pixel format pix_fmt, or 0 if no associated fourCC code can be
3074 * found.
3075 */
3076unsigned int avcodec_pix_fmt_to_codec_tag(enum PixelFormat pix_fmt);
3077
3078#define FF_LOSS_RESOLUTION 0x0001 /**< loss due to resolution change */
3079#define FF_LOSS_DEPTH 0x0002 /**< loss due to color depth change */
3080#define FF_LOSS_COLORSPACE 0x0004 /**< loss due to color space conversion */
3081#define FF_LOSS_ALPHA 0x0008 /**< loss of alpha bits */
3082#define FF_LOSS_COLORQUANT 0x0010 /**< loss due to color quantization */
3083#define FF_LOSS_CHROMA 0x0020 /**< loss of chroma (e.g. RGB to gray conversion) */
3084
3085/**
3086 * Computes what kind of losses will occur when converting from one specific
3087 * pixel format to another.
3088 * When converting from one pixel format to another, information loss may occur.
3089 * For example, when converting from RGB24 to GRAY, the color information will
3090 * be lost. Similarly, other losses occur when converting from some formats to
3091 * other formats. These losses can involve loss of chroma, but also loss of
3092 * resolution, loss of color depth, loss due to the color space conversion, loss
3093 * of the alpha bits or loss due to color quantization.
3094 * avcodec_get_fix_fmt_loss() informs you about the various types of losses
3095 * which will occur when converting from one pixel format to another.
3096 *
3097 * @param[in] dst_pix_fmt destination pixel format
3098 * @param[in] src_pix_fmt source pixel format
3099 * @param[in] has_alpha Whether the source pixel format alpha channel is used.
3100 * @return Combination of flags informing you what kind of losses will occur.
3101 */
3102int avcodec_get_pix_fmt_loss(enum PixelFormat dst_pix_fmt, enum PixelFormat src_pix_fmt,
3103 int has_alpha);
3104
3105/**
3106 * Finds the best pixel format to convert to given a certain source pixel
3107 * format. When converting from one pixel format to another, information loss
3108 * may occur. For example, when converting from RGB24 to GRAY, the color
3109 * information will be lost. Similarly, other losses occur when converting from
3110 * some formats to other formats. avcodec_find_best_pix_fmt() searches which of
3111 * the given pixel formats should be used to suffer the least amount of loss.
3112 * The pixel formats from which it chooses one, are determined by the
3113 * pix_fmt_mask parameter.
3114 *
3115 * @code
3116 * src_pix_fmt = PIX_FMT_YUV420P;
3117 * pix_fmt_mask = (1 << PIX_FMT_YUV422P) || (1 << PIX_FMT_RGB24);
3118 * dst_pix_fmt = avcodec_find_best_pix_fmt(pix_fmt_mask, src_pix_fmt, alpha, &loss);
3119 * @endcode
3120 *
3121 * @param[in] pix_fmt_mask bitmask determining which pixel format to choose from
3122 * @param[in] src_pix_fmt source pixel format
3123 * @param[in] has_alpha Whether the source pixel format alpha channel is used.
3124 * @param[out] loss_ptr Combination of flags informing you what kind of losses will occur.
3125 * @return The best pixel format to convert to or -1 if none was found.
3126 */
3127enum PixelFormat avcodec_find_best_pix_fmt(int64_t pix_fmt_mask, enum PixelFormat src_pix_fmt,
3128 int has_alpha, int *loss_ptr);
3129
3130
3131/**
3132 * Print in buf the string corresponding to the pixel format with
3133 * number pix_fmt, or an header if pix_fmt is negative.
3134 *
3135 * @param[in] buf the buffer where to write the string
3136 * @param[in] buf_size the size of buf
3137 * @param[in] pix_fmt the number of the pixel format to print the corresponding info string, or
3138 * a negative value to print the corresponding header.
3139 * Meaningful values for obtaining a pixel format info vary from 0 to PIX_FMT_NB -1.
3140 */
3141void avcodec_pix_fmt_string (char *buf, int buf_size, enum PixelFormat pix_fmt);
3142
3143#define FF_ALPHA_TRANSP 0x0001 /* image has some totally transparent pixels */
3144#define FF_ALPHA_SEMI_TRANSP 0x0002 /* image has some transparent pixels */
3145
3146/**
3147 * Tell if an image really has transparent alpha values.
3148 * @return ored mask of FF_ALPHA_xxx constants
3149 */
3150int img_get_alpha_info(const AVPicture *src,
3151 enum PixelFormat pix_fmt, int width, int height);
3152
3153/* deinterlace a picture */
3154/* deinterlace - if not supported return -1 */
3155int avpicture_deinterlace(AVPicture *dst, const AVPicture *src,
3156 enum PixelFormat pix_fmt, int width, int height);
3157
3158/* external high level API */
3159
3160/**
3161 * If c is NULL, returns the first registered codec,
3162 * if c is non-NULL, returns the next registered codec after c,
3163 * or NULL if c is the last one.
3164 */
3165AVCodec *av_codec_next(AVCodec *c);
3166
3167/**
3168 * Returns the LIBAVCODEC_VERSION_INT constant.
3169 */
3170unsigned avcodec_version(void);
3171
3172/**
3173 * Returns the libavcodec build-time configuration.
3174 */
3175const char *avcodec_configuration(void);
3176
3177/**
3178 * Returns the libavcodec license.
3179 */
3180const char *avcodec_license(void);
3181
3182/**
3183 * Initializes libavcodec.
3184 *
3185 * @warning This function must be called before any other libavcodec
3186 * function.
3187 */
3188void avcodec_init(void);
3189
3190#if LIBAVCODEC_VERSION_MAJOR < 53
3191/**
3192 * @deprecated Deprecated in favor of avcodec_register().
3193 */
3194attribute_deprecated void register_avcodec(AVCodec *codec);
3195#endif
3196
3197/**
3198 * Register the codec codec and initialize libavcodec.
3199 *
3200 * @see avcodec_init()
3201 */
3202void avcodec_register(AVCodec *codec);
3203
3204/**
3205 * Finds a registered encoder with a matching codec ID.
3206 *
3207 * @param id CodecID of the requested encoder
3208 * @return An encoder if one was found, NULL otherwise.
3209 */
3210AVCodec *avcodec_find_encoder(enum CodecID id);
3211
3212/**
3213 * Finds a registered encoder with the specified name.
3214 *
3215 * @param name name of the requested encoder
3216 * @return An encoder if one was found, NULL otherwise.
3217 */
3218AVCodec *avcodec_find_encoder_by_name(const char *name);
3219
3220/**
3221 * Finds a registered decoder with a matching codec ID.
3222 *
3223 * @param id CodecID of the requested decoder
3224 * @return A decoder if one was found, NULL otherwise.
3225 */
3226AVCodec *avcodec_find_decoder(enum CodecID id);
3227
3228/**
3229 * Finds a registered decoder with the specified name.
3230 *
3231 * @param name name of the requested decoder
3232 * @return A decoder if one was found, NULL otherwise.
3233 */
3234AVCodec *avcodec_find_decoder_by_name(const char *name);
3235void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode);
3236
3237/**
3238 * Sets the fields of the given AVCodecContext to default values.
3239 *
3240 * @param s The AVCodecContext of which the fields should be set to default values.
3241 */
3242void avcodec_get_context_defaults(AVCodecContext *s);
3243
3244/** THIS FUNCTION IS NOT YET PART OF THE PUBLIC API!
3245 * we WILL change its arguments and name a few times! */
3246void avcodec_get_context_defaults2(AVCodecContext *s, enum AVMediaType);
3247
3248/**
3249 * Allocates an AVCodecContext and sets its fields to default values. The
3250 * resulting struct can be deallocated by simply calling av_free().
3251 *
3252 * @return An AVCodecContext filled with default values or NULL on failure.
3253 * @see avcodec_get_context_defaults
3254 */
3255AVCodecContext *avcodec_alloc_context(void);
3256
3257/** THIS FUNCTION IS NOT YET PART OF THE PUBLIC API!
3258 * we WILL change its arguments and name a few times! */
3259AVCodecContext *avcodec_alloc_context2(enum AVMediaType);
3260
3261/**
3262 * Copy the settings of the source AVCodecContext into the destination
3263 * AVCodecContext. The resulting destination codec context will be
3264 * unopened, i.e. you are required to call avcodec_open() before you
3265 * can use this AVCodecContext to decode/encode video/audio data.
3266 *
3267 * @param dest target codec context, should be initialized with
3268 * avcodec_alloc_context(), but otherwise uninitialized
3269 * @param src source codec context
3270 * @return AVERROR() on error (e.g. memory allocation error), 0 on success
3271 */
3272int avcodec_copy_context(AVCodecContext *dest, const AVCodecContext *src);
3273
3274/**
3275 * Sets the fields of the given AVFrame to default values.
3276 *
3277 * @param pic The AVFrame of which the fields should be set to default values.
3278 */
3279void avcodec_get_frame_defaults(AVFrame *pic);
3280
3281/**
3282 * Allocates an AVFrame and sets its fields to default values. The resulting
3283 * struct can be deallocated by simply calling av_free().
3284 *
3285 * @return An AVFrame filled with default values or NULL on failure.
3286 * @see avcodec_get_frame_defaults
3287 */
3288AVFrame *avcodec_alloc_frame(void);
3289
3290int avcodec_default_get_buffer(AVCodecContext *s, AVFrame *pic);
3291void avcodec_default_release_buffer(AVCodecContext *s, AVFrame *pic);
3292int avcodec_default_reget_buffer(AVCodecContext *s, AVFrame *pic);
3293
3294/**
3295 * Returns the amount of padding in pixels which the get_buffer callback must
3296 * provide around the edge of the image for codecs which do not have the
3297 * CODEC_FLAG_EMU_EDGE flag.
3298 *
3299 * @return Required padding in pixels.
3300 */
3301unsigned avcodec_get_edge_width(void);
3302/**
3303 * Modifies width and height values so that they will result in a memory
3304 * buffer that is acceptable for the codec if you do not use any horizontal
3305 * padding.
3306 */
3307void avcodec_align_dimensions(AVCodecContext *s, int *width, int *height);
3308/**
3309 * Modifies width and height values so that they will result in a memory
3310 * buffer that is acceptable for the codec if you also ensure that all
3311 * line sizes are a multiple of the respective linesize_align[i].
3312 */
3313void avcodec_align_dimensions2(AVCodecContext *s, int *width, int *height,
3314 int linesize_align[4]);
3315
3316/**
3317 * Checks if the given dimension of a picture is valid, meaning that all
3318 * bytes of the picture can be addressed with a signed int.
3319 *
3320 * @param[in] w Width of the picture.
3321 * @param[in] h Height of the picture.
3322 * @return Zero if valid, a negative value if invalid.
3323 */
3324int avcodec_check_dimensions(void *av_log_ctx, unsigned int w, unsigned int h);
3325enum PixelFormat avcodec_default_get_format(struct AVCodecContext *s, const enum PixelFormat * fmt);
3326
3327int avcodec_thread_init(AVCodecContext *s, int thread_count);
3328void avcodec_thread_free(AVCodecContext *s);
3329int avcodec_default_execute(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2),void *arg, int *ret, int count, int size);
3330int avcodec_default_execute2(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2, int, int),void *arg, int *ret, int count);
3331//FIXME func typedef
3332
3333/**
3334 * Initializes the AVCodecContext to use the given AVCodec. Prior to using this
3335 * function the context has to be allocated.
3336 *
3337 * The functions avcodec_find_decoder_by_name(), avcodec_find_encoder_by_name(),
3338 * avcodec_find_decoder() and avcodec_find_encoder() provide an easy way for
3339 * retrieving a codec.
3340 *
3341 * @warning This function is not thread safe!
3342 *
3343 * @code
3344 * avcodec_register_all();
3345 * codec = avcodec_find_decoder(CODEC_ID_H264);
3346 * if (!codec)
3347 * exit(1);
3348 *
3349 * context = avcodec_alloc_context();
3350 *
3351 * if (avcodec_open(context, codec) < 0)
3352 * exit(1);
3353 * @endcode
3354 *
3355 * @param avctx The context which will be set up to use the given codec.
3356 * @param codec The codec to use within the context.
3357 * @return zero on success, a negative value on error
3358 * @see avcodec_alloc_context, avcodec_find_decoder, avcodec_find_encoder
3359 */
3360int avcodec_open(AVCodecContext *avctx, AVCodec *codec);
3361
3362#if LIBAVCODEC_VERSION_MAJOR < 53
3363/**
3364 * Decodes an audio frame from buf into samples.
3365 * Wrapper function which calls avcodec_decode_audio3.
3366 *
3367 * @deprecated Use avcodec_decode_audio3 instead.
3368 * @param avctx the codec context
3369 * @param[out] samples the output buffer
3370 * @param[in,out] frame_size_ptr the output buffer size in bytes
3371 * @param[in] buf the input buffer
3372 * @param[in] buf_size the input buffer size in bytes
3373 * @return On error a negative value is returned, otherwise the number of bytes
3374 * used or zero if no frame could be decompressed.
3375 */
3376attribute_deprecated int avcodec_decode_audio2(AVCodecContext *avctx, int16_t *samples,
3377 int *frame_size_ptr,
3378 const uint8_t *buf, int buf_size);
3379#endif
3380
3381/**
3382 * Decodes the audio frame of size avpkt->size from avpkt->data into samples.
3383 * Some decoders may support multiple frames in a single AVPacket, such
3384 * decoders would then just decode the first frame. In this case,
3385 * avcodec_decode_audio3 has to be called again with an AVPacket that contains
3386 * the remaining data in order to decode the second frame etc.
3387 * If no frame
3388 * could be outputted, frame_size_ptr is zero. Otherwise, it is the
3389 * decompressed frame size in bytes.
3390 *
3391 * @warning You must set frame_size_ptr to the allocated size of the
3392 * output buffer before calling avcodec_decode_audio3().
3393 *
3394 * @warning The input buffer must be FF_INPUT_BUFFER_PADDING_SIZE larger than
3395 * the actual read bytes because some optimized bitstream readers read 32 or 64
3396 * bits at once and could read over the end.
3397 *
3398 * @warning The end of the input buffer avpkt->data should be set to 0 to ensure that
3399 * no overreading happens for damaged MPEG streams.
3400 *
3401 * @note You might have to align the input buffer avpkt->data and output buffer
3402 * samples. The alignment requirements depend on the CPU: On some CPUs it isn't
3403 * necessary at all, on others it won't work at all if not aligned and on others
3404 * it will work but it will have an impact on performance.
3405 *
3406 * In practice, avpkt->data should have 4 byte alignment at minimum and
3407 * samples should be 16 byte aligned unless the CPU doesn't need it
3408 * (AltiVec and SSE do).
3409 *
3410 * @param avctx the codec context
3411 * @param[out] samples the output buffer, sample type in avctx->sample_fmt
3412 * @param[in,out] frame_size_ptr the output buffer size in bytes
3413 * @param[in] avpkt The input AVPacket containing the input buffer.
3414 * You can create such packet with av_init_packet() and by then setting
3415 * data and size, some decoders might in addition need other fields.
3416 * All decoders are designed to use the least fields possible though.
3417 * @return On error a negative value is returned, otherwise the number of bytes
3418 * used or zero if no frame data was decompressed (used) from the input AVPacket.
3419 */
3420int avcodec_decode_audio3(AVCodecContext *avctx, int16_t *samples,
3421 int *frame_size_ptr,
3422 AVPacket *avpkt);
3423
3424#if LIBAVCODEC_VERSION_MAJOR < 53
3425/**
3426 * Decodes a video frame from buf into picture.
3427 * Wrapper function which calls avcodec_decode_video2.
3428 *
3429 * @deprecated Use avcodec_decode_video2 instead.
3430 * @param avctx the codec context
3431 * @param[out] picture The AVFrame in which the decoded video frame will be stored.
3432 * @param[in] buf the input buffer
3433 * @param[in] buf_size the size of the input buffer in bytes
3434 * @param[in,out] got_picture_ptr Zero if no frame could be decompressed, otherwise, it is nonzero.
3435 * @return On error a negative value is returned, otherwise the number of bytes
3436 * used or zero if no frame could be decompressed.
3437 */
3438attribute_deprecated int avcodec_decode_video(AVCodecContext *avctx, AVFrame *picture,
3439 int *got_picture_ptr,
3440 const uint8_t *buf, int buf_size);
3441#endif
3442
3443/**
3444 * Decodes the video frame of size avpkt->size from avpkt->data into picture.
3445 * Some decoders may support multiple frames in a single AVPacket, such
3446 * decoders would then just decode the first frame.
3447 *
3448 * @warning The input buffer must be FF_INPUT_BUFFER_PADDING_SIZE larger than
3449 * the actual read bytes because some optimized bitstream readers read 32 or 64
3450 * bits at once and could read over the end.
3451 *
3452 * @warning The end of the input buffer buf should be set to 0 to ensure that
3453 * no overreading happens for damaged MPEG streams.
3454 *
3455 * @note You might have to align the input buffer avpkt->data.
3456 * The alignment requirements depend on the CPU: on some CPUs it isn't
3457 * necessary at all, on others it won't work at all if not aligned and on others
3458 * it will work but it will have an impact on performance.
3459 *
3460 * In practice, avpkt->data should have 4 byte alignment at minimum.
3461 *
3462 * @note Some codecs have a delay between input and output, these need to be
3463 * fed with avpkt->data=NULL, avpkt->size=0 at the end to return the remaining frames.
3464 *
3465 * @param avctx the codec context
3466 * @param[out] picture The AVFrame in which the decoded video frame will be stored.
3467 * @param[in] avpkt The input AVpacket containing the input buffer.
3468 * You can create such packet with av_init_packet() and by then setting
3469 * data and size, some decoders might in addition need other fields like
3470 * flags&AV_PKT_FLAG_KEY. All decoders are designed to use the least
3471 * fields possible.
3472 * @param[in,out] got_picture_ptr Zero if no frame could be decompressed, otherwise, it is nonzero.
3473 * @return On error a negative value is returned, otherwise the number of bytes
3474 * used or zero if no frame could be decompressed.
3475 */
3476int avcodec_decode_video2(AVCodecContext *avctx, AVFrame *picture,
3477 int *got_picture_ptr,
3478 AVPacket *avpkt);
3479
3480#if LIBAVCODEC_VERSION_MAJOR < 53
3481/* Decode a subtitle message. Return -1 if error, otherwise return the
3482 * number of bytes used. If no subtitle could be decompressed,
3483 * got_sub_ptr is zero. Otherwise, the subtitle is stored in *sub. */
3484attribute_deprecated int avcodec_decode_subtitle(AVCodecContext *avctx, AVSubtitle *sub,
3485 int *got_sub_ptr,
3486 const uint8_t *buf, int buf_size);
3487#endif
3488
3489/**
3490 * Decodes a subtitle message.
3491 * Returns a negative value on error, otherwise returns the number of bytes used.
3492 * If no subtitle could be decompressed, got_sub_ptr is zero.
3493 * Otherwise, the subtitle is stored in *sub.
3494 *
3495 * @param avctx the codec context
3496 * @param[out] sub The AVSubtitle in which the decoded subtitle will be stored.
3497 * @param[in,out] got_sub_ptr Zero if no subtitle could be decompressed, otherwise, it is nonzero.
3498 * @param[in] avpkt The input AVPacket containing the input buffer.
3499 */
3500int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub,
3501 int *got_sub_ptr,
3502 AVPacket *avpkt);
3503int avcodec_parse_frame(AVCodecContext *avctx, uint8_t **pdata,
3504 int *data_size_ptr,
3505 uint8_t *buf, int buf_size);
3506
3507/**
3508 * Encodes an audio frame from samples into buf.
3509 *
3510 * @note The output buffer should be at least FF_MIN_BUFFER_SIZE bytes large.
3511 * However, for PCM audio the user will know how much space is needed
3512 * because it depends on the value passed in buf_size as described
3513 * below. In that case a lower value can be used.
3514 *
3515 * @param avctx the codec context
3516 * @param[out] buf the output buffer
3517 * @param[in] buf_size the output buffer size
3518 * @param[in] samples the input buffer containing the samples
3519 * The number of samples read from this buffer is frame_size*channels,
3520 * both of which are defined in avctx.
3521 * For PCM audio the number of samples read from samples is equal to
3522 * buf_size * input_sample_size / output_sample_size.
3523 * @return On error a negative value is returned, on success zero or the number
3524 * of bytes used to encode the data read from the input buffer.
3525 */
3526int avcodec_encode_audio(AVCodecContext *avctx, uint8_t *buf, int buf_size,
3527 const short *samples);
3528
3529/**
3530 * Encodes a video frame from pict into buf.
3531 * The input picture should be
3532 * stored using a specific format, namely avctx.pix_fmt.
3533 *
3534 * @param avctx the codec context
3535 * @param[out] buf the output buffer for the bitstream of encoded frame
3536 * @param[in] buf_size the size of the output buffer in bytes
3537 * @param[in] pict the input picture to encode
3538 * @return On error a negative value is returned, on success zero or the number
3539 * of bytes used from the output buffer.
3540 */
3541int avcodec_encode_video(AVCodecContext *avctx, uint8_t *buf, int buf_size,
3542 const AVFrame *pict);
3543int avcodec_encode_subtitle(AVCodecContext *avctx, uint8_t *buf, int buf_size,
3544 const AVSubtitle *sub);
3545
3546int avcodec_close(AVCodecContext *avctx);
3547
3548/**
3549 * Register all the codecs, parsers and bitstream filters which were enabled at
3550 * configuration time. If you do not call this function you can select exactly
3551 * which formats you want to support, by using the individual registration
3552 * functions.
3553 *
3554 * @see avcodec_register
3555 * @see av_register_codec_parser
3556 * @see av_register_bitstream_filter
3557 */
3558void avcodec_register_all(void);
3559
3560/**
3561 * Flush buffers, should be called when seeking or when switching to a different stream.
3562 */
3563void avcodec_flush_buffers(AVCodecContext *avctx);
3564
3565void avcodec_default_free_buffers(AVCodecContext *s);
3566
3567/* misc useful functions */
3568
3569/**
3570 * Returns a single letter to describe the given picture type pict_type.
3571 *
3572 * @param[in] pict_type the picture type
3573 * @return A single character representing the picture type.
3574 */
3575char av_get_pict_type_char(int pict_type);
3576
3577/**
3578 * Returns codec bits per sample.
3579 *
3580 * @param[in] codec_id the codec
3581 * @return Number of bits per sample or zero if unknown for the given codec.
3582 */
3583int av_get_bits_per_sample(enum CodecID codec_id);
3584
3585/**
3586 * Returns sample format bits per sample.
3587 *
3588 * @param[in] sample_fmt the sample format
3589 * @return Number of bits per sample or zero if unknown for the given sample format.
3590 */
3591int av_get_bits_per_sample_format(enum SampleFormat sample_fmt);
3592
3593/* frame parsing */
3594typedef struct AVCodecParserContext {
3595 void *priv_data;
3596 struct AVCodecParser *parser;
3597 int64_t frame_offset; /* offset of the current frame */
3598 int64_t cur_offset; /* current offset
3599 (incremented by each av_parser_parse()) */
3600 int64_t next_frame_offset; /* offset of the next frame */
3601 /* video info */
3602 int pict_type; /* XXX: Put it back in AVCodecContext. */
3603 /**
3604 * This field is used for proper frame duration computation in lavf.
3605 * It signals, how much longer the frame duration of the current frame
3606 * is compared to normal frame duration.
3607 *
3608 * frame_duration = (1 + repeat_pict) * time_base
3609 *
3610 * It is used by codecs like H.264 to display telecined material.
3611 */
3612 int repeat_pict; /* XXX: Put it back in AVCodecContext. */
3613 int64_t pts; /* pts of the current frame */
3614 int64_t dts; /* dts of the current frame */
3615
3616 /* private data */
3617 int64_t last_pts;
3618 int64_t last_dts;
3619 int fetch_timestamp;
3620
3621#define AV_PARSER_PTS_NB 4
3622 int cur_frame_start_index;
3623 int64_t cur_frame_offset[AV_PARSER_PTS_NB];
3624 int64_t cur_frame_pts[AV_PARSER_PTS_NB];
3625 int64_t cur_frame_dts[AV_PARSER_PTS_NB];
3626
3627 int flags;
3628#define PARSER_FLAG_COMPLETE_FRAMES 0x0001
3629
3630 int64_t offset; ///< byte offset from starting packet start
3631 int64_t cur_frame_end[AV_PARSER_PTS_NB];
3632
3633 /*!
3634 * Set by parser to 1 for key frames and 0 for non-key frames.
3635 * It is initialized to -1, so if the parser doesn't set this flag,
3636 * old-style fallback using FF_I_TYPE picture type as key frames
3637 * will be used.
3638 */
3639 int key_frame;
3640
3641 /**
3642 * Time difference in stream time base units from the pts of this
3643 * packet to the point at which the output from the decoder has converged
3644 * independent from the availability of previous frames. That is, the
3645 * frames are virtually identical no matter if decoding started from
3646 * the very first frame or from this keyframe.
3647 * Is AV_NOPTS_VALUE if unknown.
3648 * This field is not the display duration of the current frame.
3649 *
3650 * The purpose of this field is to allow seeking in streams that have no
3651 * keyframes in the conventional sense. It corresponds to the
3652 * recovery point SEI in H.264 and match_time_delta in NUT. It is also
3653 * essential for some types of subtitle streams to ensure that all
3654 * subtitles are correctly displayed after seeking.
3655 */
3656 int64_t convergence_duration;
3657
3658 // Timestamp generation support:
3659 /**
3660 * Synchronization point for start of timestamp generation.
3661 *
3662 * Set to >0 for sync point, 0 for no sync point and <0 for undefined
3663 * (default).
3664 *
3665 * For example, this corresponds to presence of H.264 buffering period
3666 * SEI message.
3667 */
3668 int dts_sync_point;
3669
3670 /**
3671 * Offset of the current timestamp against last timestamp sync point in
3672 * units of AVCodecContext.time_base.
3673 *
3674 * Set to INT_MIN when dts_sync_point unused. Otherwise, it must
3675 * contain a valid timestamp offset.
3676 *
3677 * Note that the timestamp of sync point has usually a nonzero
3678 * dts_ref_dts_delta, which refers to the previous sync point. Offset of
3679 * the next frame after timestamp sync point will be usually 1.
3680 *
3681 * For example, this corresponds to H.264 cpb_removal_delay.
3682 */
3683 int dts_ref_dts_delta;
3684
3685 /**
3686 * Presentation delay of current frame in units of AVCodecContext.time_base.
3687 *
3688 * Set to INT_MIN when dts_sync_point unused. Otherwise, it must
3689 * contain valid non-negative timestamp delta (presentation time of a frame
3690 * must not lie in the past).
3691 *
3692 * This delay represents the difference between decoding and presentation
3693 * time of the frame.
3694 *
3695 * For example, this corresponds to H.264 dpb_output_delay.
3696 */
3697 int pts_dts_delta;
3698
3699 /**
3700 * Position of the packet in file.
3701 *
3702 * Analogous to cur_frame_pts/dts
3703 */
3704 int64_t cur_frame_pos[AV_PARSER_PTS_NB];
3705
3706 /**
3707 * Byte position of currently parsed frame in stream.
3708 */
3709 int64_t pos;
3710
3711 /**
3712 * Previous frame byte position.
3713 */
3714 int64_t last_pos;
3715} AVCodecParserContext;
3716
3717typedef struct AVCodecParser {
3718 int codec_ids[5]; /* several codec IDs are permitted */
3719 int priv_data_size;
3720 int (*parser_init)(AVCodecParserContext *s);
3721 int (*parser_parse)(AVCodecParserContext *s,
3722 AVCodecContext *avctx,
3723 const uint8_t **poutbuf, int *poutbuf_size,
3724 const uint8_t *buf, int buf_size);
3725 void (*parser_close)(AVCodecParserContext *s);
3726 int (*split)(AVCodecContext *avctx, const uint8_t *buf, int buf_size);
3727 struct AVCodecParser *next;
3728} AVCodecParser;
3729
3730AVCodecParser *av_parser_next(AVCodecParser *c);
3731
3732void av_register_codec_parser(AVCodecParser *parser);
3733AVCodecParserContext *av_parser_init(int codec_id);
3734
3735#if LIBAVCODEC_VERSION_MAJOR < 53
3736attribute_deprecated
3737int av_parser_parse(AVCodecParserContext *s,
3738 AVCodecContext *avctx,
3739 uint8_t **poutbuf, int *poutbuf_size,
3740 const uint8_t *buf, int buf_size,
3741 int64_t pts, int64_t dts);
3742#endif
3743
3744/**
3745 * Parse a packet.
3746 *
3747 * @param s parser context.
3748 * @param avctx codec context.
3749 * @param poutbuf set to pointer to parsed buffer or NULL if not yet finished.
3750 * @param poutbuf_size set to size of parsed buffer or zero if not yet finished.
3751 * @param buf input buffer.
3752 * @param buf_size input length, to signal EOF, this should be 0 (so that the last frame can be output).
3753 * @param pts input presentation timestamp.
3754 * @param dts input decoding timestamp.
3755 * @param pos input byte position in stream.
3756 * @return the number of bytes of the input bitstream used.
3757 *
3758 * Example:
3759 * @code
3760 * while(in_len){
3761 * len = av_parser_parse2(myparser, AVCodecContext, &data, &size,
3762 * in_data, in_len,
3763 * pts, dts, pos);
3764 * in_data += len;
3765 * in_len -= len;
3766 *
3767 * if(size)
3768 * decode_frame(data, size);
3769 * }
3770 * @endcode
3771 */
3772int av_parser_parse2(AVCodecParserContext *s,
3773 AVCodecContext *avctx,
3774 uint8_t **poutbuf, int *poutbuf_size,
3775 const uint8_t *buf, int buf_size,
3776 int64_t pts, int64_t dts,
3777 int64_t pos);
3778
3779int av_parser_change(AVCodecParserContext *s,
3780 AVCodecContext *avctx,
3781 uint8_t **poutbuf, int *poutbuf_size,
3782 const uint8_t *buf, int buf_size, int keyframe);
3783void av_parser_close(AVCodecParserContext *s);
3784
3785
3786typedef struct AVBitStreamFilterContext {
3787 void *priv_data;
3788 struct AVBitStreamFilter *filter;
3789 AVCodecParserContext *parser;
3790 struct AVBitStreamFilterContext *next;
3791} AVBitStreamFilterContext;
3792
3793
3794typedef struct AVBitStreamFilter {
3795 const char *name;
3796 int priv_data_size;
3797 int (*filter)(AVBitStreamFilterContext *bsfc,
3798 AVCodecContext *avctx, const char *args,
3799 uint8_t **poutbuf, int *poutbuf_size,
3800 const uint8_t *buf, int buf_size, int keyframe);
3801 void (*close)(AVBitStreamFilterContext *bsfc);
3802 struct AVBitStreamFilter *next;
3803} AVBitStreamFilter;
3804
3805void av_register_bitstream_filter(AVBitStreamFilter *bsf);
3806AVBitStreamFilterContext *av_bitstream_filter_init(const char *name);
3807int av_bitstream_filter_filter(AVBitStreamFilterContext *bsfc,
3808 AVCodecContext *avctx, const char *args,
3809 uint8_t **poutbuf, int *poutbuf_size,
3810 const uint8_t *buf, int buf_size, int keyframe);
3811void av_bitstream_filter_close(AVBitStreamFilterContext *bsf);
3812
3813AVBitStreamFilter *av_bitstream_filter_next(AVBitStreamFilter *f);
3814
3815/* memory */
3816
3817/**
3818 * Reallocates the given block if it is not large enough, otherwise it
3819 * does nothing.
3820 *
3821 * @see av_realloc
3822 */
3823void *av_fast_realloc(void *ptr, unsigned int *size, unsigned int min_size);
3824
3825/**
3826 * Allocates a buffer, reusing the given one if large enough.
3827 *
3828 * Contrary to av_fast_realloc the current buffer contents might not be
3829 * preserved and on error the old buffer is freed, thus no special
3830 * handling to avoid memleaks is necessary.
3831 *
3832 * @param ptr pointer to pointer to already allocated buffer, overwritten with pointer to new buffer
3833 * @param size size of the buffer *ptr points to
3834 * @param min_size minimum size of *ptr buffer after returning, *ptr will be NULL and
3835 * *size 0 if an error occurred.
3836 */
3837void av_fast_malloc(void *ptr, unsigned int *size, unsigned int min_size);
3838
3839/**
3840 * Copy image 'src' to 'dst'.
3841 */
3842void av_picture_copy(AVPicture *dst, const AVPicture *src,
3843 enum PixelFormat pix_fmt, int width, int height);
3844
3845/**
3846 * Crop image top and left side.
3847 */
3848int av_picture_crop(AVPicture *dst, const AVPicture *src,
3849 enum PixelFormat pix_fmt, int top_band, int left_band);
3850
3851/**
3852 * Pad image.
3853 */
3854int av_picture_pad(AVPicture *dst, const AVPicture *src, int height, int width, enum PixelFormat pix_fmt,
3855 int padtop, int padbottom, int padleft, int padright, int *color);
3856
3857/**
3858 * Encodes extradata length to a buffer. Used by xiph codecs.
3859 *
3860 * @param s buffer to write to; must be at least (v/255+1) bytes long
3861 * @param v size of extradata in bytes
3862 * @return number of bytes written to the buffer.
3863 */
3864unsigned int av_xiphlacing(unsigned char *s, unsigned int v);
3865
3866/**
3867 * Parses str and put in width_ptr and height_ptr the detected values.
3868 *
3869 * @return 0 in case of a successful parsing, a negative value otherwise
3870 * @param[in] str the string to parse: it has to be a string in the format
3871 * <width>x<height> or a valid video frame size abbreviation.
3872 * @param[in,out] width_ptr pointer to the variable which will contain the detected
3873 * frame width value
3874 * @param[in,out] height_ptr pointer to the variable which will contain the detected
3875 * frame height value
3876 */
3877int av_parse_video_frame_size(int *width_ptr, int *height_ptr, const char *str);
3878
3879/**
3880 * Parses str and put in frame_rate the detected values.
3881 *
3882 * @return 0 in case of a successful parsing, a negative value otherwise
3883 * @param[in] str the string to parse: it has to be a string in the format
3884 * <frame_rate_num>/<frame_rate_den>, a float number or a valid video rate abbreviation
3885 * @param[in,out] frame_rate pointer to the AVRational which will contain the detected
3886 * frame rate
3887 */
3888int av_parse_video_frame_rate(AVRational *frame_rate, const char *str);
3889
3890/**
3891 * Logs a generic warning message about a missing feature. This function is
3892 * intended to be used internally by FFmpeg (libavcodec, libavformat, etc.)
3893 * only, and would normally not be used by applications.
3894 * @param[in] avc a pointer to an arbitrary struct of which the first field is
3895 * a pointer to an AVClass struct
3896 * @param[in] feature string containing the name of the missing feature
3897 * @param[in] want_sample indicates if samples are wanted which exhibit this feature.
3898 * If want_sample is non-zero, additional verbage will be added to the log
3899 * message which tells the user how to report samples to the development
3900 * mailing list.
3901 */
3902void av_log_missing_feature(void *avc, const char *feature, int want_sample);
3903
3904/**
3905 * Logs a generic warning message asking for a sample. This function is
3906 * intended to be used internally by FFmpeg (libavcodec, libavformat, etc.)
3907 * only, and would normally not be used by applications.
3908 * @param[in] avc a pointer to an arbitrary struct of which the first field is
3909 * a pointer to an AVClass struct
3910 * @param[in] msg string containing an optional message, or NULL if no message
3911 */
3912void av_log_ask_for_sample(void *avc, const char *msg);
3913
3914/**
3915 * Registers the hardware accelerator hwaccel.
3916 */
3917void av_register_hwaccel(AVHWAccel *hwaccel);
3918
3919/**
3920 * If hwaccel is NULL, returns the first registered hardware accelerator,
3921 * if hwaccel is non-NULL, returns the next registered hardware accelerator
3922 * after hwaccel, or NULL if hwaccel is the last one.
3923 */
3924AVHWAccel *av_hwaccel_next(AVHWAccel *hwaccel);
3925
3926
3927/**
3928 * Lock operation used by lockmgr
3929 */
3930enum AVLockOp {
3931 AV_LOCK_CREATE, ///< Create a mutex
3932 AV_LOCK_OBTAIN, ///< Lock the mutex
3933 AV_LOCK_RELEASE, ///< Unlock the mutex
3934 AV_LOCK_DESTROY, ///< Free mutex resources
3935};
3936
3937/**
3938 * Register a user provided lock manager supporting the operations
3939 * specified by AVLockOp. mutex points to a (void *) where the
3940 * lockmgr should store/get a pointer to a user allocated mutex. It's
3941 * NULL upon AV_LOCK_CREATE and != NULL for all other ops.
3942 *
3943 * @param cb User defined callback. Note: FFmpeg may invoke calls to this
3944 * callback during the call to av_lockmgr_register().
3945 * Thus, the application must be prepared to handle that.
3946 * If cb is set to NULL the lockmgr will be unregistered.
3947 * Also note that during unregistration the previously registered
3948 * lockmgr callback may also be invoked.
3949 */
3950int av_lockmgr_register(int (*cb)(void **mutex, enum AVLockOp op));
3951
3952#endif /* AVCODEC_AVCODEC_H */