avcodec.h (115663B)
1 /* 2 * copyright (c) 2001 Fabrice Bellard 3 * 4 * This file is part of FFmpeg. 5 * 6 * FFmpeg is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU Lesser General Public 8 * License as published by the Free Software Foundation; either 9 * version 2.1 of the License, or (at your option) any later version. 10 * 11 * FFmpeg is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * Lesser General Public License for more details. 15 * 16 * You should have received a copy of the GNU Lesser General Public 17 * License along with FFmpeg; if not, write to the Free Software 18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 19 */ 20 21 #ifndef AVCODEC_AVCODEC_H 22 #define AVCODEC_AVCODEC_H 23 24 /** 25 * @file 26 * @ingroup libavc 27 * Libavcodec external API header 28 */ 29 30 #include "libavutil/samplefmt.h" 31 #include "libavutil/attributes.h" 32 #include "libavutil/avutil.h" 33 #include "libavutil/buffer.h" 34 #include "libavutil/channel_layout.h" 35 #include "libavutil/dict.h" 36 #include "libavutil/frame.h" 37 #include "libavutil/log.h" 38 #include "libavutil/pixfmt.h" 39 #include "libavutil/rational.h" 40 41 #include "codec.h" 42 #include "codec_id.h" 43 #include "defs.h" 44 #include "packet.h" 45 #include "version_major.h" 46 #ifndef HAVE_AV_CONFIG_H 47 /* When included as part of the ffmpeg build, only include the major version 48 * to avoid unnecessary rebuilds. When included externally, keep including 49 * the full version information. */ 50 #include "version.h" 51 52 #include "codec_desc.h" 53 #include "codec_par.h" 54 #endif 55 56 struct AVCodecParameters; 57 58 /** 59 * @defgroup libavc libavcodec 60 * Encoding/Decoding Library 61 * 62 * @{ 63 * 64 * @defgroup lavc_decoding Decoding 65 * @{ 66 * @} 67 * 68 * @defgroup lavc_encoding Encoding 69 * @{ 70 * @} 71 * 72 * @defgroup lavc_codec Codecs 73 * @{ 74 * @defgroup lavc_codec_native Native Codecs 75 * @{ 76 * @} 77 * @defgroup lavc_codec_wrappers External library wrappers 78 * @{ 79 * @} 80 * @defgroup lavc_codec_hwaccel Hardware Accelerators bridge 81 * @{ 82 * @} 83 * @} 84 * @defgroup lavc_internal Internal 85 * @{ 86 * @} 87 * @} 88 */ 89 90 /** 91 * @ingroup libavc 92 * @defgroup lavc_encdec send/receive encoding and decoding API overview 93 * @{ 94 * 95 * The avcodec_send_packet()/avcodec_receive_frame()/avcodec_send_frame()/ 96 * avcodec_receive_packet() functions provide an encode/decode API, which 97 * decouples input and output. 98 * 99 * The API is very similar for encoding/decoding and audio/video, and works as 100 * follows: 101 * - Set up and open the AVCodecContext as usual. 102 * - Send valid input: 103 * - For decoding, call avcodec_send_packet() to give the decoder raw 104 * compressed data in an AVPacket. 105 * - For encoding, call avcodec_send_frame() to give the encoder an AVFrame 106 * containing uncompressed audio or video. 107 * 108 * In both cases, it is recommended that AVPackets and AVFrames are 109 * refcounted, or libavcodec might have to copy the input data. (libavformat 110 * always returns refcounted AVPackets, and av_frame_get_buffer() allocates 111 * refcounted AVFrames.) 112 * - Receive output in a loop. Periodically call one of the avcodec_receive_*() 113 * functions and process their output: 114 * - For decoding, call avcodec_receive_frame(). On success, it will return 115 * an AVFrame containing uncompressed audio or video data. 116 * - For encoding, call avcodec_receive_packet(). On success, it will return 117 * an AVPacket with a compressed frame. 118 * 119 * Repeat this call until it returns AVERROR(EAGAIN) or an error. The 120 * AVERROR(EAGAIN) return value means that new input data is required to 121 * return new output. In this case, continue with sending input. For each 122 * input frame/packet, the codec will typically return 1 output frame/packet, 123 * but it can also be 0 or more than 1. 124 * 125 * At the beginning of decoding or encoding, the codec might accept multiple 126 * input frames/packets without returning a frame, until its internal buffers 127 * are filled. This situation is handled transparently if you follow the steps 128 * outlined above. 129 * 130 * In theory, sending input can result in EAGAIN - this should happen only if 131 * not all output was received. You can use this to structure alternative decode 132 * or encode loops other than the one suggested above. For example, you could 133 * try sending new input on each iteration, and try to receive output if that 134 * returns EAGAIN. 135 * 136 * End of stream situations. These require "flushing" (aka draining) the codec, 137 * as the codec might buffer multiple frames or packets internally for 138 * performance or out of necessity (consider B-frames). 139 * This is handled as follows: 140 * - Instead of valid input, send NULL to the avcodec_send_packet() (decoding) 141 * or avcodec_send_frame() (encoding) functions. This will enter draining 142 * mode. 143 * - Call avcodec_receive_frame() (decoding) or avcodec_receive_packet() 144 * (encoding) in a loop until AVERROR_EOF is returned. The functions will 145 * not return AVERROR(EAGAIN), unless you forgot to enter draining mode. 146 * - Before decoding can be resumed again, the codec has to be reset with 147 * avcodec_flush_buffers(). 148 * 149 * Using the API as outlined above is highly recommended. But it is also 150 * possible to call functions outside of this rigid schema. For example, you can 151 * call avcodec_send_packet() repeatedly without calling 152 * avcodec_receive_frame(). In this case, avcodec_send_packet() will succeed 153 * until the codec's internal buffer has been filled up (which is typically of 154 * size 1 per output frame, after initial input), and then reject input with 155 * AVERROR(EAGAIN). Once it starts rejecting input, you have no choice but to 156 * read at least some output. 157 * 158 * Not all codecs will follow a rigid and predictable dataflow; the only 159 * guarantee is that an AVERROR(EAGAIN) return value on a send/receive call on 160 * one end implies that a receive/send call on the other end will succeed, or 161 * at least will not fail with AVERROR(EAGAIN). In general, no codec will 162 * permit unlimited buffering of input or output. 163 * 164 * A codec is not allowed to return AVERROR(EAGAIN) for both sending and receiving. This 165 * would be an invalid state, which could put the codec user into an endless 166 * loop. The API has no concept of time either: it cannot happen that trying to 167 * do avcodec_send_packet() results in AVERROR(EAGAIN), but a repeated call 1 second 168 * later accepts the packet (with no other receive/flush API calls involved). 169 * The API is a strict state machine, and the passage of time is not supposed 170 * to influence it. Some timing-dependent behavior might still be deemed 171 * acceptable in certain cases. But it must never result in both send/receive 172 * returning EAGAIN at the same time at any point. It must also absolutely be 173 * avoided that the current state is "unstable" and can "flip-flop" between 174 * the send/receive APIs allowing progress. For example, it's not allowed that 175 * the codec randomly decides that it actually wants to consume a packet now 176 * instead of returning a frame, after it just returned AVERROR(EAGAIN) on an 177 * avcodec_send_packet() call. 178 * @} 179 */ 180 181 /** 182 * @defgroup lavc_core Core functions/structures. 183 * @ingroup libavc 184 * 185 * Basic definitions, functions for querying libavcodec capabilities, 186 * allocating core structures, etc. 187 * @{ 188 */ 189 190 #if FF_API_BUFFER_MIN_SIZE 191 /** 192 * @ingroup lavc_encoding 193 * minimum encoding buffer size 194 * Used to avoid some checks during header writing. 195 * @deprecated Unused: avcodec_receive_packet() does not work 196 * with preallocated packet buffers. 197 */ 198 #define AV_INPUT_BUFFER_MIN_SIZE 16384 199 #endif 200 201 /** 202 * @ingroup lavc_encoding 203 */ 204 typedef struct RcOverride{ 205 int start_frame; 206 int end_frame; 207 int qscale; // If this is 0 then quality_factor will be used instead. 208 float quality_factor; 209 } RcOverride; 210 211 /* encoding support 212 These flags can be passed in AVCodecContext.flags before initialization. 213 Note: Not everything is supported yet. 214 */ 215 216 /** 217 * Allow decoders to produce frames with data planes that are not aligned 218 * to CPU requirements (e.g. due to cropping). 219 */ 220 #define AV_CODEC_FLAG_UNALIGNED (1 << 0) 221 /** 222 * Use fixed qscale. 223 */ 224 #define AV_CODEC_FLAG_QSCALE (1 << 1) 225 /** 226 * 4 MV per MB allowed / advanced prediction for H.263. 227 */ 228 #define AV_CODEC_FLAG_4MV (1 << 2) 229 /** 230 * Output even those frames that might be corrupted. 231 */ 232 #define AV_CODEC_FLAG_OUTPUT_CORRUPT (1 << 3) 233 /** 234 * Use qpel MC. 235 */ 236 #define AV_CODEC_FLAG_QPEL (1 << 4) 237 #if FF_API_DROPCHANGED 238 /** 239 * Don't output frames whose parameters differ from first 240 * decoded frame in stream. 241 * 242 * @deprecated callers should implement this functionality in their own code 243 */ 244 #define AV_CODEC_FLAG_DROPCHANGED (1 << 5) 245 #endif 246 /** 247 * Request the encoder to output reconstructed frames, i.e.\ frames that would 248 * be produced by decoding the encoded bistream. These frames may be retrieved 249 * by calling avcodec_receive_frame() immediately after a successful call to 250 * avcodec_receive_packet(). 251 * 252 * Should only be used with encoders flagged with the 253 * @ref AV_CODEC_CAP_ENCODER_RECON_FRAME capability. 254 * 255 * @note 256 * Each reconstructed frame returned by the encoder corresponds to the last 257 * encoded packet, i.e. the frames are returned in coded order rather than 258 * presentation order. 259 * 260 * @note 261 * Frame parameters (like pixel format or dimensions) do not have to match the 262 * AVCodecContext values. Make sure to use the values from the returned frame. 263 */ 264 #define AV_CODEC_FLAG_RECON_FRAME (1 << 6) 265 /** 266 * @par decoding 267 * Request the decoder to propagate each packet's AVPacket.opaque and 268 * AVPacket.opaque_ref to its corresponding output AVFrame. 269 * 270 * @par encoding: 271 * Request the encoder to propagate each frame's AVFrame.opaque and 272 * AVFrame.opaque_ref values to its corresponding output AVPacket. 273 * 274 * @par 275 * May only be set on encoders that have the 276 * @ref AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE capability flag. 277 * 278 * @note 279 * While in typical cases one input frame produces exactly one output packet 280 * (perhaps after a delay), in general the mapping of frames to packets is 281 * M-to-N, so 282 * - Any number of input frames may be associated with any given output packet. 283 * This includes zero - e.g. some encoders may output packets that carry only 284 * metadata about the whole stream. 285 * - A given input frame may be associated with any number of output packets. 286 * Again this includes zero - e.g. some encoders may drop frames under certain 287 * conditions. 288 * . 289 * This implies that when using this flag, the caller must NOT assume that 290 * - a given input frame's opaques will necessarily appear on some output packet; 291 * - every output packet will have some non-NULL opaque value. 292 * . 293 * When an output packet contains multiple frames, the opaque values will be 294 * taken from the first of those. 295 * 296 * @note 297 * The converse holds for decoders, with frames and packets switched. 298 */ 299 #define AV_CODEC_FLAG_COPY_OPAQUE (1 << 7) 300 /** 301 * Signal to the encoder that the values of AVFrame.duration are valid and 302 * should be used (typically for transferring them to output packets). 303 * 304 * If this flag is not set, frame durations are ignored. 305 */ 306 #define AV_CODEC_FLAG_FRAME_DURATION (1 << 8) 307 /** 308 * Use internal 2pass ratecontrol in first pass mode. 309 */ 310 #define AV_CODEC_FLAG_PASS1 (1 << 9) 311 /** 312 * Use internal 2pass ratecontrol in second pass mode. 313 */ 314 #define AV_CODEC_FLAG_PASS2 (1 << 10) 315 /** 316 * loop filter. 317 */ 318 #define AV_CODEC_FLAG_LOOP_FILTER (1 << 11) 319 /** 320 * Only decode/encode grayscale. 321 */ 322 #define AV_CODEC_FLAG_GRAY (1 << 13) 323 /** 324 * error[?] variables will be set during encoding. 325 */ 326 #define AV_CODEC_FLAG_PSNR (1 << 15) 327 /** 328 * Use interlaced DCT. 329 */ 330 #define AV_CODEC_FLAG_INTERLACED_DCT (1 << 18) 331 /** 332 * Force low delay. 333 */ 334 #define AV_CODEC_FLAG_LOW_DELAY (1 << 19) 335 /** 336 * Place global headers in extradata instead of every keyframe. 337 */ 338 #define AV_CODEC_FLAG_GLOBAL_HEADER (1 << 22) 339 /** 340 * Use only bitexact stuff (except (I)DCT). 341 */ 342 #define AV_CODEC_FLAG_BITEXACT (1 << 23) 343 /* Fx : Flag for H.263+ extra options */ 344 /** 345 * H.263 advanced intra coding / MPEG-4 AC prediction 346 */ 347 #define AV_CODEC_FLAG_AC_PRED (1 << 24) 348 /** 349 * interlaced motion estimation 350 */ 351 #define AV_CODEC_FLAG_INTERLACED_ME (1 << 29) 352 #define AV_CODEC_FLAG_CLOSED_GOP (1U << 31) 353 354 /** 355 * Allow non spec compliant speedup tricks. 356 */ 357 #define AV_CODEC_FLAG2_FAST (1 << 0) 358 /** 359 * Skip bitstream encoding. 360 */ 361 #define AV_CODEC_FLAG2_NO_OUTPUT (1 << 2) 362 /** 363 * Place global headers at every keyframe instead of in extradata. 364 */ 365 #define AV_CODEC_FLAG2_LOCAL_HEADER (1 << 3) 366 367 /** 368 * Input bitstream might be truncated at a packet boundaries 369 * instead of only at frame boundaries. 370 */ 371 #define AV_CODEC_FLAG2_CHUNKS (1 << 15) 372 /** 373 * Discard cropping information from SPS. 374 */ 375 #define AV_CODEC_FLAG2_IGNORE_CROP (1 << 16) 376 377 /** 378 * Show all frames before the first keyframe 379 */ 380 #define AV_CODEC_FLAG2_SHOW_ALL (1 << 22) 381 /** 382 * Export motion vectors through frame side data 383 */ 384 #define AV_CODEC_FLAG2_EXPORT_MVS (1 << 28) 385 /** 386 * Do not skip samples and export skip information as frame side data 387 */ 388 #define AV_CODEC_FLAG2_SKIP_MANUAL (1 << 29) 389 /** 390 * Do not reset ASS ReadOrder field on flush (subtitles decoding) 391 */ 392 #define AV_CODEC_FLAG2_RO_FLUSH_NOOP (1 << 30) 393 /** 394 * Generate/parse ICC profiles on encode/decode, as appropriate for the type of 395 * file. No effect on codecs which cannot contain embedded ICC profiles, or 396 * when compiled without support for lcms2. 397 */ 398 #define AV_CODEC_FLAG2_ICC_PROFILES (1U << 31) 399 400 /* Exported side data. 401 These flags can be passed in AVCodecContext.export_side_data before initialization. 402 */ 403 /** 404 * Export motion vectors through frame side data 405 */ 406 #define AV_CODEC_EXPORT_DATA_MVS (1 << 0) 407 /** 408 * Export encoder Producer Reference Time through packet side data 409 */ 410 #define AV_CODEC_EXPORT_DATA_PRFT (1 << 1) 411 /** 412 * Decoding only. 413 * Export the AVVideoEncParams structure through frame side data. 414 */ 415 #define AV_CODEC_EXPORT_DATA_VIDEO_ENC_PARAMS (1 << 2) 416 /** 417 * Decoding only. 418 * Do not apply film grain, export it instead. 419 */ 420 #define AV_CODEC_EXPORT_DATA_FILM_GRAIN (1 << 3) 421 422 /** 423 * Decoding only. 424 * Do not apply picture enhancement layers, export them instead. 425 */ 426 #define AV_CODEC_EXPORT_DATA_ENHANCEMENTS (1 << 4) 427 428 /** 429 * The decoder will keep a reference to the frame and may reuse it later. 430 */ 431 #define AV_GET_BUFFER_FLAG_REF (1 << 0) 432 433 /** 434 * The encoder will keep a reference to the packet and may reuse it later. 435 */ 436 #define AV_GET_ENCODE_BUFFER_FLAG_REF (1 << 0) 437 438 /** 439 * main external API structure. 440 * New fields can be added to the end with minor version bumps. 441 * Removal, reordering and changes to existing fields require a major 442 * version bump. 443 * You can use AVOptions (av_opt* / av_set/get*()) to access these fields from user 444 * applications. 445 * The name string for AVOptions options matches the associated command line 446 * parameter name and can be found in libavcodec/options_table.h 447 * The AVOption/command line parameter names differ in some cases from the C 448 * structure field names for historic reasons or brevity. 449 * sizeof(AVCodecContext) must not be used outside libav*. 450 */ 451 typedef struct AVCodecContext { 452 /** 453 * information on struct for av_log 454 * - set by avcodec_alloc_context3 455 */ 456 const AVClass *av_class; 457 int log_level_offset; 458 459 enum AVMediaType codec_type; /* see AVMEDIA_TYPE_xxx */ 460 const struct AVCodec *codec; 461 enum AVCodecID codec_id; /* see AV_CODEC_ID_xxx */ 462 463 /** 464 * fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A'). 465 * This is used to work around some encoder bugs. 466 * A demuxer should set this to what is stored in the field used to identify the codec. 467 * If there are multiple such fields in a container then the demuxer should choose the one 468 * which maximizes the information about the used codec. 469 * If the codec tag field in a container is larger than 32 bits then the demuxer should 470 * remap the longer ID to 32 bits with a table or other structure. Alternatively a new 471 * extra_codec_tag + size could be added but for this a clear advantage must be demonstrated 472 * first. 473 * - encoding: Set by user, if not then the default based on codec_id will be used. 474 * - decoding: Set by user, will be converted to uppercase by libavcodec during init. 475 */ 476 unsigned int codec_tag; 477 478 void *priv_data; 479 480 /** 481 * Private context used for internal data. 482 * 483 * Unlike priv_data, this is not codec-specific. It is used in general 484 * libavcodec functions. 485 */ 486 struct AVCodecInternal *internal; 487 488 /** 489 * Private data of the user, can be used to carry app specific stuff. 490 * - encoding: Set by user. 491 * - decoding: Set by user. 492 */ 493 void *opaque; 494 495 /** 496 * the average bitrate 497 * - encoding: Set by user; unused for constant quantizer encoding. 498 * - decoding: Set by user, may be overwritten by libavcodec 499 * if this info is available in the stream 500 */ 501 int64_t bit_rate; 502 503 /** 504 * AV_CODEC_FLAG_*. 505 * - encoding: Set by user. 506 * - decoding: Set by user. 507 */ 508 int flags; 509 510 /** 511 * AV_CODEC_FLAG2_* 512 * - encoding: Set by user. 513 * - decoding: Set by user. 514 */ 515 int flags2; 516 517 /** 518 * Out-of-band global headers that may be used by some codecs. 519 * 520 * - decoding: Should be set by the caller when available (typically from a 521 * demuxer) before opening the decoder; some decoders require this to be 522 * set and will fail to initialize otherwise. 523 * 524 * The array must be allocated with the av_malloc() family of functions; 525 * allocated size must be at least AV_INPUT_BUFFER_PADDING_SIZE bytes 526 * larger than extradata_size. 527 * 528 * - encoding: May be set by the encoder in avcodec_open2() (possibly 529 * depending on whether the AV_CODEC_FLAG_GLOBAL_HEADER flag is set). 530 * 531 * After being set, the array is owned by the codec and freed in 532 * avcodec_free_context(). 533 * 534 * @warning the deprecated avcodec_close() function DOES NOT free this array 535 * for decoding, it must be freed manually by the caller. 536 */ 537 uint8_t *extradata; 538 int extradata_size; 539 540 /** 541 * This is the fundamental unit of time (in seconds) in terms 542 * of which frame timestamps are represented. For fixed-fps content, 543 * timebase should be 1/framerate and timestamp increments should be 544 * identically 1. 545 * This often, but not always is the inverse of the frame rate or field rate 546 * for video. 1/time_base is not the average frame rate if the frame rate is not 547 * constant. 548 * 549 * Like containers, elementary streams also can store timestamps, 1/time_base 550 * is the unit in which these timestamps are specified. 551 * As example of such codec time base see ISO/IEC 14496-2:2001(E) 552 * vop_time_increment_resolution and fixed_vop_rate 553 * (fixed_vop_rate == 0 implies that it is different from the framerate) 554 * 555 * - encoding: MUST be set by user. 556 * - decoding: unused. 557 */ 558 AVRational time_base; 559 560 /** 561 * Timebase in which pkt_dts/pts and AVPacket.dts/pts are expressed. 562 * - encoding: unused. 563 * - decoding: set by user. 564 */ 565 AVRational pkt_timebase; 566 567 /** 568 * - decoding: For codecs that store a framerate value in the compressed 569 * bitstream, the decoder may export it here. { 0, 1} when 570 * unknown. 571 * - encoding: May be used to signal the framerate of CFR content to an 572 * encoder. 573 */ 574 AVRational framerate; 575 576 #if FF_API_TICKS_PER_FRAME 577 /** 578 * For some codecs, the time base is closer to the field rate than the frame rate. 579 * Most notably, H.264 and MPEG-2 specify time_base as half of frame duration 580 * if no telecine is used ... 581 * 582 * Set to time_base ticks per frame. Default 1, e.g., H.264/MPEG-2 set it to 2. 583 * 584 * @deprecated 585 * - decoding: Use AVCodecDescriptor.props & AV_CODEC_PROP_FIELDS 586 * - encoding: Set AVCodecContext.framerate instead 587 * 588 */ 589 attribute_deprecated 590 int ticks_per_frame; 591 #endif 592 593 /** 594 * Codec delay. 595 * 596 * Encoding: Number of frames delay there will be from the encoder input to 597 * the decoder output. (we assume the decoder matches the spec) 598 * Decoding: Number of frames delay in addition to what a standard decoder 599 * as specified in the spec would produce. 600 * 601 * Video: 602 * Number of frames the decoded output will be delayed relative to the 603 * encoded input. 604 * 605 * Audio: 606 * For encoding, this field is unused (see initial_padding). 607 * 608 * For decoding, this is the number of samples the decoder needs to 609 * output before the decoder's output is valid. When seeking, you should 610 * start decoding this many samples prior to your desired seek point. 611 * 612 * - encoding: Set by libavcodec. 613 * - decoding: Set by libavcodec. 614 */ 615 int delay; 616 617 618 /* video only */ 619 /** 620 * picture width / height. 621 * 622 * @note Those fields may not match the values of the last 623 * AVFrame output by avcodec_receive_frame() due frame 624 * reordering. 625 * 626 * - encoding: MUST be set by user. 627 * - decoding: May be set by the user before opening the decoder if known e.g. 628 * from the container. Some decoders will require the dimensions 629 * to be set by the caller. During decoding, the decoder may 630 * overwrite those values as required while parsing the data. 631 */ 632 int width, height; 633 634 /** 635 * Bitstream width / height, may be different from width/height e.g. when 636 * the decoded frame is cropped before being output or lowres is enabled. 637 * 638 * @note Those field may not match the value of the last 639 * AVFrame output by avcodec_receive_frame() due frame 640 * reordering. 641 * 642 * - encoding: unused 643 * - decoding: May be set by the user before opening the decoder if known 644 * e.g. from the container. During decoding, the decoder may 645 * overwrite those values as required while parsing the data. 646 */ 647 int coded_width, coded_height; 648 649 /** 650 * sample aspect ratio (0 if unknown) 651 * That is the width of a pixel divided by the height of the pixel. 652 * Numerator and denominator must be relatively prime and smaller than 256 for some video standards. 653 * - encoding: Set by user. 654 * - decoding: Set by libavcodec. 655 */ 656 AVRational sample_aspect_ratio; 657 658 /** 659 * Pixel format, see AV_PIX_FMT_xxx. 660 * May be set by the demuxer if known from headers. 661 * May be overridden by the decoder if it knows better. 662 * 663 * @note This field may not match the value of the last 664 * AVFrame output by avcodec_receive_frame() due frame 665 * reordering. 666 * 667 * - encoding: Set by user. 668 * - decoding: Set by user if known, overridden by libavcodec while 669 * parsing the data. 670 */ 671 enum AVPixelFormat pix_fmt; 672 673 /** 674 * Nominal unaccelerated pixel format, see AV_PIX_FMT_xxx. 675 * - encoding: unused. 676 * - decoding: Set by libavcodec before calling get_format() 677 */ 678 enum AVPixelFormat sw_pix_fmt; 679 680 /** 681 * Chromaticity coordinates of the source primaries. 682 * - encoding: Set by user 683 * - decoding: Set by libavcodec 684 */ 685 enum AVColorPrimaries color_primaries; 686 687 /** 688 * Color Transfer Characteristic. 689 * - encoding: Set by user 690 * - decoding: Set by libavcodec 691 */ 692 enum AVColorTransferCharacteristic color_trc; 693 694 /** 695 * YUV colorspace type. 696 * - encoding: Set by user 697 * - decoding: Set by libavcodec 698 */ 699 enum AVColorSpace colorspace; 700 701 /** 702 * MPEG vs JPEG YUV range. 703 * - encoding: Set by user to override the default output color range value, 704 * If not specified, libavcodec sets the color range depending on the 705 * output format. 706 * - decoding: Set by libavcodec, can be set by the user to propagate the 707 * color range to components reading from the decoder context. 708 */ 709 enum AVColorRange color_range; 710 711 /** 712 * This defines the location of chroma samples. 713 * - encoding: Set by user 714 * - decoding: Set by libavcodec 715 */ 716 enum AVChromaLocation chroma_sample_location; 717 718 /** Field order 719 * - encoding: set by libavcodec 720 * - decoding: Set by user. 721 */ 722 enum AVFieldOrder field_order; 723 724 /** 725 * number of reference frames 726 * - encoding: Set by user. 727 * - decoding: Set by lavc. 728 */ 729 int refs; 730 731 /** 732 * Size of the frame reordering buffer in the decoder. 733 * For MPEG-2 it is 1 IPB or 0 low delay IP. 734 * - encoding: Set by libavcodec. 735 * - decoding: Set by libavcodec. 736 */ 737 int has_b_frames; 738 739 /** 740 * slice flags 741 * - encoding: unused 742 * - decoding: Set by user. 743 */ 744 int slice_flags; 745 #define SLICE_FLAG_CODED_ORDER 0x0001 ///< draw_horiz_band() is called in coded order instead of display 746 #define SLICE_FLAG_ALLOW_FIELD 0x0002 ///< allow draw_horiz_band() with field slices (MPEG-2 field pics) 747 #define SLICE_FLAG_ALLOW_PLANE 0x0004 ///< allow draw_horiz_band() with 1 component at a time (SVQ1) 748 749 /** 750 * If non NULL, 'draw_horiz_band' is called by the libavcodec 751 * decoder to draw a horizontal band. It improves cache usage. Not 752 * all codecs can do that. You must check the codec capabilities 753 * beforehand. 754 * When multithreading is used, it may be called from multiple threads 755 * at the same time; threads might draw different parts of the same AVFrame, 756 * or multiple AVFrames, and there is no guarantee that slices will be drawn 757 * in order. 758 * The function is also used by hardware acceleration APIs. 759 * It is called at least once during frame decoding to pass 760 * the data needed for hardware render. 761 * In that mode instead of pixel data, AVFrame points to 762 * a structure specific to the acceleration API. The application 763 * reads the structure and can change some fields to indicate progress 764 * or mark state. 765 * - encoding: unused 766 * - decoding: Set by user. 767 * @param height the height of the slice 768 * @param y the y position of the slice 769 * @param type 1->top field, 2->bottom field, 3->frame 770 * @param offset offset into the AVFrame.data from which the slice should be read 771 */ 772 void (*draw_horiz_band)(struct AVCodecContext *s, 773 const AVFrame *src, int offset[AV_NUM_DATA_POINTERS], 774 int y, int type, int height); 775 776 /** 777 * Callback to negotiate the pixel format. Decoding only, may be set by the 778 * caller before avcodec_open2(). 779 * 780 * Called by some decoders to select the pixel format that will be used for 781 * the output frames. This is mainly used to set up hardware acceleration, 782 * then the provided format list contains the corresponding hwaccel pixel 783 * formats alongside the "software" one. The software pixel format may also 784 * be retrieved from \ref sw_pix_fmt. 785 * 786 * This callback will be called when the coded frame properties (such as 787 * resolution, pixel format, etc.) change and more than one output format is 788 * supported for those new properties. If a hardware pixel format is chosen 789 * and initialization for it fails, the callback may be called again 790 * immediately. 791 * 792 * This callback may be called from different threads if the decoder is 793 * multi-threaded, but not from more than one thread simultaneously. 794 * 795 * @param fmt list of formats which may be used in the current 796 * configuration, terminated by AV_PIX_FMT_NONE. 797 * @warning Behavior is undefined if the callback returns a value other 798 * than one of the formats in fmt or AV_PIX_FMT_NONE. 799 * @return the chosen format or AV_PIX_FMT_NONE 800 */ 801 enum AVPixelFormat (*get_format)(struct AVCodecContext *s, const enum AVPixelFormat * fmt); 802 803 /** 804 * maximum number of B-frames between non-B-frames 805 * Note: The output will be delayed by max_b_frames+1 relative to the input. 806 * - encoding: Set by user. 807 * - decoding: unused 808 */ 809 int max_b_frames; 810 811 /** 812 * qscale factor between IP and B-frames 813 * If > 0 then the last P-frame quantizer will be used (q= lastp_q*factor+offset). 814 * If < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset). 815 * - encoding: Set by user. 816 * - decoding: unused 817 */ 818 float b_quant_factor; 819 820 /** 821 * qscale offset between IP and B-frames 822 * - encoding: Set by user. 823 * - decoding: unused 824 */ 825 float b_quant_offset; 826 827 /** 828 * qscale factor between P- and I-frames 829 * If > 0 then the last P-frame quantizer will be used (q = lastp_q * factor + offset). 830 * If < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset). 831 * - encoding: Set by user. 832 * - decoding: unused 833 */ 834 float i_quant_factor; 835 836 /** 837 * qscale offset between P and I-frames 838 * - encoding: Set by user. 839 * - decoding: unused 840 */ 841 float i_quant_offset; 842 843 /** 844 * luminance masking (0-> disabled) 845 * - encoding: Set by user. 846 * - decoding: unused 847 */ 848 float lumi_masking; 849 850 /** 851 * temporary complexity masking (0-> disabled) 852 * - encoding: Set by user. 853 * - decoding: unused 854 */ 855 float temporal_cplx_masking; 856 857 /** 858 * spatial complexity masking (0-> disabled) 859 * - encoding: Set by user. 860 * - decoding: unused 861 */ 862 float spatial_cplx_masking; 863 864 /** 865 * p block masking (0-> disabled) 866 * - encoding: Set by user. 867 * - decoding: unused 868 */ 869 float p_masking; 870 871 /** 872 * darkness masking (0-> disabled) 873 * - encoding: Set by user. 874 * - decoding: unused 875 */ 876 float dark_masking; 877 878 /** 879 * noise vs. sse weight for the nsse comparison function 880 * - encoding: Set by user. 881 * - decoding: unused 882 */ 883 int nsse_weight; 884 885 /** 886 * motion estimation comparison function 887 * - encoding: Set by user. 888 * - decoding: unused 889 */ 890 int me_cmp; 891 /** 892 * subpixel motion estimation comparison function 893 * - encoding: Set by user. 894 * - decoding: unused 895 */ 896 int me_sub_cmp; 897 /** 898 * macroblock comparison function (not supported yet) 899 * - encoding: Set by user. 900 * - decoding: unused 901 */ 902 int mb_cmp; 903 /** 904 * interlaced DCT comparison function 905 * - encoding: Set by user. 906 * - decoding: unused 907 */ 908 int ildct_cmp; 909 #define FF_CMP_SAD 0 910 #define FF_CMP_SSE 1 911 #define FF_CMP_SATD 2 912 #define FF_CMP_DCT 3 913 #define FF_CMP_PSNR 4 914 #define FF_CMP_BIT 5 915 #define FF_CMP_RD 6 916 #define FF_CMP_ZERO 7 917 #define FF_CMP_VSAD 8 918 #define FF_CMP_VSSE 9 919 #define FF_CMP_NSSE 10 920 #define FF_CMP_W53 11 921 #define FF_CMP_W97 12 922 #define FF_CMP_DCTMAX 13 923 #define FF_CMP_DCT264 14 924 #define FF_CMP_MEDIAN_SAD 15 925 #define FF_CMP_CHROMA 256 926 927 /** 928 * ME diamond size & shape 929 * - encoding: Set by user. 930 * - decoding: unused 931 */ 932 int dia_size; 933 934 /** 935 * amount of previous MV predictors (2a+1 x 2a+1 square) 936 * - encoding: Set by user. 937 * - decoding: unused 938 */ 939 int last_predictor_count; 940 941 /** 942 * motion estimation prepass comparison function 943 * - encoding: Set by user. 944 * - decoding: unused 945 */ 946 int me_pre_cmp; 947 948 /** 949 * ME prepass diamond size & shape 950 * - encoding: Set by user. 951 * - decoding: unused 952 */ 953 int pre_dia_size; 954 955 /** 956 * subpel ME quality 957 * - encoding: Set by user. 958 * - decoding: unused 959 */ 960 int me_subpel_quality; 961 962 /** 963 * maximum motion estimation search range in subpel units 964 * If 0 then no limit. 965 * 966 * - encoding: Set by user. 967 * - decoding: unused 968 */ 969 int me_range; 970 971 /** 972 * macroblock decision mode 973 * - encoding: Set by user. 974 * - decoding: unused 975 */ 976 int mb_decision; 977 #define FF_MB_DECISION_SIMPLE 0 ///< uses mb_cmp 978 #define FF_MB_DECISION_BITS 1 ///< chooses the one which needs the fewest bits 979 #define FF_MB_DECISION_RD 2 ///< rate distortion 980 981 /** 982 * custom intra quantization matrix 983 * Must be allocated with the av_malloc() family of functions, and will be freed in 984 * avcodec_free_context(). 985 * - encoding: Set/allocated by user, freed by libavcodec. Can be NULL. 986 * - decoding: Set/allocated/freed by libavcodec. 987 */ 988 uint16_t *intra_matrix; 989 990 /** 991 * custom inter quantization matrix 992 * Must be allocated with the av_malloc() family of functions, and will be freed in 993 * avcodec_free_context(). 994 * - encoding: Set/allocated by user, freed by libavcodec. Can be NULL. 995 * - decoding: Set/allocated/freed by libavcodec. 996 */ 997 uint16_t *inter_matrix; 998 999 /** 1000 * custom intra quantization matrix 1001 * - encoding: Set by user, can be NULL. 1002 * - decoding: unused. 1003 */ 1004 uint16_t *chroma_intra_matrix; 1005 1006 /** 1007 * precision of the intra DC coefficient - 8 1008 * - encoding: Set by user. 1009 * - decoding: Set by libavcodec 1010 */ 1011 int intra_dc_precision; 1012 1013 /** 1014 * minimum MB Lagrange multiplier 1015 * - encoding: Set by user. 1016 * - decoding: unused 1017 */ 1018 int mb_lmin; 1019 1020 /** 1021 * maximum MB Lagrange multiplier 1022 * - encoding: Set by user. 1023 * - decoding: unused 1024 */ 1025 int mb_lmax; 1026 1027 /** 1028 * - encoding: Set by user. 1029 * - decoding: unused 1030 */ 1031 int bidir_refine; 1032 1033 /** 1034 * minimum GOP size 1035 * - encoding: Set by user. 1036 * - decoding: unused 1037 */ 1038 int keyint_min; 1039 1040 /** 1041 * the number of pictures in a group of pictures, or 0 for intra_only 1042 * - encoding: Set by user. 1043 * - decoding: unused 1044 */ 1045 int gop_size; 1046 1047 /** 1048 * Note: Value depends upon the compare function used for fullpel ME. 1049 * - encoding: Set by user. 1050 * - decoding: unused 1051 */ 1052 int mv0_threshold; 1053 1054 /** 1055 * Number of slices. 1056 * Indicates number of picture subdivisions. Used for parallelized 1057 * decoding. 1058 * - encoding: Set by user 1059 * - decoding: unused 1060 */ 1061 int slices; 1062 1063 /* audio only */ 1064 int sample_rate; ///< samples per second 1065 1066 /** 1067 * audio sample format 1068 * - encoding: Set by user. 1069 * - decoding: Set by libavcodec. 1070 */ 1071 enum AVSampleFormat sample_fmt; ///< sample format 1072 1073 /** 1074 * Audio channel layout. 1075 * - encoding: must be set by the caller, to one of AVCodec.ch_layouts. 1076 * - decoding: may be set by the caller if known e.g. from the container. 1077 * The decoder can then override during decoding as needed. 1078 */ 1079 AVChannelLayout ch_layout; 1080 1081 /* The following data should not be initialized. */ 1082 /** 1083 * Number of samples per channel in an audio frame. 1084 * 1085 * - encoding: set by libavcodec in avcodec_open2(). Each submitted frame 1086 * except the last must contain exactly frame_size samples per channel. 1087 * May be 0 when the codec has AV_CODEC_CAP_VARIABLE_FRAME_SIZE set, then the 1088 * frame size is not restricted. 1089 * - decoding: may be set by some decoders to indicate constant frame size 1090 */ 1091 int frame_size; 1092 1093 /** 1094 * number of bytes per packet if constant and known or 0 1095 * Used by some WAV based audio codecs. 1096 */ 1097 int block_align; 1098 1099 /** 1100 * Audio cutoff bandwidth (0 means "automatic") 1101 * - encoding: Set by user. 1102 * - decoding: unused 1103 */ 1104 int cutoff; 1105 1106 /** 1107 * Type of service that the audio stream conveys. 1108 * - encoding: Set by user. 1109 * - decoding: Set by libavcodec. 1110 */ 1111 enum AVAudioServiceType audio_service_type; 1112 1113 /** 1114 * desired sample format 1115 * - encoding: Not used. 1116 * - decoding: Set by user. 1117 * Decoder will decode to this format if it can. 1118 */ 1119 enum AVSampleFormat request_sample_fmt; 1120 1121 /** 1122 * Audio only. The number of "priming" samples (padding) inserted by the 1123 * encoder at the beginning of the audio. I.e. this number of leading 1124 * decoded samples must be discarded by the caller to get the original audio 1125 * without leading padding. 1126 * 1127 * - decoding: unused 1128 * - encoding: Set by libavcodec. The timestamps on the output packets are 1129 * adjusted by the encoder so that they always refer to the 1130 * first sample of the data actually contained in the packet, 1131 * including any added padding. E.g. if the timebase is 1132 * 1/samplerate and the timestamp of the first input sample is 1133 * 0, the timestamp of the first output packet will be 1134 * -initial_padding. 1135 */ 1136 int initial_padding; 1137 1138 /** 1139 * Audio only. The amount of padding (in samples) appended by the encoder to 1140 * the end of the audio. I.e. this number of decoded samples must be 1141 * discarded by the caller from the end of the stream to get the original 1142 * audio without any trailing padding. 1143 * 1144 * - decoding: unused 1145 * - encoding: unused 1146 */ 1147 int trailing_padding; 1148 1149 /** 1150 * Number of samples to skip after a discontinuity 1151 * - decoding: unused 1152 * - encoding: set by libavcodec 1153 */ 1154 int seek_preroll; 1155 1156 /** 1157 * This callback is called at the beginning of each frame to get data 1158 * buffer(s) for it. There may be one contiguous buffer for all the data or 1159 * there may be a buffer per each data plane or anything in between. What 1160 * this means is, you may set however many entries in buf[] you feel necessary. 1161 * Each buffer must be reference-counted using the AVBuffer API (see description 1162 * of buf[] below). 1163 * 1164 * The following fields will be set in the frame before this callback is 1165 * called: 1166 * - format 1167 * - width, height (video only) 1168 * - sample_rate, channel_layout, nb_samples (audio only) 1169 * Their values may differ from the corresponding values in 1170 * AVCodecContext. This callback must use the frame values, not the codec 1171 * context values, to calculate the required buffer size. 1172 * 1173 * This callback must fill the following fields in the frame: 1174 * - data[] 1175 * - linesize[] 1176 * - extended_data: 1177 * * if the data is planar audio with more than 8 channels, then this 1178 * callback must allocate and fill extended_data to contain all pointers 1179 * to all data planes. data[] must hold as many pointers as it can. 1180 * extended_data must be allocated with av_malloc() and will be freed in 1181 * av_frame_unref(). 1182 * * otherwise extended_data must point to data 1183 * - buf[] must contain one or more pointers to AVBufferRef structures. Each of 1184 * the frame's data and extended_data pointers must be contained in these. That 1185 * is, one AVBufferRef for each allocated chunk of memory, not necessarily one 1186 * AVBufferRef per data[] entry. See: av_buffer_create(), av_buffer_alloc(), 1187 * and av_buffer_ref(). 1188 * - extended_buf and nb_extended_buf must be allocated with av_malloc() by 1189 * this callback and filled with the extra buffers if there are more 1190 * buffers than buf[] can hold. extended_buf will be freed in 1191 * av_frame_unref(). 1192 * Decoders will generally initialize the whole buffer before it is output 1193 * but it can in rare error conditions happen that uninitialized data is passed 1194 * through. \important The buffers returned by get_buffer* should thus not contain sensitive 1195 * data. 1196 * 1197 * If AV_CODEC_CAP_DR1 is not set then get_buffer2() must call 1198 * avcodec_default_get_buffer2() instead of providing buffers allocated by 1199 * some other means. 1200 * 1201 * Each data plane must be aligned to the maximum required by the target 1202 * CPU. 1203 * 1204 * @see avcodec_default_get_buffer2() 1205 * 1206 * Video: 1207 * 1208 * If AV_GET_BUFFER_FLAG_REF is set in flags then the frame may be reused 1209 * (read and/or written to if it is writable) later by libavcodec. 1210 * 1211 * avcodec_align_dimensions2() should be used to find the required width and 1212 * height, as they normally need to be rounded up to the next multiple of 16. 1213 * 1214 * Some decoders do not support linesizes changing between frames. 1215 * 1216 * If frame multithreading is used, this callback may be called from a 1217 * different thread, but not from more than one at once. Does not need to be 1218 * reentrant. 1219 * 1220 * @see avcodec_align_dimensions2() 1221 * 1222 * Audio: 1223 * 1224 * Decoders request a buffer of a particular size by setting 1225 * AVFrame.nb_samples prior to calling get_buffer2(). The decoder may, 1226 * however, utilize only part of the buffer by setting AVFrame.nb_samples 1227 * to a smaller value in the output frame. 1228 * 1229 * As a convenience, av_samples_get_buffer_size() and 1230 * av_samples_fill_arrays() in libavutil may be used by custom get_buffer2() 1231 * functions to find the required data size and to fill data pointers and 1232 * linesize. In AVFrame.linesize, only linesize[0] may be set for audio 1233 * since all planes must be the same size. 1234 * 1235 * @see av_samples_get_buffer_size(), av_samples_fill_arrays() 1236 * 1237 * - encoding: unused 1238 * - decoding: Set by libavcodec, user can override. 1239 */ 1240 int (*get_buffer2)(struct AVCodecContext *s, AVFrame *frame, int flags); 1241 1242 /* - encoding parameters */ 1243 /** 1244 * number of bits the bitstream is allowed to diverge from the reference. 1245 * the reference can be CBR (for CBR pass1) or VBR (for pass2) 1246 * - encoding: Set by user; unused for constant quantizer encoding. 1247 * - decoding: unused 1248 */ 1249 int bit_rate_tolerance; 1250 1251 /** 1252 * Global quality for codecs which cannot change it per frame. 1253 * This should be proportional to MPEG-1/2/4 qscale. 1254 * - encoding: Set by user. 1255 * - decoding: unused 1256 */ 1257 int global_quality; 1258 1259 /** 1260 * - encoding: Set by user. 1261 * - decoding: unused 1262 */ 1263 int compression_level; 1264 #define FF_COMPRESSION_DEFAULT -1 1265 1266 float qcompress; ///< amount of qscale change between easy & hard scenes (0.0-1.0) 1267 float qblur; ///< amount of qscale smoothing over time (0.0-1.0) 1268 1269 /** 1270 * minimum quantizer 1271 * - encoding: Set by user. 1272 * - decoding: unused 1273 */ 1274 int qmin; 1275 1276 /** 1277 * maximum quantizer 1278 * - encoding: Set by user. 1279 * - decoding: unused 1280 */ 1281 int qmax; 1282 1283 /** 1284 * maximum quantizer difference between frames 1285 * - encoding: Set by user. 1286 * - decoding: unused 1287 */ 1288 int max_qdiff; 1289 1290 /** 1291 * decoder bitstream buffer size 1292 * - encoding: Set by user. 1293 * - decoding: May be set by libavcodec. 1294 */ 1295 int rc_buffer_size; 1296 1297 /** 1298 * ratecontrol override, see RcOverride 1299 * - encoding: Allocated/set/freed by user. 1300 * - decoding: unused 1301 */ 1302 int rc_override_count; 1303 RcOverride *rc_override; 1304 1305 /** 1306 * maximum bitrate 1307 * - encoding: Set by user. 1308 * - decoding: Set by user, may be overwritten by libavcodec. 1309 */ 1310 int64_t rc_max_rate; 1311 1312 /** 1313 * minimum bitrate 1314 * - encoding: Set by user. 1315 * - decoding: unused 1316 */ 1317 int64_t rc_min_rate; 1318 1319 /** 1320 * Ratecontrol attempt to use, at maximum, <value> of what can be used without an underflow. 1321 * - encoding: Set by user. 1322 * - decoding: unused. 1323 */ 1324 float rc_max_available_vbv_use; 1325 1326 /** 1327 * Ratecontrol attempt to use, at least, <value> times the amount needed to prevent a vbv overflow. 1328 * - encoding: Set by user. 1329 * - decoding: unused. 1330 */ 1331 float rc_min_vbv_overflow_use; 1332 1333 /** 1334 * Number of bits which should be loaded into the rc buffer before decoding starts. 1335 * - encoding: Set by user. 1336 * - decoding: unused 1337 */ 1338 int rc_initial_buffer_occupancy; 1339 1340 /** 1341 * trellis RD quantization 1342 * - encoding: Set by user. 1343 * - decoding: unused 1344 */ 1345 int trellis; 1346 1347 /** 1348 * pass1 encoding statistics output buffer 1349 * - encoding: Set by libavcodec. 1350 * - decoding: unused 1351 */ 1352 char *stats_out; 1353 1354 /** 1355 * pass2 encoding statistics input buffer 1356 * Concatenated stuff from stats_out of pass1 should be placed here. 1357 * - encoding: Allocated/set/freed by user. 1358 * - decoding: unused 1359 */ 1360 char *stats_in; 1361 1362 /** 1363 * Work around bugs in encoders which sometimes cannot be detected automatically. 1364 * - encoding: Set by user 1365 * - decoding: Set by user 1366 */ 1367 int workaround_bugs; 1368 #define FF_BUG_AUTODETECT 1 ///< autodetection 1369 #define FF_BUG_XVID_ILACE 4 1370 #define FF_BUG_UMP4 8 1371 #define FF_BUG_NO_PADDING 16 1372 #define FF_BUG_AMV 32 1373 #define FF_BUG_QPEL_CHROMA 64 1374 #define FF_BUG_STD_QPEL 128 1375 #define FF_BUG_QPEL_CHROMA2 256 1376 #define FF_BUG_DIRECT_BLOCKSIZE 512 1377 #define FF_BUG_EDGE 1024 1378 #define FF_BUG_HPEL_CHROMA 2048 1379 #define FF_BUG_DC_CLIP 4096 1380 #define FF_BUG_MS 8192 ///< Work around various bugs in Microsoft's broken decoders. 1381 #define FF_BUG_TRUNCATED 16384 1382 #define FF_BUG_IEDGE 32768 1383 1384 /** 1385 * strictly follow the standard (MPEG-4, ...). 1386 * - encoding: Set by user. 1387 * - decoding: Set by user. 1388 * Setting this to STRICT or higher means the encoder and decoder will 1389 * generally do stupid things, whereas setting it to unofficial or lower 1390 * will mean the encoder might produce output that is not supported by all 1391 * spec-compliant decoders. Decoders don't differentiate between normal, 1392 * unofficial and experimental (that is, they always try to decode things 1393 * when they can) unless they are explicitly asked to behave stupidly 1394 * (=strictly conform to the specs) 1395 * This may only be set to one of the FF_COMPLIANCE_* values in defs.h. 1396 */ 1397 int strict_std_compliance; 1398 1399 /** 1400 * error concealment flags 1401 * - encoding: unused 1402 * - decoding: Set by user. 1403 */ 1404 int error_concealment; 1405 #define FF_EC_GUESS_MVS 1 1406 #define FF_EC_DEBLOCK 2 1407 #define FF_EC_FAVOR_INTER 256 1408 1409 /** 1410 * debug 1411 * - encoding: Set by user. 1412 * - decoding: Set by user. 1413 */ 1414 int debug; 1415 #define FF_DEBUG_PICT_INFO 1 1416 #define FF_DEBUG_RC 2 1417 #define FF_DEBUG_BITSTREAM 4 1418 #define FF_DEBUG_MB_TYPE 8 1419 #define FF_DEBUG_QP 16 1420 #define FF_DEBUG_DCT_COEFF 0x00000040 1421 #define FF_DEBUG_SKIP 0x00000080 1422 #define FF_DEBUG_STARTCODE 0x00000100 1423 #define FF_DEBUG_ER 0x00000400 1424 #define FF_DEBUG_MMCO 0x00000800 1425 #define FF_DEBUG_BUGS 0x00001000 1426 #define FF_DEBUG_BUFFERS 0x00008000 1427 #define FF_DEBUG_THREADS 0x00010000 1428 #define FF_DEBUG_GREEN_MD 0x00800000 1429 #define FF_DEBUG_NOMC 0x01000000 1430 1431 /** 1432 * Error recognition; may misdetect some more or less valid parts as errors. 1433 * This is a bitfield of the AV_EF_* values defined in defs.h. 1434 * 1435 * - encoding: Set by user. 1436 * - decoding: Set by user. 1437 */ 1438 int err_recognition; 1439 1440 /** 1441 * Hardware accelerator in use 1442 * - encoding: unused. 1443 * - decoding: Set by libavcodec 1444 */ 1445 const struct AVHWAccel *hwaccel; 1446 1447 /** 1448 * Legacy hardware accelerator context. 1449 * 1450 * For some hardware acceleration methods, the caller may use this field to 1451 * signal hwaccel-specific data to the codec. The struct pointed to by this 1452 * pointer is hwaccel-dependent and defined in the respective header. Please 1453 * refer to the FFmpeg HW accelerator documentation to know how to fill 1454 * this. 1455 * 1456 * In most cases this field is optional - the necessary information may also 1457 * be provided to libavcodec through @ref hw_frames_ctx or @ref 1458 * hw_device_ctx (see avcodec_get_hw_config()). However, in some cases it 1459 * may be the only method of signalling some (optional) information. 1460 * 1461 * The struct and its contents are owned by the caller. 1462 * 1463 * - encoding: May be set by the caller before avcodec_open2(). Must remain 1464 * valid until avcodec_free_context(). 1465 * - decoding: May be set by the caller in the get_format() callback. 1466 * Must remain valid until the next get_format() call, 1467 * or avcodec_free_context() (whichever comes first). 1468 */ 1469 void *hwaccel_context; 1470 1471 /** 1472 * A reference to the AVHWFramesContext describing the input (for encoding) 1473 * or output (decoding) frames. The reference is set by the caller and 1474 * afterwards owned (and freed) by libavcodec - it should never be read by 1475 * the caller after being set. 1476 * 1477 * - decoding: This field should be set by the caller from the get_format() 1478 * callback. The previous reference (if any) will always be 1479 * unreffed by libavcodec before the get_format() call. 1480 * 1481 * If the default get_buffer2() is used with a hwaccel pixel 1482 * format, then this AVHWFramesContext will be used for 1483 * allocating the frame buffers. 1484 * 1485 * - encoding: For hardware encoders configured to use a hwaccel pixel 1486 * format, this field should be set by the caller to a reference 1487 * to the AVHWFramesContext describing input frames. 1488 * AVHWFramesContext.format must be equal to 1489 * AVCodecContext.pix_fmt. 1490 * 1491 * This field should be set before avcodec_open2() is called. 1492 */ 1493 AVBufferRef *hw_frames_ctx; 1494 1495 /** 1496 * A reference to the AVHWDeviceContext describing the device which will 1497 * be used by a hardware encoder/decoder. The reference is set by the 1498 * caller and afterwards owned (and freed) by libavcodec. 1499 * 1500 * This should be used if either the codec device does not require 1501 * hardware frames or any that are used are to be allocated internally by 1502 * libavcodec. If the user wishes to supply any of the frames used as 1503 * encoder input or decoder output then hw_frames_ctx should be used 1504 * instead. When hw_frames_ctx is set in get_format() for a decoder, this 1505 * field will be ignored while decoding the associated stream segment, but 1506 * may again be used on a following one after another get_format() call. 1507 * 1508 * For both encoders and decoders this field should be set before 1509 * avcodec_open2() is called and must not be written to thereafter. 1510 * 1511 * Note that some decoders may require this field to be set initially in 1512 * order to support hw_frames_ctx at all - in that case, all frames 1513 * contexts used must be created on the same device. 1514 */ 1515 AVBufferRef *hw_device_ctx; 1516 1517 /** 1518 * Bit set of AV_HWACCEL_FLAG_* flags, which affect hardware accelerated 1519 * decoding (if active). 1520 * - encoding: unused 1521 * - decoding: Set by user (either before avcodec_open2(), or in the 1522 * AVCodecContext.get_format callback) 1523 */ 1524 int hwaccel_flags; 1525 1526 /** 1527 * Video decoding only. Sets the number of extra hardware frames which 1528 * the decoder will allocate for use by the caller. This must be set 1529 * before avcodec_open2() is called. 1530 * 1531 * Some hardware decoders require all frames that they will use for 1532 * output to be defined in advance before decoding starts. For such 1533 * decoders, the hardware frame pool must therefore be of a fixed size. 1534 * The extra frames set here are on top of any number that the decoder 1535 * needs internally in order to operate normally (for example, frames 1536 * used as reference pictures). 1537 */ 1538 int extra_hw_frames; 1539 1540 /** 1541 * error 1542 * - encoding: Set by libavcodec if flags & AV_CODEC_FLAG_PSNR. 1543 * - decoding: unused 1544 */ 1545 uint64_t error[AV_NUM_DATA_POINTERS]; 1546 1547 /** 1548 * DCT algorithm, see FF_DCT_* below 1549 * - encoding: Set by user. 1550 * - decoding: unused 1551 */ 1552 int dct_algo; 1553 #define FF_DCT_AUTO 0 1554 #define FF_DCT_FASTINT 1 1555 #define FF_DCT_INT 2 1556 #define FF_DCT_MMX 3 1557 #define FF_DCT_ALTIVEC 5 1558 #define FF_DCT_FAAN 6 1559 #define FF_DCT_NEON 7 1560 1561 /** 1562 * IDCT algorithm, see FF_IDCT_* below. 1563 * - encoding: Set by user. 1564 * - decoding: Set by user. 1565 */ 1566 int idct_algo; 1567 #define FF_IDCT_AUTO 0 1568 #define FF_IDCT_INT 1 1569 #define FF_IDCT_SIMPLE 2 1570 #define FF_IDCT_SIMPLEMMX 3 1571 #define FF_IDCT_ARM 7 1572 #define FF_IDCT_ALTIVEC 8 1573 #define FF_IDCT_SIMPLEARM 10 1574 #define FF_IDCT_XVID 14 1575 #define FF_IDCT_SIMPLEARMV5TE 16 1576 #define FF_IDCT_SIMPLEARMV6 17 1577 #define FF_IDCT_FAAN 20 1578 #define FF_IDCT_SIMPLENEON 22 1579 #define FF_IDCT_SIMPLEAUTO 128 1580 1581 /** 1582 * bits per sample/pixel from the demuxer (needed for huffyuv). 1583 * - encoding: Set by libavcodec. 1584 * - decoding: Set by user. 1585 */ 1586 int bits_per_coded_sample; 1587 1588 /** 1589 * Bits per sample/pixel of internal libavcodec pixel/sample format. 1590 * - encoding: set by user. 1591 * - decoding: set by libavcodec. 1592 */ 1593 int bits_per_raw_sample; 1594 1595 /** 1596 * thread count 1597 * is used to decide how many independent tasks should be passed to execute() 1598 * - encoding: Set by user. 1599 * - decoding: Set by user. 1600 */ 1601 int thread_count; 1602 1603 /** 1604 * Which multithreading methods to use. 1605 * Use of FF_THREAD_FRAME will increase decoding delay by one frame per thread, 1606 * so clients which cannot provide future frames should not use it. 1607 * 1608 * - encoding: Set by user, otherwise the default is used. 1609 * - decoding: Set by user, otherwise the default is used. 1610 */ 1611 int thread_type; 1612 #define FF_THREAD_FRAME 1 ///< Decode more than one frame at once 1613 #define FF_THREAD_SLICE 2 ///< Decode more than one part of a single frame at once 1614 1615 /** 1616 * Which multithreading methods are in use by the codec. 1617 * - encoding: Set by libavcodec. 1618 * - decoding: Set by libavcodec. 1619 */ 1620 int active_thread_type; 1621 1622 /** 1623 * The codec may call this to execute several independent things. 1624 * It will return only after finishing all tasks. 1625 * The user may replace this with some multithreaded implementation, 1626 * the default implementation will execute the parts serially. 1627 * @param count the number of things to execute 1628 * - encoding: Set by libavcodec, user can override. 1629 * - decoding: Set by libavcodec, user can override. 1630 */ 1631 int (*execute)(struct AVCodecContext *c, int (*func)(struct AVCodecContext *c2, void *arg), void *arg2, int *ret, int count, int size); 1632 1633 /** 1634 * The codec may call this to execute several independent things. 1635 * It will return only after finishing all tasks. 1636 * The user may replace this with some multithreaded implementation, 1637 * the default implementation will execute the parts serially. 1638 * @param c context passed also to func 1639 * @param count the number of things to execute 1640 * @param arg2 argument passed unchanged to func 1641 * @param ret return values of executed functions, must have space for "count" values. May be NULL. 1642 * @param func function that will be called count times, with jobnr from 0 to count-1. 1643 * threadnr will be in the range 0 to c->thread_count-1 < MAX_THREADS and so that no 1644 * two instances of func executing at the same time will have the same threadnr. 1645 * @return always 0 currently, but code should handle a future improvement where when any call to func 1646 * returns < 0 no further calls to func may be done and < 0 is returned. 1647 * - encoding: Set by libavcodec, user can override. 1648 * - decoding: Set by libavcodec, user can override. 1649 */ 1650 int (*execute2)(struct AVCodecContext *c, int (*func)(struct AVCodecContext *c2, void *arg, int jobnr, int threadnr), void *arg2, int *ret, int count); 1651 1652 /** 1653 * profile 1654 * - encoding: Set by user. 1655 * - decoding: Set by libavcodec. 1656 * See the AV_PROFILE_* defines in defs.h. 1657 */ 1658 int profile; 1659 #if FF_API_FF_PROFILE_LEVEL 1660 /** @deprecated The following defines are deprecated; use AV_PROFILE_* 1661 * in defs.h instead. */ 1662 #define FF_PROFILE_UNKNOWN -99 1663 #define FF_PROFILE_RESERVED -100 1664 1665 #define FF_PROFILE_AAC_MAIN 0 1666 #define FF_PROFILE_AAC_LOW 1 1667 #define FF_PROFILE_AAC_SSR 2 1668 #define FF_PROFILE_AAC_LTP 3 1669 #define FF_PROFILE_AAC_HE 4 1670 #define FF_PROFILE_AAC_HE_V2 28 1671 #define FF_PROFILE_AAC_LD 22 1672 #define FF_PROFILE_AAC_ELD 38 1673 #define FF_PROFILE_MPEG2_AAC_LOW 128 1674 #define FF_PROFILE_MPEG2_AAC_HE 131 1675 1676 #define FF_PROFILE_DNXHD 0 1677 #define FF_PROFILE_DNXHR_LB 1 1678 #define FF_PROFILE_DNXHR_SQ 2 1679 #define FF_PROFILE_DNXHR_HQ 3 1680 #define FF_PROFILE_DNXHR_HQX 4 1681 #define FF_PROFILE_DNXHR_444 5 1682 1683 #define FF_PROFILE_DTS 20 1684 #define FF_PROFILE_DTS_ES 30 1685 #define FF_PROFILE_DTS_96_24 40 1686 #define FF_PROFILE_DTS_HD_HRA 50 1687 #define FF_PROFILE_DTS_HD_MA 60 1688 #define FF_PROFILE_DTS_EXPRESS 70 1689 #define FF_PROFILE_DTS_HD_MA_X 61 1690 #define FF_PROFILE_DTS_HD_MA_X_IMAX 62 1691 1692 1693 #define FF_PROFILE_EAC3_DDP_ATMOS 30 1694 1695 #define FF_PROFILE_TRUEHD_ATMOS 30 1696 1697 #define FF_PROFILE_MPEG2_422 0 1698 #define FF_PROFILE_MPEG2_HIGH 1 1699 #define FF_PROFILE_MPEG2_SS 2 1700 #define FF_PROFILE_MPEG2_SNR_SCALABLE 3 1701 #define FF_PROFILE_MPEG2_MAIN 4 1702 #define FF_PROFILE_MPEG2_SIMPLE 5 1703 1704 #define FF_PROFILE_H264_CONSTRAINED (1<<9) // 8+1; constraint_set1_flag 1705 #define FF_PROFILE_H264_INTRA (1<<11) // 8+3; constraint_set3_flag 1706 1707 #define FF_PROFILE_H264_BASELINE 66 1708 #define FF_PROFILE_H264_CONSTRAINED_BASELINE (66|FF_PROFILE_H264_CONSTRAINED) 1709 #define FF_PROFILE_H264_MAIN 77 1710 #define FF_PROFILE_H264_EXTENDED 88 1711 #define FF_PROFILE_H264_HIGH 100 1712 #define FF_PROFILE_H264_HIGH_10 110 1713 #define FF_PROFILE_H264_HIGH_10_INTRA (110|FF_PROFILE_H264_INTRA) 1714 #define FF_PROFILE_H264_MULTIVIEW_HIGH 118 1715 #define FF_PROFILE_H264_HIGH_422 122 1716 #define FF_PROFILE_H264_HIGH_422_INTRA (122|FF_PROFILE_H264_INTRA) 1717 #define FF_PROFILE_H264_STEREO_HIGH 128 1718 #define FF_PROFILE_H264_HIGH_444 144 1719 #define FF_PROFILE_H264_HIGH_444_PREDICTIVE 244 1720 #define FF_PROFILE_H264_HIGH_444_INTRA (244|FF_PROFILE_H264_INTRA) 1721 #define FF_PROFILE_H264_CAVLC_444 44 1722 1723 #define FF_PROFILE_VC1_SIMPLE 0 1724 #define FF_PROFILE_VC1_MAIN 1 1725 #define FF_PROFILE_VC1_COMPLEX 2 1726 #define FF_PROFILE_VC1_ADVANCED 3 1727 1728 #define FF_PROFILE_MPEG4_SIMPLE 0 1729 #define FF_PROFILE_MPEG4_SIMPLE_SCALABLE 1 1730 #define FF_PROFILE_MPEG4_CORE 2 1731 #define FF_PROFILE_MPEG4_MAIN 3 1732 #define FF_PROFILE_MPEG4_N_BIT 4 1733 #define FF_PROFILE_MPEG4_SCALABLE_TEXTURE 5 1734 #define FF_PROFILE_MPEG4_SIMPLE_FACE_ANIMATION 6 1735 #define FF_PROFILE_MPEG4_BASIC_ANIMATED_TEXTURE 7 1736 #define FF_PROFILE_MPEG4_HYBRID 8 1737 #define FF_PROFILE_MPEG4_ADVANCED_REAL_TIME 9 1738 #define FF_PROFILE_MPEG4_CORE_SCALABLE 10 1739 #define FF_PROFILE_MPEG4_ADVANCED_CODING 11 1740 #define FF_PROFILE_MPEG4_ADVANCED_CORE 12 1741 #define FF_PROFILE_MPEG4_ADVANCED_SCALABLE_TEXTURE 13 1742 #define FF_PROFILE_MPEG4_SIMPLE_STUDIO 14 1743 #define FF_PROFILE_MPEG4_ADVANCED_SIMPLE 15 1744 1745 #define FF_PROFILE_JPEG2000_CSTREAM_RESTRICTION_0 1 1746 #define FF_PROFILE_JPEG2000_CSTREAM_RESTRICTION_1 2 1747 #define FF_PROFILE_JPEG2000_CSTREAM_NO_RESTRICTION 32768 1748 #define FF_PROFILE_JPEG2000_DCINEMA_2K 3 1749 #define FF_PROFILE_JPEG2000_DCINEMA_4K 4 1750 1751 #define FF_PROFILE_VP9_0 0 1752 #define FF_PROFILE_VP9_1 1 1753 #define FF_PROFILE_VP9_2 2 1754 #define FF_PROFILE_VP9_3 3 1755 1756 #define FF_PROFILE_HEVC_MAIN 1 1757 #define FF_PROFILE_HEVC_MAIN_10 2 1758 #define FF_PROFILE_HEVC_MAIN_STILL_PICTURE 3 1759 #define FF_PROFILE_HEVC_REXT 4 1760 #define FF_PROFILE_HEVC_SCC 9 1761 1762 #define FF_PROFILE_VVC_MAIN_10 1 1763 #define FF_PROFILE_VVC_MAIN_10_444 33 1764 1765 #define FF_PROFILE_AV1_MAIN 0 1766 #define FF_PROFILE_AV1_HIGH 1 1767 #define FF_PROFILE_AV1_PROFESSIONAL 2 1768 1769 #define FF_PROFILE_MJPEG_HUFFMAN_BASELINE_DCT 0xc0 1770 #define FF_PROFILE_MJPEG_HUFFMAN_EXTENDED_SEQUENTIAL_DCT 0xc1 1771 #define FF_PROFILE_MJPEG_HUFFMAN_PROGRESSIVE_DCT 0xc2 1772 #define FF_PROFILE_MJPEG_HUFFMAN_LOSSLESS 0xc3 1773 #define FF_PROFILE_MJPEG_JPEG_LS 0xf7 1774 1775 #define FF_PROFILE_SBC_MSBC 1 1776 1777 #define FF_PROFILE_PRORES_PROXY 0 1778 #define FF_PROFILE_PRORES_LT 1 1779 #define FF_PROFILE_PRORES_STANDARD 2 1780 #define FF_PROFILE_PRORES_HQ 3 1781 #define FF_PROFILE_PRORES_4444 4 1782 #define FF_PROFILE_PRORES_XQ 5 1783 1784 #define FF_PROFILE_ARIB_PROFILE_A 0 1785 #define FF_PROFILE_ARIB_PROFILE_C 1 1786 1787 #define FF_PROFILE_KLVA_SYNC 0 1788 #define FF_PROFILE_KLVA_ASYNC 1 1789 1790 #define FF_PROFILE_EVC_BASELINE 0 1791 #define FF_PROFILE_EVC_MAIN 1 1792 #endif 1793 1794 /** 1795 * Encoding level descriptor. 1796 * - encoding: Set by user, corresponds to a specific level defined by the 1797 * codec, usually corresponding to the profile level, if not specified it 1798 * is set to FF_LEVEL_UNKNOWN. 1799 * - decoding: Set by libavcodec. 1800 * See AV_LEVEL_* in defs.h. 1801 */ 1802 int level; 1803 #if FF_API_FF_PROFILE_LEVEL 1804 /** @deprecated The following define is deprecated; use AV_LEVEL_UNKOWN 1805 * in defs.h instead. */ 1806 #define FF_LEVEL_UNKNOWN -99 1807 #endif 1808 1809 #if FF_API_CODEC_PROPS 1810 /** 1811 * Properties of the stream that gets decoded 1812 * - encoding: unused 1813 * - decoding: set by libavcodec 1814 */ 1815 attribute_deprecated 1816 unsigned properties; 1817 #define FF_CODEC_PROPERTY_LOSSLESS 0x00000001 1818 #define FF_CODEC_PROPERTY_CLOSED_CAPTIONS 0x00000002 1819 #define FF_CODEC_PROPERTY_FILM_GRAIN 0x00000004 1820 #endif 1821 1822 /** 1823 * Skip loop filtering for selected frames. 1824 * - encoding: unused 1825 * - decoding: Set by user. 1826 */ 1827 enum AVDiscard skip_loop_filter; 1828 1829 /** 1830 * Skip IDCT/dequantization for selected frames. 1831 * - encoding: unused 1832 * - decoding: Set by user. 1833 */ 1834 enum AVDiscard skip_idct; 1835 1836 /** 1837 * Skip decoding for selected frames. 1838 * - encoding: unused 1839 * - decoding: Set by user. 1840 */ 1841 enum AVDiscard skip_frame; 1842 1843 /** 1844 * Skip processing alpha if supported by codec. 1845 * Note that if the format uses pre-multiplied alpha (common with VP6, 1846 * and recommended due to better video quality/compression) 1847 * the image will look as if alpha-blended onto a black background. 1848 * However for formats that do not use pre-multiplied alpha 1849 * there might be serious artefacts (though e.g. libswscale currently 1850 * assumes pre-multiplied alpha anyway). 1851 * 1852 * - decoding: set by user 1853 * - encoding: unused 1854 */ 1855 int skip_alpha; 1856 1857 /** 1858 * Number of macroblock rows at the top which are skipped. 1859 * - encoding: unused 1860 * - decoding: Set by user. 1861 */ 1862 int skip_top; 1863 1864 /** 1865 * Number of macroblock rows at the bottom which are skipped. 1866 * - encoding: unused 1867 * - decoding: Set by user. 1868 */ 1869 int skip_bottom; 1870 1871 /** 1872 * low resolution decoding, 1-> 1/2 size, 2->1/4 size 1873 * - encoding: unused 1874 * - decoding: Set by user. 1875 */ 1876 int lowres; 1877 1878 /** 1879 * AVCodecDescriptor 1880 * - encoding: unused. 1881 * - decoding: set by libavcodec. 1882 */ 1883 const struct AVCodecDescriptor *codec_descriptor; 1884 1885 /** 1886 * Character encoding of the input subtitles file. 1887 * - decoding: set by user 1888 * - encoding: unused 1889 */ 1890 char *sub_charenc; 1891 1892 /** 1893 * Subtitles character encoding mode. Formats or codecs might be adjusting 1894 * this setting (if they are doing the conversion themselves for instance). 1895 * - decoding: set by libavcodec 1896 * - encoding: unused 1897 */ 1898 int sub_charenc_mode; 1899 #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) 1900 #define FF_SUB_CHARENC_MODE_AUTOMATIC 0 ///< libavcodec will select the mode itself 1901 #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 1902 #define FF_SUB_CHARENC_MODE_IGNORE 2 ///< neither convert the subtitles, nor check them for valid UTF-8 1903 1904 /** 1905 * Header containing style information for text subtitles. 1906 * For SUBTITLE_ASS subtitle type, it should contain the whole ASS 1907 * [Script Info] and [V4+ Styles] section, plus the [Events] line and 1908 * the Format line following. It shouldn't include any Dialogue line. 1909 * 1910 * - encoding: May be set by the caller before avcodec_open2() to an array 1911 * allocated with the av_malloc() family of functions. 1912 * - decoding: May be set by libavcodec in avcodec_open2(). 1913 * 1914 * After being set, the array is owned by the codec and freed in 1915 * avcodec_free_context(). 1916 * 1917 * @warning the deprecated avcodec_close() function DOES NOT free this array 1918 * for encoding, it must be freed manually by the caller. 1919 */ 1920 int subtitle_header_size; 1921 uint8_t *subtitle_header; 1922 1923 /** 1924 * dump format separator. 1925 * can be ", " or "\n " or anything else 1926 * - encoding: Set by user. 1927 * - decoding: Set by user. 1928 */ 1929 uint8_t *dump_separator; 1930 1931 /** 1932 * ',' separated list of allowed decoders. 1933 * If NULL then all are allowed 1934 * - encoding: unused 1935 * - decoding: set by user 1936 */ 1937 char *codec_whitelist; 1938 1939 /** 1940 * Additional data associated with the entire coded stream. 1941 * 1942 * - decoding: may be set by user before calling avcodec_open2(). 1943 * - encoding: may be set by libavcodec after avcodec_open2(). 1944 */ 1945 AVPacketSideData *coded_side_data; 1946 int nb_coded_side_data; 1947 1948 /** 1949 * Bit set of AV_CODEC_EXPORT_DATA_* flags, which affects the kind of 1950 * metadata exported in frame, packet, or coded stream side data by 1951 * decoders and encoders. 1952 * 1953 * - decoding: set by user 1954 * - encoding: set by user 1955 */ 1956 int export_side_data; 1957 1958 /** 1959 * The number of pixels per image to maximally accept. 1960 * 1961 * - decoding: set by user 1962 * - encoding: set by user 1963 */ 1964 int64_t max_pixels; 1965 1966 /** 1967 * Video decoding only. Certain video codecs support cropping, meaning that 1968 * only a sub-rectangle of the decoded frame is intended for display. This 1969 * option controls how cropping is handled by libavcodec. 1970 * 1971 * When set to 1 (the default), libavcodec will apply cropping internally. 1972 * I.e. it will modify the output frame width/height fields and offset the 1973 * data pointers (only by as much as possible while preserving alignment, or 1974 * by the full amount if the AV_CODEC_FLAG_UNALIGNED flag is set) so that 1975 * the frames output by the decoder refer only to the cropped area. The 1976 * crop_* fields of the output frames will be zero. 1977 * 1978 * When set to 0, the width/height fields of the output frames will be set 1979 * to the coded dimensions and the crop_* fields will describe the cropping 1980 * rectangle. Applying the cropping is left to the caller. 1981 * 1982 * @warning When hardware acceleration with opaque output frames is used, 1983 * libavcodec is unable to apply cropping from the top/left border. 1984 * 1985 * @note when this option is set to zero, the width/height fields of the 1986 * AVCodecContext and output AVFrames have different meanings. The codec 1987 * context fields store display dimensions (with the coded dimensions in 1988 * coded_width/height), while the frame fields store the coded dimensions 1989 * (with the display dimensions being determined by the crop_* fields). 1990 */ 1991 int apply_cropping; 1992 1993 /** 1994 * The percentage of damaged samples to discard a frame. 1995 * 1996 * - decoding: set by user 1997 * - encoding: unused 1998 */ 1999 int discard_damaged_percentage; 2000 2001 /** 2002 * The number of samples per frame to maximally accept. 2003 * 2004 * - decoding: set by user 2005 * - encoding: set by user 2006 */ 2007 int64_t max_samples; 2008 2009 /** 2010 * This callback is called at the beginning of each packet to get a data 2011 * buffer for it. 2012 * 2013 * The following field will be set in the packet before this callback is 2014 * called: 2015 * - size 2016 * This callback must use the above value to calculate the required buffer size, 2017 * which must padded by at least AV_INPUT_BUFFER_PADDING_SIZE bytes. 2018 * 2019 * In some specific cases, the encoder may not use the entire buffer allocated by this 2020 * callback. This will be reflected in the size value in the packet once returned by 2021 * avcodec_receive_packet(). 2022 * 2023 * This callback must fill the following fields in the packet: 2024 * - data: alignment requirements for AVPacket apply, if any. Some architectures and 2025 * encoders may benefit from having aligned data. 2026 * - buf: must contain a pointer to an AVBufferRef structure. The packet's 2027 * data pointer must be contained in it. See: av_buffer_create(), av_buffer_alloc(), 2028 * and av_buffer_ref(). 2029 * 2030 * If AV_CODEC_CAP_DR1 is not set then get_encode_buffer() must call 2031 * avcodec_default_get_encode_buffer() instead of providing a buffer allocated by 2032 * some other means. 2033 * 2034 * The flags field may contain a combination of AV_GET_ENCODE_BUFFER_FLAG_ flags. 2035 * They may be used for example to hint what use the buffer may get after being 2036 * created. 2037 * Implementations of this callback may ignore flags they don't understand. 2038 * If AV_GET_ENCODE_BUFFER_FLAG_REF is set in flags then the packet may be reused 2039 * (read and/or written to if it is writable) later by libavcodec. 2040 * 2041 * This callback must be thread-safe, as when frame threading is used, it may 2042 * be called from multiple threads simultaneously. 2043 * 2044 * @see avcodec_default_get_encode_buffer() 2045 * 2046 * - encoding: Set by libavcodec, user can override. 2047 * - decoding: unused 2048 */ 2049 int (*get_encode_buffer)(struct AVCodecContext *s, AVPacket *pkt, int flags); 2050 2051 /** 2052 * Frame counter, set by libavcodec. 2053 * 2054 * - decoding: total number of frames returned from the decoder so far. 2055 * - encoding: total number of frames passed to the encoder so far. 2056 * 2057 * @note the counter is not incremented if encoding/decoding resulted in 2058 * an error. 2059 */ 2060 int64_t frame_num; 2061 2062 /** 2063 * Decoding only. May be set by the caller before avcodec_open2() to an 2064 * av_malloc()'ed array (or via AVOptions). Owned and freed by the decoder 2065 * afterwards. 2066 * 2067 * Side data attached to decoded frames may come from several sources: 2068 * 1. coded_side_data, which the decoder will for certain types translate 2069 * from packet-type to frame-type and attach to frames; 2070 * 2. side data attached to an AVPacket sent for decoding (same 2071 * considerations as above); 2072 * 3. extracted from the coded bytestream. 2073 * The first two cases are supplied by the caller and typically come from a 2074 * container. 2075 * 2076 * This array configures decoder behaviour in cases when side data of the 2077 * same type is present both in the coded bytestream and in the 2078 * user-supplied side data (items 1. and 2. above). In all cases, at most 2079 * one instance of each side data type will be attached to output frames. By 2080 * default it will be the bytestream side data. Adding an 2081 * AVPacketSideDataType value to this array will flip the preference for 2082 * this type, thus making the decoder prefer user-supplied side data over 2083 * bytestream. In case side data of the same type is present both in 2084 * coded_data and attacked to a packet, the packet instance always has 2085 * priority. 2086 * 2087 * The array may also contain a single -1, in which case the preference is 2088 * switched for all side data types. 2089 */ 2090 int *side_data_prefer_packet; 2091 /** 2092 * Number of entries in side_data_prefer_packet. 2093 */ 2094 unsigned nb_side_data_prefer_packet; 2095 2096 /** 2097 * Array containing static side data, such as HDR10 CLL / MDCV structures. 2098 * Side data entries should be allocated by usage of helpers defined in 2099 * libavutil/frame.h. 2100 * 2101 * - encoding: may be set by user before calling avcodec_open2() for 2102 * encoder configuration. Afterwards owned and freed by the 2103 * encoder. 2104 * - decoding: may be set by libavcodec in avcodec_open2(). 2105 */ 2106 AVFrameSideData **decoded_side_data; 2107 int nb_decoded_side_data; 2108 2109 void* moz_ndk_crypto; 2110 } AVCodecContext; 2111 2112 /** 2113 * @defgroup lavc_hwaccel AVHWAccel 2114 * 2115 * @note Nothing in this structure should be accessed by the user. At some 2116 * point in future it will not be externally visible at all. 2117 * 2118 * @{ 2119 */ 2120 typedef struct AVHWAccel { 2121 /** 2122 * Name of the hardware accelerated codec. 2123 * The name is globally unique among encoders and among decoders (but an 2124 * encoder and a decoder can share the same name). 2125 */ 2126 const char *name; 2127 2128 /** 2129 * Type of codec implemented by the hardware accelerator. 2130 * 2131 * See AVMEDIA_TYPE_xxx 2132 */ 2133 enum AVMediaType type; 2134 2135 /** 2136 * Codec implemented by the hardware accelerator. 2137 * 2138 * See AV_CODEC_ID_xxx 2139 */ 2140 enum AVCodecID id; 2141 2142 /** 2143 * Supported pixel format. 2144 * 2145 * Only hardware accelerated formats are supported here. 2146 */ 2147 enum AVPixelFormat pix_fmt; 2148 2149 /** 2150 * Hardware accelerated codec capabilities. 2151 * see AV_HWACCEL_CODEC_CAP_* 2152 */ 2153 int capabilities; 2154 } AVHWAccel; 2155 2156 /** 2157 * HWAccel is experimental and is thus avoided in favor of non experimental 2158 * codecs 2159 */ 2160 #define AV_HWACCEL_CODEC_CAP_EXPERIMENTAL 0x0200 2161 2162 /** 2163 * Hardware acceleration should be used for decoding even if the codec level 2164 * used is unknown or higher than the maximum supported level reported by the 2165 * hardware driver. 2166 * 2167 * It's generally a good idea to pass this flag unless you have a specific 2168 * reason not to, as hardware tends to under-report supported levels. 2169 */ 2170 #define AV_HWACCEL_FLAG_IGNORE_LEVEL (1 << 0) 2171 2172 /** 2173 * Hardware acceleration can output YUV pixel formats with a different chroma 2174 * sampling than 4:2:0 and/or other than 8 bits per component. 2175 */ 2176 #define AV_HWACCEL_FLAG_ALLOW_HIGH_DEPTH (1 << 1) 2177 2178 /** 2179 * Hardware acceleration should still be attempted for decoding when the 2180 * codec profile does not match the reported capabilities of the hardware. 2181 * 2182 * For example, this can be used to try to decode baseline profile H.264 2183 * streams in hardware - it will often succeed, because many streams marked 2184 * as baseline profile actually conform to constrained baseline profile. 2185 * 2186 * @warning If the stream is actually not supported then the behaviour is 2187 * undefined, and may include returning entirely incorrect output 2188 * while indicating success. 2189 */ 2190 #define AV_HWACCEL_FLAG_ALLOW_PROFILE_MISMATCH (1 << 2) 2191 2192 /** 2193 * Some hardware decoders (namely nvdec) can either output direct decoder 2194 * surfaces, or make an on-device copy and return said copy. 2195 * There is a hard limit on how many decoder surfaces there can be, and it 2196 * cannot be accurately guessed ahead of time. 2197 * For some processing chains, this can be okay, but others will run into the 2198 * limit and in turn produce very confusing errors that require fine tuning of 2199 * more or less obscure options by the user, or in extreme cases cannot be 2200 * resolved at all without inserting an avfilter that forces a copy. 2201 * 2202 * Thus, the hwaccel will by default make a copy for safety and resilience. 2203 * If a users really wants to minimize the amount of copies, they can set this 2204 * flag and ensure their processing chain does not exhaust the surface pool. 2205 */ 2206 #define AV_HWACCEL_FLAG_UNSAFE_OUTPUT (1 << 3) 2207 2208 /** 2209 * @} 2210 */ 2211 2212 enum AVSubtitleType { 2213 SUBTITLE_NONE, 2214 2215 SUBTITLE_BITMAP, ///< A bitmap, pict will be set 2216 2217 /** 2218 * Plain text, the text field must be set by the decoder and is 2219 * authoritative. ass and pict fields may contain approximations. 2220 */ 2221 SUBTITLE_TEXT, 2222 2223 /** 2224 * Formatted text, the ass field must be set by the decoder and is 2225 * authoritative. pict and text fields may contain approximations. 2226 */ 2227 SUBTITLE_ASS, 2228 }; 2229 2230 #define AV_SUBTITLE_FLAG_FORCED 0x00000001 2231 2232 typedef struct AVSubtitleRect { 2233 int x; ///< top left corner of pict, undefined when pict is not set 2234 int y; ///< top left corner of pict, undefined when pict is not set 2235 int w; ///< width of pict, undefined when pict is not set 2236 int h; ///< height of pict, undefined when pict is not set 2237 int nb_colors; ///< number of colors in pict, undefined when pict is not set 2238 2239 /** 2240 * data+linesize for the bitmap of this subtitle. 2241 * Can be set for text/ass as well once they are rendered. 2242 */ 2243 uint8_t *data[4]; 2244 int linesize[4]; 2245 2246 int flags; 2247 enum AVSubtitleType type; 2248 2249 char *text; ///< 0 terminated plain UTF-8 text 2250 2251 /** 2252 * 0 terminated ASS/SSA compatible event line. 2253 * The presentation of this is unaffected by the other values in this 2254 * struct. 2255 */ 2256 char *ass; 2257 } AVSubtitleRect; 2258 2259 typedef struct AVSubtitle { 2260 uint16_t format; /* 0 = graphics */ 2261 uint32_t start_display_time; /* relative to packet pts, in ms */ 2262 uint32_t end_display_time; /* relative to packet pts, in ms */ 2263 unsigned num_rects; 2264 AVSubtitleRect **rects; 2265 int64_t pts; ///< Same as packet pts, in AV_TIME_BASE 2266 } AVSubtitle; 2267 2268 /** 2269 * Return the LIBAVCODEC_VERSION_INT constant. 2270 */ 2271 unsigned avcodec_version(void); 2272 2273 /** 2274 * Return the libavcodec build-time configuration. 2275 */ 2276 const char *avcodec_configuration(void); 2277 2278 /** 2279 * Return the libavcodec license. 2280 */ 2281 const char *avcodec_license(void); 2282 2283 /** 2284 * Allocate an AVCodecContext and set its fields to default values. The 2285 * resulting struct should be freed with avcodec_free_context(). 2286 * 2287 * @param codec if non-NULL, allocate private data and initialize defaults 2288 * for the given codec. It is illegal to then call avcodec_open2() 2289 * with a different codec. 2290 * If NULL, then the codec-specific defaults won't be initialized, 2291 * which may result in suboptimal default settings (this is 2292 * important mainly for encoders, e.g. libx264). 2293 * 2294 * @return An AVCodecContext filled with default values or NULL on failure. 2295 */ 2296 AVCodecContext *avcodec_alloc_context3(const AVCodec *codec); 2297 2298 /** 2299 * Free the codec context and everything associated with it and write NULL to 2300 * the provided pointer. 2301 */ 2302 void avcodec_free_context(AVCodecContext **avctx); 2303 2304 /** 2305 * Get the AVClass for AVCodecContext. It can be used in combination with 2306 * AV_OPT_SEARCH_FAKE_OBJ for examining options. 2307 * 2308 * @see av_opt_find(). 2309 */ 2310 const AVClass *avcodec_get_class(void); 2311 2312 /** 2313 * Get the AVClass for AVSubtitleRect. It can be used in combination with 2314 * AV_OPT_SEARCH_FAKE_OBJ for examining options. 2315 * 2316 * @see av_opt_find(). 2317 */ 2318 const AVClass *avcodec_get_subtitle_rect_class(void); 2319 2320 /** 2321 * Fill the parameters struct based on the values from the supplied codec 2322 * context. Any allocated fields in par are freed and replaced with duplicates 2323 * of the corresponding fields in codec. 2324 * 2325 * @return >= 0 on success, a negative AVERROR code on failure 2326 */ 2327 int avcodec_parameters_from_context(struct AVCodecParameters *par, 2328 const AVCodecContext *codec); 2329 2330 /** 2331 * Fill the codec context based on the values from the supplied codec 2332 * parameters. Any allocated fields in codec that have a corresponding field in 2333 * par are freed and replaced with duplicates of the corresponding field in par. 2334 * Fields in codec that do not have a counterpart in par are not touched. 2335 * 2336 * @return >= 0 on success, a negative AVERROR code on failure. 2337 */ 2338 int avcodec_parameters_to_context(AVCodecContext *codec, 2339 const struct AVCodecParameters *par); 2340 2341 /** 2342 * Initialize the AVCodecContext to use the given AVCodec. Prior to using this 2343 * function the context has to be allocated with avcodec_alloc_context3(). 2344 * 2345 * The functions avcodec_find_decoder_by_name(), avcodec_find_encoder_by_name(), 2346 * avcodec_find_decoder() and avcodec_find_encoder() provide an easy way for 2347 * retrieving a codec. 2348 * 2349 * Depending on the codec, you might need to set options in the codec context 2350 * also for decoding (e.g. width, height, or the pixel or audio sample format in 2351 * the case the information is not available in the bitstream, as when decoding 2352 * raw audio or video). 2353 * 2354 * Options in the codec context can be set either by setting them in the options 2355 * AVDictionary, or by setting the values in the context itself, directly or by 2356 * using the av_opt_set() API before calling this function. 2357 * 2358 * Example: 2359 * @code 2360 * av_dict_set(&opts, "b", "2.5M", 0); 2361 * codec = avcodec_find_decoder(AV_CODEC_ID_H264); 2362 * if (!codec) 2363 * exit(1); 2364 * 2365 * context = avcodec_alloc_context3(codec); 2366 * 2367 * if (avcodec_open2(context, codec, opts) < 0) 2368 * exit(1); 2369 * @endcode 2370 * 2371 * In the case AVCodecParameters are available (e.g. when demuxing a stream 2372 * using libavformat, and accessing the AVStream contained in the demuxer), the 2373 * codec parameters can be copied to the codec context using 2374 * avcodec_parameters_to_context(), as in the following example: 2375 * 2376 * @code 2377 * AVStream *stream = ...; 2378 * context = avcodec_alloc_context3(codec); 2379 * if (avcodec_parameters_to_context(context, stream->codecpar) < 0) 2380 * exit(1); 2381 * if (avcodec_open2(context, codec, NULL) < 0) 2382 * exit(1); 2383 * @endcode 2384 * 2385 * @note Always call this function before using decoding routines (such as 2386 * @ref avcodec_receive_frame()). 2387 * 2388 * @param avctx The context to initialize. 2389 * @param codec The codec to open this context for. If a non-NULL codec has been 2390 * previously passed to avcodec_alloc_context3() or 2391 * for this context, then this parameter MUST be either NULL or 2392 * equal to the previously passed codec. 2393 * @param options A dictionary filled with AVCodecContext and codec-private 2394 * options, which are set on top of the options already set in 2395 * avctx, can be NULL. On return this object will be filled with 2396 * options that were not found in the avctx codec context. 2397 * 2398 * @return zero on success, a negative value on error 2399 * @see avcodec_alloc_context3(), avcodec_find_decoder(), avcodec_find_encoder(), 2400 * av_dict_set(), av_opt_set(), av_opt_find(), avcodec_parameters_to_context() 2401 */ 2402 int avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options); 2403 2404 #if FF_API_AVCODEC_CLOSE 2405 /** 2406 * Close a given AVCodecContext and free all the data associated with it 2407 * (but not the AVCodecContext itself). 2408 * 2409 * Calling this function on an AVCodecContext that hasn't been opened will free 2410 * the codec-specific data allocated in avcodec_alloc_context3() with a non-NULL 2411 * codec. Subsequent calls will do nothing. 2412 * 2413 * @deprecated Do not use this function. Use avcodec_free_context() to destroy a 2414 * codec context (either open or closed). Opening and closing a codec context 2415 * multiple times is not supported anymore -- use multiple codec contexts 2416 * instead. 2417 */ 2418 attribute_deprecated 2419 int avcodec_close(AVCodecContext *avctx); 2420 #endif 2421 2422 /** 2423 * Free all allocated data in the given subtitle struct. 2424 * 2425 * @param sub AVSubtitle to free. 2426 */ 2427 void avsubtitle_free(AVSubtitle *sub); 2428 2429 /** 2430 * @} 2431 */ 2432 2433 /** 2434 * @addtogroup lavc_decoding 2435 * @{ 2436 */ 2437 2438 /** 2439 * The default callback for AVCodecContext.get_buffer2(). It is made public so 2440 * it can be called by custom get_buffer2() implementations for decoders without 2441 * AV_CODEC_CAP_DR1 set. 2442 */ 2443 int avcodec_default_get_buffer2(AVCodecContext *s, AVFrame *frame, int flags); 2444 2445 /** 2446 * The default callback for AVCodecContext.get_encode_buffer(). It is made public so 2447 * it can be called by custom get_encode_buffer() implementations for encoders without 2448 * AV_CODEC_CAP_DR1 set. 2449 */ 2450 int avcodec_default_get_encode_buffer(AVCodecContext *s, AVPacket *pkt, int flags); 2451 2452 /** 2453 * Modify width and height values so that they will result in a memory 2454 * buffer that is acceptable for the codec if you do not use any horizontal 2455 * padding. 2456 * 2457 * May only be used if a codec with AV_CODEC_CAP_DR1 has been opened. 2458 */ 2459 void avcodec_align_dimensions(AVCodecContext *s, int *width, int *height); 2460 2461 /** 2462 * Modify width and height values so that they will result in a memory 2463 * buffer that is acceptable for the codec if you also ensure that all 2464 * line sizes are a multiple of the respective linesize_align[i]. 2465 * 2466 * May only be used if a codec with AV_CODEC_CAP_DR1 has been opened. 2467 */ 2468 void avcodec_align_dimensions2(AVCodecContext *s, int *width, int *height, 2469 int linesize_align[AV_NUM_DATA_POINTERS]); 2470 2471 /** 2472 * Decode a subtitle message. 2473 * Return a negative value on error, otherwise return the number of bytes used. 2474 * If no subtitle could be decompressed, got_sub_ptr is zero. 2475 * Otherwise, the subtitle is stored in *sub. 2476 * Note that AV_CODEC_CAP_DR1 is not available for subtitle codecs. This is for 2477 * simplicity, because the performance difference is expected to be negligible 2478 * and reusing a get_buffer written for video codecs would probably perform badly 2479 * due to a potentially very different allocation pattern. 2480 * 2481 * Some decoders (those marked with AV_CODEC_CAP_DELAY) have a delay between input 2482 * and output. This means that for some packets they will not immediately 2483 * produce decoded output and need to be flushed at the end of decoding to get 2484 * all the decoded data. Flushing is done by calling this function with packets 2485 * with avpkt->data set to NULL and avpkt->size set to 0 until it stops 2486 * returning subtitles. It is safe to flush even those decoders that are not 2487 * marked with AV_CODEC_CAP_DELAY, then no subtitles will be returned. 2488 * 2489 * @note The AVCodecContext MUST have been opened with @ref avcodec_open2() 2490 * before packets may be fed to the decoder. 2491 * 2492 * @param avctx the codec context 2493 * @param[out] sub The preallocated AVSubtitle in which the decoded subtitle will be stored, 2494 * must be freed with avsubtitle_free if *got_sub_ptr is set. 2495 * @param[in,out] got_sub_ptr Zero if no subtitle could be decompressed, otherwise, it is nonzero. 2496 * @param[in] avpkt The input AVPacket containing the input buffer. 2497 */ 2498 int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub, 2499 int *got_sub_ptr, const AVPacket *avpkt); 2500 2501 /** 2502 * Supply raw packet data as input to a decoder. 2503 * 2504 * Internally, this call will copy relevant AVCodecContext fields, which can 2505 * influence decoding per-packet, and apply them when the packet is actually 2506 * decoded. (For example AVCodecContext.skip_frame, which might direct the 2507 * decoder to drop the frame contained by the packet sent with this function.) 2508 * 2509 * @warning The input buffer, avpkt->data must be AV_INPUT_BUFFER_PADDING_SIZE 2510 * larger than the actual read bytes because some optimized bitstream 2511 * readers read 32 or 64 bits at once and could read over the end. 2512 * 2513 * @note The AVCodecContext MUST have been opened with @ref avcodec_open2() 2514 * before packets may be fed to the decoder. 2515 * 2516 * @param avctx codec context 2517 * @param[in] avpkt The input AVPacket. Usually, this will be a single video 2518 * frame, or several complete audio frames. 2519 * Ownership of the packet remains with the caller, and the 2520 * decoder will not write to the packet. The decoder may create 2521 * a reference to the packet data (or copy it if the packet is 2522 * not reference-counted). 2523 * Unlike with older APIs, the packet is always fully consumed, 2524 * and if it contains multiple frames (e.g. some audio codecs), 2525 * will require you to call avcodec_receive_frame() multiple 2526 * times afterwards before you can send a new packet. 2527 * It can be NULL (or an AVPacket with data set to NULL and 2528 * size set to 0); in this case, it is considered a flush 2529 * packet, which signals the end of the stream. Sending the 2530 * first flush packet will return success. Subsequent ones are 2531 * unnecessary and will return AVERROR_EOF. If the decoder 2532 * still has frames buffered, it will return them after sending 2533 * a flush packet. 2534 * 2535 * @retval 0 success 2536 * @retval AVERROR(EAGAIN) input is not accepted in the current state - user 2537 * must read output with avcodec_receive_frame() (once 2538 * all output is read, the packet should be resent, 2539 * and the call will not fail with EAGAIN). 2540 * @retval AVERROR_EOF the decoder has been flushed, and no new packets can be 2541 * sent to it (also returned if more than 1 flush 2542 * packet is sent) 2543 * @retval AVERROR(EINVAL) codec not opened, it is an encoder, or requires flush 2544 * @retval AVERROR(ENOMEM) failed to add packet to internal queue, or similar 2545 * @retval "another negative error code" legitimate decoding errors 2546 */ 2547 int avcodec_send_packet(AVCodecContext *avctx, const AVPacket *avpkt); 2548 2549 /** 2550 * Return decoded output data from a decoder or encoder (when the 2551 * @ref AV_CODEC_FLAG_RECON_FRAME flag is used). 2552 * 2553 * @param avctx codec context 2554 * @param frame This will be set to a reference-counted video or audio 2555 * frame (depending on the decoder type) allocated by the 2556 * codec. Note that the function will always call 2557 * av_frame_unref(frame) before doing anything else. 2558 * 2559 * @retval 0 success, a frame was returned 2560 * @retval AVERROR(EAGAIN) output is not available in this state - user must 2561 * try to send new input 2562 * @retval AVERROR_EOF the codec has been fully flushed, and there will be 2563 * no more output frames 2564 * @retval AVERROR(EINVAL) codec not opened, or it is an encoder without the 2565 * @ref AV_CODEC_FLAG_RECON_FRAME flag enabled 2566 * @retval "other negative error code" legitimate decoding errors 2567 */ 2568 int avcodec_receive_frame(AVCodecContext *avctx, AVFrame *frame); 2569 2570 /** 2571 * Supply a raw video or audio frame to the encoder. Use avcodec_receive_packet() 2572 * to retrieve buffered output packets. 2573 * 2574 * @param avctx codec context 2575 * @param[in] frame AVFrame containing the raw audio or video frame to be encoded. 2576 * Ownership of the frame remains with the caller, and the 2577 * encoder will not write to the frame. The encoder may create 2578 * a reference to the frame data (or copy it if the frame is 2579 * not reference-counted). 2580 * It can be NULL, in which case it is considered a flush 2581 * packet. This signals the end of the stream. If the encoder 2582 * still has packets buffered, it will return them after this 2583 * call. Once flushing mode has been entered, additional flush 2584 * packets are ignored, and sending frames will return 2585 * AVERROR_EOF. 2586 * 2587 * For audio: 2588 * If AV_CODEC_CAP_VARIABLE_FRAME_SIZE is set, then each frame 2589 * can have any number of samples. 2590 * If it is not set, frame->nb_samples must be equal to 2591 * avctx->frame_size for all frames except the last. 2592 * The final frame may be smaller than avctx->frame_size. 2593 * @retval 0 success 2594 * @retval AVERROR(EAGAIN) input is not accepted in the current state - user must 2595 * read output with avcodec_receive_packet() (once all 2596 * output is read, the packet should be resent, and the 2597 * call will not fail with EAGAIN). 2598 * @retval AVERROR_EOF the encoder has been flushed, and no new frames can 2599 * be sent to it 2600 * @retval AVERROR(EINVAL) codec not opened, it is a decoder, or requires flush 2601 * @retval AVERROR(ENOMEM) failed to add packet to internal queue, or similar 2602 * @retval "another negative error code" legitimate encoding errors 2603 */ 2604 int avcodec_send_frame(AVCodecContext *avctx, const AVFrame *frame); 2605 2606 /** 2607 * Read encoded data from the encoder. 2608 * 2609 * @param avctx codec context 2610 * @param avpkt This will be set to a reference-counted packet allocated by the 2611 * encoder. Note that the function will always call 2612 * av_packet_unref(avpkt) before doing anything else. 2613 * @retval 0 success 2614 * @retval AVERROR(EAGAIN) output is not available in the current state - user must 2615 * try to send input 2616 * @retval AVERROR_EOF the encoder has been fully flushed, and there will be no 2617 * more output packets 2618 * @retval AVERROR(EINVAL) codec not opened, or it is a decoder 2619 * @retval "another negative error code" legitimate encoding errors 2620 */ 2621 int avcodec_receive_packet(AVCodecContext *avctx, AVPacket *avpkt); 2622 2623 /** 2624 * Create and return a AVHWFramesContext with values adequate for hardware 2625 * decoding. This is meant to get called from the get_format callback, and is 2626 * a helper for preparing a AVHWFramesContext for AVCodecContext.hw_frames_ctx. 2627 * This API is for decoding with certain hardware acceleration modes/APIs only. 2628 * 2629 * The returned AVHWFramesContext is not initialized. The caller must do this 2630 * with av_hwframe_ctx_init(). 2631 * 2632 * Calling this function is not a requirement, but makes it simpler to avoid 2633 * codec or hardware API specific details when manually allocating frames. 2634 * 2635 * Alternatively to this, an API user can set AVCodecContext.hw_device_ctx, 2636 * which sets up AVCodecContext.hw_frames_ctx fully automatically, and makes 2637 * it unnecessary to call this function or having to care about 2638 * AVHWFramesContext initialization at all. 2639 * 2640 * There are a number of requirements for calling this function: 2641 * 2642 * - It must be called from get_format with the same avctx parameter that was 2643 * passed to get_format. Calling it outside of get_format is not allowed, and 2644 * can trigger undefined behavior. 2645 * - The function is not always supported (see description of return values). 2646 * Even if this function returns successfully, hwaccel initialization could 2647 * fail later. (The degree to which implementations check whether the stream 2648 * is actually supported varies. Some do this check only after the user's 2649 * get_format callback returns.) 2650 * - The hw_pix_fmt must be one of the choices suggested by get_format. If the 2651 * user decides to use a AVHWFramesContext prepared with this API function, 2652 * the user must return the same hw_pix_fmt from get_format. 2653 * - The device_ref passed to this function must support the given hw_pix_fmt. 2654 * - After calling this API function, it is the user's responsibility to 2655 * initialize the AVHWFramesContext (returned by the out_frames_ref parameter), 2656 * and to set AVCodecContext.hw_frames_ctx to it. If done, this must be done 2657 * before returning from get_format (this is implied by the normal 2658 * AVCodecContext.hw_frames_ctx API rules). 2659 * - The AVHWFramesContext parameters may change every time time get_format is 2660 * called. Also, AVCodecContext.hw_frames_ctx is reset before get_format. So 2661 * you are inherently required to go through this process again on every 2662 * get_format call. 2663 * - It is perfectly possible to call this function without actually using 2664 * the resulting AVHWFramesContext. One use-case might be trying to reuse a 2665 * previously initialized AVHWFramesContext, and calling this API function 2666 * only to test whether the required frame parameters have changed. 2667 * - Fields that use dynamically allocated values of any kind must not be set 2668 * by the user unless setting them is explicitly allowed by the documentation. 2669 * If the user sets AVHWFramesContext.free and AVHWFramesContext.user_opaque, 2670 * the new free callback must call the potentially set previous free callback. 2671 * This API call may set any dynamically allocated fields, including the free 2672 * callback. 2673 * 2674 * The function will set at least the following fields on AVHWFramesContext 2675 * (potentially more, depending on hwaccel API): 2676 * 2677 * - All fields set by av_hwframe_ctx_alloc(). 2678 * - Set the format field to hw_pix_fmt. 2679 * - Set the sw_format field to the most suited and most versatile format. (An 2680 * implication is that this will prefer generic formats over opaque formats 2681 * with arbitrary restrictions, if possible.) 2682 * - Set the width/height fields to the coded frame size, rounded up to the 2683 * API-specific minimum alignment. 2684 * - Only _if_ the hwaccel requires a pre-allocated pool: set the initial_pool_size 2685 * field to the number of maximum reference surfaces possible with the codec, 2686 * plus 1 surface for the user to work (meaning the user can safely reference 2687 * at most 1 decoded surface at a time), plus additional buffering introduced 2688 * by frame threading. If the hwaccel does not require pre-allocation, the 2689 * field is left to 0, and the decoder will allocate new surfaces on demand 2690 * during decoding. 2691 * - Possibly AVHWFramesContext.hwctx fields, depending on the underlying 2692 * hardware API. 2693 * 2694 * Essentially, out_frames_ref returns the same as av_hwframe_ctx_alloc(), but 2695 * with basic frame parameters set. 2696 * 2697 * The function is stateless, and does not change the AVCodecContext or the 2698 * device_ref AVHWDeviceContext. 2699 * 2700 * @param avctx The context which is currently calling get_format, and which 2701 * implicitly contains all state needed for filling the returned 2702 * AVHWFramesContext properly. 2703 * @param device_ref A reference to the AVHWDeviceContext describing the device 2704 * which will be used by the hardware decoder. 2705 * @param hw_pix_fmt The hwaccel format you are going to return from get_format. 2706 * @param out_frames_ref On success, set to a reference to an _uninitialized_ 2707 * AVHWFramesContext, created from the given device_ref. 2708 * Fields will be set to values required for decoding. 2709 * Not changed if an error is returned. 2710 * @return zero on success, a negative value on error. The following error codes 2711 * have special semantics: 2712 * AVERROR(ENOENT): the decoder does not support this functionality. Setup 2713 * is always manual, or it is a decoder which does not 2714 * support setting AVCodecContext.hw_frames_ctx at all, 2715 * or it is a software format. 2716 * AVERROR(EINVAL): it is known that hardware decoding is not supported for 2717 * this configuration, or the device_ref is not supported 2718 * for the hwaccel referenced by hw_pix_fmt. 2719 */ 2720 int avcodec_get_hw_frames_parameters(AVCodecContext *avctx, 2721 AVBufferRef *device_ref, 2722 enum AVPixelFormat hw_pix_fmt, 2723 AVBufferRef **out_frames_ref); 2724 2725 enum AVCodecConfig { 2726 AV_CODEC_CONFIG_PIX_FORMAT, ///< AVPixelFormat, terminated by AV_PIX_FMT_NONE 2727 AV_CODEC_CONFIG_FRAME_RATE, ///< AVRational, terminated by {0, 0} 2728 AV_CODEC_CONFIG_SAMPLE_RATE, ///< int, terminated by 0 2729 AV_CODEC_CONFIG_SAMPLE_FORMAT, ///< AVSampleFormat, terminated by AV_SAMPLE_FMT_NONE 2730 AV_CODEC_CONFIG_CHANNEL_LAYOUT, ///< AVChannelLayout, terminated by {0} 2731 AV_CODEC_CONFIG_COLOR_RANGE, ///< AVColorRange, terminated by AVCOL_RANGE_UNSPECIFIED 2732 AV_CODEC_CONFIG_COLOR_SPACE, ///< AVColorSpace, terminated by AVCOL_SPC_UNSPECIFIED 2733 }; 2734 2735 /** 2736 * Retrieve a list of all supported values for a given configuration type. 2737 * 2738 * @param avctx An optional context to use. Values such as 2739 * `strict_std_compliance` may affect the result. If NULL, 2740 * default values are used. 2741 * @param codec The codec to query, or NULL to use avctx->codec. 2742 * @param config The configuration to query. 2743 * @param flags Currently unused; should be set to zero. 2744 * @param out_configs On success, set to a list of configurations, terminated 2745 * by a config-specific terminator, or NULL if all 2746 * possible values are supported. 2747 * @param out_num_configs On success, set to the number of elements in 2748 *out_configs, excluding the terminator. Optional. 2749 */ 2750 int avcodec_get_supported_config(const AVCodecContext *avctx, 2751 const AVCodec *codec, enum AVCodecConfig config, 2752 unsigned flags, const void **out_configs, 2753 int *out_num_configs); 2754 2755 2756 2757 /** 2758 * @defgroup lavc_parsing Frame parsing 2759 * @{ 2760 */ 2761 2762 enum AVPictureStructure { 2763 AV_PICTURE_STRUCTURE_UNKNOWN, ///< unknown 2764 AV_PICTURE_STRUCTURE_TOP_FIELD, ///< coded as top field 2765 AV_PICTURE_STRUCTURE_BOTTOM_FIELD, ///< coded as bottom field 2766 AV_PICTURE_STRUCTURE_FRAME, ///< coded as frame 2767 }; 2768 2769 typedef struct AVCodecParserContext { 2770 void *priv_data; 2771 const struct AVCodecParser *parser; 2772 int64_t frame_offset; /* offset of the current frame */ 2773 int64_t cur_offset; /* current offset 2774 (incremented by each av_parser_parse()) */ 2775 int64_t next_frame_offset; /* offset of the next frame */ 2776 /* video info */ 2777 int pict_type; /* XXX: Put it back in AVCodecContext. */ 2778 /** 2779 * This field is used for proper frame duration computation in lavf. 2780 * It signals, how much longer the frame duration of the current frame 2781 * is compared to normal frame duration. 2782 * 2783 * frame_duration = (1 + repeat_pict) * time_base 2784 * 2785 * It is used by codecs like H.264 to display telecined material. 2786 */ 2787 int repeat_pict; /* XXX: Put it back in AVCodecContext. */ 2788 int64_t pts; /* pts of the current frame */ 2789 int64_t dts; /* dts of the current frame */ 2790 2791 /* private data */ 2792 int64_t last_pts; 2793 int64_t last_dts; 2794 int fetch_timestamp; 2795 2796 #define AV_PARSER_PTS_NB 4 2797 int cur_frame_start_index; 2798 int64_t cur_frame_offset[AV_PARSER_PTS_NB]; 2799 int64_t cur_frame_pts[AV_PARSER_PTS_NB]; 2800 int64_t cur_frame_dts[AV_PARSER_PTS_NB]; 2801 2802 int flags; 2803 #define PARSER_FLAG_COMPLETE_FRAMES 0x0001 2804 #define PARSER_FLAG_ONCE 0x0002 2805 /// Set if the parser has a valid file offset 2806 #define PARSER_FLAG_FETCHED_OFFSET 0x0004 2807 #define PARSER_FLAG_USE_CODEC_TS 0x1000 2808 2809 int64_t offset; ///< byte offset from starting packet start 2810 int64_t cur_frame_end[AV_PARSER_PTS_NB]; 2811 2812 /** 2813 * Set by parser to 1 for key frames and 0 for non-key frames. 2814 * It is initialized to -1, so if the parser doesn't set this flag, 2815 * old-style fallback using AV_PICTURE_TYPE_I picture type as key frames 2816 * will be used. 2817 */ 2818 int key_frame; 2819 2820 // Timestamp generation support: 2821 /** 2822 * Synchronization point for start of timestamp generation. 2823 * 2824 * Set to >0 for sync point, 0 for no sync point and <0 for undefined 2825 * (default). 2826 * 2827 * For example, this corresponds to presence of H.264 buffering period 2828 * SEI message. 2829 */ 2830 int dts_sync_point; 2831 2832 /** 2833 * Offset of the current timestamp against last timestamp sync point in 2834 * units of AVCodecContext.time_base. 2835 * 2836 * Set to INT_MIN when dts_sync_point unused. Otherwise, it must 2837 * contain a valid timestamp offset. 2838 * 2839 * Note that the timestamp of sync point has usually a nonzero 2840 * dts_ref_dts_delta, which refers to the previous sync point. Offset of 2841 * the next frame after timestamp sync point will be usually 1. 2842 * 2843 * For example, this corresponds to H.264 cpb_removal_delay. 2844 */ 2845 int dts_ref_dts_delta; 2846 2847 /** 2848 * Presentation delay of current frame in units of AVCodecContext.time_base. 2849 * 2850 * Set to INT_MIN when dts_sync_point unused. Otherwise, it must 2851 * contain valid non-negative timestamp delta (presentation time of a frame 2852 * must not lie in the past). 2853 * 2854 * This delay represents the difference between decoding and presentation 2855 * time of the frame. 2856 * 2857 * For example, this corresponds to H.264 dpb_output_delay. 2858 */ 2859 int pts_dts_delta; 2860 2861 /** 2862 * Position of the packet in file. 2863 * 2864 * Analogous to cur_frame_pts/dts 2865 */ 2866 int64_t cur_frame_pos[AV_PARSER_PTS_NB]; 2867 2868 /** 2869 * Byte position of currently parsed frame in stream. 2870 */ 2871 int64_t pos; 2872 2873 /** 2874 * Previous frame byte position. 2875 */ 2876 int64_t last_pos; 2877 2878 /** 2879 * Duration of the current frame. 2880 * For audio, this is in units of 1 / AVCodecContext.sample_rate. 2881 * For all other types, this is in units of AVCodecContext.time_base. 2882 */ 2883 int duration; 2884 2885 enum AVFieldOrder field_order; 2886 2887 /** 2888 * Indicate whether a picture is coded as a frame, top field or bottom field. 2889 * 2890 * For example, H.264 field_pic_flag equal to 0 corresponds to 2891 * AV_PICTURE_STRUCTURE_FRAME. An H.264 picture with field_pic_flag 2892 * equal to 1 and bottom_field_flag equal to 0 corresponds to 2893 * AV_PICTURE_STRUCTURE_TOP_FIELD. 2894 */ 2895 enum AVPictureStructure picture_structure; 2896 2897 /** 2898 * Picture number incremented in presentation or output order. 2899 * This field may be reinitialized at the first picture of a new sequence. 2900 * 2901 * For example, this corresponds to H.264 PicOrderCnt. 2902 */ 2903 int output_picture_number; 2904 2905 /** 2906 * Dimensions of the decoded video intended for presentation. 2907 */ 2908 int width; 2909 int height; 2910 2911 /** 2912 * Dimensions of the coded video. 2913 */ 2914 int coded_width; 2915 int coded_height; 2916 2917 /** 2918 * The format of the coded data, corresponds to enum AVPixelFormat for video 2919 * and for enum AVSampleFormat for audio. 2920 * 2921 * Note that a decoder can have considerable freedom in how exactly it 2922 * decodes the data, so the format reported here might be different from the 2923 * one returned by a decoder. 2924 */ 2925 int format; 2926 } AVCodecParserContext; 2927 2928 typedef struct AVCodecParser { 2929 int codec_ids[7]; /* several codec IDs are permitted */ 2930 int priv_data_size; 2931 int (*parser_init)(AVCodecParserContext *s); 2932 /* This callback never returns an error, a negative value means that 2933 * the frame start was in a previous packet. */ 2934 int (*parser_parse)(AVCodecParserContext *s, 2935 AVCodecContext *avctx, 2936 const uint8_t **poutbuf, int *poutbuf_size, 2937 const uint8_t *buf, int buf_size); 2938 void (*parser_close)(AVCodecParserContext *s); 2939 int (*split)(AVCodecContext *avctx, const uint8_t *buf, int buf_size); 2940 } AVCodecParser; 2941 2942 /** 2943 * Iterate over all registered codec parsers. 2944 * 2945 * @param opaque a pointer where libavcodec will store the iteration state. Must 2946 * point to NULL to start the iteration. 2947 * 2948 * @return the next registered codec parser or NULL when the iteration is 2949 * finished 2950 */ 2951 const AVCodecParser *av_parser_iterate(void **opaque); 2952 2953 AVCodecParserContext *av_parser_init(int codec_id); 2954 2955 /** 2956 * Parse a packet. 2957 * 2958 * @param s parser context. 2959 * @param avctx codec context. 2960 * @param poutbuf set to pointer to parsed buffer or NULL if not yet finished. 2961 * @param poutbuf_size set to size of parsed buffer or zero if not yet finished. 2962 * @param buf input buffer. 2963 * @param buf_size buffer size in bytes without the padding. I.e. the full buffer 2964 size is assumed to be buf_size + AV_INPUT_BUFFER_PADDING_SIZE. 2965 To signal EOF, this should be 0 (so that the last frame 2966 can be output). 2967 * @param pts input presentation timestamp. 2968 * @param dts input decoding timestamp. 2969 * @param pos input byte position in stream. 2970 * @return the number of bytes of the input bitstream used. 2971 * 2972 * Example: 2973 * @code 2974 * while(in_len){ 2975 * len = av_parser_parse2(myparser, AVCodecContext, &data, &size, 2976 * in_data, in_len, 2977 * pts, dts, pos); 2978 * in_data += len; 2979 * in_len -= len; 2980 * 2981 * if(size) 2982 * decode_frame(data, size); 2983 * } 2984 * @endcode 2985 */ 2986 int av_parser_parse2(AVCodecParserContext *s, 2987 AVCodecContext *avctx, 2988 uint8_t **poutbuf, int *poutbuf_size, 2989 const uint8_t *buf, int buf_size, 2990 int64_t pts, int64_t dts, 2991 int64_t pos); 2992 2993 void av_parser_close(AVCodecParserContext *s); 2994 2995 /** 2996 * @} 2997 * @} 2998 */ 2999 3000 /** 3001 * @addtogroup lavc_encoding 3002 * @{ 3003 */ 3004 3005 int avcodec_encode_subtitle(AVCodecContext *avctx, uint8_t *buf, int buf_size, 3006 const AVSubtitle *sub); 3007 3008 3009 /** 3010 * @} 3011 */ 3012 3013 /** 3014 * @defgroup lavc_misc Utility functions 3015 * @ingroup libavc 3016 * 3017 * Miscellaneous utility functions related to both encoding and decoding 3018 * (or neither). 3019 * @{ 3020 */ 3021 3022 /** 3023 * @defgroup lavc_misc_pixfmt Pixel formats 3024 * 3025 * Functions for working with pixel formats. 3026 * @{ 3027 */ 3028 3029 /** 3030 * Return a value representing the fourCC code associated to the 3031 * pixel format pix_fmt, or 0 if no associated fourCC code can be 3032 * found. 3033 */ 3034 unsigned int avcodec_pix_fmt_to_codec_tag(enum AVPixelFormat pix_fmt); 3035 3036 /** 3037 * Find the best pixel format to convert to given a certain source pixel 3038 * format. When converting from one pixel format to another, information loss 3039 * may occur. For example, when converting from RGB24 to GRAY, the color 3040 * information will be lost. Similarly, other losses occur when converting from 3041 * some formats to other formats. avcodec_find_best_pix_fmt_of_2() searches which of 3042 * the given pixel formats should be used to suffer the least amount of loss. 3043 * The pixel formats from which it chooses one, are determined by the 3044 * pix_fmt_list parameter. 3045 * 3046 * 3047 * @param[in] pix_fmt_list AV_PIX_FMT_NONE terminated array of pixel formats to choose from 3048 * @param[in] src_pix_fmt source pixel format 3049 * @param[in] has_alpha Whether the source pixel format alpha channel is used. 3050 * @param[out] loss_ptr Combination of flags informing you what kind of losses will occur. 3051 * @return The best pixel format to convert to or -1 if none was found. 3052 */ 3053 enum AVPixelFormat avcodec_find_best_pix_fmt_of_list(const enum AVPixelFormat *pix_fmt_list, 3054 enum AVPixelFormat src_pix_fmt, 3055 int has_alpha, int *loss_ptr); 3056 3057 enum AVPixelFormat avcodec_default_get_format(struct AVCodecContext *s, const enum AVPixelFormat * fmt); 3058 3059 /** 3060 * @} 3061 */ 3062 3063 void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode); 3064 3065 int avcodec_default_execute(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2),void *arg, int *ret, int count, int size); 3066 int avcodec_default_execute2(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2, int, int),void *arg, int *ret, int count); 3067 //FIXME func typedef 3068 3069 /** 3070 * Fill AVFrame audio data and linesize pointers. 3071 * 3072 * The buffer buf must be a preallocated buffer with a size big enough 3073 * to contain the specified samples amount. The filled AVFrame data 3074 * pointers will point to this buffer. 3075 * 3076 * AVFrame extended_data channel pointers are allocated if necessary for 3077 * planar audio. 3078 * 3079 * @param frame the AVFrame 3080 * frame->nb_samples must be set prior to calling the 3081 * function. This function fills in frame->data, 3082 * frame->extended_data, frame->linesize[0]. 3083 * @param nb_channels channel count 3084 * @param sample_fmt sample format 3085 * @param buf buffer to use for frame data 3086 * @param buf_size size of buffer 3087 * @param align plane size sample alignment (0 = default) 3088 * @return >=0 on success, negative error code on failure 3089 * @todo return the size in bytes required to store the samples in 3090 * case of success, at the next libavutil bump 3091 */ 3092 int avcodec_fill_audio_frame(AVFrame *frame, int nb_channels, 3093 enum AVSampleFormat sample_fmt, const uint8_t *buf, 3094 int buf_size, int align); 3095 3096 /** 3097 * Reset the internal codec state / flush internal buffers. Should be called 3098 * e.g. when seeking or when switching to a different stream. 3099 * 3100 * @note for decoders, this function just releases any references the decoder 3101 * might keep internally, but the caller's references remain valid. 3102 * 3103 * @note for encoders, this function will only do something if the encoder 3104 * declares support for AV_CODEC_CAP_ENCODER_FLUSH. When called, the encoder 3105 * will drain any remaining packets, and can then be re-used for a different 3106 * stream (as opposed to sending a null frame which will leave the encoder 3107 * in a permanent EOF state after draining). This can be desirable if the 3108 * cost of tearing down and replacing the encoder instance is high. 3109 */ 3110 void avcodec_flush_buffers(AVCodecContext *avctx); 3111 3112 /** 3113 * Return audio frame duration. 3114 * 3115 * @param avctx codec context 3116 * @param frame_bytes size of the frame, or 0 if unknown 3117 * @return frame duration, in samples, if known. 0 if not able to 3118 * determine. 3119 */ 3120 int av_get_audio_frame_duration(AVCodecContext *avctx, int frame_bytes); 3121 3122 /* memory */ 3123 3124 /** 3125 * Same behaviour av_fast_malloc but the buffer has additional 3126 * AV_INPUT_BUFFER_PADDING_SIZE at the end which will always be 0. 3127 * 3128 * In addition the whole buffer will initially and after resizes 3129 * be 0-initialized so that no uninitialized data will ever appear. 3130 */ 3131 void av_fast_padded_malloc(void *ptr, unsigned int *size, size_t min_size); 3132 3133 /** 3134 * Same behaviour av_fast_padded_malloc except that buffer will always 3135 * be 0-initialized after call. 3136 */ 3137 void av_fast_padded_mallocz(void *ptr, unsigned int *size, size_t min_size); 3138 3139 /** 3140 * @return a positive value if s is open (i.e. avcodec_open2() was called on it 3141 * with no corresponding avcodec_close()), 0 otherwise. 3142 */ 3143 int avcodec_is_open(AVCodecContext *s); 3144 3145 /** 3146 * @} 3147 */ 3148 3149 #endif /* AVCODEC_AVCODEC_H */