1 /* 2 * 3 * This file is part of FFmpeg. 4 * 5 * FFmpeg is free software; you can redistribute it and/or 6 * modify it under the terms of the GNU Lesser General Public 7 * License as published by the Free Software Foundation; either 8 * version 2.1 of the License, or (at your option) any later version. 9 * 10 * FFmpeg is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 * Lesser General Public License for more details. 14 * 15 * You should have received a copy of the GNU Lesser General Public 16 * License along with FFmpeg; if not, write to the Free Software 17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 18 */ 19 module ffmpeg.libavutil.frame; 20 21 /** 22 * @file 23 * @ingroup lavu_frame 24 * reference-counted frame API 25 */ 26 27 //#ifndef AVUTIL_FRAME_H 28 //#define AVUTIL_FRAME_H 29 30 import std.stdint; 31 32 import ffmpeg.libavutil.avutil; //#include "avutil.h" 33 import ffmpeg.libavutil.buffer; //#include "buffer.h" 34 import ffmpeg.libavutil.dict; //#include "dict.h" 35 import ffmpeg.libavutil.rational; //#include "rational.h" 36 import ffmpeg.libavutil.samplefmt; //#include "samplefmt.h" 37 import ffmpeg.libavutil.pixfmt; //#include "pixfmt.h" 38 import ffmpeg.libavutil.avutil_version; //#include "version.h" 39 40 @nogc nothrow extern(C): 41 /** 42 * @defgroup lavu_frame AVFrame 43 * @ingroup lavu_data 44 * 45 * @{ 46 * AVFrame is an abstraction for reference-counted raw multimedia data. 47 */ 48 49 enum AVFrameSideDataType { 50 /** 51 * The data is the AVPanScan struct defined in libavcodec. 52 */ 53 AV_FRAME_DATA_PANSCAN, 54 /** 55 * ATSC A53 Part 4 Closed Captions. 56 * A53 CC bitstream is stored as uint8_t in AVFrameSideData.data. 57 * The number of bytes of CC data is AVFrameSideData.size. 58 */ 59 AV_FRAME_DATA_A53_CC, 60 /** 61 * Stereoscopic 3d metadata. 62 * The data is the AVStereo3D struct defined in libavutil/stereo3d.h. 63 */ 64 AV_FRAME_DATA_STEREO3D, 65 /** 66 * The data is the AVMatrixEncoding enum defined in libavutil/channel_layout.h. 67 */ 68 AV_FRAME_DATA_MATRIXENCODING, 69 /** 70 * Metadata relevant to a downmix procedure. 71 * The data is the AVDownmixInfo struct defined in libavutil/downmix_info.h. 72 */ 73 AV_FRAME_DATA_DOWNMIX_INFO, 74 /** 75 * ReplayGain information in the form of the AVReplayGain struct. 76 */ 77 AV_FRAME_DATA_REPLAYGAIN, 78 /** 79 * This side data contains a 3x3 transformation matrix describing an affine 80 * transformation that needs to be applied to the frame for correct 81 * presentation. 82 * 83 * See libavutil/display.h for a detailed description of the data. 84 */ 85 AV_FRAME_DATA_DISPLAYMATRIX, 86 /** 87 * Active Format Description data consisting of a single byte as specified 88 * in ETSI TS 101 154 using AVActiveFormatDescription enum. 89 */ 90 AV_FRAME_DATA_AFD, 91 /** 92 * Motion vectors exported by some codecs (on demand through the export_mvs 93 * flag set in the libavcodec AVCodecContext flags2 option). 94 * The data is the AVMotionVector struct defined in 95 * libavutil/motion_vector.h. 96 */ 97 AV_FRAME_DATA_MOTION_VECTORS, 98 /** 99 * Recommmends skipping the specified number of samples. This is exported 100 * only if the "skip_manual" AVOption is set in libavcodec. 101 * This has the same format as AV_PKT_DATA_SKIP_SAMPLES. 102 * @code 103 * u32le number of samples to skip from start of this packet 104 * u32le number of samples to skip from end of this packet 105 * u8 reason for start skip 106 * u8 reason for end skip (0=padding silence, 1=convergence) 107 * @endcode 108 */ 109 AV_FRAME_DATA_SKIP_SAMPLES, 110 /** 111 * This side data must be associated with an audio frame and corresponds to 112 * enum AVAudioServiceType defined in avcodec.h. 113 */ 114 AV_FRAME_DATA_AUDIO_SERVICE_TYPE, 115 /** 116 * Mastering display metadata associated with a video frame. The payload is 117 * an AVMasteringDisplayMetadata type and contains information about the 118 * mastering display color volume. 119 */ 120 AV_FRAME_DATA_MASTERING_DISPLAY_METADATA, 121 /** 122 * The GOP timecode in 25 bit timecode format. Data format is 64-bit integer. 123 * This is set on the first frame of a GOP that has a temporal reference of 0. 124 */ 125 AV_FRAME_DATA_GOP_TIMECODE 126 } 127 128 enum AVActiveFormatDescription { 129 AV_AFD_SAME = 8, 130 AV_AFD_4_3 = 9, 131 AV_AFD_16_9 = 10, 132 AV_AFD_14_9 = 11, 133 AV_AFD_4_3_SP_14_9 = 13, 134 AV_AFD_16_9_SP_14_9 = 14, 135 AV_AFD_SP_4_3 = 15 136 } 137 138 139 /** 140 * Structure to hold side data for an AVFrame. 141 * 142 * sizeof(AVFrameSideData) is not a part of the public ABI, so new fields may be added 143 * to the end with a minor bump. 144 */ 145 struct AVFrameSideData { 146 AVFrameSideDataType type; 147 uint8_t *data; 148 int size; 149 AVDictionary *metadata; 150 AVBufferRef *buf; 151 } 152 153 /** 154 * This structure describes decoded (raw) audio or video data. 155 * 156 * AVFrame must be allocated using av_frame_alloc(). Note that this only 157 * allocates the AVFrame itself, the buffers for the data must be managed 158 * through other means (see below). 159 * AVFrame must be freed with av_frame_free(). 160 * 161 * AVFrame is typically allocated once and then reused multiple times to hold 162 * different data (e.g. a single AVFrame to hold frames received from a 163 * decoder). In such a case, av_frame_unref() will free any references held by 164 * the frame and reset it to its original clean state before it 165 * is reused again. 166 * 167 * The data described by an AVFrame is usually reference counted through the 168 * AVBuffer API. The underlying buffer references are stored in AVFrame.buf / 169 * AVFrame.extended_buf. An AVFrame is considered to be reference counted if at 170 * least one reference is set, i.e. if AVFrame.buf[0] != NULL. In such a case, 171 * every single data plane must be contained in one of the buffers in 172 * AVFrame.buf or AVFrame.extended_buf. 173 * There may be a single buffer for all the data, or one separate buffer for 174 * each plane, or anything in between. 175 * 176 * sizeof(AVFrame) is not a part of the public ABI, so new fields may be added 177 * to the end with a minor bump. 178 * Similarly fields that are marked as to be only accessed by 179 * av_opt_ptr() can be reordered. This allows 2 forks to add fields 180 * without breaking compatibility with each other. 181 */ 182 struct AVFrame { 183 //#define AV_NUM_DATA_POINTERS 8 184 /** 185 * pointer to the picture/channel planes. 186 * This might be different from the first allocated byte 187 * 188 * Some decoders access areas outside 0,0 - width,height, please 189 * see avcodec_align_dimensions2(). Some filters and swscale can read 190 * up to 16 bytes beyond the planes, if these filters are to be used, 191 * then 16 extra bytes must be allocated. 192 */ 193 uint8_t *[AV_NUM_DATA_POINTERS]data; 194 195 /** 196 * For video, size in bytes of each picture line. 197 * For audio, size in bytes of each plane. 198 * 199 * For audio, only linesize[0] may be set. For planar audio, each channel 200 * plane must be the same size. 201 * 202 * For video the linesizes should be multiples of the CPUs alignment 203 * preference, this is 16 or 32 for modern desktop CPUs. 204 * Some code requires such alignment other code can be slower without 205 * correct alignment, for yet other it makes no difference. 206 * 207 * @note The linesize may be larger than the size of usable data -- there 208 * may be extra padding present for performance reasons. 209 */ 210 int [AV_NUM_DATA_POINTERS]linesize; 211 212 /** 213 * pointers to the data planes/channels. 214 * 215 * For video, this should simply point to data[]. 216 * 217 * For planar audio, each channel has a separate data pointer, and 218 * linesize[0] contains the size of each channel buffer. 219 * For packed audio, there is just one data pointer, and linesize[0] 220 * contains the total size of the buffer for all channels. 221 * 222 * Note: Both data and extended_data should always be set in a valid frame, 223 * but for planar audio with more channels that can fit in data, 224 * extended_data must be used in order to access all channels. 225 */ 226 uint8_t **extended_data; 227 228 /** 229 * width and height of the video frame 230 */ 231 int width, height; 232 233 /** 234 * number of audio samples (per channel) described by this frame 235 */ 236 int nb_samples; 237 238 /** 239 * format of the frame, -1 if unknown or unset 240 * Values correspond to enum AVPixelFormat for video frames, 241 * enum AVSampleFormat for audio) 242 */ 243 int format; 244 245 /** 246 * 1 -> keyframe, 0-> not 247 */ 248 int key_frame; 249 250 /** 251 * Picture type of the frame. 252 */ 253 AVPictureType pict_type; 254 255 /** 256 * Sample aspect ratio for the video frame, 0/1 if unknown/unspecified. 257 */ 258 AVRational sample_aspect_ratio; 259 260 /** 261 * Presentation timestamp in time_base units (time when frame should be shown to user). 262 */ 263 int64_t pts; 264 265 /** 266 * PTS copied from the AVPacket that was decoded to produce this frame. 267 */ 268 int64_t pkt_pts; 269 270 /** 271 * DTS copied from the AVPacket that triggered returning this frame. (if frame threading isn't used) 272 * This is also the Presentation time of this AVFrame calculated from 273 * only AVPacket.dts values without pts values. 274 */ 275 int64_t pkt_dts; 276 277 /** 278 * picture number in bitstream order 279 */ 280 int coded_picture_number; 281 /** 282 * picture number in display order 283 */ 284 int display_picture_number; 285 286 /** 287 * quality (between 1 (good) and FF_LAMBDA_MAX (bad)) 288 */ 289 int quality; 290 291 /** 292 * for some private data of the user 293 */ 294 void *opaque; 295 296 static if(FF_API_ERROR_FRAME){ 297 /** 298 * @deprecated unused 299 */ 300 deprecated 301 uint64_t [AV_NUM_DATA_POINTERS]error; 302 } 303 304 /** 305 * When decoding, this signals how much the picture must be delayed. 306 * extra_delay = repeat_pict / (2*fps) 307 */ 308 int repeat_pict; 309 310 /** 311 * The content of the picture is interlaced. 312 */ 313 int interlaced_frame; 314 315 /** 316 * If the content is interlaced, is top field displayed first. 317 */ 318 int top_field_first; 319 320 /** 321 * Tell user application that palette has changed from previous frame. 322 */ 323 int palette_has_changed; 324 325 /** 326 * reordered opaque 64bit (generally an integer or a double precision float 327 * PTS but can be anything). 328 * The user sets AVCodecContext.reordered_opaque to represent the input at 329 * that time, 330 * the decoder reorders values as needed and sets AVFrame.reordered_opaque 331 * to exactly one of the values provided by the user through AVCodecContext.reordered_opaque 332 * @deprecated in favor of pkt_pts 333 */ 334 int64_t reordered_opaque; 335 336 /** 337 * Sample rate of the audio data. 338 */ 339 int sample_rate; 340 341 /** 342 * Channel layout of the audio data. 343 */ 344 uint64_t channel_layout; 345 346 /** 347 * AVBuffer references backing the data for this frame. If all elements of 348 * this array are NULL, then this frame is not reference counted. 349 * 350 * There may be at most one AVBuffer per data plane, so for video this array 351 * always contains all the references. For planar audio with more than 352 * AV_NUM_DATA_POINTERS channels, there may be more buffers than can fit in 353 * this array. Then the extra AVBufferRef pointers are stored in the 354 * extended_buf array. 355 */ 356 AVBufferRef *[AV_NUM_DATA_POINTERS]buf; 357 358 /** 359 * For planar audio which requires more than AV_NUM_DATA_POINTERS 360 * AVBufferRef pointers, this array will hold all the references which 361 * cannot fit into AVFrame.buf. 362 * 363 * Note that this is different from AVFrame.extended_data, which always 364 * contains all the pointers. This array only contains the extra pointers, 365 * which cannot fit into AVFrame.buf. 366 * 367 * This array is always allocated using av_malloc() by whoever constructs 368 * the frame. It is freed in av_frame_unref(). 369 */ 370 AVBufferRef **extended_buf; 371 /** 372 * Number of elements in extended_buf. 373 */ 374 int nb_extended_buf; 375 376 AVFrameSideData **side_data; 377 int nb_side_data; 378 379 /** 380 * @defgroup lavu_frame_flags AV_FRAME_FLAGS 381 * Flags describing additional frame properties. 382 * 383 * @{ 384 */ 385 386 /** 387 * The frame data may be corrupted, e.g. due to decoding errors. 388 */ 389 //#define AV_FRAME_FLAG_CORRUPT (1 << 0) 390 /** 391 * @} 392 */ 393 394 /** 395 * Frame flags, a combination of @ref lavu_frame_flags 396 */ 397 int flags; 398 399 /** 400 * MPEG vs JPEG YUV range. 401 * It must be accessed using av_frame_get_color_range() and 402 * av_frame_set_color_range(). 403 * - encoding: Set by user 404 * - decoding: Set by libavcodec 405 */ 406 AVColorRange color_range; 407 408 AVColorPrimaries color_primaries; 409 410 AVColorTransferCharacteristic color_trc; 411 412 /** 413 * YUV colorspace type. 414 * It must be accessed using av_frame_get_colorspace() and 415 * av_frame_set_colorspace(). 416 * - encoding: Set by user 417 * - decoding: Set by libavcodec 418 */ 419 AVColorSpace colorspace; 420 421 AVChromaLocation chroma_location; 422 423 /** 424 * frame timestamp estimated using various heuristics, in stream time base 425 * Code outside libavcodec should access this field using: 426 * av_frame_get_best_effort_timestamp(frame) 427 * - encoding: unused 428 * - decoding: set by libavcodec, read by user. 429 */ 430 int64_t best_effort_timestamp; 431 432 /** 433 * reordered pos from the last AVPacket that has been input into the decoder 434 * Code outside libavcodec should access this field using: 435 * av_frame_get_pkt_pos(frame) 436 * - encoding: unused 437 * - decoding: Read by user. 438 */ 439 int64_t pkt_pos; 440 441 /** 442 * duration of the corresponding packet, expressed in 443 * AVStream->time_base units, 0 if unknown. 444 * Code outside libavcodec should access this field using: 445 * av_frame_get_pkt_duration(frame) 446 * - encoding: unused 447 * - decoding: Read by user. 448 */ 449 int64_t pkt_duration; 450 451 /** 452 * metadata. 453 * Code outside libavcodec should access this field using: 454 * av_frame_get_metadata(frame) 455 * - encoding: Set by user. 456 * - decoding: Set by libavcodec. 457 */ 458 AVDictionary *metadata; 459 460 /** 461 * decode error flags of the frame, set to a combination of 462 * FF_DECODE_ERROR_xxx flags if the decoder produced a frame, but there 463 * were errors during the decoding. 464 * Code outside libavcodec should access this field using: 465 * av_frame_get_decode_error_flags(frame) 466 * - encoding: unused 467 * - decoding: set by libavcodec, read by user. 468 */ 469 int decode_error_flags; 470 //#define FF_DECODE_ERROR_INVALID_BITSTREAM 1 471 //#define FF_DECODE_ERROR_MISSING_REFERENCE 2 472 473 /** 474 * number of audio channels, only used for audio. 475 * Code outside libavcodec should access this field using: 476 * av_frame_get_channels(frame) 477 * - encoding: unused 478 * - decoding: Read by user. 479 */ 480 int channels; 481 482 /** 483 * size of the corresponding packet containing the compressed 484 * frame. It must be accessed using av_frame_get_pkt_size() and 485 * av_frame_set_pkt_size(). 486 * It is set to a negative value if unknown. 487 * - encoding: unused 488 * - decoding: set by libavcodec, read by user. 489 */ 490 int pkt_size; 491 492 static if(FF_API_FRAME_QP){ 493 /** 494 * QP table 495 * Not to be accessed directly from outside libavutil 496 */ 497 deprecated 498 int8_t *qscale_table; 499 /** 500 * QP store stride 501 * Not to be accessed directly from outside libavutil 502 */ 503 deprecated 504 int qstride; 505 506 deprecated 507 int qscale_type; 508 509 /** 510 * Not to be accessed directly from outside libavutil 511 */ 512 AVBufferRef *qp_table_buf; 513 } 514 } 515 516 /** 517 * Accessors for some AVFrame fields. 518 * The position of these field in the structure is not part of the ABI, 519 * they should not be accessed directly outside libavcodec. 520 */ 521 int64_t av_frame_get_best_effort_timestamp(const AVFrame *frame); 522 void av_frame_set_best_effort_timestamp(AVFrame *frame, int64_t val); 523 int64_t av_frame_get_pkt_duration (const AVFrame *frame); 524 void av_frame_set_pkt_duration (AVFrame *frame, int64_t val); 525 int64_t av_frame_get_pkt_pos (const AVFrame *frame); 526 void av_frame_set_pkt_pos (AVFrame *frame, int64_t val); 527 int64_t av_frame_get_channel_layout (const AVFrame *frame); 528 void av_frame_set_channel_layout (AVFrame *frame, int64_t val); 529 int av_frame_get_channels (const AVFrame *frame); 530 void av_frame_set_channels (AVFrame *frame, int val); 531 int av_frame_get_sample_rate (const AVFrame *frame); 532 void av_frame_set_sample_rate (AVFrame *frame, int val); 533 AVDictionary *av_frame_get_metadata (const AVFrame *frame); 534 void av_frame_set_metadata (AVFrame *frame, AVDictionary *val); 535 int av_frame_get_decode_error_flags (const AVFrame *frame); 536 void av_frame_set_decode_error_flags (AVFrame *frame, int val); 537 int av_frame_get_pkt_size(const AVFrame *frame); 538 void av_frame_set_pkt_size(AVFrame *frame, int val); 539 AVDictionary **avpriv_frame_get_metadatap(AVFrame *frame); 540 static if(FF_API_FRAME_QP){ 541 int8_t *av_frame_get_qp_table(AVFrame *f, int *stride, int *type); 542 int av_frame_set_qp_table(AVFrame *f, AVBufferRef *buf, int stride, int type); 543 } 544 AVColorSpace av_frame_get_colorspace(const AVFrame *frame); 545 void av_frame_set_colorspace(AVFrame *frame, AVColorSpace val); 546 AVColorRange av_frame_get_color_range(const AVFrame *frame); 547 void av_frame_set_color_range(AVFrame *frame, AVColorRange val); 548 549 /** 550 * Get the name of a colorspace. 551 * @return a static string identifying the colorspace; can be NULL. 552 */ 553 char *av_get_colorspace_name(AVColorSpace val); 554 555 /** 556 * Allocate an AVFrame and set its fields to default values. The resulting 557 * struct must be freed using av_frame_free(). 558 * 559 * @return An AVFrame filled with default values or NULL on failure. 560 * 561 * @note this only allocates the AVFrame itself, not the data buffers. Those 562 * must be allocated through other means, e.g. with av_frame_get_buffer() or 563 * manually. 564 */ 565 AVFrame *av_frame_alloc(); 566 567 /** 568 * Free the frame and any dynamically allocated objects in it, 569 * e.g. extended_data. If the frame is reference counted, it will be 570 * unreferenced first. 571 * 572 * @param frame frame to be freed. The pointer will be set to NULL. 573 */ 574 void av_frame_free(AVFrame **frame); 575 576 /** 577 * Set up a new reference to the data described by the source frame. 578 * 579 * Copy frame properties from src to dst and create a new reference for each 580 * AVBufferRef from src. 581 * 582 * If src is not reference counted, new buffers are allocated and the data is 583 * copied. 584 * 585 * @return 0 on success, a negative AVERROR on error 586 */ 587 int av_frame_ref(AVFrame *dst, const AVFrame *src); 588 589 /** 590 * Create a new frame that references the same data as src. 591 * 592 * This is a shortcut for av_frame_alloc()+av_frame_ref(). 593 * 594 * @return newly created AVFrame on success, NULL on error. 595 */ 596 AVFrame *av_frame_clone(const AVFrame *src); 597 598 /** 599 * Unreference all the buffers referenced by frame and reset the frame fields. 600 */ 601 void av_frame_unref(AVFrame *frame); 602 603 /** 604 * Move everythnig contained in src to dst and reset src. 605 */ 606 void av_frame_move_ref(AVFrame *dst, AVFrame *src); 607 608 /** 609 * Allocate new buffer(s) for audio or video data. 610 * 611 * The following fields must be set on frame before calling this function: 612 * - format (pixel format for video, sample format for audio) 613 * - width and height for video 614 * - nb_samples and channel_layout for audio 615 * 616 * This function will fill AVFrame.data and AVFrame.buf arrays and, if 617 * necessary, allocate and fill AVFrame.extended_data and AVFrame.extended_buf. 618 * For planar formats, one buffer will be allocated for each plane. 619 * 620 * @param frame frame in which to store the new buffers. 621 * @param align required buffer size alignment 622 * 623 * @return 0 on success, a negative AVERROR on error. 624 */ 625 int av_frame_get_buffer(AVFrame *frame, int _align); 626 627 /** 628 * Check if the frame data is writable. 629 * 630 * @return A positive value if the frame data is writable (which is true if and 631 * only if each of the underlying buffers has only one reference, namely the one 632 * stored in this frame). Return 0 otherwise. 633 * 634 * If 1 is returned the answer is valid until av_buffer_ref() is called on any 635 * of the underlying AVBufferRefs (e.g. through av_frame_ref() or directly). 636 * 637 * @see av_frame_make_writable(), av_buffer_is_writable() 638 */ 639 int av_frame_is_writable(AVFrame *frame); 640 641 /** 642 * Ensure that the frame data is writable, avoiding data copy if possible. 643 * 644 * Do nothing if the frame is writable, allocate new buffers and copy the data 645 * if it is not. 646 * 647 * @return 0 on success, a negative AVERROR on error. 648 * 649 * @see av_frame_is_writable(), av_buffer_is_writable(), 650 * av_buffer_make_writable() 651 */ 652 int av_frame_make_writable(AVFrame *frame); 653 654 /** 655 * Copy the frame data from src to dst. 656 * 657 * This function does not allocate anything, dst must be already initialized and 658 * allocated with the same parameters as src. 659 * 660 * This function only copies the frame data (i.e. the contents of the data / 661 * extended data arrays), not any other properties. 662 * 663 * @return >= 0 on success, a negative AVERROR on error. 664 */ 665 int av_frame_copy(AVFrame *dst, const AVFrame *src); 666 667 /** 668 * Copy only "metadata" fields from src to dst. 669 * 670 * Metadata for the purpose of this function are those fields that do not affect 671 * the data layout in the buffers. E.g. pts, sample rate (for audio) or sample 672 * aspect ratio (for video), but not width/height or channel layout. 673 * Side data is also copied. 674 */ 675 int av_frame_copy_props(AVFrame *dst, const AVFrame *src); 676 677 /** 678 * Get the buffer reference a given data plane is stored in. 679 * 680 * @param plane index of the data plane of interest in frame->extended_data. 681 * 682 * @return the buffer reference that contains the plane or NULL if the input 683 * frame is not valid. 684 */ 685 AVBufferRef *av_frame_get_plane_buffer(AVFrame *frame, int plane); 686 687 /** 688 * Add a new side data to a frame. 689 * 690 * @param frame a frame to which the side data should be added 691 * @param type type of the added side data 692 * @param size size of the side data 693 * 694 * @return newly added side data on success, NULL on error 695 */ 696 AVFrameSideData *av_frame_new_side_data(AVFrame *frame, 697 AVFrameSideDataType type, 698 int size); 699 700 /** 701 * @return a pointer to the side data of a given type on success, NULL if there 702 * is no side data with such type in this frame. 703 */ 704 AVFrameSideData *av_frame_get_side_data(const AVFrame *frame, 705 AVFrameSideDataType type); 706 707 /** 708 * If side data of the supplied type exists in the frame, free it and remove it 709 * from the frame. 710 */ 711 void av_frame_remove_side_data(AVFrame *frame, AVFrameSideDataType type); 712 713 /** 714 * @return a string identifying the side data type 715 */ 716 char *av_frame_side_data_name(AVFrameSideDataType type); 717 718 /** 719 * @} 720 */ 721 722 //#endif /* AVUTIL_FRAME_H */ 723 724 enum FF_DECODE_ERROR_INVALID_BITSTREAM = 1; 725 enum FF_DECODE_ERROR_MISSING_REFERENCE = 2; 726 enum AV_NUM_DATA_POINTERS = 8; 727 enum AV_FRAME_FLAG_CORRUPT = (1 << 0);