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