FFmpeg
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
packet.c
Go to the documentation of this file.
1 /*
2  * AVPacket functions for libavcodec
3  * Copyright (c) 2000, 2001, 2002 Fabrice Bellard
4  *
5  * This file is part of FFmpeg.
6  *
7  * FFmpeg is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * FFmpeg is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with FFmpeg; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20  */
21 
22 #include <string.h>
23 
24 #include "libavutil/avassert.h"
25 #include "libavutil/avutil.h"
27 #include "libavutil/intreadwrite.h"
28 #include "libavutil/mathematics.h"
29 #include "libavutil/mem.h"
30 #include "libavutil/rational.h"
31 
32 #include "defs.h"
33 #include "packet.h"
34 #include "packet_internal.h"
35 
36 #if FF_API_INIT_PACKET
37 void av_init_packet(AVPacket *pkt)
38 {
41  pkt->pos = -1;
42  pkt->duration = 0;
43  pkt->flags = 0;
44  pkt->stream_index = 0;
45  pkt->buf = NULL;
46  pkt->side_data = NULL;
47  pkt->side_data_elems = 0;
48  pkt->opaque = NULL;
49  pkt->opaque_ref = NULL;
50  pkt->time_base = av_make_q(0, 1);
51 }
52 #endif
53 
55 {
56  memset(pkt, 0, sizeof(*pkt));
57 
60  pkt->pos = -1;
61  pkt->time_base = av_make_q(0, 1);
62 }
63 
65 {
66  AVPacket *pkt = av_malloc(sizeof(AVPacket));
67  if (!pkt)
68  return pkt;
69 
71 
72  return pkt;
73 }
74 
76 {
77  if (!pkt || !*pkt)
78  return;
79 
81  av_freep(pkt);
82 }
83 
84 static int packet_alloc(AVBufferRef **buf, int size)
85 {
86  int ret;
87  if (size < 0 || size >= INT_MAX - AV_INPUT_BUFFER_PADDING_SIZE)
88  return AVERROR(EINVAL);
89 
91  if (ret < 0)
92  return ret;
93 
94  memset((*buf)->data + size, 0, AV_INPUT_BUFFER_PADDING_SIZE);
95 
96  return 0;
97 }
98 
100 {
101  AVBufferRef *buf = NULL;
102  int ret = packet_alloc(&buf, size);
103  if (ret < 0)
104  return ret;
105 
107  pkt->buf = buf;
108  pkt->data = buf->data;
109  pkt->size = size;
110 
111  return 0;
112 }
113 
115 {
116  if (pkt->size <= size)
117  return;
118  pkt->size = size;
119  memset(pkt->data + size, 0, AV_INPUT_BUFFER_PADDING_SIZE);
120 }
121 
122 int av_grow_packet(AVPacket *pkt, int grow_by)
123 {
124  int new_size;
125  av_assert0((unsigned)pkt->size <= INT_MAX - AV_INPUT_BUFFER_PADDING_SIZE);
126  if ((unsigned)grow_by >
127  INT_MAX - (pkt->size + AV_INPUT_BUFFER_PADDING_SIZE))
128  return AVERROR(ENOMEM);
129 
130  new_size = pkt->size + grow_by + AV_INPUT_BUFFER_PADDING_SIZE;
131  if (pkt->buf) {
132  size_t data_offset;
133  uint8_t *old_data = pkt->data;
134  if (pkt->data == NULL) {
135  data_offset = 0;
136  pkt->data = pkt->buf->data;
137  } else {
138  data_offset = pkt->data - pkt->buf->data;
139  if (data_offset > INT_MAX - new_size)
140  return AVERROR(ENOMEM);
141  }
142 
143  if (new_size + data_offset > pkt->buf->size ||
145  int ret;
146 
147  // allocate slightly more than requested to avoid excessive
148  // reallocations
149  if (new_size + data_offset < INT_MAX - new_size/16)
150  new_size += new_size/16;
151 
152  ret = av_buffer_realloc(&pkt->buf, new_size + data_offset);
153  if (ret < 0) {
154  pkt->data = old_data;
155  return ret;
156  }
157  pkt->data = pkt->buf->data + data_offset;
158  }
159  } else {
160  pkt->buf = av_buffer_alloc(new_size);
161  if (!pkt->buf)
162  return AVERROR(ENOMEM);
163  if (pkt->size > 0)
164  memcpy(pkt->buf->data, pkt->data, pkt->size);
165  pkt->data = pkt->buf->data;
166  }
167  pkt->size += grow_by;
168  memset(pkt->data + pkt->size, 0, AV_INPUT_BUFFER_PADDING_SIZE);
169 
170  return 0;
171 }
172 
174 {
175  if (size >= INT_MAX - AV_INPUT_BUFFER_PADDING_SIZE)
176  return AVERROR(EINVAL);
177 
180  if (!pkt->buf)
181  return AVERROR(ENOMEM);
182 
183  pkt->data = data;
184  pkt->size = size;
185 
186  return 0;
187 }
188 
190 {
191  int i;
192  for (i = 0; i < pkt->side_data_elems; i++)
195  pkt->side_data_elems = 0;
196 }
197 
199  uint8_t *data, size_t size)
200 {
202  int i, elems = pkt->side_data_elems;
203 
204  for (i = 0; i < elems; i++) {
205  AVPacketSideData *sd = &pkt->side_data[i];
206 
207  if (sd->type == type) {
208  av_free(sd->data);
209  sd->data = data;
210  sd->size = size;
211  return 0;
212  }
213  }
214 
215  if ((unsigned)elems + 1 > AV_PKT_DATA_NB)
216  return AVERROR(ERANGE);
217 
218  tmp = av_realloc(pkt->side_data, (elems + 1) * sizeof(*tmp));
219  if (!tmp)
220  return AVERROR(ENOMEM);
221 
222  pkt->side_data = tmp;
223  pkt->side_data[elems].data = data;
224  pkt->side_data[elems].size = size;
225  pkt->side_data[elems].type = type;
226  pkt->side_data_elems++;
227 
228  return 0;
229 }
230 
231 
233  size_t size)
234 {
235  int ret;
236  uint8_t *data;
237 
238  if (size > SIZE_MAX - AV_INPUT_BUFFER_PADDING_SIZE)
239  return NULL;
241  if (!data)
242  return NULL;
243 
245  if (ret < 0) {
246  av_freep(&data);
247  return NULL;
248  }
249 
250  return data;
251 }
252 
254  size_t *size)
255 {
256  int i;
257 
258  for (i = 0; i < pkt->side_data_elems; i++) {
259  if (pkt->side_data[i].type == type) {
260  if (size)
261  *size = pkt->side_data[i].size;
262  return pkt->side_data[i].data;
263  }
264  }
265  if (size)
266  *size = 0;
267  return NULL;
268 }
269 
271 {
272  switch(type) {
273  case AV_PKT_DATA_PALETTE: return "Palette";
274  case AV_PKT_DATA_NEW_EXTRADATA: return "New Extradata";
275  case AV_PKT_DATA_PARAM_CHANGE: return "Param Change";
276  case AV_PKT_DATA_H263_MB_INFO: return "H263 MB Info";
277  case AV_PKT_DATA_REPLAYGAIN: return "Replay Gain";
278  case AV_PKT_DATA_DISPLAYMATRIX: return "Display Matrix";
279  case AV_PKT_DATA_STEREO3D: return "Stereo 3D";
280  case AV_PKT_DATA_AUDIO_SERVICE_TYPE: return "Audio Service Type";
281  case AV_PKT_DATA_QUALITY_STATS: return "Quality stats";
282  case AV_PKT_DATA_FALLBACK_TRACK: return "Fallback track";
283  case AV_PKT_DATA_CPB_PROPERTIES: return "CPB properties";
284  case AV_PKT_DATA_SKIP_SAMPLES: return "Skip Samples";
285  case AV_PKT_DATA_JP_DUALMONO: return "JP Dual Mono";
286  case AV_PKT_DATA_STRINGS_METADATA: return "Strings Metadata";
287  case AV_PKT_DATA_SUBTITLE_POSITION: return "Subtitle Position";
288  case AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL: return "Matroska BlockAdditional";
289  case AV_PKT_DATA_WEBVTT_IDENTIFIER: return "WebVTT ID";
290  case AV_PKT_DATA_WEBVTT_SETTINGS: return "WebVTT Settings";
291  case AV_PKT_DATA_METADATA_UPDATE: return "Metadata Update";
292  case AV_PKT_DATA_MPEGTS_STREAM_ID: return "MPEGTS Stream ID";
293  case AV_PKT_DATA_MASTERING_DISPLAY_METADATA: return "Mastering display metadata";
294  case AV_PKT_DATA_CONTENT_LIGHT_LEVEL: return "Content light level metadata";
295  case AV_PKT_DATA_SPHERICAL: return "Spherical Mapping";
296  case AV_PKT_DATA_A53_CC: return "A53 Closed Captions";
297  case AV_PKT_DATA_ENCRYPTION_INIT_INFO: return "Encryption initialization data";
298  case AV_PKT_DATA_ENCRYPTION_INFO: return "Encryption info";
299  case AV_PKT_DATA_AFD: return "Active Format Description data";
300  case AV_PKT_DATA_PRFT: return "Producer Reference Time";
301  case AV_PKT_DATA_ICC_PROFILE: return "ICC Profile";
302  case AV_PKT_DATA_DOVI_CONF: return "DOVI configuration record";
303  case AV_PKT_DATA_S12M_TIMECODE: return "SMPTE ST 12-1:2014 timecode";
304  case AV_PKT_DATA_DYNAMIC_HDR10_PLUS: return "HDR10+ Dynamic Metadata (SMPTE 2094-40)";
305  case AV_PKT_DATA_AMBIENT_VIEWING_ENVIRONMENT:return "Ambient viewing environment";
306  case AV_PKT_DATA_IAMF_MIX_GAIN_PARAM: return "IAMF Mix Gain Parameter Data";
307  case AV_PKT_DATA_IAMF_DEMIXING_INFO_PARAM: return "IAMF Demixing Info Parameter Data";
308  case AV_PKT_DATA_IAMF_RECON_GAIN_INFO_PARAM: return "IAMF Recon Gain Info Parameter Data";
309  case AV_PKT_DATA_FRAME_CROPPING: return "Frame Cropping";
310  case AV_PKT_DATA_LCEVC: return "LCEVC NAL data";
311  case AV_PKT_DATA_3D_REFERENCE_DISPLAYS: return "3D Reference Displays Info";
312  case AV_PKT_DATA_RTCP_SR: return "RTCP Sender Report";
313  }
314  return NULL;
315 }
316 
318 {
319  uint8_t *data = NULL;
320  *size = 0;
321 
322  if (!dict)
323  return NULL;
324 
325  for (int pass = 0; pass < 2; pass++) {
326  const AVDictionaryEntry *t = NULL;
327  size_t total_length = 0;
328 
329  while ((t = av_dict_iterate(dict, t))) {
330  for (int i = 0; i < 2; i++) {
331  const char *str = i ? t->value : t->key;
332  const size_t len = strlen(str) + 1;
333 
334  if (pass)
335  memcpy(data + total_length, str, len);
336  else if (len > SIZE_MAX - total_length)
337  return NULL;
338  total_length += len;
339  }
340  }
341  if (pass)
342  break;
343  data = av_malloc(total_length);
344  if (!data)
345  return NULL;
346  *size = total_length;
347  }
348 
349  return data;
350 }
351 
352 int av_packet_unpack_dictionary(const uint8_t *data, size_t size,
353  AVDictionary **dict)
354 {
355  const uint8_t *end;
356  int ret;
357 
358  if (!dict || !data || !size)
359  return 0;
360  end = data + size;
361  if (size && end[-1])
362  return AVERROR_INVALIDDATA;
363  while (data < end) {
364  const uint8_t *key = data;
365  const uint8_t *val = data + strlen(key) + 1;
366 
367  if (val >= end || !*key)
368  return AVERROR_INVALIDDATA;
369 
370  ret = av_dict_set(dict, key, val, 0);
371  if (ret < 0)
372  return ret;
373  data = val + strlen(val) + 1;
374  }
375 
376  return 0;
377 }
378 
380  size_t size)
381 {
382  int i;
383 
384  for (i = 0; i < pkt->side_data_elems; i++) {
385  if (pkt->side_data[i].type == type) {
386  if (size > pkt->side_data[i].size)
387  return AVERROR(ENOMEM);
388  pkt->side_data[i].size = size;
389  return 0;
390  }
391  }
392  return AVERROR(ENOENT);
393 }
394 
396 {
397  int i, ret;
398 
399  dst->pts = src->pts;
400  dst->dts = src->dts;
401  dst->pos = src->pos;
402  dst->duration = src->duration;
403  dst->flags = src->flags;
404  dst->stream_index = src->stream_index;
405  dst->opaque = src->opaque;
406  dst->time_base = src->time_base;
407  dst->opaque_ref = NULL;
408  dst->side_data = NULL;
409  dst->side_data_elems = 0;
410 
411  ret = av_buffer_replace(&dst->opaque_ref, src->opaque_ref);
412  if (ret < 0)
413  return ret;
414 
415  for (i = 0; i < src->side_data_elems; i++) {
416  enum AVPacketSideDataType type = src->side_data[i].type;
417  size_t size = src->side_data[i].size;
418  uint8_t *src_data = src->side_data[i].data;
419  uint8_t *dst_data = av_packet_new_side_data(dst, type, size);
420 
421  if (!dst_data) {
422  av_buffer_unref(&dst->opaque_ref);
424  return AVERROR(ENOMEM);
425  }
426  memcpy(dst_data, src_data, size);
427  }
428 
429  return 0;
430 }
431 
433 {
438 }
439 
441 {
442  int ret;
443 
444  dst->buf = NULL;
445 
447  if (ret < 0)
448  goto fail;
449 
450  if (!src->buf) {
451  ret = packet_alloc(&dst->buf, src->size);
452  if (ret < 0)
453  goto fail;
454  av_assert1(!src->size || src->data);
455  if (src->size)
456  memcpy(dst->buf->data, src->data, src->size);
457 
458  dst->data = dst->buf->data;
459  } else {
460  dst->buf = av_buffer_ref(src->buf);
461  if (!dst->buf) {
462  ret = AVERROR(ENOMEM);
463  goto fail;
464  }
465  dst->data = src->data;
466  }
467 
468  dst->size = src->size;
469 
470  return 0;
471 fail:
473  return ret;
474 }
475 
477 {
479 
480  if (!ret)
481  return ret;
482 
483  if (av_packet_ref(ret, src))
485 
486  return ret;
487 }
488 
490 {
491  *dst = *src;
493 }
494 
496 {
497  int ret;
498 
499  if (pkt->buf)
500  return 0;
501 
502  ret = packet_alloc(&pkt->buf, pkt->size);
503  if (ret < 0)
504  return ret;
505  av_assert1(!pkt->size || pkt->data);
506  if (pkt->size)
507  memcpy(pkt->buf->data, pkt->data, pkt->size);
508 
509  pkt->data = pkt->buf->data;
510 
511  return 0;
512 }
513 
515 {
516  AVBufferRef *buf = NULL;
517  int ret;
518 
519  if (pkt->buf && av_buffer_is_writable(pkt->buf))
520  return 0;
521 
522  ret = packet_alloc(&buf, pkt->size);
523  if (ret < 0)
524  return ret;
525  av_assert1(!pkt->size || pkt->data);
526  if (pkt->size)
527  memcpy(buf->data, pkt->data, pkt->size);
528 
530  pkt->buf = buf;
531  pkt->data = buf->data;
532 
533  return 0;
534 }
535 
537 {
538  if (pkt->pts != AV_NOPTS_VALUE)
539  pkt->pts = av_rescale_q(pkt->pts, src_tb, dst_tb);
540  if (pkt->dts != AV_NOPTS_VALUE)
541  pkt->dts = av_rescale_q(pkt->dts, src_tb, dst_tb);
542  if (pkt->duration > 0)
543  pkt->duration = av_rescale_q(pkt->duration, src_tb, dst_tb);
544 }
545 
547  AVPacket *pkt,
548  int (*copy)(AVPacket *dst, const AVPacket *src),
549  int flags)
550 {
551  PacketListEntry *pktl = av_malloc(sizeof(*pktl));
552  int ret;
553 
554  if (!pktl)
555  return AVERROR(ENOMEM);
556 
557  if (copy) {
558  get_packet_defaults(&pktl->pkt);
559  ret = copy(&pktl->pkt, pkt);
560  if (ret < 0) {
561  av_free(pktl);
562  return ret;
563  }
564  } else {
566  if (ret < 0) {
567  av_free(pktl);
568  return ret;
569  }
570  av_packet_move_ref(&pktl->pkt, pkt);
571  }
572 
573  pktl->next = NULL;
574 
575  if (packet_buffer->head)
576  packet_buffer->tail->next = pktl;
577  else
578  packet_buffer->head = pktl;
579 
580  /* Add the packet in the buffered packet list. */
581  packet_buffer->tail = pktl;
582  return 0;
583 }
584 
586  AVPacket *pkt)
587 {
588  PacketListEntry *pktl = pkt_buffer->head;
589  if (!pktl)
590  return AVERROR(EAGAIN);
591  *pkt = pktl->pkt;
592  pkt_buffer->head = pktl->next;
593  if (!pkt_buffer->head)
594  pkt_buffer->tail = NULL;
595  av_freep(&pktl);
596  return 0;
597 }
598 
600 {
601  PacketListEntry *tmp = pkt_buf->head;
602 
603  while (tmp) {
604  PacketListEntry *pktl = tmp;
605  tmp = pktl->next;
606  av_packet_unref(&pktl->pkt);
607  av_freep(&pktl);
608  }
609  pkt_buf->head = pkt_buf->tail = NULL;
610 }
611 
612 int ff_side_data_set_encoder_stats(AVPacket *pkt, int quality, int64_t *error, int error_count, int pict_type)
613 {
614  uint8_t *side_data;
615  size_t side_data_size;
616  int i;
617 
618  side_data = av_packet_get_side_data(pkt, AV_PKT_DATA_QUALITY_STATS, &side_data_size);
619  if (!side_data) {
620  side_data_size = 4+4+8*error_count;
622  side_data_size);
623  }
624 
625  if (!side_data || side_data_size < 4+4+8*error_count)
626  return AVERROR(ENOMEM);
627 
628  AV_WL32(side_data , quality );
629  side_data[4] = pict_type;
630  side_data[5] = error_count;
631  for (i = 0; i<error_count; i++)
632  AV_WL64(side_data+8 + 8*i , error[i]);
633 
634  return 0;
635 }
636 
638 {
640  uint8_t *side_data;
641  size_t side_data_size;
642 
643  side_data = av_packet_get_side_data(pkt, AV_PKT_DATA_PRFT, &side_data_size);
644  if (!side_data) {
645  side_data_size = sizeof(AVProducerReferenceTime);
646  side_data = av_packet_new_side_data(pkt, AV_PKT_DATA_PRFT, side_data_size);
647  }
648 
649  if (!side_data || side_data_size < sizeof(AVProducerReferenceTime))
650  return AVERROR(ENOMEM);
651 
652  prft = (AVProducerReferenceTime *)side_data;
653  prft->wallclock = timestamp;
654  prft->flags = 0;
655 
656  return 0;
657 }
658 
661 {
662  for (int i = 0; i < nb_sd; i++)
663  if (sd[i].type == type)
664  return &sd[i];
665 
666  return NULL;
667 }
668 
671  void *data, size_t size)
672 {
673  AVPacketSideData *sd = *psd, *tmp;
674  int nb_sd = *pnb_sd;
675 
676  for (int i = 0; i < nb_sd; i++) {
677  if (sd[i].type != type)
678  continue;
679 
680  av_free(sd[i].data);
681  sd[i].data = data;
682  sd[i].size = size;
683  return &sd[i];
684  }
685 
686  if (nb_sd == INT_MAX)
687  return NULL;
688 
689  tmp = av_realloc_array(sd, nb_sd + 1, sizeof(*tmp));
690  if (!tmp)
691  return NULL;
692 
693  *psd = sd = tmp;
694  sd[nb_sd].type = type;
695  sd[nb_sd].data = data;
696  sd[nb_sd].size = size;
697  *pnb_sd = nb_sd + 1;
698 
699  return &sd[nb_sd];
700 }
701 
704  void *data, size_t size, int flags)
705 {
706  return packet_side_data_add(psd, pnb_sd, type, data, size);
707 }
708 
711  size_t size, int flags)
712 {
713  AVPacketSideData *sd = NULL;
714  uint8_t *data;
715 
716  if (size > SIZE_MAX - AV_INPUT_BUFFER_PADDING_SIZE)
717  return NULL;
718 
720  if (!data)
721  return NULL;
722  memset(data + size, 0, AV_INPUT_BUFFER_PADDING_SIZE);
723 
724  sd = packet_side_data_add(psd, pnb_sd, type, data, size);
725  if (!sd)
726  av_freep(&data);
727 
728  return sd;
729 }
730 
733 {
734  int nb_sd = *pnb_sd;
735 
736  for (int i = nb_sd - 1; i >= 0; i--) {
737  if (sd[i].type != type)
738  continue;
739  av_free(sd[i].data);
740  sd[i] = sd[--nb_sd];
741  break;
742  }
743 
744  *pnb_sd = nb_sd;
745 }
746 
748 {
749  AVPacketSideData *sd = *psd;
750  int nb_sd = *pnb_sd;
751 
752  for (int i = 0; i < nb_sd; i++)
753  av_free(sd[i].data);
754 
755  av_freep(psd);
756  *pnb_sd = 0;
757 }
758 
759 static void *container_packet_alloc(void *opaque)
760 {
761  return av_packet_alloc();
762 }
763 
764 static void container_packet_reset(void *opaque, void *obj)
765 {
766  av_packet_unref(obj);
767 }
768 
769 static void container_packet_free(void *opaque, void *obj)
770 {
771  AVPacket *pkt = obj;
773 }
774 
775 static int container_packet_transfer(void *opaque, void *dst, void *src, unsigned flags)
776 {
778  return av_packet_ref(dst, src);
779 
781  return 0;
782 }
783 
785 {
789 }
error
static void error(const char *err)
Definition: target_bsf_fuzzer.c:32
flags
const SwsFlags flags[]
Definition: swscale.c:61
AV_PKT_DATA_DISPLAYMATRIX
@ AV_PKT_DATA_DISPLAYMATRIX
This side data contains a 3x3 transformation matrix describing an affine transformation that needs to...
Definition: packet.h:105
av_packet_unref
void av_packet_unref(AVPacket *pkt)
Wipe the packet.
Definition: packet.c:432
AV_CONTAINER_FIFO_FLAG_REF
@ AV_CONTAINER_FIFO_FLAG_REF
Signal to av_container_fifo_write() that it should make a new reference to data in src rather than co...
Definition: container_fifo.h:39
PacketList::head
PacketListEntry * head
Definition: packet_internal.h:34
AV_PKT_DATA_AMBIENT_VIEWING_ENVIRONMENT
@ AV_PKT_DATA_AMBIENT_VIEWING_ENVIRONMENT
Ambient viewing environment metadata, as defined by H.274.
Definition: packet.h:327
AVERROR
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later. That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another. Frame references ownership and permissions
AV_WL32
#define AV_WL32(p, v)
Definition: intreadwrite.h:422
AV_PKT_DATA_QUALITY_STATS
@ AV_PKT_DATA_QUALITY_STATS
This side data contains quality related information from the encoder.
Definition: packet.h:129
AV_PKT_DATA_FRAME_CROPPING
@ AV_PKT_DATA_FRAME_CROPPING
The number of pixels to discard from the top/bottom/left/right border of the decoded frame to obtain ...
Definition: packet.h:340
AV_PKT_DATA_NEW_EXTRADATA
@ AV_PKT_DATA_NEW_EXTRADATA
The AV_PKT_DATA_NEW_EXTRADATA is used to notify the codec or the format that the extradata buffer was...
Definition: packet.h:56
AVBufferRef::data
uint8_t * data
The data buffer.
Definition: buffer.h:90
AV_PKT_DATA_MASTERING_DISPLAY_METADATA
@ AV_PKT_DATA_MASTERING_DISPLAY_METADATA
Mastering display metadata (based on SMPTE-2086:2014).
Definition: packet.h:219
rational.h
container_packet_alloc
static void * container_packet_alloc(void *opaque)
Definition: packet.c:759
int64_t
long long int64_t
Definition: coverity.c:34
av_grow_packet
int av_grow_packet(AVPacket *pkt, int grow_by)
Increase packet size, correctly zeroing padding.
Definition: packet.c:122
container_fifo.h
AVPacketSideData
This structure stores auxiliary information for decoding, presenting, or otherwise processing the cod...
Definition: packet.h:403
AVProducerReferenceTime::wallclock
int64_t wallclock
A UTC timestamp, in microseconds, since Unix epoch (e.g, av_gettime()).
Definition: defs.h:332
AVPacket::data
uint8_t * data
Definition: packet.h:552
AV_PKT_DATA_ENCRYPTION_INIT_INFO
@ AV_PKT_DATA_ENCRYPTION_INIT_INFO
This side data is encryption initialization data.
Definition: packet.h:246
av_packet_shrink_side_data
int av_packet_shrink_side_data(AVPacket *pkt, enum AVPacketSideDataType type, size_t size)
Shrink the already allocated side data buffer.
Definition: packet.c:379
AV_PKT_DATA_FALLBACK_TRACK
@ AV_PKT_DATA_FALLBACK_TRACK
This side data contains an integer value representing the stream index of a "fallback" track.
Definition: packet.h:137
PacketList
Definition: packet_internal.h:33
data
const char data[16]
Definition: mxf.c:149
av_packet_side_data_remove
void av_packet_side_data_remove(AVPacketSideData *sd, int *pnb_sd, enum AVPacketSideDataType type)
Remove side data of the given type from a side data array.
Definition: packet.c:731
AV_PKT_DATA_S12M_TIMECODE
@ AV_PKT_DATA_S12M_TIMECODE
Timecode which conforms to SMPTE ST 12-1:2014.
Definition: packet.h:288
AVPacket::duration
int64_t duration
Duration of this packet in AVStream->time_base units, 0 if unknown.
Definition: packet.h:570
mathematics.h
AVDictionary
Definition: dict.c:32
av_buffer_ref
AVBufferRef * av_buffer_ref(const AVBufferRef *buf)
Create a new reference to an AVBuffer.
Definition: buffer.c:103
AV_PKT_DATA_RTCP_SR
@ AV_PKT_DATA_RTCP_SR
Contains the last received RTCP SR (Sender Report) information in the form of the AVRTCPSenderReport ...
Definition: packet.h:363
container_packet_reset
static void container_packet_reset(void *opaque, void *obj)
Definition: packet.c:764
av_packet_free_side_data
void av_packet_free_side_data(AVPacket *pkt)
Convenience function to free all the side data stored.
Definition: packet.c:189
av_packet_free
void av_packet_free(AVPacket **pkt)
Free the packet, if the packet is reference counted, it will be unreferenced first.
Definition: packet.c:75
quality
trying all byte sequences megabyte in length and selecting the best looking sequence will yield cases to try But a word about quality
Definition: rate_distortion.txt:12
av_malloc
#define av_malloc(s)
Definition: tableprint_vlc.h:31
AV_PKT_DATA_DOVI_CONF
@ AV_PKT_DATA_DOVI_CONF
DOVI configuration ref: dolby-vision-bitstreams-within-the-iso-base-media-file-format-v2....
Definition: packet.h:280
AVPacketSideData::size
size_t size
Definition: packet.h:405
AV_PKT_DATA_REPLAYGAIN
@ AV_PKT_DATA_REPLAYGAIN
This side data should be associated with an audio stream and contains ReplayGain information in form ...
Definition: packet.h:96
AV_PKT_DATA_IAMF_RECON_GAIN_INFO_PARAM
@ AV_PKT_DATA_IAMF_RECON_GAIN_INFO_PARAM
IAMF Recon Gain Info Parameter Data associated with the audio frame.
Definition: packet.h:320
av_packet_add_side_data
int av_packet_add_side_data(AVPacket *pkt, enum AVPacketSideDataType type, uint8_t *data, size_t size)
Wrap an existing array as a packet side data.
Definition: packet.c:198
AV_PKT_DATA_PALETTE
@ AV_PKT_DATA_PALETTE
An AV_PKT_DATA_PALETTE side data packet contains exactly AVPALETTE_SIZE bytes worth of palette.
Definition: packet.h:47
AVPacket::opaque_ref
AVBufferRef * opaque_ref
AVBufferRef for free use by the API user.
Definition: packet.h:588
fail
#define fail()
Definition: checkasm.h:199
av_shrink_packet
void av_shrink_packet(AVPacket *pkt, int size)
Reduce packet size, correctly zeroing padding.
Definition: packet.c:114
avpriv_packet_list_get
int avpriv_packet_list_get(PacketList *pkt_buffer, AVPacket *pkt)
Remove the oldest AVPacket in the list and return it.
Definition: packet.c:585
val
static double val(void *priv, double ch)
Definition: aeval.c:77
type
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf type
Definition: writing_filters.txt:86
AV_PKT_DATA_WEBVTT_SETTINGS
@ AV_PKT_DATA_WEBVTT_SETTINGS
The optional settings (rendering instructions) that immediately follow the timestamp specifier of a W...
Definition: packet.h:199
avassert.h
AV_PKT_DATA_PARAM_CHANGE
@ AV_PKT_DATA_PARAM_CHANGE
An AV_PKT_DATA_PARAM_CHANGE side data packet is laid out as follows:
Definition: packet.h:69
pkt
AVPacket * pkt
Definition: movenc.c:60
av_packet_side_data_name
const char * av_packet_side_data_name(enum AVPacketSideDataType type)
Definition: packet.c:270
intreadwrite.h
av_new_packet
int av_new_packet(AVPacket *pkt, int size)
Allocate the payload of a packet and initialize its fields with default values.
Definition: packet.c:99
av_realloc_array
void * av_realloc_array(void *ptr, size_t nmemb, size_t size)
Definition: mem.c:217
AVDictionaryEntry::key
char * key
Definition: dict.h:91
av_buffer_default_free
void av_buffer_default_free(void *opaque, uint8_t *data)
Default free callback, which calls av_free() on the buffer data.
Definition: buffer.c:72
av_assert0
#define av_assert0(cond)
assert() equivalent, that is always enabled.
Definition: avassert.h:41
AVPacketSideData::data
uint8_t * data
Definition: packet.h:404
AV_PKT_DATA_STEREO3D
@ AV_PKT_DATA_STEREO3D
This side data should be associated with a video stream and contains Stereoscopic 3D information in f...
Definition: packet.h:111
av_rescale_q
int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq)
Rescale a 64-bit integer by 2 rational numbers.
Definition: mathematics.c:142
AV_PKT_DATA_SUBTITLE_POSITION
@ AV_PKT_DATA_SUBTITLE_POSITION
Subtitle event position.
Definition: packet.h:180
AVContainerFifo
AVContainerFifo is a FIFO for "containers" - dynamically allocated reusable structs (e....
Definition: container_fifo.c:27
AV_PKT_DATA_LCEVC
@ AV_PKT_DATA_LCEVC
Raw LCEVC payload data, as a uint8_t array, with NAL emulation bytes intact.
Definition: packet.h:346
packet_side_data_add
static AVPacketSideData * packet_side_data_add(AVPacketSideData **psd, int *pnb_sd, enum AVPacketSideDataType type, void *data, size_t size)
Definition: packet.c:669
key
const char * key
Definition: hwcontext_opencl.c:189
container_packet_transfer
static int container_packet_transfer(void *opaque, void *dst, void *src, unsigned flags)
Definition: packet.c:775
AVPacket::opaque
void * opaque
for some private data of the user
Definition: packet.h:577
av_packet_side_data_free
void av_packet_side_data_free(AVPacketSideData **psd, int *pnb_sd)
Convenience function to free all the side data stored in an array, and the array itself.
Definition: packet.c:747
PacketList::tail
PacketListEntry * tail
Definition: packet_internal.h:34
avpriv_packet_list_free
void avpriv_packet_list_free(PacketList *pkt_buf)
Wipe the list and unref all the packets in it.
Definition: packet.c:599
AV_PKT_DATA_3D_REFERENCE_DISPLAYS
@ AV_PKT_DATA_3D_REFERENCE_DISPLAYS
This side data contains information about the reference display width(s) and reference viewing distan...
Definition: packet.h:357
AVPacket::buf
AVBufferRef * buf
A reference to the reference-counted buffer where the packet data is stored.
Definition: packet.h:535
NULL
#define NULL
Definition: coverity.c:32
av_buffer_unref
void av_buffer_unref(AVBufferRef **buf)
Free a given reference and automatically free the buffer if there are no more references to it.
Definition: buffer.c:139
tmp
static uint8_t tmp[20]
Definition: aes_ctr.c:47
avpriv_packet_list_put
int avpriv_packet_list_put(PacketList *packet_buffer, AVPacket *pkt, int(*copy)(AVPacket *dst, const AVPacket *src), int flags)
Append an AVPacket to the list.
Definition: packet.c:546
AVRational
Rational number (pair of numerator and denominator).
Definition: rational.h:58
AVPacketSideData::type
enum AVPacketSideDataType type
Definition: packet.h:406
AVProducerReferenceTime
This structure supplies correlation between a packet timestamp and a wall clock production time.
Definition: defs.h:328
av_packet_ref
int av_packet_ref(AVPacket *dst, const AVPacket *src)
Setup a new reference to the data described by a given packet.
Definition: packet.c:440
av_packet_move_ref
void av_packet_move_ref(AVPacket *dst, AVPacket *src)
Move every field in src to dst and reset src.
Definition: packet.c:489
PacketListEntry::next
struct PacketListEntry * next
Definition: packet_internal.h:29
AVProducerReferenceTime::flags
int flags
Definition: defs.h:333
AV_PKT_DATA_CONTENT_LIGHT_LEVEL
@ AV_PKT_DATA_CONTENT_LIGHT_LEVEL
Content light level (based on CTA-861.3).
Definition: packet.h:232
packet_alloc
static int packet_alloc(AVBufferRef **buf, int size)
Definition: packet.c:84
av_buffer_create
AVBufferRef * av_buffer_create(uint8_t *data, size_t size, void(*free)(void *opaque, uint8_t *data), void *opaque, int flags)
Create an AVBuffer from an existing array.
Definition: buffer.c:55
AV_PKT_DATA_NB
@ AV_PKT_DATA_NB
The number of side data types.
Definition: packet.h:373
av_packet_side_data_get
const AVPacketSideData * av_packet_side_data_get(const AVPacketSideData *sd, int nb_sd, enum AVPacketSideDataType type)
Get side information from a side data array.
Definition: packet.c:659
AV_PKT_DATA_SPHERICAL
@ AV_PKT_DATA_SPHERICAL
This side data should be associated with a video stream and corresponds to the AVSphericalMapping str...
Definition: packet.h:225
av_packet_from_data
int av_packet_from_data(AVPacket *pkt, uint8_t *data, int size)
Initialize a reference-counted packet from av_malloc()ed data.
Definition: packet.c:173
AVPacket::size
int size
Definition: packet.h:553
copy
static void copy(const float *p1, float *p2, const int length)
Definition: vf_vaguedenoiser.c:186
container_packet_free
static void container_packet_free(void *opaque, void *obj)
Definition: packet.c:769
dst
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
Definition: dsp.h:87
AV_PKT_DATA_DYNAMIC_HDR10_PLUS
@ AV_PKT_DATA_DYNAMIC_HDR10_PLUS
HDR10+ dynamic metadata associated with a video frame.
Definition: packet.h:296
size
int size
Definition: twinvq_data.h:10344
av_make_q
static AVRational av_make_q(int num, int den)
Create an AVRational.
Definition: rational.h:71
AV_PKT_DATA_METADATA_UPDATE
@ AV_PKT_DATA_METADATA_UPDATE
A list of zero terminated key/value strings.
Definition: packet.h:206
AV_NOPTS_VALUE
#define AV_NOPTS_VALUE
Undefined timestamp value.
Definition: avutil.h:247
PacketListEntry::pkt
AVPacket pkt
Definition: packet_internal.h:30
av_packet_unpack_dictionary
int av_packet_unpack_dictionary(const uint8_t *data, size_t size, AVDictionary **dict)
Unpack a dictionary from side_data.
Definition: packet.c:352
AVPacket::dts
int64_t dts
Decompression timestamp in AVStream->time_base units; the time at which the packet is decompressed.
Definition: packet.h:551
AV_WL64
#define AV_WL64(p, v)
Definition: intreadwrite.h:436
av_packet_side_data_add
AVPacketSideData * av_packet_side_data_add(AVPacketSideData **psd, int *pnb_sd, enum AVPacketSideDataType type, void *data, size_t size, int flags)
Wrap existing data as packet side data.
Definition: packet.c:702
AV_PKT_DATA_PRFT
@ AV_PKT_DATA_PRFT
Producer Reference Time data corresponding to the AVProducerReferenceTime struct, usually exported by...
Definition: packet.h:265
av_packet_pack_dictionary
uint8_t * av_packet_pack_dictionary(AVDictionary *dict, size_t *size)
Pack a dictionary for use in side_data.
Definition: packet.c:317
av_packet_make_refcounted
int av_packet_make_refcounted(AVPacket *pkt)
Ensure the data described by a given packet is reference counted.
Definition: packet.c:495
AVPacket::flags
int flags
A combination of AV_PKT_FLAG values.
Definition: packet.h:558
av_packet_alloc
AVPacket * av_packet_alloc(void)
Allocate an AVPacket and set its fields to default values.
Definition: packet.c:64
av_buffer_alloc
AVBufferRef * av_buffer_alloc(size_t size)
Allocate an AVBuffer of the given size using av_malloc().
Definition: buffer.c:77
av_packet_rescale_ts
void av_packet_rescale_ts(AVPacket *pkt, AVRational src_tb, AVRational dst_tb)
Convert valid timing fields (timestamps / durations) in a packet from one timebase to another.
Definition: packet.c:536
AVBufferRef::size
size_t size
Size of data in bytes.
Definition: buffer.h:94
AV_PKT_DATA_STRINGS_METADATA
@ AV_PKT_DATA_STRINGS_METADATA
A list of zero terminated key/value strings.
Definition: packet.h:169
av_packet_copy_props
int av_packet_copy_props(AVPacket *dst, const AVPacket *src)
Copy only "properties" fields from src to dst.
Definition: packet.c:395
AV_PKT_DATA_CPB_PROPERTIES
@ AV_PKT_DATA_CPB_PROPERTIES
This side data corresponds to the AVCPBProperties struct.
Definition: packet.h:142
AV_PKT_DATA_H263_MB_INFO
@ AV_PKT_DATA_H263_MB_INFO
An AV_PKT_DATA_H263_MB_INFO side data packet contains a number of structures with info about macroblo...
Definition: packet.h:90
PacketListEntry
Definition: packet_internal.h:28
i
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:256
AVPacket::pts
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...
Definition: packet.h:545
get_packet_defaults
static void get_packet_defaults(AVPacket *pkt)
Definition: packet.c:54
packet.h
av_packet_get_side_data
uint8_t * av_packet_get_side_data(const AVPacket *pkt, enum AVPacketSideDataType type, size_t *size)
Get side information from packet.
Definition: packet.c:253
AV_PKT_DATA_ICC_PROFILE
@ AV_PKT_DATA_ICC_PROFILE
ICC profile data consisting of an opaque octet buffer following the format described by ISO 15076-1.
Definition: packet.h:271
av_assert1
#define av_assert1(cond)
assert() equivalent, that does not lie in speed critical code.
Definition: avassert.h:57
av_mallocz
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
Definition: mem.c:256
AV_PKT_DATA_MPEGTS_STREAM_ID
@ AV_PKT_DATA_MPEGTS_STREAM_ID
MPEGTS stream ID as uint8_t, this is required to pass the stream ID information from the demuxer to t...
Definition: packet.h:212
av_buffer_replace
int av_buffer_replace(AVBufferRef **pdst, const AVBufferRef *src)
Ensure dst refers to the same data as src.
Definition: buffer.c:233
len
int len
Definition: vorbis_enc_data.h:426
av_buffer_is_writable
int av_buffer_is_writable(const AVBufferRef *buf)
Definition: buffer.c:147
AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL
@ AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL
Data found in BlockAdditional element of matroska container.
Definition: packet.h:188
ret
ret
Definition: filter_design.txt:187
AV_PKT_DATA_JP_DUALMONO
@ AV_PKT_DATA_JP_DUALMONO
An AV_PKT_DATA_JP_DUALMONO side data packet indicates that the packet may contain "dual mono" audio s...
Definition: packet.h:163
av_packet_side_data_new
AVPacketSideData * av_packet_side_data_new(AVPacketSideData **psd, int *pnb_sd, enum AVPacketSideDataType type, size_t size, int flags)
Allocate a new packet side data.
Definition: packet.c:709
AVPacket::side_data
AVPacketSideData * side_data
Additional packet data that can be provided by the container.
Definition: packet.h:563
AV_INPUT_BUFFER_PADDING_SIZE
#define AV_INPUT_BUFFER_PADDING_SIZE
Definition: defs.h:40
AV_PKT_DATA_WEBVTT_IDENTIFIER
@ AV_PKT_DATA_WEBVTT_IDENTIFIER
The optional first identifier line of a WebVTT cue.
Definition: packet.h:193
av_packet_new_side_data
uint8_t * av_packet_new_side_data(AVPacket *pkt, enum AVPacketSideDataType type, size_t size)
Allocate new information of a packet.
Definition: packet.c:232
defs.h
av_packet_make_writable
int av_packet_make_writable(AVPacket *pkt)
Create a writable reference for the data described by a given packet, avoiding data copy if possible.
Definition: packet.c:514
AV_PKT_DATA_AFD
@ AV_PKT_DATA_AFD
Active Format Description data consisting of a single byte as specified in ETSI TS 101 154 using AVAc...
Definition: packet.h:258
AV_PKT_DATA_SKIP_SAMPLES
@ AV_PKT_DATA_SKIP_SAMPLES
Recommmends skipping the specified number of samples.
Definition: packet.h:153
AVPacketSideDataType
AVPacketSideDataType
Definition: packet.h:41
AVPacket::stream_index
int stream_index
Definition: packet.h:554
ff_side_data_set_prft
int ff_side_data_set_prft(AVPacket *pkt, int64_t timestamp)
Definition: packet.c:637
av_buffer_realloc
int av_buffer_realloc(AVBufferRef **pbuf, size_t size)
Reallocate a given buffer.
Definition: buffer.c:183
AV_PKT_DATA_ENCRYPTION_INFO
@ AV_PKT_DATA_ENCRYPTION_INFO
This side data contains encryption info for how to decrypt the packet.
Definition: packet.h:252
AV_PKT_DATA_AUDIO_SERVICE_TYPE
@ AV_PKT_DATA_AUDIO_SERVICE_TYPE
This side data should be associated with an audio stream and corresponds to enum AVAudioServiceType.
Definition: packet.h:117
avutil.h
AV_PKT_DATA_A53_CC
@ AV_PKT_DATA_A53_CC
ATSC A53 Part 4 Closed Captions.
Definition: packet.h:239
mem.h
AVBufferRef
A reference to a data buffer.
Definition: buffer.h:82
packet_internal.h
av_free
#define av_free(p)
Definition: tableprint_vlc.h:34
AVDictionaryEntry
Definition: dict.h:90
AVPacket
This structure stores compressed data.
Definition: packet.h:529
av_freep
#define av_freep(p)
Definition: tableprint_vlc.h:35
av_dict_set
int av_dict_set(AVDictionary **pm, const char *key, const char *value, int flags)
Set the given entry in *pm, overwriting an existing entry.
Definition: dict.c:86
AVPacket::pos
int64_t pos
byte position in stream, -1 if unknown
Definition: packet.h:572
AVERROR_INVALIDDATA
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition: error.h:61
ff_side_data_set_encoder_stats
int ff_side_data_set_encoder_stats(AVPacket *pkt, int quality, int64_t *error, int error_count, int pict_type)
Definition: packet.c:612
AVDictionaryEntry::value
char * value
Definition: dict.h:92
AV_PKT_DATA_IAMF_MIX_GAIN_PARAM
@ AV_PKT_DATA_IAMF_MIX_GAIN_PARAM
IAMF Mix Gain Parameter Data associated with the audio frame.
Definition: packet.h:304
av_dict_iterate
const AVDictionaryEntry * av_dict_iterate(const AVDictionary *m, const AVDictionaryEntry *prev)
Iterate over a dictionary.
Definition: dict.c:42
src
#define src
Definition: vp8dsp.c:248
AVPacket::time_base
AVRational time_base
Time base of the packet's timestamps.
Definition: packet.h:596
AVPacket::side_data_elems
int side_data_elems
Definition: packet.h:564
av_container_fifo_alloc
AVContainerFifo * av_container_fifo_alloc(void *opaque, void *(*container_alloc)(void *opaque), void(*container_reset)(void *opaque, void *obj), void(*container_free)(void *opaque, void *obj), int(*fifo_transfer)(void *opaque, void *dst, void *src, unsigned flags), unsigned flags)
Allocate a new AVContainerFifo for the container type defined by provided callbacks.
Definition: container_fifo.c:64
av_realloc
void * av_realloc(void *ptr, size_t size)
Allocate, reallocate, or free a block of memory.
Definition: mem.c:155
av_packet_clone
AVPacket * av_packet_clone(const AVPacket *src)
Create a new packet that references the same data as src.
Definition: packet.c:476
av_container_fifo_alloc_avpacket
AVContainerFifo * av_container_fifo_alloc_avpacket(unsigned flags)
Allocate an AVContainerFifo instance for AVPacket.
Definition: packet.c:784
AV_PKT_DATA_IAMF_DEMIXING_INFO_PARAM
@ AV_PKT_DATA_IAMF_DEMIXING_INFO_PARAM
IAMF Demixing Info Parameter Data associated with the audio frame.
Definition: packet.h:312