tor-browser

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

packet.h (30512B)


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