tor-browser

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

packet.h (29044B)


      1 /*
      2 * AVPacket public API
      3 *
      4 * This file is part of FFmpeg.
      5 *
      6 * FFmpeg is free software; you can redistribute it and/or
      7 * modify it under the terms of the GNU Lesser General Public
      8 * License as published by the Free Software Foundation; either
      9 * version 2.1 of the License, or (at your option) any later version.
     10 *
     11 * FFmpeg is distributed in the hope that it will be useful,
     12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
     13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     14 * Lesser General Public License for more details.
     15 *
     16 * You should have received a copy of the GNU Lesser General Public
     17 * License along with FFmpeg; if not, write to the Free Software
     18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
     19 */
     20 
     21 #ifndef AVCODEC_PACKET_H
     22 #define AVCODEC_PACKET_H
     23 
     24 #include <stddef.h>
     25 #include <stdint.h>
     26 
     27 #include "libavutil/attributes.h"
     28 #include "libavutil/buffer.h"
     29 #include "libavutil/dict.h"
     30 #include "libavutil/rational.h"
     31 #include "libavutil/version.h"
     32 
     33 #include "libavcodec/version_major.h"
     34 
     35 /**
     36 * @defgroup lavc_packet_side_data AVPacketSideData
     37 *
     38 * Types and functions for working with AVPacketSideData.
     39 * @{
     40 */
     41 enum AVPacketSideDataType {
     42  /**
     43   * An AV_PKT_DATA_PALETTE side data packet contains exactly AVPALETTE_SIZE
     44   * bytes worth of palette. This side data signals that a new palette is
     45   * present.
     46   */
     47  AV_PKT_DATA_PALETTE,
     48 
     49  /**
     50   * The AV_PKT_DATA_NEW_EXTRADATA is used to notify the codec or the format
     51   * that the extradata buffer was changed and the receiving side should
     52   * act upon it appropriately. The new extradata is embedded in the side
     53   * data buffer and should be immediately used for processing the current
     54   * frame or packet.
     55   */
     56  AV_PKT_DATA_NEW_EXTRADATA,
     57 
     58  /**
     59   * An AV_PKT_DATA_PARAM_CHANGE side data packet is laid out as follows:
     60   * @code
     61   * u32le param_flags
     62   * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT)
     63   *     s32le channel_count
     64   * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT)
     65   *     u64le channel_layout
     66   * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE)
     67   *     s32le sample_rate
     68   * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS)
     69   *     s32le width
     70   *     s32le height
     71   * @endcode
     72   */
     73  AV_PKT_DATA_PARAM_CHANGE,
     74 
     75  /**
     76   * An AV_PKT_DATA_H263_MB_INFO side data packet contains a number of
     77   * structures with info about macroblocks relevant to splitting the
     78   * packet into smaller packets on macroblock edges (e.g. as for RFC 2190).
     79   * That is, it does not necessarily contain info about all macroblocks,
     80   * as long as the distance between macroblocks in the info is smaller
     81   * than the target payload size.
     82   * Each MB info structure is 12 bytes, and is laid out as follows:
     83   * @code
     84   * u32le bit offset from the start of the packet
     85   * u8    current quantizer at the start of the macroblock
     86   * u8    GOB number
     87   * u16le macroblock address within the GOB
     88   * u8    horizontal MV predictor
     89   * u8    vertical MV predictor
     90   * u8    horizontal MV predictor for block number 3
     91   * u8    vertical MV predictor for block number 3
     92   * @endcode
     93   */
     94  AV_PKT_DATA_H263_MB_INFO,
     95 
     96  /**
     97   * This side data should be associated with an audio stream and contains
     98   * ReplayGain information in form of the AVReplayGain struct.
     99   */
    100  AV_PKT_DATA_REPLAYGAIN,
    101 
    102  /**
    103   * This side data contains a 3x3 transformation matrix describing an affine
    104   * transformation that needs to be applied to the decoded video frames for
    105   * correct presentation.
    106   *
    107   * See libavutil/display.h for a detailed description of the data.
    108   */
    109  AV_PKT_DATA_DISPLAYMATRIX,
    110 
    111  /**
    112   * This side data should be associated with a video stream and contains
    113   * Stereoscopic 3D information in form of the AVStereo3D struct.
    114   */
    115  AV_PKT_DATA_STEREO3D,
    116 
    117  /**
    118   * This side data should be associated with an audio stream and corresponds
    119   * to enum AVAudioServiceType.
    120   */
    121  AV_PKT_DATA_AUDIO_SERVICE_TYPE,
    122 
    123  /**
    124   * This side data contains quality related information from the encoder.
    125   * @code
    126   * u32le quality factor of the compressed frame. Allowed range is between 1
    127   * (good) and FF_LAMBDA_MAX (bad). u8    picture type u8    error count u16
    128   * reserved u64le[error count] sum of squared differences between encoder in
    129   * and output
    130   * @endcode
    131   */
    132  AV_PKT_DATA_QUALITY_STATS,
    133 
    134  /**
    135   * This side data contains an integer value representing the stream index
    136   * of a "fallback" track.  A fallback track indicates an alternate
    137   * track to use when the current track can not be decoded for some reason.
    138   * e.g. no decoder available for codec.
    139   */
    140  AV_PKT_DATA_FALLBACK_TRACK,
    141 
    142  /**
    143   * This side data corresponds to the AVCPBProperties struct.
    144   */
    145  AV_PKT_DATA_CPB_PROPERTIES,
    146 
    147  /**
    148   * Recommmends skipping the specified number of samples
    149   * @code
    150   * u32le number of samples to skip from start of this packet
    151   * u32le number of samples to skip from end of this packet
    152   * u8    reason for start skip
    153   * u8    reason for end   skip (0=padding silence, 1=convergence)
    154   * @endcode
    155   */
    156  AV_PKT_DATA_SKIP_SAMPLES,
    157 
    158  /**
    159   * An AV_PKT_DATA_JP_DUALMONO side data packet indicates that
    160   * the packet may contain "dual mono" audio specific to Japanese DTV
    161   * and if it is true, recommends only the selected channel to be used.
    162   * @code
    163   * u8    selected channels (0=main/left, 1=sub/right, 2=both)
    164   * @endcode
    165   */
    166  AV_PKT_DATA_JP_DUALMONO,
    167 
    168  /**
    169   * A list of zero terminated key/value strings. There is no end marker for
    170   * the list, so it is required to rely on the side data size to stop.
    171   */
    172  AV_PKT_DATA_STRINGS_METADATA,
    173 
    174  /**
    175   * Subtitle event position
    176   * @code
    177   * u32le x1
    178   * u32le y1
    179   * u32le x2
    180   * u32le y2
    181   * @endcode
    182   */
    183  AV_PKT_DATA_SUBTITLE_POSITION,
    184 
    185  /**
    186   * Data found in BlockAdditional element of matroska container. There is
    187   * no end marker for the data, so it is required to rely on the side data
    188   * size to recognize the end. 8 byte id (as found in BlockAddId) followed
    189   * by data.
    190   */
    191  AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL,
    192 
    193  /**
    194   * The optional first identifier line of a WebVTT cue.
    195   */
    196  AV_PKT_DATA_WEBVTT_IDENTIFIER,
    197 
    198  /**
    199   * The optional settings (rendering instructions) that immediately
    200   * follow the timestamp specifier of a WebVTT cue.
    201   */
    202  AV_PKT_DATA_WEBVTT_SETTINGS,
    203 
    204  /**
    205   * A list of zero terminated key/value strings. There is no end marker for
    206   * the list, so it is required to rely on the side data size to stop. This
    207   * side data includes updated metadata which appeared in the stream.
    208   */
    209  AV_PKT_DATA_METADATA_UPDATE,
    210 
    211  /**
    212   * MPEGTS stream ID as uint8_t, this is required to pass the stream ID
    213   * information from the demuxer to the corresponding muxer.
    214   */
    215  AV_PKT_DATA_MPEGTS_STREAM_ID,
    216 
    217  /**
    218   * Mastering display metadata (based on SMPTE-2086:2014). This metadata
    219   * should be associated with a video stream and contains data in the form
    220   * of the AVMasteringDisplayMetadata struct.
    221   */
    222  AV_PKT_DATA_MASTERING_DISPLAY_METADATA,
    223 
    224  /**
    225   * This side data should be associated with a video stream and corresponds
    226   * to the AVSphericalMapping structure.
    227   */
    228  AV_PKT_DATA_SPHERICAL,
    229 
    230  /**
    231   * Content light level (based on CTA-861.3). This metadata should be
    232   * associated with a video stream and contains data in the form of the
    233   * AVContentLightMetadata struct.
    234   */
    235  AV_PKT_DATA_CONTENT_LIGHT_LEVEL,
    236 
    237  /**
    238   * ATSC A53 Part 4 Closed Captions. This metadata should be associated with
    239   * a video stream. A53 CC bitstream is stored as uint8_t in
    240   * AVPacketSideData.data. The number of bytes of CC data is
    241   * AVPacketSideData.size.
    242   */
    243  AV_PKT_DATA_A53_CC,
    244 
    245  /**
    246   * This side data is encryption initialization data.
    247   * The format is not part of ABI, use av_encryption_init_info_* methods to
    248   * access.
    249   */
    250  AV_PKT_DATA_ENCRYPTION_INIT_INFO,
    251 
    252  /**
    253   * This side data contains encryption info for how to decrypt the packet.
    254   * The format is not part of ABI, use av_encryption_info_* methods to access.
    255   */
    256  AV_PKT_DATA_ENCRYPTION_INFO,
    257 
    258  /**
    259   * Active Format Description data consisting of a single byte as specified
    260   * in ETSI TS 101 154 using AVActiveFormatDescription enum.
    261   */
    262  AV_PKT_DATA_AFD,
    263 
    264  /**
    265   * Producer Reference Time data corresponding to the AVProducerReferenceTime
    266   * struct, usually exported by some encoders (on demand through the prft flag
    267   * set in the AVCodecContext export_side_data field).
    268   */
    269  AV_PKT_DATA_PRFT,
    270 
    271  /**
    272   * ICC profile data consisting of an opaque octet buffer following the
    273   * format described by ISO 15076-1.
    274   */
    275  AV_PKT_DATA_ICC_PROFILE,
    276 
    277  /**
    278   * DOVI configuration
    279   * ref:
    280   * dolby-vision-bitstreams-within-the-iso-base-media-file-format-v2.1.2,
    281   * section 2.2
    282   * dolby-vision-bitstreams-in-mpeg-2-transport-stream-multiplex-v1.2,
    283   * section 3.3 Tags are stored in struct AVDOVIDecoderConfigurationRecord.
    284   */
    285  AV_PKT_DATA_DOVI_CONF,
    286 
    287  /**
    288   * Timecode which conforms to SMPTE ST 12-1:2014. The data is an array of 4
    289   * uint32_t where the first uint32_t describes how many (1-3) of the other
    290   * timecodes are used. The timecode format is described in the documentation
    291   * of av_timecode_get_smpte_from_framenum() function in libavutil/timecode.h.
    292   */
    293  AV_PKT_DATA_S12M_TIMECODE,
    294 
    295  /**
    296   * HDR10+ dynamic metadata associated with a video frame. The metadata is in
    297   * the form of the AVDynamicHDRPlus struct and contains
    298   * information for color volume transform - application 4 of
    299   * SMPTE 2094-40:2016 standard.
    300   */
    301  AV_PKT_DATA_DYNAMIC_HDR10_PLUS,
    302 
    303  /**
    304   * IAMF Mix Gain Parameter Data associated with the audio frame. This metadata
    305   * is in the form of the AVIAMFParamDefinition struct and contains information
    306   * defined in sections 3.6.1 and 3.8.1 of the Immersive Audio Model and
    307   * Formats standard.
    308   */
    309  AV_PKT_DATA_IAMF_MIX_GAIN_PARAM,
    310 
    311  /**
    312   * IAMF Demixing Info Parameter Data associated with the audio frame. This
    313   * metadata is in the form of the AVIAMFParamDefinition struct and contains
    314   * information defined in sections 3.6.1 and 3.8.2 of the Immersive Audio
    315   * Model and Formats standard.
    316   */
    317  AV_PKT_DATA_IAMF_DEMIXING_INFO_PARAM,
    318 
    319  /**
    320   * IAMF Recon Gain Info Parameter Data associated with the audio frame. This
    321   * metadata is in the form of the AVIAMFParamDefinition struct and contains
    322   * information defined in sections 3.6.1 and 3.8.3 of the Immersive Audio
    323   * Model and Formats standard.
    324   */
    325  AV_PKT_DATA_IAMF_RECON_GAIN_INFO_PARAM,
    326 
    327  /**
    328   * Ambient viewing environment metadata, as defined by H.274. This metadata
    329   * should be associated with a video stream and contains data in the form
    330   * of the AVAmbientViewingEnvironment struct.
    331   */
    332  AV_PKT_DATA_AMBIENT_VIEWING_ENVIRONMENT,
    333 
    334  /**
    335   * The number of side data types.
    336   * This is not part of the public API/ABI in the sense that it may
    337   * change when new side data types are added.
    338   * This must stay the last enum value.
    339   * If its value becomes huge, some code using it
    340   * needs to be updated as it assumes it to be smaller than other limits.
    341   */
    342  AV_PKT_DATA_NB
    343 };
    344 
    345 #if FF_API_QUALITY_FACTOR
    346 #  define AV_PKT_DATA_QUALITY_FACTOR AV_PKT_DATA_QUALITY_STATS  // DEPRECATED
    347 #endif
    348 
    349 /**
    350 * This structure stores auxiliary information for decoding, presenting, or
    351 * otherwise processing the coded stream. It is typically exported by demuxers
    352 * and encoders and can be fed to decoders and muxers either in a per packet
    353 * basis, or as global side data (applying to the entire coded stream).
    354 *
    355 * Global side data is handled as follows:
    356 * - During demuxing, it may be exported through
    357 *   @ref AVStream.codecpar.side_data "AVStream's codec parameters", which can
    358 *   then be passed as input to decoders through the
    359 *   @ref AVCodecContext.coded_side_data "decoder context's side data", for
    360 *   initialization.
    361 * - For muxing, it can be fed through @ref AVStream.codecpar.side_data
    362 *   "AVStream's codec parameters", typically  the output of encoders through
    363 *   the @ref AVCodecContext.coded_side_data "encoder context's side data", for
    364 *   initialization.
    365 *
    366 * Packet specific side data is handled as follows:
    367 * - During demuxing, it may be exported through @ref AVPacket.side_data
    368 *   "AVPacket's side data", which can then be passed as input to decoders.
    369 * - For muxing, it can be fed through @ref AVPacket.side_data "AVPacket's
    370 *   side data", typically the output of encoders.
    371 *
    372 * Different modules may accept or export different types of side data
    373 * depending on media type and codec. Refer to @ref AVPacketSideDataType for a
    374 * list of defined types and where they may be found or used.
    375 */
    376 typedef struct AVPacketSideData {
    377  uint8_t* data;
    378  size_t size;
    379  enum AVPacketSideDataType type;
    380 } AVPacketSideData;
    381 
    382 /**
    383 * Allocate a new packet side data.
    384 *
    385 * @param sd    pointer to an array of side data to which the side data should
    386 *              be added. *sd may be NULL, in which case the array will be
    387 *              initialized.
    388 * @param nb_sd pointer to an integer containing the number of entries in
    389 *              the array. The integer value will be increased by 1 on success.
    390 * @param type  side data type
    391 * @param size  desired side data size
    392 * @param flags currently unused. Must be zero
    393 *
    394 * @return pointer to freshly allocated side data on success, or NULL otherwise.
    395 */
    396 AVPacketSideData* av_packet_side_data_new(AVPacketSideData** psd, int* pnb_sd,
    397                                          enum AVPacketSideDataType type,
    398                                          size_t size, int flags);
    399 
    400 /**
    401 * Wrap existing data as packet side data.
    402 *
    403 * @param sd    pointer to an array of side data to which the side data should
    404 *              be added. *sd may be NULL, in which case the array will be
    405 *              initialized
    406 * @param nb_sd pointer to an integer containing the number of entries in
    407 *              the array. The integer value will be increased by 1 on success.
    408 * @param type  side data type
    409 * @param data  a data array. It must be allocated with the av_malloc() family
    410 *              of functions. The ownership of the data is transferred to the
    411 *              side data array on success
    412 * @param size  size of the data array
    413 * @param flags currently unused. Must be zero
    414 *
    415 * @return pointer to freshly allocated side data on success, or NULL otherwise
    416 *         On failure, the side data array is unchanged and the data remains
    417 *         owned by the caller.
    418 */
    419 AVPacketSideData* av_packet_side_data_add(AVPacketSideData** sd, int* nb_sd,
    420                                          enum AVPacketSideDataType type,
    421                                          void* data, size_t size, int flags);
    422 
    423 /**
    424 * Get side information from a side data array.
    425 *
    426 * @param sd    the array from which the side data should be fetched
    427 * @param nb_sd value containing the number of entries in the array.
    428 * @param type  desired side information type
    429 *
    430 * @return pointer to side data if present or NULL otherwise
    431 */
    432 const AVPacketSideData* av_packet_side_data_get(const AVPacketSideData* sd,
    433                                                int nb_sd,
    434                                                enum AVPacketSideDataType type);
    435 
    436 /**
    437 * Remove side data of the given type from a side data array.
    438 *
    439 * @param sd    the array from which the side data should be removed
    440 * @param nb_sd pointer to an integer containing the number of entries in
    441 *              the array. Will be reduced by the amount of entries removed
    442 *              upon return
    443 * @param type  side information type
    444 */
    445 void av_packet_side_data_remove(AVPacketSideData* sd, int* nb_sd,
    446                                enum AVPacketSideDataType type);
    447 
    448 /**
    449 * Convenience function to free all the side data stored in an array, and
    450 * the array itself.
    451 *
    452 * @param sd    pointer to array of side data to free. Will be set to NULL
    453 *              upon return.
    454 * @param nb_sd pointer to an integer containing the number of entries in
    455 *              the array. Will be set to 0 upon return.
    456 */
    457 void av_packet_side_data_free(AVPacketSideData** sd, int* nb_sd);
    458 
    459 const char* av_packet_side_data_name(enum AVPacketSideDataType type);
    460 
    461 /**
    462 * @}
    463 */
    464 
    465 /**
    466 * @defgroup lavc_packet AVPacket
    467 *
    468 * Types and functions for working with AVPacket.
    469 * @{
    470 */
    471 
    472 /**
    473 * This structure stores compressed data. It is typically exported by demuxers
    474 * and then passed as input to decoders, or received as output from encoders and
    475 * then passed to muxers.
    476 *
    477 * For video, it should typically contain one compressed frame. For audio it may
    478 * contain several compressed frames. Encoders are allowed to output empty
    479 * packets, with no compressed data, containing only side data
    480 * (e.g. to update some stream parameters at the end of encoding).
    481 *
    482 * The semantics of data ownership depends on the buf field.
    483 * If it is set, the packet data is dynamically allocated and is
    484 * valid indefinitely until a call to av_packet_unref() reduces the
    485 * reference count to 0.
    486 *
    487 * If the buf field is not set av_packet_ref() would make a copy instead
    488 * of increasing the reference count.
    489 *
    490 * The side data is always allocated with av_malloc(), copied by
    491 * av_packet_ref() and freed by av_packet_unref().
    492 *
    493 * sizeof(AVPacket) being a part of the public ABI is deprecated. once
    494 * av_init_packet() is removed, new packets will only be able to be allocated
    495 * with av_packet_alloc(), and new fields may be added to the end of the struct
    496 * with a minor bump.
    497 *
    498 * @see av_packet_alloc
    499 * @see av_packet_ref
    500 * @see av_packet_unref
    501 */
    502 typedef struct AVPacket {
    503  /**
    504   * A reference to the reference-counted buffer where the packet data is
    505   * stored.
    506   * May be NULL, then the packet data is not reference-counted.
    507   */
    508  AVBufferRef* buf;
    509  /**
    510   * Presentation timestamp in AVStream->time_base units; the time at which
    511   * the decompressed packet will be presented to the user.
    512   * Can be AV_NOPTS_VALUE if it is not stored in the file.
    513   * pts MUST be larger or equal to dts as presentation cannot happen before
    514   * decompression, unless one wants to view hex dumps. Some formats misuse
    515   * the terms dts and pts/cts to mean something different. Such timestamps
    516   * must be converted to true pts/dts before they are stored in AVPacket.
    517   */
    518  int64_t pts;
    519  /**
    520   * Decompression timestamp in AVStream->time_base units; the time at which
    521   * the packet is decompressed.
    522   * Can be AV_NOPTS_VALUE if it is not stored in the file.
    523   */
    524  int64_t dts;
    525  uint8_t* data;
    526  int size;
    527  int stream_index;
    528  /**
    529   * A combination of AV_PKT_FLAG values
    530   */
    531  int flags;
    532  /**
    533   * Additional packet data that can be provided by the container.
    534   * Packet can contain several types of side information.
    535   */
    536  AVPacketSideData* side_data;
    537  int side_data_elems;
    538 
    539  /**
    540   * Duration of this packet in AVStream->time_base units, 0 if unknown.
    541   * Equals next_pts - this_pts in presentation order.
    542   */
    543  int64_t duration;
    544 
    545  int64_t pos;  ///< byte position in stream, -1 if unknown
    546 
    547  /**
    548   * for some private data of the user
    549   */
    550  void* opaque;
    551 
    552  /**
    553   * AVBufferRef for free use by the API user. FFmpeg will never check the
    554   * contents of the buffer ref. FFmpeg calls av_buffer_unref() on it when
    555   * the packet is unreferenced. av_packet_copy_props() calls create a new
    556   * reference with av_buffer_ref() for the target packet's opaque_ref field.
    557   *
    558   * This is unrelated to the opaque field, although it serves a similar
    559   * purpose.
    560   */
    561  AVBufferRef* opaque_ref;
    562 
    563  /**
    564   * Time base of the packet's timestamps.
    565   * In the future, this field may be set on packets output by encoders or
    566   * demuxers, but its value will be by default ignored on input to decoders
    567   * or muxers.
    568   */
    569  AVRational time_base;
    570 } AVPacket;
    571 
    572 #if FF_API_INIT_PACKET
    573 attribute_deprecated typedef struct AVPacketList {
    574  AVPacket pkt;
    575  struct AVPacketList* next;
    576 } AVPacketList;
    577 #endif
    578 
    579 #define AV_PKT_FLAG_KEY 0x0001      ///< The packet contains a keyframe
    580 #define AV_PKT_FLAG_CORRUPT 0x0002  ///< The packet content is corrupted
    581 /**
    582 * Flag is used to discard packets which are required to maintain valid
    583 * decoder state but are not required for output and should be dropped
    584 * after decoding.
    585 **/
    586 #define AV_PKT_FLAG_DISCARD 0x0004
    587 /**
    588 * The packet comes from a trusted source.
    589 *
    590 * Otherwise-unsafe constructs such as arbitrary pointers to data
    591 * outside the packet may be followed.
    592 */
    593 #define AV_PKT_FLAG_TRUSTED 0x0008
    594 /**
    595 * Flag is used to indicate packets that contain frames that can
    596 * be discarded by the decoder.  I.e. Non-reference frames.
    597 */
    598 #define AV_PKT_FLAG_DISPOSABLE 0x0010
    599 
    600 enum AVSideDataParamChangeFlags {
    601  AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE = 0x0004,
    602  AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS = 0x0008,
    603 };
    604 
    605 /**
    606 * Allocate an AVPacket and set its fields to default values.  The resulting
    607 * struct must be freed using av_packet_free().
    608 *
    609 * @return An AVPacket filled with default values or NULL on failure.
    610 *
    611 * @note this only allocates the AVPacket itself, not the data buffers. Those
    612 * must be allocated through other means such as av_new_packet.
    613 *
    614 * @see av_new_packet
    615 */
    616 AVPacket* av_packet_alloc(void);
    617 
    618 /**
    619 * Create a new packet that references the same data as src.
    620 *
    621 * This is a shortcut for av_packet_alloc()+av_packet_ref().
    622 *
    623 * @return newly created AVPacket on success, NULL on error.
    624 *
    625 * @see av_packet_alloc
    626 * @see av_packet_ref
    627 */
    628 AVPacket* av_packet_clone(const AVPacket* src);
    629 
    630 /**
    631 * Free the packet, if the packet is reference counted, it will be
    632 * unreferenced first.
    633 *
    634 * @param pkt packet to be freed. The pointer will be set to NULL.
    635 * @note passing NULL is a no-op.
    636 */
    637 void av_packet_free(AVPacket** pkt);
    638 
    639 #if FF_API_INIT_PACKET
    640 /**
    641 * Initialize optional fields of a packet with default values.
    642 *
    643 * Note, this does not touch the data and size members, which have to be
    644 * initialized separately.
    645 *
    646 * @param pkt packet
    647 *
    648 * @see av_packet_alloc
    649 * @see av_packet_unref
    650 *
    651 * @deprecated This function is deprecated. Once it's removed,
    652               sizeof(AVPacket) will not be a part of the ABI anymore.
    653 */
    654 attribute_deprecated void av_init_packet(AVPacket* pkt);
    655 #endif
    656 
    657 /**
    658 * Allocate the payload of a packet and initialize its fields with
    659 * default values.
    660 *
    661 * @param pkt packet
    662 * @param size wanted payload size
    663 * @return 0 if OK, AVERROR_xxx otherwise
    664 */
    665 int av_new_packet(AVPacket* pkt, int size);
    666 
    667 /**
    668 * Reduce packet size, correctly zeroing padding
    669 *
    670 * @param pkt packet
    671 * @param size new size
    672 */
    673 void av_shrink_packet(AVPacket* pkt, int size);
    674 
    675 /**
    676 * Increase packet size, correctly zeroing padding
    677 *
    678 * @param pkt packet
    679 * @param grow_by number of bytes by which to increase the size of the packet
    680 */
    681 int av_grow_packet(AVPacket* pkt, int grow_by);
    682 
    683 /**
    684 * Initialize a reference-counted packet from av_malloc()ed data.
    685 *
    686 * @param pkt packet to be initialized. This function will set the data, size,
    687 *        and buf fields, all others are left untouched.
    688 * @param data Data allocated by av_malloc() to be used as packet data. If this
    689 *        function returns successfully, the data is owned by the underlying
    690 * AVBuffer. The caller may not access the data through other means.
    691 * @param size size of data in bytes, without the padding. I.e. the full buffer
    692 *        size is assumed to be size + AV_INPUT_BUFFER_PADDING_SIZE.
    693 *
    694 * @return 0 on success, a negative AVERROR on error
    695 */
    696 int av_packet_from_data(AVPacket* pkt, uint8_t* data, int size);
    697 
    698 /**
    699 * Allocate new information of a packet.
    700 *
    701 * @param pkt packet
    702 * @param type side information type
    703 * @param size side information size
    704 * @return pointer to fresh allocated data or NULL otherwise
    705 */
    706 uint8_t* av_packet_new_side_data(AVPacket* pkt, enum AVPacketSideDataType type,
    707                                 size_t size);
    708 
    709 /**
    710 * Wrap an existing array as a packet side data.
    711 *
    712 * @param pkt packet
    713 * @param type side information type
    714 * @param data the side data array. It must be allocated with the av_malloc()
    715 *             family of functions. The ownership of the data is transferred to
    716 *             pkt.
    717 * @param size side information size
    718 * @return a non-negative number on success, a negative AVERROR code on
    719 *         failure. On failure, the packet is unchanged and the data remains
    720 *         owned by the caller.
    721 */
    722 int av_packet_add_side_data(AVPacket* pkt, enum AVPacketSideDataType type,
    723                            uint8_t* data, size_t size);
    724 
    725 /**
    726 * Shrink the already allocated side data buffer
    727 *
    728 * @param pkt packet
    729 * @param type side information type
    730 * @param size new side information size
    731 * @return 0 on success, < 0 on failure
    732 */
    733 int av_packet_shrink_side_data(AVPacket* pkt, enum AVPacketSideDataType type,
    734                               size_t size);
    735 
    736 /**
    737 * Get side information from packet.
    738 *
    739 * @param pkt packet
    740 * @param type desired side information type
    741 * @param size If supplied, *size will be set to the size of the side data
    742 *             or to zero if the desired side data is not present.
    743 * @return pointer to data if present or NULL otherwise
    744 */
    745 uint8_t* av_packet_get_side_data(const AVPacket* pkt,
    746                                 enum AVPacketSideDataType type, size_t* size);
    747 
    748 /**
    749 * Pack a dictionary for use in side_data.
    750 *
    751 * @param dict The dictionary to pack.
    752 * @param size pointer to store the size of the returned data
    753 * @return pointer to data if successful, NULL otherwise
    754 */
    755 uint8_t* av_packet_pack_dictionary(AVDictionary* dict, size_t* size);
    756 /**
    757 * Unpack a dictionary from side_data.
    758 *
    759 * @param data data from side_data
    760 * @param size size of the data
    761 * @param dict the metadata storage dictionary
    762 * @return 0 on success, < 0 on failure
    763 */
    764 int av_packet_unpack_dictionary(const uint8_t* data, size_t size,
    765                                AVDictionary** dict);
    766 
    767 /**
    768 * Convenience function to free all the side data stored.
    769 * All the other fields stay untouched.
    770 *
    771 * @param pkt packet
    772 */
    773 void av_packet_free_side_data(AVPacket* pkt);
    774 
    775 /**
    776 * Setup a new reference to the data described by a given packet
    777 *
    778 * If src is reference-counted, setup dst as a new reference to the
    779 * buffer in src. Otherwise allocate a new buffer in dst and copy the
    780 * data from src into it.
    781 *
    782 * All the other fields are copied from src.
    783 *
    784 * @see av_packet_unref
    785 *
    786 * @param dst Destination packet. Will be completely overwritten.
    787 * @param src Source packet
    788 *
    789 * @return 0 on success, a negative AVERROR on error. On error, dst
    790 *         will be blank (as if returned by av_packet_alloc()).
    791 */
    792 int av_packet_ref(AVPacket* dst, const AVPacket* src);
    793 
    794 /**
    795 * Wipe the packet.
    796 *
    797 * Unreference the buffer referenced by the packet and reset the
    798 * remaining packet fields to their default values.
    799 *
    800 * @param pkt The packet to be unreferenced.
    801 */
    802 void av_packet_unref(AVPacket* pkt);
    803 
    804 /**
    805 * Move every field in src to dst and reset src.
    806 *
    807 * @see av_packet_unref
    808 *
    809 * @param src Source packet, will be reset
    810 * @param dst Destination packet
    811 */
    812 void av_packet_move_ref(AVPacket* dst, AVPacket* src);
    813 
    814 /**
    815 * Copy only "properties" fields from src to dst.
    816 *
    817 * Properties for the purpose of this function are all the fields
    818 * beside those related to the packet data (buf, data, size)
    819 *
    820 * @param dst Destination packet
    821 * @param src Source packet
    822 *
    823 * @return 0 on success AVERROR on failure.
    824 */
    825 int av_packet_copy_props(AVPacket* dst, const AVPacket* src);
    826 
    827 /**
    828 * Ensure the data described by a given packet is reference counted.
    829 *
    830 * @note This function does not ensure that the reference will be writable.
    831 *       Use av_packet_make_writable instead for that purpose.
    832 *
    833 * @see av_packet_ref
    834 * @see av_packet_make_writable
    835 *
    836 * @param pkt packet whose data should be made reference counted.
    837 *
    838 * @return 0 on success, a negative AVERROR on error. On failure, the
    839 *         packet is unchanged.
    840 */
    841 int av_packet_make_refcounted(AVPacket* pkt);
    842 
    843 /**
    844 * Create a writable reference for the data described by a given packet,
    845 * avoiding data copy if possible.
    846 *
    847 * @param pkt Packet whose data should be made writable.
    848 *
    849 * @return 0 on success, a negative AVERROR on failure. On failure, the
    850 *         packet is unchanged.
    851 */
    852 int av_packet_make_writable(AVPacket* pkt);
    853 
    854 /**
    855 * Convert valid timing fields (timestamps / durations) in a packet from one
    856 * timebase to another. Timestamps with unknown values (AV_NOPTS_VALUE) will be
    857 * ignored.
    858 *
    859 * @param pkt packet on which the conversion will be performed
    860 * @param tb_src source timebase, in which the timing fields in pkt are
    861 *               expressed
    862 * @param tb_dst destination timebase, to which the timing fields will be
    863 *               converted
    864 */
    865 void av_packet_rescale_ts(AVPacket* pkt, AVRational tb_src, AVRational tb_dst);
    866 
    867 /**
    868 * @}
    869 */
    870 
    871 #endif  // AVCODEC_PACKET_H