tor-browser

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

frame.h (31055B)


      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  AV_FRAME_DATA_FILM_GRAIN_PARAMS,
    187 
    188  /**
    189   * Bounding boxes for object detection and classification,
    190   * as described by AVDetectionBBoxHeader.
    191   */
    192  AV_FRAME_DATA_DETECTION_BBOXES,
    193 
    194  /**
    195   * Dolby Vision RPU raw data, suitable for passing to x265
    196   * or other libraries. Array of uint8_t, with NAL emulation
    197   * bytes intact.
    198   */
    199  AV_FRAME_DATA_DOVI_RPU_BUFFER,
    200 
    201  /**
    202   * Parsed Dolby Vision metadata, suitable for passing to a software
    203   * implementation. The payload is the AVDOVIMetadata struct defined in
    204   * libavutil/dovi_meta.h.
    205   */
    206  AV_FRAME_DATA_DOVI_METADATA,
    207 
    208  /**
    209   * HDR Vivid dynamic metadata associated with a video frame. The payload is
    210   * an AVDynamicHDRVivid type and contains information for color
    211   * volume transform - CUVA 005.1-2021.
    212   */
    213  AV_FRAME_DATA_DYNAMIC_HDR_VIVID,
    214 
    215  /**
    216   * Ambient viewing environment metadata, as defined by H.274.
    217   */
    218  AV_FRAME_DATA_AMBIENT_VIEWING_ENVIRONMENT,
    219 };
    220 
    221 enum AVActiveFormatDescription {
    222  AV_AFD_SAME = 8,
    223  AV_AFD_4_3 = 9,
    224  AV_AFD_16_9 = 10,
    225  AV_AFD_14_9 = 11,
    226  AV_AFD_4_3_SP_14_9 = 13,
    227  AV_AFD_16_9_SP_14_9 = 14,
    228  AV_AFD_SP_4_3 = 15,
    229 };
    230 
    231 /**
    232 * Structure to hold side data for an AVFrame.
    233 *
    234 * sizeof(AVFrameSideData) is not a part of the public ABI, so new fields may be
    235 * added to the end with a minor bump.
    236 */
    237 typedef struct AVFrameSideData {
    238  enum AVFrameSideDataType type;
    239  uint8_t* data;
    240  size_t size;
    241  AVDictionary* metadata;
    242  AVBufferRef* buf;
    243 } AVFrameSideData;
    244 
    245 /**
    246 * Structure describing a single Region Of Interest.
    247 *
    248 * When multiple regions are defined in a single side-data block, they
    249 * should be ordered from most to least important - some encoders are only
    250 * capable of supporting a limited number of distinct regions, so will have
    251 * to truncate the list.
    252 *
    253 * When overlapping regions are defined, the first region containing a given
    254 * area of the frame applies.
    255 */
    256 typedef struct AVRegionOfInterest {
    257  /**
    258   * Must be set to the size of this data structure (that is,
    259   * sizeof(AVRegionOfInterest)).
    260   */
    261  uint32_t self_size;
    262  /**
    263   * Distance in pixels from the top edge of the frame to the top and
    264   * bottom edges and from the left edge of the frame to the left and
    265   * right edges of the rectangle defining this region of interest.
    266   *
    267   * The constraints on a region are encoder dependent, so the region
    268   * actually affected may be slightly larger for alignment or other
    269   * reasons.
    270   */
    271  int top;
    272  int bottom;
    273  int left;
    274  int right;
    275  /**
    276   * Quantisation offset.
    277   *
    278   * Must be in the range -1 to +1.  A value of zero indicates no quality
    279   * change.  A negative value asks for better quality (less quantisation),
    280   * while a positive value asks for worse quality (greater quantisation).
    281   *
    282   * The range is calibrated so that the extreme values indicate the
    283   * largest possible offset - if the rest of the frame is encoded with the
    284   * worst possible quality, an offset of -1 indicates that this region
    285   * should be encoded with the best possible quality anyway.  Intermediate
    286   * values are then interpolated in some codec-dependent way.
    287   *
    288   * For example, in 10-bit H.264 the quantisation parameter varies between
    289   * -12 and 51.  A typical qoffset value of -1/10 therefore indicates that
    290   * this region should be encoded with a QP around one-tenth of the full
    291   * range better than the rest of the frame.  So, if most of the frame
    292   * were to be encoded with a QP of around 30, this region would get a QP
    293   * of around 24 (an offset of approximately -1/10 * (51 - -12) = -6.3).
    294   * An extreme value of -1 would indicate that this region should be
    295   * encoded with the best possible quality regardless of the treatment of
    296   * the rest of the frame - that is, should be encoded at a QP of -12.
    297   */
    298  AVRational qoffset;
    299 } AVRegionOfInterest;
    300 
    301 /**
    302 * This structure describes decoded (raw) audio or video data.
    303 *
    304 * AVFrame must be allocated using av_frame_alloc(). Note that this only
    305 * allocates the AVFrame itself, the buffers for the data must be managed
    306 * through other means (see below).
    307 * AVFrame must be freed with av_frame_free().
    308 *
    309 * AVFrame is typically allocated once and then reused multiple times to hold
    310 * different data (e.g. a single AVFrame to hold frames received from a
    311 * decoder). In such a case, av_frame_unref() will free any references held by
    312 * the frame and reset it to its original clean state before it
    313 * is reused again.
    314 *
    315 * The data described by an AVFrame is usually reference counted through the
    316 * AVBuffer API. The underlying buffer references are stored in AVFrame.buf /
    317 * AVFrame.extended_buf. An AVFrame is considered to be reference counted if at
    318 * least one reference is set, i.e. if AVFrame.buf[0] != NULL. In such a case,
    319 * every single data plane must be contained in one of the buffers in
    320 * AVFrame.buf or AVFrame.extended_buf.
    321 * There may be a single buffer for all the data, or one separate buffer for
    322 * each plane, or anything in between.
    323 *
    324 * sizeof(AVFrame) is not a part of the public ABI, so new fields may be added
    325 * to the end with a minor bump.
    326 *
    327 * Fields can be accessed through AVOptions, the name string used, matches the
    328 * C structure field name for fields accessible through AVOptions. The AVClass
    329 * for AVFrame can be obtained from avcodec_get_frame_class()
    330 */
    331 typedef struct AVFrame {
    332 #define AV_NUM_DATA_POINTERS 8
    333  /**
    334   * pointer to the picture/channel planes.
    335   * This might be different from the first allocated byte. For video,
    336   * it could even point to the end of the image data.
    337   *
    338   * All pointers in data and extended_data must point into one of the
    339   * AVBufferRef in buf or extended_buf.
    340   *
    341   * Some decoders access areas outside 0,0 - width,height, please
    342   * see avcodec_align_dimensions2(). Some filters and swscale can read
    343   * up to 16 bytes beyond the planes, if these filters are to be used,
    344   * then 16 extra bytes must be allocated.
    345   *
    346   * NOTE: Pointers not needed by the format MUST be set to NULL.
    347   *
    348   * @attention In case of video, the data[] pointers can point to the
    349   * end of image data in order to reverse line order, when used in
    350   * combination with negative values in the linesize[] array.
    351   */
    352  uint8_t* data[AV_NUM_DATA_POINTERS];
    353 
    354  /**
    355   * For video, a positive or negative value, which is typically indicating
    356   * the size in bytes of each picture line, but it can also be:
    357   * - the negative byte size of lines for vertical flipping
    358   *   (with data[n] pointing to the end of the data
    359   * - a positive or negative multiple of the byte size as for accessing
    360   *   even and odd fields of a frame (possibly flipped)
    361   *
    362   * For audio, only linesize[0] may be set. For planar audio, each channel
    363   * plane must be the same size.
    364   *
    365   * For video the linesizes should be multiples of the CPUs alignment
    366   * preference, this is 16 or 32 for modern desktop CPUs.
    367   * Some code requires such alignment other code can be slower without
    368   * correct alignment, for yet other it makes no difference.
    369   *
    370   * @note The linesize may be larger than the size of usable data -- there
    371   * may be extra padding present for performance reasons.
    372   *
    373   * @attention In case of video, line size values can be negative to achieve
    374   * a vertically inverted iteration over image lines.
    375   */
    376  int linesize[AV_NUM_DATA_POINTERS];
    377 
    378  /**
    379   * pointers to the data planes/channels.
    380   *
    381   * For video, this should simply point to data[].
    382   *
    383   * For planar audio, each channel has a separate data pointer, and
    384   * linesize[0] contains the size of each channel buffer.
    385   * For packed audio, there is just one data pointer, and linesize[0]
    386   * contains the total size of the buffer for all channels.
    387   *
    388   * Note: Both data and extended_data should always be set in a valid frame,
    389   * but for planar audio with more channels that can fit in data,
    390   * extended_data must be used in order to access all channels.
    391   */
    392  uint8_t** extended_data;
    393 
    394  /**
    395   * @name Video dimensions
    396   * Video frames only. The coded dimensions (in pixels) of the video frame,
    397   * i.e. the size of the rectangle that contains some well-defined values.
    398   *
    399   * @note The part of the frame intended for display/presentation is further
    400   * restricted by the @ref cropping "Cropping rectangle".
    401   * @{
    402   */
    403  int width, height;
    404  /**
    405   * @}
    406   */
    407 
    408  /**
    409   * number of audio samples (per channel) described by this frame
    410   */
    411  int nb_samples;
    412 
    413  /**
    414   * format of the frame, -1 if unknown or unset
    415   * Values correspond to enum AVPixelFormat for video frames,
    416   * enum AVSampleFormat for audio)
    417   */
    418  int format;
    419 
    420  /**
    421   * 1 -> keyframe, 0-> not
    422   */
    423  int key_frame;
    424 
    425  /**
    426   * Picture type of the frame.
    427   */
    428  enum AVPictureType pict_type;
    429 
    430  /**
    431   * Sample aspect ratio for the video frame, 0/1 if unknown/unspecified.
    432   */
    433  AVRational sample_aspect_ratio;
    434 
    435  /**
    436   * Presentation timestamp in time_base units (time when frame should be shown
    437   * to user).
    438   */
    439  int64_t pts;
    440 
    441  /**
    442   * DTS copied from the AVPacket that triggered returning this frame. (if frame
    443   * threading isn't used) This is also the Presentation time of this AVFrame
    444   * calculated from only AVPacket.dts values without pts values.
    445   */
    446  int64_t pkt_dts;
    447 
    448  /**
    449   * Time base for the timestamps in this frame.
    450   * In the future, this field may be set on frames output by decoders or
    451   * filters, but its value will be by default ignored on input to encoders
    452   * or filters.
    453   */
    454  AVRational time_base;
    455 
    456 #if FF_API_FRAME_PICTURE_NUMBER
    457  /**
    458   * picture number in bitstream order
    459   */
    460  attribute_deprecated int coded_picture_number;
    461  /**
    462   * picture number in display order
    463   */
    464  attribute_deprecated int display_picture_number;
    465 #endif
    466 
    467  /**
    468   * quality (between 1 (good) and FF_LAMBDA_MAX (bad))
    469   */
    470  int quality;
    471 
    472  /**
    473   * for some private data of the user
    474   */
    475  void* opaque;
    476 
    477  /**
    478   * When decoding, this signals how much the picture must be delayed.
    479   * extra_delay = repeat_pict / (2*fps)
    480   */
    481  int repeat_pict;
    482 
    483  /**
    484   * The content of the picture is interlaced.
    485   */
    486  int interlaced_frame;
    487 
    488  /**
    489   * If the content is interlaced, is top field displayed first.
    490   */
    491  int top_field_first;
    492 
    493  /**
    494   * Tell user application that palette has changed from previous frame.
    495   */
    496  int palette_has_changed;
    497 
    498 #if FF_API_REORDERED_OPAQUE
    499  /**
    500   * reordered opaque 64 bits (generally an integer or a double precision float
    501   * PTS but can be anything).
    502   * The user sets AVCodecContext.reordered_opaque to represent the input at
    503   * that time,
    504   * the decoder reorders values as needed and sets AVFrame.reordered_opaque
    505   * to exactly one of the values provided by the user through
    506   * AVCodecContext.reordered_opaque
    507   *
    508   * @deprecated Use AV_CODEC_FLAG_COPY_OPAQUE instead
    509   */
    510  attribute_deprecated int64_t reordered_opaque;
    511 #endif
    512 
    513  /**
    514   * Sample rate of the audio data.
    515   */
    516  int sample_rate;
    517 
    518 #if FF_API_OLD_CHANNEL_LAYOUT
    519  /**
    520   * Channel layout of the audio data.
    521   * @deprecated use ch_layout instead
    522   */
    523  attribute_deprecated uint64_t channel_layout;
    524 #endif
    525 
    526  /**
    527   * AVBuffer references backing the data for this frame. All the pointers in
    528   * data and extended_data must point inside one of the buffers in buf or
    529   * extended_buf. This array must be filled contiguously -- if buf[i] is
    530   * non-NULL then buf[j] must also be non-NULL for all j < i.
    531   *
    532   * There may be at most one AVBuffer per data plane, so for video this array
    533   * always contains all the references. For planar audio with more than
    534   * AV_NUM_DATA_POINTERS channels, there may be more buffers than can fit in
    535   * this array. Then the extra AVBufferRef pointers are stored in the
    536   * extended_buf array.
    537   */
    538  AVBufferRef* buf[AV_NUM_DATA_POINTERS];
    539 
    540  /**
    541   * For planar audio which requires more than AV_NUM_DATA_POINTERS
    542   * AVBufferRef pointers, this array will hold all the references which
    543   * cannot fit into AVFrame.buf.
    544   *
    545   * Note that this is different from AVFrame.extended_data, which always
    546   * contains all the pointers. This array only contains the extra pointers,
    547   * which cannot fit into AVFrame.buf.
    548   *
    549   * This array is always allocated using av_malloc() by whoever constructs
    550   * the frame. It is freed in av_frame_unref().
    551   */
    552  AVBufferRef** extended_buf;
    553  /**
    554   * Number of elements in extended_buf.
    555   */
    556  int nb_extended_buf;
    557 
    558  AVFrameSideData** side_data;
    559  int nb_side_data;
    560 
    561 /**
    562 * @defgroup lavu_frame_flags AV_FRAME_FLAGS
    563 * @ingroup lavu_frame
    564 * Flags describing additional frame properties.
    565 *
    566 * @{
    567 */
    568 
    569 /**
    570 * The frame data may be corrupted, e.g. due to decoding errors.
    571 */
    572 #define AV_FRAME_FLAG_CORRUPT (1 << 0)
    573 /**
    574 * A flag to mark the frames which need to be decoded, but shouldn't be output.
    575 */
    576 #define AV_FRAME_FLAG_DISCARD (1 << 2)
    577  /**
    578   * @}
    579   */
    580 
    581  /**
    582   * Frame flags, a combination of @ref lavu_frame_flags
    583   */
    584  int flags;
    585 
    586  /**
    587   * MPEG vs JPEG YUV range.
    588   * - encoding: Set by user
    589   * - decoding: Set by libavcodec
    590   */
    591  enum AVColorRange color_range;
    592 
    593  enum AVColorPrimaries color_primaries;
    594 
    595  enum AVColorTransferCharacteristic color_trc;
    596 
    597  /**
    598   * YUV colorspace type.
    599   * - encoding: Set by user
    600   * - decoding: Set by libavcodec
    601   */
    602  enum AVColorSpace colorspace;
    603 
    604  enum AVChromaLocation chroma_location;
    605 
    606  /**
    607   * frame timestamp estimated using various heuristics, in stream time base
    608   * - encoding: unused
    609   * - decoding: set by libavcodec, read by user.
    610   */
    611  int64_t best_effort_timestamp;
    612 
    613  /**
    614   * reordered pos from the last AVPacket that has been input into the decoder
    615   * - encoding: unused
    616   * - decoding: Read by user.
    617   */
    618  int64_t pkt_pos;
    619 
    620 #if FF_API_PKT_DURATION
    621  /**
    622   * duration of the corresponding packet, expressed in
    623   * AVStream->time_base units, 0 if unknown.
    624   * - encoding: unused
    625   * - decoding: Read by user.
    626   *
    627   * @deprecated use duration instead
    628   */
    629  attribute_deprecated int64_t pkt_duration;
    630 #endif
    631 
    632  /**
    633   * metadata.
    634   * - encoding: Set by user.
    635   * - decoding: Set by libavcodec.
    636   */
    637  AVDictionary* metadata;
    638 
    639  /**
    640   * decode error flags of the frame, set to a combination of
    641   * FF_DECODE_ERROR_xxx flags if the decoder produced a frame, but there
    642   * were errors during the decoding.
    643   * - encoding: unused
    644   * - decoding: set by libavcodec, read by user.
    645   */
    646  int decode_error_flags;
    647 #define FF_DECODE_ERROR_INVALID_BITSTREAM 1
    648 #define FF_DECODE_ERROR_MISSING_REFERENCE 2
    649 #define FF_DECODE_ERROR_CONCEALMENT_ACTIVE 4
    650 #define FF_DECODE_ERROR_DECODE_SLICES 8
    651 
    652 #if FF_API_OLD_CHANNEL_LAYOUT
    653  /**
    654   * number of audio channels, only used for audio.
    655   * - encoding: unused
    656   * - decoding: Read by user.
    657   * @deprecated use ch_layout instead
    658   */
    659  attribute_deprecated int channels;
    660 #endif
    661 
    662  /**
    663   * size of the corresponding packet containing the compressed
    664   * frame.
    665   * It is set to a negative value if unknown.
    666   * - encoding: unused
    667   * - decoding: set by libavcodec, read by user.
    668   */
    669  int pkt_size;
    670 
    671  /**
    672   * For hwaccel-format frames, this should be a reference to the
    673   * AVHWFramesContext describing the frame.
    674   */
    675  AVBufferRef* hw_frames_ctx;
    676 
    677  /**
    678   * AVBufferRef for free use by the API user. FFmpeg will never check the
    679   * contents of the buffer ref. FFmpeg calls av_buffer_unref() on it when
    680   * the frame is unreferenced. av_frame_copy_props() calls create a new
    681   * reference with av_buffer_ref() for the target frame's opaque_ref field.
    682   *
    683   * This is unrelated to the opaque field, although it serves a similar
    684   * purpose.
    685   */
    686  AVBufferRef* opaque_ref;
    687 
    688  /**
    689   * @anchor cropping
    690   * @name Cropping
    691   * Video frames only. The number of pixels to discard from the the
    692   * top/bottom/left/right border of the frame to obtain the sub-rectangle of
    693   * the frame intended for presentation.
    694   * @{
    695   */
    696  size_t crop_top;
    697  size_t crop_bottom;
    698  size_t crop_left;
    699  size_t crop_right;
    700  /**
    701   * @}
    702   */
    703 
    704  /**
    705   * AVBufferRef for internal use by a single libav* library.
    706   * Must not be used to transfer data between libraries.
    707   * Has to be NULL when ownership of the frame leaves the respective library.
    708   *
    709   * Code outside the FFmpeg libs should never check or change the contents of
    710   * the buffer ref.
    711   *
    712   * FFmpeg calls av_buffer_unref() on it when the frame is unreferenced.
    713   * av_frame_copy_props() calls create a new reference with av_buffer_ref()
    714   * for the target frame's private_ref field.
    715   */
    716  AVBufferRef* private_ref;
    717 
    718  /**
    719   * Channel layout of the audio data.
    720   */
    721  AVChannelLayout ch_layout;
    722 
    723  /**
    724   * Duration of the frame, in the same units as pts. 0 if unknown.
    725   */
    726  int64_t duration;
    727 } AVFrame;
    728 
    729 /**
    730 * Allocate an AVFrame and set its fields to default values.  The resulting
    731 * struct must be freed using av_frame_free().
    732 *
    733 * @return An AVFrame filled with default values or NULL on failure.
    734 *
    735 * @note this only allocates the AVFrame itself, not the data buffers. Those
    736 * must be allocated through other means, e.g. with av_frame_get_buffer() or
    737 * manually.
    738 */
    739 AVFrame* av_frame_alloc(void);
    740 
    741 /**
    742 * Free the frame and any dynamically allocated objects in it,
    743 * e.g. extended_data. If the frame is reference counted, it will be
    744 * unreferenced first.
    745 *
    746 * @param frame frame to be freed. The pointer will be set to NULL.
    747 */
    748 void av_frame_free(AVFrame** frame);
    749 
    750 /**
    751 * Set up a new reference to the data described by the source frame.
    752 *
    753 * Copy frame properties from src to dst and create a new reference for each
    754 * AVBufferRef from src.
    755 *
    756 * If src is not reference counted, new buffers are allocated and the data is
    757 * copied.
    758 *
    759 * @warning: dst MUST have been either unreferenced with av_frame_unref(dst),
    760 *           or newly allocated with av_frame_alloc() before calling this
    761 *           function, or undefined behavior will occur.
    762 *
    763 * @return 0 on success, a negative AVERROR on error
    764 */
    765 int av_frame_ref(AVFrame* dst, const AVFrame* src);
    766 
    767 /**
    768 * Create a new frame that references the same data as src.
    769 *
    770 * This is a shortcut for av_frame_alloc()+av_frame_ref().
    771 *
    772 * @return newly created AVFrame on success, NULL on error.
    773 */
    774 AVFrame* av_frame_clone(const AVFrame* src);
    775 
    776 /**
    777 * Unreference all the buffers referenced by frame and reset the frame fields.
    778 */
    779 void av_frame_unref(AVFrame* frame);
    780 
    781 /**
    782 * Move everything contained in src to dst and reset src.
    783 *
    784 * @warning: dst is not unreferenced, but directly overwritten without reading
    785 *           or deallocating its contents. Call av_frame_unref(dst) manually
    786 *           before calling this function to ensure that no memory is leaked.
    787 */
    788 void av_frame_move_ref(AVFrame* dst, AVFrame* src);
    789 
    790 /**
    791 * Allocate new buffer(s) for audio or video data.
    792 *
    793 * The following fields must be set on frame before calling this function:
    794 * - format (pixel format for video, sample format for audio)
    795 * - width and height for video
    796 * - nb_samples and ch_layout for audio
    797 *
    798 * This function will fill AVFrame.data and AVFrame.buf arrays and, if
    799 * necessary, allocate and fill AVFrame.extended_data and AVFrame.extended_buf.
    800 * For planar formats, one buffer will be allocated for each plane.
    801 *
    802 * @warning: if frame already has been allocated, calling this function will
    803 *           leak memory. In addition, undefined behavior can occur in certain
    804 *           cases.
    805 *
    806 * @param frame frame in which to store the new buffers.
    807 * @param align Required buffer size alignment. If equal to 0, alignment will be
    808 *              chosen automatically for the current CPU. It is highly
    809 *              recommended to pass 0 here unless you know what you are doing.
    810 *
    811 * @return 0 on success, a negative AVERROR on error.
    812 */
    813 int av_frame_get_buffer(AVFrame* frame, int align);
    814 
    815 /**
    816 * Check if the frame data is writable.
    817 *
    818 * @return A positive value if the frame data is writable (which is true if and
    819 * only if each of the underlying buffers has only one reference, namely the one
    820 * stored in this frame). Return 0 otherwise.
    821 *
    822 * If 1 is returned the answer is valid until av_buffer_ref() is called on any
    823 * of the underlying AVBufferRefs (e.g. through av_frame_ref() or directly).
    824 *
    825 * @see av_frame_make_writable(), av_buffer_is_writable()
    826 */
    827 int av_frame_is_writable(AVFrame* frame);
    828 
    829 /**
    830 * Ensure that the frame data is writable, avoiding data copy if possible.
    831 *
    832 * Do nothing if the frame is writable, allocate new buffers and copy the data
    833 * if it is not. Non-refcounted frames behave as non-writable, i.e. a copy
    834 * is always made.
    835 *
    836 * @return 0 on success, a negative AVERROR on error.
    837 *
    838 * @see av_frame_is_writable(), av_buffer_is_writable(),
    839 * av_buffer_make_writable()
    840 */
    841 int av_frame_make_writable(AVFrame* frame);
    842 
    843 /**
    844 * Copy the frame data from src to dst.
    845 *
    846 * This function does not allocate anything, dst must be already initialized and
    847 * allocated with the same parameters as src.
    848 *
    849 * This function only copies the frame data (i.e. the contents of the data /
    850 * extended data arrays), not any other properties.
    851 *
    852 * @return >= 0 on success, a negative AVERROR on error.
    853 */
    854 int av_frame_copy(AVFrame* dst, const AVFrame* src);
    855 
    856 /**
    857 * Copy only "metadata" fields from src to dst.
    858 *
    859 * Metadata for the purpose of this function are those fields that do not affect
    860 * the data layout in the buffers.  E.g. pts, sample rate (for audio) or sample
    861 * aspect ratio (for video), but not width/height or channel layout.
    862 * Side data is also copied.
    863 */
    864 int av_frame_copy_props(AVFrame* dst, const AVFrame* src);
    865 
    866 /**
    867 * Get the buffer reference a given data plane is stored in.
    868 *
    869 * @param frame the frame to get the plane's buffer from
    870 * @param plane index of the data plane of interest in frame->extended_data.
    871 *
    872 * @return the buffer reference that contains the plane or NULL if the input
    873 * frame is not valid.
    874 */
    875 AVBufferRef* av_frame_get_plane_buffer(AVFrame* frame, int plane);
    876 
    877 /**
    878 * Add a new side data to a frame.
    879 *
    880 * @param frame a frame to which the side data should be added
    881 * @param type type of the added side data
    882 * @param size size of the side data
    883 *
    884 * @return newly added side data on success, NULL on error
    885 */
    886 AVFrameSideData* av_frame_new_side_data(AVFrame* frame,
    887                                        enum AVFrameSideDataType type,
    888                                        size_t size);
    889 
    890 /**
    891 * Add a new side data to a frame from an existing AVBufferRef
    892 *
    893 * @param frame a frame to which the side data should be added
    894 * @param type  the type of the added side data
    895 * @param buf   an AVBufferRef to add as side data. The ownership of
    896 *              the reference is transferred to the frame.
    897 *
    898 * @return newly added side data on success, NULL on error. On failure
    899 *         the frame is unchanged and the AVBufferRef remains owned by
    900 *         the caller.
    901 */
    902 AVFrameSideData* av_frame_new_side_data_from_buf(AVFrame* frame,
    903                                                 enum AVFrameSideDataType type,
    904                                                 AVBufferRef* buf);
    905 
    906 /**
    907 * @return a pointer to the side data of a given type on success, NULL if there
    908 * is no side data with such type in this frame.
    909 */
    910 AVFrameSideData* av_frame_get_side_data(const AVFrame* frame,
    911                                        enum AVFrameSideDataType type);
    912 
    913 /**
    914 * Remove and free all side data instances of the given type.
    915 */
    916 void av_frame_remove_side_data(AVFrame* frame, enum AVFrameSideDataType type);
    917 
    918 /**
    919 * Flags for frame cropping.
    920 */
    921 enum {
    922  /**
    923   * Apply the maximum possible cropping, even if it requires setting the
    924   * AVFrame.data[] entries to unaligned pointers. Passing unaligned data
    925   * to FFmpeg API is generally not allowed, and causes undefined behavior
    926   * (such as crashes). You can pass unaligned data only to FFmpeg APIs that
    927   * are explicitly documented to accept it. Use this flag only if you
    928   * absolutely know what you are doing.
    929   */
    930  AV_FRAME_CROP_UNALIGNED = 1 << 0,
    931 };
    932 
    933 /**
    934 * Crop the given video AVFrame according to its crop_left/crop_top/crop_right/
    935 * crop_bottom fields. If cropping is successful, the function will adjust the
    936 * data pointers and the width/height fields, and set the crop fields to 0.
    937 *
    938 * In all cases, the cropping boundaries will be rounded to the inherent
    939 * alignment of the pixel format. In some cases, such as for opaque hwaccel
    940 * formats, the left/top cropping is ignored. The crop fields are set to 0 even
    941 * if the cropping was rounded or ignored.
    942 *
    943 * @param frame the frame which should be cropped
    944 * @param flags Some combination of AV_FRAME_CROP_* flags, or 0.
    945 *
    946 * @return >= 0 on success, a negative AVERROR on error. If the cropping fields
    947 * were invalid, AVERROR(ERANGE) is returned, and nothing is changed.
    948 */
    949 int av_frame_apply_cropping(AVFrame* frame, int flags);
    950 
    951 /**
    952 * @return a string identifying the side data type
    953 */
    954 const char* av_frame_side_data_name(enum AVFrameSideDataType type);
    955 
    956 /**
    957 * @}
    958 */
    959 
    960 #endif /* AVUTIL_FRAME_H */