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