tor-browser

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

packet.h (24401B)


      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 
     32 #include "libavcodec/version.h"
     33 
     34 /**
     35 * @defgroup lavc_packet AVPacket
     36 *
     37 * Types and functions for working with AVPacket.
     38 * @{
     39 */
     40 enum AVPacketSideDataType {
     41    /**
     42     * An AV_PKT_DATA_PALETTE side data packet contains exactly AVPALETTE_SIZE
     43     * bytes worth of palette. This side data signals that a new palette is
     44     * present.
     45     */
     46    AV_PKT_DATA_PALETTE,
     47 
     48    /**
     49     * The AV_PKT_DATA_NEW_EXTRADATA is used to notify the codec or the format
     50     * that the extradata buffer was changed and the receiving side should
     51     * act upon it appropriately. The new extradata is embedded in the side
     52     * data buffer and should be immediately used for processing the current
     53     * frame or packet.
     54     */
     55    AV_PKT_DATA_NEW_EXTRADATA,
     56 
     57    /**
     58     * An AV_PKT_DATA_PARAM_CHANGE side data packet is laid out as follows:
     59     * @code
     60     * u32le param_flags
     61     * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT)
     62     *     s32le channel_count
     63     * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT)
     64     *     u64le channel_layout
     65     * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE)
     66     *     s32le sample_rate
     67     * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS)
     68     *     s32le width
     69     *     s32le height
     70     * @endcode
     71     */
     72    AV_PKT_DATA_PARAM_CHANGE,
     73 
     74    /**
     75     * An AV_PKT_DATA_H263_MB_INFO side data packet contains a number of
     76     * structures with info about macroblocks relevant to splitting the
     77     * packet into smaller packets on macroblock edges (e.g. as for RFC 2190).
     78     * That is, it does not necessarily contain info about all macroblocks,
     79     * as long as the distance between macroblocks in the info is smaller
     80     * than the target payload size.
     81     * Each MB info structure is 12 bytes, and is laid out as follows:
     82     * @code
     83     * u32le bit offset from the start of the packet
     84     * u8    current quantizer at the start of the macroblock
     85     * u8    GOB number
     86     * u16le macroblock address within the GOB
     87     * u8    horizontal MV predictor
     88     * u8    vertical MV predictor
     89     * u8    horizontal MV predictor for block number 3
     90     * u8    vertical MV predictor for block number 3
     91     * @endcode
     92     */
     93    AV_PKT_DATA_H263_MB_INFO,
     94 
     95    /**
     96     * This side data should be associated with an audio stream and contains
     97     * ReplayGain information in form of the AVReplayGain struct.
     98     */
     99    AV_PKT_DATA_REPLAYGAIN,
    100 
    101    /**
    102     * This side data contains a 3x3 transformation matrix describing an affine
    103     * transformation that needs to be applied to the decoded video frames for
    104     * correct presentation.
    105     *
    106     * See libavutil/display.h for a detailed description of the data.
    107     */
    108    AV_PKT_DATA_DISPLAYMATRIX,
    109 
    110    /**
    111     * This side data should be associated with a video stream and contains
    112     * Stereoscopic 3D information in form of the AVStereo3D struct.
    113     */
    114    AV_PKT_DATA_STEREO3D,
    115 
    116    /**
    117     * This side data should be associated with an audio stream and corresponds
    118     * to enum AVAudioServiceType.
    119     */
    120    AV_PKT_DATA_AUDIO_SERVICE_TYPE,
    121 
    122    /**
    123     * This side data contains quality related information from the encoder.
    124     * @code
    125     * u32le quality factor of the compressed frame. Allowed range is between 1 (good) and FF_LAMBDA_MAX (bad).
    126     * u8    picture type
    127     * u8    error count
    128     * u16   reserved
    129     * u64le[error count] sum of squared differences between encoder in 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=mail/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 AVPacketSideData.data.
    240     * The number of bytes of CC data is AVPacketSideData.size.
    241     */
    242    AV_PKT_DATA_A53_CC,
    243 
    244    /**
    245     * This side data is encryption initialization data.
    246     * The format is not part of ABI, use av_encryption_init_info_* methods to
    247     * access.
    248     */
    249    AV_PKT_DATA_ENCRYPTION_INIT_INFO,
    250 
    251    /**
    252     * This side data contains encryption info for how to decrypt the packet.
    253     * The format is not part of ABI, use av_encryption_info_* methods to access.
    254     */
    255    AV_PKT_DATA_ENCRYPTION_INFO,
    256 
    257    /**
    258     * Active Format Description data consisting of a single byte as specified
    259     * in ETSI TS 101 154 using AVActiveFormatDescription enum.
    260     */
    261    AV_PKT_DATA_AFD,
    262 
    263    /**
    264     * Producer Reference Time data corresponding to the AVProducerReferenceTime struct,
    265     * usually exported by some encoders (on demand through the prft flag set in the
    266     * AVCodecContext export_side_data field).
    267     */
    268    AV_PKT_DATA_PRFT,
    269 
    270    /**
    271     * ICC profile data consisting of an opaque octet buffer following the
    272     * format described by ISO 15076-1.
    273     */
    274    AV_PKT_DATA_ICC_PROFILE,
    275 
    276    /**
    277     * DOVI configuration
    278     * ref:
    279     * dolby-vision-bitstreams-within-the-iso-base-media-file-format-v2.1.2, section 2.2
    280     * dolby-vision-bitstreams-in-mpeg-2-transport-stream-multiplex-v1.2, section 3.3
    281     * Tags are stored in struct AVDOVIDecoderConfigurationRecord.
    282     */
    283    AV_PKT_DATA_DOVI_CONF,
    284 
    285    /**
    286     * Timecode which conforms to SMPTE ST 12-1:2014. The data is an array of 4 uint32_t
    287     * where the first uint32_t describes how many (1-3) of the other timecodes are used.
    288     * The timecode format is described in the documentation of av_timecode_get_smpte_from_framenum()
    289     * function in libavutil/timecode.h.
    290     */
    291    AV_PKT_DATA_S12M_TIMECODE,
    292 
    293    /**
    294     * The number of side data types.
    295     * This is not part of the public API/ABI in the sense that it may
    296     * change when new side data types are added.
    297     * This must stay the last enum value.
    298     * If its value becomes huge, some code using it
    299     * needs to be updated as it assumes it to be smaller than other limits.
    300     */
    301    AV_PKT_DATA_NB
    302 };
    303 
    304 #define AV_PKT_DATA_QUALITY_FACTOR AV_PKT_DATA_QUALITY_STATS //DEPRECATED
    305 
    306 typedef struct AVPacketSideData {
    307    uint8_t *data;
    308 #if FF_API_BUFFER_SIZE_T
    309    int      size;
    310 #else
    311    size_t   size;
    312 #endif
    313    enum AVPacketSideDataType type;
    314 } AVPacketSideData;
    315 
    316 /**
    317 * This structure stores compressed data. It is typically exported by demuxers
    318 * and then passed as input to decoders, or received as output from encoders and
    319 * then passed to muxers.
    320 *
    321 * For video, it should typically contain one compressed frame. For audio it may
    322 * contain several compressed frames. Encoders are allowed to output empty
    323 * packets, with no compressed data, containing only side data
    324 * (e.g. to update some stream parameters at the end of encoding).
    325 *
    326 * The semantics of data ownership depends on the buf field.
    327 * If it is set, the packet data is dynamically allocated and is
    328 * valid indefinitely until a call to av_packet_unref() reduces the
    329 * reference count to 0.
    330 *
    331 * If the buf field is not set av_packet_ref() would make a copy instead
    332 * of increasing the reference count.
    333 *
    334 * The side data is always allocated with av_malloc(), copied by
    335 * av_packet_ref() and freed by av_packet_unref().
    336 *
    337 * sizeof(AVPacket) being a part of the public ABI is deprecated. once
    338 * av_init_packet() is removed, new packets will only be able to be allocated
    339 * with av_packet_alloc(), and new fields may be added to the end of the struct
    340 * with a minor bump.
    341 *
    342 * @see av_packet_alloc
    343 * @see av_packet_ref
    344 * @see av_packet_unref
    345 */
    346 typedef struct AVPacket {
    347    /**
    348     * A reference to the reference-counted buffer where the packet data is
    349     * stored.
    350     * May be NULL, then the packet data is not reference-counted.
    351     */
    352    AVBufferRef *buf;
    353    /**
    354     * Presentation timestamp in AVStream->time_base units; the time at which
    355     * the decompressed packet will be presented to the user.
    356     * Can be AV_NOPTS_VALUE if it is not stored in the file.
    357     * pts MUST be larger or equal to dts as presentation cannot happen before
    358     * decompression, unless one wants to view hex dumps. Some formats misuse
    359     * the terms dts and pts/cts to mean something different. Such timestamps
    360     * must be converted to true pts/dts before they are stored in AVPacket.
    361     */
    362    int64_t pts;
    363    /**
    364     * Decompression timestamp in AVStream->time_base units; the time at which
    365     * the packet is decompressed.
    366     * Can be AV_NOPTS_VALUE if it is not stored in the file.
    367     */
    368    int64_t dts;
    369    uint8_t *data;
    370    int   size;
    371    int   stream_index;
    372    /**
    373     * A combination of AV_PKT_FLAG values
    374     */
    375    int   flags;
    376    /**
    377     * Additional packet data that can be provided by the container.
    378     * Packet can contain several types of side information.
    379     */
    380    AVPacketSideData *side_data;
    381    int side_data_elems;
    382 
    383    /**
    384     * Duration of this packet in AVStream->time_base units, 0 if unknown.
    385     * Equals next_pts - this_pts in presentation order.
    386     */
    387    int64_t duration;
    388 
    389    int64_t pos;                            ///< byte position in stream, -1 if unknown
    390 
    391 #if FF_API_CONVERGENCE_DURATION
    392    /**
    393     * @deprecated Same as the duration field, but as int64_t. This was required
    394     * for Matroska subtitles, whose duration values could overflow when the
    395     * duration field was still an int.
    396     */
    397    attribute_deprecated
    398    int64_t convergence_duration;
    399 #endif
    400 } AVPacket;
    401 
    402 #if FF_API_INIT_PACKET
    403 attribute_deprecated
    404 typedef struct AVPacketList {
    405    AVPacket pkt;
    406    struct AVPacketList *next;
    407 } AVPacketList;
    408 #endif
    409 
    410 #define AV_PKT_FLAG_KEY     0x0001 ///< The packet contains a keyframe
    411 #define AV_PKT_FLAG_CORRUPT 0x0002 ///< The packet content is corrupted
    412 /**
    413 * Flag is used to discard packets which are required to maintain valid
    414 * decoder state but are not required for output and should be dropped
    415 * after decoding.
    416 **/
    417 #define AV_PKT_FLAG_DISCARD   0x0004
    418 /**
    419 * The packet comes from a trusted source.
    420 *
    421 * Otherwise-unsafe constructs such as arbitrary pointers to data
    422 * outside the packet may be followed.
    423 */
    424 #define AV_PKT_FLAG_TRUSTED   0x0008
    425 /**
    426 * Flag is used to indicate packets that contain frames that can
    427 * be discarded by the decoder.  I.e. Non-reference frames.
    428 */
    429 #define AV_PKT_FLAG_DISPOSABLE 0x0010
    430 
    431 enum AVSideDataParamChangeFlags {
    432    AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT  = 0x0001,
    433    AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT = 0x0002,
    434    AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE    = 0x0004,
    435    AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS     = 0x0008,
    436 };
    437 
    438 /**
    439 * Allocate an AVPacket and set its fields to default values.  The resulting
    440 * struct must be freed using av_packet_free().
    441 *
    442 * @return An AVPacket filled with default values or NULL on failure.
    443 *
    444 * @note this only allocates the AVPacket itself, not the data buffers. Those
    445 * must be allocated through other means such as av_new_packet.
    446 *
    447 * @see av_new_packet
    448 */
    449 AVPacket *av_packet_alloc(void);
    450 
    451 /**
    452 * Create a new packet that references the same data as src.
    453 *
    454 * This is a shortcut for av_packet_alloc()+av_packet_ref().
    455 *
    456 * @return newly created AVPacket on success, NULL on error.
    457 *
    458 * @see av_packet_alloc
    459 * @see av_packet_ref
    460 */
    461 AVPacket *av_packet_clone(const AVPacket *src);
    462 
    463 /**
    464 * Free the packet, if the packet is reference counted, it will be
    465 * unreferenced first.
    466 *
    467 * @param pkt packet to be freed. The pointer will be set to NULL.
    468 * @note passing NULL is a no-op.
    469 */
    470 void av_packet_free(AVPacket **pkt);
    471 
    472 #if FF_API_INIT_PACKET
    473 /**
    474 * Initialize optional fields of a packet with default values.
    475 *
    476 * Note, this does not touch the data and size members, which have to be
    477 * initialized separately.
    478 *
    479 * @param pkt packet
    480 *
    481 * @see av_packet_alloc
    482 * @see av_packet_unref
    483 *
    484 * @deprecated This function is deprecated. Once it's removed,
    485               sizeof(AVPacket) will not be a part of the ABI anymore.
    486 */
    487 attribute_deprecated
    488 void av_init_packet(AVPacket *pkt);
    489 #endif
    490 
    491 /**
    492 * Allocate the payload of a packet and initialize its fields with
    493 * default values.
    494 *
    495 * @param pkt packet
    496 * @param size wanted payload size
    497 * @return 0 if OK, AVERROR_xxx otherwise
    498 */
    499 int av_new_packet(AVPacket *pkt, int size);
    500 
    501 /**
    502 * Reduce packet size, correctly zeroing padding
    503 *
    504 * @param pkt packet
    505 * @param size new size
    506 */
    507 void av_shrink_packet(AVPacket *pkt, int size);
    508 
    509 /**
    510 * Increase packet size, correctly zeroing padding
    511 *
    512 * @param pkt packet
    513 * @param grow_by number of bytes by which to increase the size of the packet
    514 */
    515 int av_grow_packet(AVPacket *pkt, int grow_by);
    516 
    517 /**
    518 * Initialize a reference-counted packet from av_malloc()ed data.
    519 *
    520 * @param pkt packet to be initialized. This function will set the data, size,
    521 *        and buf fields, all others are left untouched.
    522 * @param data Data allocated by av_malloc() to be used as packet data. If this
    523 *        function returns successfully, the data is owned by the underlying AVBuffer.
    524 *        The caller may not access the data through other means.
    525 * @param size size of data in bytes, without the padding. I.e. the full buffer
    526 *        size is assumed to be size + AV_INPUT_BUFFER_PADDING_SIZE.
    527 *
    528 * @return 0 on success, a negative AVERROR on error
    529 */
    530 int av_packet_from_data(AVPacket *pkt, uint8_t *data, int size);
    531 
    532 #if FF_API_AVPACKET_OLD_API
    533 /**
    534 * @warning This is a hack - the packet memory allocation stuff is broken. The
    535 * packet is allocated if it was not really allocated.
    536 *
    537 * @deprecated Use av_packet_ref or av_packet_make_refcounted
    538 */
    539 attribute_deprecated
    540 int av_dup_packet(AVPacket *pkt);
    541 /**
    542 * Copy packet, including contents
    543 *
    544 * @return 0 on success, negative AVERROR on fail
    545 *
    546 * @deprecated Use av_packet_ref
    547 */
    548 attribute_deprecated
    549 int av_copy_packet(AVPacket *dst, const AVPacket *src);
    550 
    551 /**
    552 * Copy packet side data
    553 *
    554 * @return 0 on success, negative AVERROR on fail
    555 *
    556 * @deprecated Use av_packet_copy_props
    557 */
    558 attribute_deprecated
    559 int av_copy_packet_side_data(AVPacket *dst, const AVPacket *src);
    560 
    561 /**
    562 * Free a packet.
    563 *
    564 * @deprecated Use av_packet_unref
    565 *
    566 * @param pkt packet to free
    567 */
    568 attribute_deprecated
    569 void av_free_packet(AVPacket *pkt);
    570 #endif
    571 /**
    572 * Allocate new information of a packet.
    573 *
    574 * @param pkt packet
    575 * @param type side information type
    576 * @param size side information size
    577 * @return pointer to fresh allocated data or NULL otherwise
    578 */
    579 uint8_t* av_packet_new_side_data(AVPacket *pkt, enum AVPacketSideDataType type,
    580 #if FF_API_BUFFER_SIZE_T
    581                                 int size);
    582 #else
    583                                 size_t size);
    584 #endif
    585 
    586 /**
    587 * Wrap an existing array as a packet side data.
    588 *
    589 * @param pkt packet
    590 * @param type side information type
    591 * @param data the side data array. It must be allocated with the av_malloc()
    592 *             family of functions. The ownership of the data is transferred to
    593 *             pkt.
    594 * @param size side information size
    595 * @return a non-negative number on success, a negative AVERROR code on
    596 *         failure. On failure, the packet is unchanged and the data remains
    597 *         owned by the caller.
    598 */
    599 int av_packet_add_side_data(AVPacket *pkt, enum AVPacketSideDataType type,
    600                            uint8_t *data, size_t size);
    601 
    602 /**
    603 * Shrink the already allocated side data buffer
    604 *
    605 * @param pkt packet
    606 * @param type side information type
    607 * @param size new side information size
    608 * @return 0 on success, < 0 on failure
    609 */
    610 int av_packet_shrink_side_data(AVPacket *pkt, enum AVPacketSideDataType type,
    611 #if FF_API_BUFFER_SIZE_T
    612                               int size);
    613 #else
    614                               size_t size);
    615 #endif
    616 
    617 /**
    618 * Get side information from packet.
    619 *
    620 * @param pkt packet
    621 * @param type desired side information type
    622 * @param size If supplied, *size will be set to the size of the side data
    623 *             or to zero if the desired side data is not present.
    624 * @return pointer to data if present or NULL otherwise
    625 */
    626 uint8_t* av_packet_get_side_data(const AVPacket *pkt, enum AVPacketSideDataType type,
    627 #if FF_API_BUFFER_SIZE_T
    628                                 int *size);
    629 #else
    630                                 size_t *size);
    631 #endif
    632 
    633 #if FF_API_MERGE_SD_API
    634 attribute_deprecated
    635 int av_packet_merge_side_data(AVPacket *pkt);
    636 
    637 attribute_deprecated
    638 int av_packet_split_side_data(AVPacket *pkt);
    639 #endif
    640 
    641 const char *av_packet_side_data_name(enum AVPacketSideDataType type);
    642 
    643 /**
    644 * Pack a dictionary for use in side_data.
    645 *
    646 * @param dict The dictionary to pack.
    647 * @param size pointer to store the size of the returned data
    648 * @return pointer to data if successful, NULL otherwise
    649 */
    650 #if FF_API_BUFFER_SIZE_T
    651 uint8_t *av_packet_pack_dictionary(AVDictionary *dict, int *size);
    652 #else
    653 uint8_t *av_packet_pack_dictionary(AVDictionary *dict, size_t *size);
    654 #endif
    655 /**
    656 * Unpack a dictionary from side_data.
    657 *
    658 * @param data data from side_data
    659 * @param size size of the data
    660 * @param dict the metadata storage dictionary
    661 * @return 0 on success, < 0 on failure
    662 */
    663 #if FF_API_BUFFER_SIZE_T
    664 int av_packet_unpack_dictionary(const uint8_t *data, int size, AVDictionary **dict);
    665 #else
    666 int av_packet_unpack_dictionary(const uint8_t *data, size_t size,
    667                                AVDictionary **dict);
    668 #endif
    669 
    670 /**
    671 * Convenience function to free all the side data stored.
    672 * All the other fields stay untouched.
    673 *
    674 * @param pkt packet
    675 */
    676 void av_packet_free_side_data(AVPacket *pkt);
    677 
    678 /**
    679 * Setup a new reference to the data described by a given packet
    680 *
    681 * If src is reference-counted, setup dst as a new reference to the
    682 * buffer in src. Otherwise allocate a new buffer in dst and copy the
    683 * data from src into it.
    684 *
    685 * All the other fields are copied from src.
    686 *
    687 * @see av_packet_unref
    688 *
    689 * @param dst Destination packet. Will be completely overwritten.
    690 * @param src Source packet
    691 *
    692 * @return 0 on success, a negative AVERROR on error. On error, dst
    693 *         will be blank (as if returned by av_packet_alloc()).
    694 */
    695 int av_packet_ref(AVPacket *dst, const AVPacket *src);
    696 
    697 /**
    698 * Wipe the packet.
    699 *
    700 * Unreference the buffer referenced by the packet and reset the
    701 * remaining packet fields to their default values.
    702 *
    703 * @param pkt The packet to be unreferenced.
    704 */
    705 void av_packet_unref(AVPacket *pkt);
    706 
    707 /**
    708 * Move every field in src to dst and reset src.
    709 *
    710 * @see av_packet_unref
    711 *
    712 * @param src Source packet, will be reset
    713 * @param dst Destination packet
    714 */
    715 void av_packet_move_ref(AVPacket *dst, AVPacket *src);
    716 
    717 /**
    718 * Copy only "properties" fields from src to dst.
    719 *
    720 * Properties for the purpose of this function are all the fields
    721 * beside those related to the packet data (buf, data, size)
    722 *
    723 * @param dst Destination packet
    724 * @param src Source packet
    725 *
    726 * @return 0 on success AVERROR on failure.
    727 */
    728 int av_packet_copy_props(AVPacket *dst, const AVPacket *src);
    729 
    730 /**
    731 * Ensure the data described by a given packet is reference counted.
    732 *
    733 * @note This function does not ensure that the reference will be writable.
    734 *       Use av_packet_make_writable instead for that purpose.
    735 *
    736 * @see av_packet_ref
    737 * @see av_packet_make_writable
    738 *
    739 * @param pkt packet whose data should be made reference counted.
    740 *
    741 * @return 0 on success, a negative AVERROR on error. On failure, the
    742 *         packet is unchanged.
    743 */
    744 int av_packet_make_refcounted(AVPacket *pkt);
    745 
    746 /**
    747 * Create a writable reference for the data described by a given packet,
    748 * avoiding data copy if possible.
    749 *
    750 * @param pkt Packet whose data should be made writable.
    751 *
    752 * @return 0 on success, a negative AVERROR on failure. On failure, the
    753 *         packet is unchanged.
    754 */
    755 int av_packet_make_writable(AVPacket *pkt);
    756 
    757 /**
    758 * Convert valid timing fields (timestamps / durations) in a packet from one
    759 * timebase to another. Timestamps with unknown values (AV_NOPTS_VALUE) will be
    760 * ignored.
    761 *
    762 * @param pkt packet on which the conversion will be performed
    763 * @param tb_src source timebase, in which the timing fields in pkt are
    764 *               expressed
    765 * @param tb_dst destination timebase, to which the timing fields will be
    766 *               converted
    767 */
    768 void av_packet_rescale_ts(AVPacket *pkt, AVRational tb_src, AVRational tb_dst);
    769 
    770 /**
    771 * @}
    772 */
    773 
    774 #endif // AVCODEC_PACKET_H