FFmpeg
avformat.c
Go to the documentation of this file.
1 /*
2  * Various functions used by both muxers and demuxers
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 <math.h>
23 #include "libavutil/avassert.h"
24 #include "libavutil/avstring.h"
26 #include "libavutil/frame.h"
27 #include "libavutil/iamf.h"
28 #include "libavutil/intreadwrite.h"
29 #include "libavutil/mem.h"
30 #include "libavutil/opt.h"
31 #include "libavutil/pixfmt.h"
32 #include "libavutil/samplefmt.h"
33 #include "libavcodec/avcodec.h"
34 #include "libavcodec/codec.h"
35 #include "libavcodec/bsf.h"
36 #include "libavcodec/codec_desc.h"
38 #include "avformat.h"
39 #include "avformat_internal.h"
40 #include "avio.h"
41 #include "demux.h"
42 #include "mux.h"
43 #include "internal.h"
44 
46 {
47  AVStream *st = *pst;
48  FFStream *const sti = ffstream(st);
49 
50  if (!st)
51  return;
52 
53  if (st->attached_pic.data)
55 
56  av_parser_close(sti->parser);
58  av_bsf_free(&sti->bsfc);
59  av_freep(&sti->index_entries);
60  av_freep(&sti->probe_data.buf);
61 
63 
65 
66  if (sti->info) {
68  av_freep(&sti->info);
69  }
70 
71  av_dict_free(&st->metadata);
73  av_freep(&st->priv_data);
74 
75  av_freep(pst);
76 }
77 
79 {
80  AVStreamGroup *stg = *pstg;
81 
82  if (!stg)
83  return;
84 
85  av_freep(&stg->streams);
86  av_dict_free(&stg->metadata);
87  av_freep(&stg->priv_data);
88  switch (stg->type) {
91  break;
92  }
95  break;
96  }
102  av_freep(&stg->params.tile_grid);
103  break;
105  av_opt_free(stg->params.lcevc);
106  av_freep(&stg->params.lcevc);
107  break;
108  default:
109  break;
110  }
111 
112  av_freep(pstg);
113 }
114 
116 {
117  av_assert0(s->nb_streams>0);
118  av_assert0(s->streams[ s->nb_streams - 1 ] == st);
119 
120  ff_free_stream(&s->streams[ --s->nb_streams ]);
121 }
122 
124 {
125  av_assert0(s->nb_stream_groups > 0);
126  av_assert0(s->stream_groups[ s->nb_stream_groups - 1 ] == stg);
127 
128  ff_free_stream_group(&s->stream_groups[ --s->nb_stream_groups ]);
129 }
130 
131 /* XXX: suppress the packet queue */
133 {
134  FormatContextInternal *const fci = ff_fc_internal(s);
135  FFFormatContext *const si = &fci->fc;
139 
140  fci->raw_packet_buffer_size = 0;
141 }
142 
144 {
146  FFFormatContext *si;
147 
148  if (!s)
149  return;
150  fci = ff_fc_internal(s);
151  si = &fci->fc;
152 
153  if (s->oformat && ffofmt(s->oformat)->deinit && fci->initialized)
154  ffofmt(s->oformat)->deinit(s);
155 
156  av_opt_free(s);
157  if (s->iformat && s->iformat->priv_class && s->priv_data)
158  av_opt_free(s->priv_data);
159  if (s->oformat && s->oformat->priv_class && s->priv_data)
160  av_opt_free(s->priv_data);
161 
162  for (unsigned i = 0; i < s->nb_streams; i++)
163  ff_free_stream(&s->streams[i]);
164  for (unsigned i = 0; i < s->nb_stream_groups; i++)
165  ff_free_stream_group(&s->stream_groups[i]);
166  s->nb_stream_groups = 0;
167  s->nb_streams = 0;
168 
169  for (unsigned i = 0; i < s->nb_programs; i++) {
170  av_dict_free(&s->programs[i]->metadata);
171  av_freep(&s->programs[i]->stream_index);
172  av_freep(&s->programs[i]);
173  }
174  s->nb_programs = 0;
175 
176  av_freep(&s->programs);
177  av_freep(&s->priv_data);
178  while (s->nb_chapters--) {
179  av_dict_free(&s->chapters[s->nb_chapters]->metadata);
180  av_freep(&s->chapters[s->nb_chapters]);
181  }
182  av_freep(&s->chapters);
183  av_dict_free(&s->metadata);
184  av_dict_free(&si->id3v2_meta);
185  av_packet_free(&si->pkt);
188  av_freep(&s->streams);
189  av_freep(&s->stream_groups);
190  if (s->iformat)
192  av_freep(&s->url);
193  av_freep(&s->name);
194  av_free(s);
195 }
196 
197 /**
198  * Copy all stream parameters from source to destination stream, with the
199  * exception of the index field, which is usually set by avformat_new_stream().
200  *
201  * @param dst pointer to destination AVStream
202  * @param src pointer to source AVStream
203  * @return >=0 on success, AVERROR code on error
204  */
206 {
207  int ret;
208 
209  dst->id = src->id;
210  dst->time_base = src->time_base;
211  dst->start_time = src->start_time;
212  dst->duration = src->duration;
213  dst->nb_frames = src->nb_frames;
214  dst->disposition = src->disposition;
215  dst->discard = src->discard;
216  dst->sample_aspect_ratio = src->sample_aspect_ratio;
217  dst->avg_frame_rate = src->avg_frame_rate;
218  dst->event_flags = src->event_flags;
219  dst->r_frame_rate = src->r_frame_rate;
220  dst->pts_wrap_bits = src->pts_wrap_bits;
221 
222  av_dict_free(&dst->metadata);
223  ret = av_dict_copy(&dst->metadata, src->metadata, 0);
224  if (ret < 0)
225  return ret;
226 
227  ret = avcodec_parameters_copy(dst->codecpar, src->codecpar);
228  if (ret < 0)
229  return ret;
230 
231  av_packet_unref(&dst->attached_pic);
232  if (src->attached_pic.data) {
233  ret = av_packet_ref(&dst->attached_pic, &src->attached_pic);
234  if (ret < 0)
235  return ret;
236  }
237 
238  return 0;
239 }
240 
242 {
243  AVStream *st;
244  int ret;
245 
246  st = avformat_new_stream(dst_ctx, NULL);
247  if (!st)
248  return NULL;
249 
250  ret = stream_params_copy(st, src);
251  if (ret < 0) {
252  ff_remove_stream(dst_ctx, st);
253  return NULL;
254  }
255 
256  return st;
257 }
258 
260 {
261  switch(type) {
262  case AV_STREAM_GROUP_PARAMS_IAMF_AUDIO_ELEMENT: return "IAMF Audio Element";
263  case AV_STREAM_GROUP_PARAMS_IAMF_MIX_PRESENTATION: return "IAMF Mix Presentation";
264  case AV_STREAM_GROUP_PARAMS_TILE_GRID: return "Tile Grid";
265  case AV_STREAM_GROUP_PARAMS_LCEVC: return "LCEVC (Split video and enhancement)";
266  }
267  return NULL;
268 }
269 
271 {
273  int ret;
274 
275  av_log(ac, AV_LOG_TRACE, "new_program: id=0x%04x\n", id);
276 
277  for (unsigned i = 0; i < ac->nb_programs; i++)
278  if (ac->programs[i]->id == id)
279  program = ac->programs[i];
280 
281  if (!program) {
282  program = av_mallocz(sizeof(*program));
283  if (!program)
284  return NULL;
286  if (ret < 0) {
287  av_free(program);
288  return NULL;
289  }
290  program->discard = AVDISCARD_NONE;
291  program->pmt_version = -1;
292  program->id = id;
293  program->pts_wrap_reference = AV_NOPTS_VALUE;
294  program->pts_wrap_behavior = AV_PTS_WRAP_IGNORE;
295  program->start_time =
296  program->end_time = AV_NOPTS_VALUE;
297  }
298  return program;
299 }
300 
301 void av_program_add_stream_index(AVFormatContext *ac, int progid, unsigned idx)
302 {
304  void *tmp;
305 
306  if (idx >= ac->nb_streams) {
307  av_log(ac, AV_LOG_ERROR, "stream index %d is not valid\n", idx);
308  return;
309  }
310 
311  for (unsigned i = 0; i < ac->nb_programs; i++) {
312  if (ac->programs[i]->id != progid)
313  continue;
314  program = ac->programs[i];
315  for (unsigned j = 0; j < program->nb_stream_indexes; j++)
316  if (program->stream_index[j] == idx)
317  return;
318 
319  tmp = av_realloc_array(program->stream_index, program->nb_stream_indexes+1, sizeof(unsigned int));
320  if (!tmp)
321  return;
322  program->stream_index = tmp;
323  program->stream_index[program->nb_stream_indexes++] = idx;
324  return;
325  }
326 }
327 
329 {
330  for (unsigned i = 0; i < ic->nb_programs; i++) {
331  if (ic->programs[i] == last) {
332  last = NULL;
333  } else {
334  if (!last)
335  for (unsigned j = 0; j < ic->programs[i]->nb_stream_indexes; j++)
336  if (ic->programs[i]->stream_index[j] == s)
337  return ic->programs[i];
338  }
339  }
340  return NULL;
341 }
342 
344 {
345  int best_stream = 0;
346  int best_score = INT_MIN;
347 
348  if (s->nb_streams <= 0)
349  return -1;
350  for (unsigned i = 0; i < s->nb_streams; i++) {
351  const AVStream *const st = s->streams[i];
352  const FFStream *const sti = cffstream(st);
353  int score = 0;
354  if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) {
356  score -= 400;
357  if (st->codecpar->width && st->codecpar->height)
358  score += 50;
359  score+= 25;
360  }
361  if (st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO) {
362  if (st->codecpar->sample_rate)
363  score += 50;
364  }
365  if (sti->codec_info_nb_frames)
366  score += 12;
367 
368  if (st->discard != AVDISCARD_ALL)
369  score += 200;
370 
371  if (score > best_score) {
372  best_score = score;
373  best_stream = i;
374  }
375  }
376  return best_stream;
377 }
378 
380  int wanted_stream_nb, int related_stream,
381  const AVCodec **decoder_ret, int flags)
382 {
383  int nb_streams = ic->nb_streams;
385  int best_count = -1, best_multiframe = -1, best_disposition = -1;
386  int count, multiframe, disposition;
387  int64_t best_bitrate = -1;
389  unsigned *program = NULL;
390  const AVCodec *decoder = NULL, *best_decoder = NULL;
391 
392  if (related_stream >= 0 && wanted_stream_nb < 0) {
393  AVProgram *p = av_find_program_from_stream(ic, NULL, related_stream);
394  if (p) {
395  program = p->stream_index;
396  nb_streams = p->nb_stream_indexes;
397  }
398  }
399  for (unsigned i = 0; i < nb_streams; i++) {
400  int real_stream_index = program ? program[i] : i;
401  AVStream *st = ic->streams[real_stream_index];
402  AVCodecParameters *par = st->codecpar;
403  if (par->codec_type != type)
404  continue;
405  if (wanted_stream_nb >= 0 && real_stream_index != wanted_stream_nb)
406  continue;
407  if (type == AVMEDIA_TYPE_AUDIO && !(par->ch_layout.nb_channels && par->sample_rate))
408  continue;
409  if (decoder_ret) {
410  decoder = ff_find_decoder(ic, st, par->codec_id);
411  if (!decoder) {
412  if (ret < 0)
414  continue;
415  }
416  }
418  + !! (st->disposition & AV_DISPOSITION_DEFAULT);
419  count = ffstream(st)->codec_info_nb_frames;
420  bitrate = par->bit_rate;
421  multiframe = FFMIN(5, count);
422  if ((best_disposition > disposition) ||
423  (best_disposition == disposition && best_multiframe > multiframe) ||
424  (best_disposition == disposition && best_multiframe == multiframe && best_bitrate > bitrate) ||
425  (best_disposition == disposition && best_multiframe == multiframe && best_bitrate == bitrate && best_count >= count))
426  continue;
427  best_disposition = disposition;
428  best_count = count;
429  best_bitrate = bitrate;
430  best_multiframe = multiframe;
431  ret = real_stream_index;
432  best_decoder = decoder;
433  if (program && i == nb_streams - 1 && ret < 0) {
434  program = NULL;
435  nb_streams = ic->nb_streams;
436  /* no related stream found, try again with everything */
437  i = 0;
438  }
439  }
440  if (decoder_ret)
441  *decoder_ret = best_decoder;
442  return ret;
443 }
444 
445 /**
446  * Matches a stream specifier (but ignores requested index).
447  *
448  * @param indexptr set to point to the requested stream index if there is one
449  *
450  * @return <0 on error
451  * 0 if st is NOT a matching stream
452  * >0 if st is a matching stream
453  */
454 static int match_stream_specifier(const AVFormatContext *s, const AVStream *st,
455  const char *spec, const char **indexptr,
456  const AVStreamGroup **g, const AVProgram **p)
457 {
458  int match = 1; /* Stores if the specifier matches so far. */
459  while (*spec) {
460  if (*spec <= '9' && *spec >= '0') { /* opt:index */
461  if (indexptr)
462  *indexptr = spec;
463  return match;
464  } else if (*spec == 'v' || *spec == 'a' || *spec == 's' || *spec == 'd' ||
465  *spec == 't' || *spec == 'V') { /* opt:[vasdtV] */
466  enum AVMediaType type;
467  int nopic = 0;
468 
469  switch (*spec++) {
470  case 'v': type = AVMEDIA_TYPE_VIDEO; break;
471  case 'a': type = AVMEDIA_TYPE_AUDIO; break;
472  case 's': type = AVMEDIA_TYPE_SUBTITLE; break;
473  case 'd': type = AVMEDIA_TYPE_DATA; break;
474  case 't': type = AVMEDIA_TYPE_ATTACHMENT; break;
475  case 'V': type = AVMEDIA_TYPE_VIDEO; nopic = 1; break;
476  default: av_assert0(0);
477  }
478  if (*spec && *spec++ != ':') /* If we are not at the end, then another specifier must follow. */
479  return AVERROR(EINVAL);
480 
481  if (type != st->codecpar->codec_type)
482  match = 0;
483  if (nopic && (st->disposition & AV_DISPOSITION_ATTACHED_PIC))
484  match = 0;
485  } else if (*spec == 'g' && *(spec + 1) == ':') {
486  int64_t group_idx = -1, group_id = -1;
487  int found = 0;
488  char *endptr;
489  spec += 2;
490  if (*spec == '#' || (*spec == 'i' && *(spec + 1) == ':')) {
491  spec += 1 + (*spec == 'i');
492  group_id = strtol(spec, &endptr, 0);
493  if (spec == endptr || (*endptr && *endptr++ != ':'))
494  return AVERROR(EINVAL);
495  spec = endptr;
496  } else {
497  group_idx = strtol(spec, &endptr, 0);
498  /* Disallow empty id and make sure that if we are not at the end, then another specifier must follow. */
499  if (spec == endptr || (*endptr && *endptr++ != ':'))
500  return AVERROR(EINVAL);
501  spec = endptr;
502  }
503  if (match) {
504  if (group_id > 0) {
505  for (unsigned i = 0; i < s->nb_stream_groups; i++) {
506  if (group_id == s->stream_groups[i]->id) {
507  group_idx = i;
508  break;
509  }
510  }
511  }
512  if (group_idx < 0 || group_idx >= s->nb_stream_groups)
513  return AVERROR(EINVAL);
514  for (unsigned j = 0; j < s->stream_groups[group_idx]->nb_streams; j++) {
515  if (st->index == s->stream_groups[group_idx]->streams[j]->index) {
516  found = 1;
517  if (g)
518  *g = s->stream_groups[group_idx];
519  break;
520  }
521  }
522  }
523  if (!found)
524  match = 0;
525  } else if (*spec == 'p' && *(spec + 1) == ':') {
526  int prog_id;
527  int found = 0;
528  char *endptr;
529  spec += 2;
530  prog_id = strtol(spec, &endptr, 0);
531  /* Disallow empty id and make sure that if we are not at the end, then another specifier must follow. */
532  if (spec == endptr || (*endptr && *endptr++ != ':'))
533  return AVERROR(EINVAL);
534  spec = endptr;
535  if (match) {
536  for (unsigned i = 0; i < s->nb_programs; i++) {
537  if (s->programs[i]->id != prog_id)
538  continue;
539 
540  for (unsigned j = 0; j < s->programs[i]->nb_stream_indexes; j++) {
541  if (st->index == s->programs[i]->stream_index[j]) {
542  found = 1;
543  if (p)
544  *p = s->programs[i];
545  i = s->nb_programs;
546  break;
547  }
548  }
549  }
550  }
551  if (!found)
552  match = 0;
553  } else if (*spec == '#' ||
554  (*spec == 'i' && *(spec + 1) == ':')) {
555  int stream_id;
556  char *endptr;
557  spec += 1 + (*spec == 'i');
558  stream_id = strtol(spec, &endptr, 0);
559  if (spec == endptr || *endptr) /* Disallow empty id and make sure we are at the end. */
560  return AVERROR(EINVAL);
561  return match && (stream_id == st->id);
562  } else if (*spec == 'm' && *(spec + 1) == ':') {
563  const AVDictionaryEntry *tag;
564  char *key, *val;
565  int ret;
566 
567  if (match) {
568  spec += 2;
569  val = strchr(spec, ':');
570 
571  key = val ? av_strndup(spec, val - spec) : av_strdup(spec);
572  if (!key)
573  return AVERROR(ENOMEM);
574 
575  tag = av_dict_get(st->metadata, key, NULL, 0);
576  if (tag) {
577  if (!val || !strcmp(tag->value, val + 1))
578  ret = 1;
579  else
580  ret = 0;
581  } else
582  ret = 0;
583 
584  av_freep(&key);
585  }
586  return match && ret;
587  } else if (*spec == 'u' && *(spec + 1) == '\0') {
588  const AVCodecParameters *par = st->codecpar;
589  int val;
590  switch (par->codec_type) {
591  case AVMEDIA_TYPE_AUDIO:
592  val = par->sample_rate && par->ch_layout.nb_channels;
593  if (par->format == AV_SAMPLE_FMT_NONE)
594  return 0;
595  break;
596  case AVMEDIA_TYPE_VIDEO:
597  val = par->width && par->height;
598  if (par->format == AV_PIX_FMT_NONE)
599  return 0;
600  break;
602  val = 0;
603  break;
604  default:
605  val = 1;
606  break;
607  }
608  return match && (par->codec_id != AV_CODEC_ID_NONE && val != 0);
609  } else {
610  return AVERROR(EINVAL);
611  }
612  }
613 
614  return match;
615 }
616 
618  const char *spec)
619 {
620  int ret, index;
621  char *endptr;
622  const char *indexptr = NULL;
623  const AVStreamGroup *g = NULL;
624  const AVProgram *p = NULL;
625  int nb_streams;
626 
627  ret = match_stream_specifier(s, st, spec, &indexptr, &g, &p);
628  if (ret < 0)
629  goto error;
630 
631  if (!indexptr)
632  return ret;
633 
634  index = strtol(indexptr, &endptr, 0);
635  if (*endptr) { /* We can't have anything after the requested index. */
636  ret = AVERROR(EINVAL);
637  goto error;
638  }
639 
640  /* This is not really needed but saves us a loop for simple stream index specifiers. */
641  if (spec == indexptr)
642  return (index == st->index);
643 
644  /* If we requested a matching stream index, we have to ensure st is that. */
645  nb_streams = g ? g->nb_streams : (p ? p->nb_stream_indexes : s->nb_streams);
646  for (int i = 0; i < nb_streams && index >= 0; i++) {
647  unsigned idx = g ? g->streams[i]->index : (p ? p->stream_index[i] : i);
648  const AVStream *candidate = s->streams[idx];
649  ret = match_stream_specifier(s, candidate, spec, NULL, NULL, NULL);
650  if (ret < 0)
651  goto error;
652  if (ret > 0 && index-- == 0 && st == candidate)
653  return 1;
654  }
655  return 0;
656 
657 error:
658  if (ret == AVERROR(EINVAL))
659  av_log(s, AV_LOG_ERROR, "Invalid stream specifier: %s.\n", spec);
660  return ret;
661 }
662 
664 {
665  AVRational undef = {0, 1};
666  AVRational stream_sample_aspect_ratio = stream ? stream->sample_aspect_ratio : undef;
667  AVRational codec_sample_aspect_ratio = stream && stream->codecpar ? stream->codecpar->sample_aspect_ratio : undef;
668  AVRational frame_sample_aspect_ratio = frame ? frame->sample_aspect_ratio : codec_sample_aspect_ratio;
669 
670  av_reduce(&stream_sample_aspect_ratio.num, &stream_sample_aspect_ratio.den,
671  stream_sample_aspect_ratio.num, stream_sample_aspect_ratio.den, INT_MAX);
672  if (stream_sample_aspect_ratio.num <= 0 || stream_sample_aspect_ratio.den <= 0)
673  stream_sample_aspect_ratio = undef;
674 
675  av_reduce(&frame_sample_aspect_ratio.num, &frame_sample_aspect_ratio.den,
676  frame_sample_aspect_ratio.num, frame_sample_aspect_ratio.den, INT_MAX);
677  if (frame_sample_aspect_ratio.num <= 0 || frame_sample_aspect_ratio.den <= 0)
678  frame_sample_aspect_ratio = undef;
679 
680  if (stream_sample_aspect_ratio.num)
681  return stream_sample_aspect_ratio;
682  else
683  return frame_sample_aspect_ratio;
684 }
685 
687 {
688  AVRational fr = st->r_frame_rate;
690  AVRational avg_fr = st->avg_frame_rate;
691 
692  if (avg_fr.num > 0 && avg_fr.den > 0 && fr.num > 0 && fr.den > 0 &&
693  av_q2d(avg_fr) < 70 && av_q2d(fr) > 210) {
694  fr = avg_fr;
695  }
696 
697  if (desc && (desc->props & AV_CODEC_PROP_FIELDS)) {
698  const AVCodecContext *const avctx = ffstream(st)->avctx;
699  AVRational codec_fr = avctx->framerate;
700 
701  if ( codec_fr.num > 0 && codec_fr.den > 0 &&
702  (fr.num == 0 || av_q2d(codec_fr) < av_q2d(fr)*0.7 && fabs(1.0 - av_q2d(av_div_q(avg_fr, fr))) > 0.1))
703  fr = codec_fr;
704  }
705 
706  return fr;
707 }
708 
709 #if FF_API_INTERNAL_TIMING
710 int avformat_transfer_internal_stream_timing_info(const AVOutputFormat *ofmt,
711  AVStream *ost, const AVStream *ist,
712  enum AVTimebaseSource copy_tb)
713 {
715  const AVCodecContext *const dec_ctx = cffstream(ist)->avctx;
716 
717  AVRational mul = (AVRational){ desc && (desc->props & AV_CODEC_PROP_FIELDS) ? 2 : 1, 1 };
718  AVRational dec_ctx_framerate = dec_ctx ? dec_ctx->framerate : (AVRational){ 0, 0 };
719  AVRational dec_ctx_tb = dec_ctx_framerate.num ? av_inv_q(av_mul_q(dec_ctx_framerate, mul))
720  : (ist->codecpar->codec_type == AVMEDIA_TYPE_AUDIO ? (AVRational){0, 1}
721  : ist->time_base);
722  AVRational enc_tb = ist->time_base;
723 
724  /*
725  * Avi is a special case here because it supports variable fps but
726  * having the fps and timebase differe significantly adds quite some
727  * overhead
728  */
729  if (!strcmp(ofmt->name, "avi")) {
730 #if FF_API_R_FRAME_RATE
731  if (copy_tb == AVFMT_TBCF_AUTO && ist->r_frame_rate.num
732  && av_q2d(ist->r_frame_rate) >= av_q2d(ist->avg_frame_rate)
733  && 0.5/av_q2d(ist->r_frame_rate) > av_q2d(ist->time_base)
734  && 0.5/av_q2d(ist->r_frame_rate) > av_q2d(dec_ctx_tb)
735  && av_q2d(ist->time_base) < 1.0/500 && av_q2d(dec_ctx_tb) < 1.0/500
736  || copy_tb == AVFMT_TBCF_R_FRAMERATE) {
737  enc_tb.num = ist->r_frame_rate.den;
738  enc_tb.den = 2*ist->r_frame_rate.num;
739  } else
740 #endif
741  if (copy_tb == AVFMT_TBCF_AUTO && dec_ctx_framerate.num &&
742  av_q2d(av_inv_q(dec_ctx_framerate)) > 2*av_q2d(ist->time_base)
743  && av_q2d(ist->time_base) < 1.0/500
744  || (copy_tb == AVFMT_TBCF_DECODER &&
745  (dec_ctx_framerate.num || ist->codecpar->codec_type == AVMEDIA_TYPE_AUDIO))) {
746  enc_tb = dec_ctx_tb;
747  enc_tb.den *= 2;
748  }
749  } else if (!(ofmt->flags & AVFMT_VARIABLE_FPS)
750  && !av_match_name(ofmt->name, "mov,mp4,3gp,3g2,psp,ipod,ismv,f4v")) {
751  if (copy_tb == AVFMT_TBCF_AUTO && dec_ctx_framerate.num
752  && av_q2d(av_inv_q(dec_ctx_framerate)) > av_q2d(ist->time_base)
753  && av_q2d(ist->time_base) < 1.0/500
754  || (copy_tb == AVFMT_TBCF_DECODER &&
755  (dec_ctx_framerate.num || ist->codecpar->codec_type == AVMEDIA_TYPE_AUDIO))) {
756  enc_tb = dec_ctx_tb;
757  }
758  }
759 
760  if (ost->codecpar->codec_tag == AV_RL32("tmcd")
761  && dec_ctx_tb.num < dec_ctx_tb.den
762  && dec_ctx_tb.num > 0
763  && 121LL*dec_ctx_tb.num > dec_ctx_tb.den) {
764  enc_tb = dec_ctx_tb;
765  }
766 
767  av_reduce(&ffstream(ost)->transferred_mux_tb.num,
768  &ffstream(ost)->transferred_mux_tb.den,
769  enc_tb.num, enc_tb.den, INT_MAX);
770 
771  return 0;
772 }
773 
774 AVRational av_stream_get_codec_timebase(const AVStream *st)
775 {
776  return cffstream(st)->avctx ? cffstream(st)->avctx->time_base : cffstream(st)->transferred_mux_tb;
777 }
778 #endif
779 
780 void avpriv_set_pts_info(AVStream *st, int pts_wrap_bits,
781  unsigned int pts_num, unsigned int pts_den)
782 {
783  FFStream *const sti = ffstream(st);
784  AVRational new_tb;
785  if (av_reduce(&new_tb.num, &new_tb.den, pts_num, pts_den, INT_MAX)) {
786  if (new_tb.num != pts_num)
788  "st:%d removing common factor %d from timebase\n",
789  st->index, pts_num / new_tb.num);
790  } else
792  "st:%d has too large timebase, reducing\n", st->index);
793 
794  if (new_tb.num <= 0 || new_tb.den <= 0) {
796  "Ignoring attempt to set invalid timebase %d/%d for st:%d\n",
797  new_tb.num, new_tb.den,
798  st->index);
799  return;
800  }
801  st->time_base = new_tb;
802  if (sti->avctx)
803  sti->avctx->pkt_timebase = new_tb;
804  st->pts_wrap_bits = pts_wrap_bits;
805 }
806 
808  enum AVCodecID codec_id)
809 {
810  switch (st->codecpar->codec_type) {
811  case AVMEDIA_TYPE_VIDEO:
812  if (s->video_codec) return s->video_codec;
813  break;
814  case AVMEDIA_TYPE_AUDIO:
815  if (s->audio_codec) return s->audio_codec;
816  break;
818  if (s->subtitle_codec) return s->subtitle_codec;
819  break;
820  }
821 
823 }
824 
826 {
827 #define OFF(field) offsetof(AVFormatContext, field)
828  static const unsigned offsets[] = {
829  OFF(codec_whitelist), OFF(format_whitelist),
830  OFF(protocol_whitelist), OFF(protocol_blacklist),
831  };
832 #undef OFF
833  av_assert0(!dst->codec_whitelist &&
834  !dst->format_whitelist &&
835  !dst->protocol_whitelist &&
836  !dst->protocol_blacklist);
837  for (unsigned i = 0; i < FF_ARRAY_ELEMS(offsets); i++) {
838  const char *src_str = *(char *const*)((const char*)src + offsets[i]);
839 
840  if (src_str) {
841  char *dst_str = av_strdup(src_str);
842  if (!dst_str) {
843  av_log(dst, AV_LOG_ERROR, "Failed to duplicate black/whitelist\n");
844  return AVERROR(ENOMEM);
845  }
846 
847  *(char **)((char*)dst + offsets[i]) = dst_str;
848  }
849  }
850  return 0;
851 }
852 
854 {
856  if (!d)
857  return 0;
858  if ((d->type == AVMEDIA_TYPE_VIDEO || d->type == AVMEDIA_TYPE_AUDIO) &&
860  return 0;
861  return 1;
862 }
863 
865 {
866  av_assert0(url);
867  av_freep(&s->url);
868  s->url = url;
869 }
870 
872 {
873  int ret = 0;
874  if (*pb)
875  ret = s->io_close2(s, *pb);
876  *pb = NULL;
877  return ret;
878 }
error
static void error(const char *err)
Definition: target_bsf_fuzzer.c:32
flags
const SwsFlags flags[]
Definition: swscale.c:61
iamf.h
av_packet_unref
void av_packet_unref(AVPacket *pkt)
Wipe the packet.
Definition: packet.c:432
AVCodec
AVCodec.
Definition: codec.h:172
AVStreamGroupParamsType
AVStreamGroupParamsType
Definition: avformat.h:1087
AVMEDIA_TYPE_SUBTITLE
@ AVMEDIA_TYPE_SUBTITLE
Definition: avutil.h:203
AV_LOG_WARNING
#define AV_LOG_WARNING
Something somehow does not look correct.
Definition: log.h:216
program
Undefined Behavior In the C some operations are like signed integer dereferencing freed accessing outside allocated Undefined Behavior must not occur in a C program
Definition: undefined.txt:6
dec_ctx
static AVCodecContext * dec_ctx
Definition: decode_filter_audio.c:45
AVOutputFormat::name
const char * name
Definition: avformat.h:506
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
opt.h
AVCodecParameters::codec_type
enum AVMediaType codec_type
General type of the encoded data.
Definition: codec_par.h:51
AVStreamGroup::tile_grid
struct AVStreamGroupTileGrid * tile_grid
Definition: avformat.h:1133
AV_STREAM_GROUP_PARAMS_LCEVC
@ AV_STREAM_GROUP_PARAMS_LCEVC
Definition: avformat.h:1092
AVProgram::nb_stream_indexes
unsigned int nb_stream_indexes
Definition: avformat.h:1193
av_find_best_stream
int av_find_best_stream(AVFormatContext *ic, enum AVMediaType type, int wanted_stream_nb, int related_stream, const AVCodec **decoder_ret, int flags)
Definition: avformat.c:379
FFStream::bsfc
struct AVBSFContext * bsfc
bitstream filter to run on stream
Definition: internal.h:146
ff_find_decoder
const AVCodec * ff_find_decoder(AVFormatContext *s, const AVStream *st, enum AVCodecID codec_id)
Definition: avformat.c:807
AVCodecParameters
This struct describes the properties of an encoded stream.
Definition: codec_par.h:47
FFStream::bsf
struct AVBSFContext * bsf
Definition: internal.h:166
avformat_new_stream
AVStream * avformat_new_stream(AVFormatContext *s, const struct AVCodec *c)
Add a new stream to a media file.
AVStream::priv_data
void * priv_data
Definition: avformat.h:769
AVFMT_VARIABLE_FPS
#define AVFMT_VARIABLE_FPS
Format allows variable fps.
Definition: avformat.h:481
AV_DISPOSITION_ATTACHED_PIC
#define AV_DISPOSITION_ATTACHED_PIC
The stream is stored in the file as an attached picture/"cover art" (e.g.
Definition: avformat.h:670
AVStream::discard
enum AVDiscard discard
Selects which packets can be discarded at will and do not need to be demuxed.
Definition: avformat.h:815
av_find_program_from_stream
AVProgram * av_find_program_from_stream(AVFormatContext *ic, AVProgram *last, int s)
Find the programs which belong to a given stream.
Definition: avformat.c:328
av_div_q
AVRational av_div_q(AVRational b, AVRational c)
Divide one rational by another.
Definition: rational.c:88
int64_t
long long int64_t
Definition: coverity.c:34
AV_DISPOSITION_DEFAULT
#define AV_DISPOSITION_DEFAULT
The stream should be chosen by default among other streams of the same type, unless the user has expl...
Definition: avformat.h:617
FormatContextInternal::raw_packet_buffer
PacketList raw_packet_buffer
Raw packets from the demuxer, prior to parsing and decoding.
Definition: avformat_internal.h:75
AVFrame
This structure describes decoded (raw) audio or video data.
Definition: frame.h:427
AVFormatContext::streams
AVStream ** streams
A list of all streams in the file.
Definition: avformat.h:1332
AVPacket::data
uint8_t * data
Definition: packet.h:588
AVStream::avg_frame_rate
AVRational avg_frame_rate
Average framerate.
Definition: avformat.h:833
av_iamf_mix_presentation_free
void av_iamf_mix_presentation_free(AVIAMFMixPresentation **pmix_presentation)
Free an AVIAMFMixPresentation and all its contents.
Definition: iamf.c:536
AVFormatContext::programs
AVProgram ** programs
Definition: avformat.h:1462
AVCodecParameters::codec_tag
uint32_t codec_tag
Additional information about the codec (corresponds to the AVI FOURCC).
Definition: codec_par.h:59
cffstream
static const av_always_inline FFStream * cffstream(const AVStream *st)
Definition: internal.h:367
AVChannelLayout::nb_channels
int nb_channels
Number of channels in this layout.
Definition: channel_layout.h:329
codec_type
enum AVMediaType codec_type
Definition: rtp.c:37
av_bsf_free
void av_bsf_free(AVBSFContext **pctx)
Free a bitstream filter context and everything associated with it; write NULL into the supplied point...
Definition: bsf.c:52
ost
static AVStream * ost
Definition: vaapi_transcode.c:42
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:74
FormatContextInternal
Definition: avformat_internal.h:33
FFStream::codec_desc
const struct AVCodecDescriptor * codec_desc
Definition: internal.h:355
OFF
#define OFF(field)
AVCodecContext::framerate
AVRational framerate
Definition: avcodec.h:559
ff_remove_stream
void ff_remove_stream(AVFormatContext *s, AVStream *st)
Remove a stream from its AVFormatContext and free it.
Definition: avformat.c:115
ff_free_stream_group
void ff_free_stream_group(AVStreamGroup **pstg)
Frees a stream group without modifying the corresponding AVFormatContext.
Definition: avformat.c:78
decoder
static const chunk_decoder decoder[8]
Definition: dfa.c:331
avpriv_set_pts_info
void avpriv_set_pts_info(AVStream *st, int pts_wrap_bits, unsigned int pts_num, unsigned int pts_den)
Set the time base and wrapping info for a given stream.
Definition: avformat.c:780
bsf.h
ffstream
static av_always_inline FFStream * ffstream(AVStream *st)
Definition: internal.h:362
AVStreamGroup::params
union AVStreamGroup::@430 params
Group type-specific parameters.
stream_params_copy
static int stream_params_copy(AVStream *dst, const AVStream *src)
Copy all stream parameters from source to destination stream, with the exception of the index field,...
Definition: avformat.c:205
avformat_stream_group_name
const char * avformat_stream_group_name(enum AVStreamGroupParamsType type)
Definition: avformat.c:259
samplefmt.h
av_iamf_audio_element_free
void av_iamf_audio_element_free(AVIAMFAudioElement **paudio_element)
Free an AVIAMFAudioElement and all its contents.
Definition: iamf.c:338
av_opt_free
void av_opt_free(void *obj)
Free all allocated objects in obj.
Definition: opt.c:1949
FFStream::avctx
struct AVCodecContext * avctx
The codec context used by avformat_find_stream_info, the parser, etc.
Definition: internal.h:156
AVDISCARD_NONE
@ AVDISCARD_NONE
discard nothing
Definition: defs.h:226
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_new_program
AVProgram * av_new_program(AVFormatContext *ac, int id)
Definition: avformat.c:270
AV_PTS_WRAP_IGNORE
#define AV_PTS_WRAP_IGNORE
Options for behavior on timestamp wrap detection.
Definition: avformat.h:733
av_reduce
int av_reduce(int *dst_num, int *dst_den, int64_t num, int64_t den, int64_t max)
Reduce a fraction.
Definition: rational.c:35
codec.h
AVRational::num
int num
Numerator.
Definition: rational.h:59
AVStream::attached_pic
AVPacket attached_pic
For streams with AV_DISPOSITION_ATTACHED_PIC disposition, this packet will contain the attached pictu...
Definition: avformat.h:842
avassert.h
AV_LOG_TRACE
#define AV_LOG_TRACE
Extremely verbose debugging, useful for libav* development.
Definition: log.h:236
AV_LOG_ERROR
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:210
FF_ARRAY_ELEMS
#define FF_ARRAY_ELEMS(a)
Definition: sinewin_tablegen.c:29
AVProgram::id
int id
Definition: avformat.h:1189
av_dict_get
AVDictionaryEntry * av_dict_get(const AVDictionary *m, const char *key, const AVDictionaryEntry *prev, int flags)
Get a dictionary entry with matching key.
Definition: dict.c:60
AV_STREAM_GROUP_PARAMS_IAMF_MIX_PRESENTATION
@ AV_STREAM_GROUP_PARAMS_IAMF_MIX_PRESENTATION
Definition: avformat.h:1090
AVCodecDescriptor
This struct describes the properties of a single codec described by an AVCodecID.
Definition: codec_desc.h:38
intreadwrite.h
s
#define s(width, name)
Definition: cbs_vp9.c:198
FFFormatContext::packet_buffer
PacketList packet_buffer
This buffer is only needed when packets were already buffered but not decoded, for example to get the...
Definition: internal.h:86
offsets
static const int offsets[]
Definition: hevc_pel.c:34
av_realloc_array
void * av_realloc_array(void *ptr, size_t nmemb, size_t size)
Definition: mem.c:217
AVCodecParameters::sample_aspect_ratio
AVRational sample_aspect_ratio
Video only.
Definition: codec_par.h:144
AVFormatContext::nb_programs
unsigned int nb_programs
Definition: avformat.h:1461
bitrate
int64_t bitrate
Definition: av1_levels.c:47
g
const char * g
Definition: vf_curves.c:128
AVProbeData::buf
unsigned char * buf
Buffer must have AVPROBE_PADDING_SIZE of extra allocated bytes filled with zero.
Definition: avformat.h:453
AVMEDIA_TYPE_AUDIO
@ AVMEDIA_TYPE_AUDIO
Definition: avutil.h:201
AVCodecParameters::width
int width
Video only.
Definition: codec_par.h:134
av_q2d
static double av_q2d(AVRational a)
Convert an AVRational to a double.
Definition: rational.h:104
av_assert0
#define av_assert0(cond)
assert() equivalent, that is always enabled.
Definition: avassert.h:41
AVCodecDescriptor::type
enum AVMediaType type
Definition: codec_desc.h:40
AV_LOG_DEBUG
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
Definition: log.h:231
av_guess_sample_aspect_ratio
AVRational av_guess_sample_aspect_ratio(AVFormatContext *format, AVStream *stream, AVFrame *frame)
Guess the sample aspect ratio of a frame, based on both the stream and the frame aspect ratio.
Definition: avformat.c:663
FFStream::codec_info_nb_frames
int codec_info_nb_frames
Number of frames that have been demuxed during avformat_find_stream_info()
Definition: internal.h:335
ffofmt
static const FFOutputFormat * ffofmt(const AVOutputFormat *fmt)
Definition: mux.h:167
nb_streams
static int nb_streams
Definition: ffprobe.c:348
codec_id
enum AVCodecID codec_id
Definition: vaapi_decode.c:410
key
const char * key
Definition: hwcontext_opencl.c:189
AVMEDIA_TYPE_DATA
@ AVMEDIA_TYPE_DATA
Opaque data information usually continuous.
Definition: avutil.h:202
av_mallocz
#define av_mallocz(s)
Definition: tableprint_vlc.h:31
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:732
tmp
static uint8_t tmp[40]
Definition: aes_ctr.c:52
AVCodecDescriptor::props
int props
Codec properties, a combination of AV_CODEC_PROP_* flags.
Definition: codec_desc.h:54
FFFormatContext
Definition: internal.h:64
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:609
AVDISCARD_ALL
@ AVDISCARD_ALL
discard all
Definition: defs.h:232
AVFormatContext
Format I/O context.
Definition: avformat.h:1264
AV_CODEC_PROP_INTRA_ONLY
#define AV_CODEC_PROP_INTRA_ONLY
Codec uses only intra compression.
Definition: codec_desc.h:72
internal.h
AVStream::codecpar
AVCodecParameters * codecpar
Codec parameters associated with this stream.
Definition: avformat.h:767
fabs
static __device__ float fabs(float a)
Definition: cuda_runtime.h:182
AVStream::time_base
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented.
Definition: avformat.h:783
NULL
#define NULL
Definition: coverity.c:32
av_program_add_stream_index
void av_program_add_stream_index(AVFormatContext *ac, int progid, unsigned idx)
Definition: avformat.c:301
format
New swscale design to change SwsGraph is what coordinates multiple passes These can include cascaded scaling error diffusion and so on Or we could have separate passes for the vertical and horizontal scaling In between each SwsPass lies a fully allocated image buffer Graph passes may have different levels of e g we can have a single threaded error diffusion pass following a multi threaded scaling pass SwsGraph is internally recreated whenever the image format
Definition: swscale-v2.txt:14
avcodec_parameters_free
void avcodec_parameters_free(AVCodecParameters **ppar)
Free an AVCodecParameters instance and everything associated with it and write NULL to the supplied p...
Definition: codec_par.c:67
AVStreamGroupTileGrid::offsets
struct AVStreamGroupTileGrid::@429 * offsets
An nb_tiles sized array of offsets in pixels from the topleft edge of the canvas, indicating where ea...
AVStreamGroupTileGrid::coded_side_data
AVPacketSideData * coded_side_data
Additional data associated with the grid.
Definition: avformat.h:1054
avcodec_free_context
void avcodec_free_context(AVCodecContext **avctx)
Free the codec context and everything associated with it and write NULL to the provided pointer.
Definition: options.c:164
AVRational
Rational number (pair of numerator and denominator).
Definition: rational.h:58
ff_copy_whiteblacklists
int ff_copy_whiteblacklists(AVFormatContext *dst, const AVFormatContext *src)
Copies the whilelists from one context to the other.
Definition: avformat.c:825
FFOutputFormat::deinit
void(* deinit)(AVFormatContext *)
Deinitialize format.
Definition: mux.h:154
FFStream::extract_extradata
struct FFStream::@460 extract_extradata
AVProgram::stream_index
unsigned int * stream_index
Definition: avformat.h:1192
AVStream::metadata
AVDictionary * metadata
Definition: avformat.h:824
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
FormatContextInternal::fc
FFFormatContext fc
Definition: avformat_internal.h:34
AVCodecParameters::ch_layout
AVChannelLayout ch_layout
Audio only.
Definition: codec_par.h:180
index
int index
Definition: gxfenc.c:90
AVCodecParameters::sample_rate
int sample_rate
Audio only.
Definition: codec_par.h:184
AVCodecID
AVCodecID
Identify the syntax and semantics of the bitstream.
Definition: codec_id.h:49
avcodec_find_decoder
const AVCodec * avcodec_find_decoder(enum AVCodecID id)
Find a registered decoder with a matching codec ID.
Definition: allcodecs.c:1043
AVFormatContext::nb_streams
unsigned int nb_streams
Number of elements in AVFormatContext.streams.
Definition: avformat.h:1320
FFFormatContext::id3v2_meta
AVDictionary * id3v2_meta
ID3v2 tag useful for MP3 demuxing.
Definition: internal.h:118
AVOutputFormat::flags
int flags
can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER, AVFMT_GLOBALHEADER, AVFMT_NOTIMESTAMPS,...
Definition: avformat.h:525
FormatContextInternal::raw_packet_buffer_size
int raw_packet_buffer_size
Sum of the size of packets in raw_packet_buffer, in bytes.
Definition: avformat_internal.h:80
AV_STREAM_GROUP_PARAMS_TILE_GRID
@ AV_STREAM_GROUP_PARAMS_TILE_GRID
Definition: avformat.h:1091
AVCodecContext::time_base
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented.
Definition: avcodec.h:543
AVIOContext
Bytestream IO Context.
Definition: avio.h:160
AVMediaType
AVMediaType
Definition: avutil.h:198
avformat_match_stream_specifier
int avformat_match_stream_specifier(AVFormatContext *s, AVStream *st, const char *spec)
Check if the stream st contained in s is matched by the stream specifier spec.
Definition: avformat.c:617
FFFormatContext::parse_pkt
AVPacket * parse_pkt
The generic code uses this as a temporary packet to parse packets or for muxing, especially flushing.
Definition: internal.h:104
FFStream
Definition: internal.h:128
ff_free_stream
void ff_free_stream(AVStream **pst)
Frees a stream without modifying the corresponding AVFormatContext.
Definition: avformat.c:45
dst
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
Definition: dsp.h:87
AVCodecContext::pkt_timebase
AVRational pkt_timebase
Timebase in which pkt_dts/pts and AVPacket.dts/pts are expressed.
Definition: avcodec.h:550
AV_SAMPLE_FMT_NONE
@ AV_SAMPLE_FMT_NONE
Definition: samplefmt.h:56
avio.h
copy_tb
int copy_tb
Definition: ffmpeg_opt.c:69
AV_NOPTS_VALUE
#define AV_NOPTS_VALUE
Undefined timestamp value.
Definition: avutil.h:247
AV_CODEC_PROP_FIELDS
#define AV_CODEC_PROP_FIELDS
Video codec supports separate coding of fields in interlaced frames.
Definition: codec_desc.h:97
AVStreamGroup::iamf_audio_element
struct AVIAMFAudioElement * iamf_audio_element
Definition: avformat.h:1131
ff_format_io_close
int ff_format_io_close(AVFormatContext *s, AVIOContext **pb)
Definition: avformat.c:871
AVMEDIA_TYPE_UNKNOWN
@ AVMEDIA_TYPE_UNKNOWN
Usually treated as AVMEDIA_TYPE_DATA.
Definition: avutil.h:199
AVStream::sample_aspect_ratio
AVRational sample_aspect_ratio
sample aspect ratio (0 if unknown)
Definition: avformat.h:822
frame.h
AV_DISPOSITION_HEARING_IMPAIRED
#define AV_DISPOSITION_HEARING_IMPAIRED
The stream is intended for hearing impaired audiences.
Definition: avformat.h:654
AVStreamGroup::lcevc
struct AVStreamGroupLCEVC * lcevc
Definition: avformat.h:1134
av_dict_free
void av_dict_free(AVDictionary **pm)
Free all the memory allocated for an AVDictionary struct and all keys and values.
Definition: dict.c:233
AV_STREAM_GROUP_PARAMS_IAMF_AUDIO_ELEMENT
@ AV_STREAM_GROUP_PARAMS_IAMF_AUDIO_ELEMENT
Definition: avformat.h:1089
AVStreamGroup::streams
AVStream ** streams
A list of streams in the group.
Definition: avformat.h:1165
AVStreamGroup::iamf_mix_presentation
struct AVIAMFMixPresentation * iamf_mix_presentation
Definition: avformat.h:1132
avformat_internal.h
FFStream::probe_data
AVProbeData probe_data
Definition: internal.h:298
FFStreamInfo::duration_error
double(* duration_error)[2][MAX_STD_TIMEBASES]
Definition: demux.h:154
AVStreamGroupTileGrid::nb_coded_side_data
int nb_coded_side_data
Amount of entries in coded_side_data.
Definition: avformat.h:1059
ff_is_intra_only
int ff_is_intra_only(enum AVCodecID id)
Definition: avformat.c:853
AV_CODEC_ID_NONE
@ AV_CODEC_ID_NONE
Definition: codec_id.h:50
AVOutputFormat
Definition: avformat.h:505
i
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:256
AVCodecParameters::height
int height
Definition: codec_par.h:135
AVMEDIA_TYPE_ATTACHMENT
@ AVMEDIA_TYPE_ATTACHMENT
Opaque data information usually sparse.
Definition: avutil.h:204
FFMIN
#define FFMIN(a, b)
Definition: macros.h:49
av_find_default_stream_index
int av_find_default_stream_index(AVFormatContext *s)
Definition: avformat.c:343
AVProgram
New fields can be added to the end with minor version bumps.
Definition: avformat.h:1188
av_inv_q
static av_always_inline AVRational av_inv_q(AVRational q)
Invert a rational.
Definition: rational.h:159
demux.h
avcodec.h
AVStream::disposition
int disposition
Stream disposition - a combination of AV_DISPOSITION_* flags.
Definition: avformat.h:813
match_stream_specifier
static int match_stream_specifier(const AVFormatContext *s, const AVStream *st, const char *spec, const char **indexptr, const AVStreamGroup **g, const AVProgram **p)
Matches a stream specifier (but ignores requested index).
Definition: avformat.c:454
AV_DISPOSITION_VISUAL_IMPAIRED
#define AV_DISPOSITION_VISUAL_IMPAIRED
The stream is intended for visually impaired audiences.
Definition: avformat.h:658
tag
uint32_t tag
Definition: movenc.c:2032
AVStream::id
int id
Format-specific stream ID.
Definition: avformat.h:756
ret
ret
Definition: filter_design.txt:187
AVStream
Stream structure.
Definition: avformat.h:744
av_guess_frame_rate
AVRational av_guess_frame_rate(AVFormatContext *format, AVStream *st, AVFrame *frame)
Guess the frame rate, based on both the container and codec information.
Definition: avformat.c:686
pixfmt.h
frame
these buffered frames must be flushed immediately if a new input produces new the filter must not call request_frame to get more It must just process the frame or queue it The task of requesting more frames is left to the filter s request_frame method or the application If a filter has several the filter must be ready for frames arriving randomly on any input any filter with several inputs will most likely require some kind of queuing mechanism It is perfectly acceptable to have a limited queue and to drop frames when the inputs are too unbalanced request_frame For filters that do not use the this method is called when a frame is wanted on an output For a it should directly call filter_frame on the corresponding output For a if there are queued frames already one of these frames should be pushed If the filter should request a frame on one of its repeatedly until at least one frame has been pushed Return or at least make progress towards producing a frame
Definition: filter_design.txt:265
AVStreamGroup::metadata
AVDictionary * metadata
Metadata that applies to the whole group.
Definition: avformat.h:1145
avformat.h
id
enum AVCodecID id
Definition: dts2pts.c:549
AV_RL32
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_RL32
Definition: bytestream.h:92
av_dynarray_add_nofree
int av_dynarray_add_nofree(void *tab_ptr, int *nb_ptr, void *elem)
Add an element to a dynamic array.
Definition: mem.c:315
AVStreamGroup
Definition: avformat.h:1098
AVCodecContext
main external API structure.
Definition: avcodec.h:439
AVStream::index
int index
stream index in AVFormatContext
Definition: avformat.h:750
channel_layout.h
AVERROR_STREAM_NOT_FOUND
#define AVERROR_STREAM_NOT_FOUND
Stream not found.
Definition: error.h:67
AVRational::den
int den
Denominator.
Definition: rational.h:60
AV_PIX_FMT_NONE
@ AV_PIX_FMT_NONE
Definition: pixfmt.h:72
ff_flush_packet_queue
void ff_flush_packet_queue(AVFormatContext *s)
Definition: avformat.c:132
ff_remove_stream_group
void ff_remove_stream_group(AVFormatContext *s, AVStreamGroup *stg)
Remove a stream group from its AVFormatContext and free it.
Definition: avformat.c:123
av_match_name
int av_match_name(const char *name, const char *names)
Match instances of a name in a comma-separated list of names.
Definition: avstring.c:346
avformat_free_context
void avformat_free_context(AVFormatContext *s)
Free an AVFormatContext and all its streams.
Definition: avformat.c:143
ff_fc_internal
static av_always_inline FormatContextInternal * ff_fc_internal(AVFormatContext *s)
Definition: avformat_internal.h:100
AVStream::r_frame_rate
AVRational r_frame_rate
Real base framerate of the stream.
Definition: avformat.h:878
FFStream::parse_pkt
AVPacket * parse_pkt
The generic code uses this as a temporary packet to parse packets or for muxing, especially flushing.
Definition: internal.h:330
Windows::Graphics::DirectX::Direct3D11::p
IDirect3DDxgiInterfaceAccess _COM_Outptr_ void ** p
Definition: vsrc_gfxcapture_winrt.hpp:53
FFStream::info
struct FFStreamInfo * info
Stream information used internally by avformat_find_stream_info()
Definition: internal.h:182
av_mul_q
AVRational av_mul_q(AVRational b, AVRational c)
Multiply two rationals.
Definition: rational.c:80
FFStream::index_entries
AVIndexEntry * index_entries
Only used if the format does not support seeking natively.
Definition: internal.h:184
AVERROR_DECODER_NOT_FOUND
#define AVERROR_DECODER_NOT_FOUND
Decoder not found.
Definition: error.h:54
av_strdup
char * av_strdup(const char *s)
Duplicate a string.
Definition: mem.c:272
desc
const char * desc
Definition: libsvtav1.c:78
AVMEDIA_TYPE_VIDEO
@ AVMEDIA_TYPE_VIDEO
Definition: avutil.h:200
mem.h
AVStreamGroup::type
enum AVStreamGroupParamsType type
Group type.
Definition: avformat.h:1125
packet_internal.h
FFFormatContext::pkt
AVPacket * pkt
Used to hold temporary packets for the generic demuxing code.
Definition: internal.h:111
AVCodecParameters::format
int format
Definition: codec_par.h:92
av_free
#define av_free(p)
Definition: tableprint_vlc.h:34
AVDictionaryEntry
Definition: dict.h:90
AVCodecParameters::codec_id
enum AVCodecID codec_id
Specific type of the encoded data (the codec used).
Definition: codec_par.h:55
ff_stream_clone
AVStream * ff_stream_clone(AVFormatContext *dst_ctx, const AVStream *src)
Create a new stream and copy to it all parameters from a source stream, with the exception of the ind...
Definition: avformat.c:241
av_freep
#define av_freep(p)
Definition: tableprint_vlc.h:35
av_dict_copy
int av_dict_copy(AVDictionary **dst, const AVDictionary *src, int flags)
Copy entries from one AVDictionary struct into another.
Definition: dict.c:247
AVCodecParameters::bit_rate
int64_t bit_rate
The average bitrate of the encoded data (in bits per second).
Definition: codec_par.h:97
av_log
#define av_log(a,...)
Definition: tableprint_vlc.h:27
FFStream::parser
struct AVCodecParserContext * parser
Definition: internal.h:315
avcodec_descriptor_get
const AVCodecDescriptor * avcodec_descriptor_get(enum AVCodecID id)
Definition: codec_desc.c:3887
avstring.h
av_strndup
char * av_strndup(const char *s, size_t len)
Duplicate a substring of a string.
Definition: mem.c:284
AVStream::pts_wrap_bits
int pts_wrap_bits
Number of bits in timestamps.
Definition: avformat.h:887
codec_desc.h
AVStreamGroup::priv_data
void * priv_data
Definition: avformat.h:1104
ff_format_set_url
void ff_format_set_url(AVFormatContext *s, char *url)
Set AVFormatContext url field to the provided pointer.
Definition: avformat.c:864
src
#define src
Definition: vp8dsp.c:248
FormatContextInternal::parse_queue
PacketList parse_queue
Packets split by the parser get queued here.
Definition: avformat_internal.h:85
FormatContextInternal::initialized
int initialized
Whether or not avformat_init_output has already been called.
Definition: avformat_internal.h:42
avcodec_parameters_copy
int avcodec_parameters_copy(AVCodecParameters *dst, const AVCodecParameters *src)
Copy the contents of src to dst.
Definition: codec_par.c:107
av_parser_close
void av_parser_close(AVCodecParserContext *s)
Definition: parser.c:201
mux.h