FFmpeg
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
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 #if FF_API_TICKS_PER_FRAME
1322  avctx_new->ticks_per_frame = sti->avctx->ticks_per_frame;
1324 #endif
1325 
1326  avcodec_free_context(&sti->avctx);
1327  sti->avctx = avctx_new;
1328 
1329  avctx_new = NULL;
1330  ret = 0;
1331 
1332 fail:
1333  avcodec_free_context(&avctx_new);
1334  avcodec_parameters_free(&par_tmp);
1335 
1336  return ret;
1337 }
1338 
1339 static int extract_extradata(FFFormatContext *si, AVStream *st, const AVPacket *pkt);
1340 
1342 {
1343  FormatContextInternal *const fci = ff_fc_internal(s);
1344  FFFormatContext *const si = &fci->fc;
1345  int ret, got_packet = 0;
1346  AVDictionary *metadata = NULL;
1347 
1348  while (!got_packet && !fci->parse_queue.head) {
1349  AVStream *st;
1350  FFStream *sti;
1351 
1352  /* read next packet */
1353  ret = ff_read_packet(s, pkt);
1354  if (ret < 0) {
1355  if (ret == AVERROR(EAGAIN))
1356  return ret;
1357  /* flush the parsers */
1358  for (unsigned i = 0; i < s->nb_streams; i++) {
1359  AVStream *const st = s->streams[i];
1360  FFStream *const sti = ffstream(st);
1361  if (sti->parser && sti->need_parsing)
1362  parse_packet(s, pkt, st->index, 1);
1363  }
1364  /* all remaining packets are now in parse_queue =>
1365  * really terminate parsing */
1366  break;
1367  }
1368  ret = 0;
1369  st = s->streams[pkt->stream_index];
1370  sti = ffstream(st);
1371 
1373 
1374  /* update context if required */
1375  if (sti->need_context_update) {
1376  if (avcodec_is_open(sti->avctx)) {
1377  av_log(s, AV_LOG_DEBUG, "Demuxer context update while decoder is open, closing and trying to re-open\n");
1378  ret = codec_close(sti);
1379  sti->info->found_decoder = 0;
1380  if (ret < 0)
1381  return ret;
1382  }
1383 
1384  /* close parser, because it depends on the codec */
1385  if (sti->parser && sti->avctx->codec_id != st->codecpar->codec_id) {
1386  av_parser_close(sti->parser);
1387  sti->parser = NULL;
1388  }
1389 
1391  if (ret < 0) {
1393  return ret;
1394  }
1395 
1396  if (!sti->avctx->extradata) {
1397  sti->extract_extradata.inited = 0;
1398 
1399  ret = extract_extradata(si, st, pkt);
1400  if (ret < 0) {
1402  return ret;
1403  }
1404  }
1405 
1407 
1408  sti->need_context_update = 0;
1409  }
1410 
1411  if (pkt->pts != AV_NOPTS_VALUE &&
1412  pkt->dts != AV_NOPTS_VALUE &&
1413  pkt->pts < pkt->dts) {
1415  "Invalid timestamps stream=%d, pts=%s, dts=%s, size=%d\n",
1416  pkt->stream_index,
1417  av_ts2str(pkt->pts),
1418  av_ts2str(pkt->dts),
1419  pkt->size);
1420  }
1421  if (s->debug & FF_FDEBUG_TS)
1423  "ff_read_packet stream=%d, pts=%s, dts=%s, size=%d, duration=%"PRId64", flags=%d\n",
1424  pkt->stream_index,
1425  av_ts2str(pkt->pts),
1426  av_ts2str(pkt->dts),
1427  pkt->size, pkt->duration, pkt->flags);
1428 
1429  if (sti->need_parsing && !sti->parser && !(s->flags & AVFMT_FLAG_NOPARSE)) {
1430  sti->parser = av_parser_init(st->codecpar->codec_id);
1431  if (!sti->parser) {
1432  av_log(s, AV_LOG_VERBOSE, "parser not found for codec "
1433  "%s, packets or times may be invalid.\n",
1435  /* no parser available: just output the raw packets */
1437  } else if (sti->need_parsing == AVSTREAM_PARSE_HEADERS)
1439  else if (sti->need_parsing == AVSTREAM_PARSE_FULL_ONCE)
1440  sti->parser->flags |= PARSER_FLAG_ONCE;
1441  else if (sti->need_parsing == AVSTREAM_PARSE_FULL_RAW)
1443  }
1444 
1445  if (!sti->need_parsing || !sti->parser) {
1446  /* no parsing needed: we just output the packet as is */
1448  if ((s->iformat->flags & AVFMT_GENERIC_INDEX) &&
1450  ff_reduce_index(s, st->index);
1451  av_add_index_entry(st, pkt->pos, pkt->dts,
1452  0, 0, AVINDEX_KEYFRAME);
1453  }
1454  got_packet = 1;
1455  } else if (st->discard < AVDISCARD_ALL) {
1456  if ((ret = parse_packet(s, pkt, pkt->stream_index, 0)) < 0)
1457  return ret;
1458  st->codecpar->sample_rate = sti->avctx->sample_rate;
1459  st->codecpar->bit_rate = sti->avctx->bit_rate;
1461  if (ret < 0)
1462  return ret;
1463  st->codecpar->codec_id = sti->avctx->codec_id;
1464  } else {
1465  /* free packet */
1467  }
1468  if (pkt->flags & AV_PKT_FLAG_KEY)
1469  sti->skip_to_keyframe = 0;
1470  if (sti->skip_to_keyframe) {
1472  got_packet = 0;
1473  }
1474  }
1475 
1476  if (!got_packet && fci->parse_queue.head)
1478 
1479  if (ret >= 0) {
1480  AVStream *const st = s->streams[pkt->stream_index];
1481  FFStream *const sti = ffstream(st);
1482  int discard_padding = 0;
1483  if (sti->first_discard_sample && pkt->pts != AV_NOPTS_VALUE) {
1487  int64_t end_sample = sample + duration;
1488  if (duration > 0 && end_sample >= sti->first_discard_sample &&
1489  sample < sti->last_discard_sample)
1490  discard_padding = FFMIN(end_sample - sti->first_discard_sample, duration);
1491  }
1492  if (sti->start_skip_samples && (pkt->pts == 0 || pkt->pts == RELATIVE_TS_BASE))
1493  sti->skip_samples = sti->start_skip_samples;
1494  sti->skip_samples = FFMAX(0, sti->skip_samples);
1495  if (sti->skip_samples || discard_padding) {
1497  if (p) {
1498  AV_WL32(p, sti->skip_samples);
1499  AV_WL32(p + 4, discard_padding);
1500  av_log(s, AV_LOG_DEBUG, "demuxer injecting skip %u / discard %u\n",
1501  (unsigned)sti->skip_samples, (unsigned)discard_padding);
1502  }
1503  sti->skip_samples = 0;
1504  }
1505 
1506 #if FF_API_AVSTREAM_SIDE_DATA
1507  if (sti->inject_global_side_data) {
1508  for (int i = 0; i < st->codecpar->nb_coded_side_data; i++) {
1509  const AVPacketSideData *const src_sd = &st->codecpar->coded_side_data[i];
1510  uint8_t *dst_data;
1511 
1512  if (av_packet_get_side_data(pkt, src_sd->type, NULL))
1513  continue;
1514 
1515  dst_data = av_packet_new_side_data(pkt, src_sd->type, src_sd->size);
1516  if (!dst_data) {
1517  av_log(s, AV_LOG_WARNING, "Could not inject global side data\n");
1518  continue;
1519  }
1520 
1521  memcpy(dst_data, src_sd->data, src_sd->size);
1522  }
1523  sti->inject_global_side_data = 0;
1524  }
1525 #endif
1526  }
1527 
1528  if (!fci->metafree) {
1529  int metaret = av_opt_get_dict_val(s, "metadata", AV_OPT_SEARCH_CHILDREN, &metadata);
1530  if (metadata) {
1531  s->event_flags |= AVFMT_EVENT_FLAG_METADATA_UPDATED;
1532  av_dict_copy(&s->metadata, metadata, 0);
1533  av_dict_free(&metadata);
1535  }
1536  fci->metafree = metaret == AVERROR_OPTION_NOT_FOUND;
1537  }
1538 
1539  if (s->debug & FF_FDEBUG_TS)
1541  "read_frame_internal stream=%d, pts=%s, dts=%s, "
1542  "size=%d, duration=%"PRId64", flags=%d\n",
1543  pkt->stream_index,
1544  av_ts2str(pkt->pts),
1545  av_ts2str(pkt->dts),
1546  pkt->size, pkt->duration, pkt->flags);
1547 
1548  /* A demuxer might have returned EOF because of an IO error, let's
1549  * propagate this back to the user. */
1550  if (ret == AVERROR_EOF && s->pb && s->pb->error < 0 && s->pb->error != AVERROR(EAGAIN))
1551  ret = s->pb->error;
1552 
1553  return ret;
1554 }
1555 
1557 {
1558  FFFormatContext *const si = ffformatcontext(s);
1559  const int genpts = s->flags & AVFMT_FLAG_GENPTS;
1560  int eof = 0;
1561  int ret;
1562  AVStream *st;
1563 
1564  if (!genpts) {
1565  ret = si->packet_buffer.head
1568  if (ret < 0)
1569  return ret;
1570  goto return_packet;
1571  }
1572 
1573  for (;;) {
1574  PacketListEntry *pktl = si->packet_buffer.head;
1575 
1576  if (pktl) {
1577  AVPacket *next_pkt = &pktl->pkt;
1578 
1579  if (next_pkt->dts != AV_NOPTS_VALUE) {
1580  int wrap_bits = s->streams[next_pkt->stream_index]->pts_wrap_bits;
1581  // last dts seen for this stream. if any of packets following
1582  // current one had no dts, we will set this to AV_NOPTS_VALUE.
1583  int64_t last_dts = next_pkt->dts;
1584  av_assert2(wrap_bits <= 64);
1585  while (pktl && next_pkt->pts == AV_NOPTS_VALUE) {
1586  if (pktl->pkt.stream_index == next_pkt->stream_index &&
1587  av_compare_mod(next_pkt->dts, pktl->pkt.dts, 2ULL << (wrap_bits - 1)) < 0) {
1588  if (av_compare_mod(pktl->pkt.pts, pktl->pkt.dts, 2ULL << (wrap_bits - 1))) {
1589  // not B-frame
1590  next_pkt->pts = pktl->pkt.dts;
1591  }
1592  if (last_dts != AV_NOPTS_VALUE) {
1593  // Once last dts was set to AV_NOPTS_VALUE, we don't change it.
1594  last_dts = pktl->pkt.dts;
1595  }
1596  }
1597  pktl = pktl->next;
1598  }
1599  if (eof && next_pkt->pts == AV_NOPTS_VALUE && last_dts != AV_NOPTS_VALUE) {
1600  // Fixing the last reference frame had none pts issue (For MXF etc).
1601  // We only do this when
1602  // 1. eof.
1603  // 2. we are not able to resolve a pts value for current packet.
1604  // 3. the packets for this stream at the end of the files had valid dts.
1605  next_pkt->pts = last_dts + next_pkt->duration;
1606  }
1607  pktl = si->packet_buffer.head;
1608  }
1609 
1610  /* read packet from packet buffer, if there is data */
1611  st = s->streams[next_pkt->stream_index];
1612  if (!(next_pkt->pts == AV_NOPTS_VALUE && st->discard < AVDISCARD_ALL &&
1613  next_pkt->dts != AV_NOPTS_VALUE && !eof)) {
1615  goto return_packet;
1616  }
1617  }
1618 
1620  if (ret < 0) {
1621  if (pktl && ret != AVERROR(EAGAIN)) {
1622  eof = 1;
1623  continue;
1624  } else
1625  return ret;
1626  }
1627 
1629  pkt, NULL, 0);
1630  if (ret < 0) {
1632  return ret;
1633  }
1634  }
1635 
1636 return_packet:
1637  st = s->streams[pkt->stream_index];
1638  if ((s->iformat->flags & AVFMT_GENERIC_INDEX) && pkt->flags & AV_PKT_FLAG_KEY) {
1639  ff_reduce_index(s, st->index);
1641  }
1642 
1643  if (is_relative(pkt->dts))
1644  pkt->dts -= RELATIVE_TS_BASE;
1645  if (is_relative(pkt->pts))
1646  pkt->pts -= RELATIVE_TS_BASE;
1647 
1648  return ret;
1649 }
1650 
1651 /**
1652  * Return TRUE if the stream has accurate duration in any stream.
1653  *
1654  * @return TRUE if the stream has accurate duration for at least one component.
1655  */
1657 {
1658  for (unsigned i = 0; i < ic->nb_streams; i++) {
1659  const AVStream *const st = ic->streams[i];
1660  if (st->duration != AV_NOPTS_VALUE)
1661  return 1;
1662  }
1663  if (ic->duration != AV_NOPTS_VALUE)
1664  return 1;
1665  return 0;
1666 }
1667 
1668 /**
1669  * Estimate the stream timings from the one of each components.
1670  *
1671  * Also computes the global bitrate if possible.
1672  */
1674 {
1675  int64_t start_time, start_time1, start_time_text, end_time, end_time1, end_time_text;
1676  int64_t duration, duration1, duration_text, filesize;
1677 
1678  start_time = INT64_MAX;
1679  start_time_text = INT64_MAX;
1680  end_time = INT64_MIN;
1681  end_time_text = INT64_MIN;
1682  duration = INT64_MIN;
1683  duration_text = INT64_MIN;
1684 
1685  for (unsigned i = 0; i < ic->nb_streams; i++) {
1686  AVStream *const st = ic->streams[i];
1687  int is_text = st->codecpar->codec_type == AVMEDIA_TYPE_SUBTITLE ||
1689 
1690  if (st->start_time != AV_NOPTS_VALUE && st->time_base.den) {
1691  start_time1 = av_rescale_q(st->start_time, st->time_base,
1692  AV_TIME_BASE_Q);
1693  if (is_text)
1694  start_time_text = FFMIN(start_time_text, start_time1);
1695  else
1696  start_time = FFMIN(start_time, start_time1);
1697  end_time1 = av_rescale_q_rnd(st->duration, st->time_base,
1700  if (end_time1 != AV_NOPTS_VALUE && (end_time1 > 0 ? start_time1 <= INT64_MAX - end_time1 : start_time1 >= INT64_MIN - end_time1)) {
1701  end_time1 += start_time1;
1702  if (is_text)
1703  end_time_text = FFMAX(end_time_text, end_time1);
1704  else
1705  end_time = FFMAX(end_time, end_time1);
1706  }
1707  for (AVProgram *p = NULL; (p = av_find_program_from_stream(ic, p, i)); ) {
1708  if (p->start_time == AV_NOPTS_VALUE || p->start_time > start_time1)
1709  p->start_time = start_time1;
1710  if (p->end_time < end_time1)
1711  p->end_time = end_time1;
1712  }
1713  }
1714  if (st->duration != AV_NOPTS_VALUE) {
1715  duration1 = av_rescale_q(st->duration, st->time_base,
1716  AV_TIME_BASE_Q);
1717  if (is_text)
1718  duration_text = FFMAX(duration_text, duration1);
1719  else
1720  duration = FFMAX(duration, duration1);
1721  }
1722  }
1723  if (start_time == INT64_MAX || (start_time > start_time_text && start_time - (uint64_t)start_time_text < AV_TIME_BASE))
1724  start_time = start_time_text;
1725  else if (start_time > start_time_text)
1726  av_log(ic, AV_LOG_VERBOSE, "Ignoring outlier non primary stream starttime %f\n", start_time_text / (float)AV_TIME_BASE);
1727 
1728  if (end_time == INT64_MIN || (end_time < end_time_text && end_time_text - (uint64_t)end_time < AV_TIME_BASE))
1729  end_time = end_time_text;
1730  else if (end_time < end_time_text)
1731  av_log(ic, AV_LOG_VERBOSE, "Ignoring outlier non primary stream endtime %f\n", end_time_text / (float)AV_TIME_BASE);
1732 
1733  if (duration == INT64_MIN || (duration < duration_text && (uint64_t)duration_text - duration < AV_TIME_BASE))
1734  duration = duration_text;
1735  else if (duration < duration_text)
1736  av_log(ic, AV_LOG_VERBOSE, "Ignoring outlier non primary stream duration %f\n", duration_text / (float)AV_TIME_BASE);
1737 
1738  if (start_time != INT64_MAX) {
1739  ic->start_time = start_time;
1740  if (end_time != INT64_MIN) {
1741  if (ic->nb_programs > 1) {
1742  for (unsigned i = 0; i < ic->nb_programs; i++) {
1743  AVProgram *const p = ic->programs[i];
1744 
1745  if (p->start_time != AV_NOPTS_VALUE &&
1746  p->end_time > p->start_time &&
1747  p->end_time - (uint64_t)p->start_time <= INT64_MAX)
1749  }
1750  } else if (end_time >= start_time && end_time - (uint64_t)start_time <= INT64_MAX) {
1751  duration = FFMAX(duration, end_time - start_time);
1752  }
1753  }
1754  }
1755  if (duration != INT64_MIN && duration > 0 && ic->duration == AV_NOPTS_VALUE) {
1756  ic->duration = duration;
1757  }
1758  if (ic->pb && (filesize = avio_size(ic->pb)) > 0 && ic->duration > 0) {
1759  /* compute the bitrate */
1760  double bitrate = (double) filesize * 8.0 * AV_TIME_BASE /
1761  (double) ic->duration;
1762  if (bitrate >= 0 && bitrate <= INT64_MAX)
1763  ic->bit_rate = bitrate;
1764  }
1765 }
1766 
1768 {
1770  for (unsigned i = 0; i < ic->nb_streams; i++) {
1771  AVStream *const st = ic->streams[i];
1772 
1773  if (st->start_time == AV_NOPTS_VALUE) {
1774  if (ic->start_time != AV_NOPTS_VALUE)
1776  st->time_base);
1777  if (ic->duration != AV_NOPTS_VALUE)
1779  st->time_base);
1780  }
1781  }
1782 }
1783 
1785 {
1786  FFFormatContext *const si = ffformatcontext(ic);
1787  int show_warning = 0;
1788 
1789  /* if bit_rate is already set, we believe it */
1790  if (ic->bit_rate <= 0) {
1791  int64_t bit_rate = 0;
1792  for (unsigned i = 0; i < ic->nb_streams; i++) {
1793  const AVStream *const st = ic->streams[i];
1794  const FFStream *const sti = cffstream(st);
1795  if (st->codecpar->bit_rate <= 0 && sti->avctx->bit_rate > 0)
1796  st->codecpar->bit_rate = sti->avctx->bit_rate;
1797  if (st->codecpar->bit_rate > 0) {
1798  if (INT64_MAX - st->codecpar->bit_rate < bit_rate) {
1799  bit_rate = 0;
1800  break;
1801  }
1802  bit_rate += st->codecpar->bit_rate;
1803  } else if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO && sti->codec_info_nb_frames > 1) {
1804  // If we have a videostream with packets but without a bitrate
1805  // then consider the sum not known
1806  bit_rate = 0;
1807  break;
1808  }
1809  }
1810  ic->bit_rate = bit_rate;
1811  }
1812 
1813  /* if duration is already set, we believe it */
1814  if (ic->duration == AV_NOPTS_VALUE &&
1815  ic->bit_rate != 0) {
1816  int64_t filesize = ic->pb ? avio_size(ic->pb) : 0;
1817  if (filesize > si->data_offset) {
1818  filesize -= si->data_offset;
1819  for (unsigned i = 0; i < ic->nb_streams; i++) {
1820  AVStream *const st = ic->streams[i];
1821 
1822  if ( st->time_base.num <= INT64_MAX / ic->bit_rate
1823  && st->duration == AV_NOPTS_VALUE) {
1824  st->duration = av_rescale(filesize, 8LL * st->time_base.den,
1825  ic->bit_rate *
1826  (int64_t) st->time_base.num);
1827  show_warning = 1;
1828  }
1829  }
1830  }
1831  }
1832  if (show_warning)
1833  av_log(ic, AV_LOG_WARNING,
1834  "Estimating duration from bitrate, this may be inaccurate\n");
1835 }
1836 
1837 #define DURATION_DEFAULT_MAX_READ_SIZE 250000LL
1838 #define DURATION_DEFAULT_MAX_RETRY 6
1839 #define DURATION_MAX_RETRY 1
1840 
1841 /* only usable for MPEG-PS streams */
1843 {
1844  FFFormatContext *const si = ffformatcontext(ic);
1845  AVPacket *const pkt = si->pkt;
1846  int num, den, read_size, ret;
1848  int duration_max_retry = ic->duration_probesize ? DURATION_MAX_RETRY : DURATION_DEFAULT_MAX_RETRY;
1849  int found_duration = 0;
1850  int is_end;
1852  int retry = 0;
1853 
1854  /* flush packet queue */
1856 
1857  for (unsigned i = 0; i < ic->nb_streams; i++) {
1858  AVStream *const st = ic->streams[i];
1859  FFStream *const sti = ffstream(st);
1860 
1861  if (st->start_time == AV_NOPTS_VALUE &&
1862  sti->first_dts == AV_NOPTS_VALUE &&
1864  av_log(ic, AV_LOG_WARNING,
1865  "start time for stream %d is not set in estimate_timings_from_pts\n", i);
1866 
1867  if (sti->parser) {
1868  av_parser_close(sti->parser);
1869  sti->parser = NULL;
1870  }
1871  }
1872 
1874  av_log(ic, AV_LOG_INFO, "Skipping duration calculation in estimate_timings_from_pts\n");
1875  goto skip_duration_calc;
1876  }
1877 
1878  av_opt_set_int(ic, "skip_changes", 1, AV_OPT_SEARCH_CHILDREN);
1879  /* estimate the end time (duration) */
1880  /* XXX: may need to support wrapping */
1881  filesize = ic->pb ? avio_size(ic->pb) : 0;
1882  do {
1883  is_end = found_duration;
1884  offset = filesize - (duration_max_read_size << retry);
1885  if (offset < 0)
1886  offset = 0;
1887 
1888  avio_seek(ic->pb, offset, SEEK_SET);
1889  read_size = 0;
1890  for (;;) {
1891  AVStream *st;
1892  FFStream *sti;
1893  if (read_size >= duration_max_read_size << (FFMAX(retry - 1, 0)))
1894  break;
1895 
1896  do {
1897  ret = ff_read_packet(ic, pkt);
1898  } while (ret == AVERROR(EAGAIN));
1899  if (ret != 0)
1900  break;
1901  read_size += pkt->size;
1902  st = ic->streams[pkt->stream_index];
1903  sti = ffstream(st);
1904  if (pkt->pts != AV_NOPTS_VALUE &&
1905  (st->start_time != AV_NOPTS_VALUE ||
1906  sti->first_dts != AV_NOPTS_VALUE)) {
1907  if (pkt->duration == 0) {
1908  compute_frame_duration(ic, &num, &den, st, sti->parser, pkt);
1909  if (den && num) {
1911  num * (int64_t) st->time_base.den,
1912  den * (int64_t) st->time_base.num,
1913  AV_ROUND_DOWN);
1914  }
1915  }
1916  duration = pkt->pts + pkt->duration;
1917  found_duration = 1;
1918  if (st->start_time != AV_NOPTS_VALUE)
1919  duration -= st->start_time;
1920  else
1921  duration -= sti->first_dts;
1922  if (duration > 0) {
1923  if (st->duration == AV_NOPTS_VALUE || sti->info->last_duration<= 0 ||
1924  (st->duration < duration && FFABS(duration - sti->info->last_duration) < 60LL*st->time_base.den / st->time_base.num))
1925  st->duration = duration;
1926  sti->info->last_duration = duration;
1927  }
1928  }
1930  }
1931 
1932  /* check if all audio/video streams have valid duration */
1933  if (!is_end) {
1934  is_end = 1;
1935  for (unsigned i = 0; i < ic->nb_streams; i++) {
1936  const AVStream *const st = ic->streams[i];
1937  switch (st->codecpar->codec_type) {
1938  case AVMEDIA_TYPE_VIDEO:
1939  case AVMEDIA_TYPE_AUDIO:
1940  if (st->duration == AV_NOPTS_VALUE)
1941  is_end = 0;
1942  }
1943  }
1944  }
1945  } while (!is_end &&
1946  offset &&
1947  ++retry <= duration_max_retry);
1948 
1949  av_opt_set_int(ic, "skip_changes", 0, AV_OPT_SEARCH_CHILDREN);
1950 
1951  /* warn about audio/video streams which duration could not be estimated */
1952  for (unsigned i = 0; i < ic->nb_streams; i++) {
1953  const AVStream *const st = ic->streams[i];
1954  const FFStream *const sti = cffstream(st);
1955 
1956  if (st->duration == AV_NOPTS_VALUE) {
1957  switch (st->codecpar->codec_type) {
1958  case AVMEDIA_TYPE_VIDEO:
1959  case AVMEDIA_TYPE_AUDIO:
1960  if (st->start_time != AV_NOPTS_VALUE || sti->first_dts != AV_NOPTS_VALUE) {
1961  av_log(ic, AV_LOG_WARNING, "stream %d : no PTS found at end of file, duration not set\n", i);
1962  } else
1963  av_log(ic, AV_LOG_WARNING, "stream %d : no TS found at start of file, duration not set\n", i);
1964  }
1965  }
1966  }
1967 skip_duration_calc:
1969 
1970  avio_seek(ic->pb, old_offset, SEEK_SET);
1971  for (unsigned i = 0; i < ic->nb_streams; i++) {
1972  AVStream *const st = ic->streams[i];
1973  FFStream *const sti = ffstream(st);
1974 
1975  sti->cur_dts = sti->first_dts;
1976  sti->last_IP_pts = AV_NOPTS_VALUE;
1978  for (int j = 0; j < MAX_REORDER_DELAY + 1; j++)
1979  sti->pts_buffer[j] = AV_NOPTS_VALUE;
1980  }
1981 }
1982 
1983 /* 1:1 map to AVDurationEstimationMethod */
1984 static const char *const duration_name[] = {
1985  [AVFMT_DURATION_FROM_PTS] = "pts",
1986  [AVFMT_DURATION_FROM_STREAM] = "stream",
1987  [AVFMT_DURATION_FROM_BITRATE] = "bit rate",
1988 };
1989 
1991 {
1992  return duration_name[method];
1993 }
1994 
1995 static void estimate_timings(AVFormatContext *ic, int64_t old_offset)
1996 {
1997  int64_t file_size;
1998 
1999  /* get the file size, if possible */
2000  if (ic->iformat->flags & AVFMT_NOFILE) {
2001  file_size = 0;
2002  } else {
2003  file_size = avio_size(ic->pb);
2004  file_size = FFMAX(0, file_size);
2005  }
2006 
2007  if ((!strcmp(ic->iformat->name, "mpeg") ||
2008  !strcmp(ic->iformat->name, "mpegts")) &&
2009  file_size && (ic->pb->seekable & AVIO_SEEKABLE_NORMAL)) {
2010  /* get accurate estimate from the PTSes */
2011  estimate_timings_from_pts(ic, old_offset);
2013  } else if (has_duration(ic)) {
2014  /* at least one component has timings - we use them for all
2015  * the components */
2017  /* nut demuxer estimate the duration from PTS */
2018  if (!strcmp(ic->iformat->name, "nut"))
2020  else
2022  } else {
2023  /* less precise: use bitrate info */
2026  }
2028 
2029  for (unsigned i = 0; i < ic->nb_streams; i++) {
2030  AVStream *const st = ic->streams[i];
2031  if (st->time_base.den)
2032  av_log(ic, AV_LOG_TRACE, "stream %u: start_time: %s duration: %s\n", i,
2033  av_ts2timestr(st->start_time, &st->time_base),
2034  av_ts2timestr(st->duration, &st->time_base));
2035  }
2036  av_log(ic, AV_LOG_TRACE,
2037  "format: start_time: %s duration: %s (estimate from %s) bitrate=%"PRId64" kb/s\n",
2041  (int64_t)ic->bit_rate / 1000);
2042 }
2043 
2044 static int determinable_frame_size(const AVCodecContext *avctx)
2045 {
2046  switch(avctx->codec_id) {
2047  case AV_CODEC_ID_MP1:
2048  case AV_CODEC_ID_MP2:
2049  case AV_CODEC_ID_MP3:
2050  case AV_CODEC_ID_CODEC2:
2051  return 1;
2052  }
2053 
2054  return 0;
2055 }
2056 
2057 static int has_codec_parameters(const AVStream *st, const char **errmsg_ptr)
2058 {
2059  const FFStream *const sti = cffstream(st);
2060  const AVCodecContext *const avctx = sti->avctx;
2061 
2062 #define FAIL(errmsg) do { \
2063  if (errmsg_ptr) \
2064  *errmsg_ptr = errmsg; \
2065  return 0; \
2066  } while (0)
2067 
2068  if ( avctx->codec_id == AV_CODEC_ID_NONE
2069  && avctx->codec_type != AVMEDIA_TYPE_DATA)
2070  FAIL("unknown codec");
2071  switch (avctx->codec_type) {
2072  case AVMEDIA_TYPE_AUDIO:
2073  if (!avctx->frame_size && determinable_frame_size(avctx))
2074  FAIL("unspecified frame size");
2075  if (sti->info->found_decoder >= 0 &&
2076  avctx->sample_fmt == AV_SAMPLE_FMT_NONE)
2077  FAIL("unspecified sample format");
2078  if (!avctx->sample_rate)
2079  FAIL("unspecified sample rate");
2080  if (!avctx->ch_layout.nb_channels)
2081  FAIL("unspecified number of channels");
2082  if (sti->info->found_decoder >= 0 && !sti->nb_decoded_frames && avctx->codec_id == AV_CODEC_ID_DTS)
2083  FAIL("no decodable DTS frames");
2084  break;
2085  case AVMEDIA_TYPE_VIDEO:
2086  if (!avctx->width)
2087  FAIL("unspecified size");
2088  if (sti->info->found_decoder >= 0 && avctx->pix_fmt == AV_PIX_FMT_NONE)
2089  FAIL("unspecified pixel format");
2092  FAIL("no frame in rv30/40 and no sar");
2093  break;
2094  case AVMEDIA_TYPE_SUBTITLE:
2095  if (avctx->codec_id == AV_CODEC_ID_HDMV_PGS_SUBTITLE && !avctx->width)
2096  FAIL("unspecified size");
2097  break;
2098  case AVMEDIA_TYPE_DATA:
2099  if (avctx->codec_id == AV_CODEC_ID_NONE) return 1;
2100  }
2101 
2102  return 1;
2103 }
2104 
2105 /* returns 1 or 0 if or if not decoded data was returned, or a negative error */
2107  const AVPacket *pkt, AVDictionary **options)
2108 {
2109  FFStream *const sti = ffstream(st);
2110  AVCodecContext *const avctx = sti->avctx;
2111  const AVCodec *codec;
2112  int got_picture = 1, ret = 0;
2114  AVSubtitle subtitle;
2115  int do_skip_frame = 0;
2116  enum AVDiscard skip_frame;
2117  int pkt_to_send = pkt->size > 0;
2118 
2119  if (!frame)
2120  return AVERROR(ENOMEM);
2121 
2122  if (!avcodec_is_open(avctx) &&
2123  sti->info->found_decoder <= 0 &&
2124  (st->codecpar->codec_id != -sti->info->found_decoder || !st->codecpar->codec_id)) {
2125  AVDictionary *thread_opt = NULL;
2126 
2127  codec = find_probe_decoder(s, st, st->codecpar->codec_id);
2128 
2129  if (!codec) {
2130  sti->info->found_decoder = -st->codecpar->codec_id;
2131  ret = -1;
2132  goto fail;
2133  }
2134 
2135  /* Force thread count to 1 since the H.264 decoder will not extract
2136  * SPS and PPS to extradata during multi-threaded decoding. */
2137  av_dict_set(options ? options : &thread_opt, "threads", "1", 0);
2138  /* Force lowres to 0. The decoder might reduce the video size by the
2139  * lowres factor, and we don't want that propagated to the stream's
2140  * codecpar */
2141  av_dict_set(options ? options : &thread_opt, "lowres", "0", 0);
2142  if (s->codec_whitelist)
2143  av_dict_set(options ? options : &thread_opt, "codec_whitelist", s->codec_whitelist, 0);
2144  ret = avcodec_open2(avctx, codec, options ? options : &thread_opt);
2145  if (!options)
2146  av_dict_free(&thread_opt);
2147  if (ret < 0) {
2148  sti->info->found_decoder = -avctx->codec_id;
2149  goto fail;
2150  }
2151  sti->info->found_decoder = 1;
2152  } else if (!sti->info->found_decoder)
2153  sti->info->found_decoder = 1;
2154 
2155  if (sti->info->found_decoder < 0) {
2156  ret = -1;
2157  goto fail;
2158  }
2159 
2161  do_skip_frame = 1;
2162  skip_frame = avctx->skip_frame;
2163  avctx->skip_frame = AVDISCARD_ALL;
2164  }
2165 
2166  while ((pkt_to_send || (!pkt->data && got_picture)) &&
2167  ret >= 0 &&
2169  (!sti->codec_info_nb_frames &&
2171  got_picture = 0;
2172  if (avctx->codec_type == AVMEDIA_TYPE_VIDEO ||
2173  avctx->codec_type == AVMEDIA_TYPE_AUDIO) {
2174  ret = avcodec_send_packet(avctx, pkt);
2175  if (ret < 0 && ret != AVERROR(EAGAIN) && ret != AVERROR_EOF)
2176  break;
2177  if (ret >= 0)
2178  pkt_to_send = 0;
2179  ret = avcodec_receive_frame(avctx, frame);
2180  if (ret >= 0)
2181  got_picture = 1;
2182  if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF)
2183  ret = 0;
2184  } else if (avctx->codec_type == AVMEDIA_TYPE_SUBTITLE) {
2185  ret = avcodec_decode_subtitle2(avctx, &subtitle,
2186  &got_picture, pkt);
2187  if (got_picture)
2188  avsubtitle_free(&subtitle);
2189  if (ret >= 0)
2190  pkt_to_send = 0;
2191  }
2192  if (ret >= 0) {
2193  if (got_picture)
2194  sti->nb_decoded_frames++;
2195  ret = got_picture;
2196  }
2197  }
2198 
2199 fail:
2200  if (do_skip_frame) {
2201  avctx->skip_frame = skip_frame;
2202  }
2203 
2204  av_frame_free(&frame);
2205  return ret;
2206 }
2207 
2208 static int chapter_start_cmp(const void *p1, const void *p2)
2209 {
2210  const AVChapter *const ch1 = *(AVChapter**)p1;
2211  const AVChapter *const ch2 = *(AVChapter**)p2;
2212  int delta = av_compare_ts(ch1->start, ch1->time_base, ch2->start, ch2->time_base);
2213  if (delta)
2214  return delta;
2215  return FFDIFFSIGN(ch1->id, ch2->id);
2216 }
2217 
2219 {
2220  int64_t max_time = 0;
2221  AVChapter **timetable;
2222 
2223  if (!s->nb_chapters)
2224  return 0;
2225 
2226  if (s->duration > 0 && s->start_time < INT64_MAX - s->duration)
2227  max_time = s->duration +
2228  ((s->start_time == AV_NOPTS_VALUE) ? 0 : s->start_time);
2229 
2230  timetable = av_memdup(s->chapters, s->nb_chapters * sizeof(*timetable));
2231  if (!timetable)
2232  return AVERROR(ENOMEM);
2233  qsort(timetable, s->nb_chapters, sizeof(*timetable), chapter_start_cmp);
2234 
2235  for (unsigned i = 0; i < s->nb_chapters; i++)
2236  if (timetable[i]->end == AV_NOPTS_VALUE) {
2237  AVChapter *const ch = timetable[i];
2238  int64_t end = max_time ? av_rescale_q(max_time, AV_TIME_BASE_Q,
2239  ch->time_base)
2240  : INT64_MAX;
2241 
2242  if (i + 1 < s->nb_chapters) {
2243  const AVChapter *const ch1 = timetable[i + 1];
2244  int64_t next_start = av_rescale_q(ch1->start, ch1->time_base,
2245  ch->time_base);
2246  if (next_start > ch->start && next_start < end)
2247  end = next_start;
2248  }
2249  ch->end = (end == INT64_MAX || end < ch->start) ? ch->start : end;
2250  }
2251  av_free(timetable);
2252  return 0;
2253 }
2254 
2255 static int get_std_framerate(int i)
2256 {
2257  if (i < 30*12)
2258  return (i + 1) * 1001;
2259  i -= 30*12;
2260 
2261  if (i < 30)
2262  return (i + 31) * 1001 * 12;
2263  i -= 30;
2264 
2265  if (i < 3)
2266  return ((const int[]) { 80, 120, 240})[i] * 1001 * 12;
2267 
2268  i -= 3;
2269 
2270  return ((const int[]) { 24, 30, 60, 12, 15, 48 })[i] * 1000 * 12;
2271 }
2272 
2273 /* Is the time base unreliable?
2274  * This is a heuristic to balance between quick acceptance of the values in
2275  * the headers vs. some extra checks.
2276  * Old DivX and Xvid often have nonsense timebases like 1fps or 2fps.
2277  * MPEG-2 commonly misuses field repeat flags to store different framerates.
2278  * And there are "variable" fps files this needs to detect as well. */
2280 {
2281  FFStream *const sti = ffstream(st);
2282  const AVCodecDescriptor *desc = sti->codec_desc;
2283  AVCodecContext *c = sti->avctx;
2284  AVRational mul = (AVRational){ desc && (desc->props & AV_CODEC_PROP_FIELDS) ? 2 : 1, 1 };
2285  AVRational time_base = c->framerate.num ? av_inv_q(av_mul_q(c->framerate, mul))
2286  /* NOHEADER check added to not break existing behavior */
2287  : (((ic->ctx_flags & AVFMTCTX_NOHEADER) ||
2289  : st->time_base);
2290 
2291  if (time_base.den >= 101LL * time_base.num ||
2292  time_base.den < 5LL * time_base.num ||
2293  // c->codec_tag == AV_RL32("DIVX") ||
2294  // c->codec_tag == AV_RL32("XVID") ||
2295  c->codec_tag == AV_RL32("mp4v") ||
2296  c->codec_id == AV_CODEC_ID_MPEG2VIDEO ||
2297  c->codec_id == AV_CODEC_ID_GIF ||
2298  c->codec_id == AV_CODEC_ID_HEVC ||
2299  c->codec_id == AV_CODEC_ID_H264)
2300  return 1;
2301  return 0;
2302 }
2303 
2305 {
2306  FFStream *const sti = ffstream(st);
2307  FFStreamInfo *info = sti->info;
2308  int64_t last = info->last_dts;
2309 
2310  if ( ts != AV_NOPTS_VALUE && last != AV_NOPTS_VALUE && ts > last
2311  && ts - (uint64_t)last < INT64_MAX) {
2312  double dts = (is_relative(ts) ? ts - RELATIVE_TS_BASE : ts) * av_q2d(st->time_base);
2313  int64_t duration = ts - last;
2314 
2315  if (!info->duration_error)
2316  info->duration_error = av_mallocz(sizeof(info->duration_error[0])*2);
2317  if (!info->duration_error)
2318  return AVERROR(ENOMEM);
2319 
2320 // if (st->codec->codec_type == AVMEDIA_TYPE_VIDEO)
2321 // av_log(NULL, AV_LOG_ERROR, "%f\n", dts);
2322  for (int i = 0; i < MAX_STD_TIMEBASES; i++) {
2323  if (info->duration_error[0][1][i] < 1e10) {
2324  int framerate = get_std_framerate(i);
2325  double sdts = dts*framerate/(1001*12);
2326  for (int j = 0; j < 2; j++) {
2327  int64_t ticks = llrint(sdts+j*0.5);
2328  double error = sdts - ticks + j*0.5;
2329  info->duration_error[j][0][i] += error;
2330  info->duration_error[j][1][i] += error*error;
2331  }
2332  }
2333  }
2334  if (info->rfps_duration_sum <= INT64_MAX - duration) {
2335  info->duration_count++;
2336  info->rfps_duration_sum += duration;
2337  }
2338 
2339  if (info->duration_count % 10 == 0) {
2340  int n = info->duration_count;
2341  for (int i = 0; i < MAX_STD_TIMEBASES; i++) {
2342  if (info->duration_error[0][1][i] < 1e10) {
2343  double a0 = info->duration_error[0][0][i] / n;
2344  double error0 = info->duration_error[0][1][i] / n - a0*a0;
2345  double a1 = info->duration_error[1][0][i] / n;
2346  double error1 = info->duration_error[1][1][i] / n - a1*a1;
2347  if (error0 > 0.04 && error1 > 0.04) {
2348  info->duration_error[0][1][i] = 2e10;
2349  info->duration_error[1][1][i] = 2e10;
2350  }
2351  }
2352  }
2353  }
2354 
2355  // ignore the first 4 values, they might have some random jitter
2356  if (info->duration_count > 3 && is_relative(ts) == is_relative(last))
2357  info->duration_gcd = av_gcd(info->duration_gcd, duration);
2358  }
2359  if (ts != AV_NOPTS_VALUE)
2360  info->last_dts = ts;
2361 
2362  return 0;
2363 }
2364 
2366 {
2367  for (unsigned i = 0; i < ic->nb_streams; i++) {
2368  AVStream *const st = ic->streams[i];
2369  FFStream *const sti = ffstream(st);
2370 
2372  continue;
2373  // the check for tb_unreliable() is not completely correct, since this is not about handling
2374  // an unreliable/inexact time base, but a time base that is finer than necessary, as e.g.
2375  // ipmovie.c produces.
2376  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 &&
2377  sti->info->duration_gcd < INT64_MAX / st->time_base.num)
2378  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);
2379  if (sti->info->duration_count > 1 && !st->r_frame_rate.num
2380  && tb_unreliable(ic, st)) {
2381  int num = 0;
2382  double best_error = 0.01;
2383  AVRational ref_rate = st->r_frame_rate.num ? st->r_frame_rate : av_inv_q(st->time_base);
2384 
2385  for (int j = 0; j < MAX_STD_TIMEBASES; j++) {
2386  if (sti->info->codec_info_duration &&
2387  sti->info->codec_info_duration*av_q2d(st->time_base) < (1001*11.5)/get_std_framerate(j))
2388  continue;
2389  if (!sti->info->codec_info_duration && get_std_framerate(j) < 1001*12)
2390  continue;
2391 
2392  if (av_q2d(st->time_base) * sti->info->rfps_duration_sum / sti->info->duration_count < (1001*12.0 * 0.8)/get_std_framerate(j))
2393  continue;
2394 
2395  for (int k = 0; k < 2; k++) {
2396  int n = sti->info->duration_count;
2397  double a = sti->info->duration_error[k][0][j] / n;
2398  double error = sti->info->duration_error[k][1][j]/n - a*a;
2399 
2400  if (error < best_error && best_error> 0.000000001) {
2401  best_error= error;
2402  num = get_std_framerate(j);
2403  }
2404  if (error < 0.02)
2405  av_log(ic, AV_LOG_DEBUG, "rfps: %f %f\n", get_std_framerate(j) / 12.0/1001, error);
2406  }
2407  }
2408  // do not increase frame rate by more than 1 % in order to match a standard rate.
2409  if (num && (!ref_rate.num || (double)num/(12*1001) < 1.01 * av_q2d(ref_rate)))
2410  av_reduce(&st->r_frame_rate.num, &st->r_frame_rate.den, num, 12*1001, INT_MAX);
2411  }
2412  if ( !st->avg_frame_rate.num
2413  && st->r_frame_rate.num && sti->info->rfps_duration_sum
2414  && sti->info->codec_info_duration <= 0
2415  && sti->info->duration_count > 2
2416  && 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
2417  ) {
2418  av_log(ic, AV_LOG_DEBUG, "Setting avg frame rate based on r frame rate\n");
2419  st->avg_frame_rate = st->r_frame_rate;
2420  }
2421 
2422  av_freep(&sti->info->duration_error);
2423  sti->info->last_dts = AV_NOPTS_VALUE;
2424  sti->info->duration_count = 0;
2425  sti->info->rfps_duration_sum = 0;
2426  }
2427 }
2428 
2430 {
2431  const AVBitStreamFilter *const f = av_bsf_get_by_name("extract_extradata");
2432  if (!f)
2433  return 0;
2434 
2435  if (f->codec_ids) {
2436  const enum AVCodecID *ids;
2437  for (ids = f->codec_ids; *ids != AV_CODEC_ID_NONE; ids++)
2438  if (*ids == st->codecpar->codec_id)
2439  return 1;
2440  }
2441 
2442  return 0;
2443 }
2444 
2446 {
2447  FFStream *const sti = ffstream(st);
2448  const AVBitStreamFilter *f;
2449  int ret;
2450 
2451  f = av_bsf_get_by_name("extract_extradata");
2452  if (!f)
2453  goto finish;
2454 
2455  /* check that the codec id is supported */
2457  if (!ret)
2458  goto finish;
2459 
2462  if (ret < 0)
2463  return ret;
2464 
2466  st->codecpar);
2467  if (ret < 0)
2468  goto fail;
2469 
2471 
2473  if (ret < 0)
2474  goto fail;
2475 
2476 finish:
2477  sti->extract_extradata.inited = 1;
2478 
2479  return 0;
2480 fail:
2482  return ret;
2483 }
2484 
2486 {
2487  FFStream *const sti = ffstream(st);
2488  AVPacket *const pkt_ref = si->parse_pkt;
2489  int ret;
2490 
2491  if (!sti->extract_extradata.inited) {
2493  if (ret < 0)
2494  return ret;
2495  }
2496 
2497  if (sti->extract_extradata.inited && !sti->extract_extradata.bsf)
2498  return 0;
2499 
2500  ret = av_packet_ref(pkt_ref, pkt);
2501  if (ret < 0)
2502  return ret;
2503 
2504  ret = av_bsf_send_packet(sti->extract_extradata.bsf, pkt_ref);
2505  if (ret < 0) {
2506  av_packet_unref(pkt_ref);
2507  return ret;
2508  }
2509 
2510  while (ret >= 0 && !sti->avctx->extradata) {
2512  if (ret < 0) {
2513  if (ret != AVERROR(EAGAIN) && ret != AVERROR_EOF)
2514  return ret;
2515  continue;
2516  }
2517 
2518  for (int i = 0; i < pkt_ref->side_data_elems; i++) {
2519  AVPacketSideData *const side_data = &pkt_ref->side_data[i];
2520  if (side_data->type == AV_PKT_DATA_NEW_EXTRADATA) {
2521  sti->avctx->extradata = side_data->data;
2522  sti->avctx->extradata_size = side_data->size;
2523  side_data->data = NULL;
2524  side_data->size = 0;
2525  break;
2526  }
2527  }
2528  av_packet_unref(pkt_ref);
2529  }
2530 
2531  return 0;
2532 }
2533 
2535 {
2536  FFFormatContext *const si = ffformatcontext(ic);
2537  int count = 0, ret = 0, err;
2538  int64_t read_size;
2539  AVPacket *pkt1 = si->pkt;
2540  int64_t old_offset = avio_tell(ic->pb);
2541  // new streams might appear, no options for those
2542  int orig_nb_streams = ic->nb_streams;
2543  int flush_codecs;
2544  int64_t max_analyze_duration = ic->max_analyze_duration;
2545  int64_t max_stream_analyze_duration;
2546  int64_t max_subtitle_analyze_duration;
2547  int64_t probesize = ic->probesize;
2548  int eof_reached = 0;
2549 
2550  flush_codecs = probesize > 0;
2551 
2552  av_opt_set_int(ic, "skip_clear", 1, AV_OPT_SEARCH_CHILDREN);
2553 
2554  max_stream_analyze_duration = max_analyze_duration;
2555  max_subtitle_analyze_duration = max_analyze_duration;
2556  if (!max_analyze_duration) {
2557  max_stream_analyze_duration =
2558  max_analyze_duration = 5*AV_TIME_BASE;
2559  max_subtitle_analyze_duration = 30*AV_TIME_BASE;
2560  if (!strcmp(ic->iformat->name, "flv"))
2561  max_stream_analyze_duration = 90*AV_TIME_BASE;
2562  if (!strcmp(ic->iformat->name, "mpeg") || !strcmp(ic->iformat->name, "mpegts"))
2563  max_stream_analyze_duration = 7*AV_TIME_BASE;
2564  }
2565 
2566  if (ic->pb) {
2567  FFIOContext *const ctx = ffiocontext(ic->pb);
2568  av_log(ic, AV_LOG_DEBUG, "Before avformat_find_stream_info() pos: %"PRId64" bytes read:%"PRId64" seeks:%d nb_streams:%d\n",
2569  avio_tell(ic->pb), ctx->bytes_read, ctx->seek_count, ic->nb_streams);
2570  }
2571 
2572  for (unsigned i = 0; i < ic->nb_streams; i++) {
2573  const AVCodec *codec;
2574  AVDictionary *thread_opt = NULL;
2575  AVStream *const st = ic->streams[i];
2576  FFStream *const sti = ffstream(st);
2577  AVCodecContext *const avctx = sti->avctx;
2578 
2579  /* check if the caller has overridden the codec id */
2580  // only for the split stuff
2581  if (!sti->parser && !(ic->flags & AVFMT_FLAG_NOPARSE) && sti->request_probe <= 0) {
2582  sti->parser = av_parser_init(st->codecpar->codec_id);
2583  if (sti->parser) {
2584  if (sti->need_parsing == AVSTREAM_PARSE_HEADERS) {
2586  } else if (sti->need_parsing == AVSTREAM_PARSE_FULL_RAW) {
2588  }
2589  } else if (sti->need_parsing) {
2590  av_log(ic, AV_LOG_VERBOSE, "parser not found for codec "
2591  "%s, packets or times may be invalid.\n",
2593  }
2594  }
2595 
2597  if (ret < 0)
2598  goto find_stream_info_err;
2599  if (sti->request_probe <= 0)
2600  sti->avctx_inited = 1;
2601 
2602  codec = find_probe_decoder(ic, st, st->codecpar->codec_id);
2603 
2604  /* Force thread count to 1 since the H.264 decoder will not extract
2605  * SPS and PPS to extradata during multi-threaded decoding. */
2606  av_dict_set(options ? &options[i] : &thread_opt, "threads", "1", 0);
2607  /* Force lowres to 0. The decoder might reduce the video size by the
2608  * lowres factor, and we don't want that propagated to the stream's
2609  * codecpar */
2610  av_dict_set(options ? &options[i] : &thread_opt, "lowres", "0", 0);
2611 
2612  if (ic->codec_whitelist)
2613  av_dict_set(options ? &options[i] : &thread_opt, "codec_whitelist", ic->codec_whitelist, 0);
2614 
2615  // Try to just open decoders, in case this is enough to get parameters.
2616  // Also ensure that subtitle_header is properly set.
2617  if (!has_codec_parameters(st, NULL) && sti->request_probe <= 0 ||
2619  if (codec && !avctx->codec)
2620  if (avcodec_open2(avctx, codec, options ? &options[i] : &thread_opt) < 0)
2621  av_log(ic, AV_LOG_WARNING,
2622  "Failed to open codec in %s\n", __func__);
2623  }
2624  if (!options)
2625  av_dict_free(&thread_opt);
2626  }
2627 
2628  read_size = 0;
2629  for (;;) {
2630  const AVPacket *pkt;
2631  AVStream *st;
2632  FFStream *sti;
2633  AVCodecContext *avctx;
2634  int analyzed_all_streams;
2635  unsigned i;
2637  ret = AVERROR_EXIT;
2638  av_log(ic, AV_LOG_DEBUG, "interrupted\n");
2639  break;
2640  }
2641 
2642  /* check if one codec still needs to be handled */
2643  for (i = 0; i < ic->nb_streams; i++) {
2644  AVStream *const st = ic->streams[i];
2645  FFStream *const sti = ffstream(st);
2646  int fps_analyze_framecount = 20;
2647  int count;
2648 
2649  if (!has_codec_parameters(st, NULL))
2650  break;
2651  /* If the timebase is coarse (like the usual millisecond precision
2652  * of mkv), we need to analyze more frames to reliably arrive at
2653  * the correct fps. */
2654  if (av_q2d(st->time_base) > 0.0005)
2655  fps_analyze_framecount *= 2;
2656  if (!tb_unreliable(ic, st))
2657  fps_analyze_framecount = 0;
2658  if (ic->fps_probe_size >= 0)
2659  fps_analyze_framecount = ic->fps_probe_size;
2661  fps_analyze_framecount = 0;
2662  /* variable fps and no guess at the real fps */
2663  count = (ic->iformat->flags & AVFMT_NOTIMESTAMPS) ?
2665  sti->info->duration_count;
2666  if (!(st->r_frame_rate.num && st->avg_frame_rate.num) &&
2668  if (count < fps_analyze_framecount)
2669  break;
2670  }
2671  // Look at the first 3 frames if there is evidence of frame delay
2672  // but the decoder delay is not set.
2673  if (sti->info->frame_delay_evidence && count < 2 && sti->avctx->has_b_frames == 0)
2674  break;
2675  if (!sti->avctx->extradata &&
2676  (!sti->extract_extradata.inited || sti->extract_extradata.bsf) &&
2678  break;
2679  if (sti->first_dts == AV_NOPTS_VALUE &&
2684  break;
2685  }
2686  analyzed_all_streams = 0;
2687  if (i == ic->nb_streams && !si->missing_streams) {
2688  analyzed_all_streams = 1;
2689  /* NOTE: If the format has no header, then we need to read some
2690  * packets to get most of the streams, so we cannot stop here. */
2691  if (!(ic->ctx_flags & AVFMTCTX_NOHEADER)) {
2692  /* If we found the info for all the codecs, we can stop. */
2693  ret = count;
2694  av_log(ic, AV_LOG_DEBUG, "All info found\n");
2695  flush_codecs = 0;
2696  break;
2697  }
2698  }
2699  /* We did not get all the codec info, but we read too much data. */
2700  if (read_size >= probesize) {
2701  ret = count;
2702  av_log(ic, AV_LOG_DEBUG,
2703  "Probe buffer size limit of %"PRId64" bytes reached\n", probesize);
2704  for (unsigned i = 0; i < ic->nb_streams; i++) {
2705  AVStream *const st = ic->streams[i];
2706  FFStream *const sti = ffstream(st);
2707  if (!st->r_frame_rate.num &&
2708  sti->info->duration_count <= 1 &&
2710  strcmp(ic->iformat->name, "image2"))
2711  av_log(ic, AV_LOG_WARNING,
2712  "Stream #%d: not enough frames to estimate rate; "
2713  "consider increasing probesize\n", i);
2714  }
2715  break;
2716  }
2717 
2718  /* NOTE: A new stream can be added there if no header in file
2719  * (AVFMTCTX_NOHEADER). */
2720  ret = read_frame_internal(ic, pkt1);
2721  if (ret == AVERROR(EAGAIN))
2722  continue;
2723 
2724  if (ret < 0) {
2725  /* EOF or error*/
2726  eof_reached = 1;
2727  break;
2728  }
2729 
2730  if (!(ic->flags & AVFMT_FLAG_NOBUFFER)) {
2732  pkt1, NULL, 0);
2733  if (ret < 0)
2734  goto unref_then_goto_end;
2735 
2736  pkt = &si->packet_buffer.tail->pkt;
2737  } else {
2738  pkt = pkt1;
2739  }
2740 
2741  st = ic->streams[pkt->stream_index];
2742  sti = ffstream(st);
2744  read_size += pkt->size;
2745 
2746  avctx = sti->avctx;
2747  if (!sti->avctx_inited) {
2749  if (ret < 0)
2750  goto unref_then_goto_end;
2751  sti->avctx_inited = 1;
2752  }
2753 
2754  if (pkt->dts != AV_NOPTS_VALUE && sti->codec_info_nb_frames > 1) {
2755  /* check for non-increasing dts */
2756  if (sti->info->fps_last_dts != AV_NOPTS_VALUE &&
2757  sti->info->fps_last_dts >= pkt->dts) {
2758  av_log(ic, AV_LOG_DEBUG,
2759  "Non-increasing DTS in stream %d: packet %d with DTS "
2760  "%"PRId64", packet %d with DTS %"PRId64"\n",
2761  st->index, sti->info->fps_last_dts_idx,
2763  pkt->dts);
2764  sti->info->fps_first_dts =
2766  }
2767  /* Check for a discontinuity in dts. If the difference in dts
2768  * is more than 1000 times the average packet duration in the
2769  * sequence, we treat it as a discontinuity. */
2770  if (sti->info->fps_last_dts != AV_NOPTS_VALUE &&
2771  sti->info->fps_last_dts_idx > sti->info->fps_first_dts_idx &&
2772  (pkt->dts - (uint64_t)sti->info->fps_last_dts) / 1000 >
2773  (sti->info->fps_last_dts - (uint64_t)sti->info->fps_first_dts) /
2774  (sti->info->fps_last_dts_idx - sti->info->fps_first_dts_idx)) {
2775  av_log(ic, AV_LOG_WARNING,
2776  "DTS discontinuity in stream %d: packet %d with DTS "
2777  "%"PRId64", packet %d with DTS %"PRId64"\n",
2778  st->index, sti->info->fps_last_dts_idx,
2780  pkt->dts);
2781  sti->info->fps_first_dts =
2783  }
2784 
2785  /* update stored dts values */
2786  if (sti->info->fps_first_dts == AV_NOPTS_VALUE) {
2787  sti->info->fps_first_dts = pkt->dts;
2789  }
2790  sti->info->fps_last_dts = pkt->dts;
2792  }
2793  if (sti->codec_info_nb_frames > 1) {
2794  int64_t t = 0;
2795  int64_t limit;
2796 
2797  if (st->time_base.den > 0)
2799  if (st->avg_frame_rate.num > 0)
2801 
2802  if ( t == 0
2803  && sti->codec_info_nb_frames > 30
2804  && sti->info->fps_first_dts != AV_NOPTS_VALUE
2805  && sti->info->fps_last_dts != AV_NOPTS_VALUE) {
2807  t = FFMAX(t, av_rescale_q(dur, st->time_base, AV_TIME_BASE_Q));
2808  }
2809 
2810  if (analyzed_all_streams) limit = max_analyze_duration;
2811  else if (avctx->codec_type == AVMEDIA_TYPE_SUBTITLE) limit = max_subtitle_analyze_duration;
2812  else limit = max_stream_analyze_duration;
2813 
2814  if (t >= limit) {
2815  av_log(ic, AV_LOG_VERBOSE, "max_analyze_duration %"PRId64" reached at %"PRId64" microseconds st:%d\n",
2816  limit,
2817  t, pkt->stream_index);
2818  if (ic->flags & AVFMT_FLAG_NOBUFFER)
2819  av_packet_unref(pkt1);
2820  break;
2821  }
2822  if (pkt->duration > 0 && pkt->duration < INT64_MAX - sti->info->codec_info_duration) {
2823  const int fields = sti->codec_desc && (sti->codec_desc->props & AV_CODEC_PROP_FIELDS);
2825  && (uint64_t)pkt->pts - st->start_time < INT64_MAX
2826  ) {
2828  } else
2830  sti->info->codec_info_duration_fields += sti->parser && sti->need_parsing && fields
2831  ? sti->parser->repeat_pict + 1 : 2;
2832  }
2833  }
2834  if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) {
2835 #if FF_API_R_FRAME_RATE
2836  ff_rfps_add_frame(ic, st, pkt->dts);
2837 #endif
2838  if (pkt->dts != pkt->pts && pkt->dts != AV_NOPTS_VALUE && pkt->pts != AV_NOPTS_VALUE)
2839  sti->info->frame_delay_evidence = 1;
2840  }
2841  if (!sti->avctx->extradata) {
2842  ret = extract_extradata(si, st, pkt);
2843  if (ret < 0)
2844  goto unref_then_goto_end;
2845  }
2846 
2847  /* If still no information, we try to open the codec and to
2848  * decompress the frame. We try to avoid that in most cases as
2849  * it takes longer and uses more memory. For MPEG-4, we need to
2850  * decompress for QuickTime.
2851  *
2852  * If AV_CODEC_CAP_CHANNEL_CONF is set this will force decoding of at
2853  * least one frame of codec data, this makes sure the codec initializes
2854  * the channel configuration and does not only trust the values from
2855  * the container. */
2856  try_decode_frame(ic, st, pkt,
2857  (options && i < orig_nb_streams) ? &options[i] : NULL);
2858 
2859  if (ic->flags & AVFMT_FLAG_NOBUFFER)
2860  av_packet_unref(pkt1);
2861 
2862  sti->codec_info_nb_frames++;
2863  count++;
2864  }
2865 
2866  if (eof_reached) {
2867  for (unsigned stream_index = 0; stream_index < ic->nb_streams; stream_index++) {
2868  AVStream *const st = ic->streams[stream_index];
2869  AVCodecContext *const avctx = ffstream(st)->avctx;
2870  if (!has_codec_parameters(st, NULL)) {
2871  const AVCodec *codec = find_probe_decoder(ic, st, st->codecpar->codec_id);
2872  if (codec && !avctx->codec) {
2873  AVDictionary *opts = NULL;
2874  if (ic->codec_whitelist)
2875  av_dict_set(&opts, "codec_whitelist", ic->codec_whitelist, 0);
2876  if (avcodec_open2(avctx, codec, (options && stream_index < orig_nb_streams) ? &options[stream_index] : &opts) < 0)
2877  av_log(ic, AV_LOG_WARNING,
2878  "Failed to open codec in %s\n", __func__);
2879  av_dict_free(&opts);
2880  }
2881  }
2882 
2883  // EOF already reached while reading the stream above.
2884  // So continue with reoordering DTS with whatever delay we have.
2886  update_dts_from_pts(ic, stream_index, si->packet_buffer.head);
2887  }
2888  }
2889  }
2890 
2891  if (flush_codecs) {
2892  AVPacket *empty_pkt = si->pkt;
2893  int err = 0;
2894  av_packet_unref(empty_pkt);
2895 
2896  for (unsigned i = 0; i < ic->nb_streams; i++) {
2897  AVStream *const st = ic->streams[i];
2898  FFStream *const sti = ffstream(st);
2899 
2900  /* flush the decoders */
2901  if (sti->info->found_decoder == 1) {
2902  err = try_decode_frame(ic, st, empty_pkt,
2903  (options && i < orig_nb_streams)
2904  ? &options[i] : NULL);
2905 
2906  if (err < 0) {
2907  av_log(ic, AV_LOG_INFO,
2908  "decoding for stream %d failed\n", st->index);
2909  }
2910  }
2911  }
2912  }
2913 
2914  ff_rfps_calculate(ic);
2915 
2916  for (unsigned i = 0; i < ic->nb_streams; i++) {
2917  AVStream *const st = ic->streams[i];
2918  FFStream *const sti = ffstream(st);
2919  AVCodecContext *const avctx = sti->avctx;
2920 
2921  if (avctx->codec_type == AVMEDIA_TYPE_VIDEO) {
2922  if (avctx->codec_id == AV_CODEC_ID_RAWVIDEO && !avctx->codec_tag && !avctx->bits_per_coded_sample) {
2923  uint32_t tag= avcodec_pix_fmt_to_codec_tag(avctx->pix_fmt);
2925  avctx->codec_tag= tag;
2926  }
2927 
2928  /* estimate average framerate if not set by demuxer */
2929  if (sti->info->codec_info_duration_fields &&
2930  !st->avg_frame_rate.num &&
2931  sti->info->codec_info_duration) {
2932  int best_fps = 0;
2933  double best_error = 0.01;
2934  AVRational codec_frame_rate = avctx->framerate;
2935 
2936  if (sti->info->codec_info_duration >= INT64_MAX / st->time_base.num / 2||
2937  sti->info->codec_info_duration_fields >= INT64_MAX / st->time_base.den ||
2938  sti->info->codec_info_duration < 0)
2939  continue;
2942  sti->info->codec_info_duration * 2 * (int64_t) st->time_base.num, 60000);
2943 
2944  /* Round guessed framerate to a "standard" framerate if it's
2945  * within 1% of the original estimate. */
2946  for (int j = 0; j < MAX_STD_TIMEBASES; j++) {
2947  AVRational std_fps = { get_std_framerate(j), 12 * 1001 };
2948  double error = fabs(av_q2d(st->avg_frame_rate) /
2949  av_q2d(std_fps) - 1);
2950 
2951  if (error < best_error) {
2952  best_error = error;
2953  best_fps = std_fps.num;
2954  }
2955 
2957  codec_frame_rate.num > 0 && codec_frame_rate.den > 0) {
2958  error = fabs(av_q2d(codec_frame_rate) /
2959  av_q2d(std_fps) - 1);
2960  if (error < best_error) {
2961  best_error = error;
2962  best_fps = std_fps.num;
2963  }
2964  }
2965  }
2966  if (best_fps)
2968  best_fps, 12 * 1001, INT_MAX);
2969  }
2970  if (!st->r_frame_rate.num) {
2971  const AVCodecDescriptor *desc = sti->codec_desc;
2972  AVRational mul = (AVRational){ desc && (desc->props & AV_CODEC_PROP_FIELDS) ? 2 : 1, 1 };
2973  AVRational fr = av_mul_q(avctx->framerate, mul);
2974 
2975  if (fr.num && fr.den && av_cmp_q(st->time_base, av_inv_q(fr)) <= 0) {
2976  st->r_frame_rate = fr;
2977  } else {
2978  st->r_frame_rate.num = st->time_base.den;
2979  st->r_frame_rate.den = st->time_base.num;
2980  }
2981  }
2982  st->codecpar->framerate = avctx->framerate;
2983  if (sti->display_aspect_ratio.num && sti->display_aspect_ratio.den) {
2984  AVRational hw_ratio = { avctx->height, avctx->width };
2986  hw_ratio);
2987  }
2988  } else if (avctx->codec_type == AVMEDIA_TYPE_AUDIO) {
2989  if (!avctx->bits_per_coded_sample)
2990  avctx->bits_per_coded_sample =
2992  // set stream disposition based on audio service type
2993  switch (avctx->audio_service_type) {
2996  break;
2999  break;
3002  break;
3005  break;
3008  break;
3009  }
3010  }
3011  }
3012 
3013  if (probesize)
3014  estimate_timings(ic, old_offset);
3015 
3016  av_opt_set_int(ic, "skip_clear", 0, AV_OPT_SEARCH_CHILDREN);
3017 
3018  if (ret >= 0 && ic->nb_streams)
3019  /* We could not have all the codec parameters before EOF. */
3020  ret = -1;
3021  for (unsigned i = 0; i < ic->nb_streams; i++) {
3022  AVStream *const st = ic->streams[i];
3023  FFStream *const sti = ffstream(st);
3024  const char *errmsg;
3025 
3026  /* if no packet was ever seen, update context now for has_codec_parameters */
3027  if (!sti->avctx_inited) {
3028  if (st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO &&
3030  st->codecpar->format = sti->avctx->sample_fmt;
3032  if (ret < 0)
3033  goto find_stream_info_err;
3034  }
3035  if (!has_codec_parameters(st, &errmsg)) {
3036  char buf[256];
3037  avcodec_string(buf, sizeof(buf), sti->avctx, 0);
3038  av_log(ic, AV_LOG_WARNING,
3039  "Could not find codec parameters for stream %d (%s): %s\n"
3040  "Consider increasing the value for the 'analyzeduration' (%"PRId64") and 'probesize' (%"PRId64") options\n",
3041  i, buf, errmsg, ic->max_analyze_duration, ic->probesize);
3042  } else {
3043  ret = 0;
3044  }
3045  }
3046 
3047  err = compute_chapters_end(ic);
3048  if (err < 0) {
3049  ret = err;
3050  goto find_stream_info_err;
3051  }
3052 
3053  /* update the stream parameters from the internal codec contexts */
3054  for (unsigned i = 0; i < ic->nb_streams; i++) {
3055  AVStream *const st = ic->streams[i];
3056  FFStream *const sti = ffstream(st);
3057 
3058  if (sti->avctx_inited) {
3060  if (ret < 0)
3061  goto find_stream_info_err;
3062 
3063  if (sti->avctx->rc_buffer_size > 0 || sti->avctx->rc_max_rate > 0 ||
3064  sti->avctx->rc_min_rate) {
3065  size_t cpb_size;
3066  AVCPBProperties *props = av_cpb_properties_alloc(&cpb_size);
3067  if (props) {
3068  if (sti->avctx->rc_buffer_size > 0)
3069  props->buffer_size = sti->avctx->rc_buffer_size;
3070  if (sti->avctx->rc_min_rate > 0)
3071  props->min_bitrate = sti->avctx->rc_min_rate;
3072  if (sti->avctx->rc_max_rate > 0)
3073  props->max_bitrate = sti->avctx->rc_max_rate;
3077  (uint8_t *)props, cpb_size, 0))
3078  av_free(props);
3079  }
3080  }
3081  }
3082 
3083  sti->avctx_inited = 0;
3084 #if FF_API_AVSTREAM_SIDE_DATA
3086  if (st->codecpar->nb_coded_side_data > 0) {
3087  av_assert0(!st->side_data && !st->nb_side_data);
3088  st->side_data = av_calloc(st->codecpar->nb_coded_side_data, sizeof(*st->side_data));
3089  if (!st->side_data) {
3090  ret = AVERROR(ENOMEM);
3091  goto find_stream_info_err;
3092  }
3093 
3094  for (int j = 0; j < st->codecpar->nb_coded_side_data; j++) {
3095  uint8_t *data = av_memdup(st->codecpar->coded_side_data[j].data,
3096  st->codecpar->coded_side_data[j].size);
3097  if (!data) {
3098  ret = AVERROR(ENOMEM);
3099  goto find_stream_info_err;
3100  }
3101  st->side_data[j].type = st->codecpar->coded_side_data[j].type;
3102  st->side_data[j].size = st->codecpar->coded_side_data[j].size;
3103  st->side_data[j].data = data;
3104  st->nb_side_data++;
3105  }
3106  }
3108 #endif
3109  }
3110 
3111 find_stream_info_err:
3112  for (unsigned i = 0; i < ic->nb_streams; i++) {
3113  AVStream *const st = ic->streams[i];
3114  FFStream *const sti = ffstream(st);
3115  int err;
3116 
3117  if (sti->info) {
3118  av_freep(&sti->info->duration_error);
3119  av_freep(&sti->info);
3120  }
3121 
3122  if (avcodec_is_open(sti->avctx)) {
3123  err = codec_close(sti);
3124  if (err < 0 && ret >= 0)
3125  ret = err;
3126  }
3127 
3129  }
3130  if (ic->pb) {
3131  FFIOContext *const ctx = ffiocontext(ic->pb);
3132  av_log(ic, AV_LOG_DEBUG, "After avformat_find_stream_info() pos: %"PRId64" bytes read:%"PRId64" seeks:%d frames:%d\n",
3133  avio_tell(ic->pb), ctx->bytes_read, ctx->seek_count, count);
3134  }
3135  return ret;
3136 
3137 unref_then_goto_end:
3138  av_packet_unref(pkt1);
3139  goto find_stream_info_err;
3140 }
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:2257
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:1091
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:187
ff_rfps_add_frame
int ff_rfps_add_frame(AVFormatContext *ic, AVStream *st, int64_t ts)
add frame for rfps calculation.
Definition: demux.c:2304
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:1460
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:212
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:2786
DURATION_DEFAULT_MAX_RETRY
#define DURATION_DEFAULT_MAX_RETRY
Definition: demux.c:1838
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:1283
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:1111
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:1579
AVSTREAM_EVENT_FLAG_NEW_PACKETS
#define AVSTREAM_EVENT_FLAG_NEW_PACKETS
Definition: avformat.h:904
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:895
is_relative
static av_always_inline int is_relative(int64_t ts)
Definition: avformat_internal.h:114
FFStream::first_dts
int64_t first_dts
Timestamp corresponding to the last dts sync point.
Definition: internal.h:348
AVCodecParserContext::pict_type
int pict_type
Definition: avcodec.h:2775
AVCodecContext::sample_rate
int sample_rate
samples per second
Definition: avcodec.h:1064
AVCodecContext::rc_min_rate
int64_t rc_min_rate
minimum bitrate
Definition: avcodec.h:1317
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:170
FFStream::last_IP_pts
int64_t last_IP_pts
Definition: internal.h:316
ffformatcontext
static av_always_inline FFFormatContext * ffformatcontext(AVFormatContext *s)
Definition: internal.h:127
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:674
AVStream::discard
enum AVDiscard discard
Selects which packets can be discarded at will and do not need to be demuxed.
Definition: avformat.h:819
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:405
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:601
AVCodecParserContext::duration
int duration
Duration of the current frame.
Definition: avcodec.h:2881
avcodec_string
void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode)
Definition: avcodec.c:513
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:70
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:229
AVFrame
This structure describes decoded (raw) audio or video data.
Definition: frame.h:410
tmp
static uint8_t tmp[11]
Definition: aes_ctr.c:28
AVFormatContext::streams
AVStream ** streams
A list of all streams in the file.
Definition: avformat.h:1368
AVPacketSideData
This structure stores auxiliary information for decoding, presenting, or otherwise processing the cod...
Definition: packet.h:390
AVCodec::capabilities
int capabilities
Codec capabilities.
Definition: codec.h:206
internal.h
AVPacket::data
uint8_t * data
Definition: packet.h:539
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:2429
AVStream::avg_frame_rate
AVRational avg_frame_rate
Average framerate.
Definition: avformat.h:837
AVChapter::start
int64_t start
Definition: avformat.h:1262
AVFMT_FLAG_CUSTOM_IO
#define AVFMT_FLAG_CUSTOM_IO
The caller has supplied a custom AVIOContext, don't avio_close() it.
Definition: avformat.h:1459
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:1656
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:1731
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:1501
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:557
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:34
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:1487
estimate_timings_from_pts
static void estimate_timings_from_pts(AVFormatContext *ic, int64_t old_offset)
Definition: demux.c:1842
av_read_frame
int av_read_frame(AVFormatContext *s, AVPacket *pkt)
Return the next frame of a stream.
Definition: demux.c:1556
cffstream
static const av_always_inline FFStream * cffstream(const AVStream *st)
Definition: internal.h:363
avcodec_is_open
int avcodec_is_open(AVCodecContext *s)
Definition: avcodec.c:712
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:291
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:1673
FFIOContext
Definition: avio_internal.h:28
AV_PKT_FLAG_KEY
#define AV_PKT_FLAG_KEY
The packet contains a keyframe.
Definition: packet.h:594
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:610
FFStream::codec_desc
const struct AVCodecDescriptor * codec_desc
Definition: internal.h:351
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:324
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:114
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:96
AVCodecContext::framerate
AVRational framerate
Definition: avcodec.h:574
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:392
AVCodecParserContext::offset
int64_t offset
byte offset from starting packet start
Definition: avcodec.h:2807
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:1573
AVCodecParserContext::key_frame
int key_frame
Set by parser to 1 for key frames and 0 for non-key frames.
Definition: avcodec.h:2816
FFStream::dts_ordered
uint8_t dts_ordered
Definition: internal.h:292
finish
static void finish(void)
Definition: movenc.c:374
FFStream::last_IP_duration
int last_IP_duration
Definition: internal.h:317
force_codec_ids
static void force_codec_ids(AVFormatContext *s, AVStream *st)
Definition: demux.c:393
bsf.h
AVCodecContext::codec
const struct AVCodec * codec
Definition: avcodec.h:460
ffstream
static av_always_inline FFStream * ffstream(AVStream *st)
Definition: internal.h:358
AVCodecContext::ch_layout
AVChannelLayout ch_layout
Audio channel layout.
Definition: avcodec.h:1079
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:1841
fail
#define fail()
Definition: checkasm.h:193
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:596
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:171
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:160
AVChapter
Definition: avformat.h:1259
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:1281
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:807
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:737
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:2445
AVCodecParserContext::dts
int64_t dts
Definition: avcodec.h:2787
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:1194
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:58
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:1442
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:980
AV_DISPOSITION_CLEAN_EFFECTS
#define AV_DISPOSITION_CLEAN_EFFECTS
The audio stream contains music and sound effects without voice.
Definition: avformat.h:666
AVFormatContext::max_ts_probe
int max_ts_probe
Maximum number of packets to read while waiting for the first timestamp.
Definition: avformat.h:1628
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:2208
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:102
AVInputFormat
Definition: avformat.h:548
AV_PKT_FLAG_CORRUPT
#define AV_PKT_FLAG_CORRUPT
The packet content is corrupted.
Definition: packet.h:595
ID3v2ExtraMeta
Definition: id3v2.h:84
AVFormatContext::ctx_flags
int ctx_flags
Flags signalling stream properties.
Definition: avformat.h:1349
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:538
AVCodecContext::has_b_frames
int has_b_frames
Size of the frame reordering buffer in the decoder.
Definition: avcodec.h:737
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:1262
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:1451
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:1984
AVFormatContext::nb_programs
unsigned int nb_programs
Definition: avformat.h:1500
AVInputFormat::name
const char * name
A comma separated list of short names for the format.
Definition: avformat.h:553
bitrate
int64_t bitrate
Definition: av1_levels.c:47
AVFormatContext::iformat
const struct AVInputFormat * iformat
The input container format.
Definition: avformat.h:1312
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:242
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:717
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:391
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:331
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:284
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:307
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:112
DURATION_MAX_RETRY
#define DURATION_MAX_RETRY
Definition: demux.c:1839
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:1244
AVCodecContext::rc_max_rate
int64_t rc_max_rate
maximum bitrate
Definition: avcodec.h:1310
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:283
determinable_frame_size
static int determinable_frame_size(const AVCodecContext *avctx)
Definition: demux.c:2044
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:461
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:1495
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:1457
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:2255
has_codec_parameters
static int has_codec_parameters(const AVStream *st, const char **errmsg_ptr)
Definition: demux.c:2057
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:2785
FFStream::need_parsing
enum AVStreamParseType need_parsing
Definition: internal.h:325
AVCodecContext::rc_buffer_size
int rc_buffer_size
decoder bitstream buffer size
Definition: avcodec.h:1295
AVDISCARD_ALL
@ AVDISCARD_ALL
discard all
Definition: defs.h:221
AVFormatContext
Format I/O context.
Definition: avformat.h:1300
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:522
AVStream::codecpar
AVCodecParameters * codecpar
Codec parameters associated with this stream.
Definition: avformat.h:771
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:787
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:164
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:1251
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:1555
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:1282
AVCodecContext::bit_rate
int64_t bit_rate
the average bitrate
Definition: avcodec.h:501
AVPacketSideData::type
enum AVPacketSideDataType type
Definition: packet.h:393
AV_DISPOSITION_COMMENT
#define AV_DISPOSITION_COMMENT
The stream is a commentary track.
Definition: avformat.h:639
AVSTREAM_PARSE_NONE
@ AVSTREAM_PARSE_NONE
Definition: avformat.h:592
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:1163
AVFormatContext::pb
AVIOContext * pb
I/O context.
Definition: avformat.h:1342
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:1280
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:1927
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:42
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:2800
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:1716
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:1341
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:1990
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:1356
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:106
FFFormatContext::id3v2_meta
AVDictionary * id3v2_meta
ID3v2 tag useful for MP3 demuxing.
Definition: internal.h:122
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:1456
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:2534
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:2770
AV_PTS_WRAP_SUB_OFFSET
#define AV_PTS_WRAP_SUB_OFFSET
subtract the format specific offset on wrap detection
Definition: avformat.h:739
AVPacket::size
int size
Definition: packet.h:540
avpriv_pix_fmt_find
enum AVPixelFormat avpriv_pix_fmt_find(enum PixelFormatTagLists list, unsigned fourcc)
Definition: raw.c:371
FFStream::extract_extradata
struct FFStream::@411 extract_extradata
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:132
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:1245
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:1071
AVCodecContext::pkt_timebase
AVRational pkt_timebase
Timebase in which pkt_dts/pts and AVPacket.dts/pts are expressed.
Definition: avcodec.h:565
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:40
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:891
FFStream::dts_misordered
uint8_t dts_misordered
Definition: internal.h:293
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:738
AVFMT_FLAG_IGNDTS
#define AVFMT_FLAG_IGNDTS
Ignore DTS on frames that contain both DTS & PTS.
Definition: avformat.h:1455
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:826
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:658
AVPacket::dts
int64_t dts
Decompression timestamp in AVStream->time_base units; the time at which the packet is decompressed.
Definition: packet.h:538
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:271
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:545
av_dict_free
void av_dict_free(AVDictionary **pm)
Free all the memory allocated for an AVDictionary struct and all keys and values.
Definition: dict.c:223
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:276
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:221
estimate_timings_from_bit_rate
static void estimate_timings_from_bit_rate(AVFormatContext *ic)
Definition: demux.c:1784
FFStream::probe_packets
int probe_packets
Number of packets to buffer for codec probing.
Definition: internal.h:322
ff_rfps_calculate
void ff_rfps_calculate(AVFormatContext *ic)
Definition: demux.c:2365
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:309
AVCodec::id
enum AVCodecID id
Definition: codec.h:201
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:207
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:1586
avcodec_send_packet
int avcodec_send_packet(AVCodecContext *avctx, const AVPacket *avpkt)
Supply raw packet data as input to a decoder.
Definition: decode.c:728
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:1458
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:941
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:2869
PacketListEntry
Definition: packet_internal.h:28
PARSER_FLAG_COMPLETE_FRAMES
#define PARSER_FLAG_COMPLETE_FRAMES
Definition: avcodec.h:2801
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:532
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:1260
AVCodecContext::extradata
uint8_t * extradata
Out-of-band global headers that may be used by some codecs.
Definition: avcodec.h:537
av_packet_get_side_data
uint8_t * av_packet_get_side_data(const AVPacket *pkt, enum AVPacketSideDataType type, size_t *size)
Get side information from packet.
Definition: packet.c:253
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:1135
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:1787
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:647
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:286
av_find_default_stream_index
int av_find_default_stream_index(AVFormatContext *s)
Definition: avformat.c:420
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:1224
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:632
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:671
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_calloc
void * av_calloc(size_t nmemb, size_t size)
Definition: mem.c:264
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:2106
avcodec.h
limit
static double limit(double x)
Definition: vf_pseudocolor.c:142
AVCodecParserContext
Definition: avcodec.h:2767
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:124
AVStream::disposition
int disposition
Stream disposition - a combination of AV_DISPOSITION_* flags.
Definition: avformat.h:817
AVFMT_FLAG_GENPTS
#define AVFMT_FLAG_GENPTS
Generate missing pts even if it requires parsing future frames.
Definition: avformat.h:1452
AV_DISPOSITION_VISUAL_IMPAIRED
#define AV_DISPOSITION_VISUAL_IMPAIRED
The stream is intended for visually impaired audiences.
Definition: avformat.h:662
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:760
ret
ret
Definition: filter_design.txt:187
AVStream
Stream structure.
Definition: avformat.h:748
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:2279
AVSTREAM_PARSE_HEADERS
@ AVSTREAM_PARSE_HEADERS
Only parse headers, do not repack.
Definition: avformat.h:594
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:550
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:451
AVStream::index
int index
stream index in AVFormatContext
Definition: avformat.h:754
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:567
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:138
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:1837
avformat_free_context
void avformat_free_context(AVFormatContext *s)
Free an AVFormatContext and all its streams.
Definition: avformat.c:149
ff_fc_internal
static av_always_inline FormatContextInternal * ff_fc_internal(AVFormatContext *s)
Definition: avformat_internal.h:107
PARSER_FLAG_USE_CODEC_TS
#define PARSER_FLAG_USE_CODEC_TS
Definition: avcodec.h:2805
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:914
AV_PKT_DATA_SKIP_SAMPLES
@ AV_PKT_DATA_SKIP_SAMPLES
Recommmends skipping the specified number of samples.
Definition: packet.h:153
AVCodecContext::ticks_per_frame
attribute_deprecated int ticks_per_frame
For some codecs, the time base is closer to the field rate than the frame rate.
Definition: avcodec.h:590
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:597
FFStream::info
struct FFStreamInfo * info
Stream information used internally by avformat_find_stream_info()
Definition: internal.h:186
AVFormatContext::duration
int64_t duration
Duration of the stream, in AV_TIME_BASE fractional seconds.
Definition: avformat.h:1435
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:541
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:459
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:2485
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:202
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:476
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:516
fill_all_stream_timings
static void fill_all_stream_timings(AVFormatContext *ic)
Definition: demux.c:1767
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:88
av_dict_copy
int av_dict_copy(AVDictionary **dst, const AVDictionary *src, int flags)
Copy entries from one AVDictionary struct into another.
Definition: dict.c:237
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:1147
FFStream::cur_dts
int64_t cur_dts
Definition: internal.h:349
AVPacket::pos
int64_t pos
byte position in stream, -1 if unknown
Definition: packet.h:559
AVCodecContext::width
int width
picture width / height.
Definition: avcodec.h:632
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:177
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:1259
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:1425
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:326
AV_CODEC_CAP_AVOID_PROBING
#define AV_CODEC_CAP_AVOID_PROBING
Decoder is not a preferred choice for probing.
Definition: codec.h:138
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:1995
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:797
PARSER_FLAG_ONCE
#define PARSER_FLAG_ONCE
Definition: avcodec.h:2802
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:595
AVDiscard
AVDiscard
Definition: defs.h:212
AVStream::pts_wrap_bits
int pts_wrap_bits
Number of bits in timestamps.
Definition: avformat.h:923
AVChapter::time_base
AVRational time_base
time base in which the start/end timestamps are specified
Definition: avformat.h:1261
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:259
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:2218
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:1677
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:551
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