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