tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

frame.h (37707B)


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