| 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 | , | 
|---|
| 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 | 
|---|
| 775 |  | 
|---|