duckstation

duckstation, but archived from the revision just before upstream changed it to a proprietary software project, this version is the libre one
git clone https://git.neptards.moe/u3shit/duckstation.git
Log | Files | Refs | README | LICENSE

frame.h (38049B)


      1 /*
      2  * This file is part of FFmpeg.
      3  *
      4  * FFmpeg is free software; you can redistribute it and/or
      5  * modify it under the terms of the GNU Lesser General Public
      6  * License as published by the Free Software Foundation; either
      7  * version 2.1 of the License, or (at your option) any later version.
      8  *
      9  * FFmpeg is distributed in the hope that it will be useful,
     10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
     11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     12  * Lesser General Public License for more details.
     13  *
     14  * You should have received a copy of the GNU Lesser General Public
     15  * License along with FFmpeg; if not, write to the Free Software
     16  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
     17  */
     18 
     19 /**
     20  * @file
     21  * @ingroup lavu_frame
     22  * reference-counted frame API
     23  */
     24 
     25 #ifndef AVUTIL_FRAME_H
     26 #define AVUTIL_FRAME_H
     27 
     28 #include <stddef.h>
     29 #include <stdint.h>
     30 
     31 #include "avutil.h"
     32 #include "buffer.h"
     33 #include "channel_layout.h"
     34 #include "dict.h"
     35 #include "rational.h"
     36 #include "samplefmt.h"
     37 #include "pixfmt.h"
     38 #include "version.h"
     39 
     40 
     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      * The data represents the AVSphericalMapping structure defined in
    129      * libavutil/spherical.h.
    130      */
    131     AV_FRAME_DATA_SPHERICAL,
    132 
    133     /**
    134      * Content light level (based on CTA-861.3). This payload contains data in
    135      * the form of the AVContentLightMetadata struct.
    136      */
    137     AV_FRAME_DATA_CONTENT_LIGHT_LEVEL,
    138 
    139     /**
    140      * The data contains an ICC profile as an opaque octet buffer following the
    141      * format described by ISO 15076-1 with an optional name defined in the
    142      * metadata key entry "name".
    143      */
    144     AV_FRAME_DATA_ICC_PROFILE,
    145 
    146     /**
    147      * Timecode which conforms to SMPTE ST 12-1. The data is an array of 4 uint32_t
    148      * where the first uint32_t describes how many (1-3) of the other timecodes are used.
    149      * The timecode format is described in the documentation of av_timecode_get_smpte_from_framenum()
    150      * function in libavutil/timecode.h.
    151      */
    152     AV_FRAME_DATA_S12M_TIMECODE,
    153 
    154     /**
    155      * HDR dynamic metadata associated with a video frame. The payload is
    156      * an AVDynamicHDRPlus type and contains information for color
    157      * volume transform - application 4 of SMPTE 2094-40:2016 standard.
    158      */
    159     AV_FRAME_DATA_DYNAMIC_HDR_PLUS,
    160 
    161     /**
    162      * Regions Of Interest, the data is an array of AVRegionOfInterest type, the number of
    163      * array element is implied by AVFrameSideData.size / AVRegionOfInterest.self_size.
    164      */
    165     AV_FRAME_DATA_REGIONS_OF_INTEREST,
    166 
    167     /**
    168      * Encoding parameters for a video frame, as described by AVVideoEncParams.
    169      */
    170     AV_FRAME_DATA_VIDEO_ENC_PARAMS,
    171 
    172     /**
    173      * User data unregistered metadata associated with a video frame.
    174      * This is the H.26[45] UDU SEI message, and shouldn't be used for any other purpose
    175      * The data is stored as uint8_t in AVFrameSideData.data which is 16 bytes of
    176      * uuid_iso_iec_11578 followed by AVFrameSideData.size - 16 bytes of user_data_payload_byte.
    177      */
    178     AV_FRAME_DATA_SEI_UNREGISTERED,
    179 
    180     /**
    181      * Film grain parameters for a frame, described by AVFilmGrainParams.
    182      * Must be present for every frame which should have film grain applied.
    183      *
    184      * May be present multiple times, for example when there are multiple
    185      * alternative parameter sets for different video signal characteristics.
    186      * The user should select the most appropriate set for the application.
    187      */
    188     AV_FRAME_DATA_FILM_GRAIN_PARAMS,
    189 
    190     /**
    191      * Bounding boxes for object detection and classification,
    192      * as described by AVDetectionBBoxHeader.
    193      */
    194     AV_FRAME_DATA_DETECTION_BBOXES,
    195 
    196     /**
    197      * Dolby Vision RPU raw data, suitable for passing to x265
    198      * or other libraries. Array of uint8_t, with NAL emulation
    199      * bytes intact.
    200      */
    201     AV_FRAME_DATA_DOVI_RPU_BUFFER,
    202 
    203     /**
    204      * Parsed Dolby Vision metadata, suitable for passing to a software
    205      * implementation. The payload is the AVDOVIMetadata struct defined in
    206      * libavutil/dovi_meta.h.
    207      */
    208     AV_FRAME_DATA_DOVI_METADATA,
    209 
    210     /**
    211      * HDR Vivid dynamic metadata associated with a video frame. The payload is
    212      * an AVDynamicHDRVivid type and contains information for color
    213      * volume transform - CUVA 005.1-2021.
    214      */
    215     AV_FRAME_DATA_DYNAMIC_HDR_VIVID,
    216 
    217     /**
    218      * Ambient viewing environment metadata, as defined by H.274.
    219      */
    220     AV_FRAME_DATA_AMBIENT_VIEWING_ENVIRONMENT,
    221 
    222     /**
    223      * Provide encoder-specific hinting information about changed/unchanged
    224      * portions of a frame.  It can be used to pass information about which
    225      * macroblocks can be skipped because they didn't change from the
    226      * corresponding ones in the previous frame. This could be useful for
    227      * applications which know this information in advance to speed up
    228      * encoding.
    229      */
    230     AV_FRAME_DATA_VIDEO_HINT,
    231 };
    232 
    233 enum AVActiveFormatDescription {
    234     AV_AFD_SAME         = 8,
    235     AV_AFD_4_3          = 9,
    236     AV_AFD_16_9         = 10,
    237     AV_AFD_14_9         = 11,
    238     AV_AFD_4_3_SP_14_9  = 13,
    239     AV_AFD_16_9_SP_14_9 = 14,
    240     AV_AFD_SP_4_3       = 15,
    241 };
    242 
    243 
    244 /**
    245  * Structure to hold side data for an AVFrame.
    246  *
    247  * sizeof(AVFrameSideData) is not a part of the public ABI, so new fields may be added
    248  * to the end with a minor bump.
    249  */
    250 typedef struct AVFrameSideData {
    251     enum AVFrameSideDataType type;
    252     uint8_t *data;
    253     size_t   size;
    254     AVDictionary *metadata;
    255     AVBufferRef *buf;
    256 } AVFrameSideData;
    257 
    258 /**
    259  * Structure describing a single Region Of Interest.
    260  *
    261  * When multiple regions are defined in a single side-data block, they
    262  * should be ordered from most to least important - some encoders are only
    263  * capable of supporting a limited number of distinct regions, so will have
    264  * to truncate the list.
    265  *
    266  * When overlapping regions are defined, the first region containing a given
    267  * area of the frame applies.
    268  */
    269 typedef struct AVRegionOfInterest {
    270     /**
    271      * Must be set to the size of this data structure (that is,
    272      * sizeof(AVRegionOfInterest)).
    273      */
    274     uint32_t self_size;
    275     /**
    276      * Distance in pixels from the top edge of the frame to the top and
    277      * bottom edges and from the left edge of the frame to the left and
    278      * right edges of the rectangle defining this region of interest.
    279      *
    280      * The constraints on a region are encoder dependent, so the region
    281      * actually affected may be slightly larger for alignment or other
    282      * reasons.
    283      */
    284     int top;
    285     int bottom;
    286     int left;
    287     int right;
    288     /**
    289      * Quantisation offset.
    290      *
    291      * Must be in the range -1 to +1.  A value of zero indicates no quality
    292      * change.  A negative value asks for better quality (less quantisation),
    293      * while a positive value asks for worse quality (greater quantisation).
    294      *
    295      * The range is calibrated so that the extreme values indicate the
    296      * largest possible offset - if the rest of the frame is encoded with the
    297      * worst possible quality, an offset of -1 indicates that this region
    298      * should be encoded with the best possible quality anyway.  Intermediate
    299      * values are then interpolated in some codec-dependent way.
    300      *
    301      * For example, in 10-bit H.264 the quantisation parameter varies between
    302      * -12 and 51.  A typical qoffset value of -1/10 therefore indicates that
    303      * this region should be encoded with a QP around one-tenth of the full
    304      * range better than the rest of the frame.  So, if most of the frame
    305      * were to be encoded with a QP of around 30, this region would get a QP
    306      * of around 24 (an offset of approximately -1/10 * (51 - -12) = -6.3).
    307      * An extreme value of -1 would indicate that this region should be
    308      * encoded with the best possible quality regardless of the treatment of
    309      * the rest of the frame - that is, should be encoded at a QP of -12.
    310      */
    311     AVRational qoffset;
    312 } AVRegionOfInterest;
    313 
    314 /**
    315  * This structure describes decoded (raw) audio or video data.
    316  *
    317  * AVFrame must be allocated using av_frame_alloc(). Note that this only
    318  * allocates the AVFrame itself, the buffers for the data must be managed
    319  * through other means (see below).
    320  * AVFrame must be freed with av_frame_free().
    321  *
    322  * AVFrame is typically allocated once and then reused multiple times to hold
    323  * different data (e.g. a single AVFrame to hold frames received from a
    324  * decoder). In such a case, av_frame_unref() will free any references held by
    325  * the frame and reset it to its original clean state before it
    326  * is reused again.
    327  *
    328  * The data described by an AVFrame is usually reference counted through the
    329  * AVBuffer API. The underlying buffer references are stored in AVFrame.buf /
    330  * AVFrame.extended_buf. An AVFrame is considered to be reference counted if at
    331  * least one reference is set, i.e. if AVFrame.buf[0] != NULL. In such a case,
    332  * every single data plane must be contained in one of the buffers in
    333  * AVFrame.buf or AVFrame.extended_buf.
    334  * There may be a single buffer for all the data, or one separate buffer for
    335  * each plane, or anything in between.
    336  *
    337  * sizeof(AVFrame) is not a part of the public ABI, so new fields may be added
    338  * to the end with a minor bump.
    339  *
    340  * Fields can be accessed through AVOptions, the name string used, matches the
    341  * C structure field name for fields accessible through AVOptions. The AVClass
    342  * for AVFrame can be obtained from avcodec_get_frame_class()
    343  */
    344 typedef struct AVFrame {
    345 #define AV_NUM_DATA_POINTERS 8
    346     /**
    347      * pointer to the picture/channel planes.
    348      * This might be different from the first allocated byte. For video,
    349      * it could even point to the end of the image data.
    350      *
    351      * All pointers in data and extended_data must point into one of the
    352      * AVBufferRef in buf or extended_buf.
    353      *
    354      * Some decoders access areas outside 0,0 - width,height, please
    355      * see avcodec_align_dimensions2(). Some filters and swscale can read
    356      * up to 16 bytes beyond the planes, if these filters are to be used,
    357      * then 16 extra bytes must be allocated.
    358      *
    359      * NOTE: Pointers not needed by the format MUST be set to NULL.
    360      *
    361      * @attention In case of video, the data[] pointers can point to the
    362      * end of image data in order to reverse line order, when used in
    363      * combination with negative values in the linesize[] array.
    364      */
    365     uint8_t *data[AV_NUM_DATA_POINTERS];
    366 
    367     /**
    368      * For video, a positive or negative value, which is typically indicating
    369      * the size in bytes of each picture line, but it can also be:
    370      * - the negative byte size of lines for vertical flipping
    371      *   (with data[n] pointing to the end of the data
    372      * - a positive or negative multiple of the byte size as for accessing
    373      *   even and odd fields of a frame (possibly flipped)
    374      *
    375      * For audio, only linesize[0] may be set. For planar audio, each channel
    376      * plane must be the same size.
    377      *
    378      * For video the linesizes should be multiples of the CPUs alignment
    379      * preference, this is 16 or 32 for modern desktop CPUs.
    380      * Some code requires such alignment other code can be slower without
    381      * correct alignment, for yet other it makes no difference.
    382      *
    383      * @note The linesize may be larger than the size of usable data -- there
    384      * may be extra padding present for performance reasons.
    385      *
    386      * @attention In case of video, line size values can be negative to achieve
    387      * a vertically inverted iteration over image lines.
    388      */
    389     int linesize[AV_NUM_DATA_POINTERS];
    390 
    391     /**
    392      * pointers to the data planes/channels.
    393      *
    394      * For video, this should simply point to data[].
    395      *
    396      * For planar audio, each channel has a separate data pointer, and
    397      * linesize[0] contains the size of each channel buffer.
    398      * For packed audio, there is just one data pointer, and linesize[0]
    399      * contains the total size of the buffer for all channels.
    400      *
    401      * Note: Both data and extended_data should always be set in a valid frame,
    402      * but for planar audio with more channels that can fit in data,
    403      * extended_data must be used in order to access all channels.
    404      */
    405     uint8_t **extended_data;
    406 
    407     /**
    408      * @name Video dimensions
    409      * Video frames only. The coded dimensions (in pixels) of the video frame,
    410      * i.e. the size of the rectangle that contains some well-defined values.
    411      *
    412      * @note The part of the frame intended for display/presentation is further
    413      * restricted by the @ref cropping "Cropping rectangle".
    414      * @{
    415      */
    416     int width, height;
    417     /**
    418      * @}
    419      */
    420 
    421     /**
    422      * number of audio samples (per channel) described by this frame
    423      */
    424     int nb_samples;
    425 
    426     /**
    427      * format of the frame, -1 if unknown or unset
    428      * Values correspond to enum AVPixelFormat for video frames,
    429      * enum AVSampleFormat for audio)
    430      */
    431     int format;
    432 
    433 #if FF_API_FRAME_KEY
    434     /**
    435      * 1 -> keyframe, 0-> not
    436      *
    437      * @deprecated Use AV_FRAME_FLAG_KEY instead
    438      */
    439     attribute_deprecated
    440     int key_frame;
    441 #endif
    442 
    443     /**
    444      * Picture type of the frame.
    445      */
    446     enum AVPictureType pict_type;
    447 
    448     /**
    449      * Sample aspect ratio for the video frame, 0/1 if unknown/unspecified.
    450      */
    451     AVRational sample_aspect_ratio;
    452 
    453     /**
    454      * Presentation timestamp in time_base units (time when frame should be shown to user).
    455      */
    456     int64_t pts;
    457 
    458     /**
    459      * DTS copied from the AVPacket that triggered returning this frame. (if frame threading isn't used)
    460      * This is also the Presentation time of this AVFrame calculated from
    461      * only AVPacket.dts values without pts values.
    462      */
    463     int64_t pkt_dts;
    464 
    465     /**
    466      * Time base for the timestamps in this frame.
    467      * In the future, this field may be set on frames output by decoders or
    468      * filters, but its value will be by default ignored on input to encoders
    469      * or filters.
    470      */
    471     AVRational time_base;
    472 
    473     /**
    474      * quality (between 1 (good) and FF_LAMBDA_MAX (bad))
    475      */
    476     int quality;
    477 
    478     /**
    479      * Frame owner's private data.
    480      *
    481      * This field may be set by the code that allocates/owns the frame data.
    482      * It is then not touched by any library functions, except:
    483      * - it is copied to other references by av_frame_copy_props() (and hence by
    484      *   av_frame_ref());
    485      * - it is set to NULL when the frame is cleared by av_frame_unref()
    486      * - on the caller's explicit request. E.g. libavcodec encoders/decoders
    487      *   will copy this field to/from @ref AVPacket "AVPackets" if the caller sets
    488      *   @ref AV_CODEC_FLAG_COPY_OPAQUE.
    489      *
    490      * @see opaque_ref the reference-counted analogue
    491      */
    492     void *opaque;
    493 
    494     /**
    495      * Number of fields in this frame which should be repeated, i.e. the total
    496      * duration of this frame should be repeat_pict + 2 normal field durations.
    497      *
    498      * For interlaced frames this field may be set to 1, which signals that this
    499      * frame should be presented as 3 fields: beginning with the first field (as
    500      * determined by AV_FRAME_FLAG_TOP_FIELD_FIRST being set or not), followed
    501      * by the second field, and then the first field again.
    502      *
    503      * For progressive frames this field may be set to a multiple of 2, which
    504      * signals that this frame's duration should be (repeat_pict + 2) / 2
    505      * normal frame durations.
    506      *
    507      * @note This field is computed from MPEG2 repeat_first_field flag and its
    508      * associated flags, H.264 pic_struct from picture timing SEI, and
    509      * their analogues in other codecs. Typically it should only be used when
    510      * higher-layer timing information is not available.
    511      */
    512     int repeat_pict;
    513 
    514 #if FF_API_INTERLACED_FRAME
    515     /**
    516      * The content of the picture is interlaced.
    517      *
    518      * @deprecated Use AV_FRAME_FLAG_INTERLACED instead
    519      */
    520     attribute_deprecated
    521     int interlaced_frame;
    522 
    523     /**
    524      * If the content is interlaced, is top field displayed first.
    525      *
    526      * @deprecated Use AV_FRAME_FLAG_TOP_FIELD_FIRST instead
    527      */
    528     attribute_deprecated
    529     int top_field_first;
    530 #endif
    531 
    532 #if FF_API_PALETTE_HAS_CHANGED
    533     /**
    534      * Tell user application that palette has changed from previous frame.
    535      */
    536     attribute_deprecated
    537     int palette_has_changed;
    538 #endif
    539 
    540     /**
    541      * Sample rate of the audio data.
    542      */
    543     int sample_rate;
    544 
    545     /**
    546      * AVBuffer references backing the data for this frame. All the pointers in
    547      * data and extended_data must point inside one of the buffers in buf or
    548      * extended_buf. This array must be filled contiguously -- if buf[i] is
    549      * non-NULL then buf[j] must also be non-NULL for all j < i.
    550      *
    551      * There may be at most one AVBuffer per data plane, so for video this array
    552      * always contains all the references. For planar audio with more than
    553      * AV_NUM_DATA_POINTERS channels, there may be more buffers than can fit in
    554      * this array. Then the extra AVBufferRef pointers are stored in the
    555      * extended_buf array.
    556      */
    557     AVBufferRef *buf[AV_NUM_DATA_POINTERS];
    558 
    559     /**
    560      * For planar audio which requires more than AV_NUM_DATA_POINTERS
    561      * AVBufferRef pointers, this array will hold all the references which
    562      * cannot fit into AVFrame.buf.
    563      *
    564      * Note that this is different from AVFrame.extended_data, which always
    565      * contains all the pointers. This array only contains the extra pointers,
    566      * which cannot fit into AVFrame.buf.
    567      *
    568      * This array is always allocated using av_malloc() by whoever constructs
    569      * the frame. It is freed in av_frame_unref().
    570      */
    571     AVBufferRef **extended_buf;
    572     /**
    573      * Number of elements in extended_buf.
    574      */
    575     int        nb_extended_buf;
    576 
    577     AVFrameSideData **side_data;
    578     int            nb_side_data;
    579 
    580 /**
    581  * @defgroup lavu_frame_flags AV_FRAME_FLAGS
    582  * @ingroup lavu_frame
    583  * Flags describing additional frame properties.
    584  *
    585  * @{
    586  */
    587 
    588 /**
    589  * The frame data may be corrupted, e.g. due to decoding errors.
    590  */
    591 #define AV_FRAME_FLAG_CORRUPT       (1 << 0)
    592 /**
    593  * A flag to mark frames that are keyframes.
    594  */
    595 #define AV_FRAME_FLAG_KEY (1 << 1)
    596 /**
    597  * A flag to mark the frames which need to be decoded, but shouldn't be output.
    598  */
    599 #define AV_FRAME_FLAG_DISCARD   (1 << 2)
    600 /**
    601  * A flag to mark frames whose content is interlaced.
    602  */
    603 #define AV_FRAME_FLAG_INTERLACED (1 << 3)
    604 /**
    605  * A flag to mark frames where the top field is displayed first if the content
    606  * is interlaced.
    607  */
    608 #define AV_FRAME_FLAG_TOP_FIELD_FIRST (1 << 4)
    609 /**
    610  * @}
    611  */
    612 
    613     /**
    614      * Frame flags, a combination of @ref lavu_frame_flags
    615      */
    616     int flags;
    617 
    618     /**
    619      * MPEG vs JPEG YUV range.
    620      * - encoding: Set by user
    621      * - decoding: Set by libavcodec
    622      */
    623     enum AVColorRange color_range;
    624 
    625     enum AVColorPrimaries color_primaries;
    626 
    627     enum AVColorTransferCharacteristic color_trc;
    628 
    629     /**
    630      * YUV colorspace type.
    631      * - encoding: Set by user
    632      * - decoding: Set by libavcodec
    633      */
    634     enum AVColorSpace colorspace;
    635 
    636     enum AVChromaLocation chroma_location;
    637 
    638     /**
    639      * frame timestamp estimated using various heuristics, in stream time base
    640      * - encoding: unused
    641      * - decoding: set by libavcodec, read by user.
    642      */
    643     int64_t best_effort_timestamp;
    644 
    645 #if FF_API_FRAME_PKT
    646     /**
    647      * reordered pos from the last AVPacket that has been input into the decoder
    648      * - encoding: unused
    649      * - decoding: Read by user.
    650      * @deprecated use AV_CODEC_FLAG_COPY_OPAQUE to pass through arbitrary user
    651      *             data from packets to frames
    652      */
    653     attribute_deprecated
    654     int64_t pkt_pos;
    655 #endif
    656 
    657     /**
    658      * metadata.
    659      * - encoding: Set by user.
    660      * - decoding: Set by libavcodec.
    661      */
    662     AVDictionary *metadata;
    663 
    664     /**
    665      * decode error flags of the frame, set to a combination of
    666      * FF_DECODE_ERROR_xxx flags if the decoder produced a frame, but there
    667      * were errors during the decoding.
    668      * - encoding: unused
    669      * - decoding: set by libavcodec, read by user.
    670      */
    671     int decode_error_flags;
    672 #define FF_DECODE_ERROR_INVALID_BITSTREAM   1
    673 #define FF_DECODE_ERROR_MISSING_REFERENCE   2
    674 #define FF_DECODE_ERROR_CONCEALMENT_ACTIVE  4
    675 #define FF_DECODE_ERROR_DECODE_SLICES       8
    676 
    677 #if FF_API_FRAME_PKT
    678     /**
    679      * size of the corresponding packet containing the compressed
    680      * frame.
    681      * It is set to a negative value if unknown.
    682      * - encoding: unused
    683      * - decoding: set by libavcodec, read by user.
    684      * @deprecated use AV_CODEC_FLAG_COPY_OPAQUE to pass through arbitrary user
    685      *             data from packets to frames
    686      */
    687     attribute_deprecated
    688     int pkt_size;
    689 #endif
    690 
    691     /**
    692      * For hwaccel-format frames, this should be a reference to the
    693      * AVHWFramesContext describing the frame.
    694      */
    695     AVBufferRef *hw_frames_ctx;
    696 
    697     /**
    698      * Frame owner's private data.
    699      *
    700      * This field may be set by the code that allocates/owns the frame data.
    701      * It is then not touched by any library functions, except:
    702      * - a new reference to the underlying buffer is propagated by
    703      *   av_frame_copy_props() (and hence by av_frame_ref());
    704      * - it is unreferenced in av_frame_unref();
    705      * - on the caller's explicit request. E.g. libavcodec encoders/decoders
    706      *   will propagate a new reference to/from @ref AVPacket "AVPackets" if the
    707      *   caller sets @ref AV_CODEC_FLAG_COPY_OPAQUE.
    708      *
    709      * @see opaque the plain pointer analogue
    710      */
    711     AVBufferRef *opaque_ref;
    712 
    713     /**
    714      * @anchor cropping
    715      * @name Cropping
    716      * Video frames only. The number of pixels to discard from the the
    717      * top/bottom/left/right border of the frame to obtain the sub-rectangle of
    718      * the frame intended for presentation.
    719      * @{
    720      */
    721     size_t crop_top;
    722     size_t crop_bottom;
    723     size_t crop_left;
    724     size_t crop_right;
    725     /**
    726      * @}
    727      */
    728 
    729     /**
    730      * AVBufferRef for internal use by a single libav* library.
    731      * Must not be used to transfer data between libraries.
    732      * Has to be NULL when ownership of the frame leaves the respective library.
    733      *
    734      * Code outside the FFmpeg libs should never check or change the contents of the buffer ref.
    735      *
    736      * FFmpeg calls av_buffer_unref() on it when the frame is unreferenced.
    737      * av_frame_copy_props() calls create a new reference with av_buffer_ref()
    738      * for the target frame's private_ref field.
    739      */
    740     AVBufferRef *private_ref;
    741 
    742     /**
    743      * Channel layout of the audio data.
    744      */
    745     AVChannelLayout ch_layout;
    746 
    747     /**
    748      * Duration of the frame, in the same units as pts. 0 if unknown.
    749      */
    750     int64_t duration;
    751 } AVFrame;
    752 
    753 
    754 /**
    755  * Allocate an AVFrame and set its fields to default values.  The resulting
    756  * struct must be freed using av_frame_free().
    757  *
    758  * @return An AVFrame filled with default values or NULL on failure.
    759  *
    760  * @note this only allocates the AVFrame itself, not the data buffers. Those
    761  * must be allocated through other means, e.g. with av_frame_get_buffer() or
    762  * manually.
    763  */
    764 AVFrame *av_frame_alloc(void);
    765 
    766 /**
    767  * Free the frame and any dynamically allocated objects in it,
    768  * e.g. extended_data. If the frame is reference counted, it will be
    769  * unreferenced first.
    770  *
    771  * @param frame frame to be freed. The pointer will be set to NULL.
    772  */
    773 void av_frame_free(AVFrame **frame);
    774 
    775 /**
    776  * Set up a new reference to the data described by the source frame.
    777  *
    778  * Copy frame properties from src to dst and create a new reference for each
    779  * AVBufferRef from src.
    780  *
    781  * If src is not reference counted, new buffers are allocated and the data is
    782  * copied.
    783  *
    784  * @warning: dst MUST have been either unreferenced with av_frame_unref(dst),
    785  *           or newly allocated with av_frame_alloc() before calling this
    786  *           function, or undefined behavior will occur.
    787  *
    788  * @return 0 on success, a negative AVERROR on error
    789  */
    790 int av_frame_ref(AVFrame *dst, const AVFrame *src);
    791 
    792 /**
    793  * Ensure the destination frame refers to the same data described by the source
    794  * frame, either by creating a new reference for each AVBufferRef from src if
    795  * they differ from those in dst, by allocating new buffers and copying data if
    796  * src is not reference counted, or by unrefencing it if src is empty.
    797  *
    798  * Frame properties on dst will be replaced by those from src.
    799  *
    800  * @return 0 on success, a negative AVERROR on error. On error, dst is
    801  *         unreferenced.
    802  */
    803 int av_frame_replace(AVFrame *dst, const AVFrame *src);
    804 
    805 /**
    806  * Create a new frame that references the same data as src.
    807  *
    808  * This is a shortcut for av_frame_alloc()+av_frame_ref().
    809  *
    810  * @return newly created AVFrame on success, NULL on error.
    811  */
    812 AVFrame *av_frame_clone(const AVFrame *src);
    813 
    814 /**
    815  * Unreference all the buffers referenced by frame and reset the frame fields.
    816  */
    817 void av_frame_unref(AVFrame *frame);
    818 
    819 /**
    820  * Move everything contained in src to dst and reset src.
    821  *
    822  * @warning: dst is not unreferenced, but directly overwritten without reading
    823  *           or deallocating its contents. Call av_frame_unref(dst) manually
    824  *           before calling this function to ensure that no memory is leaked.
    825  */
    826 void av_frame_move_ref(AVFrame *dst, AVFrame *src);
    827 
    828 /**
    829  * Allocate new buffer(s) for audio or video data.
    830  *
    831  * The following fields must be set on frame before calling this function:
    832  * - format (pixel format for video, sample format for audio)
    833  * - width and height for video
    834  * - nb_samples and ch_layout for audio
    835  *
    836  * This function will fill AVFrame.data and AVFrame.buf arrays and, if
    837  * necessary, allocate and fill AVFrame.extended_data and AVFrame.extended_buf.
    838  * For planar formats, one buffer will be allocated for each plane.
    839  *
    840  * @warning: if frame already has been allocated, calling this function will
    841  *           leak memory. In addition, undefined behavior can occur in certain
    842  *           cases.
    843  *
    844  * @param frame frame in which to store the new buffers.
    845  * @param align Required buffer size alignment. If equal to 0, alignment will be
    846  *              chosen automatically for the current CPU. It is highly
    847  *              recommended to pass 0 here unless you know what you are doing.
    848  *
    849  * @return 0 on success, a negative AVERROR on error.
    850  */
    851 int av_frame_get_buffer(AVFrame *frame, int align);
    852 
    853 /**
    854  * Check if the frame data is writable.
    855  *
    856  * @return A positive value if the frame data is writable (which is true if and
    857  * only if each of the underlying buffers has only one reference, namely the one
    858  * stored in this frame). Return 0 otherwise.
    859  *
    860  * If 1 is returned the answer is valid until av_buffer_ref() is called on any
    861  * of the underlying AVBufferRefs (e.g. through av_frame_ref() or directly).
    862  *
    863  * @see av_frame_make_writable(), av_buffer_is_writable()
    864  */
    865 int av_frame_is_writable(AVFrame *frame);
    866 
    867 /**
    868  * Ensure that the frame data is writable, avoiding data copy if possible.
    869  *
    870  * Do nothing if the frame is writable, allocate new buffers and copy the data
    871  * if it is not. Non-refcounted frames behave as non-writable, i.e. a copy
    872  * is always made.
    873  *
    874  * @return 0 on success, a negative AVERROR on error.
    875  *
    876  * @see av_frame_is_writable(), av_buffer_is_writable(),
    877  * av_buffer_make_writable()
    878  */
    879 int av_frame_make_writable(AVFrame *frame);
    880 
    881 /**
    882  * Copy the frame data from src to dst.
    883  *
    884  * This function does not allocate anything, dst must be already initialized and
    885  * allocated with the same parameters as src.
    886  *
    887  * This function only copies the frame data (i.e. the contents of the data /
    888  * extended data arrays), not any other properties.
    889  *
    890  * @return >= 0 on success, a negative AVERROR on error.
    891  */
    892 int av_frame_copy(AVFrame *dst, const AVFrame *src);
    893 
    894 /**
    895  * Copy only "metadata" fields from src to dst.
    896  *
    897  * Metadata for the purpose of this function are those fields that do not affect
    898  * the data layout in the buffers.  E.g. pts, sample rate (for audio) or sample
    899  * aspect ratio (for video), but not width/height or channel layout.
    900  * Side data is also copied.
    901  */
    902 int av_frame_copy_props(AVFrame *dst, const AVFrame *src);
    903 
    904 /**
    905  * Get the buffer reference a given data plane is stored in.
    906  *
    907  * @param frame the frame to get the plane's buffer from
    908  * @param plane index of the data plane of interest in frame->extended_data.
    909  *
    910  * @return the buffer reference that contains the plane or NULL if the input
    911  * frame is not valid.
    912  */
    913 AVBufferRef *av_frame_get_plane_buffer(const AVFrame *frame, int plane);
    914 
    915 /**
    916  * Add a new side data to a frame.
    917  *
    918  * @param frame a frame to which the side data should be added
    919  * @param type type of the added side data
    920  * @param size size of the side data
    921  *
    922  * @return newly added side data on success, NULL on error
    923  */
    924 AVFrameSideData *av_frame_new_side_data(AVFrame *frame,
    925                                         enum AVFrameSideDataType type,
    926                                         size_t size);
    927 
    928 /**
    929  * Add a new side data to a frame from an existing AVBufferRef
    930  *
    931  * @param frame a frame to which the side data should be added
    932  * @param type  the type of the added side data
    933  * @param buf   an AVBufferRef to add as side data. The ownership of
    934  *              the reference is transferred to the frame.
    935  *
    936  * @return newly added side data on success, NULL on error. On failure
    937  *         the frame is unchanged and the AVBufferRef remains owned by
    938  *         the caller.
    939  */
    940 AVFrameSideData *av_frame_new_side_data_from_buf(AVFrame *frame,
    941                                                  enum AVFrameSideDataType type,
    942                                                  AVBufferRef *buf);
    943 
    944 /**
    945  * @return a pointer to the side data of a given type on success, NULL if there
    946  * is no side data with such type in this frame.
    947  */
    948 AVFrameSideData *av_frame_get_side_data(const AVFrame *frame,
    949                                         enum AVFrameSideDataType type);
    950 
    951 /**
    952  * Remove and free all side data instances of the given type.
    953  */
    954 void av_frame_remove_side_data(AVFrame *frame, enum AVFrameSideDataType type);
    955 
    956 
    957 /**
    958  * Flags for frame cropping.
    959  */
    960 enum {
    961     /**
    962      * Apply the maximum possible cropping, even if it requires setting the
    963      * AVFrame.data[] entries to unaligned pointers. Passing unaligned data
    964      * to FFmpeg API is generally not allowed, and causes undefined behavior
    965      * (such as crashes). You can pass unaligned data only to FFmpeg APIs that
    966      * are explicitly documented to accept it. Use this flag only if you
    967      * absolutely know what you are doing.
    968      */
    969     AV_FRAME_CROP_UNALIGNED     = 1 << 0,
    970 };
    971 
    972 /**
    973  * Crop the given video AVFrame according to its crop_left/crop_top/crop_right/
    974  * crop_bottom fields. If cropping is successful, the function will adjust the
    975  * data pointers and the width/height fields, and set the crop fields to 0.
    976  *
    977  * In all cases, the cropping boundaries will be rounded to the inherent
    978  * alignment of the pixel format. In some cases, such as for opaque hwaccel
    979  * formats, the left/top cropping is ignored. The crop fields are set to 0 even
    980  * if the cropping was rounded or ignored.
    981  *
    982  * @param frame the frame which should be cropped
    983  * @param flags Some combination of AV_FRAME_CROP_* flags, or 0.
    984  *
    985  * @return >= 0 on success, a negative AVERROR on error. If the cropping fields
    986  * were invalid, AVERROR(ERANGE) is returned, and nothing is changed.
    987  */
    988 int av_frame_apply_cropping(AVFrame *frame, int flags);
    989 
    990 /**
    991  * @return a string identifying the side data type
    992  */
    993 const char *av_frame_side_data_name(enum AVFrameSideDataType type);
    994 
    995 /**
    996  * Free all side data entries and their contents, then zeroes out the
    997  * values which the pointers are pointing to.
    998  *
    999  * @param sd    pointer to array of side data to free. Will be set to NULL
   1000  *              upon return.
   1001  * @param nb_sd pointer to an integer containing the number of entries in
   1002  *              the array. Will be set to 0 upon return.
   1003  */
   1004 void av_frame_side_data_free(AVFrameSideData ***sd, int *nb_sd);
   1005 
   1006 #define AV_FRAME_SIDE_DATA_FLAG_UNIQUE (1 << 0)
   1007 
   1008 /**
   1009  * Add new side data entry to an array.
   1010  *
   1011  * @param sd    pointer to array of side data to which to add another entry,
   1012  *              or to NULL in order to start a new array.
   1013  * @param nb_sd pointer to an integer containing the number of entries in
   1014  *              the array.
   1015  * @param type  type of the added side data
   1016  * @param size  size of the side data
   1017  * @param flags Some combination of AV_FRAME_SIDE_DATA_FLAG_* flags, or 0.
   1018  *
   1019  * @return newly added side data on success, NULL on error. In case of
   1020  *         AV_FRAME_SIDE_DATA_FLAG_UNIQUE being set, entries of matching
   1021  *         AVFrameSideDataType will be removed before the addition is
   1022  *         attempted.
   1023  */
   1024 AVFrameSideData *av_frame_side_data_new(AVFrameSideData ***sd, int *nb_sd,
   1025                                         enum AVFrameSideDataType type,
   1026                                         size_t size, unsigned int flags);
   1027 
   1028 /**
   1029  * Add a new side data entry to an array based on existing side data, taking
   1030  * a reference towards the contained AVBufferRef.
   1031  *
   1032  * @param sd    pointer to array of side data to which to add another entry,
   1033  *              or to NULL in order to start a new array.
   1034  * @param nb_sd pointer to an integer containing the number of entries in
   1035  *              the array.
   1036  * @param src   side data to be cloned, with a new reference utilized
   1037  *              for the buffer.
   1038  * @param flags Some combination of AV_FRAME_SIDE_DATA_FLAG_* flags, or 0.
   1039  *
   1040  * @return negative error code on failure, >=0 on success. In case of
   1041  *         AV_FRAME_SIDE_DATA_FLAG_UNIQUE being set, entries of matching
   1042  *         AVFrameSideDataType will be removed before the addition is
   1043  *         attempted.
   1044  */
   1045 int av_frame_side_data_clone(AVFrameSideData ***sd, int *nb_sd,
   1046                              const AVFrameSideData *src, unsigned int flags);
   1047 
   1048 /**
   1049  * Get a side data entry of a specific type from an array.
   1050  *
   1051  * @param sd    array of side data.
   1052  * @param nb_sd integer containing the number of entries in the array.
   1053  * @param type  type of side data to be queried
   1054  *
   1055  * @return a pointer to the side data of a given type on success, NULL if there
   1056  *         is no side data with such type in this set.
   1057  */
   1058 const AVFrameSideData *av_frame_side_data_get_c(const AVFrameSideData * const *sd,
   1059                                                 const int nb_sd,
   1060                                                 enum AVFrameSideDataType type);
   1061 
   1062 /**
   1063  * Wrapper around av_frame_side_data_get_c() to workaround the limitation
   1064  * that for any type T the conversion from T * const * to const T * const *
   1065  * is not performed automatically in C.
   1066  * @see av_frame_side_data_get_c()
   1067  */
   1068 static inline
   1069 const AVFrameSideData *av_frame_side_data_get(AVFrameSideData * const *sd,
   1070                                               const int nb_sd,
   1071                                               enum AVFrameSideDataType type)
   1072 {
   1073     return av_frame_side_data_get_c((const AVFrameSideData * const *)sd,
   1074                                     nb_sd, type);
   1075 }
   1076 
   1077 /**
   1078  * @}
   1079  */
   1080 
   1081 #endif /* AVUTIL_FRAME_H */