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