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/intreadwrite.h"
28 #include "libavutil/mem.h"
29 #include "libavutil/opt.h"
30 #include "libavutil/pixfmt.h"
31 #include "libavutil/samplefmt.h"
32 #include "libavcodec/avcodec.h"
33 #include "libavcodec/codec.h"
34 #include "libavcodec/bsf.h"
35 #include "libavcodec/codec_desc.h"
37 #include "avformat.h"
38 #include "avio.h"
39 #include "demux.h"
40 #include "mux.h"
41 #include "internal.h"
42 
44 {
45  AVStream *st = *pst;
46  FFStream *const sti = ffstream(st);
47 
48  if (!st)
49  return;
50 
51  for (int i = 0; i < st->nb_side_data; i++)
52  av_freep(&st->side_data[i].data);
53  av_freep(&st->side_data);
54 
55  if (st->attached_pic.data)
57 
58  av_parser_close(sti->parser);
60  av_bsf_free(&sti->bsfc);
61  av_freep(&sti->priv_pts);
62  av_freep(&sti->index_entries);
63  av_freep(&sti->probe_data.buf);
64 
66 
67  if (sti->info) {
69  av_freep(&sti->info);
70  }
71 
72  av_dict_free(&st->metadata);
74  av_freep(&st->priv_data);
75 
76  av_freep(pst);
77 }
78 
80 {
81  av_assert0(s->nb_streams>0);
82  av_assert0(s->streams[ s->nb_streams - 1 ] == st);
83 
84  ff_free_stream(&s->streams[ --s->nb_streams ]);
85 }
86 
87 /* XXX: suppress the packet queue */
89 {
90  FFFormatContext *const si = ffformatcontext(s);
94 
95  si->raw_packet_buffer_size = 0;
96 }
97 
99 {
100  FFFormatContext *si;
101 
102  if (!s)
103  return;
104  si = ffformatcontext(s);
105 
106  if (s->oformat && ffofmt(s->oformat)->deinit && si->initialized)
107  ffofmt(s->oformat)->deinit(s);
108 
109  av_opt_free(s);
110  if (s->iformat && s->iformat->priv_class && s->priv_data)
111  av_opt_free(s->priv_data);
112  if (s->oformat && s->oformat->priv_class && s->priv_data)
113  av_opt_free(s->priv_data);
114 
115  for (unsigned i = 0; i < s->nb_streams; i++)
116  ff_free_stream(&s->streams[i]);
117  s->nb_streams = 0;
118 
119  for (unsigned i = 0; i < s->nb_programs; i++) {
120  av_dict_free(&s->programs[i]->metadata);
121  av_freep(&s->programs[i]->stream_index);
122  av_freep(&s->programs[i]);
123  }
124  s->nb_programs = 0;
125 
126  av_freep(&s->programs);
127  av_freep(&s->priv_data);
128  while (s->nb_chapters--) {
129  av_dict_free(&s->chapters[s->nb_chapters]->metadata);
130  av_freep(&s->chapters[s->nb_chapters]);
131  }
132  av_freep(&s->chapters);
133  av_dict_free(&s->metadata);
134  av_dict_free(&si->id3v2_meta);
135  av_packet_free(&si->pkt);
137  av_freep(&s->streams);
139  av_freep(&s->url);
140  av_free(s);
141 }
142 
144  enum AVPacketSideDataType type, size_t *size)
145 {
146  for (int i = 0; i < st->nb_side_data; i++) {
147  if (st->side_data[i].type == type) {
148  if (size)
149  *size = st->side_data[i].size;
150  return st->side_data[i].data;
151  }
152  }
153  if (size)
154  *size = 0;
155  return NULL;
156 }
157 
159  uint8_t *data, size_t size)
160 {
161  AVPacketSideData *sd, *tmp;
162 
163  for (int i = 0; i < st->nb_side_data; i++) {
164  sd = &st->side_data[i];
165 
166  if (sd->type == type) {
167  av_freep(&sd->data);
168  sd->data = data;
169  sd->size = size;
170  return 0;
171  }
172  }
173 
174  if (st->nb_side_data + 1U > FFMIN(INT_MAX, SIZE_MAX / sizeof(*tmp)))
175  return AVERROR(ERANGE);
176 
177  tmp = av_realloc_array(st->side_data, st->nb_side_data + 1, sizeof(*tmp));
178  if (!tmp) {
179  return AVERROR(ENOMEM);
180  }
181 
182  st->side_data = tmp;
183  st->nb_side_data++;
184 
185  sd = &st->side_data[st->nb_side_data - 1];
186  sd->type = type;
187  sd->data = data;
188  sd->size = size;
189 
190  return 0;
191 }
192 
194  size_t size)
195 {
196  int ret;
197  uint8_t *data = av_malloc(size);
198 
199  if (!data)
200  return NULL;
201 
203  if (ret < 0) {
204  av_freep(&data);
205  return NULL;
206  }
207 
208  return data;
209 }
210 
212 {
213  /* Free existing side data*/
214  for (int i = 0; i < dst->nb_side_data; i++)
215  av_free(dst->side_data[i].data);
216  av_freep(&dst->side_data);
217  dst->nb_side_data = 0;
218 
219  /* Copy side data if present */
220  if (src->nb_side_data) {
221  dst->side_data = av_calloc(src->nb_side_data,
222  sizeof(*dst->side_data));
223  if (!dst->side_data)
224  return AVERROR(ENOMEM);
225  dst->nb_side_data = src->nb_side_data;
226 
227  for (int i = 0; i < src->nb_side_data; i++) {
228  uint8_t *data = av_memdup(src->side_data[i].data,
229  src->side_data[i].size);
230  if (!data)
231  return AVERROR(ENOMEM);
232  dst->side_data[i].type = src->side_data[i].type;
233  dst->side_data[i].size = src->side_data[i].size;
234  dst->side_data[i].data = data;
235  }
236  }
237 
238  return 0;
239 }
240 
241 /**
242  * Copy all stream parameters from source to destination stream, with the
243  * exception of the index field, which is usually set by avformat_new_stream().
244  *
245  * @param dst pointer to destination AVStream
246  * @param src pointer to source AVStream
247  * @return >=0 on success, AVERROR code on error
248  */
249 static int stream_params_copy(AVStream *dst, const AVStream *src)
250 {
251  int ret;
252 
253  dst->id = src->id;
254  dst->time_base = src->time_base;
255  dst->start_time = src->start_time;
256  dst->duration = src->duration;
257  dst->nb_frames = src->nb_frames;
258  dst->disposition = src->disposition;
259  dst->discard = src->discard;
260  dst->sample_aspect_ratio = src->sample_aspect_ratio;
261  dst->avg_frame_rate = src->avg_frame_rate;
262  dst->event_flags = src->event_flags;
263  dst->r_frame_rate = src->r_frame_rate;
264  dst->pts_wrap_bits = src->pts_wrap_bits;
265 
266  av_dict_free(&dst->metadata);
267  ret = av_dict_copy(&dst->metadata, src->metadata, 0);
268  if (ret < 0)
269  return ret;
270 
271  ret = avcodec_parameters_copy(dst->codecpar, src->codecpar);
272  if (ret < 0)
273  return ret;
274 
276  if (ret < 0)
277  return ret;
278 
280  if (src->attached_pic.data) {
281  ret = av_packet_ref(&dst->attached_pic, &src->attached_pic);
282  if (ret < 0)
283  return ret;
284  }
285 
286  return 0;
287 }
288 
290 {
291  AVStream *st;
292  int ret;
293 
294  st = avformat_new_stream(dst_ctx, NULL);
295  if (!st)
296  return NULL;
297 
298  ret = stream_params_copy(st, src);
299  if (ret < 0) {
300  ff_remove_stream(dst_ctx, st);
301  return NULL;
302  }
303 
304  return st;
305 }
306 
308 {
310  int ret;
311 
312  av_log(ac, AV_LOG_TRACE, "new_program: id=0x%04x\n", id);
313 
314  for (unsigned i = 0; i < ac->nb_programs; i++)
315  if (ac->programs[i]->id == id)
316  program = ac->programs[i];
317 
318  if (!program) {
319  program = av_mallocz(sizeof(*program));
320  if (!program)
321  return NULL;
323  if (ret < 0) {
324  av_free(program);
325  return NULL;
326  }
327  program->discard = AVDISCARD_NONE;
328  program->pmt_version = -1;
329  program->id = id;
330  program->pts_wrap_reference = AV_NOPTS_VALUE;
331  program->pts_wrap_behavior = AV_PTS_WRAP_IGNORE;
332  program->start_time =
333  program->end_time = AV_NOPTS_VALUE;
334  }
335  return program;
336 }
337 
338 void av_program_add_stream_index(AVFormatContext *ac, int progid, unsigned idx)
339 {
341  void *tmp;
342 
343  if (idx >= ac->nb_streams) {
344  av_log(ac, AV_LOG_ERROR, "stream index %d is not valid\n", idx);
345  return;
346  }
347 
348  for (unsigned i = 0; i < ac->nb_programs; i++) {
349  if (ac->programs[i]->id != progid)
350  continue;
351  program = ac->programs[i];
352  for (unsigned j = 0; j < program->nb_stream_indexes; j++)
353  if (program->stream_index[j] == idx)
354  return;
355 
356  tmp = av_realloc_array(program->stream_index, program->nb_stream_indexes+1, sizeof(unsigned int));
357  if (!tmp)
358  return;
359  program->stream_index = tmp;
360  program->stream_index[program->nb_stream_indexes++] = idx;
361  return;
362  }
363 }
364 
366 {
367  for (unsigned i = 0; i < ic->nb_programs; i++) {
368  if (ic->programs[i] == last) {
369  last = NULL;
370  } else {
371  if (!last)
372  for (unsigned j = 0; j < ic->programs[i]->nb_stream_indexes; j++)
373  if (ic->programs[i]->stream_index[j] == s)
374  return ic->programs[i];
375  }
376  }
377  return NULL;
378 }
379 
381 {
382  int best_stream = 0;
383  int best_score = INT_MIN;
384 
385  if (s->nb_streams <= 0)
386  return -1;
387  for (unsigned i = 0; i < s->nb_streams; i++) {
388  const AVStream *const st = s->streams[i];
389  const FFStream *const sti = cffstream(st);
390  int score = 0;
391  if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) {
393  score -= 400;
394  if (st->codecpar->width && st->codecpar->height)
395  score += 50;
396  score+= 25;
397  }
398  if (st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO) {
399  if (st->codecpar->sample_rate)
400  score += 50;
401  }
402  if (sti->codec_info_nb_frames)
403  score += 12;
404 
405  if (st->discard != AVDISCARD_ALL)
406  score += 200;
407 
408  if (score > best_score) {
409  best_score = score;
410  best_stream = i;
411  }
412  }
413  return best_stream;
414 }
415 
417  int wanted_stream_nb, int related_stream,
418  const AVCodec **decoder_ret, int flags)
419 {
420  int nb_streams = ic->nb_streams;
422  int best_count = -1, best_multiframe = -1, best_disposition = -1;
423  int count, multiframe, disposition;
424  int64_t best_bitrate = -1;
425  int64_t bitrate;
426  unsigned *program = NULL;
427  const AVCodec *decoder = NULL, *best_decoder = NULL;
428 
429  if (related_stream >= 0 && wanted_stream_nb < 0) {
430  AVProgram *p = av_find_program_from_stream(ic, NULL, related_stream);
431  if (p) {
432  program = p->stream_index;
434  }
435  }
436  for (unsigned i = 0; i < nb_streams; i++) {
437  int real_stream_index = program ? program[i] : i;
438  AVStream *st = ic->streams[real_stream_index];
439  AVCodecParameters *par = st->codecpar;
440  if (par->codec_type != type)
441  continue;
442  if (wanted_stream_nb >= 0 && real_stream_index != wanted_stream_nb)
443  continue;
444  if (type == AVMEDIA_TYPE_AUDIO && !(par->ch_layout.nb_channels && par->sample_rate))
445  continue;
446  if (decoder_ret) {
447  decoder = ff_find_decoder(ic, st, par->codec_id);
448  if (!decoder) {
449  if (ret < 0)
451  continue;
452  }
453  }
455  + !! (st->disposition & AV_DISPOSITION_DEFAULT);
456  count = ffstream(st)->codec_info_nb_frames;
457  bitrate = par->bit_rate;
458  multiframe = FFMIN(5, count);
459  if ((best_disposition > disposition) ||
460  (best_disposition == disposition && best_multiframe > multiframe) ||
461  (best_disposition == disposition && best_multiframe == multiframe && best_bitrate > bitrate) ||
462  (best_disposition == disposition && best_multiframe == multiframe && best_bitrate == bitrate && best_count >= count))
463  continue;
464  best_disposition = disposition;
465  best_count = count;
466  best_bitrate = bitrate;
467  best_multiframe = multiframe;
468  ret = real_stream_index;
469  best_decoder = decoder;
470  if (program && i == nb_streams - 1 && ret < 0) {
471  program = NULL;
472  nb_streams = ic->nb_streams;
473  /* no related stream found, try again with everything */
474  i = 0;
475  }
476  }
477  if (decoder_ret)
478  *decoder_ret = best_decoder;
479  return ret;
480 }
481 
482 /**
483  * Matches a stream specifier (but ignores requested index).
484  *
485  * @param indexptr set to point to the requested stream index if there is one
486  *
487  * @return <0 on error
488  * 0 if st is NOT a matching stream
489  * >0 if st is a matching stream
490  */
491 static int match_stream_specifier(const AVFormatContext *s, const AVStream *st,
492  const char *spec, const char **indexptr,
493  const AVProgram **p)
494 {
495  int match = 1; /* Stores if the specifier matches so far. */
496  while (*spec) {
497  if (*spec <= '9' && *spec >= '0') { /* opt:index */
498  if (indexptr)
499  *indexptr = spec;
500  return match;
501  } else if (*spec == 'v' || *spec == 'a' || *spec == 's' || *spec == 'd' ||
502  *spec == 't' || *spec == 'V') { /* opt:[vasdtV] */
503  enum AVMediaType type;
504  int nopic = 0;
505 
506  switch (*spec++) {
507  case 'v': type = AVMEDIA_TYPE_VIDEO; break;
508  case 'a': type = AVMEDIA_TYPE_AUDIO; break;
509  case 's': type = AVMEDIA_TYPE_SUBTITLE; break;
510  case 'd': type = AVMEDIA_TYPE_DATA; break;
511  case 't': type = AVMEDIA_TYPE_ATTACHMENT; break;
512  case 'V': type = AVMEDIA_TYPE_VIDEO; nopic = 1; break;
513  default: av_assert0(0);
514  }
515  if (*spec && *spec++ != ':') /* If we are not at the end, then another specifier must follow. */
516  return AVERROR(EINVAL);
517 
518  if (type != st->codecpar->codec_type)
519  match = 0;
520  if (nopic && (st->disposition & AV_DISPOSITION_ATTACHED_PIC))
521  match = 0;
522  } else if (*spec == 'p' && *(spec + 1) == ':') {
523  int prog_id;
524  int found = 0;
525  char *endptr;
526  spec += 2;
527  prog_id = strtol(spec, &endptr, 0);
528  /* Disallow empty id and make sure that if we are not at the end, then another specifier must follow. */
529  if (spec == endptr || (*endptr && *endptr++ != ':'))
530  return AVERROR(EINVAL);
531  spec = endptr;
532  if (match) {
533  for (unsigned i = 0; i < s->nb_programs; i++) {
534  if (s->programs[i]->id != prog_id)
535  continue;
536 
537  for (unsigned j = 0; j < s->programs[i]->nb_stream_indexes; j++) {
538  if (st->index == s->programs[i]->stream_index[j]) {
539  found = 1;
540  if (p)
541  *p = s->programs[i];
542  i = s->nb_programs;
543  break;
544  }
545  }
546  }
547  }
548  if (!found)
549  match = 0;
550  } else if (*spec == '#' ||
551  (*spec == 'i' && *(spec + 1) == ':')) {
552  int stream_id;
553  char *endptr;
554  spec += 1 + (*spec == 'i');
555  stream_id = strtol(spec, &endptr, 0);
556  if (spec == endptr || *endptr) /* Disallow empty id and make sure we are at the end. */
557  return AVERROR(EINVAL);
558  return match && (stream_id == st->id);
559  } else if (*spec == 'm' && *(spec + 1) == ':') {
560  const AVDictionaryEntry *tag;
561  char *key, *val;
562  int ret;
563 
564  if (match) {
565  spec += 2;
566  val = strchr(spec, ':');
567 
568  key = val ? av_strndup(spec, val - spec) : av_strdup(spec);
569  if (!key)
570  return AVERROR(ENOMEM);
571 
572  tag = av_dict_get(st->metadata, key, NULL, 0);
573  if (tag) {
574  if (!val || !strcmp(tag->value, val + 1))
575  ret = 1;
576  else
577  ret = 0;
578  } else
579  ret = 0;
580 
581  av_freep(&key);
582  }
583  return match && ret;
584  } else if (*spec == 'u' && *(spec + 1) == '\0') {
585  const AVCodecParameters *par = st->codecpar;
586  int val;
587  switch (par->codec_type) {
588  case AVMEDIA_TYPE_AUDIO:
589  val = par->sample_rate && par->ch_layout.nb_channels;
590  if (par->format == AV_SAMPLE_FMT_NONE)
591  return 0;
592  break;
593  case AVMEDIA_TYPE_VIDEO:
594  val = par->width && par->height;
595  if (par->format == AV_PIX_FMT_NONE)
596  return 0;
597  break;
599  val = 0;
600  break;
601  default:
602  val = 1;
603  break;
604  }
605  return match && (par->codec_id != AV_CODEC_ID_NONE && val != 0);
606  } else {
607  return AVERROR(EINVAL);
608  }
609  }
610 
611  return match;
612 }
613 
615  const char *spec)
616 {
617  int ret, index;
618  char *endptr;
619  const char *indexptr = NULL;
620  const AVProgram *p = NULL;
621  int nb_streams;
622 
623  ret = match_stream_specifier(s, st, spec, &indexptr, &p);
624  if (ret < 0)
625  goto error;
626 
627  if (!indexptr)
628  return ret;
629 
630  index = strtol(indexptr, &endptr, 0);
631  if (*endptr) { /* We can't have anything after the requested index. */
632  ret = AVERROR(EINVAL);
633  goto error;
634  }
635 
636  /* This is not really needed but saves us a loop for simple stream index specifiers. */
637  if (spec == indexptr)
638  return (index == st->index);
639 
640  /* If we requested a matching stream index, we have to ensure st is that. */
641  nb_streams = p ? p->nb_stream_indexes : s->nb_streams;
642  for (int i = 0; i < nb_streams && index >= 0; i++) {
643  const AVStream *candidate = s->streams[p ? p->stream_index[i] : i];
644  ret = match_stream_specifier(s, candidate, spec, NULL, NULL);
645  if (ret < 0)
646  goto error;
647  if (ret > 0 && index-- == 0 && st == candidate)
648  return 1;
649  }
650  return 0;
651 
652 error:
653  if (ret == AVERROR(EINVAL))
654  av_log(s, AV_LOG_ERROR, "Invalid stream specifier: %s.\n", spec);
655  return ret;
656 }
657 
659 {
660  AVRational undef = {0, 1};
661  AVRational stream_sample_aspect_ratio = stream ? stream->sample_aspect_ratio : undef;
662  AVRational codec_sample_aspect_ratio = stream && stream->codecpar ? stream->codecpar->sample_aspect_ratio : undef;
663  AVRational frame_sample_aspect_ratio = frame ? frame->sample_aspect_ratio : codec_sample_aspect_ratio;
664 
665  av_reduce(&stream_sample_aspect_ratio.num, &stream_sample_aspect_ratio.den,
666  stream_sample_aspect_ratio.num, stream_sample_aspect_ratio.den, INT_MAX);
667  if (stream_sample_aspect_ratio.num <= 0 || stream_sample_aspect_ratio.den <= 0)
668  stream_sample_aspect_ratio = undef;
669 
670  av_reduce(&frame_sample_aspect_ratio.num, &frame_sample_aspect_ratio.den,
671  frame_sample_aspect_ratio.num, frame_sample_aspect_ratio.den, INT_MAX);
672  if (frame_sample_aspect_ratio.num <= 0 || frame_sample_aspect_ratio.den <= 0)
673  frame_sample_aspect_ratio = undef;
674 
675  if (stream_sample_aspect_ratio.num)
676  return stream_sample_aspect_ratio;
677  else
678  return frame_sample_aspect_ratio;
679 }
680 
682 {
683  AVRational fr = st->r_frame_rate;
685  AVCodecContext *const avctx = ffstream(st)->avctx;
686  AVRational codec_fr = avctx->framerate;
687  AVRational avg_fr = st->avg_frame_rate;
688 
689  if (avg_fr.num > 0 && avg_fr.den > 0 && fr.num > 0 && fr.den > 0 &&
690  av_q2d(avg_fr) < 70 && av_q2d(fr) > 210) {
691  fr = avg_fr;
692  }
693 
694  if (desc && (desc->props & AV_CODEC_PROP_FIELDS)) {
695  if ( codec_fr.num > 0 && codec_fr.den > 0 &&
696  (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))
697  fr = codec_fr;
698  }
699 
700  return fr;
701 }
702 
704  AVStream *ost, const AVStream *ist,
706 {
708  const AVCodecContext *const dec_ctx = cffstream(ist)->avctx;
709  AVCodecContext *const enc_ctx = ffstream(ost)->avctx;
710 
711  AVRational mul = (AVRational){ desc && (desc->props & AV_CODEC_PROP_FIELDS) ? 2 : 1, 1 };
713  : (ist->codecpar->codec_type == AVMEDIA_TYPE_AUDIO ? (AVRational){0, 1}
714  : ist->time_base);
715  enc_ctx->time_base = ist->time_base;
716  /*
717  * Avi is a special case here because it supports variable fps but
718  * having the fps and timebase differe significantly adds quite some
719  * overhead
720  */
721  if (!strcmp(ofmt->name, "avi")) {
722 #if FF_API_R_FRAME_RATE
723  if (copy_tb == AVFMT_TBCF_AUTO && ist->r_frame_rate.num
724  && av_q2d(ist->r_frame_rate) >= av_q2d(ist->avg_frame_rate)
725  && 0.5/av_q2d(ist->r_frame_rate) > av_q2d(ist->time_base)
726  && 0.5/av_q2d(ist->r_frame_rate) > av_q2d(dec_ctx_tb)
727  && av_q2d(ist->time_base) < 1.0/500 && av_q2d(dec_ctx_tb) < 1.0/500
728  || copy_tb == AVFMT_TBCF_R_FRAMERATE) {
729  enc_ctx->time_base.num = ist->r_frame_rate.den;
730  enc_ctx->time_base.den = 2*ist->r_frame_rate.num;
731 #if FF_API_TICKS_PER_FRAME
733  enc_ctx->ticks_per_frame = 2;
735 #endif
736  } else
737 #endif
740  && av_q2d(ist->time_base) < 1.0/500
741  || (copy_tb == AVFMT_TBCF_DECODER &&
743  enc_ctx->time_base = dec_ctx_tb;
744  enc_ctx->time_base.den *= 2;
745 #if FF_API_TICKS_PER_FRAME
747  enc_ctx->time_base.num *= dec_ctx->ticks_per_frame;
748  enc_ctx->ticks_per_frame = 2;
750 #endif
751  }
752  } else if (!(ofmt->flags & AVFMT_VARIABLE_FPS)
753  && !av_match_name(ofmt->name, "mov,mp4,3gp,3g2,psp,ipod,ismv,f4v")) {
756  && av_q2d(ist->time_base) < 1.0/500
757  || (copy_tb == AVFMT_TBCF_DECODER &&
759  enc_ctx->time_base = dec_ctx_tb;
760 #if FF_API_TICKS_PER_FRAME
762  enc_ctx->time_base.num *= dec_ctx->ticks_per_frame;
764 #endif
765  }
766  }
767 
768  if ((enc_ctx->codec_tag == AV_RL32("tmcd") || ost->codecpar->codec_tag == AV_RL32("tmcd"))
769  && dec_ctx_tb.num < dec_ctx_tb.den
770  && dec_ctx_tb.num > 0
771  && 121LL*dec_ctx_tb.num > dec_ctx_tb.den) {
772  enc_ctx->time_base = dec_ctx_tb;
773  }
774 
775  av_reduce(&enc_ctx->time_base.num, &enc_ctx->time_base.den,
776  enc_ctx->time_base.num, enc_ctx->time_base.den, INT_MAX);
777 
778  return 0;
779 }
780 
782 {
783  // See avformat_transfer_internal_stream_timing_info() TODO.
784  return cffstream(st)->avctx->time_base;
785 }
786 
787 void avpriv_set_pts_info(AVStream *st, int pts_wrap_bits,
788  unsigned int pts_num, unsigned int pts_den)
789 {
790  FFStream *const sti = ffstream(st);
791  AVRational new_tb;
792  if (av_reduce(&new_tb.num, &new_tb.den, pts_num, pts_den, INT_MAX)) {
793  if (new_tb.num != pts_num)
795  "st:%d removing common factor %d from timebase\n",
796  st->index, pts_num / new_tb.num);
797  } else
799  "st:%d has too large timebase, reducing\n", st->index);
800 
801  if (new_tb.num <= 0 || new_tb.den <= 0) {
803  "Ignoring attempt to set invalid timebase %d/%d for st:%d\n",
804  new_tb.num, new_tb.den,
805  st->index);
806  return;
807  }
808  st->time_base = new_tb;
809  sti->avctx->pkt_timebase = new_tb;
810  st->pts_wrap_bits = pts_wrap_bits;
811 }
812 
814  enum AVCodecID codec_id)
815 {
816  switch (st->codecpar->codec_type) {
817  case AVMEDIA_TYPE_VIDEO:
818  if (s->video_codec) return s->video_codec;
819  break;
820  case AVMEDIA_TYPE_AUDIO:
821  if (s->audio_codec) return s->audio_codec;
822  break;
824  if (s->subtitle_codec) return s->subtitle_codec;
825  break;
826  }
827 
829 }
830 
832 {
833  av_assert0(!dst->codec_whitelist &&
834  !dst->format_whitelist &&
835  !dst->protocol_whitelist &&
836  !dst->protocol_blacklist);
837  dst-> codec_whitelist = av_strdup(src->codec_whitelist);
838  dst->format_whitelist = av_strdup(src->format_whitelist);
839  dst->protocol_whitelist = av_strdup(src->protocol_whitelist);
840  dst->protocol_blacklist = av_strdup(src->protocol_blacklist);
841  if ( (src-> codec_whitelist && !dst-> codec_whitelist)
842  || (src-> format_whitelist && !dst-> format_whitelist)
843  || (src->protocol_whitelist && !dst->protocol_whitelist)
844  || (src->protocol_blacklist && !dst->protocol_blacklist)) {
845  av_log(dst, AV_LOG_ERROR, "Failed to duplicate black/whitelist\n");
846  return AVERROR(ENOMEM);
847  }
848  return 0;
849 }
850 
852 {
854  if (!d)
855  return 0;
856  if ((d->type == AVMEDIA_TYPE_VIDEO || d->type == AVMEDIA_TYPE_AUDIO) &&
857  !(d->props & AV_CODEC_PROP_INTRA_ONLY))
858  return 0;
859  return 1;
860 }
861 
863 {
864  av_assert0(url);
865  av_freep(&s->url);
866  s->url = url;
867 }
868 
870 {
871  int ret = 0;
872  if (*pb) {
873 #if FF_API_AVFORMAT_IO_CLOSE
875  if (s->io_close == ff_format_io_close_default || s->io_close == NULL)
876 #endif
877  ret = s->io_close2(s, *pb);
878 #if FF_API_AVFORMAT_IO_CLOSE
879  else
880  s->io_close(s, *pb);
882 #endif
883  }
884  *pb = NULL;
885  return ret;
886 }
error
static void error(const char *err)
Definition: target_bsf_fuzzer.c:31
av_packet_unref
void av_packet_unref(AVPacket *pkt)
Wipe the packet.
Definition: avpacket.c:423
AVCodec
AVCodec.
Definition: codec.h:187
FF_ENABLE_DEPRECATION_WARNINGS
#define FF_ENABLE_DEPRECATION_WARNINGS
Definition: internal.h:73
AVMEDIA_TYPE_SUBTITLE
@ AVMEDIA_TYPE_SUBTITLE
Definition: avutil.h:204
AV_LOG_WARNING
#define AV_LOG_WARNING
Something somehow does not look correct.
Definition: log.h:186
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:46
AVOutputFormat::name
const char * name
Definition: avformat.h:509
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:58
AVProgram::nb_stream_indexes
unsigned int nb_stream_indexes
Definition: avformat.h:1034
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:416
FFStream::bsfc
struct AVBSFContext * bsfc
bitstream filter to run on stream
Definition: internal.h:214
ff_find_decoder
const AVCodec * ff_find_decoder(AVFormatContext *s, const AVStream *st, enum AVCodecID codec_id)
Definition: avformat.c:813
AVCodecParameters
This struct describes the properties of an encoded stream.
Definition: codec_par.h:54
FFStream::bsf
struct AVBSFContext * bsf
Definition: internal.h:234
ffformatcontext
static av_always_inline FFFormatContext * ffformatcontext(AVFormatContext *s)
Definition: internal.h:192
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:864
AVFMT_VARIABLE_FPS
#define AVFMT_VARIABLE_FPS
Format allows variable fps.
Definition: avformat.h:483
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:770
AVStream::discard
enum AVDiscard discard
Selects which packets can be discarded at will and do not need to be demuxed.
Definition: avformat.h:910
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:365
av_div_q
AVRational av_div_q(AVRational b, AVRational c)
Divide one rational by another.
Definition: rational.c:88
AVFormatContext::protocol_blacklist
char * protocol_blacklist
',' separated list of disallowed protocols.
Definition: avformat.h:1682
AVFMT_TBCF_DECODER
@ AVFMT_TBCF_DECODER
Definition: avformat.h:2797
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:717
AVFMT_TBCF_AUTO
@ AVFMT_TBCF_AUTO
Definition: avformat.h:2796
AVFrame
This structure describes decoded (raw) audio or video data.
Definition: frame.h:340
tmp
static uint8_t tmp[11]
Definition: aes_ctr.c:28
AVFormatContext::streams
AVStream ** streams
A list of all streams in the file.
Definition: avformat.h:1173
AVPacketSideData
Definition: packet.h:315
AVPacket::data
uint8_t * data
Definition: packet.h:374
AVStream::avg_frame_rate
AVRational avg_frame_rate
Average framerate.
Definition: avformat.h:928
data
const char data[16]
Definition: mxf.c:148
FFFormatContext::initialized
int initialized
Whether or not avformat_init_output has already been called.
Definition: internal.h:164
AVFormatContext::programs
AVProgram ** programs
Definition: avformat.h:1273
AVCodecParameters::codec_tag
uint32_t codec_tag
Additional information about the codec (corresponds to the AVI FOURCC).
Definition: codec_par.h:66
cffstream
static const av_always_inline FFStream * cffstream(const AVStream *st)
Definition: internal.h:421
AVChannelLayout::nb_channels
int nb_channels
Number of channels in this layout.
Definition: channel_layout.h:311
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: avpacket.c:74
av_malloc
#define av_malloc(s)
Definition: tableprint_vlc.h:30
FFStream::codec_desc
const struct AVCodecDescriptor * codec_desc
Definition: internal.h:413
av_memdup
void * av_memdup(const void *p, size_t size)
Duplicate a buffer with av_malloc().
Definition: mem.c:302
AVCodecContext::framerate
AVRational framerate
Definition: avcodec.h:1797
AVPacketSideData::size
size_t size
Definition: packet.h:317
ff_remove_stream
void ff_remove_stream(AVFormatContext *s, AVStream *st)
Remove a stream from its AVFormatContext and free it.
Definition: avformat.c:79
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:787
bsf.h
ffstream
static av_always_inline FFStream * ffstream(AVStream *st)
Definition: internal.h:416
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:249
samplefmt.h
FFStream::avctx
struct AVCodecContext * avctx
The codec context used by avformat_find_stream_info, the parser, etc.
Definition: internal.h:224
AVDISCARD_NONE
@ AVDISCARD_NONE
discard nothing
Definition: defs.h:205
val
static double val(void *priv, double ch)
Definition: aeval.c:78
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:307
AVStream::duration
int64_t duration
Decoding: duration of the stream, in stream time base.
Definition: avformat.h:898
AV_PTS_WRAP_IGNORE
#define AV_PTS_WRAP_IGNORE
Options for behavior on timestamp wrap detection.
Definition: avformat.h:828
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:937
FFStream::priv_pts
FFFrac * priv_pts
Definition: internal.h:245
avassert.h
AVFormatContext::format_whitelist
char * format_whitelist
',' separated list of allowed demuxers.
Definition: avformat.h:1557
AV_LOG_TRACE
#define AV_LOG_TRACE
Extremely verbose debugging, useful for libav* development.
Definition: log.h:206
AV_LOG_ERROR
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:180
AVProgram::id
int id
Definition: avformat.h:1030
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:62
FFFormatContext::parse_queue
PacketList parse_queue
Packets split by the parser get queued here.
Definition: internal.h:119
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:104
av_realloc_array
void * av_realloc_array(void *ptr, size_t nmemb, size_t size)
Definition: mem.c:215
format
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 format(the sample packing is implied by the sample format) and sample rate. The lists are not just lists
AVCodecParameters::sample_aspect_ratio
AVRational sample_aspect_ratio
Video only.
Definition: codec_par.h:138
AVFormatContext::nb_programs
unsigned int nb_programs
Definition: avformat.h:1272
bitrate
int64_t bitrate
Definition: av1_levels.c:47
AVProbeData::buf
unsigned char * buf
Buffer must have AVPROBE_PADDING_SIZE of extra allocated bytes filled with zero.
Definition: avformat.h:454
AVMEDIA_TYPE_AUDIO
@ AVMEDIA_TYPE_AUDIO
Definition: avutil.h:202
AVCodecParameters::width
int width
Video only.
Definition: codec_par.h:128
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:40
AV_LOG_DEBUG
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
Definition: log.h:201
AVPacketSideData::data
uint8_t * data
Definition: packet.h:316
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:658
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:393
ffofmt
static const FFOutputFormat * ffofmt(const AVOutputFormat *fmt)
Definition: mux.h:136
nb_streams
static int nb_streams
Definition: ffprobe.c:315
codec_id
enum AVCodecID codec_id
Definition: vaapi_decode.c:388
key
const char * key
Definition: hwcontext_opencl.c:174
AVMEDIA_TYPE_DATA
@ AVMEDIA_TYPE_DATA
Opaque data information usually continuous.
Definition: avutil.h:203
FFFormatContext
Definition: internal.h:70
AVDISCARD_ALL
@ AVDISCARD_ALL
discard all
Definition: defs.h:211
AVFormatContext
Format I/O context.
Definition: avformat.h:1105
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:862
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:878
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:338
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:64
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:168
AVRational
Rational number (pair of numerator and denominator).
Definition: rational.h:58
AVFormatContext::protocol_whitelist
char * protocol_whitelist
',' separated list of allowed protocols.
Definition: avformat.h:1642
ff_copy_whiteblacklists
int ff_copy_whiteblacklists(AVFormatContext *dst, const AVFormatContext *src)
Copies the whilelists from one context to the other.
Definition: avformat.c:831
AVPacketSideData::type
enum AVPacketSideDataType type
Definition: packet.h:318
av_stream_add_side_data
int av_stream_add_side_data(AVStream *st, enum AVPacketSideDataType type, uint8_t *data, size_t size)
Wrap an existing array as stream side data.
Definition: avformat.c:158
FFOutputFormat::deinit
void(* deinit)(AVFormatContext *)
Deinitialize format.
Definition: mux.h:123
AVProgram::stream_index
unsigned int * stream_index
Definition: avformat.h:1033
match_stream_specifier
static int match_stream_specifier(const AVFormatContext *s, const AVStream *st, const char *spec, const char **indexptr, const AVProgram **p)
Matches a stream specifier (but ignores requested index).
Definition: avformat.c:491
AVStream::metadata
AVDictionary * metadata
Definition: avformat.h:919
av_opt_free
void av_opt_free(void *obj)
Free all allocated objects in obj.
Definition: opt.c:1719
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: avpacket.c:431
AVCodecParameters::ch_layout
AVChannelLayout ch_layout
Audio only.
Definition: codec_par.h:213
index
int index
Definition: gxfenc.c:89
AVCodecParameters::sample_rate
int sample_rate
Audio only.
Definition: codec_par.h:178
AVStream::nb_frames
int64_t nb_frames
number of frames in this stream if known or 0
Definition: avformat.h:900
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:975
AVFormatContext::nb_streams
unsigned int nb_streams
Number of elements in AVFormatContext.streams.
Definition: avformat.h:1161
FFFormatContext::id3v2_meta
AVDictionary * id3v2_meta
ID3v2 tag useful for MP3 demuxing.
Definition: internal.h:174
AVOutputFormat::flags
int flags
can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER, AVFMT_GLOBALHEADER, AVFMT_NOTIMESTAMPS,...
Definition: avformat.h:528
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:559
AVIOContext
Bytestream IO Context.
Definition: avio.h:166
AVMediaType
AVMediaType
Definition: avutil.h:199
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:614
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:133
avpriv_packet_list_free
void avpriv_packet_list_free(PacketList *pkt_buf)
Wipe the list and unref all the packets in it.
Definition: avpacket.c:590
FFStream
Definition: internal.h:197
ff_free_stream
void ff_free_stream(AVStream **pst)
Frees a stream without modifying the corresponding AVFormatContext.
Definition: avformat.c:43
AVCodecContext::pkt_timebase
AVRational pkt_timebase
Timebase in which pkt_dts/pts and AVPacket.dts/pts are expressed.
Definition: avcodec.h:1811
AV_SAMPLE_FMT_NONE
@ AV_SAMPLE_FMT_NONE
Definition: samplefmt.h:56
ff_format_io_close_default
void ff_format_io_close_default(AVFormatContext *s, AVIOContext *pb)
size
int size
Definition: twinvq_data.h:10344
avio.h
copy_tb
int copy_tb
Definition: ffmpeg_opt.c:80
AV_NOPTS_VALUE
#define AV_NOPTS_VALUE
Undefined timestamp value.
Definition: avutil.h:248
AV_CODEC_PROP_FIELDS
#define AV_CODEC_PROP_FIELDS
Video codec supports separate coding of fields in interlaced frames.
Definition: codec_desc.h:97
AVStream::event_flags
int event_flags
Flags indicating events happening on the stream, a combination of AVSTREAM_EVENT_FLAG_*.
Definition: avformat.h:974
av_stream_get_codec_timebase
AVRational av_stream_get_codec_timebase(const AVStream *st)
Get the internal codec timebase from a stream.
Definition: avformat.c:781
ff_format_io_close
int ff_format_io_close(AVFormatContext *s, AVIOContext **pb)
Definition: avformat.c:869
AVTimebaseSource
AVTimebaseSource
Definition: avformat.h:2795
AVMEDIA_TYPE_UNKNOWN
@ AVMEDIA_TYPE_UNKNOWN
Usually treated as AVMEDIA_TYPE_DATA.
Definition: avutil.h:200
AVStream::sample_aspect_ratio
AVRational sample_aspect_ratio
sample aspect ratio (0 if unknown)
Definition: avformat.h:917
frame.h
AV_DISPOSITION_HEARING_IMPAIRED
#define AV_DISPOSITION_HEARING_IMPAIRED
The stream is intended for hearing impaired audiences.
Definition: avformat.h:754
AVPacketSideDataType
AVPacketSideDataType
Definition: packet.h:41
FFFormatContext::raw_packet_buffer_size
int raw_packet_buffer_size
Sum of the size of packets in raw_packet_buffer, in bytes.
Definition: internal.h:144
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:225
FFStream::probe_data
AVProbeData probe_data
Definition: internal.h:371
AVStream::side_data
AVPacketSideData * side_data
An array of side data that applies to the whole stream (i.e.
Definition: avformat.h:957
FFStreamInfo::duration_error
double(* duration_error)[2][MAX_STD_TIMEBASES]
Definition: demux.h:35
FFFormatContext::raw_packet_buffer
PacketList raw_packet_buffer
Raw packets from the demuxer, prior to parsing and decoding.
Definition: internal.h:115
ff_is_intra_only
int ff_is_intra_only(enum AVCodecID id)
Definition: avformat.c:851
AV_CODEC_ID_NONE
@ AV_CODEC_ID_NONE
Definition: codec_id.h:50
AVOutputFormat
Definition: avformat.h:508
i
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:244
AVCodecParameters::height
int height
Definition: codec_par.h:129
AVFormatContext::codec_whitelist
char * codec_whitelist
',' separated list of allowed decoders.
Definition: avformat.h:1549
AVMEDIA_TYPE_ATTACHMENT
@ AVMEDIA_TYPE_ATTACHMENT
Opaque data information usually sparse.
Definition: avutil.h:205
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:380
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:254
AVProgram
New fields can be added to the end with minor version bumps.
Definition: avformat.h:1029
av_inv_q
static av_always_inline AVRational av_inv_q(AVRational q)
Invert a rational.
Definition: rational.h:159
demux.h
av_calloc
void * av_calloc(size_t nmemb, size_t size)
Definition: mem.c:262
avcodec.h
AVStream::disposition
int disposition
Stream disposition - a combination of AV_DISPOSITION_* flags.
Definition: avformat.h:908
AV_DISPOSITION_VISUAL_IMPAIRED
#define AV_DISPOSITION_VISUAL_IMPAIRED
The stream is intended for visually impaired audiences.
Definition: avformat.h:758
tag
uint32_t tag
Definition: movenc.c:1737
AVStream::id
int id
Format-specific stream ID.
Definition: avformat.h:851
ret
ret
Definition: filter_design.txt:187
AVStream
Stream structure.
Definition: avformat.h:839
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:681
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:264
AVStream::nb_side_data
int nb_side_data
The number of elements in the AVStream.side_data array.
Definition: avformat.h:961
avformat.h
av_stream_get_side_data
uint8_t * av_stream_get_side_data(const AVStream *st, enum AVPacketSideDataType type, size_t *size)
Get side information from stream.
Definition: avformat.c:143
AV_RL32
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_RL32
Definition: bytestream.h:92
U
#define U(x)
Definition: vpx_arith.h:37
id
enum AVCodecID id
Definition: dts2pts_bsf.c:364
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:313
AVCodecContext
main external API structure.
Definition: avcodec.h:437
AVStream::index
int index
stream index in AVFormatContext
Definition: avformat.h:845
avformat_transfer_internal_stream_timing_info
int avformat_transfer_internal_stream_timing_info(const AVOutputFormat *ofmt, AVStream *ost, const AVStream *ist, enum AVTimebaseSource copy_tb)
Transfer internal timing information from one stream to another.
Definition: avformat.c:703
channel_layout.h
ff_stream_side_data_copy
int ff_stream_side_data_copy(AVStream *dst, const AVStream *src)
Copy side data from source to destination stream.
Definition: avformat.c:211
FFStream::extract_extradata
struct FFStream::@299 extract_extradata
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:65
ff_flush_packet_queue
void ff_flush_packet_queue(AVFormatContext *s)
Definition: avformat.c:88
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:345
avformat_free_context
void avformat_free_context(AVFormatContext *s)
Free an AVFormatContext and all its streams.
Definition: avformat.c:98
AVStream::r_frame_rate
AVRational r_frame_rate
Real base framerate of the stream.
Definition: avformat.h:997
AVCodecContext::ticks_per_frame
attribute_deprecated int ticks_per_frame
For some codecs, the time base is closer to the field rate than the frame rate.
Definition: avcodec.h:575
FFStream::info
struct FFStreamInfo * info
Stream information used internally by avformat_find_stream_info()
Definition: internal.h:250
av_mul_q
AVRational av_mul_q(AVRational b, AVRational c)
Multiply two rationals.
Definition: rational.c:80
FF_DISABLE_DEPRECATION_WARNINGS
#define FF_DISABLE_DEPRECATION_WARNINGS
Definition: internal.h:72
FFStream::index_entries
AVIndexEntry * index_entries
Only used if the format does not support seeking natively.
Definition: internal.h:252
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:270
desc
const char * desc
Definition: libsvtav1.c:83
AVMEDIA_TYPE_VIDEO
@ AVMEDIA_TYPE_VIDEO
Definition: avutil.h:201
mem.h
packet_internal.h
FFFormatContext::pkt
AVPacket * pkt
Used to hold temporary packets for the generic demuxing code.
Definition: internal.h:140
AVCodecParameters::format
int format
Definition: codec_par.h:86
av_free
#define av_free(p)
Definition: tableprint_vlc.h:33
AVCodecContext::codec_tag
unsigned int codec_tag
fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A').
Definition: avcodec.h:462
AVDictionaryEntry
Definition: dict.h:89
AVCodecParameters::codec_id
enum AVCodecID codec_id
Specific type of the encoded data (the codec used).
Definition: codec_par.h:62
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:289
av_freep
#define av_freep(p)
Definition: tableprint_vlc.h:34
src
INIT_CLIP pixel * src
Definition: h264pred_template.c:418
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:239
av_stream_new_side_data
uint8_t * av_stream_new_side_data(AVStream *st, enum AVPacketSideDataType type, size_t size)
Allocate new information from stream.
Definition: avformat.c:193
d
d
Definition: ffmpeg_filter.c:331
flags
#define flags(name, subs,...)
Definition: cbs_av1.c:467
AVCodecParameters::bit_rate
int64_t bit_rate
The average bitrate of the encoded data (in bits per second).
Definition: codec_par.h:91
av_log
#define av_log(a,...)
Definition: tableprint_vlc.h:27
FFStream::parser
struct AVCodecParserContext * parser
Definition: internal.h:388
avcodec_descriptor_get
const AVCodecDescriptor * avcodec_descriptor_get(enum AVCodecID id)
Definition: codec_desc.c:3722
AVStream::start_time
int64_t start_time
Decoding: pts of the first frame of the stream in presentation order, in stream time base.
Definition: avformat.h:888
avstring.h
av_strndup
char * av_strndup(const char *s, size_t len)
Duplicate a substring of a string.
Definition: mem.c:282
AVStream::pts_wrap_bits
int pts_wrap_bits
Number of bits in timestamps.
Definition: avformat.h:1006
codec_desc.h
ff_format_set_url
void ff_format_set_url(AVFormatContext *s, char *url)
Set AVFormatContext url field to the provided pointer.
Definition: avformat.c:862
avcodec_parameters_copy
int avcodec_parameters_copy(AVCodecParameters *dst, const AVCodecParameters *src)
Copy the contents of src to dst.
Definition: codec_par.c:75
av_parser_close
void av_parser_close(AVCodecParserContext *s)
Definition: parser.c:193
mux.h