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