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 #if FF_API_AVSTREAM_SIDE_DATA
53  for (int i = 0; i < st->nb_side_data; i++)
54  av_freep(&st->side_data[i].data);
55  av_freep(&st->side_data);
57 #endif
58 
59  if (st->attached_pic.data)
61 
62  av_parser_close(sti->parser);
64  av_bsf_free(&sti->bsfc);
65  av_freep(&sti->priv_pts);
66  av_freep(&sti->index_entries);
67  av_freep(&sti->probe_data.buf);
68 
70 
71  if (sti->info) {
73  av_freep(&sti->info);
74  }
75 
76  av_dict_free(&st->metadata);
78  av_freep(&st->priv_data);
79 
80  av_freep(pst);
81 }
82 
84 {
85  av_assert0(s->nb_streams>0);
86  av_assert0(s->streams[ s->nb_streams - 1 ] == st);
87 
88  ff_free_stream(&s->streams[ --s->nb_streams ]);
89 }
90 
91 /* XXX: suppress the packet queue */
93 {
94  FFFormatContext *const si = ffformatcontext(s);
98 
99  si->raw_packet_buffer_size = 0;
100 }
101 
103 {
104  FFFormatContext *si;
105 
106  if (!s)
107  return;
108  si = ffformatcontext(s);
109 
110  if (s->oformat && ffofmt(s->oformat)->deinit && si->initialized)
111  ffofmt(s->oformat)->deinit(s);
112 
113  av_opt_free(s);
114  if (s->iformat && s->iformat->priv_class && s->priv_data)
115  av_opt_free(s->priv_data);
116  if (s->oformat && s->oformat->priv_class && s->priv_data)
117  av_opt_free(s->priv_data);
118 
119  for (unsigned i = 0; i < s->nb_streams; i++)
120  ff_free_stream(&s->streams[i]);
121  s->nb_streams = 0;
122 
123  for (unsigned i = 0; i < s->nb_programs; i++) {
124  av_dict_free(&s->programs[i]->metadata);
125  av_freep(&s->programs[i]->stream_index);
126  av_freep(&s->programs[i]);
127  }
128  s->nb_programs = 0;
129 
130  av_freep(&s->programs);
131  av_freep(&s->priv_data);
132  while (s->nb_chapters--) {
133  av_dict_free(&s->chapters[s->nb_chapters]->metadata);
134  av_freep(&s->chapters[s->nb_chapters]);
135  }
136  av_freep(&s->chapters);
137  av_dict_free(&s->metadata);
138  av_dict_free(&si->id3v2_meta);
139  av_packet_free(&si->pkt);
141  av_freep(&s->streams);
143  av_freep(&s->url);
144  av_free(s);
145 }
146 
147 #if FF_API_AVSTREAM_SIDE_DATA
149 uint8_t *av_stream_get_side_data(const AVStream *st,
150  enum AVPacketSideDataType type, size_t *size)
151 {
152  for (int i = 0; i < st->nb_side_data; i++) {
153  if (st->side_data[i].type == type) {
154  if (size)
155  *size = st->side_data[i].size;
156  return st->side_data[i].data;
157  }
158  }
159  if (size)
160  *size = 0;
161  return NULL;
162 }
163 
164 int av_stream_add_side_data(AVStream *st, enum AVPacketSideDataType type,
165  uint8_t *data, size_t size)
166 {
167  AVPacketSideData *sd, *tmp;
168 
169  for (int i = 0; i < st->nb_side_data; i++) {
170  sd = &st->side_data[i];
171 
172  if (sd->type == type) {
173  av_freep(&sd->data);
174  sd->data = data;
175  sd->size = size;
176  return 0;
177  }
178  }
179 
180  if (st->nb_side_data + 1U > FFMIN(INT_MAX, SIZE_MAX / sizeof(*tmp)))
181  return AVERROR(ERANGE);
182 
183  tmp = av_realloc_array(st->side_data, st->nb_side_data + 1, sizeof(*tmp));
184  if (!tmp) {
185  return AVERROR(ENOMEM);
186  }
187 
188  st->side_data = tmp;
189  st->nb_side_data++;
190 
191  sd = &st->side_data[st->nb_side_data - 1];
192  sd->type = type;
193  sd->data = data;
194  sd->size = size;
195 
196  return 0;
197 }
198 
199 uint8_t *av_stream_new_side_data(AVStream *st, enum AVPacketSideDataType type,
200  size_t size)
201 {
202  int ret;
203  uint8_t *data = av_malloc(size);
204 
205  if (!data)
206  return NULL;
207 
208  ret = av_stream_add_side_data(st, type, data, size);
209  if (ret < 0) {
210  av_freep(&data);
211  return NULL;
212  }
213 
214  return data;
215 }
217 #endif
218 
219 /**
220  * Copy all stream parameters from source to destination stream, with the
221  * exception of the index field, which is usually set by avformat_new_stream().
222  *
223  * @param dst pointer to destination AVStream
224  * @param src pointer to source AVStream
225  * @return >=0 on success, AVERROR code on error
226  */
227 static int stream_params_copy(AVStream *dst, const AVStream *src)
228 {
229  int ret;
230 
231  dst->id = src->id;
232  dst->time_base = src->time_base;
233  dst->start_time = src->start_time;
234  dst->duration = src->duration;
235  dst->nb_frames = src->nb_frames;
236  dst->disposition = src->disposition;
237  dst->discard = src->discard;
238  dst->sample_aspect_ratio = src->sample_aspect_ratio;
239  dst->avg_frame_rate = src->avg_frame_rate;
240  dst->event_flags = src->event_flags;
241  dst->r_frame_rate = src->r_frame_rate;
242  dst->pts_wrap_bits = src->pts_wrap_bits;
243 
244  av_dict_free(&dst->metadata);
245  ret = av_dict_copy(&dst->metadata, src->metadata, 0);
246  if (ret < 0)
247  return ret;
248 
249  ret = avcodec_parameters_copy(dst->codecpar, src->codecpar);
250  if (ret < 0)
251  return ret;
252 
254  if (src->attached_pic.data) {
255  ret = av_packet_ref(&dst->attached_pic, &src->attached_pic);
256  if (ret < 0)
257  return ret;
258  }
259 
260  return 0;
261 }
262 
264 {
265  AVStream *st;
266  int ret;
267 
268  st = avformat_new_stream(dst_ctx, NULL);
269  if (!st)
270  return NULL;
271 
272  ret = stream_params_copy(st, src);
273  if (ret < 0) {
274  ff_remove_stream(dst_ctx, st);
275  return NULL;
276  }
277 
278  return st;
279 }
280 
282 {
284  int ret;
285 
286  av_log(ac, AV_LOG_TRACE, "new_program: id=0x%04x\n", id);
287 
288  for (unsigned i = 0; i < ac->nb_programs; i++)
289  if (ac->programs[i]->id == id)
290  program = ac->programs[i];
291 
292  if (!program) {
293  program = av_mallocz(sizeof(*program));
294  if (!program)
295  return NULL;
297  if (ret < 0) {
298  av_free(program);
299  return NULL;
300  }
301  program->discard = AVDISCARD_NONE;
302  program->pmt_version = -1;
303  program->id = id;
304  program->pts_wrap_reference = AV_NOPTS_VALUE;
305  program->pts_wrap_behavior = AV_PTS_WRAP_IGNORE;
306  program->start_time =
307  program->end_time = AV_NOPTS_VALUE;
308  }
309  return program;
310 }
311 
312 void av_program_add_stream_index(AVFormatContext *ac, int progid, unsigned idx)
313 {
315  void *tmp;
316 
317  if (idx >= ac->nb_streams) {
318  av_log(ac, AV_LOG_ERROR, "stream index %d is not valid\n", idx);
319  return;
320  }
321 
322  for (unsigned i = 0; i < ac->nb_programs; i++) {
323  if (ac->programs[i]->id != progid)
324  continue;
325  program = ac->programs[i];
326  for (unsigned j = 0; j < program->nb_stream_indexes; j++)
327  if (program->stream_index[j] == idx)
328  return;
329 
330  tmp = av_realloc_array(program->stream_index, program->nb_stream_indexes+1, sizeof(unsigned int));
331  if (!tmp)
332  return;
333  program->stream_index = tmp;
334  program->stream_index[program->nb_stream_indexes++] = idx;
335  return;
336  }
337 }
338 
340 {
341  for (unsigned i = 0; i < ic->nb_programs; i++) {
342  if (ic->programs[i] == last) {
343  last = NULL;
344  } else {
345  if (!last)
346  for (unsigned j = 0; j < ic->programs[i]->nb_stream_indexes; j++)
347  if (ic->programs[i]->stream_index[j] == s)
348  return ic->programs[i];
349  }
350  }
351  return NULL;
352 }
353 
355 {
356  int best_stream = 0;
357  int best_score = INT_MIN;
358 
359  if (s->nb_streams <= 0)
360  return -1;
361  for (unsigned i = 0; i < s->nb_streams; i++) {
362  const AVStream *const st = s->streams[i];
363  const FFStream *const sti = cffstream(st);
364  int score = 0;
365  if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) {
367  score -= 400;
368  if (st->codecpar->width && st->codecpar->height)
369  score += 50;
370  score+= 25;
371  }
372  if (st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO) {
373  if (st->codecpar->sample_rate)
374  score += 50;
375  }
376  if (sti->codec_info_nb_frames)
377  score += 12;
378 
379  if (st->discard != AVDISCARD_ALL)
380  score += 200;
381 
382  if (score > best_score) {
383  best_score = score;
384  best_stream = i;
385  }
386  }
387  return best_stream;
388 }
389 
391  int wanted_stream_nb, int related_stream,
392  const AVCodec **decoder_ret, int flags)
393 {
394  int nb_streams = ic->nb_streams;
396  int best_count = -1, best_multiframe = -1, best_disposition = -1;
397  int count, multiframe, disposition;
398  int64_t best_bitrate = -1;
399  int64_t bitrate;
400  unsigned *program = NULL;
401  const AVCodec *decoder = NULL, *best_decoder = NULL;
402 
403  if (related_stream >= 0 && wanted_stream_nb < 0) {
404  AVProgram *p = av_find_program_from_stream(ic, NULL, related_stream);
405  if (p) {
406  program = p->stream_index;
408  }
409  }
410  for (unsigned i = 0; i < nb_streams; i++) {
411  int real_stream_index = program ? program[i] : i;
412  AVStream *st = ic->streams[real_stream_index];
413  AVCodecParameters *par = st->codecpar;
414  if (par->codec_type != type)
415  continue;
416  if (wanted_stream_nb >= 0 && real_stream_index != wanted_stream_nb)
417  continue;
418  if (type == AVMEDIA_TYPE_AUDIO && !(par->ch_layout.nb_channels && par->sample_rate))
419  continue;
420  if (decoder_ret) {
421  decoder = ff_find_decoder(ic, st, par->codec_id);
422  if (!decoder) {
423  if (ret < 0)
425  continue;
426  }
427  }
429  + !! (st->disposition & AV_DISPOSITION_DEFAULT);
430  count = ffstream(st)->codec_info_nb_frames;
431  bitrate = par->bit_rate;
432  multiframe = FFMIN(5, count);
433  if ((best_disposition > disposition) ||
434  (best_disposition == disposition && best_multiframe > multiframe) ||
435  (best_disposition == disposition && best_multiframe == multiframe && best_bitrate > bitrate) ||
436  (best_disposition == disposition && best_multiframe == multiframe && best_bitrate == bitrate && best_count >= count))
437  continue;
438  best_disposition = disposition;
439  best_count = count;
440  best_bitrate = bitrate;
441  best_multiframe = multiframe;
442  ret = real_stream_index;
443  best_decoder = decoder;
444  if (program && i == nb_streams - 1 && ret < 0) {
445  program = NULL;
446  nb_streams = ic->nb_streams;
447  /* no related stream found, try again with everything */
448  i = 0;
449  }
450  }
451  if (decoder_ret)
452  *decoder_ret = best_decoder;
453  return ret;
454 }
455 
456 /**
457  * Matches a stream specifier (but ignores requested index).
458  *
459  * @param indexptr set to point to the requested stream index if there is one
460  *
461  * @return <0 on error
462  * 0 if st is NOT a matching stream
463  * >0 if st is a matching stream
464  */
465 static int match_stream_specifier(const AVFormatContext *s, const AVStream *st,
466  const char *spec, const char **indexptr,
467  const AVProgram **p)
468 {
469  int match = 1; /* Stores if the specifier matches so far. */
470  while (*spec) {
471  if (*spec <= '9' && *spec >= '0') { /* opt:index */
472  if (indexptr)
473  *indexptr = spec;
474  return match;
475  } else if (*spec == 'v' || *spec == 'a' || *spec == 's' || *spec == 'd' ||
476  *spec == 't' || *spec == 'V') { /* opt:[vasdtV] */
477  enum AVMediaType type;
478  int nopic = 0;
479 
480  switch (*spec++) {
481  case 'v': type = AVMEDIA_TYPE_VIDEO; break;
482  case 'a': type = AVMEDIA_TYPE_AUDIO; break;
483  case 's': type = AVMEDIA_TYPE_SUBTITLE; break;
484  case 'd': type = AVMEDIA_TYPE_DATA; break;
485  case 't': type = AVMEDIA_TYPE_ATTACHMENT; break;
486  case 'V': type = AVMEDIA_TYPE_VIDEO; nopic = 1; break;
487  default: av_assert0(0);
488  }
489  if (*spec && *spec++ != ':') /* If we are not at the end, then another specifier must follow. */
490  return AVERROR(EINVAL);
491 
492  if (type != st->codecpar->codec_type)
493  match = 0;
494  if (nopic && (st->disposition & AV_DISPOSITION_ATTACHED_PIC))
495  match = 0;
496  } else if (*spec == 'p' && *(spec + 1) == ':') {
497  int prog_id;
498  int found = 0;
499  char *endptr;
500  spec += 2;
501  prog_id = strtol(spec, &endptr, 0);
502  /* Disallow empty id and make sure that if we are not at the end, then another specifier must follow. */
503  if (spec == endptr || (*endptr && *endptr++ != ':'))
504  return AVERROR(EINVAL);
505  spec = endptr;
506  if (match) {
507  for (unsigned i = 0; i < s->nb_programs; i++) {
508  if (s->programs[i]->id != prog_id)
509  continue;
510 
511  for (unsigned j = 0; j < s->programs[i]->nb_stream_indexes; j++) {
512  if (st->index == s->programs[i]->stream_index[j]) {
513  found = 1;
514  if (p)
515  *p = s->programs[i];
516  i = s->nb_programs;
517  break;
518  }
519  }
520  }
521  }
522  if (!found)
523  match = 0;
524  } else if (*spec == '#' ||
525  (*spec == 'i' && *(spec + 1) == ':')) {
526  int stream_id;
527  char *endptr;
528  spec += 1 + (*spec == 'i');
529  stream_id = strtol(spec, &endptr, 0);
530  if (spec == endptr || *endptr) /* Disallow empty id and make sure we are at the end. */
531  return AVERROR(EINVAL);
532  return match && (stream_id == st->id);
533  } else if (*spec == 'm' && *(spec + 1) == ':') {
534  const AVDictionaryEntry *tag;
535  char *key, *val;
536  int ret;
537 
538  if (match) {
539  spec += 2;
540  val = strchr(spec, ':');
541 
542  key = val ? av_strndup(spec, val - spec) : av_strdup(spec);
543  if (!key)
544  return AVERROR(ENOMEM);
545 
546  tag = av_dict_get(st->metadata, key, NULL, 0);
547  if (tag) {
548  if (!val || !strcmp(tag->value, val + 1))
549  ret = 1;
550  else
551  ret = 0;
552  } else
553  ret = 0;
554 
555  av_freep(&key);
556  }
557  return match && ret;
558  } else if (*spec == 'u' && *(spec + 1) == '\0') {
559  const AVCodecParameters *par = st->codecpar;
560  int val;
561  switch (par->codec_type) {
562  case AVMEDIA_TYPE_AUDIO:
563  val = par->sample_rate && par->ch_layout.nb_channels;
564  if (par->format == AV_SAMPLE_FMT_NONE)
565  return 0;
566  break;
567  case AVMEDIA_TYPE_VIDEO:
568  val = par->width && par->height;
569  if (par->format == AV_PIX_FMT_NONE)
570  return 0;
571  break;
573  val = 0;
574  break;
575  default:
576  val = 1;
577  break;
578  }
579  return match && (par->codec_id != AV_CODEC_ID_NONE && val != 0);
580  } else {
581  return AVERROR(EINVAL);
582  }
583  }
584 
585  return match;
586 }
587 
589  const char *spec)
590 {
591  int ret, index;
592  char *endptr;
593  const char *indexptr = NULL;
594  const AVProgram *p = NULL;
595  int nb_streams;
596 
597  ret = match_stream_specifier(s, st, spec, &indexptr, &p);
598  if (ret < 0)
599  goto error;
600 
601  if (!indexptr)
602  return ret;
603 
604  index = strtol(indexptr, &endptr, 0);
605  if (*endptr) { /* We can't have anything after the requested index. */
606  ret = AVERROR(EINVAL);
607  goto error;
608  }
609 
610  /* This is not really needed but saves us a loop for simple stream index specifiers. */
611  if (spec == indexptr)
612  return (index == st->index);
613 
614  /* If we requested a matching stream index, we have to ensure st is that. */
615  nb_streams = p ? p->nb_stream_indexes : s->nb_streams;
616  for (int i = 0; i < nb_streams && index >= 0; i++) {
617  const AVStream *candidate = s->streams[p ? p->stream_index[i] : i];
618  ret = match_stream_specifier(s, candidate, spec, NULL, NULL);
619  if (ret < 0)
620  goto error;
621  if (ret > 0 && index-- == 0 && st == candidate)
622  return 1;
623  }
624  return 0;
625 
626 error:
627  if (ret == AVERROR(EINVAL))
628  av_log(s, AV_LOG_ERROR, "Invalid stream specifier: %s.\n", spec);
629  return ret;
630 }
631 
633 {
634  AVRational undef = {0, 1};
635  AVRational stream_sample_aspect_ratio = stream ? stream->sample_aspect_ratio : undef;
636  AVRational codec_sample_aspect_ratio = stream && stream->codecpar ? stream->codecpar->sample_aspect_ratio : undef;
637  AVRational frame_sample_aspect_ratio = frame ? frame->sample_aspect_ratio : codec_sample_aspect_ratio;
638 
639  av_reduce(&stream_sample_aspect_ratio.num, &stream_sample_aspect_ratio.den,
640  stream_sample_aspect_ratio.num, stream_sample_aspect_ratio.den, INT_MAX);
641  if (stream_sample_aspect_ratio.num <= 0 || stream_sample_aspect_ratio.den <= 0)
642  stream_sample_aspect_ratio = undef;
643 
644  av_reduce(&frame_sample_aspect_ratio.num, &frame_sample_aspect_ratio.den,
645  frame_sample_aspect_ratio.num, frame_sample_aspect_ratio.den, INT_MAX);
646  if (frame_sample_aspect_ratio.num <= 0 || frame_sample_aspect_ratio.den <= 0)
647  frame_sample_aspect_ratio = undef;
648 
649  if (stream_sample_aspect_ratio.num)
650  return stream_sample_aspect_ratio;
651  else
652  return frame_sample_aspect_ratio;
653 }
654 
656 {
657  AVRational fr = st->r_frame_rate;
659  AVCodecContext *const avctx = ffstream(st)->avctx;
660  AVRational codec_fr = avctx->framerate;
661  AVRational avg_fr = st->avg_frame_rate;
662 
663  if (avg_fr.num > 0 && avg_fr.den > 0 && fr.num > 0 && fr.den > 0 &&
664  av_q2d(avg_fr) < 70 && av_q2d(fr) > 210) {
665  fr = avg_fr;
666  }
667 
668  if (desc && (desc->props & AV_CODEC_PROP_FIELDS)) {
669  if ( codec_fr.num > 0 && codec_fr.den > 0 &&
670  (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))
671  fr = codec_fr;
672  }
673 
674  return fr;
675 }
676 
678  AVStream *ost, const AVStream *ist,
680 {
682  const AVCodecContext *const dec_ctx = cffstream(ist)->avctx;
683  AVCodecContext *const enc_ctx = ffstream(ost)->avctx;
684 
685  AVRational mul = (AVRational){ desc && (desc->props & AV_CODEC_PROP_FIELDS) ? 2 : 1, 1 };
687  : (ist->codecpar->codec_type == AVMEDIA_TYPE_AUDIO ? (AVRational){0, 1}
688  : ist->time_base);
689  enc_ctx->time_base = ist->time_base;
690  /*
691  * Avi is a special case here because it supports variable fps but
692  * having the fps and timebase differe significantly adds quite some
693  * overhead
694  */
695  if (!strcmp(ofmt->name, "avi")) {
696 #if FF_API_R_FRAME_RATE
697  if (copy_tb == AVFMT_TBCF_AUTO && ist->r_frame_rate.num
698  && av_q2d(ist->r_frame_rate) >= av_q2d(ist->avg_frame_rate)
699  && 0.5/av_q2d(ist->r_frame_rate) > av_q2d(ist->time_base)
700  && 0.5/av_q2d(ist->r_frame_rate) > av_q2d(dec_ctx_tb)
701  && av_q2d(ist->time_base) < 1.0/500 && av_q2d(dec_ctx_tb) < 1.0/500
702  || copy_tb == AVFMT_TBCF_R_FRAMERATE) {
703  enc_ctx->time_base.num = ist->r_frame_rate.den;
704  enc_ctx->time_base.den = 2*ist->r_frame_rate.num;
705 #if FF_API_TICKS_PER_FRAME
707  enc_ctx->ticks_per_frame = 2;
709 #endif
710  } else
711 #endif
714  && av_q2d(ist->time_base) < 1.0/500
715  || (copy_tb == AVFMT_TBCF_DECODER &&
717  enc_ctx->time_base = dec_ctx_tb;
718  enc_ctx->time_base.den *= 2;
719 #if FF_API_TICKS_PER_FRAME
721  enc_ctx->time_base.num *= dec_ctx->ticks_per_frame;
722  enc_ctx->ticks_per_frame = 2;
724 #endif
725  }
726  } else if (!(ofmt->flags & AVFMT_VARIABLE_FPS)
727  && !av_match_name(ofmt->name, "mov,mp4,3gp,3g2,psp,ipod,ismv,f4v")) {
730  && av_q2d(ist->time_base) < 1.0/500
731  || (copy_tb == AVFMT_TBCF_DECODER &&
733  enc_ctx->time_base = dec_ctx_tb;
734 #if FF_API_TICKS_PER_FRAME
736  enc_ctx->time_base.num *= dec_ctx->ticks_per_frame;
738 #endif
739  }
740  }
741 
742  if ((enc_ctx->codec_tag == AV_RL32("tmcd") || ost->codecpar->codec_tag == AV_RL32("tmcd"))
743  && dec_ctx_tb.num < dec_ctx_tb.den
744  && dec_ctx_tb.num > 0
745  && 121LL*dec_ctx_tb.num > dec_ctx_tb.den) {
746  enc_ctx->time_base = dec_ctx_tb;
747  }
748 
749  av_reduce(&enc_ctx->time_base.num, &enc_ctx->time_base.den,
750  enc_ctx->time_base.num, enc_ctx->time_base.den, INT_MAX);
751 
752  return 0;
753 }
754 
756 {
757  // See avformat_transfer_internal_stream_timing_info() TODO.
758  return cffstream(st)->avctx->time_base;
759 }
760 
761 void avpriv_set_pts_info(AVStream *st, int pts_wrap_bits,
762  unsigned int pts_num, unsigned int pts_den)
763 {
764  FFStream *const sti = ffstream(st);
765  AVRational new_tb;
766  if (av_reduce(&new_tb.num, &new_tb.den, pts_num, pts_den, INT_MAX)) {
767  if (new_tb.num != pts_num)
769  "st:%d removing common factor %d from timebase\n",
770  st->index, pts_num / new_tb.num);
771  } else
773  "st:%d has too large timebase, reducing\n", st->index);
774 
775  if (new_tb.num <= 0 || new_tb.den <= 0) {
777  "Ignoring attempt to set invalid timebase %d/%d for st:%d\n",
778  new_tb.num, new_tb.den,
779  st->index);
780  return;
781  }
782  st->time_base = new_tb;
783  sti->avctx->pkt_timebase = new_tb;
784  st->pts_wrap_bits = pts_wrap_bits;
785 }
786 
788  enum AVCodecID codec_id)
789 {
790  switch (st->codecpar->codec_type) {
791  case AVMEDIA_TYPE_VIDEO:
792  if (s->video_codec) return s->video_codec;
793  break;
794  case AVMEDIA_TYPE_AUDIO:
795  if (s->audio_codec) return s->audio_codec;
796  break;
798  if (s->subtitle_codec) return s->subtitle_codec;
799  break;
800  }
801 
803 }
804 
806 {
807  av_assert0(!dst->codec_whitelist &&
808  !dst->format_whitelist &&
809  !dst->protocol_whitelist &&
810  !dst->protocol_blacklist);
811  dst-> codec_whitelist = av_strdup(src->codec_whitelist);
812  dst->format_whitelist = av_strdup(src->format_whitelist);
813  dst->protocol_whitelist = av_strdup(src->protocol_whitelist);
814  dst->protocol_blacklist = av_strdup(src->protocol_blacklist);
815  if ( (src-> codec_whitelist && !dst-> codec_whitelist)
816  || (src-> format_whitelist && !dst-> format_whitelist)
817  || (src->protocol_whitelist && !dst->protocol_whitelist)
818  || (src->protocol_blacklist && !dst->protocol_blacklist)) {
819  av_log(dst, AV_LOG_ERROR, "Failed to duplicate black/whitelist\n");
820  return AVERROR(ENOMEM);
821  }
822  return 0;
823 }
824 
826 {
828  if (!d)
829  return 0;
830  if ((d->type == AVMEDIA_TYPE_VIDEO || d->type == AVMEDIA_TYPE_AUDIO) &&
831  !(d->props & AV_CODEC_PROP_INTRA_ONLY))
832  return 0;
833  return 1;
834 }
835 
837 {
838  av_assert0(url);
839  av_freep(&s->url);
840  s->url = url;
841 }
842 
844 {
845  int ret = 0;
846  if (*pb) {
847 #if FF_API_AVFORMAT_IO_CLOSE
849  if (s->io_close == ff_format_io_close_default || s->io_close == NULL)
850 #endif
851  ret = s->io_close2(s, *pb);
852 #if FF_API_AVFORMAT_IO_CLOSE
853  else
854  s->io_close(s, *pb);
856 #endif
857  }
858  *pb = NULL;
859  return ret;
860 }
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:511
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
AVProgram::nb_stream_indexes
unsigned int nb_stream_indexes
Definition: avformat.h:1044
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:390
FFStream::bsfc
struct AVBSFContext * bsfc
bitstream filter to run on stream
Definition: internal.h:216
ff_find_decoder
const AVCodec * ff_find_decoder(AVFormatContext *s, const AVStream *st, enum AVCodecID codec_id)
Definition: avformat.c:787
AVCodecParameters
This struct describes the properties of an encoded stream.
Definition: codec_par.h:47
FFStream::bsf
struct AVBSFContext * bsf
Definition: internal.h:236
ffformatcontext
static av_always_inline FFFormatContext * ffformatcontext(AVFormatContext *s)
Definition: internal.h:194
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:866
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:772
AVStream::discard
enum AVDiscard discard
Selects which packets can be discarded at will and do not need to be demuxed.
Definition: avformat.h:912
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:339
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:1692
AVFMT_TBCF_DECODER
@ AVFMT_TBCF_DECODER
Definition: avformat.h:2824
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:719
AVFMT_TBCF_AUTO
@ AVFMT_TBCF_AUTO
Definition: avformat.h:2823
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:1183
AVPacketSideData
This structure stores auxiliary information for decoding, presenting, or otherwise processing the cod...
Definition: packet.h:342
AVPacket::data
uint8_t * data
Definition: packet.h:491
AVStream::avg_frame_rate
AVRational avg_frame_rate
Average framerate.
Definition: avformat.h:930
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:166
AVFormatContext::programs
AVProgram ** programs
Definition: avformat.h:1283
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:425
AVChannelLayout::nb_channels
int nb_channels
Number of channels in this layout.
Definition: channel_layout.h:317
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:417
AVCodecContext::framerate
AVRational framerate
Definition: avcodec.h:1803
AVPacketSideData::size
size_t size
Definition: packet.h:344
ff_remove_stream
void ff_remove_stream(AVFormatContext *s, AVStream *st)
Remove a stream from its AVFormatContext and free it.
Definition: avformat.c:83
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:761
bsf.h
ffstream
static av_always_inline FFStream * ffstream(AVStream *st)
Definition: internal.h:420
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:227
samplefmt.h
FFStream::avctx
struct AVCodecContext * avctx
The codec context used by avformat_find_stream_info, the parser, etc.
Definition: internal.h:226
AVDISCARD_NONE
@ AVDISCARD_NONE
discard nothing
Definition: defs.h:213
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:281
AVStream::duration
int64_t duration
Decoding: duration of the stream, in stream time base.
Definition: avformat.h:900
AV_PTS_WRAP_IGNORE
#define AV_PTS_WRAP_IGNORE
Options for behavior on timestamp wrap detection.
Definition: avformat.h:830
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:939
FFStream::extract_extradata
struct FFStream::@300 extract_extradata
FFStream::priv_pts
FFFrac * priv_pts
Definition: internal.h:247
avassert.h
AVFormatContext::format_whitelist
char * format_whitelist
',' separated list of allowed demuxers.
Definition: avformat.h:1567
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:1040
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:131
AVFormatContext::nb_programs
unsigned int nb_programs
Definition: avformat.h:1282
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:121
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:343
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:632
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:397
ffofmt
static const FFOutputFormat * ffofmt(const AVOutputFormat *fmt)
Definition: mux.h:138
nb_streams
static int nb_streams
Definition: ffprobe.c:328
codec_id
enum AVCodecID codec_id
Definition: vaapi_decode.c:389
key
const char * key
Definition: hwcontext_opencl.c:174
AVMEDIA_TYPE_DATA
@ AVMEDIA_TYPE_DATA
Opaque data information usually continuous.
Definition: avutil.h:203
frame
static AVFrame * frame
Definition: demux_decode.c:54
FFFormatContext
Definition: internal.h:70
AVDISCARD_ALL
@ AVDISCARD_ALL
discard all
Definition: defs.h:219
AVFormatContext
Format I/O context.
Definition: avformat.h:1115
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:864
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:880
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:312
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:66
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:1652
ff_copy_whiteblacklists
int ff_copy_whiteblacklists(AVFormatContext *dst, const AVFormatContext *src)
Copies the whilelists from one context to the other.
Definition: avformat.c:805
AVPacketSideData::type
enum AVPacketSideDataType type
Definition: packet.h:345
FFOutputFormat::deinit
void(* deinit)(AVFormatContext *)
Deinitialize format.
Definition: mux.h:125
AVProgram::stream_index
unsigned int * stream_index
Definition: avformat.h:1043
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:465
AVStream::metadata
AVDictionary * metadata
Definition: avformat.h:921
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:206
index
int index
Definition: gxfenc.c:89
AVCodecParameters::sample_rate
int sample_rate
Audio only.
Definition: codec_par.h:171
AVStream::nb_frames
int64_t nb_frames
number of frames in this stream if known or 0
Definition: avformat.h:902
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:1171
FFFormatContext::id3v2_meta
AVDictionary * id3v2_meta
ID3v2 tag useful for MP3 demuxing.
Definition: internal.h:176
AVOutputFormat::flags
int flags
can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER, AVFMT_GLOBALHEADER, AVFMT_NOTIMESTAMPS,...
Definition: avformat.h:530
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:563
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:588
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:199
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:1817
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:984
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:755
ff_format_io_close
int ff_format_io_close(AVFormatContext *s, AVIOContext **pb)
Definition: avformat.c:843
AVTimebaseSource
AVTimebaseSource
Definition: avformat.h:2822
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:919
frame.h
AV_DISPOSITION_HEARING_IMPAIRED
#define AV_DISPOSITION_HEARING_IMPAIRED
The stream is intended for hearing impaired audiences.
Definition: avformat.h:756
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:375
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:825
AV_CODEC_ID_NONE
@ AV_CODEC_ID_NONE
Definition: codec_id.h:50
AVOutputFormat
Definition: avformat.h:510
i
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:255
AVCodecParameters::height
int height
Definition: codec_par.h:122
AVFormatContext::codec_whitelist
char * codec_whitelist
',' separated list of allowed decoders.
Definition: avformat.h:1559
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:354
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:1039
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:910
AV_DISPOSITION_VISUAL_IMPAIRED
#define AV_DISPOSITION_VISUAL_IMPAIRED
The stream is intended for visually impaired audiences.
Definition: avformat.h:760
tag
uint32_t tag
Definition: movenc.c:1737
AVStream::id
int id
Format-specific stream ID.
Definition: avformat.h:853
ret
ret
Definition: filter_design.txt:187
AVStream
Stream structure.
Definition: avformat.h:841
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:655
pixfmt.h
avformat.h
AVFrame::sample_aspect_ratio
AVRational sample_aspect_ratio
Sample aspect ratio for the video frame, 0/1 if unknown/unspecified.
Definition: frame.h:447
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:441
AVStream::index
int index
stream index in AVFormatContext
Definition: avformat.h:847
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:677
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:65
ff_flush_packet_queue
void ff_flush_packet_queue(AVFormatContext *s)
Definition: avformat.c:92
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:102
AVStream::r_frame_rate
AVRational r_frame_rate
Real base framerate of the stream.
Definition: avformat.h:1007
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:579
AVPacketSideDataType
AVPacketSideDataType
Definition: packet.h:41
FFStream::info
struct FFStreamInfo * info
Stream information used internally by avformat_find_stream_info()
Definition: internal.h:252
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:254
FF_DISABLE_DEPRECATION_WARNINGS
#define FF_DISABLE_DEPRECATION_WARNINGS
Definition: internal.h:72
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:79
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:466
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: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:263
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
d
d
Definition: ffmpeg_filter.c:368
flags
#define flags(name, subs,...)
Definition: cbs_av1.c:474
AVCodecParameters::bit_rate
int64_t bit_rate
The average bitrate of the encoded data (in bits per second).
Definition: codec_par.h:84
av_log
#define av_log(a,...)
Definition: tableprint_vlc.h:27
FFStream::parser
struct AVCodecParserContext * parser
Definition: internal.h:392
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:890
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:1016
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:836
avcodec_parameters_copy
int avcodec_parameters_copy(AVCodecParameters *dst, const AVCodecParameters *src)
Copy the contents of src to dst.
Definition: codec_par.c:106
av_parser_close
void av_parser_close(AVCodecParserContext *s)
Definition: parser.c:193
mux.h