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 module ffmpeg.libavcodec.avcodec; 22 23 24 25 import std.stdint; 26 import core.vararg; 27 28 //#include <errno.h> 29 import ffmpeg.libavutil.samplefmt; 30 //#include "libavutil/attributes.h" 31 import ffmpeg.libavutil.avutil; 32 import ffmpeg.libavutil.buffer; 33 //#include "libavutil/cpu.h" 34 import ffmpeg.libavutil.channel_layout; 35 import ffmpeg.libavutil.dict; 36 import ffmpeg.libavutil.frame; 37 import ffmpeg.libavutil.log; 38 import ffmpeg.libavutil.pixfmt; 39 import ffmpeg.libavutil.rational; 40 41 import ffmpeg.libavcodec.avcodec_version; 42 43 @nogc nothrow extern(C): 44 45 /** 46 * @defgroup libavc Encoding/Decoding Library 47 * @{ 48 * 49 * @defgroup lavc_decoding Decoding 50 * @{ 51 * @} 52 * 53 * @defgroup lavc_encoding Encoding 54 * @{ 55 * @} 56 * 57 * @defgroup lavc_codec Codecs 58 * @{ 59 * @defgroup lavc_codec_native Native Codecs 60 * @{ 61 * @} 62 * @defgroup lavc_codec_wrappers External library wrappers 63 * @{ 64 * @} 65 * @defgroup lavc_codec_hwaccel Hardware Accelerators bridge 66 * @{ 67 * @} 68 * @} 69 * @defgroup lavc_internal Internal 70 * @{ 71 * @} 72 * @} 73 */ 74 75 /** 76 * @ingroup libavc 77 * @defgroup lavc_encdec send/receive encoding and decoding API overview 78 * @{ 79 * 80 * The avcodec_send_packet()/avcodec_receive_frame()/avcodec_send_frame()/ 81 * avcodec_receive_packet() functions provide an encode/decode API, which 82 * decouples input and output. 83 * 84 * The API is very similar for encoding/decoding and audio/video, and works as 85 * follows: 86 * - Set up and open the AVCodecContext as usual. 87 * - Send valid input: 88 * - For decoding, call avcodec_send_packet() to give the decoder raw 89 * compressed data in an AVPacket. 90 * - For encoding, call avcodec_send_frame() to give the decoder an AVFrame 91 * containing uncompressed audio or video. 92 * In both cases, it is recommended that AVPackets and AVFrames are 93 * refcounted, or libavcodec might have to copy the input data. (libavformat 94 * always returns refcounted AVPackets, and av_frame_get_buffer() allocates 95 * refcounted AVFrames.) 96 * - Receive output in a loop. Periodically call one of the avcodec_receive_*() 97 * functions and process their output: 98 * - For decoding, call avcodec_receive_frame(). On success, it will return 99 * an AVFrame containing uncompressed audio or video data. 100 * - For encoding, call avcodec_receive_packet(). On success, it will return 101 * an AVPacket with a compressed frame. 102 * Repeat this call until it returns AVERROR(EAGAIN) or an error. The 103 * AVERROR(EAGAIN) return value means that new input data is required to 104 * return new output. In this case, continue with sending input. For each 105 * input frame/packet, the codec will typically return 1 output frame/packet, 106 * but it can also be 0 or more than 1. 107 * 108 * At the beginning of decoding or encoding, the codec might accept multiple 109 * input frames/packets without returning a frame, until its internal buffers 110 * are filled. This situation is handled transparently if you follow the steps 111 * outlined above. 112 * 113 * End of stream situations. These require "flushing" (aka draining) the codec, 114 * as the codec might buffer multiple frames or packets internally for 115 * performance or out of necessity (consider B-frames). 116 * This is handled as follows: 117 * - Instead of valid input, send NULL to the avcodec_send_packet() (decoding) 118 * or avcodec_send_frame() (encoding) functions. This will enter draining 119 * mode. 120 * - Call avcodec_receive_frame() (decoding) or avcodec_receive_packet() 121 * (encoding) in a loop until AVERROR_EOF is returned. The functions will 122 * not return AVERROR(EAGAIN), unless you forgot to enter draining mode. 123 * - Before decoding can be resumed again, the codec has to be reset with 124 * avcodec_flush_buffers(). 125 * 126 * Using the API as outlined above is highly recommended. But it is also 127 * possible to call functions outside of this rigid schema. For example, you can 128 * call avcodec_send_packet() repeatedly without calling 129 * avcodec_receive_frame(). In this case, avcodec_send_packet() will succeed 130 * until the codec's internal buffer has been filled up (which is typically of 131 * size 1 per output frame, after initial input), and then reject input with 132 * AVERROR(EAGAIN). Once it starts rejecting input, you have no choice but to 133 * read at least some output. 134 * 135 * Not all codecs will follow a rigid and predictable dataflow; the only 136 * guarantee is that an AVERROR(EAGAIN) return value on a send/receive call on 137 * one end implies that a receive/send call on the other end will succeed. In 138 * general, no codec will permit unlimited buffering of input or output. 139 * 140 * This API replaces the following legacy functions: 141 * - avcodec_decode_video2() and avcodec_decode_audio4(): 142 * Use avcodec_send_packet() to feed input to the decoder, then use 143 * avcodec_receive_frame() to receive decoded frames after each packet. 144 * Unlike with the old video decoding API, multiple frames might result from 145 * a packet. For audio, splitting the input packet into frames by partially 146 * decoding packets becomes transparent to the API user. You never need to 147 * feed an AVPacket to the API twice. 148 * Additionally, sending a flush/draining packet is required only once. 149 * - avcodec_encode_video2()/avcodec_encode_audio2(): 150 * Use avcodec_send_frame() to feed input to the encoder, then use 151 * avcodec_receive_packet() to receive encoded packets. 152 * Providing user-allocated buffers for avcodec_receive_packet() is not 153 * possible. 154 * - The new API does not handle subtitles yet. 155 * 156 * Mixing new and old function calls on the same AVCodecContext is not allowed, 157 * and will result in undefined behavior. 158 * 159 * Some codecs might require using the new API; using the old API will return 160 * an error when calling it. 161 * @} 162 */ 163 164 /** 165 * @defgroup lavc_core Core functions/structures. 166 * @ingroup libavc 167 * 168 * Basic definitions, functions for querying libavcodec capabilities, 169 * allocating core structures, etc. 170 * @{ 171 */ 172 173 174 /** 175 * Identify the syntax and semantics of the bitstream. 176 * The principle is roughly: 177 * Two decoders with the same ID can decode the same streams. 178 * Two encoders with the same ID can encode compatible streams. 179 * There may be slight deviations from the principle due to implementation 180 * details. 181 * 182 * If you add a codec ID to this list, add it so that 183 * 1. no value of an existing codec ID changes (that would break ABI), 184 * 2. it is as close as possible to similar codecs 185 * 186 * After adding new codec IDs, do not forget to add an entry to the codec 187 * descriptor list and bump libavcodec minor version. 188 */ 189 enum AVCodecID { 190 AV_CODEC_ID_NONE, 191 192 /* video codecs */ 193 AV_CODEC_ID_MPEG1VIDEO, 194 AV_CODEC_ID_MPEG2VIDEO, ///< preferred ID for MPEG-1/2 video decoding 195 //if(FF_API_XVMC) { - Always assume XVMC is available 196 AV_CODEC_ID_MPEG2VIDEO_XVMC, 197 //} 198 AV_CODEC_ID_H261, 199 AV_CODEC_ID_H263, 200 AV_CODEC_ID_RV10, 201 AV_CODEC_ID_RV20, 202 AV_CODEC_ID_MJPEG, 203 AV_CODEC_ID_MJPEGB, 204 AV_CODEC_ID_LJPEG, 205 AV_CODEC_ID_SP5X, 206 AV_CODEC_ID_JPEGLS, 207 AV_CODEC_ID_MPEG4, 208 AV_CODEC_ID_RAWVIDEO, 209 AV_CODEC_ID_MSMPEG4V1, 210 AV_CODEC_ID_MSMPEG4V2, 211 AV_CODEC_ID_MSMPEG4V3, 212 AV_CODEC_ID_WMV1, 213 AV_CODEC_ID_WMV2, 214 AV_CODEC_ID_H263P, 215 AV_CODEC_ID_H263I, 216 AV_CODEC_ID_FLV1, 217 AV_CODEC_ID_SVQ1, 218 AV_CODEC_ID_SVQ3, 219 AV_CODEC_ID_DVVIDEO, 220 AV_CODEC_ID_HUFFYUV, 221 AV_CODEC_ID_CYUV, 222 AV_CODEC_ID_H264, 223 AV_CODEC_ID_INDEO3, 224 AV_CODEC_ID_VP3, 225 AV_CODEC_ID_THEORA, 226 AV_CODEC_ID_ASV1, 227 AV_CODEC_ID_ASV2, 228 AV_CODEC_ID_FFV1, 229 AV_CODEC_ID_4XM, 230 AV_CODEC_ID_VCR1, 231 AV_CODEC_ID_CLJR, 232 AV_CODEC_ID_MDEC, 233 AV_CODEC_ID_ROQ, 234 AV_CODEC_ID_INTERPLAY_VIDEO, 235 AV_CODEC_ID_XAN_WC3, 236 AV_CODEC_ID_XAN_WC4, 237 AV_CODEC_ID_RPZA, 238 AV_CODEC_ID_CINEPAK, 239 AV_CODEC_ID_WS_VQA, 240 AV_CODEC_ID_MSRLE, 241 AV_CODEC_ID_MSVIDEO1, 242 AV_CODEC_ID_IDCIN, 243 AV_CODEC_ID_8BPS, 244 AV_CODEC_ID_SMC, 245 AV_CODEC_ID_FLIC, 246 AV_CODEC_ID_TRUEMOTION1, 247 AV_CODEC_ID_VMDVIDEO, 248 AV_CODEC_ID_MSZH, 249 AV_CODEC_ID_ZLIB, 250 AV_CODEC_ID_QTRLE, 251 AV_CODEC_ID_TSCC, 252 AV_CODEC_ID_ULTI, 253 AV_CODEC_ID_QDRAW, 254 AV_CODEC_ID_VIXL, 255 AV_CODEC_ID_QPEG, 256 AV_CODEC_ID_PNG, 257 AV_CODEC_ID_PPM, 258 AV_CODEC_ID_PBM, 259 AV_CODEC_ID_PGM, 260 AV_CODEC_ID_PGMYUV, 261 AV_CODEC_ID_PAM, 262 AV_CODEC_ID_FFVHUFF, 263 AV_CODEC_ID_RV30, 264 AV_CODEC_ID_RV40, 265 AV_CODEC_ID_VC1, 266 AV_CODEC_ID_WMV3, 267 AV_CODEC_ID_LOCO, 268 AV_CODEC_ID_WNV1, 269 AV_CODEC_ID_AASC, 270 AV_CODEC_ID_INDEO2, 271 AV_CODEC_ID_FRAPS, 272 AV_CODEC_ID_TRUEMOTION2, 273 AV_CODEC_ID_BMP, 274 AV_CODEC_ID_CSCD, 275 AV_CODEC_ID_MMVIDEO, 276 AV_CODEC_ID_ZMBV, 277 AV_CODEC_ID_AVS, 278 AV_CODEC_ID_SMACKVIDEO, 279 AV_CODEC_ID_NUV, 280 AV_CODEC_ID_KMVC, 281 AV_CODEC_ID_FLASHSV, 282 AV_CODEC_ID_CAVS, 283 AV_CODEC_ID_JPEG2000, 284 AV_CODEC_ID_VMNC, 285 AV_CODEC_ID_VP5, 286 AV_CODEC_ID_VP6, 287 AV_CODEC_ID_VP6F, 288 AV_CODEC_ID_TARGA, 289 AV_CODEC_ID_DSICINVIDEO, 290 AV_CODEC_ID_TIERTEXSEQVIDEO, 291 AV_CODEC_ID_TIFF, 292 AV_CODEC_ID_GIF, 293 AV_CODEC_ID_DXA, 294 AV_CODEC_ID_DNXHD, 295 AV_CODEC_ID_THP, 296 AV_CODEC_ID_SGI, 297 AV_CODEC_ID_C93, 298 AV_CODEC_ID_BETHSOFTVID, 299 AV_CODEC_ID_PTX, 300 AV_CODEC_ID_TXD, 301 AV_CODEC_ID_VP6A, 302 AV_CODEC_ID_AMV, 303 AV_CODEC_ID_VB, 304 AV_CODEC_ID_PCX, 305 AV_CODEC_ID_SUNRAST, 306 AV_CODEC_ID_INDEO4, 307 AV_CODEC_ID_INDEO5, 308 AV_CODEC_ID_MIMIC, 309 AV_CODEC_ID_RL2, 310 AV_CODEC_ID_ESCAPE124, 311 AV_CODEC_ID_DIRAC, 312 AV_CODEC_ID_BFI, 313 AV_CODEC_ID_CMV, 314 AV_CODEC_ID_MOTIONPIXELS, 315 AV_CODEC_ID_TGV, 316 AV_CODEC_ID_TGQ, 317 AV_CODEC_ID_TQI, 318 AV_CODEC_ID_AURA, 319 AV_CODEC_ID_AURA2, 320 AV_CODEC_ID_V210X, 321 AV_CODEC_ID_TMV, 322 AV_CODEC_ID_V210, 323 AV_CODEC_ID_DPX, 324 AV_CODEC_ID_MAD, 325 AV_CODEC_ID_FRWU, 326 AV_CODEC_ID_FLASHSV2, 327 AV_CODEC_ID_CDGRAPHICS, 328 AV_CODEC_ID_R210, 329 AV_CODEC_ID_ANM, 330 AV_CODEC_ID_BINKVIDEO, 331 AV_CODEC_ID_IFF_ILBM, 332 //#define AV_CODEC_ID_IFF_BYTERUN1 AV_CODEC_ID_IFF_ILBM 333 AV_CODEC_ID_KGV1, 334 AV_CODEC_ID_YOP, 335 AV_CODEC_ID_VP8, 336 AV_CODEC_ID_PICTOR, 337 AV_CODEC_ID_ANSI, 338 AV_CODEC_ID_A64_MULTI, 339 AV_CODEC_ID_A64_MULTI5, 340 AV_CODEC_ID_R10K, 341 AV_CODEC_ID_MXPEG, 342 AV_CODEC_ID_LAGARITH, 343 AV_CODEC_ID_PRORES, 344 AV_CODEC_ID_JV, 345 AV_CODEC_ID_DFA, 346 AV_CODEC_ID_WMV3IMAGE, 347 AV_CODEC_ID_VC1IMAGE, 348 AV_CODEC_ID_UTVIDEO, 349 AV_CODEC_ID_BMV_VIDEO, 350 AV_CODEC_ID_VBLE, 351 AV_CODEC_ID_DXTORY, 352 AV_CODEC_ID_V410, 353 AV_CODEC_ID_XWD, 354 AV_CODEC_ID_CDXL, 355 AV_CODEC_ID_XBM, 356 AV_CODEC_ID_ZEROCODEC, 357 AV_CODEC_ID_MSS1, 358 AV_CODEC_ID_MSA1, 359 AV_CODEC_ID_TSCC2, 360 AV_CODEC_ID_MTS2, 361 AV_CODEC_ID_CLLC, 362 AV_CODEC_ID_MSS2, 363 AV_CODEC_ID_VP9, 364 AV_CODEC_ID_AIC, 365 AV_CODEC_ID_ESCAPE130, 366 AV_CODEC_ID_G2M, 367 AV_CODEC_ID_WEBP, 368 AV_CODEC_ID_HNM4_VIDEO, 369 AV_CODEC_ID_HEVC, 370 //#define AV_CODEC_ID_H265 AV_CODEC_ID_HEVC 371 AV_CODEC_ID_FIC, 372 AV_CODEC_ID_ALIAS_PIX, 373 AV_CODEC_ID_BRENDER_PIX, 374 AV_CODEC_ID_PAF_VIDEO, 375 AV_CODEC_ID_EXR, 376 AV_CODEC_ID_VP7, 377 AV_CODEC_ID_SANM, 378 AV_CODEC_ID_SGIRLE, 379 AV_CODEC_ID_MVC1, 380 AV_CODEC_ID_MVC2, 381 AV_CODEC_ID_HQX, 382 AV_CODEC_ID_TDSC, 383 AV_CODEC_ID_HQ_HQA, 384 AV_CODEC_ID_HAP, 385 AV_CODEC_ID_DDS, 386 AV_CODEC_ID_DXV, 387 AV_CODEC_ID_SCREENPRESSO, 388 AV_CODEC_ID_RSCC, 389 390 AV_CODEC_ID_Y41P = 0x8000, 391 AV_CODEC_ID_AVRP, 392 AV_CODEC_ID_012V, 393 AV_CODEC_ID_AVUI, 394 AV_CODEC_ID_AYUV, 395 AV_CODEC_ID_TARGA_Y216, 396 AV_CODEC_ID_V308, 397 AV_CODEC_ID_V408, 398 AV_CODEC_ID_YUV4, 399 AV_CODEC_ID_AVRN, 400 AV_CODEC_ID_CPIA, 401 AV_CODEC_ID_XFACE, 402 AV_CODEC_ID_SNOW, 403 AV_CODEC_ID_SMVJPEG, 404 AV_CODEC_ID_APNG, 405 AV_CODEC_ID_DAALA, 406 AV_CODEC_ID_CFHD, 407 AV_CODEC_ID_TRUEMOTION2RT, 408 AV_CODEC_ID_M101, 409 AV_CODEC_ID_MAGICYUV, 410 AV_CODEC_ID_SHEERVIDEO, 411 AV_CODEC_ID_YLC, 412 413 /* various PCM "codecs" */ 414 AV_CODEC_ID_FIRST_AUDIO = 0x10000, ///< A dummy id pointing at the start of audio codecs 415 AV_CODEC_ID_PCM_S16LE = 0x10000, 416 AV_CODEC_ID_PCM_S16BE, 417 AV_CODEC_ID_PCM_U16LE, 418 AV_CODEC_ID_PCM_U16BE, 419 AV_CODEC_ID_PCM_S8, 420 AV_CODEC_ID_PCM_U8, 421 AV_CODEC_ID_PCM_MULAW, 422 AV_CODEC_ID_PCM_ALAW, 423 AV_CODEC_ID_PCM_S32LE, 424 AV_CODEC_ID_PCM_S32BE, 425 AV_CODEC_ID_PCM_U32LE, 426 AV_CODEC_ID_PCM_U32BE, 427 AV_CODEC_ID_PCM_S24LE, 428 AV_CODEC_ID_PCM_S24BE, 429 AV_CODEC_ID_PCM_U24LE, 430 AV_CODEC_ID_PCM_U24BE, 431 AV_CODEC_ID_PCM_S24DAUD, 432 AV_CODEC_ID_PCM_ZORK, 433 AV_CODEC_ID_PCM_S16LE_PLANAR, 434 AV_CODEC_ID_PCM_DVD, 435 AV_CODEC_ID_PCM_F32BE, 436 AV_CODEC_ID_PCM_F32LE, 437 AV_CODEC_ID_PCM_F64BE, 438 AV_CODEC_ID_PCM_F64LE, 439 AV_CODEC_ID_PCM_BLURAY, 440 AV_CODEC_ID_PCM_LXF, 441 AV_CODEC_ID_S302M, 442 AV_CODEC_ID_PCM_S8_PLANAR, 443 AV_CODEC_ID_PCM_S24LE_PLANAR, 444 AV_CODEC_ID_PCM_S32LE_PLANAR, 445 AV_CODEC_ID_PCM_S16BE_PLANAR, 446 /* new PCM "codecs" should be added right below this line starting with 447 * an explicit value of for example 0x10800 448 */ 449 450 /* various ADPCM codecs */ 451 AV_CODEC_ID_ADPCM_IMA_QT = 0x11000, 452 AV_CODEC_ID_ADPCM_IMA_WAV, 453 AV_CODEC_ID_ADPCM_IMA_DK3, 454 AV_CODEC_ID_ADPCM_IMA_DK4, 455 AV_CODEC_ID_ADPCM_IMA_WS, 456 AV_CODEC_ID_ADPCM_IMA_SMJPEG, 457 AV_CODEC_ID_ADPCM_MS, 458 AV_CODEC_ID_ADPCM_4XM, 459 AV_CODEC_ID_ADPCM_XA, 460 AV_CODEC_ID_ADPCM_ADX, 461 AV_CODEC_ID_ADPCM_EA, 462 AV_CODEC_ID_ADPCM_G726, 463 AV_CODEC_ID_ADPCM_CT, 464 AV_CODEC_ID_ADPCM_SWF, 465 AV_CODEC_ID_ADPCM_YAMAHA, 466 AV_CODEC_ID_ADPCM_SBPRO_4, 467 AV_CODEC_ID_ADPCM_SBPRO_3, 468 AV_CODEC_ID_ADPCM_SBPRO_2, 469 AV_CODEC_ID_ADPCM_THP, 470 AV_CODEC_ID_ADPCM_IMA_AMV, 471 AV_CODEC_ID_ADPCM_EA_R1, 472 AV_CODEC_ID_ADPCM_EA_R3, 473 AV_CODEC_ID_ADPCM_EA_R2, 474 AV_CODEC_ID_ADPCM_IMA_EA_SEAD, 475 AV_CODEC_ID_ADPCM_IMA_EA_EACS, 476 AV_CODEC_ID_ADPCM_EA_XAS, 477 AV_CODEC_ID_ADPCM_EA_MAXIS_XA, 478 AV_CODEC_ID_ADPCM_IMA_ISS, 479 AV_CODEC_ID_ADPCM_G722, 480 AV_CODEC_ID_ADPCM_IMA_APC, 481 AV_CODEC_ID_ADPCM_VIMA, 482 //#if FF_API_VIMA_DECODER // - Always assume VIMA is available 483 AV_CODEC_ID_VIMA = AV_CODEC_ID_ADPCM_VIMA, 484 //#endif 485 486 AV_CODEC_ID_ADPCM_AFC = 0x11800, 487 AV_CODEC_ID_ADPCM_IMA_OKI, 488 AV_CODEC_ID_ADPCM_DTK, 489 AV_CODEC_ID_ADPCM_IMA_RAD, 490 AV_CODEC_ID_ADPCM_G726LE, 491 AV_CODEC_ID_ADPCM_THP_LE, 492 AV_CODEC_ID_ADPCM_PSX, 493 AV_CODEC_ID_ADPCM_AICA, 494 AV_CODEC_ID_ADPCM_IMA_DAT4, 495 AV_CODEC_ID_ADPCM_MTAF, 496 497 /* AMR */ 498 AV_CODEC_ID_AMR_NB = 0x12000, 499 AV_CODEC_ID_AMR_WB, 500 501 /* RealAudio codecs*/ 502 AV_CODEC_ID_RA_144 = 0x13000, 503 AV_CODEC_ID_RA_288, 504 505 /* various DPCM codecs */ 506 AV_CODEC_ID_ROQ_DPCM = 0x14000, 507 AV_CODEC_ID_INTERPLAY_DPCM, 508 AV_CODEC_ID_XAN_DPCM, 509 AV_CODEC_ID_SOL_DPCM, 510 511 AV_CODEC_ID_SDX2_DPCM = 0x14800, 512 513 /* audio codecs */ 514 AV_CODEC_ID_MP2 = 0x15000, 515 AV_CODEC_ID_MP3, ///< preferred ID for decoding MPEG audio layer 1, 2 or 3 516 AV_CODEC_ID_AAC, 517 AV_CODEC_ID_AC3, 518 AV_CODEC_ID_DTS, 519 AV_CODEC_ID_VORBIS, 520 AV_CODEC_ID_DVAUDIO, 521 AV_CODEC_ID_WMAV1, 522 AV_CODEC_ID_WMAV2, 523 AV_CODEC_ID_MACE3, 524 AV_CODEC_ID_MACE6, 525 AV_CODEC_ID_VMDAUDIO, 526 AV_CODEC_ID_FLAC, 527 AV_CODEC_ID_MP3ADU, 528 AV_CODEC_ID_MP3ON4, 529 AV_CODEC_ID_SHORTEN, 530 AV_CODEC_ID_ALAC, 531 AV_CODEC_ID_WESTWOOD_SND1, 532 AV_CODEC_ID_GSM, ///< as in Berlin toast format 533 AV_CODEC_ID_QDM2, 534 AV_CODEC_ID_COOK, 535 AV_CODEC_ID_TRUESPEECH, 536 AV_CODEC_ID_TTA, 537 AV_CODEC_ID_SMACKAUDIO, 538 AV_CODEC_ID_QCELP, 539 AV_CODEC_ID_WAVPACK, 540 AV_CODEC_ID_DSICINAUDIO, 541 AV_CODEC_ID_IMC, 542 AV_CODEC_ID_MUSEPACK7, 543 AV_CODEC_ID_MLP, 544 AV_CODEC_ID_GSM_MS, /* as found in WAV */ 545 AV_CODEC_ID_ATRAC3, 546 //#if FF_API_VOXWARE // - Always assume VOXWARE is available 547 AV_CODEC_ID_VOXWARE, 548 //#endif 549 AV_CODEC_ID_APE, 550 AV_CODEC_ID_NELLYMOSER, 551 AV_CODEC_ID_MUSEPACK8, 552 AV_CODEC_ID_SPEEX, 553 AV_CODEC_ID_WMAVOICE, 554 AV_CODEC_ID_WMAPRO, 555 AV_CODEC_ID_WMALOSSLESS, 556 AV_CODEC_ID_ATRAC3P, 557 AV_CODEC_ID_EAC3, 558 AV_CODEC_ID_SIPR, 559 AV_CODEC_ID_MP1, 560 AV_CODEC_ID_TWINVQ, 561 AV_CODEC_ID_TRUEHD, 562 AV_CODEC_ID_MP4ALS, 563 AV_CODEC_ID_ATRAC1, 564 AV_CODEC_ID_BINKAUDIO_RDFT, 565 AV_CODEC_ID_BINKAUDIO_DCT, 566 AV_CODEC_ID_AAC_LATM, 567 AV_CODEC_ID_QDMC, 568 AV_CODEC_ID_CELT, 569 AV_CODEC_ID_G723_1, 570 AV_CODEC_ID_G729, 571 AV_CODEC_ID_8SVX_EXP, 572 AV_CODEC_ID_8SVX_FIB, 573 AV_CODEC_ID_BMV_AUDIO, 574 AV_CODEC_ID_RALF, 575 AV_CODEC_ID_IAC, 576 AV_CODEC_ID_ILBC, 577 AV_CODEC_ID_OPUS, 578 AV_CODEC_ID_COMFORT_NOISE, 579 AV_CODEC_ID_TAK, 580 AV_CODEC_ID_METASOUND, 581 AV_CODEC_ID_PAF_AUDIO, 582 AV_CODEC_ID_ON2AVC, 583 AV_CODEC_ID_DSS_SP, 584 585 AV_CODEC_ID_FFWAVESYNTH = 0x15800, 586 AV_CODEC_ID_SONIC, 587 AV_CODEC_ID_SONIC_LS, 588 AV_CODEC_ID_EVRC, 589 AV_CODEC_ID_SMV, 590 AV_CODEC_ID_DSD_LSBF, 591 AV_CODEC_ID_DSD_MSBF, 592 AV_CODEC_ID_DSD_LSBF_PLANAR, 593 AV_CODEC_ID_DSD_MSBF_PLANAR, 594 AV_CODEC_ID_4GV, 595 AV_CODEC_ID_INTERPLAY_ACM, 596 AV_CODEC_ID_XMA1, 597 AV_CODEC_ID_XMA2, 598 AV_CODEC_ID_DST, 599 600 /* subtitle codecs */ 601 AV_CODEC_ID_FIRST_SUBTITLE = 0x17000, ///< A dummy ID pointing at the start of subtitle codecs. 602 AV_CODEC_ID_DVD_SUBTITLE = 0x17000, 603 AV_CODEC_ID_DVB_SUBTITLE, 604 AV_CODEC_ID_TEXT, ///< raw UTF-8 text 605 AV_CODEC_ID_XSUB, 606 AV_CODEC_ID_SSA, 607 AV_CODEC_ID_MOV_TEXT, 608 AV_CODEC_ID_HDMV_PGS_SUBTITLE, 609 AV_CODEC_ID_DVB_TELETEXT, 610 AV_CODEC_ID_SRT, 611 612 AV_CODEC_ID_MICRODVD = 0x17800, 613 AV_CODEC_ID_EIA_608, 614 AV_CODEC_ID_JACOSUB, 615 AV_CODEC_ID_SAMI, 616 AV_CODEC_ID_REALTEXT, 617 AV_CODEC_ID_STL, 618 AV_CODEC_ID_SUBVIEWER1, 619 AV_CODEC_ID_SUBVIEWER, 620 AV_CODEC_ID_SUBRIP, 621 AV_CODEC_ID_WEBVTT, 622 AV_CODEC_ID_MPL2, 623 AV_CODEC_ID_VPLAYER, 624 AV_CODEC_ID_PJS, 625 AV_CODEC_ID_ASS, 626 AV_CODEC_ID_HDMV_TEXT_SUBTITLE, 627 628 /* other specific kind of codecs (generally used for attachments) */ 629 AV_CODEC_ID_FIRST_UNKNOWN = 0x18000, ///< A dummy ID pointing at the start of various fake codecs. 630 AV_CODEC_ID_TTF = 0x18000, 631 632 AV_CODEC_ID_BINTEXT = 0x18800, 633 AV_CODEC_ID_XBIN, 634 AV_CODEC_ID_IDF, 635 AV_CODEC_ID_OTF, 636 AV_CODEC_ID_SMPTE_KLV, 637 AV_CODEC_ID_DVD_NAV, 638 AV_CODEC_ID_TIMED_ID3, 639 AV_CODEC_ID_BIN_DATA, 640 641 642 AV_CODEC_ID_PROBE = 0x19000, ///< codec_id is not known (like AV_CODEC_ID_NONE) but lavf should attempt to identify it 643 644 AV_CODEC_ID_MPEG2TS = 0x20000, /**< _FAKE_ codec to indicate a raw MPEG-2 TS 645 * stream (only used by libavformat) */ 646 AV_CODEC_ID_MPEG4SYSTEMS = 0x20001, /**< _FAKE_ codec to indicate a MPEG-4 Systems 647 * stream (only used by libavformat) */ 648 AV_CODEC_ID_FFMETADATA = 0x21000, ///< Dummy codec for streams containing only metadata information. 649 AV_CODEC_ID_WRAPPED_AVFRAME = 0x21001, ///< Passthrough codec, AVFrames wrapped in AVPacket 650 } 651 652 /** 653 * This struct describes the properties of a single codec described by an 654 * AVCodecID. 655 * @see avcodec_get_descriptor() 656 */ 657 struct AVCodecDescriptor { 658 AVCodecID id; 659 AVMediaType type; 660 /** 661 * Name of the codec described by this descriptor. It is non-empty and 662 * unique for each codec descriptor. It should contain alphanumeric 663 * characters and '_' only. 664 */ 665 const char *name; 666 /** 667 * A more descriptive name for this codec. May be NULL. 668 */ 669 const char *long_name; 670 /** 671 * Codec properties, a combination of AV_CODEC_PROP_* flags. 672 */ 673 int props; 674 /** 675 * MIME type(s) associated with the codec. 676 * May be NULL; if not, a NULL-terminated array of MIME types. 677 * The first item is always non-NULL and is the preferred MIME type. 678 */ 679 const char *mime_types; 680 /** 681 * If non-NULL, an array of profiles recognized for this codec. 682 * Terminated with FF_PROFILE_UNKNOWN. 683 */ 684 const AVProfile *profiles; 685 } 686 687 /** 688 * Codec uses only intra compression. 689 * Video codecs only. 690 */ 691 enum AV_CODEC_PROP_INTRA_ONLY = (1 << 0); 692 /** 693 * Codec supports lossy compression. Audio and video codecs only. 694 * @note a codec may support both lossy and lossless 695 * compression modes 696 */ 697 enum AV_CODEC_PROP_LOSSY = (1 << 1); 698 /** 699 * Codec supports lossless compression. Audio and video codecs only. 700 */ 701 enum AV_CODEC_PROP_LOSSLESS = (1 << 2); 702 /** 703 * Codec supports frame reordering. That is, the coded order (the order in which 704 * the encoded packets are output by the encoders / stored / input to the 705 * decoders) may be different from the presentation order of the corresponding 706 * frames. 707 * 708 * For codecs that do not have this property set, PTS and DTS should always be 709 * equal. 710 */ 711 enum AV_CODEC_PROP_REORDER = (1 << 3); 712 /** 713 * Subtitle codec is bitmap based 714 * Decoded AVSubtitle data can be read from the AVSubtitleRect->pict field. 715 */ 716 enum AV_CODEC_PROP_BITMAP_SUB = (1 << 16); 717 /** 718 * Subtitle codec is text based. 719 * Decoded AVSubtitle data can be read from the AVSubtitleRect->ass field. 720 */ 721 enum AV_CODEC_PROP_TEXT_SUB = (1 << 17); 722 723 /** 724 * @ingroup lavc_decoding 725 * Required number of additionally allocated bytes at the end of the input bitstream for decoding. 726 * This is mainly needed because some optimized bitstream readers read 727 * 32 or 64 bit at once and could read over the end.<br> 728 * Note: If the first 23 bits of the additional bytes are not 0, then damaged 729 * MPEG bitstreams could cause overread and segfault. 730 */ 731 enum AV_INPUT_BUFFER_PADDING_SIZE = 32; 732 733 /** 734 * @ingroup lavc_encoding 735 * minimum encoding buffer size 736 * Used to avoid some checks during header writing. 737 */ 738 enum AV_INPUT_BUFFER_MIN_SIZE = 16_384; 739 740 static if(FF_API_WITHOUT_PREFIX){ 741 /** 742 * @deprecated use AV_INPUT_BUFFER_PADDING_SIZE instead 743 */ 744 enum FF_INPUT_BUFFER_PADDING_SIZE = 32; 745 746 /** 747 * @deprecated use AV_INPUT_BUFFER_MIN_SIZE instead 748 */ 749 enum FF_MIN_BUFFER_SIZE = 16_384; 750 } 751 752 /** 753 * @ingroup lavc_encoding 754 * motion estimation type. 755 * @deprecated use codec private option instead 756 */ 757 static if(FF_API_MOTION_EST){ 758 enum Motion_Est_ID { 759 ME_ZERO = 1, ///< no search, that is use 0,0 vector whenever one is needed 760 ME_FULL, 761 ME_LOG, 762 ME_PHODS, 763 ME_EPZS, ///< enhanced predictive zonal search 764 ME_X1, ///< reserved for experiments 765 ME_HEX, ///< hexagon based search 766 ME_UMH, ///< uneven multi-hexagon search 767 ME_TESA, ///< transformed exhaustive search algorithm 768 ME_ITER=50, ///< iterative search 769 }; 770 } 771 772 /** 773 * @ingroup lavc_decoding 774 */ 775 enum AVDiscard{ 776 /* We leave some space between them for extensions (drop some 777 * keyframes for intra-only or drop just some bidir frames). */ 778 AVDISCARD_NONE =-16, ///< discard nothing 779 AVDISCARD_DEFAULT = 0, ///< discard useless packets like 0 size packets in avi 780 AVDISCARD_NONREF = 8, ///< discard all non reference 781 AVDISCARD_BIDIR = 16, ///< discard all bidirectional frames 782 AVDISCARD_NONINTRA= 24, ///< discard all non intra frames 783 AVDISCARD_NONKEY = 32, ///< discard all frames except keyframes 784 AVDISCARD_ALL = 48, ///< discard all 785 } 786 787 enum AVAudioServiceType { 788 AV_AUDIO_SERVICE_TYPE_MAIN = 0, 789 AV_AUDIO_SERVICE_TYPE_EFFECTS = 1, 790 AV_AUDIO_SERVICE_TYPE_VISUALLY_IMPAIRED = 2, 791 AV_AUDIO_SERVICE_TYPE_HEARING_IMPAIRED = 3, 792 AV_AUDIO_SERVICE_TYPE_DIALOGUE = 4, 793 AV_AUDIO_SERVICE_TYPE_COMMENTARY = 5, 794 AV_AUDIO_SERVICE_TYPE_EMERGENCY = 6, 795 AV_AUDIO_SERVICE_TYPE_VOICE_OVER = 7, 796 AV_AUDIO_SERVICE_TYPE_KARAOKE = 8, 797 AV_AUDIO_SERVICE_TYPE_NB , ///< Not part of ABI 798 } 799 800 /** 801 * @ingroup lavc_encoding 802 */ 803 struct RcOverride{ 804 int start_frame; 805 int end_frame; 806 int qscale; // If this is 0 then quality_factor will be used instead. 807 float quality_factor; 808 } 809 810 static if (FF_API_MAX_BFRAMES) { 811 /** 812 * @deprecated there is no libavcodec-wide limit on the number of B-frames 813 */ 814 enum FF_MAX_B_FRAMES = 16; 815 } 816 817 /* encoding support 818 These flags can be passed in AVCodecContext.flags before initialization. 819 Note: Not everything is supported yet. 820 */ 821 822 /** 823 * Allow decoders to produce frames with data planes that are not aligned 824 * to CPU requirements (e.g. due to cropping). 825 */ 826 enum AV_CODEC_FLAG_UNALIGNED = (1 << 0); 827 /** 828 * Use fixed qscale. 829 */ 830 enum AV_CODEC_FLAG_QSCALE = (1 << 1); 831 /** 832 * 4 MV per MB allowed / advanced prediction for H.263. 833 */ 834 enum AV_CODEC_FLAG_4MV = (1 << 2); 835 /** 836 * Output even those frames that might be corrupted. 837 */ 838 enum AV_CODEC_FLAG_OUTPUT_CORRUPT = (1 << 3); 839 /** 840 * Use qpel MC. 841 */ 842 enum AV_CODEC_FLAG_QPEL = (1 << 4); 843 /** 844 * Use internal 2pass ratecontrol in first pass mode. 845 */ 846 enum AV_CODEC_FLAG_PASS1 = (1 << 9); 847 /** 848 * Use internal 2pass ratecontrol in second pass mode. 849 */ 850 enum AV_CODEC_FLAG_PASS2 = (1 << 10); 851 /** 852 * loop filter. 853 */ 854 enum AV_CODEC_FLAG_LOOP_FILTER = (1 << 11); 855 /** 856 * Only decode/encode grayscale. 857 */ 858 enum AV_CODEC_FLAG_GRAY = (1 << 13); 859 /** 860 * error[?] variables will be set during encoding. 861 */ 862 enum AV_CODEC_FLAG_PSNR = (1 << 15); 863 /** 864 * Input bitstream might be truncated at a random location 865 * instead of only at frame boundaries. 866 */ 867 enum AV_CODEC_FLAG_TRUNCATED = (1 << 16); 868 /** 869 * Use interlaced DCT. 870 */ 871 enum AV_CODEC_FLAG_INTERLACED_DCT = (1 << 18); 872 /** 873 * Force low delay. 874 */ 875 enum AV_CODEC_FLAG_LOW_DELAY = (1 << 19); 876 /** 877 * Place global headers in extradata instead of every keyframe. 878 */ 879 enum AV_CODEC_FLAG_GLOBAL_HEADER = (1 << 22); 880 /** 881 * Use only bitexact stuff (except (I)DCT). 882 */ 883 enum AV_CODEC_FLAG_BITEXACT = (1 << 23); 884 /* Fx : Flag for H.263+ extra options */ 885 /** 886 * H.263 advanced intra coding / MPEG-4 AC prediction 887 */ 888 enum AV_CODEC_FLAG_AC_PRED = (1 << 24); 889 /** 890 * interlaced motion estimation 891 */ 892 enum AV_CODEC_FLAG_INTERLACED_ME = (1 << 29); 893 enum AV_CODEC_FLAG_CLOSED_GOP = (1U << 31); 894 895 /** 896 * Allow non spec compliant speedup tricks. 897 */ 898 enum AV_CODEC_FLAG2_FAST = (1 << 0); 899 /** 900 * Skip bitstream encoding. 901 */ 902 enum AV_CODEC_FLAG2_NO_OUTPUT = (1 << 2); 903 /** 904 * Place global headers at every keyframe instead of in extradata. 905 */ 906 enum AV_CODEC_FLAG2_LOCAL_HEADER = (1 << 3); 907 908 /** 909 * timecode is in drop frame format. DEPRECATED!!!! 910 */ 911 enum AV_CODEC_FLAG2_DROP_FRAME_TIMECODE = (1 << 13); 912 913 /** 914 * Input bitstream might be truncated at a packet boundaries 915 * instead of only at frame boundaries. 916 */ 917 enum AV_CODEC_FLAG2_CHUNKS = (1 << 15); 918 /** 919 * Discard cropping information from SPS. 920 */ 921 enum AV_CODEC_FLAG2_IGNORE_CROP = (1 << 16); 922 923 /** 924 * Show all frames before the first keyframe 925 */ 926 enum AV_CODEC_FLAG2_SHOW_ALL = (1 << 22); 927 /** 928 * Export motion vectors through frame side data 929 */ 930 enum AV_CODEC_FLAG2_EXPORT_MVS = (1 << 28); 931 /** 932 * Do not skip samples and export skip information as frame side data 933 */ 934 enum AV_CODEC_FLAG2_SKIP_MANUAL = (1 << 29); 935 /** 936 * Do not reset ASS ReadOrder field on flush (subtitles decoding) 937 */ 938 enum AV_CODEC_FLAG2_RO_FLUSH_NOOP = (1 << 30); 939 940 /* Unsupported options : 941 * Syntax Arithmetic coding (SAC) 942 * Reference Picture Selection 943 * Independent Segment Decoding */ 944 /* /Fx */ 945 /* codec capabilities */ 946 947 /** 948 * Decoder can use draw_horiz_band callback. 949 */ 950 enum AV_CODEC_CAP_DRAW_HORIZ_BAND = (1 << 0); 951 /** 952 * Codec uses get_buffer() for allocating buffers and supports custom allocators. 953 * If not set, it might not use get_buffer() at all or use operations that 954 * assume the buffer was allocated by avcodec_default_get_buffer. 955 */ 956 enum AV_CODEC_CAP_DR1 = (1 << 1); 957 enum AV_CODEC_CAP_TRUNCATED = (1 << 3); 958 /** 959 * Encoder or decoder requires flushing with NULL input at the end in order to 960 * give the complete and correct output. 961 * 962 * NOTE: If this flag is not set, the codec is guaranteed to never be fed with 963 * with NULL data. The user can still send NULL data to the public encode 964 * or decode function, but libavcodec will not pass it along to the codec 965 * unless this flag is set. 966 * 967 * Decoders: 968 * The decoder has a non-zero delay and needs to be fed with avpkt->data=NULL, 969 * avpkt->size=0 at the end to get the delayed data until the decoder no longer 970 * returns frames. 971 * 972 * Encoders: 973 * The encoder needs to be fed with NULL data at the end of encoding until the 974 * encoder no longer returns data. 975 * 976 * NOTE: For encoders implementing the AVCodec.encode2() function, setting this 977 * flag also means that the encoder must set the pts and duration for 978 * each output packet. If this flag is not set, the pts and duration will 979 * be determined by libavcodec from the input frame. 980 */ 981 enum AV_CODEC_CAP_DELAY = (1 << 5); 982 /** 983 * Codec can be fed a final frame with a smaller size. 984 * This can be used to prevent truncation of the last audio samples. 985 */ 986 enum AV_CODEC_CAP_SMALL_LAST_FRAME = (1 << 6); 987 988 static if (FF_API_CAP_VDPAU){ 989 /** 990 * Codec can export data for HW decoding (VDPAU). 991 */ 992 enum AV_CODEC_CAP_HWACCEL_VDPAU = (1 << 7); 993 } 994 995 /** 996 * Codec can output multiple frames per AVPacket 997 * Normally demuxers return one frame at a time, demuxers which do not do 998 * are connected to a parser to split what they return into proper frames. 999 * This flag is reserved to the very rare category of codecs which have a 1000 * bitstream that cannot be split into frames without timeconsuming 1001 * operations like full decoding. Demuxers carrying such bitstreams thus 1002 * may return multiple frames in a packet. This has many disadvantages like 1003 * prohibiting stream copy in many cases thus it should only be considered 1004 * as a last resort. 1005 */ 1006 enum AV_CODEC_CAP_SUBFRAMES = (1 << 8); 1007 /** 1008 * Codec is experimental and is thus avoided in favor of non experimental 1009 * encoders 1010 */ 1011 enum AV_CODEC_CAP_EXPERIMENTAL = (1 << 9); 1012 /** 1013 * Codec should fill in channel configuration and samplerate instead of container 1014 */ 1015 enum AV_CODEC_CAP_CHANNEL_CONF = (1 << 10); 1016 /** 1017 * Codec supports frame-level multithreading. 1018 */ 1019 enum AV_CODEC_CAP_FRAME_THREADS = (1 << 12); 1020 /** 1021 * Codec supports slice-based (or partition-based) multithreading. 1022 */ 1023 enum AV_CODEC_CAP_SLICE_THREADS = (1 << 13); 1024 /** 1025 * Codec supports changed parameters at any point. 1026 */ 1027 enum AV_CODEC_CAP_PARAM_CHANGE = (1 << 14); 1028 /** 1029 * Codec supports avctx->thread_count == 0 (auto). 1030 */ 1031 enum AV_CODEC_CAP_AUTO_THREADS = (1 << 15); 1032 /** 1033 * Audio encoder supports receiving a different number of samples in each call. 1034 */ 1035 enum AV_CODEC_CAP_VARIABLE_FRAME_SIZE= (1 << 16); 1036 /** 1037 * Codec is intra only. 1038 */ 1039 enum AV_CODEC_CAP_INTRA_ONLY = 0x40000000; 1040 /** 1041 * Codec is lossless. 1042 */ 1043 enum AV_CODEC_CAP_LOSSLESS = 0x80000000; 1044 1045 1046 static if (FF_API_WITHOUT_PREFIX) { 1047 /** 1048 * Allow decoders to produce frames with data planes that are not aligned 1049 * to CPU requirements (e.g. due to cropping). 1050 */ 1051 enum CODEC_FLAG_UNALIGNED = AV_CODEC_FLAG_UNALIGNED; 1052 enum CODEC_FLAG_QSCALE = AV_CODEC_FLAG_QSCALE; 1053 enum CODEC_FLAG_4MV = AV_CODEC_FLAG_4MV; 1054 enum CODEC_FLAG_OUTPUT_CORRUPT=AV_CODEC_FLAG_OUTPUT_CORRUPT; 1055 enum CODEC_FLAG_QPEL = AV_CODEC_FLAG_QPEL; 1056 static if (FF_API_GMC) { 1057 /** 1058 * @deprecated use the "gmc" private option of the libxvid encoder 1059 */ 1060 enum CODEC_FLAG_GMC = 0x0020; ///< Use GMC. 1061 } 1062 static if (FF_API_MV0) { 1063 /** 1064 * @deprecated use the flag "mv0" in the "mpv_flags" private option of the 1065 * mpegvideo encoders 1066 */ 1067 enum CODEC_FLAG_MV0 = 0x0040; 1068 } 1069 static if (FF_API_INPUT_PRESERVED) { 1070 /** 1071 * @deprecated passing reference-counted frames to the encoders replaces this 1072 * flag 1073 */ 1074 enum CODEC_FLAG_INPUT_PRESERVED=0x0100; 1075 } 1076 enum CODEC_FLAG_PASS1 = AV_CODEC_FLAG_PASS1; 1077 enum CODEC_FLAG_PASS2 = AV_CODEC_FLAG_PASS2; 1078 enum CODEC_FLAG_GRAY = AV_CODEC_FLAG_GRAY; 1079 static if (FF_API_EMU_EDGE) { 1080 /** 1081 * @deprecated edges are not used/required anymore. I.e. this flag is now always 1082 * set. 1083 */ 1084 enum CODEC_FLAG_EMU_EDGE = 0x4000; 1085 } 1086 enum CODEC_FLAG_PSNR = AV_CODEC_FLAG_PSNR; 1087 enum CODEC_FLAG_TRUNCATED = AV_CODEC_FLAG_TRUNCATED; 1088 1089 static if (FF_API_NORMALIZE_AQP) { 1090 /** 1091 * @deprecated use the flag "naq" in the "mpv_flags" private option of the 1092 * mpegvideo encoders 1093 */ 1094 enum CODEC_FLAG_NORMALIZE_AQP= 0x00020000; 1095 } 1096 enum CODEC_FLAG_INTERLACED_DCT=AV_CODEC_FLAG_INTERLACED_DCT; 1097 enum CODEC_FLAG_LOW_DELAY =AV_CODEC_FLAG_LOW_DELAY; 1098 enum CODEC_FLAG_GLOBAL_HEADER =AV_CODEC_FLAG_GLOBAL_HEADER; 1099 enum CODEC_FLAG_BITEXACT =AV_CODEC_FLAG_BITEXACT; 1100 enum CODEC_FLAG_AC_PRED =AV_CODEC_FLAG_AC_PRED; 1101 enum CODEC_FLAG_LOOP_FILTER = AV_CODEC_FLAG_LOOP_FILTER; 1102 enum CODEC_FLAG_INTERLACED_ME =AV_CODEC_FLAG_INTERLACED_ME; 1103 enum CODEC_FLAG_CLOSED_GOP = AV_CODEC_FLAG_CLOSED_GOP; 1104 enum CODEC_FLAG2_FAST = AV_CODEC_FLAG2_FAST; 1105 enum CODEC_FLAG2_NO_OUTPUT = AV_CODEC_FLAG2_NO_OUTPUT; 1106 enum CODEC_FLAG2_LOCAL_HEADER= AV_CODEC_FLAG2_LOCAL_HEADER; 1107 enum CODEC_FLAG2_DROP_FRAME_TIMECODE=AV_CODEC_FLAG2_DROP_FRAME_TIMECODE; 1108 enum CODEC_FLAG2_IGNORE_CROP = AV_CODEC_FLAG2_IGNORE_CROP; 1109 1110 enum CODEC_FLAG2_CHUNKS = AV_CODEC_FLAG2_CHUNKS; 1111 enum CODEC_FLAG2_SHOW_ALL = AV_CODEC_FLAG2_SHOW_ALL; 1112 enum CODEC_FLAG2_EXPORT_MVS = AV_CODEC_FLAG2_EXPORT_MVS; 1113 enum CODEC_FLAG2_SKIP_MANUAL = AV_CODEC_FLAG2_SKIP_MANUAL; 1114 1115 /* Unsupported options : 1116 * Syntax Arithmetic coding (SAC) 1117 * Reference Picture Selection 1118 * Independent Segment Decoding */ 1119 /* /Fx */ 1120 /* codec capabilities */ 1121 1122 const uint CODEC_CAP_DRAW_HORIZ_BAND = AV_CODEC_CAP_DRAW_HORIZ_BAND; ///< Decoder can use draw_horiz_band callback. 1123 /** 1124 * Codec uses get_buffer() for allocating buffers and supports custom allocators. 1125 * If not set, it might not use get_buffer() at all or use operations that 1126 * assume the buffer was allocated by avcodec_default_get_buffer. 1127 */ 1128 const uint CODEC_CAP_DR1 = AV_CODEC_CAP_DR1; 1129 const uint CODEC_CAP_TRUNCATED = AV_CODEC_CAP_TRUNCATED; 1130 //#if FF_API_XVMC // always assume XVMC 1131 /* Codec can export data for HW decoding. This flag indicates that 1132 * the codec would call get_format() with list that might contain HW accelerated 1133 * pixel formats (XvMC, VDPAU, VAAPI, etc). The application can pick any of them 1134 * including raw image format. 1135 * The application can use the passed context to determine bitstream version, 1136 * chroma format, resolution etc. 1137 */ 1138 const uint CODEC_CAP_HWACCEL = 0x0010; 1139 //#endif /* FF_API_XVMC */ 1140 /** 1141 * Encoder or decoder requires flushing with NULL input at the end in order to 1142 * give the complete and correct output. 1143 * 1144 * NOTE: If this flag is not set, the codec is guaranteed to never be fed with 1145 * with NULL data. The user can still send NULL data to the public encode 1146 * or decode function, but libavcodec will not pass it along to the codec 1147 * unless this flag is set. 1148 * 1149 * Decoders: 1150 * The decoder has a non-zero delay and needs to be fed with avpkt->data=NULL, 1151 * avpkt->size=0 at the end to get the delayed data until the decoder no longer 1152 * returns frames. 1153 * 1154 * Encoders: 1155 * The encoder needs to be fed with NULL data at the end of encoding until the 1156 * encoder no longer returns data. 1157 * 1158 * NOTE: For encoders implementing the AVCodec.encode2() function, setting this 1159 * flag also means that the encoder must set the pts and duration for 1160 * each output packet. If this flag is not set, the pts and duration will 1161 * be determined by libavcodec from the input frame. 1162 */ 1163 const uint CODEC_CAP_DELAY = AV_CODEC_CAP_DELAY; 1164 /** 1165 * Codec can be fed a final frame with a smaller size. 1166 * This can be used to prevent truncation of the last audio samples. 1167 */ 1168 const uint CODEC_CAP_SMALL_LAST_FRAME = AV_CODEC_CAP_SMALL_LAST_FRAME; 1169 static if(FF_API_CAP_VDPAU) { 1170 /** 1171 * Codec can export data for HW decoding (VDPAU). 1172 */ 1173 const uint CODEC_CAP_HWACCEL_VDPAU = AV_CODEC_CAP_HWACCEL_VDPAU; 1174 } 1175 /** 1176 * Codec can output multiple frames per AVPacket 1177 * Normally demuxers return one frame at a time, demuxers which do not do 1178 * are connected to a parser to split what they return into proper frames. 1179 * This flag is reserved to the very rare category of codecs which have a 1180 * bitstream that cannot be split into frames without timeconsuming 1181 * operations like full decoding. Demuxers carring such bitstreams thus 1182 * may return multiple frames in a packet. This has many disadvantages like 1183 * prohibiting stream copy in many cases thus it should only be considered 1184 * as a last resort. 1185 */ 1186 const uint CODEC_CAP_SUBFRAMES = AV_CODEC_CAP_SUBFRAMES; 1187 /** 1188 * Codec is experimental and is thus avoided in favor of non experimental 1189 * encoders 1190 */ 1191 const uint CODEC_CAP_EXPERIMENTAL = AV_CODEC_CAP_EXPERIMENTAL; 1192 /** 1193 * Codec should fill in channel configuration and samplerate instead of container 1194 */ 1195 const uint CODEC_CAP_CHANNEL_CONF = AV_CODEC_CAP_CHANNEL_CONF; 1196 static if(FF_API_NEG_LINESIZES) { 1197 /** 1198 * @deprecated no codecs use this capability 1199 */ 1200 const uint CODEC_CAP_NEG_LINESIZES = 0x0800; 1201 } 1202 /** 1203 * Codec supports frame-level multithreading. 1204 */ 1205 const uint CODEC_CAP_FRAME_THREADS = AV_CODEC_CAP_FRAME_THREADS; 1206 /** 1207 * Codec supports slice-based (or partition-based) multithreading. 1208 */ 1209 const uint CODEC_CAP_SLICE_THREADS = AV_CODEC_CAP_SLICE_THREADS; 1210 /** 1211 * Codec supports changed parameters at any point. 1212 */ 1213 const uint CODEC_CAP_PARAM_CHANGE = AV_CODEC_CAP_PARAM_CHANGE; 1214 /** 1215 * Codec supports avctx->thread_count == 0 (auto). 1216 */ 1217 const uint CODEC_CAP_AUTO_THREADS = AV_CODEC_CAP_AUTO_THREADS; 1218 /** 1219 * Audio encoder supports receiving a different number of samples in each call. 1220 */ 1221 const uint CODEC_CAP_VARIABLE_FRAME_SIZE = AV_CODEC_CAP_VARIABLE_FRAME_SIZE; 1222 /** 1223 * Codec is intra only. 1224 */ 1225 enum CODEC_CAP_INTRA_ONLY = AV_CODEC_CAP_INTRA_ONLY; 1226 /** 1227 * Codec is lossless. 1228 */ 1229 enum CODEC_CAP_LOSSLESS = AV_CODEC_CAP_LOSSLESS; 1230 1231 /** 1232 * HWAccel is experimental and is thus avoided in favor of non experimental 1233 * codecs 1234 */ 1235 enum HWACCEL_CODEC_CAP_EXPERIMENTAL = 0x0200; 1236 } 1237 1238 static if (FF_API_MB_TYPE) { 1239 //The following defines may change, don't expect compatibility if you use them. 1240 enum MB_TYPE_INTRA4x4 = 0x0001; 1241 enum MB_TYPE_INTRA16x16 = 0x0002; //FIXME H.264-specific 1242 enum MB_TYPE_INTRA_PCM = 0x0004; //FIXME H.264-specific 1243 enum MB_TYPE_16x16 = 0x0008; 1244 enum MB_TYPE_16x8 = 0x0010; 1245 enum MB_TYPE_8x16 = 0x0020; 1246 enum MB_TYPE_8x8 = 0x0040; 1247 enum MB_TYPE_INTERLACED = 0x0080; 1248 enum MB_TYPE_DIRECT2 = 0x0100; //FIXME 1249 enum MB_TYPE_ACPRED = 0x0200; 1250 enum MB_TYPE_GMC = 0x0400; 1251 enum MB_TYPE_SKIP = 0x0800; 1252 enum MB_TYPE_P0L0 = 0x1000; 1253 enum MB_TYPE_P1L0 = 0x2000; 1254 enum MB_TYPE_P0L1 = 0x4000; 1255 enum MB_TYPE_P1L1 = 0x8000; 1256 enum MB_TYPE_L0 = (MB_TYPE_P0L0 | MB_TYPE_P1L0); 1257 enum MB_TYPE_L1 = (MB_TYPE_P0L1 | MB_TYPE_P1L1); 1258 enum MB_TYPE_L0L1 = (MB_TYPE_L0 | MB_TYPE_L1); 1259 enum MB_TYPE_QUANT = 0x00010000; 1260 enum MB_TYPE_CBP = 0x00020000; 1261 //Note bits 24-31 are reserved for codec specific use (h264 ref0, mpeg1 0mv, ...) 1262 } 1263 1264 /** 1265 * Pan Scan area. 1266 * This specifies the area which should be displayed. 1267 * Note there may be multiple such areas for one frame. 1268 */ 1269 struct AVPanScan { 1270 /** 1271 * id 1272 * - encoding: Set by user. 1273 * - decoding: Set by libavcodec. 1274 */ 1275 int id; 1276 1277 /** 1278 * width and height in 1/16 pel 1279 * - encoding: Set by user. 1280 * - decoding: Set by libavcodec. 1281 */ 1282 int width; 1283 int height; 1284 1285 /** 1286 * position of the top left corner in 1/16 pel for up to 3 fields/frames 1287 * - encoding: Set by user. 1288 * - decoding: Set by libavcodec. 1289 */ 1290 int16_t [3][2]position; 1291 } 1292 1293 /** 1294 * This structure describes the bitrate properties of an encoded bitstream. It 1295 * roughly corresponds to a subset the VBV parameters for MPEG-2 or HRD 1296 * parameters for H.264/HEVC. 1297 */ 1298 struct AVCPBProperties { 1299 /** 1300 * Maximum bitrate of the stream, in bits per second. 1301 * Zero if unknown or unspecified. 1302 */ 1303 int max_bitrate; 1304 /** 1305 * Minimum bitrate of the stream, in bits per second. 1306 * Zero if unknown or unspecified. 1307 */ 1308 int min_bitrate; 1309 /** 1310 * Average bitrate of the stream, in bits per second. 1311 * Zero if unknown or unspecified. 1312 */ 1313 int avg_bitrate; 1314 1315 /** 1316 * The size of the buffer to which the ratecontrol is applied, in bits. 1317 * Zero if unknown or unspecified. 1318 */ 1319 int buffer_size; 1320 1321 /** 1322 * The delay between the time the packet this structure is associated with 1323 * is received and the time when it should be decoded, in periods of a 27MHz 1324 * clock. 1325 * 1326 * UINT64_MAX when unknown or unspecified. 1327 */ 1328 uint64_t vbv_delay; 1329 } 1330 1331 static if (FF_API_QSCALE_TYPE) { 1332 enum FF_QSCALE_TYPE_MPEG1 = 0; 1333 enum FF_QSCALE_TYPE_MPEG2 = 1; 1334 enum FF_QSCALE_TYPE_H264 = 2; 1335 enum FF_QSCALE_TYPE_VP56 = 3; 1336 } 1337 1338 /** 1339 * The decoder will keep a reference to the frame and may reuse it later. 1340 */ 1341 enum AV_GET_BUFFER_FLAG_REF = (1 << 0); 1342 1343 /** 1344 * @defgroup lavc_packet AVPacket 1345 * 1346 * Types and functions for working with AVPacket. 1347 * @{ 1348 */ 1349 enum AVPacketSideDataType { 1350 AV_PKT_DATA_PALETTE, 1351 AV_PKT_DATA_NEW_EXTRADATA, 1352 1353 /** 1354 * An AV_PKT_DATA_PARAM_CHANGE side data packet is laid out as follows: 1355 * @code 1356 * u32le param_flags 1357 * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT) 1358 * s32le channel_count 1359 * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT) 1360 * u64le channel_layout 1361 * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE) 1362 * s32le sample_rate 1363 * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS) 1364 * s32le width 1365 * s32le height 1366 * @endcode 1367 */ 1368 AV_PKT_DATA_PARAM_CHANGE, 1369 1370 /** 1371 * An AV_PKT_DATA_H263_MB_INFO side data packet contains a number of 1372 * structures with info about macroblocks relevant to splitting the 1373 * packet into smaller packets on macroblock edges (e.g. as for RFC 2190). 1374 * That is, it does not necessarily contain info about all macroblocks, 1375 * as long as the distance between macroblocks in the info is smaller 1376 * than the target payload size. 1377 * Each MB info structure is 12 bytes, and is laid out as follows: 1378 * @code 1379 * u32le bit offset from the start of the packet 1380 * u8 current quantizer at the start of the macroblock 1381 * u8 GOB number 1382 * u16le macroblock address within the GOB 1383 * u8 horizontal MV predictor 1384 * u8 vertical MV predictor 1385 * u8 horizontal MV predictor for block number 3 1386 * u8 vertical MV predictor for block number 3 1387 * @endcode 1388 */ 1389 AV_PKT_DATA_H263_MB_INFO, 1390 1391 /** 1392 * This side data should be associated with an audio stream and contains 1393 * ReplayGain information in form of the AVReplayGain struct. 1394 */ 1395 AV_PKT_DATA_REPLAYGAIN, 1396 1397 /** 1398 * This side data contains a 3x3 transformation matrix describing an affine 1399 * transformation that needs to be applied to the decoded video frames for 1400 * correct presentation. 1401 * 1402 * See libavutil/display.h for a detailed description of the data. 1403 */ 1404 AV_PKT_DATA_DISPLAYMATRIX, 1405 1406 /** 1407 * This side data should be associated with a video stream and contains 1408 * Stereoscopic 3D information in form of the AVStereo3D struct. 1409 */ 1410 AV_PKT_DATA_STEREO3D, 1411 1412 /** 1413 * This side data should be associated with an audio stream and corresponds 1414 * to enum AVAudioServiceType. 1415 */ 1416 AV_PKT_DATA_AUDIO_SERVICE_TYPE, 1417 1418 /** 1419 * This side data contains quality related information from the encoder. 1420 * @code 1421 * u32le quality factor of the compressed frame. Allowed range is between 1 (good) and FF_LAMBDA_MAX (bad). 1422 * u8 picture type 1423 * u8 error count 1424 * u16 reserved 1425 * u64le[error count] sum of squared differences between encoder in and output 1426 * @endcode 1427 */ 1428 AV_PKT_DATA_QUALITY_STATS, 1429 1430 /** 1431 * This side data contains an integer value representing the stream index 1432 * of a "fallback" track. A fallback track indicates an alternate 1433 * track to use when the current track can not be decoded for some reason. 1434 * e.g. no decoder available for codec. 1435 */ 1436 AV_PKT_DATA_FALLBACK_TRACK, 1437 1438 /** 1439 * This side data corresponds to the AVCPBProperties struct. 1440 */ 1441 AV_PKT_DATA_CPB_PROPERTIES, 1442 1443 /** 1444 * Recommmends skipping the specified number of samples 1445 * @code 1446 * u32le number of samples to skip from start of this packet 1447 * u32le number of samples to skip from end of this packet 1448 * u8 reason for start skip 1449 * u8 reason for end skip (0=padding silence, 1=convergence) 1450 * @endcode 1451 */ 1452 AV_PKT_DATA_SKIP_SAMPLES=70, 1453 1454 /** 1455 * An AV_PKT_DATA_JP_DUALMONO side data packet indicates that 1456 * the packet may contain "dual mono" audio specific to Japanese DTV 1457 * and if it is true, recommends only the selected channel to be used. 1458 * @code 1459 * u8 selected channels (0=mail/left, 1=sub/right, 2=both) 1460 * @endcode 1461 */ 1462 AV_PKT_DATA_JP_DUALMONO, 1463 1464 /** 1465 * A list of zero terminated key/value strings. There is no end marker for 1466 * the list, so it is required to rely on the side data size to stop. 1467 */ 1468 AV_PKT_DATA_STRINGS_METADATA, 1469 1470 /** 1471 * Subtitle event position 1472 * @code 1473 * u32le x1 1474 * u32le y1 1475 * u32le x2 1476 * u32le y2 1477 * @endcode 1478 */ 1479 AV_PKT_DATA_SUBTITLE_POSITION, 1480 1481 /** 1482 * Data found in BlockAdditional element of matroska container. There is 1483 * no end marker for the data, so it is required to rely on the side data 1484 * size to recognize the end. 8 byte id (as found in BlockAddId) followed 1485 * by data. 1486 */ 1487 AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL, 1488 1489 /** 1490 * The optional first identifier line of a WebVTT cue. 1491 */ 1492 AV_PKT_DATA_WEBVTT_IDENTIFIER, 1493 1494 /** 1495 * The optional settings (rendering instructions) that immediately 1496 * follow the timestamp specifier of a WebVTT cue. 1497 */ 1498 AV_PKT_DATA_WEBVTT_SETTINGS, 1499 1500 /** 1501 * A list of zero terminated key/value strings. There is no end marker for 1502 * the list, so it is required to rely on the side data size to stop. This 1503 * side data includes updated metadata which appeared in the stream. 1504 */ 1505 AV_PKT_DATA_METADATA_UPDATE, 1506 1507 /** 1508 * MPEGTS stream ID, this is required to pass the stream ID 1509 * information from the demuxer to the corresponding muxer. 1510 */ 1511 AV_PKT_DATA_MPEGTS_STREAM_ID, 1512 1513 /** 1514 * Mastering display metadata (based on SMPTE-2086:2014). This metadata 1515 * should be associated with a video stream and containts data in the form 1516 * of the AVMasteringDisplayMetadata struct. 1517 */ 1518 AV_PKT_DATA_MASTERING_DISPLAY_METADATA, 1519 1520 /** 1521 * The number of side data elements (in fact a bit more than it). 1522 * This is not part of the public API/ABI in the sense that it may 1523 * change when new side data types are added. 1524 * This must stay the last enum value. 1525 * If its value becomes huge, some code using it 1526 * needs to be updated as it assumes it to be smaller than other limits. 1527 */ 1528 AV_PKT_DATA_NB 1529 } 1530 1531 enum AV_PKT_DATA_QUALITY_FACTOR = AVPacketSideDataType.AV_PKT_DATA_QUALITY_STATS; //DEPRECATED 1532 1533 struct AVPacketSideData { 1534 uint8_t *data; 1535 int size; 1536 AVPacketSideDataType type; 1537 } 1538 1539 /** 1540 * This structure stores compressed data. It is typically exported by demuxers 1541 * and then passed as input to decoders, or received as output from encoders and 1542 * then passed to muxers. 1543 * 1544 * For video, it should typically contain one compressed frame. For audio it may 1545 * contain several compressed frames. Encoders are allowed to output empty 1546 * packets, with no compressed data, containing only side data 1547 * (e.g. to update some stream parameters at the end of encoding). 1548 * 1549 * AVPacket is one of the few structs in FFmpeg, whose size is a part of public 1550 * ABI. Thus it may be allocated on stack and no new fields can be added to it 1551 * without libavcodec and libavformat major bump. 1552 * 1553 * The semantics of data ownership depends on the buf field. 1554 * If it is set, the packet data is dynamically allocated and is 1555 * valid indefinitely until a call to av_packet_unref() reduces the 1556 * reference count to 0. 1557 * 1558 * If the buf field is not set av_packet_ref() would make a copy instead 1559 * of increasing the reference count. 1560 * 1561 * The side data is always allocated with av_malloc(), copied by 1562 * av_packet_ref() and freed by av_packet_unref(). 1563 * 1564 * @see av_packet_ref 1565 * @see av_packet_unref 1566 */ 1567 struct AVPacket { 1568 /** 1569 * A reference to the reference-counted buffer where the packet data is 1570 * stored. 1571 * May be NULL, then the packet data is not reference-counted. 1572 */ 1573 AVBufferRef *buf; 1574 /** 1575 * Presentation timestamp in AVStream->time_base units; the time at which 1576 * the decompressed packet will be presented to the user. 1577 * Can be AV_NOPTS_VALUE if it is not stored in the file. 1578 * pts MUST be larger or equal to dts as presentation cannot happen before 1579 * decompression, unless one wants to view hex dumps. Some formats misuse 1580 * the terms dts and pts/cts to mean something different. Such timestamps 1581 * must be converted to true pts/dts before they are stored in AVPacket. 1582 */ 1583 int64_t pts; 1584 /** 1585 * Decompression timestamp in AVStream->time_base units; the time at which 1586 * the packet is decompressed. 1587 * Can be AV_NOPTS_VALUE if it is not stored in the file. 1588 */ 1589 int64_t dts; 1590 uint8_t *data; 1591 int size; 1592 int stream_index; 1593 /** 1594 * A combination of AV_PKT_FLAG values 1595 */ 1596 int flags; 1597 /** 1598 * Additional packet data that can be provided by the container. 1599 * Packet can contain several types of side information. 1600 */ 1601 AVPacketSideData *side_data; 1602 int side_data_elems; 1603 1604 /** 1605 * Duration of this packet in AVStream->time_base units, 0 if unknown. 1606 * Equals next_pts - this_pts in presentation order. 1607 */ 1608 int64_t duration; 1609 1610 int64_t pos; ///< byte position in stream, -1 if unknown 1611 1612 static if(FF_API_CONVERGENCE_DURATION){ 1613 /** 1614 * @deprecated Same as the duration field, but as int64_t. This was required 1615 * for Matroska subtitles, whose duration values could overflow when the 1616 * duration field was still an int. 1617 */ 1618 deprecated 1619 int64_t convergence_duration; 1620 } 1621 } 1622 enum AV_PKT_FLAG_KEY = 0x0001; ///< The packet contains a keyframe 1623 enum AV_PKT_FLAG_CORRUPT = 0x0002; ///< The packet content is corrupted 1624 1625 enum AVSideDataParamChangeFlags { 1626 AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT = 0x0001, 1627 AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT = 0x0002, 1628 AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE = 0x0004, 1629 AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS = 0x0008, 1630 } 1631 /** 1632 * @} 1633 */ 1634 1635 struct AVCodecInternal; 1636 1637 enum AVFieldOrder { 1638 AV_FIELD_UNKNOWN, 1639 AV_FIELD_PROGRESSIVE, 1640 AV_FIELD_TT, //< Top coded_first, top displayed first 1641 AV_FIELD_BB, //< Bottom coded first, bottom displayed first 1642 AV_FIELD_TB, //< Top coded first, bottom displayed first 1643 AV_FIELD_BT, //< Bottom coded first, top displayed first 1644 } 1645 1646 /** 1647 * main external API structure. 1648 * New fields can be added to the end with minor version bumps. 1649 * Removal, reordering and changes to existing fields require a major 1650 * version bump. 1651 * Please use AVOptions (av_opt* / av_set/get*()) to access these fields from user 1652 * applications. 1653 * The name string for AVOptions options matches the associated command line 1654 * parameter name and can be found in libavcodec/options_table.h 1655 * The AVOption/command line parameter names differ in some cases from the C 1656 * structure field names for historic reasons or brevity. 1657 * sizeof(AVCodecContext) must not be used outside libav*. 1658 */ 1659 struct AVCodecContext { 1660 /** 1661 * information on struct for av_log 1662 * - set by avcodec_alloc_context3 1663 */ 1664 const AVClass *av_class; 1665 int log_level_offset; 1666 1667 AVMediaType codec_type; /* see AVMEDIA_TYPE_xxx */ 1668 const AVCodec *codec; 1669 static if (FF_API_CODEC_NAME) { 1670 /** 1671 * @deprecated this field is not used for anything in libavcodec 1672 */ 1673 deprecated 1674 char [32] codec_name; 1675 } 1676 AVCodecID codec_id; /* see AV_CODEC_ID_xxx */ 1677 1678 /** 1679 * fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A'). 1680 * This is used to work around some encoder bugs. 1681 * A demuxer should set this to what is stored in the field used to identify the codec. 1682 * If there are multiple such fields in a container then the demuxer should choose the one 1683 * which maximizes the information about the used codec. 1684 * If the codec tag field in a container is larger than 32 bits then the demuxer should 1685 * remap the longer ID to 32 bits with a table or other structure. Alternatively a new 1686 * extra_codec_tag + size could be added but for this a clear advantage must be demonstrated 1687 * first. 1688 * - encoding: Set by user, if not then the default based on codec_id will be used. 1689 * - decoding: Set by user, will be converted to uppercase by libavcodec during init. 1690 */ 1691 uint codec_tag; 1692 1693 static if (FF_API_STREAM_CODEC_TAG) { 1694 /** 1695 * @deprecated this field is unused 1696 */ 1697 deprecated 1698 uint stream_codec_tag; 1699 } 1700 1701 void *priv_data; 1702 1703 /** 1704 * Private context used for internal data. 1705 * 1706 * Unlike priv_data, this is not codec-specific. It is used in general 1707 * libavcodec functions. 1708 */ 1709 AVCodecInternal *internal; 1710 1711 /** 1712 * Private data of the user, can be used to carry app specific stuff. 1713 * - encoding: Set by user. 1714 * - decoding: Set by user. 1715 */ 1716 void *opaque; 1717 1718 /** 1719 * the average bitrate 1720 * - encoding: Set by user; unused for constant quantizer encoding. 1721 * - decoding: Set by user, may be overwritten by libavcodec 1722 * if this info is available in the stream 1723 */ 1724 int64_t bit_rate; 1725 1726 /** 1727 * number of bits the bitstream is allowed to diverge from the reference. 1728 * the reference can be CBR (for CBR pass1) or VBR (for pass2) 1729 * - encoding: Set by user; unused for constant quantizer encoding. 1730 * - decoding: unused 1731 */ 1732 int bit_rate_tolerance; 1733 1734 /** 1735 * Global quality for codecs which cannot change it per frame. 1736 * This should be proportional to MPEG-1/2/4 qscale. 1737 * - encoding: Set by user. 1738 * - decoding: unused 1739 */ 1740 int global_quality; 1741 1742 /** 1743 * - encoding: Set by user. 1744 * - decoding: unused 1745 */ 1746 int compression_level; 1747 //#define FF_COMPRESSION_DEFAULT -1 1748 1749 /** 1750 * CODEC_FLAG_*. 1751 * - encoding: Set by user. 1752 * - decoding: Set by user. 1753 */ 1754 int flags; 1755 1756 /** 1757 * CODEC_FLAG2_* 1758 * - encoding: Set by user. 1759 * - decoding: Set by user. 1760 */ 1761 int flags2; 1762 1763 /** 1764 * some codecs need / can use extradata like Huffman tables. 1765 * mjpeg: Huffman tables 1766 * rv10: additional flags 1767 * mpeg4: global headers (they can be in the bitstream or here) 1768 * The allocated memory should be FF_INPUT_BUFFER_PADDING_SIZE bytes larger 1769 * than extradata_size to avoid problems if it is read with the bitstream reader. 1770 * The bytewise contents of extradata must not depend on the architecture or CPU endianness. 1771 * - encoding: Set/allocated/freed by libavcodec. 1772 * - decoding: Set/allocated/freed by user. 1773 */ 1774 uint8_t *extradata; 1775 int extradata_size; 1776 1777 /** 1778 * This is the fundamental unit of time (in seconds) in terms 1779 * of which frame timestamps are represented. For fixed-fps content, 1780 * timebase should be 1/framerate and timestamp increments should be 1781 * identically 1. 1782 * This often, but not always is the inverse of the frame rate or field rate 1783 * for video. 1/time_base is not the average frame rate if the frame rate is not 1784 * constant. 1785 * 1786 * Like containers, elementary streams also can store timestamps, 1/time_base 1787 * is the unit in which these timestamps are specified. 1788 * As example of such codec time base see ISO/IEC 14496-2:2001(E) 1789 * vop_time_increment_resolution and fixed_vop_rate 1790 * (fixed_vop_rate == 0 implies that it is different from the framerate) 1791 * 1792 * - encoding: MUST be set by user. 1793 * - decoding: the use of this field for decoding is deprecated. 1794 * Use framerate instead. 1795 */ 1796 AVRational time_base; 1797 1798 /** 1799 * For some codecs, the time base is closer to the field rate than the frame rate. 1800 * Most notably, H.264 and MPEG-2 specify time_base as half of frame duration 1801 * if no telecine is used ... 1802 * 1803 * Set to time_base ticks per frame. Default 1, e.g., H.264/MPEG-2 set it to 2. 1804 */ 1805 int ticks_per_frame; 1806 1807 /** 1808 * Codec delay. 1809 * 1810 * Encoding: Number of frames delay there will be from the encoder input to 1811 * the decoder output. (we assume the decoder matches the spec) 1812 * Decoding: Number of frames delay in addition to what a standard decoder 1813 * as specified in the spec would produce. 1814 * 1815 * Video: 1816 * Number of frames the decoded output will be delayed relative to the 1817 * encoded input. 1818 * 1819 * Audio: 1820 * For encoding, this field is unused (see initial_padding). 1821 * 1822 * For decoding, this is the number of samples the decoder needs to 1823 * output before the decoder's output is valid. When seeking, you should 1824 * start decoding this many samples prior to your desired seek point. 1825 * 1826 * - encoding: Set by libavcodec. 1827 * - decoding: Set by libavcodec. 1828 */ 1829 int delay; 1830 1831 1832 /* video only */ 1833 /** 1834 * picture width / height. 1835 * 1836 * @note Those fields may not match the values of the last 1837 * AVFrame outputted by avcodec_decode_video2 due frame 1838 * reordering. 1839 * 1840 * - encoding: MUST be set by user. 1841 * - decoding: May be set by the user before opening the decoder if known e.g. 1842 * from the container. Some decoders will require the dimensions 1843 * to be set by the caller. During decoding, the decoder may 1844 * overwrite those values as required while parsing the data. 1845 */ 1846 int width, height; 1847 1848 /** 1849 * Bitstream width / height, may be different from width/height e.g. when 1850 * the decoded frame is cropped before being output or lowres is enabled. 1851 * 1852 * @note Those field may not match the value of the last 1853 * AVFrame outputted by avcodec_decode_video2 due frame 1854 * reordering. 1855 * 1856 * - encoding: unused 1857 * - decoding: May be set by the user before opening the decoder if known 1858 * e.g. from the container. During decoding, the decoder may 1859 * overwrite those values as required while parsing the data. 1860 */ 1861 int coded_width, coded_height; 1862 1863 //#if FF_API_ASPECT_EXTENDED 1864 //#define FF_ASPECT_EXTENDED 15 1865 //#endif 1866 1867 /** 1868 * the number of pictures in a group of pictures, or 0 for intra_only 1869 * - encoding: Set by user. 1870 * - decoding: unused 1871 */ 1872 int gop_size; 1873 1874 /** 1875 * Pixel format, see AV_PIX_FMT_xxx. 1876 * May be set by the demuxer if known from headers. 1877 * May be overridden by the decoder if it knows better. 1878 * 1879 * @note This field may not match the value of the last 1880 * AVFrame outputted by avcodec_decode_video2 due frame 1881 * reordering. 1882 * 1883 * - encoding: Set by user. 1884 * - decoding: Set by user if known, overridden by libavcodec while 1885 * parsing the data. 1886 */ 1887 AVPixelFormat pix_fmt; 1888 1889 static if (FF_API_MOTION_EST) { 1890 /** 1891 * This option does nothing 1892 * @deprecated use codec private options instead 1893 */ 1894 deprecated int me_method; 1895 } 1896 1897 /** 1898 * If non NULL, 'draw_horiz_band' is called by the libavcodec 1899 * decoder to draw a horizontal band. It improves cache usage. Not 1900 * all codecs can do that. You must check the codec capabilities 1901 * beforehand. 1902 * When multithreading is used, it may be called from multiple threads 1903 * at the same time; threads might draw different parts of the same AVFrame, 1904 * or multiple AVFrames, and there is no guarantee that slices will be drawn 1905 * in order. 1906 * The function is also used by hardware acceleration APIs. 1907 * It is called at least once during frame decoding to pass 1908 * the data needed for hardware render. 1909 * In that mode instead of pixel data, AVFrame points to 1910 * a structure specific to the acceleration API. The application 1911 * reads the structure and can change some fields to indicate progress 1912 * or mark state. 1913 * - encoding: unused 1914 * - decoding: Set by user. 1915 * @param height the height of the slice 1916 * @param y the y position of the slice 1917 * @param type 1->top field, 2->bottom field, 3->frame 1918 * @param offset offset into the AVFrame.data from which the slice should be read 1919 */ 1920 void function(AVCodecContext *s, 1921 const AVFrame *src, int [AV_NUM_DATA_POINTERS]offset, 1922 int y, int type, int height) draw_horiz_band; 1923 1924 /** 1925 * callback to negotiate the pixelFormat 1926 * @param fmt is the list of formats which are supported by the codec, 1927 * it is terminated by -1 as 0 is a valid format, the formats are ordered by quality. 1928 * The first is always the native one. 1929 * @note The callback may be called again immediately if initialization for 1930 * the selected (hardware-accelerated) pixel format failed. 1931 * @warning Behavior is undefined if the callback returns a value not 1932 * in the fmt list of formats. 1933 * @return the chosen format 1934 * - encoding: unused 1935 * - decoding: Set by user, if not set the native format will be chosen. 1936 */ 1937 AVPixelFormat function(AVCodecContext *s, const AVPixelFormat * fmt) get_format; 1938 1939 /** 1940 * maximum number of B-frames between non-B-frames 1941 * Note: The output will be delayed by max_b_frames+1 relative to the input. 1942 * - encoding: Set by user. 1943 * - decoding: unused 1944 */ 1945 int max_b_frames; 1946 1947 /** 1948 * qscale factor between IP and B-frames 1949 * If > 0 then the last P-frame quantizer will be used (q= lastp_q*factor+offset). 1950 * If < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset). 1951 * - encoding: Set by user. 1952 * - decoding: unused 1953 */ 1954 float b_quant_factor; 1955 1956 static if (FF_API_RC_STRATEGY) { 1957 /** @deprecated use codec private option instead */ 1958 deprecated int rc_strategy; 1959 //#define FF_RC_STRATEGY_XVID 1 1960 } 1961 1962 static if (FF_API_PRIVATE_OPT) { 1963 /** @deprecated use encoder private options instead */ 1964 deprecated 1965 int b_frame_strategy; 1966 } 1967 1968 /** 1969 * qscale offset between IP and B-frames 1970 * - encoding: Set by user. 1971 * - decoding: unused 1972 */ 1973 float b_quant_offset; 1974 1975 /** 1976 * Size of the frame reordering buffer in the decoder. 1977 * For MPEG-2 it is 1 IPB or 0 low delay IP. 1978 * - encoding: Set by libavcodec. 1979 * - decoding: Set by libavcodec. 1980 */ 1981 int has_b_frames; 1982 1983 static if (FF_API_PRIVATE_OPT) { 1984 /** @deprecated use encoder private options instead */ 1985 deprecated 1986 int mpeg_quant; 1987 } 1988 1989 /** 1990 * qscale factor between P and I-frames 1991 * If > 0 then the last p frame quantizer will be used (q= lastp_q*factor+offset). 1992 * If < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset). 1993 * - encoding: Set by user. 1994 * - decoding: unused 1995 */ 1996 float i_quant_factor; 1997 1998 /** 1999 * qscale offset between P and I-frames 2000 * - encoding: Set by user. 2001 * - decoding: unused 2002 */ 2003 float i_quant_offset; 2004 2005 /** 2006 * luminance masking (0-> disabled) 2007 * - encoding: Set by user. 2008 * - decoding: unused 2009 */ 2010 float lumi_masking; 2011 2012 /** 2013 * temporary complexity masking (0-> disabled) 2014 * - encoding: Set by user. 2015 * - decoding: unused 2016 */ 2017 float temporal_cplx_masking; 2018 2019 /** 2020 * spatial complexity masking (0-> disabled) 2021 * - encoding: Set by user. 2022 * - decoding: unused 2023 */ 2024 float spatial_cplx_masking; 2025 2026 /** 2027 * p block masking (0-> disabled) 2028 * - encoding: Set by user. 2029 * - decoding: unused 2030 */ 2031 float p_masking; 2032 2033 /** 2034 * darkness masking (0-> disabled) 2035 * - encoding: Set by user. 2036 * - decoding: unused 2037 */ 2038 float dark_masking; 2039 2040 /** 2041 * slice count 2042 * - encoding: Set by libavcodec. 2043 * - decoding: Set by user (or 0). 2044 */ 2045 int slice_count; 2046 2047 static if (FF_API_PRIVATE_OPT) { 2048 /** @deprecated use encoder private options instead */ 2049 deprecated 2050 int prediction_method; 2051 //#define FF_PRED_LEFT 0 2052 //#define FF_PRED_PLANE 1 2053 //#define FF_PRED_MEDIAN 2 2054 } 2055 2056 /** 2057 * slice offsets in the frame in bytes 2058 * - encoding: Set/allocated by libavcodec. 2059 * - decoding: Set/allocated by user (or NULL). 2060 */ 2061 int *slice_offset; 2062 2063 /** 2064 * sample aspect ratio (0 if unknown) 2065 * That is the width of a pixel divided by the height of the pixel. 2066 * Numerator and denominator must be relatively prime and smaller than 256 for some video standards. 2067 * - encoding: Set by user. 2068 * - decoding: Set by libavcodec. 2069 */ 2070 AVRational sample_aspect_ratio; 2071 2072 /** 2073 * motion estimation comparison function 2074 * - encoding: Set by user. 2075 * - decoding: unused 2076 */ 2077 int me_cmp; 2078 /** 2079 * subpixel motion estimation comparison function 2080 * - encoding: Set by user. 2081 * - decoding: unused 2082 */ 2083 int me_sub_cmp; 2084 /** 2085 * macroblock comparison function (not supported yet) 2086 * - encoding: Set by user. 2087 * - decoding: unused 2088 */ 2089 int mb_cmp; 2090 /** 2091 * interlaced DCT comparison function 2092 * - encoding: Set by user. 2093 * - decoding: unused 2094 */ 2095 int ildct_cmp; 2096 //#define FF_CMP_SAD 0 2097 //#define FF_CMP_SSE 1 2098 //#define FF_CMP_SATD 2 2099 //#define FF_CMP_DCT 3 2100 //#define FF_CMP_PSNR 4 2101 //#define FF_CMP_BIT 5 2102 //#define FF_CMP_RD 6 2103 //#define FF_CMP_ZERO 7 2104 //#define FF_CMP_VSAD 8 2105 //#define FF_CMP_VSSE 9 2106 //#define FF_CMP_NSSE 10 2107 //#define FF_CMP_W53 11 2108 //#define FF_CMP_W97 12 2109 //#define FF_CMP_DCTMAX 13 2110 //#define FF_CMP_DCT264 14 2111 //#define FF_CMP_CHROMA 256 2112 2113 /** 2114 * ME diamond size & shape 2115 * - encoding: Set by user. 2116 * - decoding: unused 2117 */ 2118 int dia_size; 2119 2120 /** 2121 * amount of previous MV predictors (2a+1 x 2a+1 square) 2122 * - encoding: Set by user. 2123 * - decoding: unused 2124 */ 2125 int last_predictor_count; 2126 2127 static if (FF_API_PRIVATE_OPT) { 2128 /** @deprecated use encoder private options instead */ 2129 deprecated 2130 int pre_me; 2131 } 2132 2133 /** 2134 * motion estimation prepass comparison function 2135 * - encoding: Set by user. 2136 * - decoding: unused 2137 */ 2138 int me_pre_cmp; 2139 2140 /** 2141 * ME prepass diamond size & shape 2142 * - encoding: Set by user. 2143 * - decoding: unused 2144 */ 2145 int pre_dia_size; 2146 2147 /** 2148 * subpel ME quality 2149 * - encoding: Set by user. 2150 * - decoding: unused 2151 */ 2152 int me_subpel_quality; 2153 2154 static if (FF_API_AFD) { 2155 /** 2156 * DTG active format information (additional aspect ratio 2157 * information only used in DVB MPEG-2 transport streams) 2158 * 0 if not set. 2159 * 2160 * - encoding: unused 2161 * - decoding: Set by decoder. 2162 * @deprecated Deprecated in favor of AVSideData 2163 */ 2164 deprecated int dtg_active_format; 2165 //#define FF_DTG_AFD_SAME 8 2166 //#define FF_DTG_AFD_4_3 9 2167 //#define FF_DTG_AFD_16_9 10 2168 //#define FF_DTG_AFD_14_9 11 2169 //#define FF_DTG_AFD_4_3_SP_14_9 13 2170 //#define FF_DTG_AFD_16_9_SP_14_9 14 2171 //#define FF_DTG_AFD_SP_4_3 15 2172 } 2173 2174 /** 2175 * maximum motion estimation search range in subpel units 2176 * If 0 then no limit. 2177 * 2178 * - encoding: Set by user. 2179 * - decoding: unused 2180 */ 2181 int me_range; 2182 2183 static if (FF_API_QUANT_BIAS) { 2184 /** 2185 * @deprecated use encoder private option instead 2186 */ 2187 deprecated int intra_quant_bias; 2188 //#define FF_DEFAULT_QUANT_BIAS 999999 2189 2190 /** 2191 * @deprecated use encoder private option instead 2192 */ 2193 deprecated int inter_quant_bias; 2194 } 2195 2196 /** 2197 * slice flags 2198 * - encoding: unused 2199 * - decoding: Set by user. 2200 */ 2201 int slice_flags; 2202 //#define SLICE_FLAG_CODED_ORDER 0x0001 ///< draw_horiz_band() is called in coded order instead of display 2203 //#define SLICE_FLAG_ALLOW_FIELD 0x0002 ///< allow draw_horiz_band() with field slices (MPEG2 field pics) 2204 //#define SLICE_FLAG_ALLOW_PLANE 0x0004 ///< allow draw_horiz_band() with 1 component at a time (SVQ1) 2205 2206 static if (ffmpeg.libavcodec.avcodec_version.FF_API_XVMC) { 2207 /** 2208 * XVideo Motion Acceleration 2209 * - encoding: forbidden 2210 * - decoding: set by decoder 2211 * @deprecated XvMC doesn't need it anymore. 2212 */ 2213 deprecated int xvmc_acceleration; 2214 } 2215 2216 /** 2217 * macroblock decision mode 2218 * - encoding: Set by user. 2219 * - decoding: unused 2220 */ 2221 int mb_decision; 2222 //#define FF_MB_DECISION_SIMPLE 0 ///< uses mb_cmp 2223 //#define FF_MB_DECISION_BITS 1 ///< chooses the one which needs the fewest bits 2224 //#define FF_MB_DECISION_RD 2 ///< rate distortion 2225 2226 /** 2227 * custom intra quantization matrix 2228 * - encoding: Set by user, can be NULL. 2229 * - decoding: Set by libavcodec. 2230 */ 2231 uint16_t *intra_matrix; 2232 2233 /** 2234 * custom inter quantization matrix 2235 * - encoding: Set by user, can be NULL. 2236 * - decoding: Set by libavcodec. 2237 */ 2238 uint16_t *inter_matrix; 2239 2240 static if (FF_API_PRIVATE_OPT) { 2241 /** @deprecated use encoder private options instead */ 2242 deprecated 2243 int scenechange_threshold; 2244 2245 /** @deprecated use encoder private options instead */ 2246 deprecated 2247 int noise_reduction; 2248 } 2249 2250 static if (FF_API_MPV_OPT) { 2251 /** 2252 * @deprecated this field is unused 2253 */ 2254 deprecated 2255 int me_threshold; 2256 2257 /** 2258 * @deprecated this field is unused 2259 */ 2260 deprecated 2261 int mb_threshold; 2262 } 2263 2264 /** 2265 * precision of the intra DC coefficient - 8 2266 * - encoding: Set by user. 2267 * - decoding: unused 2268 */ 2269 int intra_dc_precision; 2270 2271 /** 2272 * Number of macroblock rows at the top which are skipped. 2273 * - encoding: unused 2274 * - decoding: Set by user. 2275 */ 2276 int skip_top; 2277 2278 /** 2279 * Number of macroblock rows at the bottom which are skipped. 2280 * - encoding: unused 2281 * - decoding: Set by user. 2282 */ 2283 int skip_bottom; 2284 2285 static if (FF_API_MPV_OPT) { 2286 /** 2287 * @deprecated use encoder private options instead 2288 */ 2289 deprecated 2290 float border_masking; 2291 } 2292 2293 /** 2294 * minimum MB lagrange multipler 2295 * - encoding: Set by user. 2296 * - decoding: unused 2297 */ 2298 int mb_lmin; 2299 2300 /** 2301 * maximum MB lagrange multipler 2302 * - encoding: Set by user. 2303 * - decoding: unused 2304 */ 2305 int mb_lmax; 2306 2307 static if (FF_API_PRIVATE_OPT) { 2308 /** 2309 * @deprecated use encoder private options instead 2310 */ 2311 deprecated 2312 int me_penalty_compensation; 2313 } 2314 2315 /** 2316 * - encoding: Set by user. 2317 * - decoding: unused 2318 */ 2319 int bidir_refine; 2320 2321 static if (FF_API_PRIVATE_OPT) { 2322 /** @deprecated use encoder private options instead */ 2323 deprecated 2324 int brd_scale; 2325 } 2326 2327 /** 2328 * minimum GOP size 2329 * - encoding: Set by user. 2330 * - decoding: unused 2331 */ 2332 int keyint_min; 2333 2334 /** 2335 * number of reference frames 2336 * - encoding: Set by user. 2337 * - decoding: Set by lavc. 2338 */ 2339 int refs; 2340 2341 static if (FF_API_PRIVATE_OPT) { 2342 /** @deprecated use encoder private options instead */ 2343 deprecated 2344 int chromaoffset; 2345 } 2346 2347 static if (FF_API_UNUSED_MEMBERS) { 2348 /** 2349 * Multiplied by qscale for each frame and added to scene_change_score. 2350 * - encoding: Set by user. 2351 * - decoding: unused 2352 */ 2353 deprecated int scenechange_factor; 2354 } 2355 2356 /** 2357 * Note: Value depends upon the compare function used for fullpel ME. 2358 * - encoding: Set by user. 2359 * - decoding: unused 2360 */ 2361 int mv0_threshold; 2362 2363 static if (FF_API_PRIVATE_OPT) { 2364 /** @deprecated use encoder private options instead */ 2365 deprecated 2366 int b_sensitivity; 2367 } 2368 2369 /** 2370 * Chromaticity coordinates of the source primaries. 2371 * - encoding: Set by user 2372 * - decoding: Set by libavcodec 2373 */ 2374 AVColorPrimaries color_primaries; 2375 2376 /** 2377 * Color Transfer Characteristic. 2378 * - encoding: Set by user 2379 * - decoding: Set by libavcodec 2380 */ 2381 AVColorTransferCharacteristic color_trc; 2382 2383 /** 2384 * YUV colorspace type. 2385 * - encoding: Set by user 2386 * - decoding: Set by libavcodec 2387 */ 2388 AVColorSpace colorspace; 2389 2390 /** 2391 * MPEG vs JPEG YUV range. 2392 * - encoding: Set by user 2393 * - decoding: Set by libavcodec 2394 */ 2395 AVColorRange color_range; 2396 2397 /** 2398 * This defines the location of chroma samples. 2399 * - encoding: Set by user 2400 * - decoding: Set by libavcodec 2401 */ 2402 AVChromaLocation chroma_sample_location; 2403 2404 /** 2405 * Number of slices. 2406 * Indicates number of picture subdivisions. Used for parallelized 2407 * decoding. 2408 * - encoding: Set by user 2409 * - decoding: unused 2410 */ 2411 int slices; 2412 2413 /** Field order 2414 * - encoding: set by libavcodec 2415 * - decoding: Set by user. 2416 */ 2417 AVFieldOrder field_order; 2418 2419 /* audio only */ 2420 int sample_rate; ///< samples per second 2421 int channels; ///< number of audio channels 2422 2423 /** 2424 * audio sample format 2425 * - encoding: Set by user. 2426 * - decoding: Set by libavcodec. 2427 */ 2428 AVSampleFormat sample_fmt; ///< sample format 2429 2430 /* The following data should not be initialized. */ 2431 /** 2432 * Number of samples per channel in an audio frame. 2433 * 2434 * - encoding: set by libavcodec in avcodec_open2(). Each submitted frame 2435 * except the last must contain exactly frame_size samples per channel. 2436 * May be 0 when the codec has CODEC_CAP_VARIABLE_FRAME_SIZE set, then the 2437 * frame size is not restricted. 2438 * - decoding: may be set by some decoders to indicate constant frame size 2439 */ 2440 int frame_size; 2441 2442 /** 2443 * Frame counter, set by libavcodec. 2444 * 2445 * - decoding: total number of frames returned from the decoder so far. 2446 * - encoding: total number of frames passed to the encoder so far. 2447 * 2448 * @note the counter is not incremented if encoding/decoding resulted in 2449 * an error. 2450 */ 2451 int frame_number; 2452 2453 /** 2454 * number of bytes per packet if constant and known or 0 2455 * Used by some WAV based audio codecs. 2456 */ 2457 int block_align; 2458 2459 /** 2460 * Audio cutoff bandwidth (0 means "automatic") 2461 * - encoding: Set by user. 2462 * - decoding: unused 2463 */ 2464 int cutoff; 2465 2466 /** 2467 * Audio channel layout. 2468 * - encoding: set by user. 2469 * - decoding: set by user, may be overwritten by libavcodec. 2470 */ 2471 uint64_t channel_layout; 2472 2473 /** 2474 * Request decoder to use this channel layout if it can (0 for default) 2475 * - encoding: unused 2476 * - decoding: Set by user. 2477 */ 2478 uint64_t request_channel_layout; 2479 2480 /** 2481 * Type of service that the audio stream conveys. 2482 * - encoding: Set by user. 2483 * - decoding: Set by libavcodec. 2484 */ 2485 AVAudioServiceType audio_service_type; 2486 2487 /** 2488 * desired sample format 2489 * - encoding: Not used. 2490 * - decoding: Set by user. 2491 * Decoder will decode to this format if it can. 2492 */ 2493 AVSampleFormat request_sample_fmt; 2494 2495 /** 2496 * This callback is called at the beginning of each frame to get data 2497 * buffer(s) for it. There may be one contiguous buffer for all the data or 2498 * there may be a buffer per each data plane or anything in between. What 2499 * this means is, you may set however many entries in buf[] you feel necessary. 2500 * Each buffer must be reference-counted using the AVBuffer API (see description 2501 * of buf[] below). 2502 * 2503 * The following fields will be set in the frame before this callback is 2504 * called: 2505 * - format 2506 * - width, height (video only) 2507 * - sample_rate, channel_layout, nb_samples (audio only) 2508 * Their values may differ from the corresponding values in 2509 * AVCodecContext. This callback must use the frame values, not the codec 2510 * context values, to calculate the required buffer size. 2511 * 2512 * This callback must fill the following fields in the frame: 2513 * - data[] 2514 * - linesize[] 2515 * - extended_data: 2516 * * if the data is planar audio with more than 8 channels, then this 2517 * callback must allocate and fill extended_data to contain all pointers 2518 * to all data planes. data[] must hold as many pointers as it can. 2519 * extended_data must be allocated with av_malloc() and will be freed in 2520 * av_frame_unref(). 2521 * * otherwise exended_data must point to data 2522 * - buf[] must contain one or more pointers to AVBufferRef structures. Each of 2523 * the frame's data and extended_data pointers must be contained in these. That 2524 * is, one AVBufferRef for each allocated chunk of memory, not necessarily one 2525 * AVBufferRef per data[] entry. See: av_buffer_create(), av_buffer_alloc(), 2526 * and av_buffer_ref(). 2527 * - extended_buf and nb_extended_buf must be allocated with av_malloc() by 2528 * this callback and filled with the extra buffers if there are more 2529 * buffers than buf[] can hold. extended_buf will be freed in 2530 * av_frame_unref(). 2531 * 2532 * If CODEC_CAP_DR1 is not set then get_buffer2() must call 2533 * avcodec_default_get_buffer2() instead of providing buffers allocated by 2534 * some other means. 2535 * 2536 * Each data plane must be aligned to the maximum required by the target 2537 * CPU. 2538 * 2539 * @see avcodec_default_get_buffer2() 2540 * 2541 * Video: 2542 * 2543 * If AV_GET_BUFFER_FLAG_REF is set in flags then the frame may be reused 2544 * (read and/or written to if it is writable) later by libavcodec. 2545 * 2546 * avcodec_align_dimensions2() should be used to find the required width and 2547 * height, as they normally need to be rounded up to the next multiple of 16. 2548 * 2549 * Some decoders do not support linesizes changing between frames. 2550 * 2551 * If frame multithreading is used and thread_safe_callbacks is set, 2552 * this callback may be called from a different thread, but not from more 2553 * than one at once. Does not need to be reentrant. 2554 * 2555 * @see avcodec_align_dimensions2() 2556 * 2557 * Audio: 2558 * 2559 * Decoders request a buffer of a particular size by setting 2560 * AVFrame.nb_samples prior to calling get_buffer2(). The decoder may, 2561 * however, utilize only part of the buffer by setting AVFrame.nb_samples 2562 * to a smaller value in the output frame. 2563 * 2564 * As a convenience, av_samples_get_buffer_size() and 2565 * av_samples_fill_arrays() in libavutil may be used by custom get_buffer2() 2566 * functions to find the required data size and to fill data pointers and 2567 * linesize. In AVFrame.linesize, only linesize[0] may be set for audio 2568 * since all planes must be the same size. 2569 * 2570 * @see av_samples_get_buffer_size(), av_samples_fill_arrays() 2571 * 2572 * - encoding: unused 2573 * - decoding: Set by libavcodec, user can override. 2574 */ 2575 int function(AVCodecContext *s, AVFrame *frame, int flags) get_buffer2; 2576 2577 /** 2578 * If non-zero, the decoded audio and video frames returned from 2579 * avcodec_decode_video2() and avcodec_decode_audio4() are reference-counted 2580 * and are valid indefinitely. The caller must free them with 2581 * av_frame_unref() when they are not needed anymore. 2582 * Otherwise, the decoded frames must not be freed by the caller and are 2583 * only valid until the next decode call. 2584 * 2585 * This is always automatically enabled if avcodec_receive_frame() is used. 2586 * 2587 * - encoding: unused 2588 * - decoding: set by the caller before avcodec_open2(). 2589 */ 2590 int refcounted_frames; 2591 2592 /* - encoding parameters */ 2593 float qcompress; ///< amount of qscale change between easy & hard scenes (0.0-1.0) 2594 float qblur; ///< amount of qscale smoothing over time (0.0-1.0) 2595 2596 /** 2597 * minimum quantizer 2598 * - encoding: Set by user. 2599 * - decoding: unused 2600 */ 2601 int qmin; 2602 2603 /** 2604 * maximum quantizer 2605 * - encoding: Set by user. 2606 * - decoding: unused 2607 */ 2608 int qmax; 2609 2610 /** 2611 * maximum quantizer difference between frames 2612 * - encoding: Set by user. 2613 * - decoding: unused 2614 */ 2615 int max_qdiff; 2616 2617 static if (FF_API_MPV_OPT) { 2618 /** 2619 * @deprecated use encoder private options instead 2620 */ 2621 deprecated 2622 float rc_qsquish; 2623 2624 deprecated 2625 float rc_qmod_amp; 2626 deprecated 2627 int rc_qmod_freq; 2628 } 2629 2630 /** 2631 * decoder bitstream buffer size 2632 * - encoding: Set by user. 2633 * - decoding: unused 2634 */ 2635 int rc_buffer_size; 2636 2637 /** 2638 * ratecontrol override, see RcOverride 2639 * - encoding: Allocated/set/freed by user. 2640 * - decoding: unused 2641 */ 2642 int rc_override_count; 2643 RcOverride *rc_override; 2644 2645 static if (FF_API_MPV_OPT) { 2646 /** 2647 * @deprecated use encoder private options instead 2648 */ 2649 deprecated 2650 const char *rc_eq; 2651 } 2652 2653 /** 2654 * maximum bitrate 2655 * - encoding: Set by user. 2656 * - decoding: Set by libavcodec. 2657 */ 2658 int rc_max_rate; 2659 2660 /** 2661 * minimum bitrate 2662 * - encoding: Set by user. 2663 * - decoding: unused 2664 */ 2665 int rc_min_rate; 2666 2667 static if (FF_API_MPV_OPT) { 2668 /** 2669 * @deprecated use encoder private options instead 2670 */ 2671 deprecated 2672 float rc_buffer_aggressivity; 2673 2674 deprecated 2675 float rc_initial_cplx; 2676 } 2677 2678 /** 2679 * Ratecontrol attempt to use, at maximum, <value> of what can be used without an underflow. 2680 * - encoding: Set by user. 2681 * - decoding: unused. 2682 */ 2683 float rc_max_available_vbv_use; 2684 2685 /** 2686 * Ratecontrol attempt to use, at least, <value> times the amount needed to prevent a vbv overflow. 2687 * - encoding: Set by user. 2688 * - decoding: unused. 2689 */ 2690 float rc_min_vbv_overflow_use; 2691 2692 /** 2693 * Number of bits which should be loaded into the rc buffer before decoding starts. 2694 * - encoding: Set by user. 2695 * - decoding: unused 2696 */ 2697 int rc_initial_buffer_occupancy; 2698 2699 static if (FF_API_CODER_TYPE) { 2700 //#define FF_CODER_TYPE_VLC 0 2701 //#define FF_CODER_TYPE_AC 1 2702 //#define FF_CODER_TYPE_RAW 2 2703 //#define FF_CODER_TYPE_RLE 3 2704 //#if FF_API_UNUSED_MEMBERS 2705 //#define FF_CODER_TYPE_DEFLATE 4 2706 //#endif /* FF_API_UNUSED_MEMBERS */ 2707 /** 2708 * @deprecated use encoder private options instead 2709 */ 2710 deprecated 2711 int coder_type; 2712 } 2713 2714 static if (FF_API_PRIVATE_OPT) { 2715 /** @deprecated use encoder private options instead */ 2716 deprecated 2717 int context_model; 2718 } 2719 2720 static if (FF_API_MPV_OPT) { 2721 /** 2722 * @deprecated use encoder private options instead 2723 */ 2724 deprecated 2725 int lmin; 2726 2727 /** 2728 * @deprecated use encoder private options instead 2729 */ 2730 deprecated 2731 int lmax; 2732 } 2733 2734 static if (FF_API_PRIVATE_OPT) { 2735 /** @deprecated use encoder private options instead */ 2736 deprecated 2737 int frame_skip_threshold; 2738 2739 /** @deprecated use encoder private options instead */ 2740 deprecated 2741 int frame_skip_factor; 2742 2743 /** @deprecated use encoder private options instead */ 2744 deprecated 2745 int frame_skip_exp; 2746 2747 /** @deprecated use encoder private options instead */ 2748 deprecated 2749 int frame_skip_cmp; 2750 } 2751 2752 /** 2753 * trellis RD quantization 2754 * - encoding: Set by user. 2755 * - decoding: unused 2756 */ 2757 int trellis; 2758 2759 static if (FF_API_PRIVATE_OPT) { 2760 /** @deprecated use encoder private options instead */ 2761 deprecated 2762 int min_prediction_order; 2763 2764 /** @deprecated use encoder private options instead */ 2765 deprecated 2766 int max_prediction_order; 2767 2768 /** @deprecated use encoder private options instead */ 2769 deprecated 2770 int64_t timecode_frame_start; 2771 } 2772 2773 static if (FF_API_RTP_CALLBACK) { 2774 /** 2775 * @deprecated unused 2776 */ 2777 /* The RTP callback: This function is called */ 2778 /* every time the encoder has a packet to send. */ 2779 /* It depends on the encoder if the data starts */ 2780 /* with a Start Code (it should). H.263 does. */ 2781 /* mb_nb contains the number of macroblocks */ 2782 /* encoded in the RTP payload. */ 2783 deprecated 2784 void function(AVCodecContext *avctx, void *data, int size, int mb_nb) rtp_callback; 2785 } 2786 2787 static if (FF_API_PRIVATE_OPT) { 2788 /** @deprecated use encoder private options instead */ 2789 deprecated 2790 int rtp_payload_size; /* The size of the RTP payload: the coder will */ 2791 /* do its best to deliver a chunk with size */ 2792 /* below rtp_payload_size, the chunk will start */ 2793 /* with a start code on some codecs like H.263. */ 2794 /* This doesn't take account of any particular */ 2795 /* headers inside the transmitted RTP payload. */ 2796 } 2797 2798 static if (FF_API_STAT_BITS) { 2799 /* statistics, used for 2-pass encoding */ 2800 deprecated 2801 int mv_bits; 2802 deprecated 2803 int header_bits; 2804 deprecated 2805 int i_tex_bits; 2806 deprecated 2807 int p_tex_bits; 2808 deprecated 2809 int i_count; 2810 deprecated 2811 int p_count; 2812 deprecated 2813 int skip_count; 2814 deprecated 2815 int misc_bits; 2816 2817 /** @deprecated this field is unused */ 2818 deprecated 2819 int frame_bits; 2820 } 2821 2822 /** 2823 * pass1 encoding statistics output buffer 2824 * - encoding: Set by libavcodec. 2825 * - decoding: unused 2826 */ 2827 char *stats_out; 2828 2829 /** 2830 * pass2 encoding statistics input buffer 2831 * Concatenated stuff from stats_out of pass1 should be placed here. 2832 * - encoding: Allocated/set/freed by user. 2833 * - decoding: unused 2834 */ 2835 char *stats_in; 2836 2837 /** 2838 * Work around bugs in encoders which sometimes cannot be detected automatically. 2839 * - encoding: Set by user 2840 * - decoding: Set by user 2841 */ 2842 int workaround_bugs; 2843 //#define FF_BUG_AUTODETECT 1 ///< autodetection 2844 //#if FF_API_OLD_MSMPEG4 2845 //#define FF_BUG_OLD_MSMPEG4 2 2846 //#endif 2847 //#define FF_BUG_XVID_ILACE 4 2848 //#define FF_BUG_UMP4 8 2849 //#define FF_BUG_NO_PADDING 16 2850 //#define FF_BUG_AMV 32 2851 //#if FF_API_AC_VLC 2852 //#define FF_BUG_AC_VLC 0 ///< Will be removed, libavcodec can now handle these non-compliant files by default. 2853 //#endif 2854 //#define FF_BUG_QPEL_CHROMA 64 2855 //#define FF_BUG_STD_QPEL 128 2856 //#define FF_BUG_QPEL_CHROMA2 256 2857 //#define FF_BUG_DIRECT_BLOCKSIZE 512 2858 //#define FF_BUG_EDGE 1024 2859 //#define FF_BUG_HPEL_CHROMA 2048 2860 //#define FF_BUG_DC_CLIP 4096 2861 //#define FF_BUG_MS 8192 ///< Work around various bugs in Microsoft's broken decoders. 2862 //#define FF_BUG_TRUNCATED 16384 2863 2864 /** 2865 * strictly follow the standard (MPEG4, ...). 2866 * - encoding: Set by user. 2867 * - decoding: Set by user. 2868 * Setting this to STRICT or higher means the encoder and decoder will 2869 * generally do stupid things, whereas setting it to unofficial or lower 2870 * will mean the encoder might produce output that is not supported by all 2871 * spec-compliant decoders. Decoders don't differentiate between normal, 2872 * unofficial and experimental (that is, they always try to decode things 2873 * when they can) unless they are explicitly asked to behave stupidly 2874 * (=strictly conform to the specs) 2875 */ 2876 int strict_std_compliance; 2877 //#define FF_COMPLIANCE_VERY_STRICT 2 ///< Strictly conform to an older more strict version of the spec or reference software. 2878 //#define FF_COMPLIANCE_STRICT 1 ///< Strictly conform to all the things in the spec no matter what consequences. 2879 //#define FF_COMPLIANCE_NORMAL 0 2880 //#define FF_COMPLIANCE_UNOFFICIAL -1 ///< Allow unofficial extensions 2881 //#define FF_COMPLIANCE_EXPERIMENTAL -2 ///< Allow nonstandardized experimental things. 2882 2883 /** 2884 * error concealment flags 2885 * - encoding: unused 2886 * - decoding: Set by user. 2887 */ 2888 int error_concealment; 2889 //#define FF_EC_GUESS_MVS 1 2890 //#define FF_EC_DEBLOCK 2 2891 //#define FF_EC_FAVOR_INTER 256 2892 2893 /** 2894 * debug 2895 * - encoding: Set by user. 2896 * - decoding: Set by user. 2897 */ 2898 int _debug; 2899 //#define FF_DEBUG_PICT_INFO 1 2900 //#define FF_DEBUG_RC 2 2901 //#define FF_DEBUG_BITSTREAM 4 2902 //#define FF_DEBUG_MB_TYPE 8 2903 //#define FF_DEBUG_QP 16 2904 //#if FF_API_DEBUG_MV 2905 /** 2906 * @deprecated this option does nothing 2907 */ 2908 //#define FF_DEBUG_MV 32 2909 //#endif 2910 //#define FF_DEBUG_DCT_COEFF 0x00000040 2911 //#define FF_DEBUG_SKIP 0x00000080 2912 //#define FF_DEBUG_STARTCODE 0x00000100 2913 //#if FF_API_UNUSED_MEMBERS 2914 //#define FF_DEBUG_PTS 0x00000200 2915 //#endif /* FF_API_UNUSED_MEMBERS */ 2916 //#define FF_DEBUG_ER 0x00000400 2917 //#define FF_DEBUG_MMCO 0x00000800 2918 //#define FF_DEBUG_BUGS 0x00001000 2919 //#if FF_API_DEBUG_MV 2920 //#define FF_DEBUG_VIS_QP 0x00002000 ///< only access through AVOptions from outside libavcodec 2921 //#define FF_DEBUG_VIS_MB_TYPE 0x00004000 ///< only access through AVOptions from outside libavcodec 2922 //#endif 2923 //#define FF_DEBUG_BUFFERS 0x00008000 2924 //#define FF_DEBUG_THREADS 0x00010000 2925 //#define FF_DEBUG_GREEN_MD 0x00800000 2926 //#define FF_DEBUG_NOMC 0x01000000 2927 2928 static if (FF_API_DEBUG_MV) { 2929 /** 2930 * debug 2931 * Code outside libavcodec should access this field using AVOptions 2932 * - encoding: Set by user. 2933 * - decoding: Set by user. 2934 */ 2935 int debug_mv; 2936 //#define FF_DEBUG_VIS_MV_P_FOR 0x00000001 //visualize forward predicted MVs of P frames 2937 //#define FF_DEBUG_VIS_MV_B_FOR 0x00000002 //visualize forward predicted MVs of B frames 2938 //#define FF_DEBUG_VIS_MV_B_BACK 0x00000004 //visualize backward predicted MVs of B frames 2939 } 2940 2941 /** 2942 * Error recognition; may misdetect some more or less valid parts as errors. 2943 * - encoding: unused 2944 * - decoding: Set by user. 2945 */ 2946 int err_recognition; 2947 2948 /** 2949 * Verify checksums embedded in the bitstream (could be of either encoded or 2950 * decoded data, depending on the codec) and print an error message on mismatch. 2951 * If AV_EF_EXPLODE is also set, a mismatching checksum will result in the 2952 * decoder returning an error. 2953 */ 2954 //#define AV_EF_CRCCHECK (1<<0) 2955 //#define AV_EF_BITSTREAM (1<<1) 2956 //#define AV_EF_BUFFER (1<<2) 2957 //#define AV_EF_EXPLODE (1<<3) 2958 2959 //#define AV_EF_IGNORE_ERR (1<<15) ///< ignore errors and continue 2960 //#define AV_EF_CAREFUL (1<<16) 2961 //#define AV_EF_COMPLIANT (1<<17) 2962 //#define AV_EF_AGGRESSIVE (1<<18) 2963 2964 2965 /** 2966 * opaque 64bit number (generally a PTS) that will be reordered and 2967 * output in AVFrame.reordered_opaque 2968 * - encoding: unused 2969 * - decoding: Set by user. 2970 */ 2971 int64_t reordered_opaque; 2972 2973 /** 2974 * Hardware accelerator in use 2975 * - encoding: unused. 2976 * - decoding: Set by libavcodec 2977 */ 2978 AVHWAccel *hwaccel; 2979 2980 /** 2981 * Hardware accelerator context. 2982 * For some hardware accelerators, a global context needs to be 2983 * provided by the user. In that case, this holds display-dependent 2984 * data FFmpeg cannot instantiate itself. Please refer to the 2985 * FFmpeg HW accelerator documentation to know how to fill this 2986 * is. e.g. for VA API, this is a struct vaapi_context. 2987 * - encoding: unused 2988 * - decoding: Set by user 2989 */ 2990 void *hwaccel_context; 2991 2992 /** 2993 * error 2994 * - encoding: Set by libavcodec if flags&CODEC_FLAG_PSNR. 2995 * - decoding: unused 2996 */ 2997 uint64_t [AV_NUM_DATA_POINTERS]error; 2998 2999 /** 3000 * DCT algorithm, see FF_DCT_* below 3001 * - encoding: Set by user. 3002 * - decoding: unused 3003 */ 3004 int dct_algo; 3005 //#define FF_DCT_AUTO 0 3006 //#define FF_DCT_FASTINT 1 3007 //#define FF_DCT_INT 2 3008 //#define FF_DCT_MMX 3 3009 //#define FF_DCT_ALTIVEC 5 3010 //#define FF_DCT_FAAN 6 3011 3012 /** 3013 * IDCT algorithm, see FF_IDCT_* below. 3014 * - encoding: Set by user. 3015 * - decoding: Set by user. 3016 */ 3017 int idct_algo; 3018 //#define FF_IDCT_AUTO 0 3019 //#define FF_IDCT_INT 1 3020 //#define FF_IDCT_SIMPLE 2 3021 //#define FF_IDCT_SIMPLEMMX 3 3022 //#define FF_IDCT_ARM 7 3023 //#define FF_IDCT_ALTIVEC 8 3024 //#if FF_API_ARCH_SH4 3025 //#define FF_IDCT_SH4 9 3026 //#endif 3027 //#define FF_IDCT_SIMPLEARM 10 3028 //#if FF_API_UNUSED_MEMBERS 3029 //#define FF_IDCT_IPP 13 3030 //#endif /* FF_API_UNUSED_MEMBERS */ 3031 //#define FF_IDCT_XVID 14 3032 //#if FF_API_IDCT_XVIDMMX 3033 //#define FF_IDCT_XVIDMMX 14 3034 //#endif /* FF_API_IDCT_XVIDMMX */ 3035 //#define FF_IDCT_SIMPLEARMV5TE 16 3036 //#define FF_IDCT_SIMPLEARMV6 17 3037 //#if FF_API_ARCH_SPARC 3038 //#define FF_IDCT_SIMPLEVIS 18 3039 //#endif 3040 //#define FF_IDCT_FAAN 20 3041 //#define FF_IDCT_SIMPLENEON 22 3042 //#if FF_API_ARCH_ALPHA 3043 //#define FF_IDCT_SIMPLEALPHA 23 3044 //#endif 3045 //#define FF_IDCT_SIMPLEAUTO 128 3046 3047 /** 3048 * bits per sample/pixel from the demuxer (needed for huffyuv). 3049 * - encoding: Set by libavcodec. 3050 * - decoding: Set by user. 3051 */ 3052 int bits_per_coded_sample; 3053 3054 /** 3055 * Bits per sample/pixel of internal libavcodec pixel/sample format. 3056 * - encoding: set by user. 3057 * - decoding: set by libavcodec. 3058 */ 3059 int bits_per_raw_sample; 3060 3061 static if (FF_API_LOWRES) { 3062 /** 3063 * low resolution decoding, 1-> 1/2 size, 2->1/4 size 3064 * - encoding: unused 3065 * - decoding: Set by user. 3066 * Code outside libavcodec should access this field using: 3067 * av_codec_{get,set}_lowres(avctx) 3068 */ 3069 int lowres; 3070 } 3071 3072 static if (FF_API_CODED_FRAME) { 3073 /** 3074 * the picture in the bitstream 3075 * - encoding: Set by libavcodec. 3076 * - decoding: unused 3077 * 3078 * @deprecated use the quality factor packet side data instead 3079 */ 3080 deprecated AVFrame *coded_frame; 3081 } 3082 3083 /** 3084 * thread count 3085 * is used to decide how many independent tasks should be passed to execute() 3086 * - encoding: Set by user. 3087 * - decoding: Set by user. 3088 */ 3089 int thread_count; 3090 3091 /** 3092 * Which multithreading methods to use. 3093 * Use of FF_THREAD_FRAME will increase decoding delay by one frame per thread, 3094 * so clients which cannot provide future frames should not use it. 3095 * 3096 * - encoding: Set by user, otherwise the default is used. 3097 * - decoding: Set by user, otherwise the default is used. 3098 */ 3099 int thread_type; 3100 //#define FF_THREAD_FRAME 1 ///< Decode more than one frame at once 3101 //#define FF_THREAD_SLICE 2 ///< Decode more than one part of a single frame at once 3102 3103 /** 3104 * Which multithreading methods are in use by the codec. 3105 * - encoding: Set by libavcodec. 3106 * - decoding: Set by libavcodec. 3107 */ 3108 int active_thread_type; 3109 3110 /** 3111 * Set by the client if its custom get_buffer() callback can be called 3112 * synchronously from another thread, which allows faster multithreaded decoding. 3113 * draw_horiz_band() will be called from other threads regardless of this setting. 3114 * Ignored if the default get_buffer() is used. 3115 * - encoding: Set by user. 3116 * - decoding: Set by user. 3117 */ 3118 int thread_safe_callbacks; 3119 3120 /** 3121 * The codec may call this to execute several independent things. 3122 * It will return only after finishing all tasks. 3123 * The user may replace this with some multithreaded implementation, 3124 * the default implementation will execute the parts serially. 3125 * @param count the number of things to execute 3126 * - encoding: Set by libavcodec, user can override. 3127 * - decoding: Set by libavcodec, user can override. 3128 */ 3129 int function(AVCodecContext *c, int function(AVCodecContext *c2, void *arg) func, void *arg2, int *ret, int count, int size) execute; 3130 3131 /** 3132 * The codec may call this to execute several independent things. 3133 * It will return only after finishing all tasks. 3134 * The user may replace this with some multithreaded implementation, 3135 * the default implementation will execute the parts serially. 3136 * Also see avcodec_thread_init and e.g. the --enable-pthread configure option. 3137 * @param c context passed also to func 3138 * @param count the number of things to execute 3139 * @param arg2 argument passed unchanged to func 3140 * @param ret return values of executed functions, must have space for "count" values. May be NULL. 3141 * @param func function that will be called count times, with jobnr from 0 to count-1. 3142 * threadnr will be in the range 0 to c->thread_count-1 < MAX_THREADS and so that no 3143 * two instances of func executing at the same time will have the same threadnr. 3144 * @return always 0 currently, but code should handle a future improvement where when any call to func 3145 * returns < 0 no further calls to func may be done and < 0 is returned. 3146 * - encoding: Set by libavcodec, user can override. 3147 * - decoding: Set by libavcodec, user can override. 3148 */ 3149 int function(AVCodecContext *c, int function(AVCodecContext *c2, void *arg, int jobnr, int threadnr) func, void *arg2, int *ret, int count) execute2; 3150 3151 /** 3152 * noise vs. sse weight for the nsse comparison function 3153 * - encoding: Set by user. 3154 * - decoding: unused 3155 */ 3156 int nsse_weight; 3157 3158 /** 3159 * profile 3160 * - encoding: Set by user. 3161 * - decoding: Set by libavcodec. 3162 */ 3163 int profile; 3164 //#define FF_PROFILE_UNKNOWN -99 3165 //#define FF_PROFILE_RESERVED -100 3166 3167 //#define FF_PROFILE_AAC_MAIN 0 3168 //#define FF_PROFILE_AAC_LOW 1 3169 //#define FF_PROFILE_AAC_SSR 2 3170 //#define FF_PROFILE_AAC_LTP 3 3171 //#define FF_PROFILE_AAC_HE 4 3172 //#define FF_PROFILE_AAC_HE_V2 28 3173 //#define FF_PROFILE_AAC_LD 22 3174 //#define FF_PROFILE_AAC_ELD 38 3175 //#define FF_PROFILE_MPEG2_AAC_LOW 128 3176 //#define FF_PROFILE_MPEG2_AAC_HE 131 3177 3178 //#define FF_PROFILE_DTS 20 3179 //#define FF_PROFILE_DTS_ES 30 3180 //#define FF_PROFILE_DTS_96_24 40 3181 //#define FF_PROFILE_DTS_HD_HRA 50 3182 //#define FF_PROFILE_DTS_HD_MA 60 3183 //#define FF_PROFILE_DTS_EXPRESS 70 3184 3185 //#define FF_PROFILE_MPEG2_422 0 3186 //#define FF_PROFILE_MPEG2_HIGH 1 3187 //#define FF_PROFILE_MPEG2_SS 2 3188 //#define FF_PROFILE_MPEG2_SNR_SCALABLE 3 3189 //#define FF_PROFILE_MPEG2_MAIN 4 3190 //#define FF_PROFILE_MPEG2_SIMPLE 5 3191 3192 //#define FF_PROFILE_H264_CONSTRAINED (1<<9) // 8+1; constraint_set1_flag 3193 //#define FF_PROFILE_H264_INTRA (1<<11) // 8+3; constraint_set3_flag 3194 3195 //#define FF_PROFILE_H264_BASELINE 66 3196 //#define FF_PROFILE_H264_CONSTRAINED_BASELINE (66|FF_PROFILE_H264_CONSTRAINED) 3197 //#define FF_PROFILE_H264_MAIN 77 3198 //#define FF_PROFILE_H264_EXTENDED 88 3199 //#define FF_PROFILE_H264_HIGH 100 3200 //#define FF_PROFILE_H264_HIGH_10 110 3201 //#define FF_PROFILE_H264_HIGH_10_INTRA (110|FF_PROFILE_H264_INTRA) 3202 //#define FF_PROFILE_H264_HIGH_422 122 3203 //#define FF_PROFILE_H264_HIGH_422_INTRA (122|FF_PROFILE_H264_INTRA) 3204 //#define FF_PROFILE_H264_HIGH_444 144 3205 //#define FF_PROFILE_H264_HIGH_444_PREDICTIVE 244 3206 //#define FF_PROFILE_H264_HIGH_444_INTRA (244|FF_PROFILE_H264_INTRA) 3207 //#define FF_PROFILE_H264_CAVLC_444 44 3208 3209 //#define FF_PROFILE_VC1_SIMPLE 0 3210 //#define FF_PROFILE_VC1_MAIN 1 3211 //#define FF_PROFILE_VC1_COMPLEX 2 3212 //#define FF_PROFILE_VC1_ADVANCED 3 3213 3214 //#define FF_PROFILE_MPEG4_SIMPLE 0 3215 //#define FF_PROFILE_MPEG4_SIMPLE_SCALABLE 1 3216 //#define FF_PROFILE_MPEG4_CORE 2 3217 //#define FF_PROFILE_MPEG4_MAIN 3 3218 //#define FF_PROFILE_MPEG4_N_BIT 4 3219 //#define FF_PROFILE_MPEG4_SCALABLE_TEXTURE 5 3220 //#define FF_PROFILE_MPEG4_SIMPLE_FACE_ANIMATION 6 3221 //#define FF_PROFILE_MPEG4_BASIC_ANIMATED_TEXTURE 7 3222 //#define FF_PROFILE_MPEG4_HYBRID 8 3223 //#define FF_PROFILE_MPEG4_ADVANCED_REAL_TIME 9 3224 //#define FF_PROFILE_MPEG4_CORE_SCALABLE 10 3225 //#define FF_PROFILE_MPEG4_ADVANCED_CODING 11 3226 //#define FF_PROFILE_MPEG4_ADVANCED_CORE 12 3227 //#define FF_PROFILE_MPEG4_ADVANCED_SCALABLE_TEXTURE 13 3228 //#define FF_PROFILE_MPEG4_SIMPLE_STUDIO 14 3229 //#define FF_PROFILE_MPEG4_ADVANCED_SIMPLE 15 3230 3231 //#define FF_PROFILE_JPEG2000_CSTREAM_RESTRICTION_0 0 3232 //#define FF_PROFILE_JPEG2000_CSTREAM_RESTRICTION_1 1 3233 //#define FF_PROFILE_JPEG2000_CSTREAM_NO_RESTRICTION 2 3234 //#define FF_PROFILE_JPEG2000_DCINEMA_2K 3 3235 //#define FF_PROFILE_JPEG2000_DCINEMA_4K 4 3236 3237 //#define FF_PROFILE_VP9_0 0 3238 //#define FF_PROFILE_VP9_1 1 3239 //#define FF_PROFILE_VP9_2 2 3240 //#define FF_PROFILE_VP9_3 3 3241 3242 //#define FF_PROFILE_HEVC_MAIN 1 3243 //#define FF_PROFILE_HEVC_MAIN_10 2 3244 //#define FF_PROFILE_HEVC_MAIN_STILL_PICTURE 3 3245 //#define FF_PROFILE_HEVC_REXT 4 3246 3247 /** 3248 * level 3249 * - encoding: Set by user. 3250 * - decoding: Set by libavcodec. 3251 */ 3252 int level; 3253 //#define FF_LEVEL_UNKNOWN -99 3254 3255 /** 3256 * Skip loop filtering for selected frames. 3257 * - encoding: unused 3258 * - decoding: Set by user. 3259 */ 3260 AVDiscard skip_loop_filter; 3261 3262 /** 3263 * Skip IDCT/dequantization for selected frames. 3264 * - encoding: unused 3265 * - decoding: Set by user. 3266 */ 3267 AVDiscard skip_idct; 3268 3269 /** 3270 * Skip decoding for selected frames. 3271 * - encoding: unused 3272 * - decoding: Set by user. 3273 */ 3274 AVDiscard skip_frame; 3275 3276 /** 3277 * Header containing style information for text subtitles. 3278 * For SUBTITLE_ASS subtitle type, it should contain the whole ASS 3279 * [Script Info] and [V4+ Styles] section, plus the [Events] line and 3280 * the Format line following. It shouldn't include any Dialogue line. 3281 * - encoding: Set/allocated/freed by user (before avcodec_open2()) 3282 * - decoding: Set/allocated/freed by libavcodec (by avcodec_open2()) 3283 */ 3284 uint8_t *subtitle_header; 3285 int subtitle_header_size; 3286 3287 static if (FF_API_ERROR_RATE) { 3288 /** 3289 * @deprecated use the 'error_rate' private AVOption of the mpegvideo 3290 * encoders 3291 */ 3292 deprecated 3293 int error_rate; 3294 } 3295 3296 static if (FF_API_VBV_DELAY) { 3297 /** 3298 * VBV delay coded in the last frame (in periods of a 27 MHz clock). 3299 * Used for compliant TS muxing. 3300 * - encoding: Set by libavcodec. 3301 * - decoding: unused. 3302 * @deprecated this value is now exported as a part of 3303 * AV_PKT_DATA_CPB_PROPERTIES packet side data 3304 */ 3305 deprecated 3306 uint64_t vbv_delay; 3307 } 3308 3309 static if (FF_API_SIDEDATA_ONLY_PKT) { 3310 /** 3311 * Encoding only and set by default. Allow encoders to output packets 3312 * that do not contain any encoded data, only side data. 3313 * 3314 * Some encoders need to output such packets, e.g. to update some stream 3315 * parameters at the end of encoding. 3316 * 3317 * @deprecated this field disables the default behaviour and 3318 * it is kept only for compatibility. 3319 */ 3320 deprecated 3321 int side_data_only_packets; 3322 } 3323 3324 /** 3325 * Audio only. The number of "priming" samples (padding) inserted by the 3326 * encoder at the beginning of the audio. I.e. this number of leading 3327 * decoded samples must be discarded by the caller to get the original audio 3328 * without leading padding. 3329 * 3330 * - decoding: unused 3331 * - encoding: Set by libavcodec. The timestamps on the output packets are 3332 * adjusted by the encoder so that they always refer to the 3333 * first sample of the data actually contained in the packet, 3334 * including any added padding. E.g. if the timebase is 3335 * 1/samplerate and the timestamp of the first input sample is 3336 * 0, the timestamp of the first output packet will be 3337 * -initial_padding. 3338 */ 3339 int initial_padding; 3340 3341 /** 3342 * - decoding: For codecs that store a framerate value in the compressed 3343 * bitstream, the decoder may export it here. { 0, 1} when 3344 * unknown. 3345 * - encoding: May be used to signal the framerate of CFR content to an 3346 * encoder. 3347 */ 3348 AVRational framerate; 3349 3350 /** 3351 * Nominal unaccelerated pixel format, see AV_PIX_FMT_xxx. 3352 * - encoding: unused. 3353 * - decoding: Set by libavcodec before calling get_format() 3354 */ 3355 AVPixelFormat sw_pix_fmt; 3356 3357 /** 3358 * Timebase in which pkt_dts/pts and AVPacket.dts/pts are. 3359 * Code outside libavcodec should access this field using: 3360 * av_codec_{get,set}_pkt_timebase(avctx) 3361 * - encoding unused. 3362 * - decoding set by user. 3363 */ 3364 AVRational pkt_timebase; 3365 3366 /** 3367 * AVCodecDescriptor 3368 * Code outside libavcodec should access this field using: 3369 * av_codec_{get,set}_codec_descriptor(avctx) 3370 * - encoding: unused. 3371 * - decoding: set by libavcodec. 3372 */ 3373 const AVCodecDescriptor *codec_descriptor; 3374 3375 static if (!FF_API_LOWRES) { 3376 /** 3377 * low resolution decoding, 1-> 1/2 size, 2->1/4 size 3378 * - encoding: unused 3379 * - decoding: Set by user. 3380 * Code outside libavcodec should access this field using: 3381 * av_codec_{get,set}_lowres(avctx) 3382 */ 3383 int lowres; 3384 } 3385 3386 /** 3387 * Current statistics for PTS correction. 3388 * - decoding: maintained and used by libavcodec, not intended to be used by user apps 3389 * - encoding: unused 3390 */ 3391 int64_t pts_correction_num_faulty_pts; /// Number of incorrect PTS values so far 3392 int64_t pts_correction_num_faulty_dts; /// Number of incorrect DTS values so far 3393 int64_t pts_correction_last_pts; /// PTS of the last frame 3394 int64_t pts_correction_last_dts; /// DTS of the last frame 3395 3396 /** 3397 * Character encoding of the input subtitles file. 3398 * - decoding: set by user 3399 * - encoding: unused 3400 */ 3401 char *sub_charenc; 3402 3403 /** 3404 * Subtitles character encoding mode. Formats or codecs might be adjusting 3405 * this setting (if they are doing the conversion themselves for instance). 3406 * - decoding: set by libavcodec 3407 * - encoding: unused 3408 */ 3409 int sub_charenc_mode; 3410 //#define FF_SUB_CHARENC_MODE_DO_NOTHING -1 ///< do nothing (demuxer outputs a stream supposed to be already in UTF-8, or the codec is bitmap for instance) 3411 //#define FF_SUB_CHARENC_MODE_AUTOMATIC 0 ///< libavcodec will select the mode itself 3412 //#define FF_SUB_CHARENC_MODE_PRE_DECODER 1 ///< the AVPacket data needs to be recoded to UTF-8 before being fed to the decoder, requires iconv 3413 3414 /** 3415 * Skip processing alpha if supported by codec. 3416 * Note that if the format uses pre-multiplied alpha (common with VP6, 3417 * and recommended due to better video quality/compression) 3418 * the image will look as if alpha-blended onto a black background. 3419 * However for formats that do not use pre-multiplied alpha 3420 * there might be serious artefacts (though e.g. libswscale currently 3421 * assumes pre-multiplied alpha anyway). 3422 * Code outside libavcodec should access this field using AVOptions 3423 * 3424 * - decoding: set by user 3425 * - encoding: unused 3426 */ 3427 int skip_alpha; 3428 3429 /** 3430 * Number of samples to skip after a discontinuity 3431 * - decoding: unused 3432 * - encoding: set by libavcodec 3433 */ 3434 int seek_preroll; 3435 3436 static if (!FF_API_DEBUG_MV) { 3437 /** 3438 * debug motion vectors 3439 * Code outside libavcodec should access this field using AVOptions 3440 * - encoding: Set by user. 3441 * - decoding: Set by user. 3442 */ 3443 int debug_mv; 3444 //#define FF_DEBUG_VIS_MV_P_FOR 0x00000001 //visualize forward predicted MVs of P frames 3445 //#define FF_DEBUG_VIS_MV_B_FOR 0x00000002 //visualize forward predicted MVs of B frames 3446 //#define FF_DEBUG_VIS_MV_B_BACK 0x00000004 //visualize backward predicted MVs of B frames 3447 } 3448 3449 /** 3450 * custom intra quantization matrix 3451 * Code outside libavcodec should access this field using av_codec_g/set_chroma_intra_matrix() 3452 * - encoding: Set by user, can be NULL. 3453 * - decoding: unused. 3454 */ 3455 uint16_t *chroma_intra_matrix; 3456 3457 /** 3458 * dump format separator. 3459 * can be ", " or "\n " or anything else 3460 * Code outside libavcodec should access this field using AVOptions 3461 * (NO direct access). 3462 * - encoding: Set by user. 3463 * - decoding: Set by user. 3464 */ 3465 uint8_t *dump_separator; 3466 3467 /** 3468 * ',' separated list of allowed decoders. 3469 * If NULL then all are allowed 3470 * - encoding: unused 3471 * - decoding: set by user through AVOPtions (NO direct access) 3472 */ 3473 char *codec_whitelist; 3474 3475 /* 3476 * Properties of the stream that gets decoded 3477 * To be accessed through av_codec_get_properties() (NO direct access) 3478 * - encoding: unused 3479 * - decoding: set by libavcodec 3480 */ 3481 uint properties; 3482 //#define FF_CODEC_PROPERTY_LOSSLESS 0x00000001 3483 //#define FF_CODEC_PROPERTY_CLOSED_CAPTIONS 0x00000002 3484 3485 /** 3486 * Additional data associated with the entire coded stream. 3487 * 3488 * - decoding: unused 3489 * - encoding: may be set by libavcodec after avcodec_open2(). 3490 */ 3491 AVPacketSideData *coded_side_data; 3492 int nb_coded_side_data; 3493 3494 /** 3495 * Encoding only. 3496 * 3497 * For hardware encoders configured to use a hwaccel pixel format, this 3498 * field should be set by the caller to a reference to the AVHWFramesContext 3499 * describing input frames. AVHWFramesContext.format must be equal to 3500 * AVCodecContext.pix_fmt. 3501 * 3502 * This field should be set before avcodec_open2() is called and is 3503 * afterwards owned and managed by libavcodec. 3504 */ 3505 AVBufferRef *hw_frames_ctx; 3506 3507 /** 3508 * Control the form of AVSubtitle.rects[N]->ass 3509 * - decoding: set by user 3510 * - encoding: unused 3511 */ 3512 int sub_text_format; 3513 //#define FF_SUB_TEXT_FMT_ASS 0 3514 //#if FF_API_ASS_TIMING 3515 //#define FF_SUB_TEXT_FMT_ASS_WITH_TIMINGS 1 3516 //#endif 3517 3518 } 3519 3520 AVRational av_codec_get_pkt_timebase (const AVCodecContext *avctx); 3521 void av_codec_set_pkt_timebase (AVCodecContext *avctx, AVRational val); 3522 3523 AVCodecDescriptor *av_codec_get_codec_descriptor(const AVCodecContext *avctx); 3524 void av_codec_set_codec_descriptor(AVCodecContext *avctx, const AVCodecDescriptor *desc); 3525 3526 uint av_codec_get_codec_properties(const AVCodecContext *avctx); 3527 3528 int av_codec_get_lowres(const AVCodecContext *avctx); 3529 void av_codec_set_lowres(AVCodecContext *avctx, int val); 3530 3531 int av_codec_get_seek_preroll(const AVCodecContext *avctx); 3532 void av_codec_set_seek_preroll(AVCodecContext *avctx, int val); 3533 3534 uint16_t *av_codec_get_chroma_intra_matrix(const AVCodecContext *avctx); 3535 void av_codec_set_chroma_intra_matrix(AVCodecContext *avctx, uint16_t *val); 3536 3537 /** 3538 * AVProfile. 3539 */ 3540 struct AVProfile { 3541 int profile; 3542 const char *name; ///< short name for the profile 3543 } 3544 3545 struct AVCodecDefault; 3546 3547 //struct AVSubtitle; 3548 3549 /** 3550 * AVCodec. 3551 */ 3552 struct AVCodec { 3553 /** 3554 * Name of the codec implementation. 3555 * The name is globally unique among encoders and among decoders (but an 3556 * encoder and a decoder can share the same name). 3557 * This is the primary way to find a codec from the user perspective. 3558 */ 3559 const char *name; 3560 /** 3561 * Descriptive name for the codec, meant to be more human readable than name. 3562 * You should use the NULL_IF_CONFIG_SMALL() macro to define it. 3563 */ 3564 const char *long_name; 3565 AVMediaType type; 3566 AVCodecID id; 3567 /** 3568 * Codec capabilities. 3569 * see CODEC_CAP_* 3570 */ 3571 int capabilities; 3572 const AVRational *supported_framerates; ///< array of supported framerates, or NULL if any, array is terminated by {0,0} 3573 const AVPixelFormat *pix_fmts; ///< array of supported pixel formats, or NULL if unknown, array is terminated by -1 3574 const int *supported_samplerates; ///< array of supported audio samplerates, or NULL if unknown, array is terminated by 0 3575 const AVSampleFormat *sample_fmts; ///< array of supported sample formats, or NULL if unknown, array is terminated by -1 3576 const uint64_t *channel_layouts; ///< array of support channel layouts, or NULL if unknown. array is terminated by 0 3577 uint8_t max_lowres; ///< maximum value for lowres supported by the decoder, no direct access, use av_codec_get_max_lowres() 3578 const AVClass *priv_class; ///< AVClass for the private context 3579 const AVProfile *profiles; ///< array of recognized profiles, or NULL if unknown, array is terminated by {FF_PROFILE_UNKNOWN} 3580 3581 /***************************************************************** 3582 * No fields below this line are part of the public API. They 3583 * may not be used outside of libavcodec and can be changed and 3584 * removed at will. 3585 * New public fields should be added right above. 3586 ***************************************************************** 3587 */ 3588 int priv_data_size; 3589 AVCodec *next; 3590 /** 3591 * @name Frame-level threading support functions 3592 * @{ 3593 */ 3594 /** 3595 * If defined, called on thread contexts when they are created. 3596 * If the codec allocates writable tables in init(), re-allocate them here. 3597 * priv_data will be set to a copy of the original. 3598 */ 3599 int function (AVCodecContext *) init_thread_copy; 3600 /** 3601 * Copy necessary context variables from a previous thread context to the current one. 3602 * If not defined, the next thread will start automatically; otherwise, the codec 3603 * must call ff_thread_finish_setup(). 3604 * 3605 * dst and src will (rarely) point to the same context, in which case memcpy should be skipped. 3606 */ 3607 int function(AVCodecContext *dst, const AVCodecContext *src) update_thread_context; 3608 /** @} */ 3609 3610 /** 3611 * Private codec-specific defaults. 3612 */ 3613 const AVCodecDefault *defaults; 3614 3615 /** 3616 * Initialize codec static data, called from avcodec_register(). 3617 */ 3618 void function(AVCodec *codec) init_static_data; 3619 3620 int function(AVCodecContext *) init; 3621 int function(AVCodecContext *, uint8_t *buf, int buf_size, 3622 const AVSubtitle *sub) encode_sub; 3623 /** 3624 * Encode data to an AVPacket. 3625 * 3626 * @param avctx codec context 3627 * @param avpkt output AVPacket (may contain a user-provided buffer) 3628 * @param[in] frame AVFrame containing the raw data to be encoded 3629 * @param[out] got_packet_ptr encoder sets to 0 or 1 to indicate that a 3630 * non-empty packet was returned in avpkt. 3631 * @return 0 on success, negative error code on failure 3632 */ 3633 int function(AVCodecContext *avctx, AVPacket *avpkt, const AVFrame *frame, 3634 int *got_packet_ptr) encode2; 3635 int function(AVCodecContext *, void *outdata, int *outdata_size, AVPacket *avpkt) decode; 3636 int function(AVCodecContext *) close; 3637 /** 3638 * Decode/encode API with decoupled packet/frame dataflow. The API is the 3639 * same as the avcodec_ prefixed APIs (avcodec_send_frame() etc.), except 3640 * that: 3641 * - never called if the codec is closed or the wrong type, 3642 * - AVPacket parameter change side data is applied right before calling 3643 * AVCodec->send_packet, 3644 * - if AV_CODEC_CAP_DELAY is not set, drain packets or frames are never sent, 3645 * - only one drain packet is ever passed down (until the next flush()), 3646 * - a drain AVPacket is always NULL (no need to check for avpkt->size). 3647 */ 3648 int function(AVCodecContext *avctx, const AVFrame *frame) send_frame; 3649 int function(AVCodecContext *avctx, const AVPacket *avpkt) send_packet; 3650 int function(AVCodecContext *avctx, AVFrame *frame) receive_frame; 3651 int function(AVCodecContext *avctx, AVPacket *avpkt) receive_packet; 3652 /** 3653 * Flush buffers. 3654 * Will be called when seeking 3655 */ 3656 void function(AVCodecContext *) flush; 3657 /** 3658 * Internal codec capabilities. 3659 * See FF_CODEC_CAP_* in internal.h 3660 */ 3661 int caps_internal; 3662 } 3663 3664 int av_codec_get_max_lowres(const AVCodec *codec); 3665 3666 struct MpegEncContext; 3667 3668 /** 3669 * @defgroup lavc_hwaccel AVHWAccel 3670 * @{ 3671 */ 3672 struct AVHWAccel { 3673 /** 3674 * Name of the hardware accelerated codec. 3675 * The name is globally unique among encoders and among decoders (but an 3676 * encoder and a decoder can share the same name). 3677 */ 3678 const char *name; 3679 3680 /** 3681 * Type of codec implemented by the hardware accelerator. 3682 * 3683 * See AVMEDIA_TYPE_xxx 3684 */ 3685 AVMediaType type; 3686 3687 /** 3688 * Codec implemented by the hardware accelerator. 3689 * 3690 * See AV_CODEC_ID_xxx 3691 */ 3692 AVCodecID id; 3693 3694 /** 3695 * Supported pixel format. 3696 * 3697 * Only hardware accelerated formats are supported here. 3698 */ 3699 AVPixelFormat pix_fmt; 3700 3701 /** 3702 * Hardware accelerated codec capabilities. 3703 * see FF_HWACCEL_CODEC_CAP_* 3704 */ 3705 int capabilities; 3706 3707 /***************************************************************** 3708 * No fields below this line are part of the public API. They 3709 * may not be used outside of libavcodec and can be changed and 3710 * removed at will. 3711 * New public fields should be added right above. 3712 ***************************************************************** 3713 */ 3714 AVHWAccel *next; 3715 3716 /** 3717 * Allocate a custom buffer 3718 */ 3719 int function(AVCodecContext *avctx, AVFrame *frame) alloc_frame; 3720 3721 /** 3722 * Called at the beginning of each frame or field picture. 3723 * 3724 * Meaningful frame information (codec specific) is guaranteed to 3725 * be parsed at this point. This function is mandatory. 3726 * 3727 * Note that buf can be NULL along with buf_size set to 0. 3728 * Otherwise, this means the whole frame is available at this point. 3729 * 3730 * @param avctx the codec context 3731 * @param buf the frame data buffer base 3732 * @param buf_size the size of the frame in bytes 3733 * @return zero if successful, a negative value otherwise 3734 */ 3735 int function(AVCodecContext *avctx, const uint8_t *buf, uint32_t buf_size) start_frame; 3736 3737 /** 3738 * Callback for each slice. 3739 * 3740 * Meaningful slice information (codec specific) is guaranteed to 3741 * be parsed at this point. This function is mandatory. 3742 * The only exception is XvMC, that works on MB level. 3743 * 3744 * @param avctx the codec context 3745 * @param buf the slice data buffer base 3746 * @param buf_size the size of the slice in bytes 3747 * @return zero if successful, a negative value otherwise 3748 */ 3749 int function(AVCodecContext *avctx, const uint8_t *buf, uint32_t buf_size) decode_slice; 3750 3751 /** 3752 * Called at the end of each frame or field picture. 3753 * 3754 * The whole picture is parsed at this point and can now be sent 3755 * to the hardware accelerator. This function is mandatory. 3756 * 3757 * @param avctx the codec context 3758 * @return zero if successful, a negative value otherwise 3759 */ 3760 int function(AVCodecContext *avctx) end_frame; 3761 3762 /** 3763 * Size of per-frame hardware accelerator private data. 3764 * 3765 * Private data is allocated with av_mallocz() before 3766 * AVCodecContext.get_buffer() and deallocated after 3767 * AVCodecContext.release_buffer(). 3768 */ 3769 int frame_priv_data_size; 3770 3771 /** 3772 * Called for every Macroblock in a slice. 3773 * 3774 * XvMC uses it to replace the ff_mpv_decode_mb(). 3775 * Instead of decoding to raw picture, MB parameters are 3776 * stored in an array provided by the video driver. 3777 * 3778 * @param s the mpeg context 3779 */ 3780 void function(MpegEncContext *s) decode_mb; 3781 3782 /** 3783 * Initialize the hwaccel private data. 3784 * 3785 * This will be called from ff_get_format(), after hwaccel and 3786 * hwaccel_context are set and the hwaccel private data in AVCodecInternal 3787 * is allocated. 3788 */ 3789 int function (AVCodecContext *avctx) init; 3790 3791 /** 3792 * Uninitialize the hwaccel private data. 3793 * 3794 * This will be called from get_format() or avcodec_close(), after hwaccel 3795 * and hwaccel_context are already uninitialized. 3796 */ 3797 int function(AVCodecContext *avctx) uninit; 3798 3799 /** 3800 * Size of the private data to allocate in 3801 * AVCodecInternal.hwaccel_priv_data. 3802 */ 3803 int priv_data_size; 3804 } 3805 3806 /** 3807 * Hardware acceleration should be used for decoding even if the codec level 3808 * used is unknown or higher than the maximum supported level reported by the 3809 * hardware driver. 3810 * 3811 * It's generally a good idea to pass this flag unless you have a specific 3812 * reason not to, as hardware tends to under-report supported levels. 3813 */ 3814 enum AV_HWACCEL_FLAG_IGNORE_LEVEL = (1 << 0); 3815 3816 /** 3817 * Hardware acceleration can output YUV pixel formats with a different chroma 3818 * sampling than 4:2:0 and/or other than 8 bits per component. 3819 */ 3820 enum AV_HWACCEL_FLAG_ALLOW_HIGH_DEPTH = (1 << 1); 3821 3822 /** 3823 * @} 3824 */ 3825 3826 static if(FF_API_AVPICTURE){ 3827 /** 3828 * @defgroup lavc_picture AVPicture 3829 * 3830 * Functions for working with AVPicture 3831 * @{ 3832 */ 3833 3834 /** 3835 * Picture data structure. 3836 * 3837 * Up to four components can be stored into it, the last component is 3838 * alpha. 3839 * @deprecated use AVFrame or imgutils functions instead 3840 */ 3841 struct AVPicture { 3842 deprecated 3843 uint8_t *[AV_NUM_DATA_POINTERS]data; ///< pointers to the image data planes 3844 deprecated 3845 int [AV_NUM_DATA_POINTERS]linesize; ///< number of bytes per line 3846 } 3847 3848 /** 3849 * @} 3850 */ 3851 } 3852 3853 enum AVSubtitleType { 3854 SUBTITLE_NONE, 3855 3856 SUBTITLE_BITMAP, ///< A bitmap, pict will be set 3857 3858 /** 3859 * Plain text, the text field must be set by the decoder and is 3860 * authoritative. ass and pict fields may contain approximations. 3861 */ 3862 SUBTITLE_TEXT, 3863 3864 /** 3865 * Formatted text, the ass field must be set by the decoder and is 3866 * authoritative. pict and text fields may contain approximations. 3867 */ 3868 SUBTITLE_ASS, 3869 } 3870 3871 enum AV_SUBTITLE_FLAG_FORCED=0x00000001; 3872 3873 struct AVSubtitleRect { 3874 int x; ///< top left corner of pict, undefined when pict is not set 3875 int y; ///< top left corner of pict, undefined when pict is not set 3876 int w; ///< width of pict, undefined when pict is not set 3877 int h; ///< height of pict, undefined when pict is not set 3878 int nb_colors; ///< number of colors in pict, undefined when pict is not set 3879 3880 static if(FF_API_AVPICTURE){ 3881 /** 3882 * @deprecated unused 3883 */ 3884 deprecated 3885 AVPicture pict; 3886 } 3887 /** 3888 * data+linesize for the bitmap of this subtitle. 3889 * Can be set for text/ass as well once they are rendered. 3890 */ 3891 uint8_t [4]*data; 3892 int [4]linesize; 3893 3894 AVSubtitleType type; 3895 3896 char *text; ///< 0 terminated plain UTF-8 text 3897 3898 /** 3899 * 0 terminated ASS/SSA compatible event line. 3900 * The presentation of this is unaffected by the other values in this 3901 * struct. 3902 */ 3903 char *ass; 3904 3905 int flags; 3906 } 3907 3908 struct AVSubtitle { 3909 uint16_t format; /* 0 = graphics */ 3910 uint32_t start_display_time; /* relative to packet pts, in ms */ 3911 uint32_t end_display_time; /* relative to packet pts, in ms */ 3912 uint num_rects; 3913 AVSubtitleRect **rects; 3914 int64_t pts; ///< Same as packet pts, in AV_TIME_BASE 3915 } 3916 3917 /** 3918 * This struct describes the properties of an encoded stream. 3919 * 3920 * sizeof(AVCodecParameters) is not a part of the public ABI, this struct must 3921 * be allocated with avcodec_parameters_alloc() and freed with 3922 * avcodec_parameters_free(). 3923 */ 3924 struct AVCodecParameters { 3925 /** 3926 * General type of the encoded data. 3927 */ 3928 AVMediaType codec_type; 3929 /** 3930 * Specific type of the encoded data (the codec used). 3931 */ 3932 AVCodecID codec_id; 3933 /** 3934 * Additional information about the codec (corresponds to the AVI FOURCC). 3935 */ 3936 uint32_t codec_tag; 3937 3938 /** 3939 * Extra binary data needed for initializing the decoder, codec-dependent. 3940 * 3941 * Must be allocated with av_malloc() and will be freed by 3942 * avcodec_parameters_free(). The allocated size of extradata must be at 3943 * least extradata_size + AV_INPUT_BUFFER_PADDING_SIZE, with the padding 3944 * bytes zeroed. 3945 */ 3946 uint8_t *extradata; 3947 /** 3948 * Size of the extradata content in bytes. 3949 */ 3950 int extradata_size; 3951 3952 /** 3953 * - video: the pixel format, the value corresponds to enum AVPixelFormat. 3954 * - audio: the sample format, the value corresponds to enum AVSampleFormat. 3955 */ 3956 int format; 3957 3958 /** 3959 * The average bitrate of the encoded data (in bits per second). 3960 */ 3961 int64_t bit_rate; 3962 3963 /** 3964 * The number of bits per sample in the codedwords. 3965 * 3966 * This is basically the bitrate per sample. It is mandatory for a bunch of 3967 * formats to actually decode them. It's the number of bits for one sample in 3968 * the actual coded bitstream. 3969 * 3970 * This could be for example 4 for ADPCM 3971 * For PCM formats this matches bits_per_raw_sample 3972 * Can be 0 3973 */ 3974 int bits_per_coded_sample; 3975 3976 /** 3977 * This is the number of valid bits in each output sample. If the 3978 * sample format has more bits, the least significant bits are additional 3979 * padding bits, which are always 0. Use right shifts to reduce the sample 3980 * to its actual size. For example, audio formats with 24 bit samples will 3981 * have bits_per_raw_sample set to 24, and format set to AV_SAMPLE_FMT_S32. 3982 * To get the original sample use "(int32_t)sample >> 8"." 3983 * 3984 * For ADPCM this might be 12 or 16 or similar 3985 * Can be 0 3986 */ 3987 int bits_per_raw_sample; 3988 3989 /** 3990 * Codec-specific bitstream restrictions that the stream conforms to. 3991 */ 3992 int profile; 3993 int level; 3994 3995 /** 3996 * Video only. The dimensions of the video frame in pixels. 3997 */ 3998 int width; 3999 int height; 4000 4001 /** 4002 * Video only. The aspect ratio (width / height) which a single pixel 4003 * should have when displayed. 4004 * 4005 * When the aspect ratio is unknown / undefined, the numerator should be 4006 * set to 0 (the denominator may have any value). 4007 */ 4008 AVRational sample_aspect_ratio; 4009 4010 /** 4011 * Video only. The order of the fields in interlaced video. 4012 */ 4013 AVFieldOrder field_order; 4014 4015 /** 4016 * Video only. Additional colorspace characteristics. 4017 */ 4018 AVColorRange color_range; 4019 AVColorPrimaries color_primaries; 4020 AVColorTransferCharacteristic color_trc; 4021 AVColorSpace color_space; 4022 AVChromaLocation chroma_location; 4023 4024 /** 4025 * Video only. Number of delayed frames. 4026 */ 4027 int video_delay; 4028 4029 /** 4030 * Audio only. The channel layout bitmask. May be 0 if the channel layout is 4031 * unknown or unspecified, otherwise the number of bits set must be equal to 4032 * the channels field. 4033 */ 4034 uint64_t channel_layout; 4035 /** 4036 * Audio only. The number of audio channels. 4037 */ 4038 int channels; 4039 /** 4040 * Audio only. The number of audio samples per second. 4041 */ 4042 int sample_rate; 4043 /** 4044 * Audio only. The number of bytes per coded audio frame, required by some 4045 * formats. 4046 * 4047 * Corresponds to nBlockAlign in WAVEFORMATEX. 4048 */ 4049 int block_align; 4050 /** 4051 * Audio only. Audio frame size, if known. Required by some formats to be static. 4052 */ 4053 int frame_size; 4054 4055 /** 4056 * Audio only. The amount of padding (in samples) inserted by the encoder at 4057 * the beginning of the audio. I.e. this number of leading decoded samples 4058 * must be discarded by the caller to get the original audio without leading 4059 * padding. 4060 */ 4061 int initial_padding; 4062 /** 4063 * Audio only. The amount of padding (in samples) appended by the encoder to 4064 * the end of the audio. I.e. this number of decoded samples must be 4065 * discarded by the caller from the end of the stream to get the original 4066 * audio without any trailing padding. 4067 */ 4068 int trailing_padding; 4069 /** 4070 * Audio only. Number of samples to skip after a discontinuity. 4071 */ 4072 int seek_preroll; 4073 } 4074 4075 /** 4076 * If c is NULL, returns the first registered codec, 4077 * if c is non-NULL, returns the next registered codec after c, 4078 * or NULL if c is the last one. 4079 */ 4080 AVCodec *av_codec_next(AVCodec *c); 4081 4082 /** 4083 * Return the LIBAVCODEC_VERSION_INT constant. 4084 */ 4085 uint avcodec_version(); 4086 4087 /** 4088 * Return the libavcodec build-time configuration. 4089 */ 4090 const (char) *avcodec_configuration(); 4091 4092 /** 4093 * Return the libavcodec license. 4094 */ 4095 char *avcodec_license(); 4096 4097 /** 4098 * Register the codec codec and initialize libavcodec. 4099 * 4100 * @warning either this function or avcodec_register_all() must be called 4101 * before any other libavcodec functions. 4102 * 4103 * @see avcodec_register_all() 4104 */ 4105 void avcodec_register(AVCodec *codec); 4106 4107 /** 4108 * Register all the codecs, parsers and bitstream filters which were enabled at 4109 * configuration time. If you do not call this function you can select exactly 4110 * which formats you want to support, by using the individual registration 4111 * functions. 4112 * 4113 * @see avcodec_register 4114 * @see av_register_codec_parser 4115 * @see av_register_bitstream_filter 4116 */ 4117 void avcodec_register_all(); 4118 4119 /** 4120 * Allocate an AVCodecContext and set its fields to default values. The 4121 * resulting struct should be freed with avcodec_free_context(). 4122 * 4123 * @param codec if non-NULL, allocate private data and initialize defaults 4124 * for the given codec. It is illegal to then call avcodec_open2() 4125 * with a different codec. 4126 * If NULL, then the codec-specific defaults won't be initialized, 4127 * which may result in suboptimal default settings (this is 4128 * important mainly for encoders, e.g. libx264). 4129 * 4130 * @return An AVCodecContext filled with default values or NULL on failure. 4131 */ 4132 AVCodecContext *avcodec_alloc_context3(const AVCodec *codec); 4133 4134 /** 4135 * Free the codec context and everything associated with it and write NULL to 4136 * the provided pointer. 4137 */ 4138 void avcodec_free_context(AVCodecContext **avctx); 4139 4140 static if(FF_API_GET_CONTEXT_DEFAULTS){ 4141 /** 4142 * @deprecated This function should not be used, as closing and opening a codec 4143 * context multiple time is not supported. A new codec context should be 4144 * allocated for each new use. 4145 */ 4146 int avcodec_get_context_defaults3(AVCodecContext *s, AVCodec *codec); 4147 } 4148 4149 /** 4150 * Get the AVClass for AVCodecContext. It can be used in combination with 4151 * AV_OPT_SEARCH_FAKE_OBJ for examining options. 4152 * 4153 * @see av_opt_find(). 4154 */ 4155 AVClass *avcodec_get_class(); 4156 4157 static if(FF_API_COPY_CONTEXT){ 4158 /** 4159 * Get the AVClass for AVFrame. It can be used in combination with 4160 * AV_OPT_SEARCH_FAKE_OBJ for examining options. 4161 * 4162 * @see av_opt_find(). 4163 */ 4164 AVClass *avcodec_get_frame_class(); 4165 4166 /** 4167 * Get the AVClass for AVSubtitleRect. It can be used in combination with 4168 * AV_OPT_SEARCH_FAKE_OBJ for examining options. 4169 * 4170 * @see av_opt_find(). 4171 */ 4172 AVClass *avcodec_get_subtitle_rect_class(); 4173 4174 /** 4175 * Copy the settings of the source AVCodecContext into the destination 4176 * AVCodecContext. The resulting destination codec context will be 4177 * unopened, i.e. you are required to call avcodec_open2() before you 4178 * can use this AVCodecContext to decode/encode video/audio data. 4179 * 4180 * @param dest target codec context, should be initialized with 4181 * avcodec_alloc_context3(NULL), but otherwise uninitialized 4182 * @param src source codec context 4183 * @return AVERROR() on error (e.g. memory allocation error), 0 on success 4184 * 4185 * @deprecated The semantics of this function are ill-defined and it should not 4186 * be used. If you need to transfer the stream parameters from one codec context 4187 * to another, use an intermediate AVCodecParameters instance and the 4188 * avcodec_parameters_from_context() / avcodec_parameters_to_context() 4189 * functions. 4190 */ 4191 deprecated 4192 int avcodec_copy_context(AVCodecContext *dest, const AVCodecContext *src); 4193 } 4194 4195 /** 4196 * Allocate a new AVCodecParameters and set its fields to default values 4197 * (unknown/invalid/0). The returned struct must be freed with 4198 * avcodec_parameters_free(). 4199 */ 4200 AVCodecParameters *avcodec_parameters_alloc(); 4201 4202 /** 4203 * Free an AVCodecParameters instance and everything associated with it and 4204 * write NULL to the supplied pointer. 4205 */ 4206 void avcodec_parameters_free(AVCodecParameters **par); 4207 4208 /** 4209 * Copy the contents of src to dst. Any allocated fields in dst are freed and 4210 * replaced with newly allocated duplicates of the corresponding fields in src. 4211 * 4212 * @return >= 0 on success, a negative AVERROR code on failure. 4213 */ 4214 int avcodec_parameters_copy(AVCodecParameters *dst, AVCodecParameters *src); 4215 4216 /** 4217 * Fill the parameters struct based on the values from the supplied codec 4218 * context. Any allocated fields in par are freed and replaced with duplicates 4219 * of the corresponding fields in codec. 4220 * 4221 * @return >= 0 on success, a negative AVERROR code on failure 4222 */ 4223 int avcodec_parameters_from_context(AVCodecParameters *par, 4224 AVCodecContext *codec); 4225 4226 /** 4227 * Fill the codec context based on the values from the supplied codec 4228 * parameters. Any allocated fields in codec that have a corresponding field in 4229 * par are freed and replaced with duplicates of the corresponding field in par. 4230 * Fields in codec that do not have a counterpart in par are not touched. 4231 * 4232 * @return >= 0 on success, a negative AVERROR code on failure. 4233 */ 4234 int avcodec_parameters_to_context(AVCodecContext *codec, 4235 AVCodecParameters *par); 4236 4237 /** 4238 * Initialize the AVCodecContext to use the given AVCodec. Prior to using this 4239 * function the context has to be allocated with avcodec_alloc_context3(). 4240 * 4241 * The functions avcodec_find_decoder_by_name(), avcodec_find_encoder_by_name(), 4242 * avcodec_find_decoder() and avcodec_find_encoder() provide an easy way for 4243 * retrieving a codec. 4244 * 4245 * @warning This function is not thread safe! 4246 * 4247 * @note Always call this function before using decoding routines (such as 4248 * @ref avcodec_receive_frame()). 4249 * 4250 * @code 4251 * avcodec_register_all(); 4252 * av_dict_set(&opts, "b", "2.5M", 0); 4253 * codec = avcodec_find_decoder(AV_CODEC_ID_H264); 4254 * if (!codec) 4255 * exit(1); 4256 * 4257 * context = avcodec_alloc_context3(codec); 4258 * 4259 * if (avcodec_open2(context, codec, opts) < 0) 4260 * exit(1); 4261 * @endcode 4262 * 4263 * @param avctx The context to initialize. 4264 * @param codec The codec to open this context for. If a non-NULL codec has been 4265 * previously passed to avcodec_alloc_context3() or 4266 * for this context, then this parameter MUST be either NULL or 4267 * equal to the previously passed codec. 4268 * @param options A dictionary filled with AVCodecContext and codec-private options. 4269 * On return this object will be filled with options that were not found. 4270 * 4271 * @return zero on success, a negative value on error 4272 * @see avcodec_alloc_context3(), avcodec_find_decoder(), avcodec_find_encoder(), 4273 * av_dict_set(), av_opt_find(). 4274 */ 4275 int avcodec_open2(AVCodecContext *avctx, AVCodec *codec, AVDictionary **options); 4276 4277 /** 4278 * Close a given AVCodecContext and free all the data associated with it 4279 * (but not the AVCodecContext itself). 4280 * 4281 * Calling this function on an AVCodecContext that hasn't been opened will free 4282 * the codec-specific data allocated in avcodec_alloc_context3() with a non-NULL 4283 * codec. Subsequent calls will do nothing. 4284 * 4285 * @note Do not use this function. Use avcodec_free_context() to destroy a 4286 * codec context (either open or closed). Opening and closing a codec context 4287 * multiple times is not supported anymore -- use multiple codec contexts 4288 * instead. 4289 */ 4290 int avcodec_close(AVCodecContext *avctx); 4291 4292 /** 4293 * Free all allocated data in the given subtitle struct. 4294 * 4295 * @param sub AVSubtitle to free. 4296 */ 4297 void avsubtitle_free(AVSubtitle *sub); 4298 4299 /** 4300 * @} 4301 */ 4302 4303 /** 4304 * @addtogroup lavc_packet 4305 * @{ 4306 */ 4307 4308 /** 4309 * Allocate an AVPacket and set its fields to default values. The resulting 4310 * struct must be freed using av_packet_free(). 4311 * 4312 * @return An AVPacket filled with default values or NULL on failure. 4313 * 4314 * @note this only allocates the AVPacket itself, not the data buffers. Those 4315 * must be allocated through other means such as av_new_packet. 4316 * 4317 * @see av_new_packet 4318 */ 4319 AVPacket *av_packet_alloc(); 4320 4321 /** 4322 * Create a new packet that references the same data as src. 4323 * 4324 * This is a shortcut for av_packet_alloc()+av_packet_ref(). 4325 * 4326 * @return newly created AVPacket on success, NULL on error. 4327 * 4328 * @see av_packet_alloc 4329 * @see av_packet_ref 4330 */ 4331 AVPacket *av_packet_clone(AVPacket *src); 4332 4333 /** 4334 * Free the packet, if the packet is reference counted, it will be 4335 * unreferenced first. 4336 * 4337 * @param packet packet to be freed. The pointer will be set to NULL. 4338 * @note passing NULL is a no-op. 4339 */ 4340 void av_packet_free(AVPacket **pkt); 4341 4342 /** 4343 * Initialize optional fields of a packet with default values. 4344 * 4345 * Note, this does not touch the data and size members, which have to be 4346 * initialized separately. 4347 * 4348 * @param pkt packet 4349 */ 4350 void av_init_packet(AVPacket *pkt); 4351 4352 /** 4353 * Allocate the payload of a packet and initialize its fields with 4354 * default values. 4355 * 4356 * @param pkt packet 4357 * @param size wanted payload size 4358 * @return 0 if OK, AVERROR_xxx otherwise 4359 */ 4360 int av_new_packet(AVPacket *pkt, int size); 4361 4362 /** 4363 * Reduce packet size, correctly zeroing padding 4364 * 4365 * @param pkt packet 4366 * @param size new size 4367 */ 4368 void av_shrink_packet(AVPacket *pkt, int size); 4369 4370 /** 4371 * Increase packet size, correctly zeroing padding 4372 * 4373 * @param pkt packet 4374 * @param grow_by number of bytes by which to increase the size of the packet 4375 */ 4376 int av_grow_packet(AVPacket *pkt, int grow_by); 4377 4378 /** 4379 * Initialize a reference-counted packet from av_malloc()ed data. 4380 * 4381 * @param pkt packet to be initialized. This function will set the data, size, 4382 * buf and destruct fields, all others are left untouched. 4383 * @param data Data allocated by av_malloc() to be used as packet data. If this 4384 * function returns successfully, the data is owned by the underlying AVBuffer. 4385 * The caller may not access the data through other means. 4386 * @param size size of data in bytes, without the padding. I.e. the full buffer 4387 * size is assumed to be size + FF_INPUT_BUFFER_PADDING_SIZE. 4388 * 4389 * @return 0 on success, a negative AVERROR on error 4390 */ 4391 int av_packet_from_data(AVPacket *pkt, uint8_t *data, int size); 4392 4393 static if(FF_API_AVPACKET_OLD_API){ 4394 /** 4395 * @warning This is a hack - the packet memory allocation stuff is broken. The 4396 * packet is allocated if it was not really allocated. 4397 * 4398 * @deprecated Use av_packet_ref 4399 */ 4400 deprecated 4401 int av_dup_packet(AVPacket *pkt); 4402 /** 4403 * Copy packet, including contents 4404 * 4405 * @return 0 on success, negative AVERROR on fail 4406 */ 4407 int av_copy_packet(AVPacket *dst, AVPacket *src); 4408 4409 /** 4410 * Copy packet side data 4411 * 4412 * @return 0 on success, negative AVERROR on fail 4413 */ 4414 int av_copy_packet_side_data(AVPacket *dst, AVPacket *src); 4415 4416 /** 4417 * Free a packet. 4418 * 4419 * @deprecated Use av_packet_unref 4420 * 4421 * @param pkt packet to free 4422 */ 4423 deprecated 4424 void av_free_packet(AVPacket *pkt); 4425 } 4426 /** 4427 * Allocate new information of a packet. 4428 * 4429 * @param pkt packet 4430 * @param type side information type 4431 * @param size side information size 4432 * @return pointer to fresh allocated data or NULL otherwise 4433 */ 4434 uint8_t* av_packet_new_side_data(AVPacket *pkt, AVPacketSideDataType type, 4435 int size); 4436 4437 /** 4438 * Wrap an existing array as a packet side data. 4439 * 4440 * @param pkt packet 4441 * @param type side information type 4442 * @param data the side data array. It must be allocated with the av_malloc() 4443 * family of functions. The ownership of the data is transferred to 4444 * pkt. 4445 * @param size side information size 4446 * @return a non-negative number on success, a negative AVERROR code on 4447 * failure. On failure, the packet is unchanged and the data remains 4448 * owned by the caller. 4449 */ 4450 int av_packet_add_side_data(AVPacket *pkt, AVPacketSideDataType type, 4451 uint8_t *data, size_t size); 4452 4453 /** 4454 * Shrink the already allocated side data buffer 4455 * 4456 * @param pkt packet 4457 * @param type side information type 4458 * @param size new side information size 4459 * @return 0 on success, < 0 on failure 4460 */ 4461 int av_packet_shrink_side_data(AVPacket *pkt, AVPacketSideDataType type, 4462 int size); 4463 4464 /** 4465 * Get side information from packet. 4466 * 4467 * @param pkt packet 4468 * @param type desired side information type 4469 * @param size pointer for side information size to store (optional) 4470 * @return pointer to data if present or NULL otherwise 4471 */ 4472 uint8_t* av_packet_get_side_data(AVPacket *pkt, AVPacketSideDataType type, 4473 int *size); 4474 4475 int av_packet_merge_side_data(AVPacket *pkt); 4476 4477 int av_packet_split_side_data(AVPacket *pkt); 4478 4479 char *av_packet_side_data_name(AVPacketSideDataType type); 4480 4481 /** 4482 * Pack a dictionary for use in side_data. 4483 * 4484 * @param dict The dictionary to pack. 4485 * @param size pointer to store the size of the returned data 4486 * @return pointer to data if successful, NULL otherwise 4487 */ 4488 uint8_t *av_packet_pack_dictionary(AVDictionary *dict, int *size); 4489 /** 4490 * Unpack a dictionary from side_data. 4491 * 4492 * @param data data from side_data 4493 * @param size size of the data 4494 * @param dict the metadata storage dictionary 4495 * @return 0 on success, < 0 on failure 4496 */ 4497 int av_packet_unpack_dictionary(const uint8_t *data, int size, AVDictionary **dict); 4498 4499 4500 /** 4501 * Convenience function to free all the side data stored. 4502 * All the other fields stay untouched. 4503 * 4504 * @param pkt packet 4505 */ 4506 void av_packet_free_side_data(AVPacket *pkt); 4507 4508 /** 4509 * Setup a new reference to the data described by a given packet 4510 * 4511 * If src is reference-counted, setup dst as a new reference to the 4512 * buffer in src. Otherwise allocate a new buffer in dst and copy the 4513 * data from src into it. 4514 * 4515 * All the other fields are copied from src. 4516 * 4517 * @see av_packet_unref 4518 * 4519 * @param dst Destination packet 4520 * @param src Source packet 4521 * 4522 * @return 0 on success, a negative AVERROR on error. 4523 */ 4524 int av_packet_ref(AVPacket *dst, const AVPacket *src); 4525 4526 /** 4527 * Wipe the packet. 4528 * 4529 * Unreference the buffer referenced by the packet and reset the 4530 * remaining packet fields to their default values. 4531 * 4532 * @param pkt The packet to be unreferenced. 4533 */ 4534 void av_packet_unref(AVPacket *pkt); 4535 4536 /** 4537 * Move every field in src to dst and reset src. 4538 * 4539 * @see av_packet_unref 4540 * 4541 * @param src Source packet, will be reset 4542 * @param dst Destination packet 4543 */ 4544 void av_packet_move_ref(AVPacket *dst, AVPacket *src); 4545 4546 /** 4547 * Copy only "properties" fields from src to dst. 4548 * 4549 * Properties for the purpose of this function are all the fields 4550 * beside those related to the packet data (buf, data, size) 4551 * 4552 * @param dst Destination packet 4553 * @param src Source packet 4554 * 4555 * @return 0 on success AVERROR on failure. 4556 */ 4557 int av_packet_copy_props(AVPacket *dst, const AVPacket *src); 4558 4559 /** 4560 * Convert valid timing fields (timestamps / durations) in a packet from one 4561 * timebase to another. Timestamps with unknown values (AV_NOPTS_VALUE) will be 4562 * ignored. 4563 * 4564 * @param pkt packet on which the conversion will be performed 4565 * @param tb_src source timebase, in which the timing fields in pkt are 4566 * expressed 4567 * @param tb_dst destination timebase, to which the timing fields will be 4568 * converted 4569 */ 4570 void av_packet_rescale_ts(AVPacket *pkt, AVRational tb_src, AVRational tb_dst); 4571 4572 /** 4573 * @} 4574 */ 4575 4576 /** 4577 * @addtogroup lavc_decoding 4578 * @{ 4579 */ 4580 4581 /** 4582 * Find a registered decoder with a matching codec ID. 4583 * 4584 * @param id AVCodecID of the requested decoder 4585 * @return A decoder if one was found, NULL otherwise. 4586 */ 4587 AVCodec *avcodec_find_decoder(AVCodecID id); 4588 4589 /** 4590 * Find a registered decoder with the specified name. 4591 * 4592 * @param name name of the requested decoder 4593 * @return A decoder if one was found, NULL otherwise. 4594 */ 4595 AVCodec *avcodec_find_decoder_by_name(const char *name); 4596 4597 /** 4598 * The default callback for AVCodecContext.get_buffer2(). It is made public so 4599 * it can be called by custom get_buffer2() implementations for decoders without 4600 * CODEC_CAP_DR1 set. 4601 */ 4602 int avcodec_default_get_buffer2(AVCodecContext *s, AVFrame *frame, int flags); 4603 4604 static if (FF_API_EMU_EDGE) { 4605 /** 4606 * Return the amount of padding in pixels which the get_buffer callback must 4607 * provide around the edge of the image for codecs which do not have the 4608 * CODEC_FLAG_EMU_EDGE flag. 4609 * 4610 * @return Required padding in pixels. 4611 * 4612 * @deprecated CODEC_FLAG_EMU_EDGE is deprecated, so this function is no longer 4613 * needed 4614 */ 4615 deprecated 4616 uint avcodec_get_edge_width(); 4617 } 4618 4619 /** 4620 * Modify width and height values so that they will result in a memory 4621 * buffer that is acceptable for the codec if you do not use any horizontal 4622 * padding. 4623 * 4624 * May only be used if a codec with CODEC_CAP_DR1 has been opened. 4625 */ 4626 void avcodec_align_dimensions(AVCodecContext *s, int *width, int *height); 4627 4628 /** 4629 * Modify width and height values so that they will result in a memory 4630 * buffer that is acceptable for the codec if you also ensure that all 4631 * line sizes are a multiple of the respective linesize_align[i]. 4632 * 4633 * May only be used if a codec with CODEC_CAP_DR1 has been opened. 4634 */ 4635 void avcodec_align_dimensions2(AVCodecContext *s, int *width, int *height, 4636 int [AV_NUM_DATA_POINTERS]linesize_align); 4637 4638 /** 4639 * Converts AVChromaLocation to swscale x/y chroma position. 4640 * 4641 * The positions represent the chroma (0,0) position in a coordinates system 4642 * with luma (0,0) representing the origin and luma(1,1) representing 256,256 4643 * 4644 * @param xpos horizontal chroma sample position 4645 * @param ypos vertical chroma sample position 4646 */ 4647 int avcodec_enum_to_chroma_pos(int *xpos, int *ypos, AVChromaLocation pos); 4648 4649 /** 4650 * Converts swscale x/y chroma position to AVChromaLocation. 4651 * 4652 * The positions represent the chroma (0,0) position in a coordinates system 4653 * with luma (0,0) representing the origin and luma(1,1) representing 256,256 4654 * 4655 * @param xpos horizontal chroma sample position 4656 * @param ypos vertical chroma sample position 4657 */ 4658 AVChromaLocation avcodec_chroma_pos_to_enum(int xpos, int ypos); 4659 4660 /** 4661 * Decode the audio frame of size avpkt->size from avpkt->data into frame. 4662 * 4663 * Some decoders may support multiple frames in a single AVPacket. Such 4664 * decoders would then just decode the first frame and the return value would be 4665 * less than the packet size. In this case, avcodec_decode_audio4 has to be 4666 * called again with an AVPacket containing the remaining data in order to 4667 * decode the second frame, etc... Even if no frames are returned, the packet 4668 * needs to be fed to the decoder with remaining data until it is completely 4669 * consumed or an error occurs. 4670 * 4671 * Some decoders (those marked with AV_CODEC_CAP_DELAY) have a delay between input 4672 * and output. This means that for some packets they will not immediately 4673 * produce decoded output and need to be flushed at the end of decoding to get 4674 * all the decoded data. Flushing is done by calling this function with packets 4675 * with avpkt->data set to NULL and avpkt->size set to 0 until it stops 4676 * returning samples. It is safe to flush even those decoders that are not 4677 * marked with AV_CODEC_CAP_DELAY, then no samples will be returned. 4678 * 4679 * @warning The input buffer, avpkt->data must be AV_INPUT_BUFFER_PADDING_SIZE 4680 * larger than the actual read bytes because some optimized bitstream 4681 * readers read 32 or 64 bits at once and could read over the end. 4682 * 4683 * @note The AVCodecContext MUST have been opened with @ref avcodec_open2() 4684 * before packets may be fed to the decoder. 4685 * 4686 * @param avctx the codec context 4687 * @param[out] frame The AVFrame in which to store decoded audio samples. 4688 * The decoder will allocate a buffer for the decoded frame by 4689 * calling the AVCodecContext.get_buffer2() callback. 4690 * When AVCodecContext.refcounted_frames is set to 1, the frame is 4691 * reference counted and the returned reference belongs to the 4692 * caller. The caller must release the frame using av_frame_unref() 4693 * when the frame is no longer needed. The caller may safely write 4694 * to the frame if av_frame_is_writable() returns 1. 4695 * When AVCodecContext.refcounted_frames is set to 0, the returned 4696 * reference belongs to the decoder and is valid only until the 4697 * next call to this function or until closing or flushing the 4698 * decoder. The caller may not write to it. 4699 * @param[out] got_frame_ptr Zero if no frame could be decoded, otherwise it is 4700 * non-zero. Note that this field being set to zero 4701 * does not mean that an error has occurred. For 4702 * decoders with AV_CODEC_CAP_DELAY set, no given decode 4703 * call is guaranteed to produce a frame. 4704 * @param[in] avpkt The input AVPacket containing the input buffer. 4705 * At least avpkt->data and avpkt->size should be set. Some 4706 * decoders might also require additional fields to be set. 4707 * @return A negative error code is returned if an error occurred during 4708 * decoding, otherwise the number of bytes consumed from the input 4709 * AVPacket is returned. 4710 * 4711 * @deprecated Use avcodec_send_packet() and avcodec_receive_frame(). 4712 */ 4713 deprecated 4714 int avcodec_decode_audio4(AVCodecContext *avctx, AVFrame *frame, 4715 int *got_frame_ptr, const AVPacket *avpkt); 4716 4717 /** 4718 * Decode the video frame of size avpkt->size from avpkt->data into picture. 4719 * Some decoders may support multiple frames in a single AVPacket, such 4720 * decoders would then just decode the first frame. 4721 * 4722 * @warning The input buffer must be AV_INPUT_BUFFER_PADDING_SIZE larger than 4723 * the actual read bytes because some optimized bitstream readers read 32 or 64 4724 * bits at once and could read over the end. 4725 * 4726 * @warning The end of the input buffer buf should be set to 0 to ensure that 4727 * no overreading happens for damaged MPEG streams. 4728 * 4729 * @note Codecs which have the AV_CODEC_CAP_DELAY capability set have a delay 4730 * between input and output, these need to be fed with avpkt->data=NULL, 4731 * avpkt->size=0 at the end to return the remaining frames. 4732 * 4733 * @note The AVCodecContext MUST have been opened with @ref avcodec_open2() 4734 * before packets may be fed to the decoder. 4735 * 4736 * @param avctx the codec context 4737 * @param[out] picture The AVFrame in which the decoded video frame will be stored. 4738 * Use av_frame_alloc() to get an AVFrame. The codec will 4739 * allocate memory for the actual bitmap by calling the 4740 * AVCodecContext.get_buffer2() callback. 4741 * When AVCodecContext.refcounted_frames is set to 1, the frame is 4742 * reference counted and the returned reference belongs to the 4743 * caller. The caller must release the frame using av_frame_unref() 4744 * when the frame is no longer needed. The caller may safely write 4745 * to the frame if av_frame_is_writable() returns 1. 4746 * When AVCodecContext.refcounted_frames is set to 0, the returned 4747 * reference belongs to the decoder and is valid only until the 4748 * next call to this function or until closing or flushing the 4749 * decoder. The caller may not write to it. 4750 * 4751 * @param[in] avpkt The input AVPacket containing the input buffer. 4752 * You can create such packet with av_init_packet() and by then setting 4753 * data and size, some decoders might in addition need other fields like 4754 * flags&AV_PKT_FLAG_KEY. All decoders are designed to use the least 4755 * fields possible. 4756 * @param[in,out] got_picture_ptr Zero if no frame could be decompressed, otherwise, it is nonzero. 4757 * @return On error a negative value is returned, otherwise the number of bytes 4758 * used or zero if no frame could be decompressed. 4759 * 4760 * @deprecated Use avcodec_send_packet() and avcodec_receive_frame(). 4761 */ 4762 deprecated 4763 int avcodec_decode_video2(AVCodecContext *avctx, AVFrame *picture, 4764 int *got_picture_ptr, 4765 const AVPacket *avpkt); 4766 4767 /** 4768 * Decode a subtitle message. 4769 * Return a negative value on error, otherwise return the number of bytes used. 4770 * If no subtitle could be decompressed, got_sub_ptr is zero. 4771 * Otherwise, the subtitle is stored in *sub. 4772 * Note that AV_CODEC_CAP_DR1 is not available for subtitle codecs. This is for 4773 * simplicity, because the performance difference is expect to be negligible 4774 * and reusing a get_buffer written for video codecs would probably perform badly 4775 * due to a potentially very different allocation pattern. 4776 * 4777 * Some decoders (those marked with CODEC_CAP_DELAY) have a delay between input 4778 * and output. This means that for some packets they will not immediately 4779 * produce decoded output and need to be flushed at the end of decoding to get 4780 * all the decoded data. Flushing is done by calling this function with packets 4781 * with avpkt->data set to NULL and avpkt->size set to 0 until it stops 4782 * returning subtitles. It is safe to flush even those decoders that are not 4783 * marked with CODEC_CAP_DELAY, then no subtitles will be returned. 4784 * 4785 * @note The AVCodecContext MUST have been opened with @ref avcodec_open2() 4786 * before packets may be fed to the decoder. 4787 * 4788 * @param avctx the codec context 4789 * @param[out] sub The Preallocated AVSubtitle in which the decoded subtitle will be stored, 4790 * must be freed with avsubtitle_free if *got_sub_ptr is set. 4791 * @param[in,out] got_sub_ptr Zero if no subtitle could be decompressed, otherwise, it is nonzero. 4792 * @param[in] avpkt The input AVPacket containing the input buffer. 4793 */ 4794 int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub, 4795 int *got_sub_ptr, 4796 AVPacket *avpkt); 4797 4798 /** 4799 * Supply raw packet data as input to a decoder. 4800 * 4801 * Internally, this call will copy relevant AVCodecContext fields, which can 4802 * influence decoding per-packet, and apply them when the packet is actually 4803 * decoded. (For example AVCodecContext.skip_frame, which might direct the 4804 * decoder to drop the frame contained by the packet sent with this function.) 4805 * 4806 * @warning The input buffer, avpkt->data must be AV_INPUT_BUFFER_PADDING_SIZE 4807 * larger than the actual read bytes because some optimized bitstream 4808 * readers read 32 or 64 bits at once and could read over the end. 4809 * 4810 * @warning Do not mix this API with the legacy API (like avcodec_decode_video2()) 4811 * on the same AVCodecContext. It will return unexpected results now 4812 * or in future libavcodec versions. 4813 * 4814 * @note The AVCodecContext MUST have been opened with @ref avcodec_open2() 4815 * before packets may be fed to the decoder. 4816 * 4817 * @param avctx codec context 4818 * @param[in] avpkt The input AVPacket. Usually, this will be a single video 4819 * frame, or several complete audio frames. 4820 * Ownership of the packet remains with the caller, and the 4821 * decoder will not write to the packet. The decoder may create 4822 * a reference to the packet data (or copy it if the packet is 4823 * not reference-counted). 4824 * Unlike with older APIs, the packet is always fully consumed, 4825 * and if it contains multiple frames (e.g. some audio codecs), 4826 * will require you to call avcodec_receive_frame() multiple 4827 * times afterwards before you can send a new packet. 4828 * It can be NULL (or an AVPacket with data set to NULL and 4829 * size set to 0); in this case, it is considered a flush 4830 * packet, which signals the end of the stream. Sending the 4831 * first flush packet will return success. Subsequent ones are 4832 * unnecessary and will return AVERROR_EOF. If the decoder 4833 * still has frames buffered, it will return them after sending 4834 * a flush packet. 4835 * 4836 * @return 0 on success, otherwise negative error code: 4837 * AVERROR(EAGAIN): input is not accepted right now - the packet must be 4838 * resent after trying to read output 4839 * AVERROR_EOF: the decoder has been flushed, and no new packets can 4840 * be sent to it (also returned if more than 1 flush 4841 * packet is sent) 4842 * AVERROR(EINVAL): codec not opened, it is an encoder, or requires flush 4843 * AVERROR(ENOMEM): failed to add packet to internal queue, or similar 4844 * other errors: legitimate decoding errors 4845 */ 4846 int avcodec_send_packet(AVCodecContext *avctx, const AVPacket *avpkt); 4847 4848 /** 4849 * Return decoded output data from a decoder. 4850 * 4851 * @param avctx codec context 4852 * @param frame This will be set to a reference-counted video or audio 4853 * frame (depending on the decoder type) allocated by the 4854 * decoder. Note that the function will always call 4855 * av_frame_unref(frame) before doing anything else. 4856 * 4857 * @return 4858 * 0: success, a frame was returned 4859 * AVERROR(EAGAIN): output is not available right now - user must try 4860 * to send new input 4861 * AVERROR_EOF: the decoder has been fully flushed, and there will be 4862 * no more output frames 4863 * AVERROR(EINVAL): codec not opened, or it is an encoder 4864 * other negative values: legitimate decoding errors 4865 */ 4866 int avcodec_receive_frame(AVCodecContext *avctx, AVFrame *frame); 4867 4868 /** 4869 * Supply a raw video or audio frame to the encoder. Use avcodec_receive_packet() 4870 * to retrieve buffered output packets. 4871 * 4872 * @param avctx codec context 4873 * @param[in] frame AVFrame containing the raw audio or video frame to be encoded. 4874 * Ownership of the frame remains with the caller, and the 4875 * encoder will not write to the frame. The encoder may create 4876 * a reference to the frame data (or copy it if the frame is 4877 * not reference-counted). 4878 * It can be NULL, in which case it is considered a flush 4879 * packet. This signals the end of the stream. If the encoder 4880 * still has packets buffered, it will return them after this 4881 * call. Once flushing mode has been entered, additional flush 4882 * packets are ignored, and sending frames will return 4883 * AVERROR_EOF. 4884 * 4885 * For audio: 4886 * If AV_CODEC_CAP_VARIABLE_FRAME_SIZE is set, then each frame 4887 * can have any number of samples. 4888 * If it is not set, frame->nb_samples must be equal to 4889 * avctx->frame_size for all frames except the last. 4890 * The final frame may be smaller than avctx->frame_size. 4891 * @return 0 on success, otherwise negative error code: 4892 * AVERROR(EAGAIN): input is not accepted right now - the frame must be 4893 * resent after trying to read output packets 4894 * AVERROR_EOF: the encoder has been flushed, and no new frames can 4895 * be sent to it 4896 * AVERROR(EINVAL): codec not opened, refcounted_frames not set, it is a 4897 * decoder, or requires flush 4898 * AVERROR(ENOMEM): failed to add packet to internal queue, or similar 4899 * other errors: legitimate decoding errors 4900 */ 4901 int avcodec_send_frame(AVCodecContext *avctx, const AVFrame *frame); 4902 4903 /** 4904 * Read encoded data from the encoder. 4905 * 4906 * @param avctx codec context 4907 * @param avpkt This will be set to a reference-counted packet allocated by the 4908 * encoder. Note that the function will always call 4909 * av_frame_unref(frame) before doing anything else. 4910 * @return 0 on success, otherwise negative error code: 4911 * AVERROR(EAGAIN): output is not available right now - user must try 4912 * to send input 4913 * AVERROR_EOF: the encoder has been fully flushed, and there will be 4914 * no more output packets 4915 * AVERROR(EINVAL): codec not opened, or it is an encoder 4916 * other errors: legitimate decoding errors 4917 */ 4918 int avcodec_receive_packet(AVCodecContext *avctx, AVPacket *avpkt); 4919 4920 4921 /** 4922 * @defgroup lavc_parsing Frame parsing 4923 * @{ 4924 */ 4925 4926 enum AVPictureStructure { 4927 AV_PICTURE_STRUCTURE_UNKNOWN, //< unknown 4928 AV_PICTURE_STRUCTURE_TOP_FIELD, //< coded as top field 4929 AV_PICTURE_STRUCTURE_BOTTOM_FIELD, //< coded as bottom field 4930 AV_PICTURE_STRUCTURE_FRAME, //< coded as frame 4931 } 4932 4933 struct AVCodecParserContext { 4934 void *priv_data; 4935 AVCodecParser *parser; 4936 int64_t frame_offset; /* offset of the current frame */ 4937 int64_t cur_offset; /* current offset 4938 (incremented by each av_parser_parse()) */ 4939 int64_t next_frame_offset; /* offset of the next frame */ 4940 /* video info */ 4941 int pict_type; /* XXX: Put it back in AVCodecContext. */ 4942 /** 4943 * This field is used for proper frame duration computation in lavf. 4944 * It signals, how much longer the frame duration of the current frame 4945 * is compared to normal frame duration. 4946 * 4947 * frame_duration = (1 + repeat_pict) * time_base 4948 * 4949 * It is used by codecs like H.264 to display telecined material. 4950 */ 4951 int repeat_pict; /* XXX: Put it back in AVCodecContext. */ 4952 int64_t pts; /* pts of the current frame */ 4953 int64_t dts; /* dts of the current frame */ 4954 4955 /* private data */ 4956 int64_t last_pts; 4957 int64_t last_dts; 4958 int fetch_timestamp; 4959 4960 //#define AV_PARSER_PTS_NB 4 4961 int cur_frame_start_index; 4962 int64_t [AV_PARSER_PTS_NB]cur_frame_offset; 4963 int64_t [AV_PARSER_PTS_NB]cur_frame_pts; 4964 int64_t [AV_PARSER_PTS_NB]cur_frame_dts; 4965 4966 int flags; 4967 //#define PARSER_FLAG_COMPLETE_FRAMES 0x0001 4968 //#define PARSER_FLAG_ONCE 0x0002 4969 /// Set if the parser has a valid file offset 4970 //#define PARSER_FLAG_FETCHED_OFFSET 0x0004 4971 //#define PARSER_FLAG_USE_CODEC_TS 0x1000 4972 4973 int64_t offset; ///< byte offset from starting packet start 4974 int64_t [AV_PARSER_PTS_NB]cur_frame_end; 4975 4976 /** 4977 * Set by parser to 1 for key frames and 0 for non-key frames. 4978 * It is initialized to -1, so if the parser doesn't set this flag, 4979 * old-style fallback using AV_PICTURE_TYPE_I picture type as key frames 4980 * will be used. 4981 */ 4982 int key_frame; 4983 4984 static if(FF_API_CONVERGENCE_DURATION){ 4985 /** 4986 * @deprecated unused 4987 */ 4988 deprecated 4989 int64_t convergence_duration; 4990 } 4991 4992 // Timestamp generation support: 4993 /** 4994 * Synchronization point for start of timestamp generation. 4995 * 4996 * Set to >0 for sync point, 0 for no sync point and <0 for undefined 4997 * (default). 4998 * 4999 * For example, this corresponds to presence of H.264 buffering period 5000 * SEI message. 5001 */ 5002 int dts_sync_point; 5003 5004 /** 5005 * Offset of the current timestamp against last timestamp sync point in 5006 * units of AVCodecContext.time_base. 5007 * 5008 * Set to INT_MIN when dts_sync_point unused. Otherwise, it must 5009 * contain a valid timestamp offset. 5010 * 5011 * Note that the timestamp of sync point has usually a nonzero 5012 * dts_ref_dts_delta, which refers to the previous sync point. Offset of 5013 * the next frame after timestamp sync point will be usually 1. 5014 * 5015 * For example, this corresponds to H.264 cpb_removal_delay. 5016 */ 5017 int dts_ref_dts_delta; 5018 5019 /** 5020 * Presentation delay of current frame in units of AVCodecContext.time_base. 5021 * 5022 * Set to INT_MIN when dts_sync_point unused. Otherwise, it must 5023 * contain valid non-negative timestamp delta (presentation time of a frame 5024 * must not lie in the past). 5025 * 5026 * This delay represents the difference between decoding and presentation 5027 * time of the frame. 5028 * 5029 * For example, this corresponds to H.264 dpb_output_delay. 5030 */ 5031 int pts_dts_delta; 5032 5033 /** 5034 * Position of the packet in file. 5035 * 5036 * Analogous to cur_frame_pts/dts 5037 */ 5038 int64_t [AV_PARSER_PTS_NB]cur_frame_pos; 5039 5040 /** 5041 * Byte position of currently parsed frame in stream. 5042 */ 5043 int64_t pos; 5044 5045 /** 5046 * Previous frame byte position. 5047 */ 5048 int64_t last_pos; 5049 5050 /** 5051 * Duration of the current frame. 5052 * For audio, this is in units of 1 / AVCodecContext.sample_rate. 5053 * For all other types, this is in units of AVCodecContext.time_base. 5054 */ 5055 int duration; 5056 5057 AVFieldOrder field_order; 5058 5059 /** 5060 * Indicate whether a picture is coded as a frame, top field or bottom field. 5061 * 5062 * For example, H.264 field_pic_flag equal to 0 corresponds to 5063 * AV_PICTURE_STRUCTURE_FRAME. An H.264 picture with field_pic_flag 5064 * equal to 1 and bottom_field_flag equal to 0 corresponds to 5065 * AV_PICTURE_STRUCTURE_TOP_FIELD. 5066 */ 5067 AVPictureStructure picture_structure; 5068 5069 /** 5070 * Picture number incremented in presentation or output order. 5071 * This field may be reinitialized at the first picture of a new sequence. 5072 * 5073 * For example, this corresponds to H.264 PicOrderCnt. 5074 */ 5075 int output_picture_number; 5076 5077 /** 5078 * Dimensions of the decoded video intended for presentation. 5079 */ 5080 int width; 5081 int height; 5082 5083 /** 5084 * Dimensions of the coded video. 5085 */ 5086 int coded_width; 5087 int coded_height; 5088 5089 /** 5090 * The format of the coded data, corresponds to enum AVPixelFormat for video 5091 * and for enum AVSampleFormat for audio. 5092 * 5093 * Note that a decoder can have considerable freedom in how exactly it 5094 * decodes the data, so the format reported here might be different from the 5095 * one returned by a decoder. 5096 */ 5097 int format; 5098 } 5099 5100 struct AVCodecParser { 5101 int [5]codec_ids; /* several codec IDs are permitted */ 5102 int priv_data_size; 5103 int function(AVCodecParserContext *s) parser_init; 5104 /* This callback never returns an error, a negative value means that 5105 * the frame start was in a previous packet. */ 5106 int function(AVCodecParserContext *s, 5107 AVCodecContext *avctx, 5108 const uint8_t **poutbuf, int *poutbuf_size, 5109 const uint8_t *buf, int buf_size) parser_parse; 5110 void function(AVCodecParserContext *s) parser_close; 5111 int function(AVCodecContext *avctx, const uint8_t *buf, int buf_size) split; 5112 AVCodecParser *next; 5113 } 5114 5115 AVCodecParser *av_parser_next(AVCodecParser *c); 5116 5117 void av_register_codec_parser(AVCodecParser *parser); 5118 AVCodecParserContext *av_parser_init(int codec_id); 5119 5120 /** 5121 * Parse a packet. 5122 * 5123 * @param s parser context. 5124 * @param avctx codec context. 5125 * @param poutbuf set to pointer to parsed buffer or NULL if not yet finished. 5126 * @param poutbuf_size set to size of parsed buffer or zero if not yet finished. 5127 * @param buf input buffer. 5128 * @param buf_size input length, to signal EOF, this should be 0 (so that the last frame can be output). 5129 * @param pts input presentation timestamp. 5130 * @param dts input decoding timestamp. 5131 * @param pos input byte position in stream. 5132 * @return the number of bytes of the input bitstream used. 5133 * 5134 * Example: 5135 * @code 5136 * while(in_len){ 5137 * len = av_parser_parse2(myparser, AVCodecContext, &data, &size, 5138 * in_data, in_len, 5139 * pts, dts, pos); 5140 * in_data += len; 5141 * in_len -= len; 5142 * 5143 * if(size) 5144 * decode_frame(data, size); 5145 * } 5146 * @endcode 5147 */ 5148 int av_parser_parse2(AVCodecParserContext *s, 5149 AVCodecContext *avctx, 5150 uint8_t **poutbuf, int *poutbuf_size, 5151 const uint8_t *buf, int buf_size, 5152 int64_t pts, int64_t dts, 5153 int64_t pos); 5154 5155 /** 5156 * @return 0 if the output buffer is a subset of the input, 1 if it is allocated and must be freed 5157 * @deprecated use AVBitStreamFilter 5158 */ 5159 int av_parser_change(AVCodecParserContext *s, 5160 AVCodecContext *avctx, 5161 uint8_t **poutbuf, int *poutbuf_size, 5162 const uint8_t *buf, int buf_size, int keyframe); 5163 void av_parser_close(AVCodecParserContext *s); 5164 5165 /** 5166 * @} 5167 * @} 5168 */ 5169 5170 /** 5171 * @addtogroup lavc_encoding 5172 * @{ 5173 */ 5174 5175 /** 5176 * Find a registered encoder with a matching codec ID. 5177 * 5178 * @param id AVCodecID of the requested encoder 5179 * @return An encoder if one was found, NULL otherwise. 5180 */ 5181 AVCodec *avcodec_find_encoder(AVCodecID id); 5182 5183 /** 5184 * Find a registered encoder with the specified name. 5185 * 5186 * @param name name of the requested encoder 5187 * @return An encoder if one was found, NULL otherwise. 5188 */ 5189 AVCodec *avcodec_find_encoder_by_name(const char *name); 5190 5191 /** 5192 * Encode a frame of audio. 5193 * 5194 * Takes input samples from frame and writes the next output packet, if 5195 * available, to avpkt. The output packet does not necessarily contain data for 5196 * the most recent frame, as encoders can delay, split, and combine input frames 5197 * internally as needed. 5198 * 5199 * @param avctx codec context 5200 * @param avpkt output AVPacket. 5201 * The user can supply an output buffer by setting 5202 * avpkt->data and avpkt->size prior to calling the 5203 * function, but if the size of the user-provided data is not 5204 * large enough, encoding will fail. If avpkt->data and 5205 * avpkt->size are set, avpkt->destruct must also be set. All 5206 * other AVPacket fields will be reset by the encoder using 5207 * av_init_packet(). If avpkt->data is NULL, the encoder will 5208 * allocate it. The encoder will set avpkt->size to the size 5209 * of the output packet. 5210 * 5211 * If this function fails or produces no output, avpkt will be 5212 * freed using av_packet_unref(). 5213 * @param[in] frame AVFrame containing the raw audio data to be encoded. 5214 * May be NULL when flushing an encoder that has the 5215 * AV_CODEC_CAP_DELAY capability set. 5216 * If AV_CODEC_CAP_VARIABLE_FRAME_SIZE is set, then each frame 5217 * can have any number of samples. 5218 * If it is not set, frame->nb_samples must be equal to 5219 * avctx->frame_size for all frames except the last. 5220 * The final frame may be smaller than avctx->frame_size. 5221 * @param[out] got_packet_ptr This field is set to 1 by libavcodec if the 5222 * output packet is non-empty, and to 0 if it is 5223 * empty. If the function returns an error, the 5224 * packet can be assumed to be invalid, and the 5225 * value of got_packet_ptr is undefined and should 5226 * not be used. 5227 * @return 0 on success, negative error code on failure 5228 * 5229 * @deprecated use avcodec_send_frame()/avcodec_receive_packet() instead 5230 */ 5231 deprecated 5232 int avcodec_encode_audio2(AVCodecContext *avctx, AVPacket *avpkt, 5233 const AVFrame *frame, int *got_packet_ptr); 5234 5235 /** 5236 * Encode a frame of video. 5237 * 5238 * Takes input raw video data from frame and writes the next output packet, if 5239 * available, to avpkt. The output packet does not necessarily contain data for 5240 * the most recent frame, as encoders can delay and reorder input frames 5241 * internally as needed. 5242 * 5243 * @param avctx codec context 5244 * @param avpkt output AVPacket. 5245 * The user can supply an output buffer by setting 5246 * avpkt->data and avpkt->size prior to calling the 5247 * function, but if the size of the user-provided data is not 5248 * large enough, encoding will fail. All other AVPacket fields 5249 * will be reset by the encoder using av_init_packet(). If 5250 * avpkt->data is NULL, the encoder will allocate it. 5251 * The encoder will set avpkt->size to the size of the 5252 * output packet. The returned data (if any) belongs to the 5253 * caller, he is responsible for freeing it. 5254 * 5255 * If this function fails or produces no output, avpkt will be 5256 * freed using av_packet_unref(). 5257 * @param[in] frame AVFrame containing the raw video data to be encoded. 5258 * May be NULL when flushing an encoder that has the 5259 * AV_CODEC_CAP_DELAY capability set. 5260 * @param[out] got_packet_ptr This field is set to 1 by libavcodec if the 5261 * output packet is non-empty, and to 0 if it is 5262 * empty. If the function returns an error, the 5263 * packet can be assumed to be invalid, and the 5264 * value of got_packet_ptr is undefined and should 5265 * not be used. 5266 * @return 0 on success, negative error code on failure 5267 * 5268 * @deprecated use avcodec_send_frame()/avcodec_receive_packet() instead 5269 */ 5270 deprecated 5271 int avcodec_encode_video2(AVCodecContext *avctx, AVPacket *avpkt, 5272 const AVFrame *frame, int *got_packet_ptr); 5273 5274 int avcodec_encode_subtitle(AVCodecContext *avctx, uint8_t *buf, int buf_size, 5275 const AVSubtitle *sub); 5276 5277 5278 /** 5279 * @} 5280 */ 5281 5282 static if (FF_API_AVCODEC_RESAMPLE) { 5283 /** 5284 * @defgroup lavc_resample Audio resampling 5285 * @ingroup libavc 5286 * @deprecated use libswresample instead 5287 * 5288 * @{ 5289 */ 5290 struct ReSampleContext; 5291 struct AVResampleContext; 5292 5293 //typedef struct ReSampleContext ReSampleContext; 5294 5295 /** 5296 * Initialize audio resampling context. 5297 * 5298 * @param output_channels number of output channels 5299 * @param input_channels number of input channels 5300 * @param output_rate output sample rate 5301 * @param input_rate input sample rate 5302 * @param sample_fmt_out requested output sample format 5303 * @param sample_fmt_in input sample format 5304 * @param filter_length length of each FIR filter in the filterbank relative to the cutoff frequency 5305 * @param log2_phase_count log2 of the number of entries in the polyphase filterbank 5306 * @param linear if 1 then the used FIR filter will be linearly interpolated 5307 between the 2 closest, if 0 the closest will be used 5308 * @param cutoff cutoff frequency, 1.0 corresponds to half the output sampling rate 5309 * @return allocated ReSampleContext, NULL if error occurred 5310 */ 5311 deprecated 5312 ReSampleContext *av_audio_resample_init(int output_channels, int input_channels, 5313 int output_rate, int input_rate, 5314 AVSampleFormat sample_fmt_out, 5315 AVSampleFormat sample_fmt_in, 5316 int filter_length, int log2_phase_count, 5317 int linear, double cutoff); 5318 5319 deprecated 5320 int audio_resample(ReSampleContext *s, short *output, short *input, int nb_samples); 5321 5322 /** 5323 * Free resample context. 5324 * 5325 * @param s a non-NULL pointer to a resample context previously 5326 * created with av_audio_resample_init() 5327 */ 5328 deprecated 5329 void audio_resample_close(ReSampleContext *s); 5330 5331 5332 /** 5333 * Initialize an audio resampler. 5334 * Note, if either rate is not an integer then simply scale both rates up so they are. 5335 * @param filter_length length of each FIR filter in the filterbank relative to the cutoff freq 5336 * @param log2_phase_count log2 of the number of entries in the polyphase filterbank 5337 * @param linear If 1 then the used FIR filter will be linearly interpolated 5338 between the 2 closest, if 0 the closest will be used 5339 * @param cutoff cutoff frequency, 1.0 corresponds to half the output sampling rate 5340 */ 5341 deprecated 5342 AVResampleContext *av_resample_init(int out_rate, int in_rate, int filter_length, int log2_phase_count, int linear, double cutoff); 5343 5344 /** 5345 * Resample an array of samples using a previously configured context. 5346 * @param src an array of unconsumed samples 5347 * @param consumed the number of samples of src which have been consumed are returned here 5348 * @param src_size the number of unconsumed samples available 5349 * @param dst_size the amount of space in samples available in dst 5350 * @param update_ctx If this is 0 then the context will not be modified, that way several channels can be resampled with the same context. 5351 * @return the number of samples written in dst or -1 if an error occurred 5352 */ 5353 deprecated 5354 int av_resample(AVResampleContext *c, short *dst, short *src, int *consumed, int src_size, int dst_size, int update_ctx); 5355 5356 5357 /** 5358 * Compensate samplerate/timestamp drift. The compensation is done by changing 5359 * the resampler parameters, so no audible clicks or similar distortions occur 5360 * @param compensation_distance distance in output samples over which the compensation should be performed 5361 * @param sample_delta number of output samples which should be output less 5362 * 5363 * example: av_resample_compensate(c, 10, 500) 5364 * here instead of 510 samples only 500 samples would be output 5365 * 5366 * note, due to rounding the actual compensation might be slightly different, 5367 * especially if the compensation_distance is large and the in_rate used during init is small 5368 */ 5369 deprecated 5370 void av_resample_compensate(AVResampleContext *c, int sample_delta, int compensation_distance); 5371 deprecated 5372 void av_resample_close(AVResampleContext *c); 5373 5374 /** 5375 * @} 5376 */ 5377 } 5378 5379 static if(FF_API_AVPICTURE){ 5380 /** 5381 * @addtogroup lavc_picture 5382 * @{ 5383 */ 5384 5385 /** 5386 * @deprecated unused 5387 */ 5388 deprecated 5389 int avpicture_alloc(AVPicture *picture, AVPixelFormat pix_fmt, int width, int height); 5390 5391 /** 5392 * @deprecated unused 5393 */ 5394 deprecated 5395 void avpicture_free(AVPicture *picture); 5396 5397 /** 5398 * @deprecated use av_image_fill_arrays() instead. 5399 */ 5400 deprecated 5401 int avpicture_fill(AVPicture *picture, const uint8_t *ptr, 5402 AVPixelFormat pix_fmt, int width, int height); 5403 5404 /** 5405 * @deprecated use av_image_copy_to_buffer() instead. 5406 */ 5407 deprecated 5408 int avpicture_layout(const AVPicture *src, AVPixelFormat pix_fmt, 5409 int width, int height, 5410 ubyte *dest, int dest_size); 5411 5412 /** 5413 * @deprecated use av_image_get_buffer_size() instead. 5414 */ 5415 deprecated 5416 int avpicture_get_size(AVPixelFormat pix_fmt, int width, int height); 5417 5418 /** 5419 * @deprecated av_image_copy() instead. 5420 */ 5421 deprecated 5422 void av_picture_copy(AVPicture *dst, const AVPicture *src, 5423 AVPixelFormat pix_fmt, int width, int height); 5424 5425 /** 5426 * @deprecated unused 5427 */ 5428 deprecated 5429 int av_picture_crop(AVPicture *dst, const AVPicture *src, 5430 AVPixelFormat pix_fmt, int top_band, int left_band); 5431 5432 /** 5433 * @deprecated unused 5434 */ 5435 deprecated 5436 int av_picture_pad(AVPicture *dst, const AVPicture *src, int height, int width, AVPixelFormat pix_fmt, 5437 int padtop, int padbottom, int padleft, int padright, int *color); 5438 5439 /** 5440 * @} 5441 */ 5442 } 5443 5444 /** 5445 * @defgroup lavc_misc Utility functions 5446 * @ingroup libavc 5447 * 5448 * Miscellaneous utility functions related to both encoding and decoding 5449 * (or neither). 5450 * @{ 5451 */ 5452 5453 /** 5454 * @defgroup lavc_misc_pixfmt Pixel formats 5455 * 5456 * Functions for working with pixel formats. 5457 * @{ 5458 */ 5459 5460 /** 5461 * Utility function to access log2_chroma_w log2_chroma_h from 5462 * the pixel format AVPixFmtDescriptor. 5463 * 5464 * This function asserts that pix_fmt is valid. See av_pix_fmt_get_chroma_sub_sample 5465 * for one that returns a failure code and continues in case of invalid 5466 * pix_fmts. 5467 * 5468 * @param[in] pix_fmt the pixel format 5469 * @param[out] h_shift store log2_chroma_h 5470 * @param[out] v_shift store log2_chroma_w 5471 * 5472 * @see av_pix_fmt_get_chroma_sub_sample 5473 */ 5474 5475 void avcodec_get_chroma_sub_sample(AVPixelFormat pix_fmt, int *h_shift, int *v_shift); 5476 5477 /** 5478 * Return a value representing the fourCC code associated to the 5479 * pixel format pix_fmt, or 0 if no associated fourCC code can be 5480 * found. 5481 */ 5482 uint avcodec_pix_fmt_to_codec_tag(AVPixelFormat pix_fmt); 5483 5484 /** 5485 * @deprecated see av_get_pix_fmt_loss() 5486 */ 5487 int avcodec_get_pix_fmt_loss(AVPixelFormat dst_pix_fmt, AVPixelFormat src_pix_fmt, 5488 int has_alpha); 5489 5490 /** 5491 * Find the best pixel format to convert to given a certain source pixel 5492 * format. When converting from one pixel format to another, information loss 5493 * may occur. For example, when converting from RGB24 to GRAY, the color 5494 * information will be lost. Similarly, other losses occur when converting from 5495 * some formats to other formats. avcodec_find_best_pix_fmt_of_2() searches which of 5496 * the given pixel formats should be used to suffer the least amount of loss. 5497 * The pixel formats from which it chooses one, are determined by the 5498 * pix_fmt_list parameter. 5499 * 5500 * 5501 * @param[in] pix_fmt_list AV_PIX_FMT_NONE terminated array of pixel formats to choose from 5502 * @param[in] src_pix_fmt source pixel format 5503 * @param[in] has_alpha Whether the source pixel format alpha channel is used. 5504 * @param[out] loss_ptr Combination of flags informing you what kind of losses will occur. 5505 * @return The best pixel format to convert to or -1 if none was found. 5506 */ 5507 AVPixelFormat avcodec_find_best_pix_fmt_of_list(AVPixelFormat *pix_fmt_list, 5508 AVPixelFormat src_pix_fmt, 5509 int has_alpha, int *loss_ptr); 5510 5511 /** 5512 * @deprecated see av_find_best_pix_fmt_of_2() 5513 */ 5514 AVPixelFormat avcodec_find_best_pix_fmt_of_2(AVPixelFormat dst_pix_fmt1, AVPixelFormat dst_pix_fmt2, 5515 AVPixelFormat src_pix_fmt, int has_alpha, int *loss_ptr); 5516 5517 static if (AV_HAVE_INCOMPATIBLE_LIBAV_ABI) { 5518 deprecated 5519 AVPixelFormat avcodec_find_best_pix_fmt2(AVPixelFormat *pix_fmt_list, 5520 AVPixelFormat src_pix_fmt, 5521 int has_alpha, int *loss_ptr); 5522 } else { 5523 AVPixelFormat avcodec_find_best_pix_fmt2(AVPixelFormat dst_pix_fmt1, AVPixelFormat dst_pix_fmt2, 5524 AVPixelFormat src_pix_fmt, int has_alpha, int *loss_ptr); 5525 } 5526 5527 5528 AVPixelFormat avcodec_default_get_format(AVCodecContext *s, const AVPixelFormat * fmt); 5529 5530 /** 5531 * @} 5532 */ 5533 5534 static if (FF_API_SET_DIMENSIONS) { 5535 /** 5536 * @deprecated this function is not supposed to be used from outside of lavc 5537 */ 5538 deprecated 5539 void avcodec_set_dimensions(AVCodecContext *s, int width, int height); 5540 } 5541 5542 /** 5543 * Put a string representing the codec tag codec_tag in buf. 5544 * 5545 * @param buf buffer to place codec tag in 5546 * @param buf_size size in bytes of buf 5547 * @param codec_tag codec tag to assign 5548 * @return the length of the string that would have been generated if 5549 * enough space had been available, excluding the trailing null 5550 */ 5551 size_t av_get_codec_tag_string(char *buf, size_t buf_size, uint codec_tag); 5552 5553 void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode); 5554 5555 /** 5556 * Return a name for the specified profile, if available. 5557 * 5558 * @param codec the codec that is searched for the given profile 5559 * @param profile the profile value for which a name is requested 5560 * @return A name for the profile if found, NULL otherwise. 5561 */ 5562 char *av_get_profile_name(const AVCodec *codec, int profile); 5563 5564 /** 5565 * Return a name for the specified profile, if available. 5566 * 5567 * @param codec_id the ID of the codec to which the requested profile belongs 5568 * @param profile the profile value for which a name is requested 5569 * @return A name for the profile if found, NULL otherwise. 5570 * 5571 * @note unlike av_get_profile_name(), which searches a list of profiles 5572 * supported by a specific decoder or encoder implementation, this 5573 * function searches the list of profiles from the AVCodecDescriptor 5574 */ 5575 char *avcodec_profile_name(AVCodecID codec_id, int profile); 5576 5577 int avcodec_default_execute(AVCodecContext *c, int function(AVCodecContext *c2, void *arg2) func,void *arg, int *ret, int count, int size); 5578 int avcodec_default_execute2(AVCodecContext *c, int function(AVCodecContext *c2, void *arg2, int, int) func,void *arg, int *ret, int count); 5579 // 5580 5581 /** 5582 * Fill AVFrame audio data and linesize pointers. 5583 * 5584 * The buffer buf must be a preallocated buffer with a size big enough 5585 * to contain the specified samples amount. The filled AVFrame data 5586 * pointers will point to this buffer. 5587 * 5588 * AVFrame extended_data channel pointers are allocated if necessary for 5589 * planar audio. 5590 * 5591 * @param frame the AVFrame 5592 * frame->nb_samples must be set prior to calling the 5593 * function. This function fills in frame->data, 5594 * frame->extended_data, frame->linesize[0]. 5595 * @param nb_channels channel count 5596 * @param sample_fmt sample format 5597 * @param buf buffer to use for frame data 5598 * @param buf_size size of buffer 5599 * @param align plane size sample alignment (0 = default) 5600 * @return >=0 on success, negative error code on failure 5601 * @todo return the size in bytes required to store the samples in 5602 * case of success, at the next libavutil bump 5603 */ 5604 int avcodec_fill_audio_frame(AVFrame *frame, int nb_channels, 5605 AVSampleFormat sample_fmt, const uint8_t *buf, 5606 int buf_size, int _align); 5607 5608 /** 5609 * Reset the internal decoder state / flush internal buffers. Should be called 5610 * e.g. when seeking or when switching to a different stream. 5611 * 5612 * @note when refcounted frames are not used (i.e. avctx->refcounted_frames is 0), 5613 * this invalidates the frames previously returned from the decoder. When 5614 * refcounted frames are used, the decoder just releases any references it might 5615 * keep internally, but the caller's reference remains valid. 5616 */ 5617 void avcodec_flush_buffers(AVCodecContext *avctx); 5618 5619 /** 5620 * Return codec bits per sample. 5621 * 5622 * @param[in] codec_id the codec 5623 * @return Number of bits per sample or zero if unknown for the given codec. 5624 */ 5625 int av_get_bits_per_sample(AVCodecID codec_id); 5626 5627 /** 5628 * Return the PCM codec associated with a sample format. 5629 * @param be endianness, 0 for little, 1 for big, 5630 * -1 (or anything else) for native 5631 * @return AV_CODEC_ID_PCM_* or AV_CODEC_ID_NONE 5632 */ 5633 AVCodecID av_get_pcm_codec(AVSampleFormat fmt, int be); 5634 5635 /** 5636 * Return codec bits per sample. 5637 * Only return non-zero if the bits per sample is exactly correct, not an 5638 * approximation. 5639 * 5640 * @param[in] codec_id the codec 5641 * @return Number of bits per sample or zero if unknown for the given codec. 5642 */ 5643 int av_get_exact_bits_per_sample(AVCodecID codec_id); 5644 5645 /** 5646 * Return audio frame duration. 5647 * 5648 * @param avctx codec context 5649 * @param frame_bytes size of the frame, or 0 if unknown 5650 * @return frame duration, in samples, if known. 0 if not able to 5651 * determine. 5652 */ 5653 int av_get_audio_frame_duration(AVCodecContext *avctx, int frame_bytes); 5654 5655 /** 5656 * This function is the same as av_get_audio_frame_duration(), except it works 5657 * with AVCodecParameters instead of an AVCodecContext. 5658 */ 5659 int av_get_audio_frame_duration2(AVCodecParameters *par, int frame_bytes); 5660 5661 //static if(FF_API_OLD_BSF){ // Bug in D?? 5662 struct AVBitStreamFilterContext { 5663 void *priv_data; 5664 AVBitStreamFilter *filter; 5665 AVCodecParserContext *parser; 5666 AVBitStreamFilterContext *next; 5667 /** 5668 * Internal default arguments, used if NULL is passed to av_bitstream_filter_filter(). 5669 * Not for access by library users. 5670 */ 5671 char *args; 5672 } 5673 //} 5674 5675 struct AVBSFInternal; 5676 5677 /** 5678 * The bitstream filter state. 5679 * 5680 * This struct must be allocated with av_bsf_alloc() and freed with 5681 * av_bsf_free(). 5682 * 5683 * The fields in the struct will only be changed (by the caller or by the 5684 * filter) as described in their documentation, and are to be considered 5685 * immutable otherwise. 5686 */ 5687 struct AVBSFContext { 5688 /** 5689 * A class for logging and AVOptions 5690 */ 5691 const AVClass *av_class; 5692 5693 /** 5694 * The bitstream filter this context is an instance of. 5695 */ 5696 const AVBitStreamFilter *filter; 5697 5698 /** 5699 * Opaque libavcodec internal data. Must not be touched by the caller in any 5700 * way. 5701 */ 5702 AVBSFInternal *internal; 5703 5704 /** 5705 * Opaque filter-specific private data. If filter->priv_class is non-NULL, 5706 * this is an AVOptions-enabled struct. 5707 */ 5708 void *priv_data; 5709 5710 /** 5711 * Parameters of the input stream. Set by the caller before av_bsf_init(). 5712 */ 5713 AVCodecParameters *par_in; 5714 5715 /** 5716 * Parameters of the output stream. Set by the filter in av_bsf_init(). 5717 */ 5718 AVCodecParameters *par_out; 5719 5720 /** 5721 * The timebase used for the timestamps of the input packets. Set by the 5722 * caller before av_bsf_init(). 5723 */ 5724 AVRational time_base_in; 5725 5726 /** 5727 * The timebase used for the timestamps of the output packets. Set by the 5728 * filter in av_bsf_init(). 5729 */ 5730 AVRational time_base_out; 5731 } 5732 5733 struct AVBitStreamFilter { 5734 const char *name; 5735 5736 /** 5737 * A list of codec ids supported by the filter, terminated by 5738 * AV_CODEC_ID_NONE. 5739 * May be NULL, in that case the bitstream filter works with any codec id. 5740 */ 5741 const AVCodecID *codec_ids; 5742 5743 /** 5744 * A class for the private data, used to declare bitstream filter private 5745 * AVOptions. This field is NULL for bitstream filters that do not declare 5746 * any options. 5747 * 5748 * If this field is non-NULL, the first member of the filter private data 5749 * must be a pointer to AVClass, which will be set by libavcodec generic 5750 * code to this class. 5751 */ 5752 const AVClass *priv_class; 5753 5754 /***************************************************************** 5755 * No fields below this line are part of the public API. They 5756 * may not be used outside of libavcodec and can be changed and 5757 * removed at will. 5758 * New public fields should be added right above. 5759 ***************************************************************** 5760 */ 5761 5762 int priv_data_size; 5763 int function(AVBSFContext *ctx) init; 5764 int function(AVBSFContext *ctx, AVPacket *pkt) filter; 5765 void function(AVBSFContext *ctx) close; 5766 } 5767 5768 static if(FF_API_OLD_BSF){ 5769 /** 5770 * Register a bitstream filter. 5771 * 5772 * The filter will be accessible to the application code through 5773 * av_bitstream_filter_next() or can be directly initialized with 5774 * av_bitstream_filter_init(). 5775 * 5776 * @see avcodec_register_all() 5777 */ 5778 deprecated 5779 void av_register_bitstream_filter(AVBitStreamFilter *bsf); 5780 5781 /** 5782 * Create and initialize a bitstream filter context given a bitstream 5783 * filter name. 5784 * 5785 * The returned context must be freed with av_bitstream_filter_close(). 5786 * 5787 * @param name the name of the bitstream filter 5788 * @return a bitstream filter context if a matching filter was found 5789 * and successfully initialized, NULL otherwise 5790 */ 5791 deprecated 5792 AVBitStreamFilterContext *av_bitstream_filter_init(const char *name); 5793 5794 /** 5795 * Filter bitstream. 5796 * 5797 * This function filters the buffer buf with size buf_size, and places the 5798 * filtered buffer in the buffer pointed to by poutbuf. 5799 * 5800 * The output buffer must be freed by the caller. 5801 * 5802 * @param bsfc bitstream filter context created by av_bitstream_filter_init() 5803 * @param avctx AVCodecContext accessed by the filter, may be NULL. 5804 * If specified, this must point to the encoder context of the 5805 * output stream the packet is sent to. 5806 * @param args arguments which specify the filter configuration, may be NULL 5807 * @param poutbuf pointer which is updated to point to the filtered buffer 5808 * @param poutbuf_size pointer which is updated to the filtered buffer size in bytes 5809 * @param buf buffer containing the data to filter 5810 * @param buf_size size in bytes of buf 5811 * @param keyframe set to non-zero if the buffer to filter corresponds to a key-frame packet data 5812 * @return >= 0 in case of success, or a negative error code in case of failure 5813 * 5814 * If the return value is positive, an output buffer is allocated and 5815 * is available in *poutbuf, and is distinct from the input buffer. 5816 * 5817 * If the return value is 0, the output buffer is not allocated and 5818 * should be considered identical to the input buffer, or in case 5819 * *poutbuf was set it points to the input buffer (not necessarily to 5820 * its starting address). A special case is if *poutbuf was set to NULL and 5821 * *poutbuf_size was set to 0, which indicates the packet should be dropped. 5822 */ 5823 deprecated 5824 int av_bitstream_filter_filter(AVBitStreamFilterContext *bsfc, 5825 AVCodecContext *avctx, const char *args, 5826 uint8_t **poutbuf, int *poutbuf_size, 5827 const uint8_t *buf, int buf_size, int keyframe); 5828 5829 /** 5830 * Release bitstream filter context. 5831 * 5832 * @param bsf the bitstream filter context created with 5833 * av_bitstream_filter_init(), can be NULL 5834 */ 5835 deprecated 5836 void av_bitstream_filter_close(AVBitStreamFilterContext *bsf); 5837 5838 /** 5839 * If f is NULL, return the first registered bitstream filter, 5840 * if f is non-NULL, return the next registered bitstream filter 5841 * after f, or NULL if f is the last one. 5842 * 5843 * This function can be used to iterate over all registered bitstream 5844 * filters. 5845 */ 5846 deprecated 5847 AVBitStreamFilter *av_bitstream_filter_next(const AVBitStreamFilter *f); 5848 } 5849 5850 /** 5851 * @return a bitstream filter with the specified name or NULL if no such 5852 * bitstream filter exists. 5853 */ 5854 AVBitStreamFilter *av_bsf_get_by_name(const char *name); 5855 5856 /** 5857 * Iterate over all registered bitstream filters. 5858 * 5859 * @param opaque a pointer where libavcodec will store the iteration state. Must 5860 * point to NULL to start the iteration. 5861 * 5862 * @return the next registered bitstream filter or NULL when the iteration is 5863 * finished 5864 */ 5865 AVBitStreamFilter *av_bsf_next(void **opaque); 5866 5867 /** 5868 * Allocate a context for a given bitstream filter. The caller must fill in the 5869 * context parameters as described in the documentation and then call 5870 * av_bsf_init() before sending any data to the filter. 5871 * 5872 * @param filter the filter for which to allocate an instance. 5873 * @param ctx a pointer into which the pointer to the newly-allocated context 5874 * will be written. It must be freed with av_bsf_free() after the 5875 * filtering is done. 5876 * 5877 * @return 0 on success, a negative AVERROR code on failure 5878 */ 5879 int av_bsf_alloc(const AVBitStreamFilter *filter, AVBSFContext **ctx); 5880 5881 /** 5882 * Prepare the filter for use, after all the parameters and options have been 5883 * set. 5884 */ 5885 int av_bsf_init(AVBSFContext *ctx); 5886 5887 /** 5888 * Submit a packet for filtering. 5889 * 5890 * After sending each packet, the filter must be completely drained by calling 5891 * av_bsf_receive_packet() repeatedly until it returns AVERROR(EAGAIN) or 5892 * AVERROR_EOF. 5893 * 5894 * @param pkt the packet to filter. The bitstream filter will take ownership of 5895 * the packet and reset the contents of pkt. pkt is not touched if an error occurs. 5896 * This parameter may be NULL, which signals the end of the stream (i.e. no more 5897 * packets will be sent). That will cause the filter to output any packets it 5898 * may have buffered internally. 5899 * 5900 * @return 0 on success, a negative AVERROR on error. 5901 */ 5902 int av_bsf_send_packet(AVBSFContext *ctx, AVPacket *pkt); 5903 5904 /** 5905 * Retrieve a filtered packet. 5906 * 5907 * @param[out] pkt this struct will be filled with the contents of the filtered 5908 * packet. It is owned by the caller and must be freed using 5909 * av_packet_unref() when it is no longer needed. 5910 * This parameter should be "clean" (i.e. freshly allocated 5911 * with av_packet_alloc() or unreffed with av_packet_unref()) 5912 * when this function is called. If this function returns 5913 * successfully, the contents of pkt will be completely 5914 * overwritten by the returned data. On failure, pkt is not 5915 * touched. 5916 * 5917 * @return 0 on success. AVERROR(EAGAIN) if more packets need to be sent to the 5918 * filter (using av_bsf_send_packet()) to get more output. AVERROR_EOF if there 5919 * will be no further output from the filter. Another negative AVERROR value if 5920 * an error occurs. 5921 * 5922 * @note one input packet may result in several output packets, so after sending 5923 * a packet with av_bsf_send_packet(), this function needs to be called 5924 * repeatedly until it stops returning 0. It is also possible for a filter to 5925 * output fewer packets than were sent to it, so this function may return 5926 * AVERROR(EAGAIN) immediately after a successful av_bsf_send_packet() call. 5927 */ 5928 int av_bsf_receive_packet(AVBSFContext *ctx, AVPacket *pkt); 5929 5930 /** 5931 * Free a bitstream filter context and everything associated with it; write NULL 5932 * into the supplied pointer. 5933 */ 5934 void av_bsf_free(AVBSFContext **ctx); 5935 5936 /** 5937 * Get the AVClass for AVBSFContext. It can be used in combination with 5938 * AV_OPT_SEARCH_FAKE_OBJ for examining options. 5939 * 5940 * @see av_opt_find(). 5941 */ 5942 AVClass *av_bsf_get_class(); 5943 5944 /* memory */ 5945 5946 /** 5947 * Same behaviour av_fast_malloc but the buffer has additional 5948 * FF_INPUT_BUFFER_PADDING_SIZE at the end which will always be 0. 5949 * 5950 * In addition the whole buffer will initially and after resizes 5951 * be 0-initialized so that no uninitialized data will ever appear. 5952 */ 5953 void av_fast_padded_malloc(void *ptr, uint *size, size_t min_size); 5954 5955 /** 5956 * Same behaviour av_fast_padded_malloc except that buffer will always 5957 * be 0-initialized after call. 5958 */ 5959 void av_fast_padded_mallocz(void *ptr, uint *size, size_t min_size); 5960 5961 /** 5962 * Encode extradata length to a buffer. Used by xiph codecs. 5963 * 5964 * @param s buffer to write to; must be at least (v/255+1) bytes long 5965 * @param v size of extradata in bytes 5966 * @return number of bytes written to the buffer. 5967 */ 5968 uint av_xiphlacing(ubyte *s, uint v); 5969 5970 static if (FF_API_MISSING_SAMPLE) { 5971 /** 5972 * Log a generic warning message about a missing feature. This function is 5973 * intended to be used internally by FFmpeg (libavcodec, libavformat, etc.) 5974 * only, and would normally not be used by applications. 5975 * @param[in] avc a pointer to an arbitrary struct of which the first field is 5976 * a pointer to an AVClass struct 5977 * @param[in] feature string containing the name of the missing feature 5978 * @param[in] want_sample indicates if samples are wanted which exhibit this feature. 5979 * If want_sample is non-zero, additional verbage will be added to the log 5980 * message which tells the user how to report samples to the development 5981 * mailing list. 5982 * @deprecated Use avpriv_report_missing_feature() instead. 5983 */ 5984 deprecated 5985 void av_log_missing_feature(void *avc, const char *feature, int want_sample); 5986 5987 /** 5988 * Log a generic warning message asking for a sample. This function is 5989 * intended to be used internally by FFmpeg (libavcodec, libavformat, etc.) 5990 * only, and would normally not be used by applications. 5991 * @param[in] avc a pointer to an arbitrary struct of which the first field is 5992 * a pointer to an AVClass struct 5993 * @param[in] msg string containing an optional message, or NULL if no message 5994 * @deprecated Use avpriv_request_sample() instead. 5995 */ 5996 deprecated 5997 void av_log_ask_for_sample(void* avc, const(char)* msg, ...); 5998 } 5999 6000 /** 6001 * Register the hardware accelerator hwaccel. 6002 */ 6003 void av_register_hwaccel(AVHWAccel *hwaccel); 6004 6005 /** 6006 * If hwaccel is NULL, returns the first registered hardware accelerator, 6007 * if hwaccel is non-NULL, returns the next registered hardware accelerator 6008 * after hwaccel, or NULL if hwaccel is the last one. 6009 */ 6010 AVHWAccel *av_hwaccel_next(AVHWAccel *hwaccel); 6011 6012 6013 /** 6014 * Lock operation used by lockmgr 6015 */ 6016 enum AVLockOp { 6017 AV_LOCK_CREATE, ///< Create a mutex 6018 AV_LOCK_OBTAIN, ///< Lock the mutex 6019 AV_LOCK_RELEASE, ///< Unlock the mutex 6020 AV_LOCK_DESTROY, ///< Free mutex resources 6021 } 6022 6023 /** 6024 * Register a user provided lock manager supporting the operations 6025 * specified by AVLockOp. The "mutex" argument to the function points 6026 * to a (void *) where the lockmgr should store/get a pointer to a user 6027 * allocated mutex. It is NULL upon AV_LOCK_CREATE and equal to the 6028 * value left by the last call for all other ops. If the lock manager is 6029 * unable to perform the op then it should leave the mutex in the same 6030 * state as when it was called and return a non-zero value. However, 6031 * when called with AV_LOCK_DESTROY the mutex will always be assumed to 6032 * have been successfully destroyed. If av_lockmgr_register succeeds 6033 * it will return a non-negative value, if it fails it will return a 6034 * negative value and destroy all mutex and unregister all callbacks. 6035 * av_lockmgr_register is not thread-safe, it must be called from a 6036 * single thread before any calls which make use of locking are used. 6037 * 6038 * @param cb User defined callback. av_lockmgr_register invokes calls 6039 * to this callback and the previously registered callback. 6040 * The callback will be used to create more than one mutex 6041 * each of which must be backed by its own underlying locking 6042 * mechanism (i.e. do not use a single static object to 6043 * implement your lock manager). If cb is set to NULL the 6044 * lockmgr will be unregistered. 6045 */ 6046 int av_lockmgr_register(int function(void **mutex, AVLockOp op) cb); 6047 6048 /** 6049 * Get the type of the given codec. 6050 */ 6051 AVMediaType avcodec_get_type(AVCodecID codec_id); 6052 6053 /** 6054 * Get the name of a codec. 6055 * @return a static string identifying the codec; never NULL 6056 */ 6057 char *avcodec_get_name(AVCodecID id); 6058 6059 /** 6060 * @return a positive value if s is open (i.e. avcodec_open2() was called on it 6061 * with no corresponding avcodec_close()), 0 otherwise. 6062 */ 6063 int avcodec_is_open(AVCodecContext *s); 6064 6065 /** 6066 * @return a non-zero number if codec is an encoder, zero otherwise 6067 */ 6068 int av_codec_is_encoder(const AVCodec *codec); 6069 6070 /** 6071 * @return a non-zero number if codec is a decoder, zero otherwise 6072 */ 6073 int av_codec_is_decoder(const AVCodec *codec); 6074 6075 /** 6076 * @return descriptor for given codec ID or NULL if no descriptor exists. 6077 */ 6078 AVCodecDescriptor *avcodec_descriptor_get(AVCodecID id); 6079 6080 /** 6081 * Iterate over all codec descriptors known to libavcodec. 6082 * 6083 * @param prev previous descriptor. NULL to get the first descriptor. 6084 * 6085 * @return next descriptor or NULL after the last descriptor 6086 */ 6087 AVCodecDescriptor *avcodec_descriptor_next(const AVCodecDescriptor *prev); 6088 6089 /** 6090 * @return codec descriptor with the given name or NULL if no such descriptor 6091 * exists. 6092 */ 6093 AVCodecDescriptor *avcodec_descriptor_get_by_name(const char *name); 6094 6095 /** 6096 * Allocate a CPB properties structure and initialize its fields to default 6097 * values. 6098 * 6099 * @param size if non-NULL, the size of the allocated struct will be written 6100 * here. This is useful for embedding it in side data. 6101 * 6102 * @return the newly allocated struct or NULL on failure 6103 */ 6104 AVCPBProperties *av_cpb_properties_alloc(size_t *size); 6105 6106 /** 6107 * @} 6108 */ 6109 6110 6111 ///Constant definitions that were embedded inside structs 6112 6113 enum FF_ASPECT_EXTENDED = 15; 6114 enum FF_RC_STRATEGY_XVID = 1; 6115 enum FF_PRED_LEFT = 0; 6116 enum FF_PRED_PLANE = 1; 6117 enum FF_PRED_MEDIAN = 2; 6118 6119 enum FF_CMP_SAD = 0; 6120 enum FF_CMP_SSE = 1; 6121 enum FF_CMP_SATD = 2; 6122 enum FF_CMP_DCT = 3; 6123 enum FF_CMP_PSNR = 4; 6124 enum FF_CMP_BIT = 5; 6125 enum FF_CMP_RD = 6; 6126 enum FF_CMP_ZERO = 7; 6127 enum FF_CMP_VSAD = 8; 6128 enum FF_CMP_VSSE = 9; 6129 enum FF_CMP_NSSE = 10; 6130 enum FF_CMP_W53 = 11; 6131 enum FF_CMP_W97 = 12; 6132 enum FF_CMP_DCTMAX = 13; 6133 enum FF_CMP_DCT264 = 14; 6134 enum FF_CMP_CHROMA = 256; 6135 6136 enum FF_DTG_AFD_SAME = 8; 6137 enum FF_DTG_AFD_4_3 = 9; 6138 enum FF_DTG_AFD_16_9 = 10; 6139 enum FF_DTG_AFD_14_9 = 11; 6140 enum FF_DTG_AFD_4_3_SP_14_9 = 13; 6141 enum FF_DTG_AFD_16_9_SP_14_9 = 14; 6142 enum FF_DTG_AFD_SP_4_3 = 15; 6143 6144 enum FF_DEFAULT_QUANT_BIAS = 999_999; 6145 6146 enum SLICE_FLAG_CODED_ORDER = 0x0001; ///< draw_horiz_band() is called in coded order instead of display 6147 enum SLICE_FLAG_ALLOW_FIELD = 0x0002; ///< allow draw_horiz_band() with field slices (MPEG2 field pics) 6148 enum SLICE_FLAG_ALLOW_PLANE = 0x0004; ///< allow draw_horiz_band() with 1 component at a time (SVQ1) 6149 6150 enum FF_MB_DECISION_SIMPLE = 0; ///< uses mb_cmp 6151 enum FF_MB_DECISION_BITS = 1; ///< chooses the one which needs the fewest bits 6152 enum FF_MB_DECISION_RD = 2; ///< rate distortion 6153 6154 enum FF_CODER_TYPE_VLC = 0; 6155 enum FF_CODER_TYPE_AC = 1; 6156 enum FF_CODER_TYPE_RAW = 2; 6157 enum FF_CODER_TYPE_RLE = 3; 6158 static if (FF_API_UNUSED_MEMBERS) { 6159 enum FF_CODER_TYPE_DEFLATE = 4; 6160 } 6161 6162 //AVCodecContext.workaround_bugs 6163 enum FF_BUG_AUTODETECT = 1; ///< autodetection 6164 static if (FF_API_OLD_MSMPEG4) { 6165 enum FF_BUG_OLD_MSMPEG4 = 2; 6166 } 6167 enum FF_BUG_XVID_ILACE = 4; 6168 enum FF_BUG_UMP4 = 8; 6169 enum FF_BUG_NO_PADDING = 16; 6170 enum FF_BUG_AMV = 32; 6171 enum FF_BUG_AC_VLC = 0; ///< Will be removed, libavcodec can now handle these non-compliant files by default. 6172 enum FF_BUG_QPEL_CHROMA = 64; 6173 enum FF_BUG_STD_QPEL = 128; 6174 enum FF_BUG_QPEL_CHROMA2 = 256; 6175 enum FF_BUG_DIRECT_BLOCKSIZE = 512; 6176 enum FF_BUG_EDGE = 1024; 6177 enum FF_BUG_HPEL_CHROMA = 2048; 6178 enum FF_BUG_DC_CLIP = 4096; 6179 enum FF_BUG_MS = 8192; ///< Work around various bugs in Microsoft's broken decoders. 6180 enum FF_BUG_TRUNCATED = 16_384; 6181 6182 // AVCodecContext.strict_std_compliance; 6183 enum FF_COMPLIANCE_VERY_STRICT = 2; ///< Strictly conform to an older more strict version of the spec or reference software. 6184 enum FF_COMPLIANCE_STRICT = 1; ///< Strictly conform to all the things in the spec no matter what consequences. 6185 enum FF_COMPLIANCE_NORMAL = 0; 6186 enum FF_COMPLIANCE_UNOFFICIAL = -1; ///< Allow unofficial extensions 6187 enum FF_COMPLIANCE_EXPERIMENTAL = -2; ///< Allow nonstandardized experimental things. 6188 6189 // AVCodecContext.error_concealment 6190 enum FF_EC_GUESS_MVS = 1; 6191 enum FF_EC_DEBLOCK = 2; 6192 enum FF_EC_FAVOR_INTER = 256; 6193 6194 // AVCodecContext.ddebug 6195 enum FF_DEBUG_PICT_INFO = 1; 6196 enum FF_DEBUG_RC = 2; 6197 enum FF_DEBUG_BITSTREAM = 4; 6198 enum FF_DEBUG_MB_TYPE = 8; 6199 enum FF_DEBUG_QP = 16; 6200 enum FF_DEBUG_MV = 32; 6201 enum FF_DEBUG_DCT_COEFF = 0x00000040; 6202 enum FF_DEBUG_SKIP = 0x00000080; 6203 enum FF_DEBUG_STARTCODE = 0x00000100; 6204 static if (FF_API_UNUSED_MEMBERS) { 6205 enum FF_DEBUG_PTS = 0x00000200; 6206 } 6207 enum FF_DEBUG_ER = 0x00000400; 6208 enum FF_DEBUG_MMCO = 0x00000800; 6209 enum FF_DEBUG_BUGS = 0x00001000; 6210 static if (FF_API_DEBUG_MV) { 6211 enum FF_DEBUG_VIS_QP = 0x00002000; 6212 enum FF_DEBUG_VIS_MB_TYPE = 0x00004000; 6213 } 6214 enum FF_DEBUG_BUFFERS = 0x00008000; 6215 enum FF_DEBUG_THREADS = 0x00010000; 6216 enum FF_DEBUG_GREEN_MD= 0x00800000; 6217 enum FF_DEBUG_NOMC = 0x01000000; 6218 // AVCodecContext.debug_mv 6219 enum FF_DEBUG_VIS_MV_P_FOR =0x00000001; //visualize forward predicted MVs of P frames 6220 enum FF_DEBUG_VIS_MV_B_FOR =0x00000002; //visualize forward predicted MVs of B frames 6221 enum FF_DEBUG_VIS_MV_B_BACK =0x00000004; //visualize backward predicted MVs of B frames 6222 // AVCodecContext.properties 6223 enum FF_CODEC_PROPERTY_LOSSLESS = 0x00000001; 6224 enum FF_CODEC_PROPERTY_CLOSED_CAPTIONS = 0x00000002; 6225 // AVCodecContext.sub_text_format 6226 enum FF_SUB_TEXT_FMT_ASS = 0; 6227 static if (FF_API_ASS_TIMING){ 6228 enum FF_SUB_TEXT_FMT_ASS_WITH_TIMINGS = 1; 6229 } 6230 6231 // AVCodecContext.err_recognition 6232 enum AV_EF_CRCCHECK = 1<<0; 6233 enum AV_EF_BITSTREAM = 1<<1; 6234 enum AV_EF_BUFFER = 1<<2; 6235 enum AV_EF_EXPLODE = 1<<3; 6236 enum AV_EF_IGNORE_ERR = (1<<15); ///< ignore errors and continue 6237 enum AV_EF_CAREFUL = 1<<16; 6238 enum AV_EF_COMPLIANT = 1<<17; 6239 enum AV_EF_AGGRESSIVE = 1<<18; 6240 6241 //AVCodecContext.dct_algo 6242 enum FF_DCT_AUTO = 0; 6243 enum FF_DCT_FASTINT =1; 6244 static if (FF_API_UNUSED_MEMBERS) { 6245 enum FF_DCT_INT = 2; 6246 } 6247 enum FF_DCT_MMX = 3; 6248 enum FF_DCT_ALTIVEC =5; 6249 enum FF_DCT_FAAN = 6; 6250 6251 //AVCodecContext.idct_algo 6252 enum FF_IDCT_AUTO = 0; 6253 enum FF_IDCT_INT = 1; 6254 enum FF_IDCT_SIMPLE = 2; 6255 enum FF_IDCT_SIMPLEMMX = 3; 6256 enum FF_IDCT_LIBMPEG2MMX = 4; 6257 enum FF_IDCT_ARM = 7; 6258 enum FF_IDCT_ALTIVEC = 8; 6259 static if (FF_API_ARCH_SH4) { 6260 enum FF_IDCT_SH4 = 9; 6261 } 6262 enum FF_IDCT_SIMPLEARM = 10; 6263 static if (FF_API_UNUSED_MEMBERS) { 6264 enum FF_IDCT_IPP = 13; 6265 } 6266 enum FF_IDCT_XVID = 14; 6267 static if (FF_API_IDCT_XVIDMMX) { 6268 enum FF_IDCT_XVIDMMX = 14; 6269 } 6270 enum FF_IDCT_SIMPLEARMV5TE =16; 6271 enum FF_IDCT_SIMPLEARMV6 = 17; 6272 static if (FF_API_ARCH_SPARC) { 6273 enum FF_IDCT_SIMPLEVIS = 18; 6274 } 6275 enum FF_IDCT_FAAN = 20; 6276 enum FF_IDCT_SIMPLENEON = 22; 6277 static if (FF_API_ARCH_ALPHA) { 6278 enum FF_IDCT_SIMPLEALPHA = 23; 6279 } 6280 enum FF_IDCT_SIMPLEAUTO = 128; 6281 6282 //AVCodecContext.thread_type 6283 enum FF_THREAD_FRAME = 1; ///< Decode more than one frame at once 6284 enum FF_THREAD_SLICE = 2; ///< Decode more than one part of a single frame at once 6285 6286 //AVCodecContext.profile; 6287 enum FF_PROFILE_UNKNOWN = -99; 6288 enum FF_PROFILE_RESERVED = -100; 6289 6290 enum FF_PROFILE_AAC_MAIN =0; 6291 enum FF_PROFILE_AAC_LOW = 1; 6292 enum FF_PROFILE_AAC_SSR = 2; 6293 enum FF_PROFILE_AAC_LTP = 3; 6294 6295 enum FF_PROFILE_AAC_HE =4; 6296 enum FF_PROFILE_AAC_HE_V2=28; 6297 enum FF_PROFILE_AAC_LD =22; 6298 enum FF_PROFILE_AAC_ELD =38; 6299 enum FF_PROFILE_MPEG2_AAC_LOW = 128; 6300 enum FF_PROFILE_MPEG2_AAC_HE = 131; 6301 6302 enum FF_PROFILE_DTS = 20; 6303 enum FF_PROFILE_DTS_ES = 30; 6304 enum FF_PROFILE_DTS_96_24 = 40; 6305 enum FF_PROFILE_DTS_HD_HRA = 50; 6306 enum FF_PROFILE_DTS_HD_MA = 60; 6307 enum FF_PROFILE_DTS_EXPRESS = 70; 6308 6309 enum FF_PROFILE_MPEG2_422 = 0; 6310 enum FF_PROFILE_MPEG2_HIGH = 1; 6311 enum FF_PROFILE_MPEG2_SS = 2; 6312 enum FF_PROFILE_MPEG2_SNR_SCALABLE =3; 6313 enum FF_PROFILE_MPEG2_MAIN = 4; 6314 enum FF_PROFILE_MPEG2_SIMPLE=5; 6315 6316 enum FF_PROFILE_H264_CONSTRAINED= (1<<9); // 8+1; constraint_set1_flag 6317 enum FF_PROFILE_H264_INTRA = (1<<11); // 8+3; constraint_set3_flag 6318 6319 enum FF_PROFILE_H264_BASELINE = 66; 6320 enum FF_PROFILE_H264_CONSTRAINED_BASELINE=(66|FF_PROFILE_H264_CONSTRAINED); 6321 enum FF_PROFILE_H264_MAIN = 77; 6322 enum FF_PROFILE_H264_EXTENDED = 88; 6323 enum FF_PROFILE_H264_HIGH = 100; 6324 enum FF_PROFILE_H264_HIGH_10 = 110; 6325 enum FF_PROFILE_H264_HIGH_10_INTRA = (110|FF_PROFILE_H264_INTRA); 6326 enum FF_PROFILE_H264_HIGH_422 = 122; 6327 enum FF_PROFILE_H264_HIGH_422_INTRA = (122|FF_PROFILE_H264_INTRA); 6328 enum FF_PROFILE_H264_HIGH_444 = 144; 6329 enum FF_PROFILE_H264_HIGH_444_PREDICTIVE =244; 6330 enum FF_PROFILE_H264_HIGH_444_INTRA = (244|FF_PROFILE_H264_INTRA); 6331 enum FF_PROFILE_H264_CAVLC_444 = 44; 6332 6333 enum FF_PROFILE_VC1_SIMPLE = 0; 6334 enum FF_PROFILE_VC1_MAIN = 1; 6335 enum FF_PROFILE_VC1_COMPLEX =2; 6336 enum FF_PROFILE_VC1_ADVANCED=3; 6337 6338 enum FF_PROFILE_MPEG4_SIMPLE = 0; 6339 enum FF_PROFILE_MPEG4_SIMPLE_SCALABLE = 1; 6340 enum FF_PROFILE_MPEG4_CORE = 2; 6341 enum FF_PROFILE_MPEG4_MAIN = 3; 6342 enum FF_PROFILE_MPEG4_N_BIT = 4; 6343 enum FF_PROFILE_MPEG4_SCALABLE_TEXTURE = 5; 6344 enum FF_PROFILE_MPEG4_SIMPLE_FACE_ANIMATION = 6; 6345 enum FF_PROFILE_MPEG4_BASIC_ANIMATED_TEXTURE = 7; 6346 enum FF_PROFILE_MPEG4_HYBRID = 8; 6347 enum FF_PROFILE_MPEG4_ADVANCED_REAL_TIME = 9; 6348 enum FF_PROFILE_MPEG4_CORE_SCALABLE = 10; 6349 enum FF_PROFILE_MPEG4_ADVANCED_CODING = 11; 6350 enum FF_PROFILE_MPEG4_ADVANCED_CORE = 12; 6351 enum FF_PROFILE_MPEG4_ADVANCED_SCALABLE_TEXTURE=13; 6352 enum FF_PROFILE_MPEG4_SIMPLE_STUDIO = 14; 6353 enum FF_PROFILE_MPEG4_ADVANCED_SIMPLE = 15; 6354 enum FF_PROFILE_JPEG2000_CSTREAM_RESTRICTION_0 = 0; 6355 enum FF_PROFILE_JPEG2000_CSTREAM_RESTRICTION_1 = 1; 6356 enum FF_PROFILE_JPEG2000_CSTREAM_NO_RESTRICTION =2; 6357 enum FF_PROFILE_JPEG2000_DCINEMA_2K = 3; 6358 enum FF_PROFILE_JPEG2000_DCINEMA_4K = 4; 6359 6360 enum FF_PROFILE_VP9_0 = 0; 6361 enum FF_PROFILE_VP9_1 = 1; 6362 enum FF_PROFILE_VP9_2 = 2; 6363 enum FF_PROFILE_VP9_3 = 3; 6364 6365 enum FF_PROFILE_HEVC_MAIN = 1; 6366 enum FF_PROFILE_HEVC_MAIN_10 = 2; 6367 enum FF_PROFILE_HEVC_MAIN_STILL_PICTURE = 3; 6368 enum FF_PROFILE_HEVC_REXT = 4; 6369 6370 enum FF_COMPRESSION_DEFAULT = -1; 6371 6372 //AVCodecContext.level; 6373 enum FF_LEVEL_UNKNOWN = -99; 6374 6375 enum FF_SUB_CHARENC_MODE_DO_NOTHING =-1; ///< do nothing (demuxer outputs a stream supposed to be already in UTF-8, or the codec is bitmap for instance) 6376 enum FF_SUB_CHARENC_MODE_AUTOMATIC = 0; ///< libavcodec will select the mode itself 6377 enum FF_SUB_CHARENC_MODE_PRE_DECODER= 1; ///< the AVPacket data needs to be recoded to UTF-8 before being fed to the decoder, requires iconv 6378 6379 static if (!FF_API_DEBUG_MV) { 6380 enum FF_DEBUG_VIS_MV_P_FOR =0x00000001;//visualize forward predicted MVs of P frames 6381 enum FF_DEBUG_VIS_MV_B_FOR =0x00000002;//visualize forward predicted MVs of B frames 6382 enum FF_DEBUG_VIS_MV_B_BACK=0x00000004;//visualize backward predicted MVs of B frames 6383 } 6384 6385 enum AV_PARSER_PTS_NB = 4; 6386 enum PARSER_FLAG_COMPLETE_FRAMES = 0x0001; 6387 enum PARSER_FLAG_ONCE = 0x0002; 6388 /// Set if the parser has a valid file offset 6389 enum PARSER_FLAG_FETCHED_OFFSET = 0x0004; 6390 enum PARSER_FLAG_USE_CODEC_TS = 0x1000; 6391 6392 alias AV_CODEC_ID_H265 = AVCodecID.AV_CODEC_ID_HEVC; 6393 alias AV_CODEC_ID_IFF_BYTERUN1 = AVCodecID.AV_CODEC_ID_IFF_ILBM;