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