FFmpeg
demux.c
Go to the documentation of this file.
1 /*
2  * Core demuxing component
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 <stdint.h>
23 
24 #include "config_components.h"
25 
26 #include "libavutil/avassert.h"
27 #include "libavutil/avstring.h"
28 #include "libavutil/dict.h"
29 #include "libavutil/internal.h"
30 #include "libavutil/intreadwrite.h"
31 #include "libavutil/mathematics.h"
32 #include "libavutil/mem.h"
33 #include "libavutil/opt.h"
34 #include "libavutil/pixfmt.h"
35 #include "libavutil/time.h"
36 #include "libavutil/timestamp.h"
37 
38 #include "libavcodec/avcodec.h"
39 #include "libavcodec/bsf.h"
40 #include "libavcodec/codec_desc.h"
41 #include "libavcodec/internal.h"
43 #include "libavcodec/raw.h"
44 
45 #include "avformat.h"
46 #include "avformat_internal.h"
47 #include "avio_internal.h"
48 #include "demux.h"
49 #include "id3v2.h"
50 #include "internal.h"
51 #include "url.h"
52 
53 static int64_t wrap_timestamp(const AVStream *st, int64_t timestamp)
54 {
55  const FFStream *const sti = cffstream(st);
56  if (sti->pts_wrap_behavior != AV_PTS_WRAP_IGNORE && st->pts_wrap_bits < 64 &&
57  sti->pts_wrap_reference != AV_NOPTS_VALUE && timestamp != AV_NOPTS_VALUE) {
59  timestamp < sti->pts_wrap_reference)
60  return timestamp + (1ULL << st->pts_wrap_bits);
61  else if (sti->pts_wrap_behavior == AV_PTS_WRAP_SUB_OFFSET &&
62  timestamp >= sti->pts_wrap_reference)
63  return timestamp - (1ULL << st->pts_wrap_bits);
64  }
65  return timestamp;
66 }
67 
69 {
70  return wrap_timestamp(st, timestamp);
71 }
72 
74 {
75  const AVCodec *codec;
76 
77 #if CONFIG_H264_DECODER
78  /* Other parts of the code assume this decoder to be used for h264,
79  * so force it if possible. */
81  return avcodec_find_decoder_by_name("h264");
82 #endif
83 
84  codec = ff_find_decoder(s, st, codec_id);
85  if (!codec)
86  return NULL;
87 
89  const AVCodec *probe_codec = NULL;
90  void *iter = NULL;
91  while ((probe_codec = av_codec_iterate(&iter))) {
92  if (probe_codec->id == codec->id &&
95  return probe_codec;
96  }
97  }
98  }
99 
100  return codec;
101 }
102 
104  AVProbeData *pd)
105 {
106  static const struct {
107  const char *name;
108  enum AVCodecID id;
109  enum AVMediaType type;
110  } fmt_id_type[] = {
123  { "mjpeg_2000", AV_CODEC_ID_JPEG2000, AVMEDIA_TYPE_VIDEO },
125  { "mpegvideo", AV_CODEC_ID_MPEG2VIDEO, AVMEDIA_TYPE_VIDEO },
126  { "truehd", AV_CODEC_ID_TRUEHD, AVMEDIA_TYPE_AUDIO },
129  { 0 }
130  };
131  int score;
132  const AVInputFormat *fmt = av_probe_input_format3(pd, 1, &score);
133  FFStream *const sti = ffstream(st);
134 
135  if (fmt) {
137  "Probe with size=%d, packets=%d detected %s with score=%d\n",
138  pd->buf_size, s->max_probe_packets - sti->probe_packets,
139  fmt->name, score);
140  for (int i = 0; fmt_id_type[i].name; i++) {
141  if (!strcmp(fmt->name, fmt_id_type[i].name)) {
142  if (fmt_id_type[i].type != AVMEDIA_TYPE_AUDIO &&
143  st->codecpar->sample_rate)
144  continue;
145  if (sti->request_probe > score &&
146  st->codecpar->codec_id != fmt_id_type[i].id)
147  continue;
148  st->codecpar->codec_id = fmt_id_type[i].id;
149  st->codecpar->codec_type = fmt_id_type[i].type;
150  sti->need_context_update = 1;
151  return score;
152  }
153  }
154  }
155  return 0;
156 }
157 
158 static int init_input(AVFormatContext *s, const char *filename,
160 {
161  int ret;
162  AVProbeData pd = { filename, NULL, 0 };
163  int score = AVPROBE_SCORE_RETRY;
164 
165  if (s->pb) {
166  s->flags |= AVFMT_FLAG_CUSTOM_IO;
167  if (!s->iformat)
168  return av_probe_input_buffer2(s->pb, &s->iformat, filename,
169  s, 0, s->format_probesize);
170  else if (s->iformat->flags & AVFMT_NOFILE)
171  av_log(s, AV_LOG_WARNING, "Custom AVIOContext makes no sense and "
172  "will be ignored with AVFMT_NOFILE format.\n");
173  return 0;
174  }
175 
176  if ((s->iformat && s->iformat->flags & AVFMT_NOFILE) ||
177  (!s->iformat && (s->iformat = av_probe_input_format2(&pd, 0, &score))))
178  return score;
179 
180  if ((ret = s->io_open(s, &s->pb, filename, AVIO_FLAG_READ | s->avio_flags, options)) < 0)
181  return ret;
182 
183  if (s->iformat)
184  return 0;
185  return av_probe_input_buffer2(s->pb, &s->iformat, filename,
186  s, 0, s->format_probesize);
187 }
188 
190 {
191  int ret;
192  for (unsigned i = 0; i < s->nb_streams; i++) {
193  AVStream *const st = s->streams[i];
194  FFStream *const sti = ffstream(st);
195 
196  if (!sti->need_context_update)
197  continue;
198 
199  /* close parser, because it depends on the codec */
200  if (sti->parser && sti->avctx->codec_id != st->codecpar->codec_id) {
201  av_parser_close(sti->parser);
202  sti->parser = NULL;
203  }
204 
205  /* update internal codec context, for the parser */
207  if (ret < 0)
208  return ret;
209 
211 
212  sti->need_context_update = 0;
213  }
214  return 0;
215 }
216 
217 int avformat_open_input(AVFormatContext **ps, const char *filename,
218  const AVInputFormat *fmt, AVDictionary **options)
219 {
221  AVFormatContext *s = *ps;
222  FFFormatContext *si;
223  AVDictionary *tmp = NULL;
224  ID3v2ExtraMeta *id3v2_extra_meta = NULL;
225  int ret = 0;
226 
227  if (!s && !(s = avformat_alloc_context()))
228  return AVERROR(ENOMEM);
229  fci = ff_fc_internal(s);
230  si = &fci->fc;
231  if (!s->av_class) {
232  av_log(NULL, AV_LOG_ERROR, "Input context has not been properly allocated by avformat_alloc_context() and is not NULL either\n");
233  return AVERROR(EINVAL);
234  }
235  if (fmt)
236  s->iformat = fmt;
237 
238  if (options)
239  av_dict_copy(&tmp, *options, 0);
240 
241  if (s->pb) // must be before any goto fail
242  s->flags |= AVFMT_FLAG_CUSTOM_IO;
243 
244  if ((ret = av_opt_set_dict(s, &tmp)) < 0)
245  goto fail;
246 
247  if (!(s->url = av_strdup(filename ? filename : ""))) {
248  ret = AVERROR(ENOMEM);
249  goto fail;
250  }
251 
252  if ((ret = init_input(s, filename, &tmp)) < 0)
253  goto fail;
254  s->probe_score = ret;
255 
256  if (!s->protocol_whitelist && s->pb && s->pb->protocol_whitelist) {
257  s->protocol_whitelist = av_strdup(s->pb->protocol_whitelist);
258  if (!s->protocol_whitelist) {
259  ret = AVERROR(ENOMEM);
260  goto fail;
261  }
262  }
263 
264  if (!s->protocol_blacklist && s->pb && s->pb->protocol_blacklist) {
265  s->protocol_blacklist = av_strdup(s->pb->protocol_blacklist);
266  if (!s->protocol_blacklist) {
267  ret = AVERROR(ENOMEM);
268  goto fail;
269  }
270  }
271 
272  if (s->format_whitelist && av_match_list(s->iformat->name, s->format_whitelist, ',') <= 0) {
273  av_log(s, AV_LOG_ERROR, "Format not on whitelist \'%s\'\n", s->format_whitelist);
274  ret = AVERROR(EINVAL);
275  goto fail;
276  }
277 
278  avio_skip(s->pb, s->skip_initial_bytes);
279 
280  /* Check filename in case an image number is expected. */
281  if (s->iformat->flags & AVFMT_NEEDNUMBER) {
282  if (!av_filename_number_test(filename)) {
283  ret = AVERROR(EINVAL);
284  goto fail;
285  }
286  }
287 
288  s->duration = s->start_time = AV_NOPTS_VALUE;
289 
290  /* Allocate private data. */
291  if (ffifmt(s->iformat)->priv_data_size > 0) {
292  if (!(s->priv_data = av_mallocz(ffifmt(s->iformat)->priv_data_size))) {
293  ret = AVERROR(ENOMEM);
294  goto fail;
295  }
296  if (s->iformat->priv_class) {
297  *(const AVClass **) s->priv_data = s->iformat->priv_class;
298  av_opt_set_defaults(s->priv_data);
299  if ((ret = av_opt_set_dict(s->priv_data, &tmp)) < 0)
300  goto fail;
301  }
302  }
303 
304  /* e.g. AVFMT_NOFILE formats will not have an AVIOContext */
305  if (s->pb)
306  ff_id3v2_read_dict(s->pb, &si->id3v2_meta, ID3v2_DEFAULT_MAGIC, &id3v2_extra_meta);
307 
308  if (ffifmt(s->iformat)->read_header)
309  if ((ret = ffifmt(s->iformat)->read_header(s)) < 0) {
311  goto close;
312  goto fail;
313  }
314 
315  if (!s->metadata) {
316  s->metadata = si->id3v2_meta;
317  si->id3v2_meta = NULL;
318  } else if (si->id3v2_meta) {
319  av_log(s, AV_LOG_WARNING, "Discarding ID3 tags because more suitable tags were found.\n");
320  av_dict_free(&si->id3v2_meta);
321  }
322 
323  if (id3v2_extra_meta) {
324  if (!strcmp(s->iformat->name, "mp3") || !strcmp(s->iformat->name, "aac") ||
325  !strcmp(s->iformat->name, "tta") || !strcmp(s->iformat->name, "wav")) {
326  if ((ret = ff_id3v2_parse_apic(s, id3v2_extra_meta)) < 0)
327  goto close;
328  if ((ret = ff_id3v2_parse_chapters(s, id3v2_extra_meta)) < 0)
329  goto close;
330  if ((ret = ff_id3v2_parse_priv(s, id3v2_extra_meta)) < 0)
331  goto close;
332  } else
333  av_log(s, AV_LOG_DEBUG, "demuxer does not support additional id3 data, skipping\n");
334  ff_id3v2_free_extra_meta(&id3v2_extra_meta);
335  }
336 
338  goto close;
339 
340  if (s->pb && !si->data_offset)
341  si->data_offset = avio_tell(s->pb);
342 
343  fci->raw_packet_buffer_size = 0;
344 
346 
347  if (options) {
349  *options = tmp;
350  }
351  *ps = s;
352  return 0;
353 
354 close:
355  if (ffifmt(s->iformat)->read_close)
356  ffifmt(s->iformat)->read_close(s);
357 fail:
358  ff_id3v2_free_extra_meta(&id3v2_extra_meta);
359  av_dict_free(&tmp);
360  if (s->pb && !(s->flags & AVFMT_FLAG_CUSTOM_IO))
361  avio_closep(&s->pb);
363  *ps = NULL;
364  return ret;
365 }
366 
368 {
370  AVIOContext *pb;
371 
372  if (!ps || !*ps)
373  return;
374 
375  s = *ps;
376  pb = s->pb;
377 
378  if ((s->iformat && strcmp(s->iformat->name, "image2") && s->iformat->flags & AVFMT_NOFILE) ||
379  (s->flags & AVFMT_FLAG_CUSTOM_IO))
380  pb = NULL;
381 
382  if (s->iformat)
383  if (ffifmt(s->iformat)->read_close)
384  ffifmt(s->iformat)->read_close(s);
385 
387 
388  *ps = NULL;
389 
390  avio_close(pb);
391 }
392 
394 {
395  switch (st->codecpar->codec_type) {
396  case AVMEDIA_TYPE_VIDEO:
397  if (s->video_codec_id)
398  st->codecpar->codec_id = s->video_codec_id;
399  break;
400  case AVMEDIA_TYPE_AUDIO:
401  if (s->audio_codec_id)
402  st->codecpar->codec_id = s->audio_codec_id;
403  break;
405  if (s->subtitle_codec_id)
406  st->codecpar->codec_id = s->subtitle_codec_id;
407  break;
408  case AVMEDIA_TYPE_DATA:
409  if (s->data_codec_id)
410  st->codecpar->codec_id = s->data_codec_id;
411  break;
412  }
413 }
414 
416 {
417  FormatContextInternal *const fci = ff_fc_internal(s);
418  FFStream *const sti = ffstream(st);
419 
420  if (sti->request_probe > 0) {
421  AVProbeData *const pd = &sti->probe_data;
422  int end;
423  av_log(s, AV_LOG_DEBUG, "probing stream %d pp:%d\n", st->index, sti->probe_packets);
424  --sti->probe_packets;
425 
426  if (pkt) {
427  uint8_t *new_buf = av_realloc(pd->buf, pd->buf_size+pkt->size+AVPROBE_PADDING_SIZE);
428  if (!new_buf) {
430  "Failed to reallocate probe buffer for stream %d\n",
431  st->index);
432  goto no_packet;
433  }
434  pd->buf = new_buf;
435  memcpy(pd->buf + pd->buf_size, pkt->data, pkt->size);
436  pd->buf_size += pkt->size;
437  memset(pd->buf + pd->buf_size, 0, AVPROBE_PADDING_SIZE);
438  } else {
439 no_packet:
440  sti->probe_packets = 0;
441  if (!pd->buf_size) {
443  "nothing to probe for stream %d\n", st->index);
444  }
445  }
446 
447  end = fci->raw_packet_buffer_size >= s->probesize ||
448  sti->probe_packets <= 0;
449 
450  if (end || av_log2(pd->buf_size) != av_log2(pd->buf_size - pkt->size)) {
451  int score = set_codec_from_probe_data(s, st, pd);
453  || end) {
454  pd->buf_size = 0;
455  av_freep(&pd->buf);
456  sti->request_probe = -1;
457  if (st->codecpar->codec_id != AV_CODEC_ID_NONE) {
458  av_log(s, AV_LOG_DEBUG, "probed stream %d\n", st->index);
459  } else
460  av_log(s, AV_LOG_WARNING, "probed stream %d failed\n", st->index);
461  }
462  force_codec_ids(s, st);
463  }
464  }
465  return 0;
466 }
467 
468 static int update_wrap_reference(AVFormatContext *s, AVStream *st, int stream_index, AVPacket *pkt)
469 {
470  FFStream *const sti = ffstream(st);
471  int64_t ref = pkt->dts;
472  int pts_wrap_behavior;
473  int64_t pts_wrap_reference;
474  AVProgram *first_program;
475 
476  if (ref == AV_NOPTS_VALUE)
477  ref = pkt->pts;
478  if (sti->pts_wrap_reference != AV_NOPTS_VALUE || st->pts_wrap_bits >= 63 || ref == AV_NOPTS_VALUE || !s->correct_ts_overflow)
479  return 0;
480  ref &= (1LL << st->pts_wrap_bits)-1;
481 
482  // reference time stamp should be 60 s before first time stamp
483  pts_wrap_reference = ref - av_rescale(60, st->time_base.den, st->time_base.num);
484  // if first time stamp is not more than 1/8 and 60s before the wrap point, subtract rather than add wrap offset
485  pts_wrap_behavior = (ref < (1LL << st->pts_wrap_bits) - (1LL << st->pts_wrap_bits-3)) ||
486  (ref < (1LL << st->pts_wrap_bits) - av_rescale(60, st->time_base.den, st->time_base.num)) ?
488 
489  first_program = av_find_program_from_stream(s, NULL, stream_index);
490 
491  if (!first_program) {
492  int default_stream_index = av_find_default_stream_index(s);
493  FFStream *const default_sti = ffstream(s->streams[default_stream_index]);
494  if (default_sti->pts_wrap_reference == AV_NOPTS_VALUE) {
495  for (unsigned i = 0; i < s->nb_streams; i++) {
496  FFStream *const sti = ffstream(s->streams[i]);
498  continue;
499  sti->pts_wrap_reference = pts_wrap_reference;
500  sti->pts_wrap_behavior = pts_wrap_behavior;
501  }
502  } else {
503  sti->pts_wrap_reference = default_sti->pts_wrap_reference;
504  sti->pts_wrap_behavior = default_sti->pts_wrap_behavior;
505  }
506  } else {
507  AVProgram *program = first_program;
508  while (program) {
509  if (program->pts_wrap_reference != AV_NOPTS_VALUE) {
510  pts_wrap_reference = program->pts_wrap_reference;
511  pts_wrap_behavior = program->pts_wrap_behavior;
512  break;
513  }
514  program = av_find_program_from_stream(s, program, stream_index);
515  }
516 
517  // update every program with differing pts_wrap_reference
518  program = first_program;
519  while (program) {
520  if (program->pts_wrap_reference != pts_wrap_reference) {
521  for (unsigned i = 0; i < program->nb_stream_indexes; i++) {
522  FFStream *const sti = ffstream(s->streams[program->stream_index[i]]);
523  sti->pts_wrap_reference = pts_wrap_reference;
524  sti->pts_wrap_behavior = pts_wrap_behavior;
525  }
526 
527  program->pts_wrap_reference = pts_wrap_reference;
528  program->pts_wrap_behavior = pts_wrap_behavior;
529  }
530  program = av_find_program_from_stream(s, program, stream_index);
531  }
532  }
533  return 1;
534 }
535 
537 {
538  FFStream *const sti = ffstream(st);
539 
541  // correct first time stamps to negative values
542  if (!is_relative(sti->first_dts))
543  sti->first_dts = wrap_timestamp(st, sti->first_dts);
544  if (!is_relative(st->start_time))
545  st->start_time = wrap_timestamp(st, st->start_time);
546  if (!is_relative(sti->cur_dts))
547  sti->cur_dts = wrap_timestamp(st, sti->cur_dts);
548  }
549 
550  pkt->dts = wrap_timestamp(st, pkt->dts);
551  pkt->pts = wrap_timestamp(st, pkt->pts);
552 
553  force_codec_ids(s, st);
554 
555  /* TODO: audio: time filter; video: frame reordering (pts != dts) */
556  if (s->use_wallclock_as_timestamps)
558 }
559 
560 /**
561  * Handle a new packet and either return it directly if possible and
562  * allow_passthrough is true or queue the packet (or drop the packet
563  * if corrupt).
564  *
565  * @return < 0 on error, 0 if the packet was passed through,
566  * 1 if it was queued or dropped
567  */
568 static int handle_new_packet(AVFormatContext *s, AVPacket *pkt, int allow_passthrough)
569 {
570  FormatContextInternal *const fci = ff_fc_internal(s);
571  AVStream *st;
572  FFStream *sti;
573  int err;
574 
575  av_assert0(pkt->stream_index < (unsigned)s->nb_streams &&
576  "Invalid stream index.\n");
577 
578  if (pkt->flags & AV_PKT_FLAG_CORRUPT) {
580  "Packet corrupt (stream = %d, dts = %s)%s.\n",
582  s->flags & AVFMT_FLAG_DISCARD_CORRUPT ? ", dropping it" : "");
583  if (s->flags & AVFMT_FLAG_DISCARD_CORRUPT) {
585  return 1;
586  }
587  }
588 
589  st = s->streams[pkt->stream_index];
590  sti = ffstream(st);
591 
592  update_timestamps(s, st, pkt);
593 
594  if (sti->request_probe <= 0 && allow_passthrough && !fci->raw_packet_buffer.head)
595  return 0;
596 
598  if (err < 0) {
600  return err;
601  }
602 
603  pkt = &fci->raw_packet_buffer.tail->pkt;
605 
606  err = probe_codec(s, st, pkt);
607  if (err < 0)
608  return err;
609 
610  return 1;
611 }
612 
614 {
615  int err = handle_new_packet(s, pkt, 0);
616 
617  return err < 0 ? err : 0;
618 }
619 
621 {
622  FormatContextInternal *const fci = ff_fc_internal(s);
623  int err;
624 
625 #if FF_API_INIT_PACKET
627  pkt->data = NULL;
628  pkt->size = 0;
629  av_init_packet(pkt);
631 #else
633 #endif
634 
635  for (;;) {
637 
638  if (pktl) {
639  AVStream *const st = s->streams[pktl->pkt.stream_index];
640  if (fci->raw_packet_buffer_size >= s->probesize)
641  if ((err = probe_codec(s, st, NULL)) < 0)
642  return err;
643  if (ffstream(st)->request_probe <= 0) {
646  return 0;
647  }
648  }
649 
650  err = ffifmt(s->iformat)->read_packet(s, pkt);
651  if (err < 0) {
653 
654  /* Some demuxers return FFERROR_REDO when they consume
655  data and discard it (ignored streams, junk, extradata).
656  We must re-call the demuxer to get the real packet. */
657  if (err == FFERROR_REDO)
658  continue;
659  if (!pktl || err == AVERROR(EAGAIN))
660  return err;
661  for (unsigned i = 0; i < s->nb_streams; i++) {
662  AVStream *const st = s->streams[i];
663  FFStream *const sti = ffstream(st);
664  if (sti->probe_packets || sti->request_probe > 0)
665  if ((err = probe_codec(s, st, NULL)) < 0)
666  return err;
667  av_assert0(sti->request_probe <= 0);
668  }
669  continue;
670  }
671 
673  if (err < 0) {
675  return err;
676  }
677 
678  err = handle_new_packet(s, pkt, 1);
679  if (err <= 0) /* Error or passthrough */
680  return err;
681  }
682 }
683 
684 /**
685  * Return the frame duration in seconds. Return 0 if not available.
686  */
687 static void compute_frame_duration(AVFormatContext *s, int *pnum, int *pden,
689  AVPacket *pkt)
690 {
691  FFStream *const sti = ffstream(st);
692  AVRational codec_framerate = sti->avctx->framerate;
693  int frame_size, sample_rate;
694 
695  *pnum = 0;
696  *pden = 0;
697  switch (st->codecpar->codec_type) {
698  case AVMEDIA_TYPE_VIDEO:
699  if (st->r_frame_rate.num && (!pc || !codec_framerate.num)) {
700  *pnum = st->r_frame_rate.den;
701  *pden = st->r_frame_rate.num;
702  } else if ((s->iformat->flags & AVFMT_NOTIMESTAMPS) &&
703  !codec_framerate.num &&
704  st->avg_frame_rate.num && st->avg_frame_rate.den) {
705  *pnum = st->avg_frame_rate.den;
706  *pden = st->avg_frame_rate.num;
707  } else if (st->time_base.num * 1000LL > st->time_base.den) {
708  *pnum = st->time_base.num;
709  *pden = st->time_base.den;
710  } else if (codec_framerate.den * 1000LL > codec_framerate.num) {
711  int ticks_per_frame = (sti->codec_desc &&
712  (sti->codec_desc->props & AV_CODEC_PROP_FIELDS)) ? 2 : 1;
713  av_reduce(pnum, pden,
714  codec_framerate.den,
715  codec_framerate.num * (int64_t)ticks_per_frame,
716  INT_MAX);
717 
718  if (pc && pc->repeat_pict) {
719  av_reduce(pnum, pden,
720  (*pnum) * (1LL + pc->repeat_pict),
721  (*pden),
722  INT_MAX);
723  }
724  /* If this codec can be interlaced or progressive then we need
725  * a parser to compute duration of a packet. Thus if we have
726  * no parser in such case leave duration undefined. */
727  if (sti->codec_desc &&
728  (sti->codec_desc->props & AV_CODEC_PROP_FIELDS) && !pc)
729  *pnum = *pden = 0;
730  }
731  break;
732  case AVMEDIA_TYPE_AUDIO:
733  if (sti->avctx_inited) {
735  sample_rate = sti->avctx->sample_rate;
736  } else {
738  sample_rate = st->codecpar->sample_rate;
739  }
740  if (frame_size <= 0 || sample_rate <= 0)
741  break;
742  *pnum = frame_size;
743  *pden = sample_rate;
744  break;
745  default:
746  break;
747  }
748 }
749 
751 {
752  FFStream *const sti = ffstream(st);
753  if (st->codecpar->codec_id != AV_CODEC_ID_H264) return 1;
754  if (!sti->info) // if we have left find_stream_info then nb_decoded_frames won't increase anymore for stream copy
755  return 1;
756 #if CONFIG_H264_DECODER
757  if (sti->avctx->has_b_frames &&
759  return 1;
760 #endif
761  if (sti->avctx->has_b_frames < 3)
762  return sti->nb_decoded_frames >= 7;
763  else if (sti->avctx->has_b_frames < 4)
764  return sti->nb_decoded_frames >= 18;
765  else
766  return sti->nb_decoded_frames >= 20;
767 }
768 
770  PacketListEntry *pktl)
771 {
772  FormatContextInternal *const fci = ff_fc_internal(s);
773  FFFormatContext *const si = &fci->fc;
774  if (pktl->next)
775  return pktl->next;
776  if (pktl == si->packet_buffer.tail)
777  return fci->parse_queue.head;
778  return NULL;
779 }
780 
782 {
783  FFStream *const sti = ffstream(st);
784  int onein_oneout = st->codecpar->codec_id != AV_CODEC_ID_H264 &&
787 
788  if (!onein_oneout) {
789  int delay = sti->avctx->has_b_frames;
790 
791  if (dts == AV_NOPTS_VALUE) {
792  int64_t best_score = INT64_MAX;
793  for (int i = 0; i < delay; i++) {
794  if (sti->pts_reorder_error_count[i]) {
795  int64_t score = sti->pts_reorder_error[i] / sti->pts_reorder_error_count[i];
796  if (score < best_score) {
797  best_score = score;
798  dts = pts_buffer[i];
799  }
800  }
801  }
802  } else {
803  for (int i = 0; i < delay; i++) {
804  if (pts_buffer[i] != AV_NOPTS_VALUE) {
805  int64_t diff = FFABS(pts_buffer[i] - dts)
806  + (uint64_t)sti->pts_reorder_error[i];
807  diff = FFMAX(diff, sti->pts_reorder_error[i]);
808  sti->pts_reorder_error[i] = diff;
809  sti->pts_reorder_error_count[i]++;
810  if (sti->pts_reorder_error_count[i] > 250) {
811  sti->pts_reorder_error[i] >>= 1;
812  sti->pts_reorder_error_count[i] >>= 1;
813  }
814  }
815  }
816  }
817  }
818 
819  if (dts == AV_NOPTS_VALUE)
820  dts = pts_buffer[0];
821 
822  return dts;
823 }
824 
825 /**
826  * Updates the dts of packets of a stream in pkt_buffer, by re-ordering the pts
827  * of the packets in a window.
828  */
829 static void update_dts_from_pts(AVFormatContext *s, int stream_index,
830  PacketListEntry *pkt_buffer)
831 {
832  AVStream *const st = s->streams[stream_index];
833  int delay = ffstream(st)->avctx->has_b_frames;
834 
835  int64_t pts_buffer[MAX_REORDER_DELAY+1];
836 
837  for (int i = 0; i < MAX_REORDER_DELAY + 1; i++)
838  pts_buffer[i] = AV_NOPTS_VALUE;
839 
840  for (; pkt_buffer; pkt_buffer = get_next_pkt(s, st, pkt_buffer)) {
841  if (pkt_buffer->pkt.stream_index != stream_index)
842  continue;
843 
844  if (pkt_buffer->pkt.pts != AV_NOPTS_VALUE && delay <= MAX_REORDER_DELAY) {
845  pts_buffer[0] = pkt_buffer->pkt.pts;
846  for (int i = 0; i < delay && pts_buffer[i] > pts_buffer[i + 1]; i++)
847  FFSWAP(int64_t, pts_buffer[i], pts_buffer[i + 1]);
848 
849  pkt_buffer->pkt.dts = select_from_pts_buffer(st, pts_buffer, pkt_buffer->pkt.dts);
850  }
851  }
852 }
853 
854 static void update_initial_timestamps(AVFormatContext *s, int stream_index,
855  int64_t dts, int64_t pts, AVPacket *pkt)
856 {
857  FormatContextInternal *const fci = ff_fc_internal(s);
858  FFFormatContext *const si = &fci->fc;
859  AVStream *const st = s->streams[stream_index];
860  FFStream *const sti = ffstream(st);
862 
863  uint64_t shift;
864 
865  if (sti->first_dts != AV_NOPTS_VALUE ||
866  dts == AV_NOPTS_VALUE ||
867  sti->cur_dts == AV_NOPTS_VALUE ||
868  sti->cur_dts < INT_MIN + RELATIVE_TS_BASE ||
869  dts < INT_MIN + (sti->cur_dts - RELATIVE_TS_BASE) ||
870  is_relative(dts))
871  return;
872 
873  sti->first_dts = dts - (sti->cur_dts - RELATIVE_TS_BASE);
874  sti->cur_dts = dts;
875  shift = (uint64_t)sti->first_dts - RELATIVE_TS_BASE;
876 
877  if (is_relative(pts))
878  pts += shift;
879 
880  for (PacketListEntry *pktl_it = pktl; pktl_it; pktl_it = get_next_pkt(s, st, pktl_it)) {
881  if (pktl_it->pkt.stream_index != stream_index)
882  continue;
883  if (is_relative(pktl_it->pkt.pts))
884  pktl_it->pkt.pts += shift;
885 
886  if (is_relative(pktl_it->pkt.dts))
887  pktl_it->pkt.dts += shift;
888 
889  if (st->start_time == AV_NOPTS_VALUE && pktl_it->pkt.pts != AV_NOPTS_VALUE) {
890  st->start_time = pktl_it->pkt.pts;
892  st->start_time = av_sat_add64(st->start_time, av_rescale_q(sti->skip_samples, (AVRational){1, st->codecpar->sample_rate}, st->time_base));
893  }
894  }
895 
897  update_dts_from_pts(s, stream_index, pktl);
898 
899  if (st->start_time == AV_NOPTS_VALUE) {
901  st->start_time = pts;
902  }
904  st->start_time = av_sat_add64(st->start_time, av_rescale_q(sti->skip_samples, (AVRational){1, st->codecpar->sample_rate}, st->time_base));
905  }
906 }
907 
909  int stream_index, int64_t duration)
910 {
911  FormatContextInternal *const fci = ff_fc_internal(s);
912  FFFormatContext *const si = &fci->fc;
913  FFStream *const sti = ffstream(st);
915  int64_t cur_dts = RELATIVE_TS_BASE;
916 
917  if (sti->first_dts != AV_NOPTS_VALUE) {
919  return;
921  cur_dts = sti->first_dts;
922  for (; pktl; pktl = get_next_pkt(s, st, pktl)) {
923  if (pktl->pkt.stream_index == stream_index) {
924  if (pktl->pkt.pts != pktl->pkt.dts ||
925  pktl->pkt.dts != AV_NOPTS_VALUE ||
926  pktl->pkt.duration)
927  break;
928  cur_dts -= duration;
929  }
930  }
931  if (pktl && pktl->pkt.dts != sti->first_dts) {
932  av_log(s, AV_LOG_DEBUG, "first_dts %s not matching first dts %s (pts %s, duration %"PRId64") in the queue\n",
933  av_ts2str(sti->first_dts), av_ts2str(pktl->pkt.dts), av_ts2str(pktl->pkt.pts), pktl->pkt.duration);
934  return;
935  }
936  if (!pktl) {
937  av_log(s, AV_LOG_DEBUG, "first_dts %s but no packet with dts in the queue\n", av_ts2str(sti->first_dts));
938  return;
939  }
940  pktl = si->packet_buffer.head ? si->packet_buffer.head : fci->parse_queue.head;
941  sti->first_dts = cur_dts;
942  } else if (sti->cur_dts != RELATIVE_TS_BASE)
943  return;
944 
945  for (; pktl; pktl = get_next_pkt(s, st, pktl)) {
946  if (pktl->pkt.stream_index != stream_index)
947  continue;
948  if ((pktl->pkt.pts == pktl->pkt.dts ||
949  pktl->pkt.pts == AV_NOPTS_VALUE) &&
950  (pktl->pkt.dts == AV_NOPTS_VALUE ||
951  pktl->pkt.dts == sti->first_dts ||
952  pktl->pkt.dts == RELATIVE_TS_BASE) &&
953  !pktl->pkt.duration &&
954  av_sat_add64(cur_dts, duration) == cur_dts + (uint64_t)duration
955  ) {
956  pktl->pkt.dts = cur_dts;
957  if (!sti->avctx->has_b_frames)
958  pktl->pkt.pts = cur_dts;
959  pktl->pkt.duration = duration;
960  } else
961  break;
962  cur_dts = pktl->pkt.dts + pktl->pkt.duration;
963  }
964  if (!pktl)
965  sti->cur_dts = cur_dts;
966 }
967 
970  int64_t next_dts, int64_t next_pts)
971 {
972  FormatContextInternal *const fci = ff_fc_internal(s);
973  FFFormatContext *const si = &fci->fc;
974  FFStream *const sti = ffstream(st);
975  int num, den, presentation_delayed, delay;
976  int64_t offset;
978  int onein_oneout = st->codecpar->codec_id != AV_CODEC_ID_H264 &&
981 
982  if (s->flags & AVFMT_FLAG_NOFILLIN)
983  return;
984 
986  if (pkt->dts == pkt->pts && sti->last_dts_for_order_check != AV_NOPTS_VALUE) {
987  if (sti->last_dts_for_order_check <= pkt->dts) {
988  sti->dts_ordered++;
989  } else {
991  "DTS %"PRIi64" < %"PRIi64" out of order\n",
992  pkt->dts,
994  sti->dts_misordered++;
995  }
996  if (sti->dts_ordered + sti->dts_misordered > 250) {
997  sti->dts_ordered >>= 1;
998  sti->dts_misordered >>= 1;
999  }
1000  }
1001 
1003  if (sti->dts_ordered < 8 * sti->dts_misordered && pkt->dts == pkt->pts)
1004  pkt->dts = AV_NOPTS_VALUE;
1005  }
1006 
1007  if ((s->flags & AVFMT_FLAG_IGNDTS) && pkt->pts != AV_NOPTS_VALUE)
1008  pkt->dts = AV_NOPTS_VALUE;
1009 
1010  if (pc && pc->pict_type == AV_PICTURE_TYPE_B
1011  && !sti->avctx->has_b_frames)
1012  //FIXME Set low_delay = 0 when has_b_frames = 1
1013  sti->avctx->has_b_frames = 1;
1014 
1015  /* do we have a video B-frame ? */
1016  delay = sti->avctx->has_b_frames;
1017  presentation_delayed = 0;
1018 
1019  /* XXX: need has_b_frame, but cannot get it if the codec is
1020  * not initialized */
1021  if (delay &&
1022  pc && pc->pict_type != AV_PICTURE_TYPE_B)
1023  presentation_delayed = 1;
1024 
1025  if (pkt->pts != AV_NOPTS_VALUE && pkt->dts != AV_NOPTS_VALUE &&
1026  st->pts_wrap_bits < 63 && pkt->dts > INT64_MIN + (1LL << st->pts_wrap_bits) &&
1027  pkt->dts - (1LL << (st->pts_wrap_bits - 1)) > pkt->pts) {
1028  if (is_relative(sti->cur_dts) || pkt->dts - (1LL<<(st->pts_wrap_bits - 1)) > sti->cur_dts) {
1029  pkt->dts -= 1LL << st->pts_wrap_bits;
1030  } else
1031  pkt->pts += 1LL << st->pts_wrap_bits;
1032  }
1033 
1034  /* Some MPEG-2 in MPEG-PS lack dts (issue #171 / input_file.mpg).
1035  * We take the conservative approach and discard both.
1036  * Note: If this is misbehaving for an H.264 file, then possibly
1037  * presentation_delayed is not set correctly. */
1038  if (delay == 1 && pkt->dts == pkt->pts &&
1039  pkt->dts != AV_NOPTS_VALUE && presentation_delayed) {
1040  av_log(s, AV_LOG_DEBUG, "invalid dts/pts combination %"PRIi64"\n", pkt->dts);
1041  if ( strcmp(s->iformat->name, "mov,mp4,m4a,3gp,3g2,mj2")
1042  && strcmp(s->iformat->name, "flv")) // otherwise we discard correct timestamps for vc1-wmapro.ism
1043  pkt->dts = AV_NOPTS_VALUE;
1044  }
1045 
1047  if (pkt->duration <= 0) {
1048  compute_frame_duration(s, &num, &den, st, pc, pkt);
1049  if (den && num) {
1050  duration = (AVRational) {num, den};
1052  num * (int64_t) st->time_base.den,
1053  den * (int64_t) st->time_base.num,
1054  AV_ROUND_DOWN);
1055  }
1056  }
1057 
1058  if (pkt->duration > 0 && (si->packet_buffer.head || fci->parse_queue.head))
1060 
1061  /* Correct timestamps with byte offset if demuxers only have timestamps
1062  * on packet boundaries */
1063  if (pc && sti->need_parsing == AVSTREAM_PARSE_TIMESTAMPS && pkt->size) {
1064  /* this will estimate bitrate based on this frame's duration and size */
1066  if (pkt->pts != AV_NOPTS_VALUE)
1067  pkt->pts += offset;
1068  if (pkt->dts != AV_NOPTS_VALUE)
1069  pkt->dts += offset;
1070  }
1071 
1072  /* This may be redundant, but it should not hurt. */
1073  if (pkt->dts != AV_NOPTS_VALUE &&
1074  pkt->pts != AV_NOPTS_VALUE &&
1075  pkt->pts > pkt->dts)
1076  presentation_delayed = 1;
1077 
1078  if (s->debug & FF_FDEBUG_TS)
1080  "IN delayed:%d pts:%s, dts:%s cur_dts:%s st:%d pc:%p duration:%"PRId64" delay:%d onein_oneout:%d\n",
1081  presentation_delayed, av_ts2str(pkt->pts), av_ts2str(pkt->dts), av_ts2str(sti->cur_dts),
1082  pkt->stream_index, pc, pkt->duration, delay, onein_oneout);
1083 
1084  /* Interpolate PTS and DTS if they are not present. We skip H264
1085  * currently because delay and has_b_frames are not reliably set. */
1086  if ((delay == 0 || (delay == 1 && pc)) &&
1087  onein_oneout) {
1088  if (presentation_delayed) {
1089  /* DTS = decompression timestamp */
1090  /* PTS = presentation timestamp */
1091  if (pkt->dts == AV_NOPTS_VALUE)
1092  pkt->dts = sti->last_IP_pts;
1094  if (pkt->dts == AV_NOPTS_VALUE)
1095  pkt->dts = sti->cur_dts;
1096 
1097  /* This is tricky: the dts must be incremented by the duration
1098  * of the frame we are displaying, i.e. the last I- or P-frame. */
1099  if (sti->last_IP_duration == 0 && (uint64_t)pkt->duration <= INT32_MAX)
1100  sti->last_IP_duration = pkt->duration;
1101  if (pkt->dts != AV_NOPTS_VALUE)
1102  sti->cur_dts = av_sat_add64(pkt->dts, sti->last_IP_duration);
1103  if (pkt->dts != AV_NOPTS_VALUE &&
1104  pkt->pts == AV_NOPTS_VALUE &&
1105  sti->last_IP_duration > 0 &&
1106  ((uint64_t)sti->cur_dts - (uint64_t)next_dts + 1) <= 2 &&
1107  next_dts != next_pts &&
1108  next_pts != AV_NOPTS_VALUE)
1109  pkt->pts = next_dts;
1110 
1111  if ((uint64_t)pkt->duration <= INT32_MAX)
1112  sti->last_IP_duration = pkt->duration;
1113  sti->last_IP_pts = pkt->pts;
1114  /* Cannot compute PTS if not present (we can compute it only
1115  * by knowing the future. */
1116  } else if (pkt->pts != AV_NOPTS_VALUE ||
1117  pkt->dts != AV_NOPTS_VALUE ||
1118  pkt->duration > 0 ) {
1119 
1120  /* presentation is not delayed : PTS and DTS are the same */
1121  if (pkt->pts == AV_NOPTS_VALUE)
1122  pkt->pts = pkt->dts;
1124  pkt->pts, pkt);
1125  if (pkt->pts == AV_NOPTS_VALUE)
1126  pkt->pts = sti->cur_dts;
1127  pkt->dts = pkt->pts;
1128  if (pkt->pts != AV_NOPTS_VALUE && duration.num >= 0)
1129  sti->cur_dts = av_add_stable(st->time_base, pkt->pts, duration, 1);
1130  }
1131  }
1132 
1133  if (pkt->pts != AV_NOPTS_VALUE && delay <= MAX_REORDER_DELAY) {
1134  sti->pts_buffer[0] = pkt->pts;
1135  for (int i = 0; i < delay && sti->pts_buffer[i] > sti->pts_buffer[i + 1]; i++)
1136  FFSWAP(int64_t, sti->pts_buffer[i], sti->pts_buffer[i + 1]);
1137 
1140  }
1141  // We skipped it above so we try here.
1142  if (!onein_oneout)
1143  // This should happen on the first packet
1145  if (pkt->dts > sti->cur_dts)
1146  sti->cur_dts = pkt->dts;
1147 
1148  if (s->debug & FF_FDEBUG_TS)
1149  av_log(s, AV_LOG_DEBUG, "OUTdelayed:%d/%d pts:%s, dts:%s cur_dts:%s st:%d (%d)\n",
1150  presentation_delayed, delay, av_ts2str(pkt->pts), av_ts2str(pkt->dts), av_ts2str(sti->cur_dts), st->index, st->id);
1151 
1152  /* update flags */
1155 }
1156 
1157 /**
1158  * Parse a packet, add all split parts to parse_queue.
1159  *
1160  * @param pkt Packet to parse; must not be NULL.
1161  * @param flush Indicates whether to flush. If set, pkt must be blank.
1162  */
1164  int stream_index, int flush)
1165 {
1166  FormatContextInternal *const fci = ff_fc_internal(s);
1167  FFFormatContext *const si = &fci->fc;
1168  AVPacket *out_pkt = si->parse_pkt;
1169  AVStream *st = s->streams[stream_index];
1170  FFStream *const sti = ffstream(st);
1171  const uint8_t *data = pkt->data;
1172  int size = pkt->size;
1173  int ret = 0, got_output = flush;
1174 
1175  if (!size && !flush && sti->parser->flags & PARSER_FLAG_COMPLETE_FRAMES) {
1176  // preserve 0-size sync packets
1177  compute_pkt_fields(s, st, sti->parser, pkt, pkt->dts, pkt->pts);
1178 
1179  // Theora has valid 0-sized packets that need to be output
1180  if (st->codecpar->codec_id == AV_CODEC_ID_THEORA) {
1182  pkt, NULL, 0);
1183  if (ret < 0)
1184  goto fail;
1185  }
1186  }
1187 
1188  while (size > 0 || (flush && got_output)) {
1189  int64_t next_pts = pkt->pts;
1190  int64_t next_dts = pkt->dts;
1191  int len;
1192 
1193  len = av_parser_parse2(sti->parser, sti->avctx,
1194  &out_pkt->data, &out_pkt->size, data, size,
1195  pkt->pts, pkt->dts, pkt->pos);
1196 
1197  pkt->pts = pkt->dts = AV_NOPTS_VALUE;
1198  pkt->pos = -1;
1199  /* increment read pointer */
1200  av_assert1(data || !len);
1201  data = len ? data + len : data;
1202  size -= len;
1203 
1204  got_output = !!out_pkt->size;
1205 
1206  if (!out_pkt->size)
1207  continue;
1208 
1209  if (pkt->buf && out_pkt->data == pkt->data) {
1210  /* reference pkt->buf only when out_pkt->data is guaranteed to point
1211  * to data in it and not in the parser's internal buffer. */
1212  /* XXX: Ensure this is the case with all parsers when sti->parser->flags
1213  * is PARSER_FLAG_COMPLETE_FRAMES and check for that instead? */
1214  out_pkt->buf = av_buffer_ref(pkt->buf);
1215  if (!out_pkt->buf) {
1216  ret = AVERROR(ENOMEM);
1217  goto fail;
1218  }
1219  } else {
1220  ret = av_packet_make_refcounted(out_pkt);
1221  if (ret < 0)
1222  goto fail;
1223  }
1224 
1225  if (pkt->side_data) {
1226  out_pkt->side_data = pkt->side_data;
1227  out_pkt->side_data_elems = pkt->side_data_elems;
1228  pkt->side_data = NULL;
1229  pkt->side_data_elems = 0;
1230  }
1231 
1232  /* set the duration */
1233  out_pkt->duration = (sti->parser->flags & PARSER_FLAG_COMPLETE_FRAMES) ? pkt->duration : 0;
1235  if (sti->avctx->sample_rate > 0) {
1236  out_pkt->duration =
1238  (AVRational) { 1, sti->avctx->sample_rate },
1239  st->time_base,
1240  AV_ROUND_DOWN);
1241  }
1242  } else if (st->codecpar->codec_id == AV_CODEC_ID_GIF) {
1243  if (st->time_base.num > 0 && st->time_base.den > 0 &&
1244  sti->parser->duration) {
1245  out_pkt->duration = sti->parser->duration;
1246  }
1247  }
1248 
1249  out_pkt->stream_index = st->index;
1250  out_pkt->pts = sti->parser->pts;
1251  out_pkt->dts = sti->parser->dts;
1252  out_pkt->pos = sti->parser->pos;
1254 
1256  out_pkt->pos = sti->parser->frame_offset;
1257 
1258  if (sti->parser->key_frame == 1 ||
1259  (sti->parser->key_frame == -1 &&
1261  out_pkt->flags |= AV_PKT_FLAG_KEY;
1262 
1264  out_pkt->flags |= AV_PKT_FLAG_KEY;
1265 
1266  compute_pkt_fields(s, st, sti->parser, out_pkt, next_dts, next_pts);
1267 
1269  out_pkt, NULL, 0);
1270  if (ret < 0)
1271  goto fail;
1272  }
1273 
1274  /* end of the stream => close and free the parser */
1275  if (flush) {
1276  av_parser_close(sti->parser);
1277  sti->parser = NULL;
1278  }
1279 
1280 fail:
1281  if (ret < 0)
1282  av_packet_unref(out_pkt);
1284  return ret;
1285 }
1286 
1288 {
1289  return av_rescale(ts, st->time_base.num * st->codecpar->sample_rate, st->time_base.den);
1290 }
1291 
1292 static int codec_close(FFStream *sti)
1293 {
1294  AVCodecContext *avctx_new = NULL;
1295  AVCodecParameters *par_tmp = NULL;
1296  int ret;
1297 
1298  avctx_new = avcodec_alloc_context3(sti->avctx->codec);
1299  if (!avctx_new) {
1300  ret = AVERROR(ENOMEM);
1301  goto fail;
1302  }
1303 
1304  par_tmp = avcodec_parameters_alloc();
1305  if (!par_tmp) {
1306  ret = AVERROR(ENOMEM);
1307  goto fail;
1308  }
1309 
1310  ret = avcodec_parameters_from_context(par_tmp, sti->avctx);
1311  if (ret < 0)
1312  goto fail;
1313 
1314  ret = avcodec_parameters_to_context(avctx_new, par_tmp);
1315  if (ret < 0)
1316  goto fail;
1317 
1318  avctx_new->pkt_timebase = sti->avctx->pkt_timebase;
1319 
1320  avcodec_free_context(&sti->avctx);
1321  sti->avctx = avctx_new;
1322 
1323  avctx_new = NULL;
1324  ret = 0;
1325 
1326 fail:
1327  avcodec_free_context(&avctx_new);
1328  avcodec_parameters_free(&par_tmp);
1329 
1330  return ret;
1331 }
1332 
1333 static int extract_extradata(FFFormatContext *si, AVStream *st, const AVPacket *pkt);
1334 
1336 {
1337  FormatContextInternal *const fci = ff_fc_internal(s);
1338  FFFormatContext *const si = &fci->fc;
1339  int ret, got_packet = 0;
1340  AVDictionary *metadata = NULL;
1341 
1342  while (!got_packet && !fci->parse_queue.head) {
1343  AVStream *st;
1344  FFStream *sti;
1345 
1346  /* read next packet */
1347  ret = ff_read_packet(s, pkt);
1348  if (ret < 0) {
1349  if (ret == AVERROR(EAGAIN))
1350  return ret;
1351  /* flush the parsers */
1352  for (unsigned i = 0; i < s->nb_streams; i++) {
1353  AVStream *const st = s->streams[i];
1354  FFStream *const sti = ffstream(st);
1355  if (sti->parser && sti->need_parsing)
1356  parse_packet(s, pkt, st->index, 1);
1357  }
1358  /* all remaining packets are now in parse_queue =>
1359  * really terminate parsing */
1360  break;
1361  }
1362  ret = 0;
1363  st = s->streams[pkt->stream_index];
1364  sti = ffstream(st);
1365 
1367 
1368  /* update context if required */
1369  if (sti->need_context_update) {
1370  if (avcodec_is_open(sti->avctx)) {
1371  av_log(s, AV_LOG_DEBUG, "Demuxer context update while decoder is open, closing and trying to re-open\n");
1372  ret = codec_close(sti);
1373  sti->info->found_decoder = 0;
1374  if (ret < 0)
1375  return ret;
1376  }
1377 
1378  /* close parser, because it depends on the codec */
1379  if (sti->parser && sti->avctx->codec_id != st->codecpar->codec_id) {
1380  av_parser_close(sti->parser);
1381  sti->parser = NULL;
1382  }
1383 
1385  if (ret < 0) {
1387  return ret;
1388  }
1389 
1390  if (!sti->avctx->extradata) {
1391  sti->extract_extradata.inited = 0;
1392 
1393  ret = extract_extradata(si, st, pkt);
1394  if (ret < 0) {
1396  return ret;
1397  }
1398  }
1399 
1401 
1402  sti->need_context_update = 0;
1403  }
1404 
1405  if (pkt->pts != AV_NOPTS_VALUE &&
1406  pkt->dts != AV_NOPTS_VALUE &&
1407  pkt->pts < pkt->dts) {
1409  "Invalid timestamps stream=%d, pts=%s, dts=%s, size=%d\n",
1410  pkt->stream_index,
1411  av_ts2str(pkt->pts),
1412  av_ts2str(pkt->dts),
1413  pkt->size);
1414  }
1415  if (s->debug & FF_FDEBUG_TS)
1417  "ff_read_packet stream=%d, pts=%s, dts=%s, size=%d, duration=%"PRId64", flags=%d\n",
1418  pkt->stream_index,
1419  av_ts2str(pkt->pts),
1420  av_ts2str(pkt->dts),
1421  pkt->size, pkt->duration, pkt->flags);
1422 
1423  if (sti->need_parsing && !sti->parser && !(s->flags & AVFMT_FLAG_NOPARSE)) {
1424  sti->parser = av_parser_init(st->codecpar->codec_id);
1425  if (!sti->parser) {
1426  av_log(s, AV_LOG_VERBOSE, "parser not found for codec "
1427  "%s, packets or times may be invalid.\n",
1429  /* no parser available: just output the raw packets */
1431  } else if (sti->need_parsing == AVSTREAM_PARSE_HEADERS)
1433  else if (sti->need_parsing == AVSTREAM_PARSE_FULL_ONCE)
1434  sti->parser->flags |= PARSER_FLAG_ONCE;
1435  else if (sti->need_parsing == AVSTREAM_PARSE_FULL_RAW)
1437  }
1438 
1439  if (!sti->need_parsing || !sti->parser) {
1440  /* no parsing needed: we just output the packet as is */
1442  if ((s->iformat->flags & AVFMT_GENERIC_INDEX) &&
1444  ff_reduce_index(s, st->index);
1445  av_add_index_entry(st, pkt->pos, pkt->dts,
1446  0, 0, AVINDEX_KEYFRAME);
1447  }
1448  got_packet = 1;
1449  } else if (st->discard < AVDISCARD_ALL) {
1450  if ((ret = parse_packet(s, pkt, pkt->stream_index, 0)) < 0)
1451  return ret;
1452  st->codecpar->sample_rate = sti->avctx->sample_rate;
1453  st->codecpar->bit_rate = sti->avctx->bit_rate;
1455  if (ret < 0)
1456  return ret;
1457  st->codecpar->codec_id = sti->avctx->codec_id;
1458  } else {
1459  /* free packet */
1461  }
1462  if (pkt->flags & AV_PKT_FLAG_KEY)
1463  sti->skip_to_keyframe = 0;
1464  if (sti->skip_to_keyframe) {
1466  got_packet = 0;
1467  }
1468  }
1469 
1470  if (!got_packet && fci->parse_queue.head)
1472 
1473  if (ret >= 0) {
1474  AVStream *const st = s->streams[pkt->stream_index];
1475  FFStream *const sti = ffstream(st);
1476  int discard_padding = 0;
1477  if (sti->first_discard_sample && pkt->pts != AV_NOPTS_VALUE) {
1481  int64_t end_sample = sample + duration;
1482  if (duration > 0 && end_sample >= sti->first_discard_sample &&
1483  sample < sti->last_discard_sample)
1484  discard_padding = FFMIN(end_sample - sti->first_discard_sample, duration);
1485  }
1486  if (sti->start_skip_samples && (pkt->pts == 0 || pkt->pts == RELATIVE_TS_BASE))
1487  sti->skip_samples = sti->start_skip_samples;
1488  sti->skip_samples = FFMAX(0, sti->skip_samples);
1489  if (sti->skip_samples || discard_padding) {
1491  if (p) {
1492  AV_WL32(p, sti->skip_samples);
1493  AV_WL32(p + 4, discard_padding);
1494  av_log(s, AV_LOG_DEBUG, "demuxer injecting skip %u / discard %u\n",
1495  (unsigned)sti->skip_samples, (unsigned)discard_padding);
1496  }
1497  sti->skip_samples = 0;
1498  }
1499  }
1500 
1501  if (!fci->metafree) {
1502  int metaret = av_opt_get_dict_val(s, "metadata", AV_OPT_SEARCH_CHILDREN, &metadata);
1503  if (metadata) {
1504  s->event_flags |= AVFMT_EVENT_FLAG_METADATA_UPDATED;
1505  av_dict_copy(&s->metadata, metadata, 0);
1506  av_dict_free(&metadata);
1508  }
1509  fci->metafree = metaret == AVERROR_OPTION_NOT_FOUND;
1510  }
1511 
1512  if (s->debug & FF_FDEBUG_TS)
1514  "read_frame_internal stream=%d, pts=%s, dts=%s, "
1515  "size=%d, duration=%"PRId64", flags=%d\n",
1516  pkt->stream_index,
1517  av_ts2str(pkt->pts),
1518  av_ts2str(pkt->dts),
1519  pkt->size, pkt->duration, pkt->flags);
1520 
1521  /* A demuxer might have returned EOF because of an IO error, let's
1522  * propagate this back to the user. */
1523  if (ret == AVERROR_EOF && s->pb && s->pb->error < 0 && s->pb->error != AVERROR(EAGAIN))
1524  ret = s->pb->error;
1525 
1526  return ret;
1527 }
1528 
1530 {
1531  FFFormatContext *const si = ffformatcontext(s);
1532  const int genpts = s->flags & AVFMT_FLAG_GENPTS;
1533  int eof = 0;
1534  int ret;
1535  AVStream *st;
1536 
1537  if (!genpts) {
1538  ret = si->packet_buffer.head
1541  if (ret < 0)
1542  return ret;
1543  goto return_packet;
1544  }
1545 
1546  for (;;) {
1547  PacketListEntry *pktl = si->packet_buffer.head;
1548 
1549  if (pktl) {
1550  AVPacket *next_pkt = &pktl->pkt;
1551 
1552  if (next_pkt->dts != AV_NOPTS_VALUE) {
1553  int wrap_bits = s->streams[next_pkt->stream_index]->pts_wrap_bits;
1554  // last dts seen for this stream. if any of packets following
1555  // current one had no dts, we will set this to AV_NOPTS_VALUE.
1556  int64_t last_dts = next_pkt->dts;
1557  av_assert2(wrap_bits <= 64);
1558  while (pktl && next_pkt->pts == AV_NOPTS_VALUE) {
1559  if (pktl->pkt.stream_index == next_pkt->stream_index &&
1560  av_compare_mod(next_pkt->dts, pktl->pkt.dts, 2ULL << (wrap_bits - 1)) < 0) {
1561  if (av_compare_mod(pktl->pkt.pts, pktl->pkt.dts, 2ULL << (wrap_bits - 1))) {
1562  // not B-frame
1563  next_pkt->pts = pktl->pkt.dts;
1564  }
1565  if (last_dts != AV_NOPTS_VALUE) {
1566  // Once last dts was set to AV_NOPTS_VALUE, we don't change it.
1567  last_dts = pktl->pkt.dts;
1568  }
1569  }
1570  pktl = pktl->next;
1571  }
1572  if (eof && next_pkt->pts == AV_NOPTS_VALUE && last_dts != AV_NOPTS_VALUE) {
1573  // Fixing the last reference frame had none pts issue (For MXF etc).
1574  // We only do this when
1575  // 1. eof.
1576  // 2. we are not able to resolve a pts value for current packet.
1577  // 3. the packets for this stream at the end of the files had valid dts.
1578  next_pkt->pts = last_dts + next_pkt->duration;
1579  }
1580  pktl = si->packet_buffer.head;
1581  }
1582 
1583  /* read packet from packet buffer, if there is data */
1584  st = s->streams[next_pkt->stream_index];
1585  if (!(next_pkt->pts == AV_NOPTS_VALUE && st->discard < AVDISCARD_ALL &&
1586  next_pkt->dts != AV_NOPTS_VALUE && !eof)) {
1588  goto return_packet;
1589  }
1590  }
1591 
1593  if (ret < 0) {
1594  if (pktl && ret != AVERROR(EAGAIN)) {
1595  eof = 1;
1596  continue;
1597  } else
1598  return ret;
1599  }
1600 
1602  pkt, NULL, 0);
1603  if (ret < 0) {
1605  return ret;
1606  }
1607  }
1608 
1609 return_packet:
1610  st = s->streams[pkt->stream_index];
1611  if ((s->iformat->flags & AVFMT_GENERIC_INDEX) && pkt->flags & AV_PKT_FLAG_KEY) {
1612  ff_reduce_index(s, st->index);
1614  }
1615 
1616  if (is_relative(pkt->dts))
1617  pkt->dts -= RELATIVE_TS_BASE;
1618  if (is_relative(pkt->pts))
1619  pkt->pts -= RELATIVE_TS_BASE;
1620 
1621  return ret;
1622 }
1623 
1624 /**
1625  * Return TRUE if the stream has accurate duration in any stream.
1626  *
1627  * @return TRUE if the stream has accurate duration for at least one component.
1628  */
1630 {
1631  for (unsigned i = 0; i < ic->nb_streams; i++) {
1632  const AVStream *const st = ic->streams[i];
1633  if (st->duration != AV_NOPTS_VALUE)
1634  return 1;
1635  }
1636  if (ic->duration != AV_NOPTS_VALUE)
1637  return 1;
1638  return 0;
1639 }
1640 
1641 /**
1642  * Estimate the stream timings from the one of each components.
1643  *
1644  * Also computes the global bitrate if possible.
1645  */
1647 {
1648  int64_t start_time, start_time1, start_time_text, end_time, end_time1, end_time_text;
1649  int64_t duration, duration1, duration_text, filesize;
1650 
1651  start_time = INT64_MAX;
1652  start_time_text = INT64_MAX;
1653  end_time = INT64_MIN;
1654  end_time_text = INT64_MIN;
1655  duration = INT64_MIN;
1656  duration_text = INT64_MIN;
1657 
1658  for (unsigned i = 0; i < ic->nb_streams; i++) {
1659  AVStream *const st = ic->streams[i];
1660  int is_text = st->codecpar->codec_type == AVMEDIA_TYPE_SUBTITLE ||
1662 
1663  if (st->start_time != AV_NOPTS_VALUE && st->time_base.den) {
1664  start_time1 = av_rescale_q(st->start_time, st->time_base,
1665  AV_TIME_BASE_Q);
1666  if (is_text)
1667  start_time_text = FFMIN(start_time_text, start_time1);
1668  else
1669  start_time = FFMIN(start_time, start_time1);
1670  end_time1 = av_rescale_q_rnd(st->duration, st->time_base,
1673  if (end_time1 != AV_NOPTS_VALUE && (end_time1 > 0 ? start_time1 <= INT64_MAX - end_time1 : start_time1 >= INT64_MIN - end_time1)) {
1674  end_time1 += start_time1;
1675  if (is_text)
1676  end_time_text = FFMAX(end_time_text, end_time1);
1677  else
1678  end_time = FFMAX(end_time, end_time1);
1679  }
1680  for (AVProgram *p = NULL; (p = av_find_program_from_stream(ic, p, i)); ) {
1681  if (p->start_time == AV_NOPTS_VALUE || p->start_time > start_time1)
1682  p->start_time = start_time1;
1683  if (p->end_time < end_time1)
1684  p->end_time = end_time1;
1685  }
1686  }
1687  if (st->duration != AV_NOPTS_VALUE) {
1688  duration1 = av_rescale_q(st->duration, st->time_base,
1689  AV_TIME_BASE_Q);
1690  if (is_text)
1691  duration_text = FFMAX(duration_text, duration1);
1692  else
1693  duration = FFMAX(duration, duration1);
1694  }
1695  }
1696  if (start_time == INT64_MAX || (start_time > start_time_text && start_time - (uint64_t)start_time_text < AV_TIME_BASE))
1697  start_time = start_time_text;
1698  else if (start_time > start_time_text)
1699  av_log(ic, AV_LOG_VERBOSE, "Ignoring outlier non primary stream starttime %f\n", start_time_text / (float)AV_TIME_BASE);
1700 
1701  if (end_time == INT64_MIN || (end_time < end_time_text && end_time_text - (uint64_t)end_time < AV_TIME_BASE))
1702  end_time = end_time_text;
1703  else if (end_time < end_time_text)
1704  av_log(ic, AV_LOG_VERBOSE, "Ignoring outlier non primary stream endtime %f\n", end_time_text / (float)AV_TIME_BASE);
1705 
1706  if (duration == INT64_MIN || (duration < duration_text && (uint64_t)duration_text - duration < AV_TIME_BASE))
1707  duration = duration_text;
1708  else if (duration < duration_text)
1709  av_log(ic, AV_LOG_VERBOSE, "Ignoring outlier non primary stream duration %f\n", duration_text / (float)AV_TIME_BASE);
1710 
1711  if (start_time != INT64_MAX) {
1712  ic->start_time = start_time;
1713  if (end_time != INT64_MIN) {
1714  if (ic->nb_programs > 1) {
1715  for (unsigned i = 0; i < ic->nb_programs; i++) {
1716  AVProgram *const p = ic->programs[i];
1717 
1718  if (p->start_time != AV_NOPTS_VALUE &&
1719  p->end_time > p->start_time &&
1720  p->end_time - (uint64_t)p->start_time <= INT64_MAX)
1722  }
1723  } else if (end_time >= start_time && end_time - (uint64_t)start_time <= INT64_MAX) {
1724  duration = FFMAX(duration, end_time - start_time);
1725  }
1726  }
1727  }
1728  if (duration != INT64_MIN && duration > 0 && ic->duration == AV_NOPTS_VALUE) {
1729  ic->duration = duration;
1730  }
1731  if (ic->pb && (filesize = avio_size(ic->pb)) > 0 && ic->duration > 0) {
1732  /* compute the bitrate */
1733  double bitrate = (double) filesize * 8.0 * AV_TIME_BASE /
1734  (double) ic->duration;
1735  if (bitrate >= 0 && bitrate <= INT64_MAX)
1736  ic->bit_rate = bitrate;
1737  }
1738 }
1739 
1741 {
1743  for (unsigned i = 0; i < ic->nb_streams; i++) {
1744  AVStream *const st = ic->streams[i];
1745 
1746  if (st->start_time == AV_NOPTS_VALUE) {
1747  if (ic->start_time != AV_NOPTS_VALUE)
1749  st->time_base);
1750  if (ic->duration != AV_NOPTS_VALUE)
1752  st->time_base);
1753  }
1754  }
1755 }
1756 
1758 {
1759  FFFormatContext *const si = ffformatcontext(ic);
1760  int show_warning = 0;
1761 
1762  /* if bit_rate is already set, we believe it */
1763  if (ic->bit_rate <= 0) {
1764  int64_t bit_rate = 0;
1765  for (unsigned i = 0; i < ic->nb_streams; i++) {
1766  const AVStream *const st = ic->streams[i];
1767  const FFStream *const sti = cffstream(st);
1768  if (st->codecpar->bit_rate <= 0 && sti->avctx->bit_rate > 0)
1769  st->codecpar->bit_rate = sti->avctx->bit_rate;
1770  if (st->codecpar->bit_rate > 0) {
1771  if (INT64_MAX - st->codecpar->bit_rate < bit_rate) {
1772  bit_rate = 0;
1773  break;
1774  }
1775  bit_rate += st->codecpar->bit_rate;
1776  } else if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO && sti->codec_info_nb_frames > 1) {
1777  // If we have a videostream with packets but without a bitrate
1778  // then consider the sum not known
1779  bit_rate = 0;
1780  break;
1781  }
1782  }
1783  ic->bit_rate = bit_rate;
1784  }
1785 
1786  /* if duration is already set, we believe it */
1787  if (ic->duration == AV_NOPTS_VALUE &&
1788  ic->bit_rate != 0) {
1789  int64_t filesize = ic->pb ? avio_size(ic->pb) : 0;
1790  if (filesize > si->data_offset) {
1791  filesize -= si->data_offset;
1792  for (unsigned i = 0; i < ic->nb_streams; i++) {
1793  AVStream *const st = ic->streams[i];
1794 
1795  if ( st->time_base.num <= INT64_MAX / ic->bit_rate
1796  && st->duration == AV_NOPTS_VALUE) {
1797  st->duration = av_rescale(filesize, 8LL * st->time_base.den,
1798  ic->bit_rate *
1799  (int64_t) st->time_base.num);
1800  show_warning = 1;
1801  }
1802  }
1803  }
1804  }
1805  if (show_warning)
1806  av_log(ic, AV_LOG_WARNING,
1807  "Estimating duration from bitrate, this may be inaccurate\n");
1808 }
1809 
1810 #define DURATION_DEFAULT_MAX_READ_SIZE 250000LL
1811 #define DURATION_DEFAULT_MAX_RETRY 6
1812 #define DURATION_MAX_RETRY 1
1813 
1814 /* only usable for MPEG-PS streams */
1816 {
1817  FFFormatContext *const si = ffformatcontext(ic);
1818  AVPacket *const pkt = si->pkt;
1819  int num, den, read_size, ret;
1821  int duration_max_retry = ic->duration_probesize ? DURATION_MAX_RETRY : DURATION_DEFAULT_MAX_RETRY;
1822  int found_duration = 0;
1823  int is_end;
1825  int retry = 0;
1826 
1827  /* flush packet queue */
1829 
1830  for (unsigned i = 0; i < ic->nb_streams; i++) {
1831  AVStream *const st = ic->streams[i];
1832  FFStream *const sti = ffstream(st);
1833 
1834  if (st->start_time == AV_NOPTS_VALUE &&
1835  sti->first_dts == AV_NOPTS_VALUE &&
1837  av_log(ic, AV_LOG_WARNING,
1838  "start time for stream %d is not set in estimate_timings_from_pts\n", i);
1839 
1840  if (sti->parser) {
1841  av_parser_close(sti->parser);
1842  sti->parser = NULL;
1843  }
1844  }
1845 
1847  av_log(ic, AV_LOG_INFO, "Skipping duration calculation in estimate_timings_from_pts\n");
1848  goto skip_duration_calc;
1849  }
1850 
1851  av_opt_set_int(ic, "skip_changes", 1, AV_OPT_SEARCH_CHILDREN);
1852  /* estimate the end time (duration) */
1853  /* XXX: may need to support wrapping */
1854  filesize = ic->pb ? avio_size(ic->pb) : 0;
1855  do {
1856  is_end = found_duration;
1857  offset = filesize - (duration_max_read_size << retry);
1858  if (offset < 0)
1859  offset = 0;
1860 
1861  avio_seek(ic->pb, offset, SEEK_SET);
1862  read_size = 0;
1863  for (;;) {
1864  AVStream *st;
1865  FFStream *sti;
1866  if (read_size >= duration_max_read_size << (FFMAX(retry - 1, 0)))
1867  break;
1868 
1869  do {
1870  ret = ff_read_packet(ic, pkt);
1871  } while (ret == AVERROR(EAGAIN));
1872  if (ret != 0)
1873  break;
1874  read_size += pkt->size;
1875  st = ic->streams[pkt->stream_index];
1876  sti = ffstream(st);
1877  if (pkt->pts != AV_NOPTS_VALUE &&
1878  (st->start_time != AV_NOPTS_VALUE ||
1879  sti->first_dts != AV_NOPTS_VALUE)) {
1880  if (pkt->duration == 0) {
1881  compute_frame_duration(ic, &num, &den, st, sti->parser, pkt);
1882  if (den && num) {
1884  num * (int64_t) st->time_base.den,
1885  den * (int64_t) st->time_base.num,
1886  AV_ROUND_DOWN);
1887  }
1888  }
1889  duration = pkt->pts + pkt->duration;
1890  found_duration = 1;
1891  if (st->start_time != AV_NOPTS_VALUE)
1892  duration -= st->start_time;
1893  else
1894  duration -= sti->first_dts;
1895  if (duration > 0) {
1896  if (st->duration == AV_NOPTS_VALUE || sti->info->last_duration<= 0 ||
1897  (st->duration < duration && FFABS(duration - sti->info->last_duration) < 60LL*st->time_base.den / st->time_base.num))
1898  st->duration = duration;
1899  sti->info->last_duration = duration;
1900  }
1901  }
1903  }
1904 
1905  /* check if all audio/video streams have valid duration */
1906  if (!is_end) {
1907  is_end = 1;
1908  for (unsigned i = 0; i < ic->nb_streams; i++) {
1909  const AVStream *const st = ic->streams[i];
1910  switch (st->codecpar->codec_type) {
1911  case AVMEDIA_TYPE_VIDEO:
1912  case AVMEDIA_TYPE_AUDIO:
1913  if (st->duration == AV_NOPTS_VALUE)
1914  is_end = 0;
1915  }
1916  }
1917  }
1918  } while (!is_end &&
1919  offset &&
1920  ++retry <= duration_max_retry);
1921 
1922  av_opt_set_int(ic, "skip_changes", 0, AV_OPT_SEARCH_CHILDREN);
1923 
1924  /* warn about audio/video streams which duration could not be estimated */
1925  for (unsigned i = 0; i < ic->nb_streams; i++) {
1926  const AVStream *const st = ic->streams[i];
1927  const FFStream *const sti = cffstream(st);
1928 
1929  if (st->duration == AV_NOPTS_VALUE) {
1930  switch (st->codecpar->codec_type) {
1931  case AVMEDIA_TYPE_VIDEO:
1932  case AVMEDIA_TYPE_AUDIO:
1933  if (st->start_time != AV_NOPTS_VALUE || sti->first_dts != AV_NOPTS_VALUE) {
1934  av_log(ic, AV_LOG_WARNING, "stream %d : no PTS found at end of file, duration not set\n", i);
1935  } else
1936  av_log(ic, AV_LOG_WARNING, "stream %d : no TS found at start of file, duration not set\n", i);
1937  }
1938  }
1939  }
1940 skip_duration_calc:
1942 
1943  avio_seek(ic->pb, old_offset, SEEK_SET);
1944  for (unsigned i = 0; i < ic->nb_streams; i++) {
1945  AVStream *const st = ic->streams[i];
1946  FFStream *const sti = ffstream(st);
1947 
1948  sti->cur_dts = sti->first_dts;
1949  sti->last_IP_pts = AV_NOPTS_VALUE;
1951  for (int j = 0; j < MAX_REORDER_DELAY + 1; j++)
1952  sti->pts_buffer[j] = AV_NOPTS_VALUE;
1953  }
1954 }
1955 
1956 /* 1:1 map to AVDurationEstimationMethod */
1957 static const char *const duration_name[] = {
1958  [AVFMT_DURATION_FROM_PTS] = "pts",
1959  [AVFMT_DURATION_FROM_STREAM] = "stream",
1960  [AVFMT_DURATION_FROM_BITRATE] = "bit rate",
1961 };
1962 
1964 {
1965  return duration_name[method];
1966 }
1967 
1968 static void estimate_timings(AVFormatContext *ic, int64_t old_offset)
1969 {
1970  int64_t file_size;
1971 
1972  /* get the file size, if possible */
1973  if (ic->iformat->flags & AVFMT_NOFILE) {
1974  file_size = 0;
1975  } else {
1976  file_size = avio_size(ic->pb);
1977  file_size = FFMAX(0, file_size);
1978  }
1979 
1980  if ((!strcmp(ic->iformat->name, "mpeg") ||
1981  !strcmp(ic->iformat->name, "mpegts")) &&
1982  file_size && (ic->pb->seekable & AVIO_SEEKABLE_NORMAL)) {
1983  /* get accurate estimate from the PTSes */
1984  estimate_timings_from_pts(ic, old_offset);
1986  } else if (has_duration(ic)) {
1987  /* at least one component has timings - we use them for all
1988  * the components */
1990  /* nut demuxer estimate the duration from PTS */
1991  if (!strcmp(ic->iformat->name, "nut"))
1993  else
1995  } else {
1996  /* less precise: use bitrate info */
1999  }
2001 
2002  for (unsigned i = 0; i < ic->nb_streams; i++) {
2003  AVStream *const st = ic->streams[i];
2004  if (st->time_base.den)
2005  av_log(ic, AV_LOG_TRACE, "stream %u: start_time: %s duration: %s\n", i,
2006  av_ts2timestr(st->start_time, &st->time_base),
2007  av_ts2timestr(st->duration, &st->time_base));
2008  }
2009  av_log(ic, AV_LOG_TRACE,
2010  "format: start_time: %s duration: %s (estimate from %s) bitrate=%"PRId64" kb/s\n",
2014  (int64_t)ic->bit_rate / 1000);
2015 }
2016 
2017 static int determinable_frame_size(const AVCodecContext *avctx)
2018 {
2019  switch(avctx->codec_id) {
2020  case AV_CODEC_ID_MP1:
2021  case AV_CODEC_ID_MP2:
2022  case AV_CODEC_ID_MP3:
2023  case AV_CODEC_ID_CODEC2:
2024  return 1;
2025  }
2026 
2027  return 0;
2028 }
2029 
2030 static int has_codec_parameters(const AVStream *st, const char **errmsg_ptr)
2031 {
2032  const FFStream *const sti = cffstream(st);
2033  const AVCodecContext *const avctx = sti->avctx;
2034 
2035 #define FAIL(errmsg) do { \
2036  if (errmsg_ptr) \
2037  *errmsg_ptr = errmsg; \
2038  return 0; \
2039  } while (0)
2040 
2041  if ( avctx->codec_id == AV_CODEC_ID_NONE
2042  && avctx->codec_type != AVMEDIA_TYPE_DATA)
2043  FAIL("unknown codec");
2044  switch (avctx->codec_type) {
2045  case AVMEDIA_TYPE_AUDIO:
2046  if (!avctx->frame_size && determinable_frame_size(avctx))
2047  FAIL("unspecified frame size");
2048  if (sti->info->found_decoder >= 0 &&
2049  avctx->sample_fmt == AV_SAMPLE_FMT_NONE)
2050  FAIL("unspecified sample format");
2051  if (!avctx->sample_rate)
2052  FAIL("unspecified sample rate");
2053  if (!avctx->ch_layout.nb_channels)
2054  FAIL("unspecified number of channels");
2055  if (sti->info->found_decoder >= 0 && !sti->nb_decoded_frames && avctx->codec_id == AV_CODEC_ID_DTS)
2056  FAIL("no decodable DTS frames");
2057  break;
2058  case AVMEDIA_TYPE_VIDEO:
2059  if (!avctx->width)
2060  FAIL("unspecified size");
2061  if (sti->info->found_decoder >= 0 && avctx->pix_fmt == AV_PIX_FMT_NONE)
2062  FAIL("unspecified pixel format");
2065  FAIL("no frame in rv30/40 and no sar");
2066  break;
2067  case AVMEDIA_TYPE_SUBTITLE:
2068  if (avctx->codec_id == AV_CODEC_ID_HDMV_PGS_SUBTITLE && !avctx->width)
2069  FAIL("unspecified size");
2070  break;
2071  case AVMEDIA_TYPE_DATA:
2072  if (avctx->codec_id == AV_CODEC_ID_NONE) return 1;
2073  }
2074 
2075  return 1;
2076 }
2077 
2078 /* returns 1 or 0 if or if not decoded data was returned, or a negative error */
2080  const AVPacket *pkt, AVDictionary **options)
2081 {
2082  FFStream *const sti = ffstream(st);
2083  AVCodecContext *const avctx = sti->avctx;
2084  const AVCodec *codec;
2085  int got_picture = 1, ret = 0;
2087  AVSubtitle subtitle;
2088  int do_skip_frame = 0;
2089  enum AVDiscard skip_frame;
2090  int pkt_to_send = pkt->size > 0;
2091 
2092  if (!frame)
2093  return AVERROR(ENOMEM);
2094 
2095  if (!avcodec_is_open(avctx) &&
2096  sti->info->found_decoder <= 0 &&
2097  (st->codecpar->codec_id != -sti->info->found_decoder || !st->codecpar->codec_id)) {
2098  AVDictionary *thread_opt = NULL;
2099 
2100  codec = find_probe_decoder(s, st, st->codecpar->codec_id);
2101 
2102  if (!codec) {
2103  sti->info->found_decoder = -st->codecpar->codec_id;
2104  ret = -1;
2105  goto fail;
2106  }
2107 
2108  /* Force thread count to 1 since the H.264 decoder will not extract
2109  * SPS and PPS to extradata during multi-threaded decoding. */
2110  av_dict_set(options ? options : &thread_opt, "threads", "1", 0);
2111  /* Force lowres to 0. The decoder might reduce the video size by the
2112  * lowres factor, and we don't want that propagated to the stream's
2113  * codecpar */
2114  av_dict_set(options ? options : &thread_opt, "lowres", "0", 0);
2115  if (s->codec_whitelist)
2116  av_dict_set(options ? options : &thread_opt, "codec_whitelist", s->codec_whitelist, 0);
2117  ret = avcodec_open2(avctx, codec, options ? options : &thread_opt);
2118  if (!options)
2119  av_dict_free(&thread_opt);
2120  if (ret < 0) {
2121  sti->info->found_decoder = -avctx->codec_id;
2122  goto fail;
2123  }
2124  sti->info->found_decoder = 1;
2125  } else if (!sti->info->found_decoder)
2126  sti->info->found_decoder = 1;
2127 
2128  if (sti->info->found_decoder < 0) {
2129  ret = -1;
2130  goto fail;
2131  }
2132 
2134  do_skip_frame = 1;
2135  skip_frame = avctx->skip_frame;
2136  avctx->skip_frame = AVDISCARD_ALL;
2137  }
2138 
2139  while ((pkt_to_send || (!pkt->data && got_picture)) &&
2140  ret >= 0 &&
2142  (!sti->codec_info_nb_frames &&
2144  got_picture = 0;
2145  if (avctx->codec_type == AVMEDIA_TYPE_VIDEO ||
2146  avctx->codec_type == AVMEDIA_TYPE_AUDIO) {
2147  ret = avcodec_send_packet(avctx, pkt);
2148  if (ret < 0 && ret != AVERROR(EAGAIN) && ret != AVERROR_EOF)
2149  break;
2150  if (ret >= 0)
2151  pkt_to_send = 0;
2152  ret = avcodec_receive_frame(avctx, frame);
2153  if (ret >= 0)
2154  got_picture = 1;
2155  if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF)
2156  ret = 0;
2157  } else if (avctx->codec_type == AVMEDIA_TYPE_SUBTITLE) {
2158  ret = avcodec_decode_subtitle2(avctx, &subtitle,
2159  &got_picture, pkt);
2160  if (got_picture)
2161  avsubtitle_free(&subtitle);
2162  if (ret >= 0)
2163  pkt_to_send = 0;
2164  }
2165  if (ret >= 0) {
2166  if (got_picture)
2167  sti->nb_decoded_frames++;
2168  ret = got_picture;
2169  }
2170  }
2171 
2172 fail:
2173  if (do_skip_frame) {
2174  avctx->skip_frame = skip_frame;
2175  }
2176 
2177  av_frame_free(&frame);
2178  return ret;
2179 }
2180 
2181 static int chapter_start_cmp(const void *p1, const void *p2)
2182 {
2183  const AVChapter *const ch1 = *(AVChapter**)p1;
2184  const AVChapter *const ch2 = *(AVChapter**)p2;
2185  int delta = av_compare_ts(ch1->start, ch1->time_base, ch2->start, ch2->time_base);
2186  if (delta)
2187  return delta;
2188  return FFDIFFSIGN(ch1->id, ch2->id);
2189 }
2190 
2192 {
2193  int64_t max_time = 0;
2194  AVChapter **timetable;
2195 
2196  if (!s->nb_chapters)
2197  return 0;
2198 
2199  if (s->duration > 0 && s->start_time < INT64_MAX - s->duration)
2200  max_time = s->duration +
2201  ((s->start_time == AV_NOPTS_VALUE) ? 0 : s->start_time);
2202 
2203  timetable = av_memdup(s->chapters, s->nb_chapters * sizeof(*timetable));
2204  if (!timetable)
2205  return AVERROR(ENOMEM);
2206  qsort(timetable, s->nb_chapters, sizeof(*timetable), chapter_start_cmp);
2207 
2208  for (unsigned i = 0; i < s->nb_chapters; i++)
2209  if (timetable[i]->end == AV_NOPTS_VALUE) {
2210  AVChapter *const ch = timetable[i];
2211  int64_t end = max_time ? av_rescale_q(max_time, AV_TIME_BASE_Q,
2212  ch->time_base)
2213  : INT64_MAX;
2214 
2215  if (i + 1 < s->nb_chapters) {
2216  const AVChapter *const ch1 = timetable[i + 1];
2217  int64_t next_start = av_rescale_q(ch1->start, ch1->time_base,
2218  ch->time_base);
2219  if (next_start > ch->start && next_start < end)
2220  end = next_start;
2221  }
2222  ch->end = (end == INT64_MAX || end < ch->start) ? ch->start : end;
2223  }
2224  av_free(timetable);
2225  return 0;
2226 }
2227 
2228 static int get_std_framerate(int i)
2229 {
2230  if (i < 30*12)
2231  return (i + 1) * 1001;
2232  i -= 30*12;
2233 
2234  if (i < 30)
2235  return (i + 31) * 1001 * 12;
2236  i -= 30;
2237 
2238  if (i < 3)
2239  return ((const int[]) { 80, 120, 240})[i] * 1001 * 12;
2240 
2241  i -= 3;
2242 
2243  return ((const int[]) { 24, 30, 60, 12, 15, 48 })[i] * 1000 * 12;
2244 }
2245 
2246 /* Is the time base unreliable?
2247  * This is a heuristic to balance between quick acceptance of the values in
2248  * the headers vs. some extra checks.
2249  * Old DivX and Xvid often have nonsense timebases like 1fps or 2fps.
2250  * MPEG-2 commonly misuses field repeat flags to store different framerates.
2251  * And there are "variable" fps files this needs to detect as well. */
2253 {
2254  FFStream *const sti = ffstream(st);
2255  const AVCodecDescriptor *desc = sti->codec_desc;
2256  AVCodecContext *c = sti->avctx;
2257  AVRational mul = (AVRational){ desc && (desc->props & AV_CODEC_PROP_FIELDS) ? 2 : 1, 1 };
2258  AVRational time_base = c->framerate.num ? av_inv_q(av_mul_q(c->framerate, mul))
2259  /* NOHEADER check added to not break existing behavior */
2260  : (((ic->ctx_flags & AVFMTCTX_NOHEADER) ||
2262  : st->time_base);
2263 
2264  if (time_base.den >= 101LL * time_base.num ||
2265  time_base.den < 5LL * time_base.num ||
2266  // c->codec_tag == AV_RL32("DIVX") ||
2267  // c->codec_tag == AV_RL32("XVID") ||
2268  c->codec_tag == AV_RL32("mp4v") ||
2269  c->codec_id == AV_CODEC_ID_MPEG2VIDEO ||
2270  c->codec_id == AV_CODEC_ID_GIF ||
2271  c->codec_id == AV_CODEC_ID_HEVC ||
2272  c->codec_id == AV_CODEC_ID_H264)
2273  return 1;
2274  return 0;
2275 }
2276 
2278 {
2279  FFStream *const sti = ffstream(st);
2280  FFStreamInfo *info = sti->info;
2281  int64_t last = info->last_dts;
2282 
2283  if ( ts != AV_NOPTS_VALUE && last != AV_NOPTS_VALUE && ts > last
2284  && ts - (uint64_t)last < INT64_MAX) {
2285  double dts = (is_relative(ts) ? ts - RELATIVE_TS_BASE : ts) * av_q2d(st->time_base);
2286  int64_t duration = ts - last;
2287 
2288  if (!info->duration_error)
2289  info->duration_error = av_mallocz(sizeof(info->duration_error[0])*2);
2290  if (!info->duration_error)
2291  return AVERROR(ENOMEM);
2292 
2293 // if (st->codec->codec_type == AVMEDIA_TYPE_VIDEO)
2294 // av_log(NULL, AV_LOG_ERROR, "%f\n", dts);
2295  for (int i = 0; i < MAX_STD_TIMEBASES; i++) {
2296  if (info->duration_error[0][1][i] < 1e10) {
2297  int framerate = get_std_framerate(i);
2298  double sdts = dts*framerate/(1001*12);
2299  for (int j = 0; j < 2; j++) {
2300  int64_t ticks = llrint(sdts+j*0.5);
2301  double error = sdts - ticks + j*0.5;
2302  info->duration_error[j][0][i] += error;
2303  info->duration_error[j][1][i] += error*error;
2304  }
2305  }
2306  }
2307  if (info->rfps_duration_sum <= INT64_MAX - duration) {
2308  info->duration_count++;
2309  info->rfps_duration_sum += duration;
2310  }
2311 
2312  if (info->duration_count % 10 == 0) {
2313  int n = info->duration_count;
2314  for (int i = 0; i < MAX_STD_TIMEBASES; i++) {
2315  if (info->duration_error[0][1][i] < 1e10) {
2316  double a0 = info->duration_error[0][0][i] / n;
2317  double error0 = info->duration_error[0][1][i] / n - a0*a0;
2318  double a1 = info->duration_error[1][0][i] / n;
2319  double error1 = info->duration_error[1][1][i] / n - a1*a1;
2320  if (error0 > 0.04 && error1 > 0.04) {
2321  info->duration_error[0][1][i] = 2e10;
2322  info->duration_error[1][1][i] = 2e10;
2323  }
2324  }
2325  }
2326  }
2327 
2328  // ignore the first 4 values, they might have some random jitter
2329  if (info->duration_count > 3 && is_relative(ts) == is_relative(last))
2330  info->duration_gcd = av_gcd(info->duration_gcd, duration);
2331  }
2332  if (ts != AV_NOPTS_VALUE)
2333  info->last_dts = ts;
2334 
2335  return 0;
2336 }
2337 
2339 {
2340  for (unsigned i = 0; i < ic->nb_streams; i++) {
2341  AVStream *const st = ic->streams[i];
2342  FFStream *const sti = ffstream(st);
2343 
2345  continue;
2346  // the check for tb_unreliable() is not completely correct, since this is not about handling
2347  // an unreliable/inexact time base, but a time base that is finer than necessary, as e.g.
2348  // ipmovie.c produces.
2349  if (tb_unreliable(ic, st) && sti->info->duration_count > 15 && sti->info->duration_gcd > FFMAX(1, st->time_base.den/(500LL*st->time_base.num)) && !st->r_frame_rate.num &&
2350  sti->info->duration_gcd < INT64_MAX / st->time_base.num)
2351  av_reduce(&st->r_frame_rate.num, &st->r_frame_rate.den, st->time_base.den, st->time_base.num * sti->info->duration_gcd, INT_MAX);
2352  if (sti->info->duration_count > 1 && !st->r_frame_rate.num
2353  && tb_unreliable(ic, st)) {
2354  int num = 0;
2355  double best_error = 0.01;
2356  AVRational ref_rate = st->r_frame_rate.num ? st->r_frame_rate : av_inv_q(st->time_base);
2357 
2358  for (int j = 0; j < MAX_STD_TIMEBASES; j++) {
2359  if (sti->info->codec_info_duration &&
2360  sti->info->codec_info_duration*av_q2d(st->time_base) < (1001*11.5)/get_std_framerate(j))
2361  continue;
2362  if (!sti->info->codec_info_duration && get_std_framerate(j) < 1001*12)
2363  continue;
2364 
2365  if (av_q2d(st->time_base) * sti->info->rfps_duration_sum / sti->info->duration_count < (1001*12.0 * 0.8)/get_std_framerate(j))
2366  continue;
2367 
2368  for (int k = 0; k < 2; k++) {
2369  int n = sti->info->duration_count;
2370  double a = sti->info->duration_error[k][0][j] / n;
2371  double error = sti->info->duration_error[k][1][j]/n - a*a;
2372 
2373  if (error < best_error && best_error> 0.000000001) {
2374  best_error= error;
2375  num = get_std_framerate(j);
2376  }
2377  if (error < 0.02)
2378  av_log(ic, AV_LOG_DEBUG, "rfps: %f %f\n", get_std_framerate(j) / 12.0/1001, error);
2379  }
2380  }
2381  // do not increase frame rate by more than 1 % in order to match a standard rate.
2382  if (num && (!ref_rate.num || (double)num/(12*1001) < 1.01 * av_q2d(ref_rate)))
2383  av_reduce(&st->r_frame_rate.num, &st->r_frame_rate.den, num, 12*1001, INT_MAX);
2384  }
2385  if ( !st->avg_frame_rate.num
2386  && st->r_frame_rate.num && sti->info->rfps_duration_sum
2387  && sti->info->codec_info_duration <= 0
2388  && sti->info->duration_count > 2
2389  && fabs(1.0 / (av_q2d(st->r_frame_rate) * av_q2d(st->time_base)) - sti->info->rfps_duration_sum / (double)sti->info->duration_count) <= 1.0
2390  ) {
2391  av_log(ic, AV_LOG_DEBUG, "Setting avg frame rate based on r frame rate\n");
2392  st->avg_frame_rate = st->r_frame_rate;
2393  }
2394 
2395  av_freep(&sti->info->duration_error);
2396  sti->info->last_dts = AV_NOPTS_VALUE;
2397  sti->info->duration_count = 0;
2398  sti->info->rfps_duration_sum = 0;
2399  }
2400 }
2401 
2403 {
2404  const AVBitStreamFilter *const f = av_bsf_get_by_name("extract_extradata");
2405  if (!f)
2406  return 0;
2407 
2408  if (f->codec_ids) {
2409  const enum AVCodecID *ids;
2410  for (ids = f->codec_ids; *ids != AV_CODEC_ID_NONE; ids++)
2411  if (*ids == st->codecpar->codec_id)
2412  return 1;
2413  }
2414 
2415  return 0;
2416 }
2417 
2419 {
2420  FFStream *const sti = ffstream(st);
2421  const AVBitStreamFilter *f;
2422  int ret;
2423 
2424  f = av_bsf_get_by_name("extract_extradata");
2425  if (!f)
2426  goto finish;
2427 
2428  /* check that the codec id is supported */
2430  if (!ret)
2431  goto finish;
2432 
2435  if (ret < 0)
2436  return ret;
2437 
2439  st->codecpar);
2440  if (ret < 0)
2441  goto fail;
2442 
2444 
2446  if (ret < 0)
2447  goto fail;
2448 
2449 finish:
2450  sti->extract_extradata.inited = 1;
2451 
2452  return 0;
2453 fail:
2455  return ret;
2456 }
2457 
2459 {
2460  FFStream *const sti = ffstream(st);
2461  AVPacket *const pkt_ref = si->parse_pkt;
2462  int ret;
2463 
2464  if (!sti->extract_extradata.inited) {
2466  if (ret < 0)
2467  return ret;
2468  }
2469 
2470  if (sti->extract_extradata.inited && !sti->extract_extradata.bsf)
2471  return 0;
2472 
2473  ret = av_packet_ref(pkt_ref, pkt);
2474  if (ret < 0)
2475  return ret;
2476 
2477  ret = av_bsf_send_packet(sti->extract_extradata.bsf, pkt_ref);
2478  if (ret < 0) {
2479  av_packet_unref(pkt_ref);
2480  return ret;
2481  }
2482 
2483  while (ret >= 0 && !sti->avctx->extradata) {
2485  if (ret < 0) {
2486  if (ret != AVERROR(EAGAIN) && ret != AVERROR_EOF)
2487  return ret;
2488  continue;
2489  }
2490 
2491  for (int i = 0; i < pkt_ref->side_data_elems; i++) {
2492  AVPacketSideData *const side_data = &pkt_ref->side_data[i];
2493  if (side_data->type == AV_PKT_DATA_NEW_EXTRADATA) {
2494  sti->avctx->extradata = side_data->data;
2495  sti->avctx->extradata_size = side_data->size;
2496  side_data->data = NULL;
2497  side_data->size = 0;
2498  break;
2499  }
2500  }
2501  av_packet_unref(pkt_ref);
2502  }
2503 
2504  return 0;
2505 }
2506 
2508 {
2509  FFFormatContext *const si = ffformatcontext(ic);
2510  int count = 0, ret = 0, err;
2511  int64_t read_size;
2512  AVPacket *pkt1 = si->pkt;
2513  int64_t old_offset = avio_tell(ic->pb);
2514  // new streams might appear, no options for those
2515  int orig_nb_streams = ic->nb_streams;
2516  int flush_codecs;
2517  int64_t max_analyze_duration = ic->max_analyze_duration;
2518  int64_t max_stream_analyze_duration;
2519  int64_t max_subtitle_analyze_duration;
2520  int64_t probesize = ic->probesize;
2521  int eof_reached = 0;
2522 
2523  flush_codecs = probesize > 0;
2524 
2525  av_opt_set_int(ic, "skip_clear", 1, AV_OPT_SEARCH_CHILDREN);
2526 
2527  max_stream_analyze_duration = max_analyze_duration;
2528  max_subtitle_analyze_duration = max_analyze_duration;
2529  if (!max_analyze_duration) {
2530  max_stream_analyze_duration =
2531  max_analyze_duration = 5*AV_TIME_BASE;
2532  max_subtitle_analyze_duration = 30*AV_TIME_BASE;
2533  if (!strcmp(ic->iformat->name, "flv"))
2534  max_stream_analyze_duration = 90*AV_TIME_BASE;
2535  if (!strcmp(ic->iformat->name, "mpeg") || !strcmp(ic->iformat->name, "mpegts"))
2536  max_stream_analyze_duration = 7*AV_TIME_BASE;
2537  }
2538 
2539  if (ic->pb) {
2540  FFIOContext *const ctx = ffiocontext(ic->pb);
2541  av_log(ic, AV_LOG_DEBUG, "Before avformat_find_stream_info() pos: %"PRId64" bytes read:%"PRId64" seeks:%d nb_streams:%d\n",
2542  avio_tell(ic->pb), ctx->bytes_read, ctx->seek_count, ic->nb_streams);
2543  }
2544 
2545  for (unsigned i = 0; i < ic->nb_streams; i++) {
2546  const AVCodec *codec;
2547  AVDictionary *thread_opt = NULL;
2548  AVStream *const st = ic->streams[i];
2549  FFStream *const sti = ffstream(st);
2550  AVCodecContext *const avctx = sti->avctx;
2551 
2552  /* check if the caller has overridden the codec id */
2553  // only for the split stuff
2554  if (!sti->parser && !(ic->flags & AVFMT_FLAG_NOPARSE) && sti->request_probe <= 0) {
2555  sti->parser = av_parser_init(st->codecpar->codec_id);
2556  if (sti->parser) {
2557  if (sti->need_parsing == AVSTREAM_PARSE_HEADERS) {
2559  } else if (sti->need_parsing == AVSTREAM_PARSE_FULL_RAW) {
2561  }
2562  } else if (sti->need_parsing) {
2563  av_log(ic, AV_LOG_VERBOSE, "parser not found for codec "
2564  "%s, packets or times may be invalid.\n",
2566  }
2567  }
2568 
2570  if (ret < 0)
2571  goto find_stream_info_err;
2572  if (sti->request_probe <= 0)
2573  sti->avctx_inited = 1;
2574 
2575  codec = find_probe_decoder(ic, st, st->codecpar->codec_id);
2576 
2577  /* Force thread count to 1 since the H.264 decoder will not extract
2578  * SPS and PPS to extradata during multi-threaded decoding. */
2579  av_dict_set(options ? &options[i] : &thread_opt, "threads", "1", 0);
2580  /* Force lowres to 0. The decoder might reduce the video size by the
2581  * lowres factor, and we don't want that propagated to the stream's
2582  * codecpar */
2583  av_dict_set(options ? &options[i] : &thread_opt, "lowres", "0", 0);
2584 
2585  if (ic->codec_whitelist)
2586  av_dict_set(options ? &options[i] : &thread_opt, "codec_whitelist", ic->codec_whitelist, 0);
2587 
2588  // Try to just open decoders, in case this is enough to get parameters.
2589  // Also ensure that subtitle_header is properly set.
2590  if (!has_codec_parameters(st, NULL) && sti->request_probe <= 0 ||
2592  if (codec && !avctx->codec)
2593  if (avcodec_open2(avctx, codec, options ? &options[i] : &thread_opt) < 0)
2594  av_log(ic, AV_LOG_WARNING,
2595  "Failed to open codec in %s\n", __func__);
2596  }
2597  if (!options)
2598  av_dict_free(&thread_opt);
2599  }
2600 
2601  read_size = 0;
2602  for (;;) {
2603  const AVPacket *pkt;
2604  AVStream *st;
2605  FFStream *sti;
2606  AVCodecContext *avctx;
2607  int analyzed_all_streams;
2608  unsigned i;
2610  ret = AVERROR_EXIT;
2611  av_log(ic, AV_LOG_DEBUG, "interrupted\n");
2612  break;
2613  }
2614 
2615  /* check if one codec still needs to be handled */
2616  for (i = 0; i < ic->nb_streams; i++) {
2617  AVStream *const st = ic->streams[i];
2618  FFStream *const sti = ffstream(st);
2619  int fps_analyze_framecount = 20;
2620  int count;
2621 
2622  if (!has_codec_parameters(st, NULL))
2623  break;
2624  /* If the timebase is coarse (like the usual millisecond precision
2625  * of mkv), we need to analyze more frames to reliably arrive at
2626  * the correct fps. */
2627  if (av_q2d(st->time_base) > 0.0005)
2628  fps_analyze_framecount *= 2;
2629  if (!tb_unreliable(ic, st))
2630  fps_analyze_framecount = 0;
2631  if (ic->fps_probe_size >= 0)
2632  fps_analyze_framecount = ic->fps_probe_size;
2634  fps_analyze_framecount = 0;
2635  /* variable fps and no guess at the real fps */
2636  count = (ic->iformat->flags & AVFMT_NOTIMESTAMPS) ?
2638  sti->info->duration_count;
2639  if (!(st->r_frame_rate.num && st->avg_frame_rate.num) &&
2641  if (count < fps_analyze_framecount)
2642  break;
2643  }
2644  // Look at the first 3 frames if there is evidence of frame delay
2645  // but the decoder delay is not set.
2646  if (sti->info->frame_delay_evidence && count < 2 && sti->avctx->has_b_frames == 0)
2647  break;
2648  if (!sti->avctx->extradata &&
2649  (!sti->extract_extradata.inited || sti->extract_extradata.bsf) &&
2651  break;
2652  if (sti->first_dts == AV_NOPTS_VALUE &&
2657  break;
2658  }
2659  analyzed_all_streams = 0;
2660  if (i == ic->nb_streams && !si->missing_streams) {
2661  analyzed_all_streams = 1;
2662  /* NOTE: If the format has no header, then we need to read some
2663  * packets to get most of the streams, so we cannot stop here. */
2664  if (!(ic->ctx_flags & AVFMTCTX_NOHEADER)) {
2665  /* If we found the info for all the codecs, we can stop. */
2666  ret = count;
2667  av_log(ic, AV_LOG_DEBUG, "All info found\n");
2668  flush_codecs = 0;
2669  break;
2670  }
2671  }
2672  /* We did not get all the codec info, but we read too much data. */
2673  if (read_size >= probesize) {
2674  ret = count;
2675  av_log(ic, AV_LOG_DEBUG,
2676  "Probe buffer size limit of %"PRId64" bytes reached\n", probesize);
2677  for (unsigned i = 0; i < ic->nb_streams; i++) {
2678  AVStream *const st = ic->streams[i];
2679  FFStream *const sti = ffstream(st);
2680  if (!st->r_frame_rate.num &&
2681  sti->info->duration_count <= 1 &&
2683  strcmp(ic->iformat->name, "image2"))
2684  av_log(ic, AV_LOG_WARNING,
2685  "Stream #%d: not enough frames to estimate rate; "
2686  "consider increasing probesize\n", i);
2687  }
2688  break;
2689  }
2690 
2691  /* NOTE: A new stream can be added there if no header in file
2692  * (AVFMTCTX_NOHEADER). */
2693  ret = read_frame_internal(ic, pkt1);
2694  if (ret == AVERROR(EAGAIN))
2695  continue;
2696 
2697  if (ret < 0) {
2698  /* EOF or error*/
2699  eof_reached = 1;
2700  break;
2701  }
2702 
2703  if (!(ic->flags & AVFMT_FLAG_NOBUFFER)) {
2705  pkt1, NULL, 0);
2706  if (ret < 0)
2707  goto unref_then_goto_end;
2708 
2709  pkt = &si->packet_buffer.tail->pkt;
2710  } else {
2711  pkt = pkt1;
2712  }
2713 
2714  st = ic->streams[pkt->stream_index];
2715  sti = ffstream(st);
2717  read_size += pkt->size;
2718 
2719  avctx = sti->avctx;
2720  if (!sti->avctx_inited) {
2722  if (ret < 0)
2723  goto unref_then_goto_end;
2724  sti->avctx_inited = 1;
2725  }
2726 
2727  if (pkt->dts != AV_NOPTS_VALUE && sti->codec_info_nb_frames > 1) {
2728  /* check for non-increasing dts */
2729  if (sti->info->fps_last_dts != AV_NOPTS_VALUE &&
2730  sti->info->fps_last_dts >= pkt->dts) {
2731  av_log(ic, AV_LOG_DEBUG,
2732  "Non-increasing DTS in stream %d: packet %d with DTS "
2733  "%"PRId64", packet %d with DTS %"PRId64"\n",
2734  st->index, sti->info->fps_last_dts_idx,
2736  pkt->dts);
2737  sti->info->fps_first_dts =
2739  }
2740  /* Check for a discontinuity in dts. If the difference in dts
2741  * is more than 1000 times the average packet duration in the
2742  * sequence, we treat it as a discontinuity. */
2743  if (sti->info->fps_last_dts != AV_NOPTS_VALUE &&
2744  sti->info->fps_last_dts_idx > sti->info->fps_first_dts_idx &&
2745  (pkt->dts - (uint64_t)sti->info->fps_last_dts) / 1000 >
2746  (sti->info->fps_last_dts - (uint64_t)sti->info->fps_first_dts) /
2747  (sti->info->fps_last_dts_idx - sti->info->fps_first_dts_idx)) {
2748  av_log(ic, AV_LOG_WARNING,
2749  "DTS discontinuity in stream %d: packet %d with DTS "
2750  "%"PRId64", packet %d with DTS %"PRId64"\n",
2751  st->index, sti->info->fps_last_dts_idx,
2753  pkt->dts);
2754  sti->info->fps_first_dts =
2756  }
2757 
2758  /* update stored dts values */
2759  if (sti->info->fps_first_dts == AV_NOPTS_VALUE) {
2760  sti->info->fps_first_dts = pkt->dts;
2762  }
2763  sti->info->fps_last_dts = pkt->dts;
2765  }
2766  if (sti->codec_info_nb_frames > 1) {
2767  int64_t t = 0;
2768  int64_t limit;
2769 
2770  if (st->time_base.den > 0)
2772  if (st->avg_frame_rate.num > 0)
2774 
2775  if ( t == 0
2776  && sti->codec_info_nb_frames > 30
2777  && sti->info->fps_first_dts != AV_NOPTS_VALUE
2778  && sti->info->fps_last_dts != AV_NOPTS_VALUE) {
2780  t = FFMAX(t, av_rescale_q(dur, st->time_base, AV_TIME_BASE_Q));
2781  }
2782 
2783  if (analyzed_all_streams) limit = max_analyze_duration;
2784  else if (avctx->codec_type == AVMEDIA_TYPE_SUBTITLE) limit = max_subtitle_analyze_duration;
2785  else limit = max_stream_analyze_duration;
2786 
2787  if (t >= limit) {
2788  av_log(ic, AV_LOG_VERBOSE, "max_analyze_duration %"PRId64" reached at %"PRId64" microseconds st:%d\n",
2789  limit,
2790  t, pkt->stream_index);
2791  if (ic->flags & AVFMT_FLAG_NOBUFFER)
2792  av_packet_unref(pkt1);
2793  break;
2794  }
2795  if (pkt->duration > 0 && pkt->duration < INT64_MAX - sti->info->codec_info_duration) {
2796  const int fields = sti->codec_desc && (sti->codec_desc->props & AV_CODEC_PROP_FIELDS);
2798  && (uint64_t)pkt->pts - st->start_time < INT64_MAX
2799  ) {
2801  } else
2803  sti->info->codec_info_duration_fields += sti->parser && sti->need_parsing && fields
2804  ? sti->parser->repeat_pict + 1 : 2;
2805  }
2806  }
2807  if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) {
2808 #if FF_API_R_FRAME_RATE
2809  ff_rfps_add_frame(ic, st, pkt->dts);
2810 #endif
2811  if (pkt->dts != pkt->pts && pkt->dts != AV_NOPTS_VALUE && pkt->pts != AV_NOPTS_VALUE)
2812  sti->info->frame_delay_evidence = 1;
2813  }
2814  if (!sti->avctx->extradata) {
2815  ret = extract_extradata(si, st, pkt);
2816  if (ret < 0)
2817  goto unref_then_goto_end;
2818  }
2819 
2820  /* If still no information, we try to open the codec and to
2821  * decompress the frame. We try to avoid that in most cases as
2822  * it takes longer and uses more memory. For MPEG-4, we need to
2823  * decompress for QuickTime.
2824  *
2825  * If AV_CODEC_CAP_CHANNEL_CONF is set this will force decoding of at
2826  * least one frame of codec data, this makes sure the codec initializes
2827  * the channel configuration and does not only trust the values from
2828  * the container. */
2829  try_decode_frame(ic, st, pkt,
2830  (options && i < orig_nb_streams) ? &options[i] : NULL);
2831 
2832  if (ic->flags & AVFMT_FLAG_NOBUFFER)
2833  av_packet_unref(pkt1);
2834 
2835  sti->codec_info_nb_frames++;
2836  count++;
2837  }
2838 
2839  if (eof_reached) {
2840  for (unsigned stream_index = 0; stream_index < ic->nb_streams; stream_index++) {
2841  AVStream *const st = ic->streams[stream_index];
2842  AVCodecContext *const avctx = ffstream(st)->avctx;
2843  if (!has_codec_parameters(st, NULL)) {
2844  const AVCodec *codec = find_probe_decoder(ic, st, st->codecpar->codec_id);
2845  if (codec && !avctx->codec) {
2846  AVDictionary *opts = NULL;
2847  if (ic->codec_whitelist)
2848  av_dict_set(&opts, "codec_whitelist", ic->codec_whitelist, 0);
2849  if (avcodec_open2(avctx, codec, (options && stream_index < orig_nb_streams) ? &options[stream_index] : &opts) < 0)
2850  av_log(ic, AV_LOG_WARNING,
2851  "Failed to open codec in %s\n", __func__);
2852  av_dict_free(&opts);
2853  }
2854  }
2855 
2856  // EOF already reached while reading the stream above.
2857  // So continue with reoordering DTS with whatever delay we have.
2859  update_dts_from_pts(ic, stream_index, si->packet_buffer.head);
2860  }
2861  }
2862  }
2863 
2864  if (flush_codecs) {
2865  AVPacket *empty_pkt = si->pkt;
2866  int err = 0;
2867  av_packet_unref(empty_pkt);
2868 
2869  for (unsigned i = 0; i < ic->nb_streams; i++) {
2870  AVStream *const st = ic->streams[i];
2871  FFStream *const sti = ffstream(st);
2872 
2873  /* flush the decoders */
2874  if (sti->info->found_decoder == 1) {
2875  err = try_decode_frame(ic, st, empty_pkt,
2876  (options && i < orig_nb_streams)
2877  ? &options[i] : NULL);
2878 
2879  if (err < 0) {
2880  av_log(ic, AV_LOG_INFO,
2881  "decoding for stream %d failed\n", st->index);
2882  }
2883  }
2884  }
2885  }
2886 
2887  ff_rfps_calculate(ic);
2888 
2889  for (unsigned i = 0; i < ic->nb_streams; i++) {
2890  AVStream *const st = ic->streams[i];
2891  FFStream *const sti = ffstream(st);
2892  AVCodecContext *const avctx = sti->avctx;
2893 
2894  if (avctx->codec_type == AVMEDIA_TYPE_VIDEO) {
2895  if (avctx->codec_id == AV_CODEC_ID_RAWVIDEO && !avctx->codec_tag && !avctx->bits_per_coded_sample) {
2896  uint32_t tag= avcodec_pix_fmt_to_codec_tag(avctx->pix_fmt);
2898  avctx->codec_tag= tag;
2899  }
2900 
2901  /* estimate average framerate if not set by demuxer */
2902  if (sti->info->codec_info_duration_fields &&
2903  !st->avg_frame_rate.num &&
2904  sti->info->codec_info_duration) {
2905  int best_fps = 0;
2906  double best_error = 0.01;
2907  AVRational codec_frame_rate = avctx->framerate;
2908 
2909  if (sti->info->codec_info_duration >= INT64_MAX / st->time_base.num / 2||
2910  sti->info->codec_info_duration_fields >= INT64_MAX / st->time_base.den ||
2911  sti->info->codec_info_duration < 0)
2912  continue;
2915  sti->info->codec_info_duration * 2 * (int64_t) st->time_base.num, 60000);
2916 
2917  /* Round guessed framerate to a "standard" framerate if it's
2918  * within 1% of the original estimate. */
2919  for (int j = 0; j < MAX_STD_TIMEBASES; j++) {
2920  AVRational std_fps = { get_std_framerate(j), 12 * 1001 };
2921  double error = fabs(av_q2d(st->avg_frame_rate) /
2922  av_q2d(std_fps) - 1);
2923 
2924  if (error < best_error) {
2925  best_error = error;
2926  best_fps = std_fps.num;
2927  }
2928 
2930  codec_frame_rate.num > 0 && codec_frame_rate.den > 0) {
2931  error = fabs(av_q2d(codec_frame_rate) /
2932  av_q2d(std_fps) - 1);
2933  if (error < best_error) {
2934  best_error = error;
2935  best_fps = std_fps.num;
2936  }
2937  }
2938  }
2939  if (best_fps)
2941  best_fps, 12 * 1001, INT_MAX);
2942  }
2943  if (!st->r_frame_rate.num) {
2944  const AVCodecDescriptor *desc = sti->codec_desc;
2945  AVRational mul = (AVRational){ desc && (desc->props & AV_CODEC_PROP_FIELDS) ? 2 : 1, 1 };
2946  AVRational fr = av_mul_q(avctx->framerate, mul);
2947 
2948  if (fr.num && fr.den && av_cmp_q(st->time_base, av_inv_q(fr)) <= 0) {
2949  st->r_frame_rate = fr;
2950  } else {
2951  st->r_frame_rate.num = st->time_base.den;
2952  st->r_frame_rate.den = st->time_base.num;
2953  }
2954  }
2955  st->codecpar->framerate = avctx->framerate;
2956  if (sti->display_aspect_ratio.num && sti->display_aspect_ratio.den) {
2957  AVRational hw_ratio = { avctx->height, avctx->width };
2959  hw_ratio);
2960  }
2961  } else if (avctx->codec_type == AVMEDIA_TYPE_AUDIO) {
2962  if (!avctx->bits_per_coded_sample)
2963  avctx->bits_per_coded_sample =
2965  // set stream disposition based on audio service type
2966  switch (avctx->audio_service_type) {
2969  break;
2972  break;
2975  break;
2978  break;
2981  break;
2982  }
2983  }
2984  }
2985 
2986  if (probesize)
2987  estimate_timings(ic, old_offset);
2988 
2989  av_opt_set_int(ic, "skip_clear", 0, AV_OPT_SEARCH_CHILDREN);
2990 
2991  if (ret >= 0 && ic->nb_streams)
2992  /* We could not have all the codec parameters before EOF. */
2993  ret = -1;
2994  for (unsigned i = 0; i < ic->nb_streams; i++) {
2995  AVStream *const st = ic->streams[i];
2996  FFStream *const sti = ffstream(st);
2997  const char *errmsg;
2998 
2999  /* if no packet was ever seen, update context now for has_codec_parameters */
3000  if (!sti->avctx_inited) {
3001  if (st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO &&
3003  st->codecpar->format = sti->avctx->sample_fmt;
3005  if (ret < 0)
3006  goto find_stream_info_err;
3007  }
3008  if (!has_codec_parameters(st, &errmsg)) {
3009  char buf[256];
3010  avcodec_string(buf, sizeof(buf), sti->avctx, 0);
3011  av_log(ic, AV_LOG_WARNING,
3012  "Could not find codec parameters for stream %d (%s): %s\n"
3013  "Consider increasing the value for the 'analyzeduration' (%"PRId64") and 'probesize' (%"PRId64") options\n",
3014  i, buf, errmsg, ic->max_analyze_duration, ic->probesize);
3015  } else {
3016  ret = 0;
3017  }
3018  }
3019 
3020  err = compute_chapters_end(ic);
3021  if (err < 0) {
3022  ret = err;
3023  goto find_stream_info_err;
3024  }
3025 
3026  /* update the stream parameters from the internal codec contexts */
3027  for (unsigned i = 0; i < ic->nb_streams; i++) {
3028  AVStream *const st = ic->streams[i];
3029  FFStream *const sti = ffstream(st);
3030 
3031  if (sti->avctx_inited) {
3033  if (ret < 0)
3034  goto find_stream_info_err;
3035 
3036  if (sti->avctx->rc_buffer_size > 0 || sti->avctx->rc_max_rate > 0 ||
3037  sti->avctx->rc_min_rate) {
3038  size_t cpb_size;
3039  AVCPBProperties *props = av_cpb_properties_alloc(&cpb_size);
3040  if (props) {
3041  if (sti->avctx->rc_buffer_size > 0)
3042  props->buffer_size = sti->avctx->rc_buffer_size;
3043  if (sti->avctx->rc_min_rate > 0)
3044  props->min_bitrate = sti->avctx->rc_min_rate;
3045  if (sti->avctx->rc_max_rate > 0)
3046  props->max_bitrate = sti->avctx->rc_max_rate;
3050  (uint8_t *)props, cpb_size, 0))
3051  av_free(props);
3052  }
3053  }
3054  }
3055 
3056  sti->avctx_inited = 0;
3057  }
3058 
3059 find_stream_info_err:
3060  for (unsigned i = 0; i < ic->nb_streams; i++) {
3061  AVStream *const st = ic->streams[i];
3062  FFStream *const sti = ffstream(st);
3063  int err;
3064 
3065  if (sti->info) {
3066  av_freep(&sti->info->duration_error);
3067  av_freep(&sti->info);
3068  }
3069 
3070  if (avcodec_is_open(sti->avctx)) {
3071  err = codec_close(sti);
3072  if (err < 0 && ret >= 0)
3073  ret = err;
3074  }
3075 
3077  }
3078  if (ic->pb) {
3079  FFIOContext *const ctx = ffiocontext(ic->pb);
3080  av_log(ic, AV_LOG_DEBUG, "After avformat_find_stream_info() pos: %"PRId64" bytes read:%"PRId64" seeks:%d frames:%d\n",
3081  avio_tell(ic->pb), ctx->bytes_read, ctx->seek_count, count);
3082  }
3083  return ret;
3084 
3085 unref_then_goto_end:
3086  av_packet_unref(pkt1);
3087  goto find_stream_info_err;
3088 }
error
static void error(const char *err)
Definition: target_bsf_fuzzer.c:32
AV_OPT_SEARCH_CHILDREN
#define AV_OPT_SEARCH_CHILDREN
Search in possible children of the given object first.
Definition: opt.h:605
AVSubtitle
Definition: avcodec.h:2075
FFStreamInfo::fps_last_dts
int64_t fps_last_dts
Definition: demux.h:168
AVCodecContext::frame_size
int frame_size
Number of samples per channel in an audio frame.
Definition: avcodec.h:1051
av_opt_get_dict_val
int av_opt_get_dict_val(void *obj, const char *name, int search_flags, AVDictionary **out_val)
Definition: opt.c:1383
av_packet_unref
void av_packet_unref(AVPacket *pkt)
Wipe the packet.
Definition: packet.c:430
AVCodec
AVCodec.
Definition: codec.h:172
ff_rfps_add_frame
int ff_rfps_add_frame(AVFormatContext *ic, AVStream *st, int64_t ts)
add frame for rfps calculation.
Definition: demux.c:2277
FF_ENABLE_DEPRECATION_WARNINGS
#define FF_ENABLE_DEPRECATION_WARNINGS
Definition: internal.h:73
AVMEDIA_TYPE_SUBTITLE
@ AVMEDIA_TYPE_SUBTITLE
Definition: avutil.h:204
AVBSFContext::par_in
AVCodecParameters * par_in
Parameters of the input stream.
Definition: bsf.h:90
AV_LOG_WARNING
#define AV_LOG_WARNING
Something somehow does not look correct.
Definition: log.h:215
AVFMT_FLAG_DISCARD_CORRUPT
#define AVFMT_FLAG_DISCARD_CORRUPT
Discard frames marked corrupted.
Definition: avformat.h:1425
FFStream::skip_samples
int skip_samples
Number of samples to skip at the start of the frame decoded from the next packet.
Definition: internal.h:208
name
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 default minimum maximum flags name is the option name
Definition: writing_filters.txt:88
PacketList::head
PacketListEntry * head
Definition: packet_internal.h:34
AVCodecParserContext::pts
int64_t pts
Definition: avcodec.h:2586
DURATION_DEFAULT_MAX_RETRY
#define DURATION_DEFAULT_MAX_RETRY
Definition: demux.c:1811
AV_CODEC_ID_AC3
@ AV_CODEC_ID_AC3
Definition: codec_id.h:451
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
AVFMT_DURATION_FROM_BITRATE
@ AVFMT_DURATION_FROM_BITRATE
Duration estimated from bitrate (less accurate)
Definition: avformat.h:1248
av_opt_set_defaults
void av_opt_set_defaults(void *s)
Set the values of all AVOption fields to their default values.
Definition: opt.c:1678
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
av_probe_input_buffer2
int av_probe_input_buffer2(AVIOContext *pb, const AVInputFormat **fmt, const char *url, void *logctx, unsigned int offset, unsigned int max_probe_size)
Probe a bytestream to determine the input format.
Definition: format.c:251
AVCodecContext::audio_service_type
enum AVAudioServiceType audio_service_type
Type of service that the audio stream conveys.
Definition: avcodec.h:1071
AV_WL32
#define AV_WL32(p, v)
Definition: intreadwrite.h:422
av_compare_ts
int av_compare_ts(int64_t ts_a, AVRational tb_a, int64_t ts_b, AVRational tb_b)
Compare two timestamps each in its own time base.
Definition: mathematics.c:147
FF_FDEBUG_TS
#define FF_FDEBUG_TS
Definition: avformat.h:1541
AVSTREAM_EVENT_FLAG_NEW_PACKETS
#define AVSTREAM_EVENT_FLAG_NEW_PACKETS
Definition: avformat.h:869
av_add_stable
int64_t av_add_stable(AVRational ts_tb, int64_t ts, AVRational inc_tb, int64_t inc)
Add a value to a timestamp.
Definition: mathematics.c:191
ff_find_decoder
const AVCodec * ff_find_decoder(AVFormatContext *s, const AVStream *st, enum AVCodecID codec_id)
Definition: avformat.c:804
is_relative
static av_always_inline int is_relative(int64_t ts)
Definition: avformat_internal.h:107
FFStream::first_dts
int64_t first_dts
Timestamp corresponding to the last dts sync point.
Definition: internal.h:337
AVCodecParserContext::pict_type
int pict_type
Definition: avcodec.h:2575
AVCodecContext::sample_rate
int sample_rate
samples per second
Definition: avcodec.h:1024
AVCodecContext::rc_min_rate
int64_t rc_min_rate
minimum bitrate
Definition: avcodec.h:1277
AVCodecParameters
This struct describes the properties of an encoded stream.
Definition: codec_par.h:47
ffiocontext
static av_always_inline FFIOContext * ffiocontext(AVIOContext *ctx)
Definition: avio_internal.h:81
FFStream::bsf
struct AVBSFContext * bsf
Definition: internal.h:166
FFStream::last_IP_pts
int64_t last_IP_pts
Definition: internal.h:305
ffformatcontext
static av_always_inline FFFormatContext * ffformatcontext(AVFormatContext *s)
Definition: internal.h:123
AV_PKT_DATA_NEW_EXTRADATA
@ AV_PKT_DATA_NEW_EXTRADATA
The AV_PKT_DATA_NEW_EXTRADATA is used to notify the codec or the format that the extradata buffer was...
Definition: packet.h:56
AVERROR_EOF
#define AVERROR_EOF
End of file.
Definition: error.h:57
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:671
AVStream::discard
enum AVDiscard discard
Selects which packets can be discarded at will and do not need to be demuxed.
Definition: avformat.h:816
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:325
AV_PKT_FLAG_DISCARD
#define AV_PKT_FLAG_DISCARD
Flag is used to discard packets which are required to maintain valid decoder state but are not requir...
Definition: packet.h:597
AVCodecParserContext::duration
int duration
Duration of the current frame.
Definition: avcodec.h:2681
avcodec_string
void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode)
Definition: avcodec.c:501
AVFMT_NOTIMESTAMPS
#define AVFMT_NOTIMESTAMPS
Format does not need / have any timestamps.
Definition: avformat.h:479
AV_TIME_BASE_Q
#define AV_TIME_BASE_Q
Internal time base represented as fractional value.
Definition: avutil.h:264
int64_t
long long int64_t
Definition: coverity.c:34
AV_CODEC_ID_RAWVIDEO
@ AV_CODEC_ID_RAWVIDEO
Definition: codec_id.h:65
ff_buffer_packet
int ff_buffer_packet(AVFormatContext *s, AVPacket *pkt)
Definition: demux.c:613
AV_CODEC_ID_MPEG4
@ AV_CODEC_ID_MPEG4
Definition: codec_id.h:64
av_frame_free
void av_frame_free(AVFrame **frame)
Free the frame and any dynamically allocated objects in it, e.g.
Definition: frame.c:63
FormatContextInternal::raw_packet_buffer
PacketList raw_packet_buffer
Raw packets from the demuxer, prior to parsing and decoding.
Definition: avformat_internal.h:75
id3v2.h
FFStream::first_discard_sample
int64_t first_discard_sample
If not 0, the first audio sample that should be discarded from the stream.
Definition: internal.h:225
AVFrame
This structure describes decoded (raw) audio or video data.
Definition: frame.h:410
AVFormatContext::streams
AVStream ** streams
A list of all streams in the file.
Definition: avformat.h:1333
AVPacketSideData
This structure stores auxiliary information for decoding, presenting, or otherwise processing the cod...
Definition: packet.h:386
AVCodec::capabilities
int capabilities
Codec capabilities.
Definition: codec.h:191
internal.h
AVPacket::data
uint8_t * data
Definition: packet.h:535
AV_CODEC_ID_DVB_TELETEXT
@ AV_CODEC_ID_DVB_TELETEXT
Definition: codec_id.h:565
extract_extradata_check
static int extract_extradata_check(AVStream *st)
Definition: demux.c:2402
AVStream::avg_frame_rate
AVRational avg_frame_rate
Average framerate.
Definition: avformat.h:834
AVChapter::start
int64_t start
Definition: avformat.h:1227
AVFMT_FLAG_CUSTOM_IO
#define AVFMT_FLAG_CUSTOM_IO
The caller has supplied a custom AVIOContext, don't avio_close() it.
Definition: avformat.h:1424
data
const char data[16]
Definition: mxf.c:149
has_duration
static int has_duration(AVFormatContext *ic)
Return TRUE if the stream has accurate duration in any stream.
Definition: demux.c:1629
AVFormatContext::duration_estimation_method
enum AVDurationEstimationMethod duration_estimation_method
The duration field can be estimated through various ways, and this field can be used to know how the ...
Definition: avformat.h:1693
AVCodecParameters::framerate
AVRational framerate
Video only.
Definition: codec_par.h:156
AV_LOG_VERBOSE
#define AV_LOG_VERBOSE
Detailed information.
Definition: log.h:225
AVFormatContext::programs
AVProgram ** programs
Definition: avformat.h:1463
handle_new_packet
static int handle_new_packet(AVFormatContext *s, AVPacket *pkt, int allow_passthrough)
Handle a new packet and either return it directly if possible and allow_passthrough is true or queue ...
Definition: demux.c:568
AVPacket::duration
int64_t duration
Duration of this packet in AVStream->time_base units, 0 if unknown.
Definition: packet.h:553
ts_to_samples
static int64_t ts_to_samples(AVStream *st, int64_t ts)
Definition: demux.c:1287
FormatContextInternal::metafree
int metafree
Contexts and child contexts do not contain a metadata option.
Definition: avformat_internal.h:90
mathematics.h
AVDictionary
Definition: dict.c:32
AVProbeData::buf_size
int buf_size
Size of buf except extra allocated bytes.
Definition: avformat.h:454
FFMAX
#define FFMAX(a, b)
Definition: macros.h:47
av_buffer_ref
AVBufferRef * av_buffer_ref(const AVBufferRef *buf)
Create a new reference to an AVBuffer.
Definition: buffer.c:103
AVFormatContext::probesize
int64_t probesize
Maximum number of bytes read from input in order to determine stream properties.
Definition: avformat.h:1449
estimate_timings_from_pts
static void estimate_timings_from_pts(AVFormatContext *ic, int64_t old_offset)
Definition: demux.c:1815
av_read_frame
int av_read_frame(AVFormatContext *s, AVPacket *pkt)
Return the next frame of a stream.
Definition: demux.c:1529
cffstream
static const av_always_inline FFStream * cffstream(const AVStream *st)
Definition: internal.h:352
avcodec_is_open
int avcodec_is_open(AVCodecContext *s)
Definition: avcodec.c:700
AVChannelLayout::nb_channels
int nb_channels
Number of channels in this layout.
Definition: channel_layout.h:329
wrap_timestamp
static int64_t wrap_timestamp(const AVStream *st, int64_t timestamp)
Definition: demux.c:53
FFInputFormat::priv_data_size
int priv_data_size
Size of private data so that it can be allocated in the wrapper.
Definition: demux.h:56
FFStream::last_dts_for_order_check
int64_t last_dts_for_order_check
Internal data to analyze DTS and detect faulty mpeg streams.
Definition: internal.h:287
AV_CODEC_ID_HDMV_PGS_SUBTITLE
@ AV_CODEC_ID_HDMV_PGS_SUBTITLE
Definition: codec_id.h:564
FFInputFormat::read_header
int(* read_header)(struct AVFormatContext *)
Read the format header and initialize the AVFormatContext structure.
Definition: demux.h:75
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
avio_size
int64_t avio_size(AVIOContext *s)
Get the filesize.
Definition: aviobuf.c:323
AV_CODEC_ID_TRUEHD
@ AV_CODEC_ID_TRUEHD
Definition: codec_id.h:492
update_stream_timings
static void update_stream_timings(AVFormatContext *ic)
Estimate the stream timings from the one of each components.
Definition: demux.c:1646
FFIOContext
Definition: avio_internal.h:28
AV_PKT_FLAG_KEY
#define AV_PKT_FLAG_KEY
The packet contains a keyframe.
Definition: packet.h:590
codec_close
static int codec_close(FFStream *sti)
Definition: demux.c:1292
FormatContextInternal
Definition: avformat_internal.h:33
AVINDEX_KEYFRAME
#define AVINDEX_KEYFRAME
Definition: avformat.h:607
FFStream::codec_desc
const struct AVCodecDescriptor * codec_desc
Definition: internal.h:340
avcodec_pix_fmt_to_codec_tag
unsigned int avcodec_pix_fmt_to_codec_tag(enum AVPixelFormat pix_fmt)
Return a value representing the fourCC code associated to the pixel format pix_fmt,...
Definition: raw.c:31
av_gcd
int64_t av_gcd(int64_t a, int64_t b)
Compute the greatest common divisor of two integer operands.
Definition: mathematics.c:37
genpts
static int genpts
Definition: ffplay.c:329
av_filename_number_test
int av_filename_number_test(const char *filename)
Check whether filename actually is a numbered sequence generator.
Definition: utils.c:117
av_memdup
void * av_memdup(const void *p, size_t size)
Duplicate a buffer with av_malloc().
Definition: mem.c:304
avformat_queue_attached_pictures
int avformat_queue_attached_pictures(AVFormatContext *s)
Definition: demux_utils.c:84
AVCodecContext::framerate
AVRational framerate
Definition: avcodec.h:551
avformat_close_input
void avformat_close_input(AVFormatContext **ps)
Close an opened input AVFormatContext.
Definition: demux.c:367
AVPacketSideData::size
size_t size
Definition: packet.h:388
AVCodecParserContext::offset
int64_t offset
byte offset from starting packet start
Definition: avcodec.h:2607
MAX_STD_TIMEBASES
#define MAX_STD_TIMEBASES
Definition: demux.h:143
AVFormatContext::interrupt_callback
AVIOInterruptCB interrupt_callback
Custom interrupt callbacks for the I/O layer.
Definition: avformat.h:1535
AVCodecParserContext::key_frame
int key_frame
Set by parser to 1 for key frames and 0 for non-key frames.
Definition: avcodec.h:2616
FFStream::dts_ordered
uint8_t dts_ordered
Definition: internal.h:288
finish
static void finish(void)
Definition: movenc.c:374
FFStream::last_IP_duration
int last_IP_duration
Definition: internal.h:306
force_codec_ids
static void force_codec_ids(AVFormatContext *s, AVStream *st)
Definition: demux.c:393
bsf.h
FFStream::extract_extradata
struct FFStream::@410 extract_extradata
AVCodecContext::codec
const struct AVCodec * codec
Definition: avcodec.h:440
ffstream
static av_always_inline FFStream * ffstream(AVStream *st)
Definition: internal.h:347
AVCodecContext::ch_layout
AVChannelLayout ch_layout
Audio channel layout.
Definition: avcodec.h:1039
update_initial_timestamps
static void update_initial_timestamps(AVFormatContext *s, int stream_index, int64_t dts, int64_t pts, AVPacket *pkt)
Definition: demux.c:854
AVCodecContext::skip_frame
enum AVDiscard skip_frame
Skip decoding for selected frames.
Definition: avcodec.h:1662
fail
#define fail()
Definition: checkasm.h:194
av_add_index_entry
int av_add_index_entry(AVStream *st, int64_t pos, int64_t timestamp, int size, int distance, int flags)
Add an index entry into a sorted list.
Definition: seek.c:122
AVSTREAM_PARSE_FULL_ONCE
@ AVSTREAM_PARSE_FULL_ONCE
full parsing and repack of the first frame only, only implemented for H.264 currently
Definition: avformat.h:593
FFStreamInfo::fps_first_dts
int64_t fps_first_dts
Those are used for average framerate estimation.
Definition: demux.h:166
FFStream::inited
int inited
Definition: internal.h:167
avio_tell
static av_always_inline int64_t avio_tell(AVIOContext *s)
ftell() equivalent for AVIOContext.
Definition: avio.h:494
avpriv_packet_list_get
int avpriv_packet_list_get(PacketList *pkt_buffer, AVPacket *pkt)
Remove the oldest AVPacket in the list and return it.
Definition: packet.c:583
AVERROR_OPTION_NOT_FOUND
#define AVERROR_OPTION_NOT_FOUND
Option not found.
Definition: error.h:63
FFStream::avctx
struct AVCodecContext * avctx
The codec context used by avformat_find_stream_info, the parser, etc.
Definition: internal.h:156
AVChapter
Definition: avformat.h:1224
AVFMT_GENERIC_INDEX
#define AVFMT_GENERIC_INDEX
Use generic index building code.
Definition: avformat.h:480
AVFMT_DURATION_FROM_PTS
@ AVFMT_DURATION_FROM_PTS
Duration accurately estimated from PTSes.
Definition: avformat.h:1246
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
AVPROBE_PADDING_SIZE
#define AVPROBE_PADDING_SIZE
extra allocated bytes at the end of the probe buffer
Definition: avformat.h:465
av_parser_init
AVCodecParserContext * av_parser_init(int codec_id)
Definition: parser.c:32
pts
static int64_t pts
Definition: transcode_aac.c:644
AV_CODEC_ID_MP3
@ AV_CODEC_ID_MP3
preferred ID for decoding MPEG audio layer 1, 2 or 3
Definition: codec_id.h:449
AVStream::duration
int64_t duration
Decoding: duration of the stream, in stream time base.
Definition: avformat.h:804
av_probe_input_format3
const AVInputFormat * av_probe_input_format3(const AVProbeData *pd, int is_opened, int *score_ret)
Guess the file format.
Definition: format.c:154
AV_PTS_WRAP_IGNORE
#define AV_PTS_WRAP_IGNORE
Options for behavior on timestamp wrap detection.
Definition: avformat.h:734
ff_check_interrupt
int ff_check_interrupt(AVIOInterruptCB *cb)
Check if the user has requested to interrupt a blocking function associated with cb.
Definition: avio.c:854
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
extract_extradata_init
static int extract_extradata_init(AVStream *st)
Definition: demux.c:2418
AVCodecParserContext::dts
int64_t dts
Definition: avcodec.h:2587
AVRational::num
int num
Numerator.
Definition: rational.h:59
FFDIFFSIGN
#define FFDIFFSIGN(x, y)
Comparator.
Definition: macros.h:45
ff_id3v2_parse_chapters
int ff_id3v2_parse_chapters(AVFormatContext *s, ID3v2ExtraMeta *cur)
Create chapters for all CHAP tags found in the ID3v2 header.
Definition: id3v2.c:1201
avsubtitle_free
void avsubtitle_free(AVSubtitle *sub)
Free all allocated data in the given subtitle struct.
Definition: avcodec.c:406
raw.h
av_frame_alloc
AVFrame * av_frame_alloc(void)
Allocate an AVFrame and set its fields to default values.
Definition: frame.c:51
AV_CODEC_ID_DVB_SUBTITLE
@ AV_CODEC_ID_DVB_SUBTITLE
Definition: codec_id.h:559
AVFormatContext::bit_rate
int64_t bit_rate
Total stream bitrate in bit/s, 0 if not available.
Definition: avformat.h:1407
av_get_bits_per_sample
int av_get_bits_per_sample(enum AVCodecID codec_id)
Return codec bits per sample.
Definition: utils.c:547
avcodec_decode_subtitle2
int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub, int *got_sub_ptr, const AVPacket *avpkt)
Decode a subtitle message.
Definition: decode.c:909
AV_DISPOSITION_CLEAN_EFFECTS
#define AV_DISPOSITION_CLEAN_EFFECTS
The audio stream contains music and sound effects without voice.
Definition: avformat.h:663
AVFormatContext::max_ts_probe
int max_ts_probe
Maximum number of packets to read while waiting for the first timestamp.
Definition: avformat.h:1590
avassert.h
AV_LOG_TRACE
#define AV_LOG_TRACE
Extremely verbose debugging, useful for libav* development.
Definition: log.h:235
pkt
AVPacket * pkt
Definition: movenc.c:60
chapter_start_cmp
static int chapter_start_cmp(const void *p1, const void *p2)
Definition: demux.c:2181
AV_LOG_ERROR
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:209
AV_CODEC_CAP_EXPERIMENTAL
#define AV_CODEC_CAP_EXPERIMENTAL
Codec is experimental and is thus avoided in favor of non experimental encoders.
Definition: codec.h:87
AVInputFormat
Definition: avformat.h:545
AV_PKT_FLAG_CORRUPT
#define AV_PKT_FLAG_CORRUPT
The packet content is corrupted.
Definition: packet.h:591
ID3v2ExtraMeta
Definition: id3v2.h:84
AVFormatContext::ctx_flags
int ctx_flags
Flags signalling stream properties.
Definition: avformat.h:1314
duration
int64_t duration
Definition: movenc.c:65
avformat_open_input
int avformat_open_input(AVFormatContext **ps, const char *filename, const AVInputFormat *fmt, AVDictionary **options)
Open an input stream and read the header.
Definition: demux.c:217
AVCodecContext::extradata_size
int extradata_size
Definition: avcodec.h:515
AVCodecContext::has_b_frames
int has_b_frames
Size of the frame reordering buffer in the decoder.
Definition: avcodec.h:697
avcodec_alloc_context3
AVCodecContext * avcodec_alloc_context3(const AVCodec *codec)
Allocate an AVCodecContext and set its fields to default values.
Definition: options.c:149
AVChapter::end
int64_t end
chapter start/end time in time_base units
Definition: avformat.h:1227
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
AV_CODEC_ID_EVC
@ AV_CODEC_ID_EVC
Definition: codec_id.h:325
FFInputFormat::flags_internal
int flags_internal
Internal flags.
Definition: demux.h:61
FFFormatContext::packet_buffer
PacketList packet_buffer
This buffer is only needed when packets were already buffered but not decoded, for example to get the...
Definition: internal.h:86
FFStreamInfo::last_dts
int64_t last_dts
Definition: demux.h:145
AVFormatContext::flags
int flags
Flags modifying the (de)muxer behaviour.
Definition: avformat.h:1416
AVCodecParameters::sample_aspect_ratio
AVRational sample_aspect_ratio
Video only.
Definition: codec_par.h:144
duration_name
static const char *const duration_name[]
Definition: demux.c:1957
AVFormatContext::nb_programs
unsigned int nb_programs
Definition: avformat.h:1462
AVInputFormat::name
const char * name
A comma separated list of short names for the format.
Definition: avformat.h:550
bitrate
int64_t bitrate
Definition: av1_levels.c:47
AVFormatContext::iformat
const struct AVInputFormat * iformat
The input container format.
Definition: avformat.h:1277
AVProbeData::buf
unsigned char * buf
Buffer must have AVPROBE_PADDING_SIZE of extra allocated bytes filled with zero.
Definition: avformat.h:453
frame_size
int frame_size
Definition: mxfenc.c:2446
AVMEDIA_TYPE_AUDIO
@ AVMEDIA_TYPE_AUDIO
Definition: avutil.h:202
AV_CODEC_ID_MP2
@ AV_CODEC_ID_MP2
Definition: codec_id.h:448
av_q2d
static double av_q2d(AVRational a)
Convert an AVRational to a double.
Definition: rational.h:104
info
MIPS optimizations info
Definition: mips.txt:2
FFStream::nb_decoded_frames
int nb_decoded_frames
Number of internally decoded frames, used internally in libavformat, do not access its lifetime diffe...
Definition: internal.h:238
av_opt_set_dict_val
int av_opt_set_dict_val(void *obj, const char *name, const AVDictionary *val, int search_flags)
Definition: opt.c:984
avpriv_h264_has_num_reorder_frames
int avpriv_h264_has_num_reorder_frames(AVCodecContext *avctx)
Definition: h264dec.c:61
avcodec_receive_frame
int attribute_align_arg avcodec_receive_frame(AVCodecContext *avctx, AVFrame *frame)
Return decoded output data from a decoder or encoder (when the AV_CODEC_FLAG_RECON_FRAME flag is used...
Definition: avcodec.c:705
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:230
AVPacketSideData::data
uint8_t * data
Definition: packet.h:387
FFFormatContext::data_offset
int64_t data_offset
offset of the first packet
Definition: internal.h:89
ctx
AVFormatContext * ctx
Definition: movenc.c:49
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:320
AVBSFContext::time_base_in
AVRational time_base_in
The timebase used for the timestamps of the input packets.
Definition: bsf.h:102
FFStream::pts_reorder_error_count
uint8_t pts_reorder_error_count[MAX_REORDER_DELAY+1]
Definition: internal.h:280
av_rescale_q
int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq)
Rescale a 64-bit integer by 2 rational numbers.
Definition: mathematics.c:142
FFStream::display_aspect_ratio
AVRational display_aspect_ratio
display aspect ratio (0 if unknown)
Definition: internal.h:296
AV_AUDIO_SERVICE_TYPE_HEARING_IMPAIRED
@ AV_AUDIO_SERVICE_TYPE_HEARING_IMPAIRED
Definition: defs.h:228
av_bsf_alloc
int av_bsf_alloc(const AVBitStreamFilter *filter, AVBSFContext **pctx)
Allocate a context for a given bitstream filter.
Definition: bsf.c:104
RELATIVE_TS_BASE
#define RELATIVE_TS_BASE
Definition: avformat_internal.h:105
DURATION_MAX_RETRY
#define DURATION_MAX_RETRY
Definition: demux.c:1812
AV_CODEC_ID_CODEC2
@ AV_CODEC_ID_CODEC2
Definition: codec_id.h:515
codec_id
enum AVCodecID codec_id
Definition: vaapi_decode.c:410
AVProgram::start_time
int64_t start_time
Definition: avformat.h:1209
AVCodecContext::rc_max_rate
int64_t rc_max_rate
maximum bitrate
Definition: avcodec.h:1270
AVCodecParameters::nb_coded_side_data
int nb_coded_side_data
Amount of entries in coded_side_data.
Definition: codec_par.h:86
AVMEDIA_TYPE_DATA
@ AVMEDIA_TYPE_DATA
Opaque data information usually continuous.
Definition: avutil.h:203
AV_ROUND_NEAR_INF
@ AV_ROUND_NEAR_INF
Round to nearest and halfway cases away from zero.
Definition: mathematics.h:135
FFStream::pts_reorder_error
int64_t pts_reorder_error[MAX_REORDER_DELAY+1]
Internal data to generate dts from pts.
Definition: internal.h:279
determinable_frame_size
static int determinable_frame_size(const AVCodecContext *avctx)
Definition: demux.c:2017
AVCPBProperties
This structure describes the bitrate properties of an encoded bitstream.
Definition: defs.h:271
AV_CODEC_ID_H264
@ AV_CODEC_ID_H264
Definition: codec_id.h:79
AV_ROUND_PASS_MINMAX
@ AV_ROUND_PASS_MINMAX
Flag telling rescaling functions to pass INT64_MIN/MAX through unchanged, avoiding special cases for ...
Definition: mathematics.h:159
PacketList::tail
PacketListEntry * tail
Definition: packet_internal.h:34
AVFMT_NEEDNUMBER
#define AVFMT_NEEDNUMBER
Needs 'd' in filename.
Definition: avformat.h:469
AVCodecContext::codec_id
enum AVCodecID codec_id
Definition: avcodec.h:441
FFStreamInfo::found_decoder
int found_decoder
0 -> decoder has not been searched for yet.
Definition: demux.h:159
AVFormatContext::max_analyze_duration
int64_t max_analyze_duration
Maximum duration (in AV_TIME_BASE units) of the data read from input in avformat_find_stream_info().
Definition: avformat.h:1457
AVCodecDescriptor::props
int props
Codec properties, a combination of AV_CODEC_PROP_* flags.
Definition: codec_desc.h:54
AVFMT_FLAG_NOPARSE
#define AVFMT_FLAG_NOPARSE
Do not use AVParsers, you also must set AVFMT_FLAG_NOFILLIN as the fillin code works on frames and no...
Definition: avformat.h:1422
fields
the definition of that something depends on the semantic of the filter The callback must examine the status of the filter s links and proceed accordingly The status of output links is stored in the status_in and status_out fields and tested by the then the processing requires a frame on this link and the filter is expected to make efforts in that direction The status of input links is stored by the fifo and status_out fields
Definition: filter_design.txt:155
FFABS
#define FFABS(a)
Absolute value, Note, INT_MIN / INT64_MIN result in undefined behavior as they are not representable ...
Definition: common.h:74
if
if(ret)
Definition: filter_design.txt:179
av_probe_input_format2
const AVInputFormat * av_probe_input_format2(const AVProbeData *pd, int is_opened, int *score_max)
Guess the file format.
Definition: format.c:233
get_std_framerate
static int get_std_framerate(int i)
Definition: demux.c:2228
has_codec_parameters
static int has_codec_parameters(const AVStream *st, const char **errmsg_ptr)
Definition: demux.c:2030
FFFormatContext
Definition: internal.h:64
FF_INFMT_FLAG_INIT_CLEANUP
#define FF_INFMT_FLAG_INIT_CLEANUP
For an FFInputFormat with this flag set read_close() needs to be called by the caller upon read_heade...
Definition: demux.h:35
AVCodecParserContext::repeat_pict
int repeat_pict
This field is used for proper frame duration computation in lavf.
Definition: avcodec.h:2585
FFStream::need_parsing
enum AVStreamParseType need_parsing
Definition: internal.h:314
AVCodecContext::rc_buffer_size
int rc_buffer_size
decoder bitstream buffer size
Definition: avcodec.h:1255
AVDISCARD_ALL
@ AVDISCARD_ALL
discard all
Definition: defs.h:221
AVFormatContext
Format I/O context.
Definition: avformat.h:1265
opts
AVDictionary * opts
Definition: movenc.c:51
AVPacket::buf
AVBufferRef * buf
A reference to the reference-counted buffer where the packet data is stored.
Definition: packet.h:518
AVStream::codecpar
AVCodecParameters * codecpar
Codec parameters associated with this stream.
Definition: avformat.h:768
avcodec_parameters_to_context
int avcodec_parameters_to_context(AVCodecContext *codec, const struct AVCodecParameters *par)
Fill the codec context based on the values from the supplied codec parameters.
framerate
float framerate
Definition: av1_levels.c:29
av_bsf_init
int av_bsf_init(AVBSFContext *ctx)
Prepare the filter for use, after all the parameters and options have been set.
Definition: bsf.c:149
AVClass
Describe the class of an AVClass context structure.
Definition: log.h:75
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:784
NULL
#define NULL
Definition: coverity.c:32
FFStream::avctx_inited
int avctx_inited
1 if avctx has been initialized with the values from the codec parameters
Definition: internal.h:160
avcodec_find_decoder_by_name
const AVCodec * avcodec_find_decoder_by_name(const char *name)
Find a registered decoder with the specified name.
Definition: allcodecs.c:1044
av_match_list
int av_match_list(const char *name, const char *list, char separator)
Check if a name is in a list.
Definition: avstring.c:444
AV_CODEC_ID_AV1
@ AV_CODEC_ID_AV1
Definition: codec_id.h:284
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
AVFMTCTX_NOHEADER
#define AVFMTCTX_NOHEADER
signal that no header is present (streams are added dynamically)
Definition: avformat.h:1216
tmp
static uint8_t tmp[20]
Definition: aes_ctr.c:47
av_bsf_receive_packet
int av_bsf_receive_packet(AVBSFContext *ctx, AVPacket *pkt)
Retrieve a filtered packet.
Definition: bsf.c:230
FFStreamInfo::codec_info_duration
int64_t codec_info_duration
Definition: demux.h:150
avpriv_packet_list_put
int avpriv_packet_list_put(PacketList *packet_buffer, AVPacket *pkt, int(*copy)(AVPacket *dst, const AVPacket *src), int flags)
Append an AVPacket to the list.
Definition: packet.c:544
AVFormatContext::fps_probe_size
int fps_probe_size
The number of frames used for determining the framerate in avformat_find_stream_info().
Definition: avformat.h:1517
avcodec_free_context
void avcodec_free_context(AVCodecContext **avctx)
Free the codec context and everything associated with it and write NULL to the provided pointer.
Definition: options.c:164
AVRational
Rational number (pair of numerator and denominator).
Definition: rational.h:58
AVFMT_DURATION_FROM_STREAM
@ AVFMT_DURATION_FROM_STREAM
Duration estimated from a stream with a known duration.
Definition: avformat.h:1247
AVCodecContext::bit_rate
int64_t bit_rate
the average bitrate
Definition: avcodec.h:481
AVPacketSideData::type
enum AVPacketSideDataType type
Definition: packet.h:389
AV_DISPOSITION_COMMENT
#define AV_DISPOSITION_COMMENT
The stream is a commentary track.
Definition: avformat.h:636
AVSTREAM_PARSE_NONE
@ AVSTREAM_PARSE_NONE
Definition: avformat.h:589
update_initial_durations
static void update_initial_durations(AVFormatContext *s, AVStream *st, int stream_index, int64_t duration)
Definition: demux.c:908
AV_PICTURE_TYPE_I
@ AV_PICTURE_TYPE_I
Intra.
Definition: avutil.h:279
ff_id3v2_parse_apic
int ff_id3v2_parse_apic(AVFormatContext *s, ID3v2ExtraMeta *extra_meta)
Create a stream for each APIC (attached picture) extracted from the ID3v2 header.
Definition: id3v2.c:1170
AVFormatContext::pb
AVIOContext * pb
I/O context.
Definition: avformat.h:1307
probe_codec
static int probe_codec(AVFormatContext *s, AVStream *st, const AVPacket *pkt)
Definition: demux.c:415
AVDurationEstimationMethod
AVDurationEstimationMethod
The duration of a video can be estimated through various ways, and this enum can be used to know how ...
Definition: avformat.h:1245
AVFormatContext::duration_probesize
int64_t duration_probesize
Maximum number of bytes read from input in order to determine stream durations when using estimate_ti...
Definition: avformat.h:1889
AVProbeData
This structure contains the data a format has to probe a file.
Definition: avformat.h:451
flush
void(* flush)(AVBSFContext *ctx)
Definition: dts2pts.c:370
options
Definition: swscale.c:43
get_next_pkt
static PacketListEntry * get_next_pkt(AVFormatContext *s, AVStream *st, PacketListEntry *pktl)
Definition: demux.c:769
double
double
Definition: af_crystalizer.c:132
avcodec_open2
int attribute_align_arg avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options)
Initialize the AVCodecContext to use the given AVCodec.
Definition: avcodec.c:143
AVCodecParserContext::flags
int flags
Definition: avcodec.h:2600
time.h
AVFormatContext::skip_estimate_duration_from_pts
int skip_estimate_duration_from_pts
Skip duration calcuation in estimate_timings_from_pts.
Definition: avformat.h:1678
FFStreamInfo::codec_info_duration_fields
int64_t codec_info_duration_fields
Definition: demux.h:151
av_packet_ref
int av_packet_ref(AVPacket *dst, const AVPacket *src)
Setup a new reference to the data described by a given packet.
Definition: packet.c:438
FormatContextInternal::fc
FFFormatContext fc
Definition: avformat_internal.h:34
AVCodecParameters::ch_layout
AVChannelLayout ch_layout
Audio only.
Definition: codec_par.h:180
PacketListEntry::next
struct PacketListEntry * next
Definition: packet_internal.h:29
close
av_cold void CBS_FUNC() close(CodedBitstreamContext **ctx_ptr)
Close a context and free all internal state.
Definition: cbs.c:140
read_frame_internal
static int read_frame_internal(AVFormatContext *s, AVPacket *pkt)
Definition: demux.c:1335
c
Undefined Behavior In the C some operations are like signed integer dereferencing freed accessing outside allocated Undefined Behavior must not occur in a C it is not safe even if the output of undefined operations is unused The unsafety may seem nit picking but Optimizing compilers have in fact optimized code on the assumption that no undefined Behavior occurs Optimizing code based on wrong assumptions can and has in some cases lead to effects beyond the output of computations The signed integer overflow problem in speed critical code Code which is highly optimized and works with signed integers sometimes has the problem that often the output of the computation does not c
Definition: undefined.txt:32
FAIL
#define FAIL(errmsg)
AVCodecParameters::sample_rate
int sample_rate
Audio only.
Definition: codec_par.h:184
av_opt_set_int
int av_opt_set_int(void *obj, const char *name, int64_t val, int search_flags)
Definition: opt.c:880
duration_estimate_name
static const char * duration_estimate_name(enum AVDurationEstimationMethod method)
Definition: demux.c:1963
AVCodecID
AVCodecID
Identify the syntax and semantics of the bitstream.
Definition: codec_id.h:49
FFInputFormat::read_packet
int(* read_packet)(struct AVFormatContext *, AVPacket *pkt)
Read one packet and put it in 'pkt'.
Definition: demux.h:85
AV_CODEC_ID_EAC3
@ AV_CODEC_ID_EAC3
Definition: codec_id.h:488
AVFormatContext::nb_streams
unsigned int nb_streams
Number of elements in AVFormatContext.streams.
Definition: avformat.h:1321
AV_CODEC_CAP_CHANNEL_CONF
#define AV_CODEC_CAP_CHANNEL_CONF
Codec should fill in channel configuration and samplerate instead of container.
Definition: codec.h:91
FFFormatContext::id3v2_meta
AVDictionary * id3v2_meta
ID3v2 tag useful for MP3 demuxing.
Definition: internal.h:118
AV_CODEC_ID_AAC
@ AV_CODEC_ID_AAC
Definition: codec_id.h:450
AVFMT_FLAG_NOFILLIN
#define AVFMT_FLAG_NOFILLIN
Do not infer any values from other values, just return what is stored in the container.
Definition: avformat.h:1421
FormatContextInternal::raw_packet_buffer_size
int raw_packet_buffer_size
Sum of the size of packets in raw_packet_buffer, in bytes.
Definition: avformat_internal.h:80
AV_ROUND_DOWN
@ AV_ROUND_DOWN
Round toward -infinity.
Definition: mathematics.h:133
av_codec_is_decoder
int av_codec_is_decoder(const AVCodec *codec)
Definition: utils.c:85
av_sat_sub64
#define av_sat_sub64
Definition: common.h:142
av_rescale_rnd
int64_t av_rescale_rnd(int64_t a, int64_t b, int64_t c, enum AVRounding rnd)
Rescale a 64-bit integer with specified rounding.
Definition: mathematics.c:58
avformat_find_stream_info
int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options)
Read packets of a media file to get stream information.
Definition: demux.c:2507
f
f
Definition: af_crystalizer.c:122
AVIOContext
Bytestream IO Context.
Definition: avio.h:160
av_ts2timestr
#define av_ts2timestr(ts, tb)
Convenience macro, the return value should be used only directly in function arguments but never stan...
Definition: timestamp.h:83
AVMediaType
AVMediaType
Definition: avutil.h:199
AVCodecParserContext::frame_offset
int64_t frame_offset
Definition: avcodec.h:2570
AV_PTS_WRAP_SUB_OFFSET
#define AV_PTS_WRAP_SUB_OFFSET
subtract the format specific offset on wrap detection
Definition: avformat.h:736
AVPacket::size
int size
Definition: packet.h:536
avpriv_pix_fmt_find
enum AVPixelFormat avpriv_pix_fmt_find(enum PixelFormatTagLists list, unsigned fourcc)
Definition: raw.c:78
FFFormatContext::parse_pkt
AVPacket * parse_pkt
The generic code uses this as a temporary packet to parse packets or for muxing, especially flushing.
Definition: internal.h:104
FFStreamInfo
Definition: demux.h:144
avformat_alloc_context
AVFormatContext * avformat_alloc_context(void)
Allocate an AVFormatContext.
Definition: options.c:162
init_input
static int init_input(AVFormatContext *s, const char *filename, AVDictionary **options)
Definition: demux.c:158
AVIOContext::seekable
int seekable
A combination of AVIO_SEEKABLE_ flags or 0 when the stream is not seekable.
Definition: avio.h:261
FFStream
Definition: internal.h:128
shift
static int shift(int a, int b)
Definition: bonk.c:261
av_bsf_send_packet
int av_bsf_send_packet(AVBSFContext *ctx, AVPacket *pkt)
Submit a packet for filtering.
Definition: bsf.c:202
AVProgram::end_time
int64_t end_time
Definition: avformat.h:1210
start_time
static int64_t start_time
Definition: ffplay.c:326
AV_CODEC_ID_DTS
@ AV_CODEC_ID_DTS
Definition: codec_id.h:452
AVCodecContext::sample_fmt
enum AVSampleFormat sample_fmt
audio sample format
Definition: avcodec.h:1031
AVCodecContext::pkt_timebase
AVRational pkt_timebase
Timebase in which pkt_dts/pts and AVPacket.dts/pts are expressed.
Definition: avcodec.h:542
AV_SAMPLE_FMT_NONE
@ AV_SAMPLE_FMT_NONE
Definition: samplefmt.h:56
sample
#define sample
Definition: flacdsp_template.c:44
FFStreamInfo::duration_count
int duration_count
Definition: demux.h:147
size
int size
Definition: twinvq_data.h:10344
FF_INFMT_FLAG_PREFER_CODEC_FRAMERATE
#define FF_INFMT_FLAG_PREFER_CODEC_FRAMERATE
Definition: demux.h:40
ID3v2_DEFAULT_MAGIC
#define ID3v2_DEFAULT_MAGIC
Default magic bytes for ID3v2 header: "ID3".
Definition: id3v2.h:35
PIX_FMT_LIST_RAW
@ PIX_FMT_LIST_RAW
Definition: raw.h:38
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
update_wrap_reference
static int update_wrap_reference(AVFormatContext *s, AVStream *st, int stream_index, AVPacket *pkt)
Definition: demux.c:468
AVStream::event_flags
int event_flags
Flags indicating events happening on the stream, a combination of AVSTREAM_EVENT_FLAG_*.
Definition: avformat.h:856
FFStream::dts_misordered
uint8_t dts_misordered
Definition: internal.h:289
av_get_audio_frame_duration2
int av_get_audio_frame_duration2(AVCodecParameters *par, int frame_bytes)
This function is the same as av_get_audio_frame_duration(), except it works with AVCodecParameters in...
Definition: utils.c:802
PacketListEntry::pkt
AVPacket pkt
Definition: packet_internal.h:30
AV_PTS_WRAP_ADD_OFFSET
#define AV_PTS_WRAP_ADD_OFFSET
add the format specific offset on wrap detection
Definition: avformat.h:735
AVFMT_FLAG_IGNDTS
#define AVFMT_FLAG_IGNDTS
Ignore DTS on frames that contain both DTS & PTS.
Definition: avformat.h:1420
AVFMT_NOFILE
#define AVFMT_NOFILE
Demuxer will use avio_open, no opened file should be provided by the caller.
Definition: avformat.h:468
AVMEDIA_TYPE_UNKNOWN
@ AVMEDIA_TYPE_UNKNOWN
Usually treated as AVMEDIA_TYPE_DATA.
Definition: avutil.h:200
AV_PICTURE_TYPE_NONE
@ AV_PICTURE_TYPE_NONE
Undefined.
Definition: avutil.h:278
AVCPBProperties::min_bitrate
int64_t min_bitrate
Minimum bitrate of the stream, in bits per second.
Definition: defs.h:281
AVStream::sample_aspect_ratio
AVRational sample_aspect_ratio
sample aspect ratio (0 if unknown)
Definition: avformat.h:823
set_codec_from_probe_data
static int set_codec_from_probe_data(AVFormatContext *s, AVStream *st, AVProbeData *pd)
Definition: demux.c:103
diff
static av_always_inline int diff(const struct color_info *a, const struct color_info *b, const int trans_thresh)
Definition: vf_paletteuse.c:166
AV_DISPOSITION_HEARING_IMPAIRED
#define AV_DISPOSITION_HEARING_IMPAIRED
The stream is intended for hearing impaired audiences.
Definition: avformat.h:655
AVPacket::dts
int64_t dts
Decompression timestamp in AVStream->time_base units; the time at which the packet is decompressed.
Definition: packet.h:534
update_stream_avctx
static int update_stream_avctx(AVFormatContext *s)
Definition: demux.c:189
a
The reader does not expect b to be semantically here and if the code is changed by maybe adding a a division or other the signedness will almost certainly be mistaken To avoid this confusion a new type was SUINT is the C unsigned type but it holds a signed int to use the same example SUINT a
Definition: undefined.txt:41
a0
static double a0(void *priv, double x, double y)
Definition: vf_xfade.c:2028
AV_CODEC_ID_VVC
@ AV_CODEC_ID_VVC
Definition: codec_id.h:252
av_packet_side_data_add
AVPacketSideData * av_packet_side_data_add(AVPacketSideData **psd, int *pnb_sd, enum AVPacketSideDataType type, void *data, size_t size, int flags)
Wrap existing data as packet side data.
Definition: packet.c:700
AV_CODEC_ID_RV30
@ AV_CODEC_ID_RV30
Definition: codec_id.h:120
offset
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 offset
Definition: writing_filters.txt:86
FFStream::pts_wrap_behavior
int pts_wrap_behavior
Options for behavior, when a wrap is detected.
Definition: internal.h:267
FFStreamInfo::last_duration
int64_t last_duration
Definition: demux.h:161
av_packet_make_refcounted
int av_packet_make_refcounted(AVPacket *pkt)
Ensure the data described by a given packet is reference counted.
Definition: packet.c:493
AVPacket::flags
int flags
A combination of AV_PKT_FLAG values.
Definition: packet.h:541
av_dict_free
void av_dict_free(AVDictionary **pm)
Free all the memory allocated for an AVDictionary struct and all keys and values.
Definition: dict.c:233
FFStreamInfo::rfps_duration_sum
int64_t rfps_duration_sum
Definition: demux.h:148
FFStream::update_initial_durations_done
int update_initial_durations_done
Internal data to prevent doing update_initial_durations() twice.
Definition: internal.h:272
FFStream::start_skip_samples
int64_t start_skip_samples
If not 0, the number of samples that should be skipped from the start of the stream (the samples are ...
Definition: internal.h:217
estimate_timings_from_bit_rate
static void estimate_timings_from_bit_rate(AVFormatContext *ic)
Definition: demux.c:1757
FFStream::probe_packets
int probe_packets
Number of packets to buffer for codec probing.
Definition: internal.h:311
ff_rfps_calculate
void ff_rfps_calculate(AVFormatContext *ic)
Definition: demux.c:2338
avformat_internal.h
AV_LOG_INFO
#define AV_LOG_INFO
Standard information.
Definition: log.h:220
FFERROR_REDO
#define FFERROR_REDO
Returned by demuxers to indicate that data was consumed but discarded (ignored streams or junk data).
Definition: demux.h:176
FFStream::probe_data
AVProbeData probe_data
Definition: internal.h:298
AVCodec::id
enum AVCodecID id
Definition: codec.h:186
filesize
static int64_t filesize(AVIOContext *pb)
Definition: ffmpeg_mux.c:51
FFStream::skip_to_keyframe
int skip_to_keyframe
Indicates that everything up to the next keyframe should be discarded.
Definition: internal.h:203
avcodec_parameters_alloc
AVCodecParameters * avcodec_parameters_alloc(void)
Allocate a new AVCodecParameters and set its fields to default values (unknown/invalid/0).
Definition: codec_par.c:56
FFStreamInfo::duration_error
double(* duration_error)[2][MAX_STD_TIMEBASES]
Definition: demux.h:149
AV_CODEC_ID_GIF
@ AV_CODEC_ID_GIF
Definition: codec_id.h:149
avcodec_get_name
const char * avcodec_get_name(enum AVCodecID id)
Get the name of a codec.
Definition: utils.c:406
AVCodecContext::bits_per_coded_sample
int bits_per_coded_sample
bits per sample/pixel from the demuxer (needed for huffyuv).
Definition: avcodec.h:1546
avcodec_send_packet
int avcodec_send_packet(AVCodecContext *avctx, const AVPacket *avpkt)
Supply raw packet data as input to a decoder.
Definition: decode.c:704
av_assert2
#define av_assert2(cond)
assert() equivalent, that does lie in speed critical code.
Definition: avassert.h:67
AVFMT_FLAG_NOBUFFER
#define AVFMT_FLAG_NOBUFFER
Do not buffer frames when possible.
Definition: avformat.h:1423
AV_PKT_DATA_CPB_PROPERTIES
@ AV_PKT_DATA_CPB_PROPERTIES
This side data corresponds to the AVCPBProperties struct.
Definition: packet.h:142
ff_is_intra_only
int ff_is_intra_only(enum AVCodecID id)
Definition: avformat.c:850
AV_CODEC_ID_RV40
@ AV_CODEC_ID_RV40
Definition: codec_id.h:121
AVCodecParserContext::pos
int64_t pos
Byte position of currently parsed frame in stream.
Definition: avcodec.h:2669
PacketListEntry
Definition: packet_internal.h:28
PARSER_FLAG_COMPLETE_FRAMES
#define PARSER_FLAG_COMPLETE_FRAMES
Definition: avcodec.h:2601
AV_CODEC_ID_NONE
@ AV_CODEC_ID_NONE
Definition: codec_id.h:50
i
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:256
AVPacket::pts
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...
Definition: packet.h:528
avio_internal.h
ff_read_packet
int ff_read_packet(AVFormatContext *s, AVPacket *pkt)
Read a transport packet from a media file.
Definition: demux.c:620
AVChapter::id
int64_t id
unique ID to identify the chapter
Definition: avformat.h:1225
AVCodecContext::extradata
uint8_t * extradata
Out-of-band global headers that may be used by some codecs.
Definition: avcodec.h:514
AV_CODEC_ID_THEORA
@ AV_CODEC_ID_THEORA
Definition: codec_id.h:82
internal.h
find_probe_decoder
static const AVCodec * find_probe_decoder(AVFormatContext *s, const AVStream *st, enum AVCodecID codec_id)
Definition: demux.c:73
AV_TIME_BASE
#define AV_TIME_BASE
Internal time base represented as integer.
Definition: avutil.h:254
ff_id3v2_read_dict
void ff_id3v2_read_dict(AVIOContext *pb, AVDictionary **metadata, const char *magic, ID3v2ExtraMeta **extra_meta)
Read an ID3v2 tag into specified dictionary and retrieve supported extra metadata.
Definition: id3v2.c:1142
av_assert1
#define av_assert1(cond)
assert() equivalent, that does not lie in speed critical code.
Definition: avassert.h:56
AVFormatContext::codec_whitelist
char * codec_whitelist
',' separated list of allowed decoders.
Definition: avformat.h:1749
AVCPBProperties::max_bitrate
int64_t max_bitrate
Maximum bitrate of the stream, in bits per second.
Definition: defs.h:276
compute_frame_duration
static void compute_frame_duration(AVFormatContext *s, int *pnum, int *pden, AVStream *st, AVCodecParserContext *pc, AVPacket *pkt)
Return the frame duration in seconds.
Definition: demux.c:687
delta
float delta
Definition: vorbis_enc_data.h:430
AV_CODEC_ID_HEVC
@ AV_CODEC_ID_HEVC
Definition: codec_id.h:228
AV_DISPOSITION_KARAOKE
#define AV_DISPOSITION_KARAOKE
The stream contains karaoke audio.
Definition: avformat.h:644
ff_wrap_timestamp
int64_t ff_wrap_timestamp(const AVStream *st, int64_t timestamp)
Wrap a given time stamp, if there is an indication for an overflow.
Definition: demux.c:68
FFMIN
#define FFMIN(a, b)
Definition: macros.h:49
url.h
FFStream::pts_buffer
int64_t pts_buffer[MAX_REORDER_DELAY+1]
Definition: internal.h:282
av_find_default_stream_index
int av_find_default_stream_index(AVFormatContext *s)
Definition: avformat.c:340
AVPROBE_SCORE_RETRY
#define AVPROBE_SCORE_RETRY
Definition: avformat.h:458
AV_AUDIO_SERVICE_TYPE_VISUALLY_IMPAIRED
@ AV_AUDIO_SERVICE_TYPE_VISUALLY_IMPAIRED
Definition: defs.h:227
av_get_audio_frame_duration
int av_get_audio_frame_duration(AVCodecContext *avctx, int frame_bytes)
Return audio frame duration.
Definition: utils.c:789
av_mallocz
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
Definition: mem.c:256
AVProgram
New fields can be added to the end with minor version bumps.
Definition: avformat.h:1189
av_inv_q
static av_always_inline AVRational av_inv_q(AVRational q)
Invert a rational.
Definition: rational.h:159
demux.h
len
int len
Definition: vorbis_enc_data.h:426
AV_CODEC_ID_JPEG2000
@ AV_CODEC_ID_JPEG2000
Definition: codec_id.h:140
av_rescale
int64_t av_rescale(int64_t a, int64_t b, int64_t c)
Rescale a 64-bit integer with rounding to nearest.
Definition: mathematics.c:129
AVCodecContext::height
int height
Definition: avcodec.h:592
AVCodecParameters::coded_side_data
AVPacketSideData * coded_side_data
Additional data associated with the entire stream.
Definition: codec_par.h:81
AVCodecContext::pix_fmt
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
Definition: avcodec.h:631
FFStreamInfo::frame_delay_evidence
int frame_delay_evidence
Definition: demux.h:152
update_timestamps
static void update_timestamps(AVFormatContext *s, AVStream *st, AVPacket *pkt)
Definition: demux.c:536
av_codec_iterate
const AVCodec * av_codec_iterate(void **opaque)
Iterate over all registered codecs.
Definition: allcodecs.c:967
try_decode_frame
static int try_decode_frame(AVFormatContext *s, AVStream *st, const AVPacket *pkt, AVDictionary **options)
Definition: demux.c:2079
avcodec.h
limit
static double limit(double x)
Definition: vf_pseudocolor.c:142
AVCodecParserContext
Definition: avcodec.h:2567
av_cmp_q
static int av_cmp_q(AVRational a, AVRational b)
Compare two rationals.
Definition: rational.h:89
FFFormatContext::missing_streams
int missing_streams
Definition: internal.h:120
AVStream::disposition
int disposition
Stream disposition - a combination of AV_DISPOSITION_* flags.
Definition: avformat.h:814
AVFMT_FLAG_GENPTS
#define AVFMT_FLAG_GENPTS
Generate missing pts even if it requires parsing future frames.
Definition: avformat.h:1417
AV_DISPOSITION_VISUAL_IMPAIRED
#define AV_DISPOSITION_VISUAL_IMPAIRED
The stream is intended for visually impaired audiences.
Definition: avformat.h:659
tag
uint32_t tag
Definition: movenc.c:1911
av_compare_mod
int64_t av_compare_mod(uint64_t a, uint64_t b, uint64_t mod)
Compare the remainders of two integer operands divided by a common divisor.
Definition: mathematics.c:160
AVStream::id
int id
Format-specific stream ID.
Definition: avformat.h:757
ret
ret
Definition: filter_design.txt:187
AVStream
Stream structure.
Definition: avformat.h:745
pixfmt.h
avio_seek
int64_t avio_seek(AVIOContext *s, int64_t offset, int whence)
fseek() equivalent for AVIOContext.
Definition: aviobuf.c:231
FFSWAP
#define FFSWAP(type, a, b)
Definition: macros.h:52
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
AVCPBProperties::buffer_size
int64_t buffer_size
The size of the buffer to which the ratecontrol is applied, in bits.
Definition: defs.h:292
tb_unreliable
static int tb_unreliable(AVFormatContext *ic, AVStream *st)
Definition: demux.c:2252
AVSTREAM_PARSE_HEADERS
@ AVSTREAM_PARSE_HEADERS
Only parse headers, do not repack.
Definition: avformat.h:591
avformat.h
dict.h
AV_AUDIO_SERVICE_TYPE_KARAOKE
@ AV_AUDIO_SERVICE_TYPE_KARAOKE
Definition: defs.h:233
AVPacket::side_data
AVPacketSideData * side_data
Additional packet data that can be provided by the container.
Definition: packet.h:546
id
enum AVCodecID id
Definition: dts2pts.c:367
av_sat_add64
#define av_sat_add64
Definition: common.h:139
AV_RL32
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_RL32
Definition: bytestream.h:92
FFInputFormat::read_close
int(* read_close)(struct AVFormatContext *)
Close the stream.
Definition: demux.h:91
AVCodecContext
main external API structure.
Definition: avcodec.h:431
AVStream::index
int index
stream index in AVFormatContext
Definition: avformat.h:751
FFStreamInfo::fps_first_dts_idx
int fps_first_dts_idx
Definition: demux.h:167
AVIO_SEEKABLE_NORMAL
#define AVIO_SEEKABLE_NORMAL
Seeking works like for a local file.
Definition: avio.h:41
AV_PICTURE_TYPE_B
@ AV_PICTURE_TYPE_B
Bi-dir predicted.
Definition: avutil.h:281
FFStreamInfo::duration_gcd
int64_t duration_gcd
Definition: demux.h:146
AVBitStreamFilter
Definition: bsf.h:111
av_packet_new_side_data
uint8_t * av_packet_new_side_data(AVPacket *pkt, enum AVPacketSideDataType type, size_t size)
Allocate new information of a packet.
Definition: packet.c:232
AVInputFormat::flags
int flags
Can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER, AVFMT_SHOW_IDS, AVFMT_NOTIMESTAMPS,...
Definition: avformat.h:564
AVRational::den
int den
Denominator.
Definition: rational.h:60
AV_PIX_FMT_NONE
@ AV_PIX_FMT_NONE
Definition: pixfmt.h:72
AV_AUDIO_SERVICE_TYPE_COMMENTARY
@ AV_AUDIO_SERVICE_TYPE_COMMENTARY
Definition: defs.h:230
ffifmt
static const FFInputFormat * ffifmt(const AVInputFormat *fmt)
Definition: demux.h:138
ff_flush_packet_queue
void ff_flush_packet_queue(AVFormatContext *s)
Definition: avformat.c:130
update_dts_from_pts
static void update_dts_from_pts(AVFormatContext *s, int stream_index, PacketListEntry *pkt_buffer)
Updates the dts of packets of a stream in pkt_buffer, by re-ordering the pts of the packets in a wind...
Definition: demux.c:829
DURATION_DEFAULT_MAX_READ_SIZE
#define DURATION_DEFAULT_MAX_READ_SIZE
Definition: demux.c:1810
avformat_free_context
void avformat_free_context(AVFormatContext *s)
Free an AVFormatContext and all its streams.
Definition: avformat.c:141
ff_fc_internal
static av_always_inline FormatContextInternal * ff_fc_internal(AVFormatContext *s)
Definition: avformat_internal.h:100
PARSER_FLAG_USE_CODEC_TS
#define PARSER_FLAG_USE_CODEC_TS
Definition: avcodec.h:2605
ref
static int ref[MAX_W *MAX_W]
Definition: jpeg2000dwt.c:117
AVStream::r_frame_rate
AVRational r_frame_rate
Real base framerate of the stream.
Definition: avformat.h:879
AV_PKT_DATA_SKIP_SAMPLES
@ AV_PKT_DATA_SKIP_SAMPLES
Recommmends skipping the specified number of samples.
Definition: packet.h:153
compute_pkt_fields
static void compute_pkt_fields(AVFormatContext *s, AVStream *st, AVCodecParserContext *pc, AVPacket *pkt, int64_t next_dts, int64_t next_pts)
Definition: demux.c:968
AVSTREAM_PARSE_FULL_RAW
@ AVSTREAM_PARSE_FULL_RAW
full parsing and repack with timestamp and position generation by parser for raw this assumes that ea...
Definition: avformat.h:594
FFStream::info
struct FFStreamInfo * info
Stream information used internally by avformat_find_stream_info()
Definition: internal.h:182
AVFormatContext::duration
int64_t duration
Duration of the stream, in AV_TIME_BASE fractional seconds.
Definition: avformat.h:1400
av_mul_q
AVRational av_mul_q(AVRational b, AVRational c)
Multiply two rationals.
Definition: rational.c:80
AVPacket::stream_index
int stream_index
Definition: packet.h:537
AVPROBE_SCORE_STREAM_RETRY
#define AVPROBE_SCORE_STREAM_RETRY
Definition: avformat.h:459
parse_packet
static int parse_packet(AVFormatContext *s, AVPacket *pkt, int stream_index, int flush)
Parse a packet, add all split parts to parse_queue.
Definition: demux.c:1163
avio_skip
int64_t avio_skip(AVIOContext *s, int64_t offset)
Skip given number of bytes forward.
Definition: aviobuf.c:318
av_channel_layout_copy
int av_channel_layout_copy(AVChannelLayout *dst, const AVChannelLayout *src)
Make a copy of a channel layout.
Definition: channel_layout.c:449
av_gettime
int64_t av_gettime(void)
Get the current time in microseconds.
Definition: time.c:39
FF_DISABLE_DEPRECATION_WARNINGS
#define FF_DISABLE_DEPRECATION_WARNINGS
Definition: internal.h:72
AVIO_FLAG_READ
#define AVIO_FLAG_READ
read-only
Definition: avio.h:617
AVCodecContext::codec_type
enum AVMediaType codec_type
Definition: avcodec.h:439
av_strdup
char * av_strdup(const char *s)
Duplicate a string.
Definition: mem.c:272
desc
const char * desc
Definition: libsvtav1.c:79
AVMEDIA_TYPE_VIDEO
@ AVMEDIA_TYPE_VIDEO
Definition: avutil.h:201
av_parser_parse2
int av_parser_parse2(AVCodecParserContext *s, AVCodecContext *avctx, uint8_t **poutbuf, int *poutbuf_size, const uint8_t *buf, int buf_size, int64_t pts, int64_t dts, int64_t pos)
Parse a packet.
Definition: parser.c:115
extract_extradata
static int extract_extradata(FFFormatContext *si, AVStream *st, const AVPacket *pkt)
Definition: demux.c:2458
mem.h
packet_internal.h
FFFormatContext::pkt
AVPacket * pkt
Used to hold temporary packets for the generic demuxing code.
Definition: internal.h:111
llrint
#define llrint(x)
Definition: libm.h:396
avcodec_parameters_from_context
int avcodec_parameters_from_context(struct AVCodecParameters *par, const AVCodecContext *codec)
Fill the parameters struct based on the values from the supplied codec context.
Definition: codec_par.c:137
AVCodecParameters::format
int format
Definition: codec_par.h:92
FFStream::request_probe
int request_probe
stream probing state -1 -> probing finished 0 -> no probing requested rest -> perform probing with re...
Definition: internal.h:198
av_free
#define av_free(p)
Definition: tableprint_vlc.h:34
AVCodecContext::codec_tag
unsigned int codec_tag
fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A').
Definition: avcodec.h:456
AV_AUDIO_SERVICE_TYPE_EFFECTS
@ AV_AUDIO_SERVICE_TYPE_EFFECTS
Definition: defs.h:226
AVCodecParameters::codec_id
enum AVCodecID codec_id
Specific type of the encoded data (the codec used).
Definition: codec_par.h:55
AVPacket
This structure stores compressed data.
Definition: packet.h:512
fill_all_stream_timings
static void fill_all_stream_timings(AVFormatContext *ic)
Definition: demux.c:1740
avio_closep
int avio_closep(AVIOContext **s)
Close the resource accessed by the AVIOContext *s, free it and set the pointer pointing to it to NULL...
Definition: avio.c:649
av_freep
#define av_freep(p)
Definition: tableprint_vlc.h:35
av_dict_set
int av_dict_set(AVDictionary **pm, const char *key, const char *value, int flags)
Set the given entry in *pm, overwriting an existing entry.
Definition: dict.c:86
av_dict_copy
int av_dict_copy(AVDictionary **dst, const AVDictionary *src, int flags)
Copy entries from one AVDictionary struct into another.
Definition: dict.c:247
select_from_pts_buffer
static int64_t select_from_pts_buffer(AVStream *st, int64_t *pts_buffer, int64_t dts)
Definition: demux.c:781
ff_id3v2_free_extra_meta
void ff_id3v2_free_extra_meta(ID3v2ExtraMeta **extra_meta)
Free memory allocated parsing special (non-text) metadata.
Definition: id3v2.c:1154
FFStream::cur_dts
int64_t cur_dts
Definition: internal.h:338
AVPacket::pos
int64_t pos
byte position in stream, -1 if unknown
Definition: packet.h:555
AVCodecContext::width
int width
picture width / height.
Definition: avcodec.h:592
timestamp.h
FFStream::need_context_update
int need_context_update
Whether the internal avctx needs to be updated from codecpar (after a late change to codecpar)
Definition: internal.h:173
avio_close
int avio_close(AVIOContext *s)
Close the resource accessed by the AVIOContext s and free it.
Definition: avio.c:616
AVCodecParameters::bit_rate
int64_t bit_rate
The average bitrate of the encoded data (in bits per second).
Definition: codec_par.h:97
ff_id3v2_parse_priv
int ff_id3v2_parse_priv(AVFormatContext *s, ID3v2ExtraMeta *extra_meta)
Add metadata for all PRIV tags in the ID3v2 header.
Definition: id3v2.c:1266
av_log
#define av_log(a,...)
Definition: tableprint_vlc.h:27
AVFormatContext::start_time
int64_t start_time
Position of the first frame of the component, in AV_TIME_BASE fractional seconds.
Definition: avformat.h:1390
AV_CODEC_ID_AAC_LATM
@ AV_CODEC_ID_AAC_LATM
Definition: codec_id.h:497
FFStreamInfo::fps_last_dts_idx
int fps_last_dts_idx
Definition: demux.h:169
FFStream::parser
struct AVCodecParserContext * parser
Definition: internal.h:315
AV_CODEC_CAP_AVOID_PROBING
#define AV_CODEC_CAP_AVOID_PROBING
Decoder is not a preferred choice for probing.
Definition: codec.h:123
av_ts2str
#define av_ts2str(ts)
Convenience macro, the return value should be used only directly in function arguments but never stan...
Definition: timestamp.h:54
a1
static double a1(void *priv, double x, double y)
Definition: vf_xfade.c:2029
estimate_timings
static void estimate_timings(AVFormatContext *ic, int64_t old_offset)
Definition: demux.c:1968
AVERROR_EXIT
#define AVERROR_EXIT
Immediate exit was requested; the called function should not be restarted.
Definition: error.h:58
avcodec_descriptor_get
const AVCodecDescriptor * avcodec_descriptor_get(enum AVCodecID id)
Definition: codec_desc.c:3780
has_decode_delay_been_guessed
static int has_decode_delay_been_guessed(AVStream *st)
Definition: demux.c:750
av_opt_set_dict
int av_opt_set_dict(void *obj, AVDictionary **options)
Set all the options from a given dictionary on an object.
Definition: opt.c:1986
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:794
PARSER_FLAG_ONCE
#define PARSER_FLAG_ONCE
Definition: avcodec.h:2602
AV_CODEC_ID_APTX
@ AV_CODEC_ID_APTX
Definition: codec_id.h:533
avstring.h
ff_reduce_index
void ff_reduce_index(AVFormatContext *s, int stream_index)
Ensure the index uses less memory than the maximum specified in AVFormatContext.max_index_size by dis...
Definition: seek.c:50
AVSTREAM_PARSE_TIMESTAMPS
@ AVSTREAM_PARSE_TIMESTAMPS
full parsing and interpolation of timestamps for frames not starting on a packet boundary
Definition: avformat.h:592
AVDiscard
AVDiscard
Definition: defs.h:212
AVStream::pts_wrap_bits
int pts_wrap_bits
Number of bits in timestamps.
Definition: avformat.h:888
AVChapter::time_base
AVRational time_base
time base in which the start/end timestamps are specified
Definition: avformat.h:1226
codec_desc.h
AV_CODEC_ID_MPEG2VIDEO
@ AV_CODEC_ID_MPEG2VIDEO
preferred ID for MPEG-1/2 video decoding
Definition: codec_id.h:54
AV_CODEC_ID_MP1
@ AV_CODEC_ID_MP1
Definition: codec_id.h:490
av_log2
int av_log2(unsigned v)
Definition: intmath.c:26
FFStream::pts_wrap_reference
int64_t pts_wrap_reference
Internal data to check for wrapping of the time stamp.
Definition: internal.h:255
av_rescale_q_rnd
int64_t av_rescale_q_rnd(int64_t a, AVRational bq, AVRational cq, enum AVRounding rnd)
Rescale a 64-bit integer by 2 rational numbers with specified rounding.
Definition: mathematics.c:134
compute_chapters_end
static int compute_chapters_end(AVFormatContext *s)
Definition: demux.c:2191
avpriv_codec_get_cap_skip_frame_fill_param
int avpriv_codec_get_cap_skip_frame_fill_param(const AVCodec *codec)
Definition: utils.c:402
FormatContextInternal::parse_queue
PacketList parse_queue
Packets split by the parser get queued here.
Definition: avformat_internal.h:85
AVFMT_EVENT_FLAG_METADATA_UPDATED
#define AVFMT_EVENT_FLAG_METADATA_UPDATED
Definition: avformat.h:1639
avcodec_parameters_copy
int avcodec_parameters_copy(AVCodecParameters *dst, const AVCodecParameters *src)
Copy the contents of src to dst.
Definition: codec_par.c:106
MAX_REORDER_DELAY
#define MAX_REORDER_DELAY
Definition: hw_base_encode.h:28
AVPacket::side_data_elems
int side_data_elems
Definition: packet.h:547
av_parser_close
void av_parser_close(AVCodecParserContext *s)
Definition: parser.c:193
av_cpb_properties_alloc
AVCPBProperties * av_cpb_properties_alloc(size_t *size)
Allocate a CPB properties structure and initialize its fields to default values.
Definition: utils.c:954
av_realloc
void * av_realloc(void *ptr, size_t size)
Allocate, reallocate, or free a block of memory.
Definition: mem.c:155
av_bsf_get_by_name
const AVBitStreamFilter * av_bsf_get_by_name(const char *name)
Definition: bitstream_filters.c:87