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  int64_t diff = FFABS(pts_buffer[i] - dts)
816  + (uint64_t)sti->pts_reorder_error[i];
817  diff = FFMAX(diff, sti->pts_reorder_error[i]);
818  sti->pts_reorder_error[i] = diff;
819  sti->pts_reorder_error_count[i]++;
820  if (sti->pts_reorder_error_count[i] > 250) {
821  sti->pts_reorder_error[i] >>= 1;
822  sti->pts_reorder_error_count[i] >>= 1;
823  }
824  }
825  }
826  }
827  }
828 
829  if (dts == AV_NOPTS_VALUE)
830  dts = pts_buffer[0];
831 
832  return dts;
833 }
834 
835 /**
836  * Updates the dts of packets of a stream in pkt_buffer, by re-ordering the pts
837  * of the packets in a window.
838  */
839 static void update_dts_from_pts(AVFormatContext *s, int stream_index,
840  PacketListEntry *pkt_buffer)
841 {
842  AVStream *const st = s->streams[stream_index];
843  int delay = ffstream(st)->avctx->has_b_frames;
844 
845  int64_t pts_buffer[MAX_REORDER_DELAY+1];
846 
847  for (int i = 0; i < MAX_REORDER_DELAY + 1; i++)
848  pts_buffer[i] = AV_NOPTS_VALUE;
849 
850  for (; pkt_buffer; pkt_buffer = get_next_pkt(s, st, pkt_buffer)) {
851  if (pkt_buffer->pkt.stream_index != stream_index)
852  continue;
853 
854  if (pkt_buffer->pkt.pts != AV_NOPTS_VALUE && delay <= MAX_REORDER_DELAY) {
855  pts_buffer[0] = pkt_buffer->pkt.pts;
856  for (int i = 0; i < delay && pts_buffer[i] > pts_buffer[i + 1]; i++)
857  FFSWAP(int64_t, pts_buffer[i], pts_buffer[i + 1]);
858 
859  pkt_buffer->pkt.dts = select_from_pts_buffer(st, pts_buffer, pkt_buffer->pkt.dts);
860  }
861  }
862 }
863 
864 static void update_initial_timestamps(AVFormatContext *s, int stream_index,
865  int64_t dts, int64_t pts, AVPacket *pkt)
866 {
867  FormatContextInternal *const fci = ff_fc_internal(s);
868  FFFormatContext *const si = &fci->fc;
869  AVStream *const st = s->streams[stream_index];
870  FFStream *const sti = ffstream(st);
872 
873  uint64_t shift;
874 
875  if (sti->first_dts != AV_NOPTS_VALUE ||
876  dts == AV_NOPTS_VALUE ||
877  sti->cur_dts == AV_NOPTS_VALUE ||
878  sti->cur_dts < INT_MIN + RELATIVE_TS_BASE ||
879  dts < INT_MIN + (sti->cur_dts - RELATIVE_TS_BASE) ||
880  is_relative(dts))
881  return;
882 
883  sti->first_dts = dts - (sti->cur_dts - RELATIVE_TS_BASE);
884  sti->cur_dts = dts;
885  shift = (uint64_t)sti->first_dts - RELATIVE_TS_BASE;
886 
887  if (is_relative(pts))
888  pts += shift;
889 
890  for (PacketListEntry *pktl_it = pktl; pktl_it; pktl_it = get_next_pkt(s, st, pktl_it)) {
891  if (pktl_it->pkt.stream_index != stream_index)
892  continue;
893  if (is_relative(pktl_it->pkt.pts))
894  pktl_it->pkt.pts += shift;
895 
896  if (is_relative(pktl_it->pkt.dts))
897  pktl_it->pkt.dts += shift;
898 
899  if (st->start_time == AV_NOPTS_VALUE && pktl_it->pkt.pts != AV_NOPTS_VALUE) {
900  st->start_time = pktl_it->pkt.pts;
902  st->start_time = av_sat_add64(st->start_time, av_rescale_q(sti->skip_samples, (AVRational){1, st->codecpar->sample_rate}, st->time_base));
903  }
904  }
905 
907  update_dts_from_pts(s, stream_index, pktl);
908 
909  if (st->start_time == AV_NOPTS_VALUE) {
911  st->start_time = pts;
912  }
914  st->start_time = av_sat_add64(st->start_time, av_rescale_q(sti->skip_samples, (AVRational){1, st->codecpar->sample_rate}, st->time_base));
915  }
916 }
917 
919  int stream_index, int64_t duration)
920 {
921  FormatContextInternal *const fci = ff_fc_internal(s);
922  FFFormatContext *const si = &fci->fc;
923  FFStream *const sti = ffstream(st);
925  int64_t cur_dts = RELATIVE_TS_BASE;
926 
927  if (sti->first_dts != AV_NOPTS_VALUE) {
929  return;
931  cur_dts = sti->first_dts;
932  for (; pktl; pktl = get_next_pkt(s, st, pktl)) {
933  if (pktl->pkt.stream_index == stream_index) {
934  if (pktl->pkt.pts != pktl->pkt.dts ||
935  pktl->pkt.dts != AV_NOPTS_VALUE ||
936  pktl->pkt.duration)
937  break;
938  cur_dts -= duration;
939  }
940  }
941  if (pktl && pktl->pkt.dts != sti->first_dts) {
942  av_log(s, AV_LOG_DEBUG, "first_dts %s not matching first dts %s (pts %s, duration %"PRId64") in the queue\n",
943  av_ts2str(sti->first_dts), av_ts2str(pktl->pkt.dts), av_ts2str(pktl->pkt.pts), pktl->pkt.duration);
944  return;
945  }
946  if (!pktl) {
947  av_log(s, AV_LOG_DEBUG, "first_dts %s but no packet with dts in the queue\n", av_ts2str(sti->first_dts));
948  return;
949  }
950  pktl = si->packet_buffer.head ? si->packet_buffer.head : fci->parse_queue.head;
951  sti->first_dts = cur_dts;
952  } else if (sti->cur_dts != RELATIVE_TS_BASE)
953  return;
954 
955  for (; pktl; pktl = get_next_pkt(s, st, pktl)) {
956  if (pktl->pkt.stream_index != stream_index)
957  continue;
958  if ((pktl->pkt.pts == pktl->pkt.dts ||
959  pktl->pkt.pts == AV_NOPTS_VALUE) &&
960  (pktl->pkt.dts == AV_NOPTS_VALUE ||
961  pktl->pkt.dts == sti->first_dts ||
962  pktl->pkt.dts == RELATIVE_TS_BASE) &&
963  !pktl->pkt.duration &&
964  av_sat_add64(cur_dts, duration) == cur_dts + (uint64_t)duration
965  ) {
966  pktl->pkt.dts = cur_dts;
967  if (!sti->avctx->has_b_frames)
968  pktl->pkt.pts = cur_dts;
969  pktl->pkt.duration = duration;
970  } else
971  break;
972  cur_dts = pktl->pkt.dts + pktl->pkt.duration;
973  }
974  if (!pktl)
975  sti->cur_dts = cur_dts;
976 }
977 
980  int64_t next_dts, int64_t next_pts)
981 {
982  FormatContextInternal *const fci = ff_fc_internal(s);
983  FFFormatContext *const si = &fci->fc;
984  FFStream *const sti = ffstream(st);
985  int num, den, presentation_delayed, delay;
986  int64_t offset;
988  int onein_oneout = st->codecpar->codec_id != AV_CODEC_ID_H264 &&
991 
992  if (s->flags & AVFMT_FLAG_NOFILLIN)
993  return;
994 
996  if (pkt->dts == pkt->pts && sti->last_dts_for_order_check != AV_NOPTS_VALUE) {
997  if (sti->last_dts_for_order_check <= pkt->dts) {
998  sti->dts_ordered++;
999  } else {
1001  "DTS %"PRIi64" < %"PRIi64" out of order\n",
1002  pkt->dts,
1004  sti->dts_misordered++;
1005  }
1006  if (sti->dts_ordered + sti->dts_misordered > 250) {
1007  sti->dts_ordered >>= 1;
1008  sti->dts_misordered >>= 1;
1009  }
1010  }
1011 
1013  if (sti->dts_ordered < 8 * sti->dts_misordered && pkt->dts == pkt->pts)
1014  pkt->dts = AV_NOPTS_VALUE;
1015  }
1016 
1017  if ((s->flags & AVFMT_FLAG_IGNDTS) && pkt->pts != AV_NOPTS_VALUE)
1018  pkt->dts = AV_NOPTS_VALUE;
1019 
1020  if (pc && pc->pict_type == AV_PICTURE_TYPE_B
1021  && !sti->avctx->has_b_frames)
1022  //FIXME Set low_delay = 0 when has_b_frames = 1
1023  sti->avctx->has_b_frames = 1;
1024 
1025  /* do we have a video B-frame ? */
1026  delay = sti->avctx->has_b_frames;
1027  presentation_delayed = 0;
1028 
1029  /* XXX: need has_b_frame, but cannot get it if the codec is
1030  * not initialized */
1031  if (delay &&
1032  pc && pc->pict_type != AV_PICTURE_TYPE_B)
1033  presentation_delayed = 1;
1034 
1035  if (pkt->pts != AV_NOPTS_VALUE && pkt->dts != AV_NOPTS_VALUE &&
1036  st->pts_wrap_bits < 63 && pkt->dts > INT64_MIN + (1LL << st->pts_wrap_bits) &&
1037  pkt->dts - (1LL << (st->pts_wrap_bits - 1)) > pkt->pts) {
1038  if (is_relative(sti->cur_dts) || pkt->dts - (1LL<<(st->pts_wrap_bits - 1)) > sti->cur_dts) {
1039  pkt->dts -= 1LL << st->pts_wrap_bits;
1040  } else
1041  pkt->pts += 1LL << st->pts_wrap_bits;
1042  }
1043 
1044  /* Some MPEG-2 in MPEG-PS lack dts (issue #171 / input_file.mpg).
1045  * We take the conservative approach and discard both.
1046  * Note: If this is misbehaving for an H.264 file, then possibly
1047  * presentation_delayed is not set correctly. */
1048  if (delay == 1 && pkt->dts == pkt->pts &&
1049  pkt->dts != AV_NOPTS_VALUE && presentation_delayed) {
1050  av_log(s, AV_LOG_DEBUG, "invalid dts/pts combination %"PRIi64"\n", pkt->dts);
1051  if ( strcmp(s->iformat->name, "mov,mp4,m4a,3gp,3g2,mj2")
1052  && strcmp(s->iformat->name, "flv")) // otherwise we discard correct timestamps for vc1-wmapro.ism
1053  pkt->dts = AV_NOPTS_VALUE;
1054  }
1055 
1057  if (pkt->duration <= 0) {
1058  compute_frame_duration(s, &num, &den, st, pc, pkt);
1059  if (den && num) {
1060  duration = (AVRational) {num, den};
1062  num * (int64_t) st->time_base.den,
1063  den * (int64_t) st->time_base.num,
1064  AV_ROUND_DOWN);
1065  }
1066  }
1067 
1068  if (pkt->duration > 0 && (si->packet_buffer.head || fci->parse_queue.head))
1070 
1071  /* Correct timestamps with byte offset if demuxers only have timestamps
1072  * on packet boundaries */
1073  if (pc && sti->need_parsing == AVSTREAM_PARSE_TIMESTAMPS && pkt->size) {
1074  /* this will estimate bitrate based on this frame's duration and size */
1076  if (pkt->pts != AV_NOPTS_VALUE)
1077  pkt->pts += offset;
1078  if (pkt->dts != AV_NOPTS_VALUE)
1079  pkt->dts += offset;
1080  }
1081 
1082  /* This may be redundant, but it should not hurt. */
1083  if (pkt->dts != AV_NOPTS_VALUE &&
1084  pkt->pts != AV_NOPTS_VALUE &&
1085  pkt->pts > pkt->dts)
1086  presentation_delayed = 1;
1087 
1088  if (s->debug & FF_FDEBUG_TS)
1090  "IN delayed:%d pts:%s, dts:%s cur_dts:%s st:%d pc:%p duration:%"PRId64" delay:%d onein_oneout:%d\n",
1091  presentation_delayed, av_ts2str(pkt->pts), av_ts2str(pkt->dts), av_ts2str(sti->cur_dts),
1092  pkt->stream_index, pc, pkt->duration, delay, onein_oneout);
1093 
1094  /* Interpolate PTS and DTS if they are not present. We skip H264
1095  * currently because delay and has_b_frames are not reliably set. */
1096  if ((delay == 0 || (delay == 1 && pc)) &&
1097  onein_oneout) {
1098  if (presentation_delayed) {
1099  /* DTS = decompression timestamp */
1100  /* PTS = presentation timestamp */
1101  if (pkt->dts == AV_NOPTS_VALUE)
1102  pkt->dts = sti->last_IP_pts;
1104  if (pkt->dts == AV_NOPTS_VALUE)
1105  pkt->dts = sti->cur_dts;
1106 
1107  /* This is tricky: the dts must be incremented by the duration
1108  * of the frame we are displaying, i.e. the last I- or P-frame. */
1109  if (sti->last_IP_duration == 0 && (uint64_t)pkt->duration <= INT32_MAX)
1110  sti->last_IP_duration = pkt->duration;
1111  if (pkt->dts != AV_NOPTS_VALUE)
1112  sti->cur_dts = av_sat_add64(pkt->dts, sti->last_IP_duration);
1113  if (pkt->dts != AV_NOPTS_VALUE &&
1114  pkt->pts == AV_NOPTS_VALUE &&
1115  sti->last_IP_duration > 0 &&
1116  ((uint64_t)sti->cur_dts - (uint64_t)next_dts + 1) <= 2 &&
1117  next_dts != next_pts &&
1118  next_pts != AV_NOPTS_VALUE)
1119  pkt->pts = next_dts;
1120 
1121  if ((uint64_t)pkt->duration <= INT32_MAX)
1122  sti->last_IP_duration = pkt->duration;
1123  sti->last_IP_pts = pkt->pts;
1124  /* Cannot compute PTS if not present (we can compute it only
1125  * by knowing the future. */
1126  } else if (pkt->pts != AV_NOPTS_VALUE ||
1127  pkt->dts != AV_NOPTS_VALUE ||
1128  pkt->duration > 0 ) {
1129 
1130  /* presentation is not delayed : PTS and DTS are the same */
1131  if (pkt->pts == AV_NOPTS_VALUE)
1132  pkt->pts = pkt->dts;
1134  pkt->pts, pkt);
1135  if (pkt->pts == AV_NOPTS_VALUE)
1136  pkt->pts = sti->cur_dts;
1137  pkt->dts = pkt->pts;
1138  if (pkt->pts != AV_NOPTS_VALUE && duration.num >= 0)
1139  sti->cur_dts = av_add_stable(st->time_base, pkt->pts, duration, 1);
1140  }
1141  }
1142 
1143  if (pkt->pts != AV_NOPTS_VALUE && delay <= MAX_REORDER_DELAY) {
1144  sti->pts_buffer[0] = pkt->pts;
1145  for (int i = 0; i < delay && sti->pts_buffer[i] > sti->pts_buffer[i + 1]; i++)
1146  FFSWAP(int64_t, sti->pts_buffer[i], sti->pts_buffer[i + 1]);
1147 
1150  }
1151  // We skipped it above so we try here.
1152  if (!onein_oneout)
1153  // This should happen on the first packet
1155  if (pkt->dts > sti->cur_dts)
1156  sti->cur_dts = pkt->dts;
1157 
1158  if (s->debug & FF_FDEBUG_TS)
1159  av_log(s, AV_LOG_DEBUG, "OUTdelayed:%d/%d pts:%s, dts:%s cur_dts:%s st:%d (%d)\n",
1160  presentation_delayed, delay, av_ts2str(pkt->pts), av_ts2str(pkt->dts), av_ts2str(sti->cur_dts), st->index, st->id);
1161 
1162  /* update flags */
1165 }
1166 
1167 /**
1168  * Parse a packet, add all split parts to parse_queue.
1169  *
1170  * @param pkt Packet to parse; must not be NULL.
1171  * @param flush Indicates whether to flush. If set, pkt must be blank.
1172  */
1174  int stream_index, int flush)
1175 {
1176  FormatContextInternal *const fci = ff_fc_internal(s);
1177  AVStream *st = s->streams[stream_index];
1178  FFStream *const sti = ffstream(st);
1179  AVPacket *out_pkt = sti->parse_pkt;
1180  const AVPacketSideData *sd = NULL;
1181  const uint8_t *data = pkt->data;
1182  uint8_t *extradata = sti->avctx->extradata;
1183  int extradata_size = sti->avctx->extradata_size;
1184  int size = pkt->size;
1185  int ret = 0, got_output = flush, pkt_side_data_consumed = 0;
1186 
1187  if (!size && !flush && sti->parser->flags & PARSER_FLAG_COMPLETE_FRAMES) {
1188  // preserve 0-size sync packets
1189  compute_pkt_fields(s, st, sti->parser, pkt, pkt->dts, pkt->pts);
1190 
1191  // Theora has valid 0-sized packets that need to be output
1192  if (st->codecpar->codec_id == AV_CODEC_ID_THEORA) {
1194  pkt, NULL, 0);
1195  if (ret < 0)
1196  goto fail;
1197  }
1198  }
1199 
1200  if (pkt->side_data_elems)
1203  if (sd) {
1204  av_assert1(size && !flush);
1205 
1206  sti->avctx->extradata = sd->data;
1207  sti->avctx->extradata_size = sd->size;
1208  }
1209 
1210  while (size > 0 || (flush && got_output)) {
1211  int64_t next_pts = pkt->pts;
1212  int64_t next_dts = pkt->dts;
1213  int len;
1214 
1215  len = av_parser_parse2(sti->parser, sti->avctx,
1216  &out_pkt->data, &out_pkt->size, data, size,
1217  pkt->pts, pkt->dts, pkt->pos);
1218 
1219  pkt->pts = pkt->dts = AV_NOPTS_VALUE;
1220  pkt->pos = -1;
1221  /* increment read pointer */
1222  av_assert1(data || !len);
1223  data = len ? data + len : data;
1224  size -= len;
1225 
1226  got_output = !!out_pkt->size;
1227 
1228  if (pkt->side_data && !out_pkt->side_data) {
1229  /* for the first iteration, side_data are simply moved to output.
1230  * in case of additional iterations, they are duplicated each time. */
1231  if (!pkt_side_data_consumed) {
1232  pkt_side_data_consumed = 1;
1233  out_pkt->side_data = pkt->side_data;
1234  out_pkt->side_data_elems = pkt->side_data_elems;
1235  } else for (int i = 0; i < pkt->side_data_elems; i++) {
1236  const AVPacketSideData *const src_sd = &pkt->side_data[i];
1237  uint8_t *dst_data = av_packet_new_side_data(out_pkt, src_sd->type, src_sd->size);
1238  if (!dst_data) {
1239  ret = AVERROR(ENOMEM);
1240  goto fail;
1241  }
1242  memcpy(dst_data, src_sd->data, src_sd->size);
1243  }
1244  }
1245 
1246  if (!out_pkt->size)
1247  continue;
1248 
1249  if (pkt->buf && out_pkt->data == pkt->data) {
1250  /* reference pkt->buf only when out_pkt->data is guaranteed to point
1251  * to data in it and not in the parser's internal buffer. */
1252  /* XXX: Ensure this is the case with all parsers when sti->parser->flags
1253  * is PARSER_FLAG_COMPLETE_FRAMES and check for that instead? */
1254  out_pkt->buf = av_buffer_ref(pkt->buf);
1255  if (!out_pkt->buf) {
1256  ret = AVERROR(ENOMEM);
1257  goto fail;
1258  }
1259  } else {
1260  ret = av_packet_make_refcounted(out_pkt);
1261  if (ret < 0)
1262  goto fail;
1263  }
1264 
1265  /* set the duration */
1266  out_pkt->duration = (sti->parser->flags & PARSER_FLAG_COMPLETE_FRAMES) ? pkt->duration : 0;
1268  if (sti->avctx->sample_rate > 0) {
1269  out_pkt->duration =
1271  (AVRational) { 1, sti->avctx->sample_rate },
1272  st->time_base,
1273  AV_ROUND_DOWN);
1274  }
1275  } else if (st->codecpar->codec_id == AV_CODEC_ID_GIF) {
1276  if (st->time_base.num > 0 && st->time_base.den > 0 &&
1277  sti->parser->duration) {
1278  out_pkt->duration = sti->parser->duration;
1279  }
1280  }
1281 
1282  out_pkt->stream_index = st->index;
1283  out_pkt->pts = sti->parser->pts;
1284  out_pkt->dts = sti->parser->dts;
1285  out_pkt->pos = sti->parser->pos;
1287 
1289  out_pkt->pos = sti->parser->frame_offset;
1290 
1291  if (sti->parser->key_frame == 1 ||
1292  (sti->parser->key_frame == -1 &&
1294  out_pkt->flags |= AV_PKT_FLAG_KEY;
1295 
1297  out_pkt->flags |= AV_PKT_FLAG_KEY;
1298 
1299  compute_pkt_fields(s, st, sti->parser, out_pkt, next_dts, next_pts);
1300 
1302  out_pkt, NULL, 0);
1303  if (ret < 0)
1304  goto fail;
1305  }
1306 
1307  /* end of the stream => close and free the parser */
1308  if (flush) {
1309  av_parser_close(sti->parser);
1310  sti->parser = NULL;
1311  }
1312 
1313 fail:
1314  if (sd) {
1315  sti->avctx->extradata = extradata;
1316  sti->avctx->extradata_size = extradata_size;
1317  }
1318  if (pkt_side_data_consumed) {
1319  pkt->side_data = NULL;
1320  pkt->side_data_elems = 0;
1321  }
1322 
1323  if (ret < 0)
1324  av_packet_unref(out_pkt);
1326  return ret;
1327 }
1328 
1330 {
1331  return av_rescale(ts, st->time_base.num * st->codecpar->sample_rate, st->time_base.den);
1332 }
1333 
1334 static int codec_close(FFStream *sti)
1335 {
1336  AVCodecContext *avctx_new = NULL;
1337  AVCodecParameters *par_tmp = NULL;
1338  const AVCodec *new_codec = NULL;
1339  int ret;
1340 
1341  new_codec =
1342  (sti->avctx->codec_id != sti->pub.codecpar->codec_id) ?
1344  sti->avctx->codec;
1345 
1346  avctx_new = avcodec_alloc_context3(new_codec);
1347  if (!avctx_new) {
1348  ret = AVERROR(ENOMEM);
1349  goto fail;
1350  }
1351 
1352  par_tmp = avcodec_parameters_alloc();
1353  if (!par_tmp) {
1354  ret = AVERROR(ENOMEM);
1355  goto fail;
1356  }
1357 
1358  ret = avcodec_parameters_from_context(par_tmp, sti->avctx);
1359  if (ret < 0)
1360  goto fail;
1361 
1362  ret = avcodec_parameters_to_context(avctx_new, par_tmp);
1363  if (ret < 0)
1364  goto fail;
1365 
1366  avctx_new->pkt_timebase = sti->avctx->pkt_timebase;
1367 
1368  avcodec_free_context(&sti->avctx);
1369  sti->avctx = avctx_new;
1370 
1371  avctx_new = NULL;
1372  ret = 0;
1373 
1374 fail:
1375  avcodec_free_context(&avctx_new);
1376  avcodec_parameters_free(&par_tmp);
1377 
1378  return ret;
1379 }
1380 
1381 static int extract_extradata(FFFormatContext *si, AVStream *st, const AVPacket *pkt);
1382 
1384 {
1385  FormatContextInternal *const fci = ff_fc_internal(s);
1386  FFFormatContext *const si = &fci->fc;
1387  int ret, got_packet = 0;
1389 
1390  while (!got_packet && !fci->parse_queue.head) {
1391  AVStream *st;
1392  FFStream *sti;
1393 
1394  /* read next packet */
1395  ret = ff_read_packet(s, pkt);
1396  if (ret < 0) {
1397  if (ret == AVERROR(EAGAIN))
1398  return ret;
1399  /* flush the parsers */
1400  for (unsigned i = 0; i < s->nb_streams; i++) {
1401  AVStream *const st = s->streams[i];
1402  FFStream *const sti = ffstream(st);
1403  if (sti->parser && sti->need_parsing)
1404  parse_packet(s, pkt, st->index, 1);
1405  }
1406  /* all remaining packets are now in parse_queue =>
1407  * really terminate parsing */
1408  break;
1409  }
1410  ret = 0;
1411  st = s->streams[pkt->stream_index];
1412  sti = ffstream(st);
1413 
1415 
1416  int new_extradata = !!av_packet_side_data_get(pkt->side_data, pkt->side_data_elems,
1418  if (new_extradata)
1419  sti->need_context_update = 1;
1420 
1421  /* update context if required */
1422  if (sti->need_context_update) {
1423  if (avcodec_is_open(sti->avctx)) {
1424  av_log(s, AV_LOG_DEBUG, "Demuxer context update while decoder is open, closing and trying to re-open\n");
1425  ret = codec_close(sti);
1426  sti->info->found_decoder = 0;
1427  if (ret < 0)
1428  return ret;
1429  }
1430 
1431  /* close parser, because it depends on the codec and extradata */
1432  if (sti->parser &&
1433  (sti->avctx->codec_id != st->codecpar->codec_id || new_extradata)) {
1434  av_parser_close(sti->parser);
1435  sti->parser = NULL;
1436  }
1437 
1439  if (ret < 0) {
1441  return ret;
1442  }
1443 
1444  if (!sti->avctx->extradata) {
1445  sti->extract_extradata.inited = 0;
1446 
1447  ret = extract_extradata(si, st, pkt);
1448  if (ret < 0) {
1450  return ret;
1451  }
1452  }
1453 
1455 
1456  sti->need_context_update = 0;
1457  }
1458 
1459  if (pkt->pts != AV_NOPTS_VALUE &&
1460  pkt->dts != AV_NOPTS_VALUE &&
1461  pkt->pts < pkt->dts) {
1463  "Invalid timestamps stream=%d, pts=%s, dts=%s, size=%d\n",
1464  pkt->stream_index,
1465  av_ts2str(pkt->pts),
1466  av_ts2str(pkt->dts),
1467  pkt->size);
1468  }
1469  if (s->debug & FF_FDEBUG_TS)
1471  "ff_read_packet stream=%d, pts=%s, dts=%s, size=%d, duration=%"PRId64", flags=%d\n",
1472  pkt->stream_index,
1473  av_ts2str(pkt->pts),
1474  av_ts2str(pkt->dts),
1475  pkt->size, pkt->duration, pkt->flags);
1476 
1477  if (sti->need_parsing && !sti->parser && !(s->flags & AVFMT_FLAG_NOPARSE)) {
1478  sti->parser = av_parser_init(st->codecpar->codec_id);
1479  if (!sti->parser) {
1480  av_log(s, AV_LOG_VERBOSE, "parser not found for codec "
1481  "%s, packets or times may be invalid.\n",
1483  /* no parser available: just output the raw packets */
1485  } else if (sti->need_parsing == AVSTREAM_PARSE_HEADERS)
1487  else if (sti->need_parsing == AVSTREAM_PARSE_FULL_ONCE)
1488  sti->parser->flags |= PARSER_FLAG_ONCE;
1489  else if (sti->need_parsing == AVSTREAM_PARSE_FULL_RAW)
1491  }
1492 
1493  if (!sti->need_parsing || !sti->parser) {
1494  /* no parsing needed: we just output the packet as is */
1496  if ((s->iformat->flags & AVFMT_GENERIC_INDEX) &&
1498  ff_reduce_index(s, st->index);
1499  av_add_index_entry(st, pkt->pos, pkt->dts,
1500  0, 0, AVINDEX_KEYFRAME);
1501  }
1502  got_packet = 1;
1503  } else if (st->discard < AVDISCARD_ALL) {
1504  if ((ret = parse_packet(s, pkt, pkt->stream_index, 0)) < 0)
1505  return ret;
1506  st->codecpar->sample_rate = sti->avctx->sample_rate;
1507  st->codecpar->bit_rate = sti->avctx->bit_rate;
1509  if (ret < 0)
1510  return ret;
1511  st->codecpar->codec_id = sti->avctx->codec_id;
1512  } else {
1513  /* free packet */
1515  }
1516  if (pkt->flags & AV_PKT_FLAG_KEY)
1517  sti->skip_to_keyframe = 0;
1518  if (sti->skip_to_keyframe) {
1520  got_packet = 0;
1521  }
1522  }
1523 
1524  if (!got_packet && fci->parse_queue.head)
1526 
1527  if (ret >= 0) {
1528  AVStream *const st = s->streams[pkt->stream_index];
1529  FFStream *const sti = ffstream(st);
1530  int discard_padding = 0;
1531  if (sti->first_discard_sample && pkt->pts != AV_NOPTS_VALUE) {
1535  int64_t end_sample = sample + duration;
1536  if (duration > 0 && end_sample >= sti->first_discard_sample &&
1537  sample < sti->last_discard_sample)
1538  discard_padding = FFMIN(end_sample - sti->first_discard_sample, duration);
1539  }
1540  if (sti->start_skip_samples && (pkt->pts == 0 || pkt->pts == RELATIVE_TS_BASE))
1541  sti->skip_samples = sti->start_skip_samples;
1542  sti->skip_samples = FFMAX(0, sti->skip_samples);
1543  if (sti->skip_samples || discard_padding) {
1545  if (p) {
1546  AV_WL32(p, sti->skip_samples);
1547  AV_WL32(p + 4, discard_padding);
1548  av_log(s, AV_LOG_DEBUG, "demuxer injecting skip %u / discard %u\n",
1549  (unsigned)sti->skip_samples, (unsigned)discard_padding);
1550  }
1551  sti->skip_samples = 0;
1552  }
1553  }
1554 
1555  if (!fci->metafree) {
1556  int metaret = av_opt_get_dict_val(s, "metadata", AV_OPT_SEARCH_CHILDREN, &metadata);
1557  if (metadata) {
1558  s->event_flags |= AVFMT_EVENT_FLAG_METADATA_UPDATED;
1559  av_dict_copy(&s->metadata, metadata, 0);
1562  }
1563  fci->metafree = metaret == AVERROR_OPTION_NOT_FOUND;
1564  }
1565 
1566  if (s->debug & FF_FDEBUG_TS)
1568  "read_frame_internal stream=%d, pts=%s, dts=%s, "
1569  "size=%d, duration=%"PRId64", flags=%d\n",
1570  pkt->stream_index,
1571  av_ts2str(pkt->pts),
1572  av_ts2str(pkt->dts),
1573  pkt->size, pkt->duration, pkt->flags);
1574 
1575  /* A demuxer might have returned EOF because of an IO error, let's
1576  * propagate this back to the user. */
1577  if (ret == AVERROR_EOF && s->pb && s->pb->error < 0 && s->pb->error != AVERROR(EAGAIN))
1578  ret = s->pb->error;
1579 
1580  return ret;
1581 }
1582 
1584 {
1585  FFFormatContext *const si = ffformatcontext(s);
1586  const int genpts = s->flags & AVFMT_FLAG_GENPTS;
1587  int eof = 0;
1588  int ret;
1589  AVStream *st;
1590 
1591  if (!genpts) {
1592  ret = si->packet_buffer.head
1595  if (ret < 0)
1596  return ret;
1597  goto return_packet;
1598  }
1599 
1600  for (;;) {
1601  PacketListEntry *pktl = si->packet_buffer.head;
1602 
1603  if (pktl) {
1604  AVPacket *next_pkt = &pktl->pkt;
1605 
1606  if (next_pkt->dts != AV_NOPTS_VALUE) {
1607  int wrap_bits = s->streams[next_pkt->stream_index]->pts_wrap_bits;
1608  // last dts seen for this stream. if any of packets following
1609  // current one had no dts, we will set this to AV_NOPTS_VALUE.
1610  int64_t last_dts = next_pkt->dts;
1611  av_assert2(wrap_bits <= 64);
1612  while (pktl && next_pkt->pts == AV_NOPTS_VALUE) {
1613  if (pktl->pkt.stream_index == next_pkt->stream_index &&
1614  av_compare_mod(next_pkt->dts, pktl->pkt.dts, 2ULL << (wrap_bits - 1)) < 0) {
1615  if (av_compare_mod(pktl->pkt.pts, pktl->pkt.dts, 2ULL << (wrap_bits - 1))) {
1616  // not B-frame
1617  next_pkt->pts = pktl->pkt.dts;
1618  }
1619  if (last_dts != AV_NOPTS_VALUE) {
1620  // Once last dts was set to AV_NOPTS_VALUE, we don't change it.
1621  last_dts = pktl->pkt.dts;
1622  }
1623  }
1624  pktl = pktl->next;
1625  }
1626  if (eof && next_pkt->pts == AV_NOPTS_VALUE && last_dts != AV_NOPTS_VALUE) {
1627  // Fixing the last reference frame had none pts issue (For MXF etc).
1628  // We only do this when
1629  // 1. eof.
1630  // 2. we are not able to resolve a pts value for current packet.
1631  // 3. the packets for this stream at the end of the files had valid dts.
1632  next_pkt->pts = last_dts + next_pkt->duration;
1633  }
1634  pktl = si->packet_buffer.head;
1635  }
1636 
1637  /* read packet from packet buffer, if there is data */
1638  st = s->streams[next_pkt->stream_index];
1639  if (!(next_pkt->pts == AV_NOPTS_VALUE && st->discard < AVDISCARD_ALL &&
1640  next_pkt->dts != AV_NOPTS_VALUE && !eof)) {
1642  goto return_packet;
1643  }
1644  }
1645 
1647  if (ret < 0) {
1648  if (pktl && ret != AVERROR(EAGAIN)) {
1649  eof = 1;
1650  continue;
1651  } else
1652  return ret;
1653  }
1654 
1656  pkt, NULL, 0);
1657  if (ret < 0) {
1659  return ret;
1660  }
1661  }
1662 
1663 return_packet:
1664  st = s->streams[pkt->stream_index];
1665  if ((s->iformat->flags & AVFMT_GENERIC_INDEX) && pkt->flags & AV_PKT_FLAG_KEY) {
1666  ff_reduce_index(s, st->index);
1668  }
1669 
1670  if (is_relative(pkt->dts))
1671  pkt->dts -= RELATIVE_TS_BASE;
1672  if (is_relative(pkt->pts))
1673  pkt->pts -= RELATIVE_TS_BASE;
1674 
1675  return ret;
1676 }
1677 
1678 /**
1679  * Return TRUE if the stream has accurate duration in any stream.
1680  *
1681  * @return TRUE if the stream has accurate duration for at least one component.
1682  */
1684 {
1685  for (unsigned i = 0; i < ic->nb_streams; i++) {
1686  const AVStream *const st = ic->streams[i];
1687  if (st->duration != AV_NOPTS_VALUE)
1688  return 1;
1689  }
1690  if (ic->duration != AV_NOPTS_VALUE)
1691  return 1;
1692  return 0;
1693 }
1694 
1695 /**
1696  * Estimate the stream timings from the one of each components.
1697  *
1698  * Also computes the global bitrate if possible.
1699  */
1701 {
1702  int64_t start_time, start_time1, start_time_text, end_time, end_time1, end_time_text;
1703  int64_t duration, duration1, duration_text, filesize;
1704 
1705  start_time = INT64_MAX;
1706  start_time_text = INT64_MAX;
1707  end_time = INT64_MIN;
1708  end_time_text = INT64_MIN;
1709  duration = INT64_MIN;
1710  duration_text = INT64_MIN;
1711 
1712  for (unsigned i = 0; i < ic->nb_streams; i++) {
1713  AVStream *const st = ic->streams[i];
1714  int is_text = st->codecpar->codec_type == AVMEDIA_TYPE_SUBTITLE ||
1716 
1717  if (st->start_time != AV_NOPTS_VALUE && st->time_base.den) {
1718  start_time1 = av_rescale_q(st->start_time, st->time_base,
1719  AV_TIME_BASE_Q);
1720  if (is_text)
1721  start_time_text = FFMIN(start_time_text, start_time1);
1722  else
1723  start_time = FFMIN(start_time, start_time1);
1724  end_time1 = av_rescale_q_rnd(st->duration, st->time_base,
1727  if (end_time1 != AV_NOPTS_VALUE && (end_time1 > 0 ? start_time1 <= INT64_MAX - end_time1 : start_time1 >= INT64_MIN - end_time1)) {
1728  end_time1 += start_time1;
1729  if (is_text)
1730  end_time_text = FFMAX(end_time_text, end_time1);
1731  else
1732  end_time = FFMAX(end_time, end_time1);
1733  }
1734  for (AVProgram *p = NULL; (p = av_find_program_from_stream(ic, p, i)); ) {
1735  if (p->start_time == AV_NOPTS_VALUE || p->start_time > start_time1)
1736  p->start_time = start_time1;
1737  if (p->end_time < end_time1)
1738  p->end_time = end_time1;
1739  }
1740  }
1741  if (st->duration != AV_NOPTS_VALUE) {
1742  duration1 = av_rescale_q(st->duration, st->time_base,
1743  AV_TIME_BASE_Q);
1744  if (is_text)
1745  duration_text = FFMAX(duration_text, duration1);
1746  else
1747  duration = FFMAX(duration, duration1);
1748  }
1749  }
1750  if (start_time == INT64_MAX || (start_time > start_time_text && start_time - (uint64_t)start_time_text < AV_TIME_BASE))
1751  start_time = start_time_text;
1752  else if (start_time > start_time_text)
1753  av_log(ic, AV_LOG_VERBOSE, "Ignoring outlier non primary stream starttime %f\n", start_time_text / (float)AV_TIME_BASE);
1754 
1755  if (end_time == INT64_MIN || (end_time < end_time_text && end_time_text - (uint64_t)end_time < AV_TIME_BASE))
1756  end_time = end_time_text;
1757  else if (end_time < end_time_text)
1758  av_log(ic, AV_LOG_VERBOSE, "Ignoring outlier non primary stream endtime %f\n", end_time_text / (float)AV_TIME_BASE);
1759 
1760  if (duration == INT64_MIN || (duration < duration_text && (uint64_t)duration_text - duration < AV_TIME_BASE))
1761  duration = duration_text;
1762  else if (duration < duration_text)
1763  av_log(ic, AV_LOG_VERBOSE, "Ignoring outlier non primary stream duration %f\n", duration_text / (float)AV_TIME_BASE);
1764 
1765  if (start_time != INT64_MAX) {
1766  ic->start_time = start_time;
1767  if (end_time != INT64_MIN) {
1768  if (ic->nb_programs > 1) {
1769  for (unsigned i = 0; i < ic->nb_programs; i++) {
1770  AVProgram *const p = ic->programs[i];
1771 
1772  if (p->start_time != AV_NOPTS_VALUE &&
1773  p->end_time > p->start_time &&
1774  p->end_time - (uint64_t)p->start_time <= INT64_MAX)
1775  duration = FFMAX(duration, p->end_time - p->start_time);
1776  }
1777  } else if (end_time >= start_time && end_time - (uint64_t)start_time <= INT64_MAX) {
1778  duration = FFMAX(duration, end_time - start_time);
1779  }
1780  }
1781  }
1782  if (duration != INT64_MIN && duration > 0 && ic->duration == AV_NOPTS_VALUE) {
1783  ic->duration = duration;
1784  }
1785  if (ic->pb && (filesize = avio_size(ic->pb)) > 0 && ic->duration > 0) {
1786  /* compute the bitrate */
1787  double bitrate = (double) filesize * 8.0 * AV_TIME_BASE /
1788  (double) ic->duration;
1789  if (bitrate >= 0 && bitrate <= INT64_MAX)
1790  ic->bit_rate = bitrate;
1791  }
1792 }
1793 
1795 {
1797  for (unsigned i = 0; i < ic->nb_streams; i++) {
1798  AVStream *const st = ic->streams[i];
1799 
1800  if (st->start_time == AV_NOPTS_VALUE) {
1801  if (ic->start_time != AV_NOPTS_VALUE)
1803  st->time_base);
1804  if (ic->duration != AV_NOPTS_VALUE)
1806  st->time_base);
1807  }
1808  }
1809 }
1810 
1812 {
1813  FFFormatContext *const si = ffformatcontext(ic);
1814  int show_warning = 0;
1815 
1816  /* if bit_rate is already set, we believe it */
1817  if (ic->bit_rate <= 0) {
1818  int64_t bit_rate = 0;
1819  for (unsigned i = 0; i < ic->nb_streams; i++) {
1820  const AVStream *const st = ic->streams[i];
1821  const FFStream *const sti = cffstream(st);
1822  if (st->codecpar->bit_rate <= 0 && sti->avctx->bit_rate > 0)
1823  st->codecpar->bit_rate = sti->avctx->bit_rate;
1824  if (st->codecpar->bit_rate > 0) {
1825  if (INT64_MAX - st->codecpar->bit_rate < bit_rate) {
1826  bit_rate = 0;
1827  break;
1828  }
1829  bit_rate += st->codecpar->bit_rate;
1830  } else if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO && sti->codec_info_nb_frames > 1) {
1831  // If we have a videostream with packets but without a bitrate
1832  // then consider the sum not known
1833  bit_rate = 0;
1834  break;
1835  }
1836  }
1837  ic->bit_rate = bit_rate;
1838  }
1839 
1840  /* if duration is already set, we believe it */
1841  if (ic->duration == AV_NOPTS_VALUE &&
1842  ic->bit_rate != 0) {
1843  int64_t filesize = ic->pb ? avio_size(ic->pb) : 0;
1844  if (filesize > si->data_offset) {
1845  filesize -= si->data_offset;
1846  for (unsigned i = 0; i < ic->nb_streams; i++) {
1847  AVStream *const st = ic->streams[i];
1848 
1849  if ( st->time_base.num <= INT64_MAX / ic->bit_rate
1850  && st->duration == AV_NOPTS_VALUE) {
1851  st->duration = av_rescale(filesize, 8LL * st->time_base.den,
1852  ic->bit_rate *
1853  (int64_t) st->time_base.num);
1854  show_warning = 1;
1855  }
1856  }
1857  }
1858  }
1859  if (show_warning)
1860  av_log(ic, AV_LOG_WARNING,
1861  "Estimating duration from bitrate, this may be inaccurate\n");
1862 }
1863 
1864 #define DURATION_DEFAULT_MAX_READ_SIZE 250000LL
1865 #define DURATION_DEFAULT_MAX_RETRY 6
1866 #define DURATION_MAX_RETRY 1
1867 
1868 /* only usable for MPEG-PS streams */
1870 {
1871  FFFormatContext *const si = ffformatcontext(ic);
1872  AVPacket *const pkt = si->pkt;
1873  int num, den, read_size, ret;
1875  int duration_max_retry = ic->duration_probesize ? DURATION_MAX_RETRY : DURATION_DEFAULT_MAX_RETRY;
1876  int found_duration = 0;
1877  int is_end;
1879  int retry = 0;
1880 
1881  /* flush packet queue */
1883 
1884  for (unsigned i = 0; i < ic->nb_streams; i++) {
1885  AVStream *const st = ic->streams[i];
1886  FFStream *const sti = ffstream(st);
1887 
1888  if (st->start_time == AV_NOPTS_VALUE &&
1889  sti->first_dts == AV_NOPTS_VALUE &&
1891  av_log(ic, AV_LOG_WARNING,
1892  "start time for stream %d is not set in estimate_timings_from_pts\n", i);
1893 
1894  if (sti->parser) {
1895  av_parser_close(sti->parser);
1896  sti->parser = NULL;
1897  }
1898  }
1899 
1901  av_log(ic, AV_LOG_INFO, "Skipping duration calculation in estimate_timings_from_pts\n");
1902  goto skip_duration_calc;
1903  }
1904 
1905  av_opt_set_int(ic, "skip_changes", 1, AV_OPT_SEARCH_CHILDREN);
1906  /* estimate the end time (duration) */
1907  /* XXX: may need to support wrapping */
1908  filesize = ic->pb ? avio_size(ic->pb) : 0;
1909  do {
1910  is_end = found_duration;
1911  offset = filesize - (duration_max_read_size << retry);
1912  if (offset < 0)
1913  offset = 0;
1914 
1915  avio_seek(ic->pb, offset, SEEK_SET);
1916  read_size = 0;
1917  for (;;) {
1918  AVStream *st;
1919  FFStream *sti;
1920  if (read_size >= duration_max_read_size << (FFMAX(retry - 1, 0)))
1921  break;
1922 
1923  do {
1924  ret = ff_read_packet(ic, pkt);
1925  } while (ret == AVERROR(EAGAIN));
1926  if (ret != 0)
1927  break;
1928  read_size += pkt->size;
1929  st = ic->streams[pkt->stream_index];
1930  sti = ffstream(st);
1931  if (pkt->pts != AV_NOPTS_VALUE &&
1932  (st->start_time != AV_NOPTS_VALUE ||
1933  sti->first_dts != AV_NOPTS_VALUE)) {
1934  if (pkt->duration == 0) {
1935  compute_frame_duration(ic, &num, &den, st, sti->parser, pkt);
1936  if (den && num) {
1938  num * (int64_t) st->time_base.den,
1939  den * (int64_t) st->time_base.num,
1940  AV_ROUND_DOWN);
1941  }
1942  }
1943  duration = pkt->pts + pkt->duration;
1944  found_duration = 1;
1945  if (st->start_time != AV_NOPTS_VALUE)
1946  duration -= st->start_time;
1947  else
1948  duration -= sti->first_dts;
1949  if (duration > 0) {
1950  if (st->duration == AV_NOPTS_VALUE || sti->info->last_duration<= 0 ||
1951  (st->duration < duration && FFABS(duration - sti->info->last_duration) < 60LL*st->time_base.den / st->time_base.num))
1952  st->duration = duration;
1953  sti->info->last_duration = duration;
1954  }
1955  }
1957  }
1958 
1959  /* check if all audio/video streams have valid duration */
1960  if (!is_end) {
1961  is_end = 1;
1962  for (unsigned i = 0; i < ic->nb_streams; i++) {
1963  const AVStream *const st = ic->streams[i];
1964  switch (st->codecpar->codec_type) {
1965  case AVMEDIA_TYPE_VIDEO:
1966  case AVMEDIA_TYPE_AUDIO:
1967  if (st->duration == AV_NOPTS_VALUE)
1968  is_end = 0;
1969  }
1970  }
1971  }
1972  } while (!is_end &&
1973  offset &&
1974  ++retry <= duration_max_retry);
1975 
1976  av_opt_set_int(ic, "skip_changes", 0, AV_OPT_SEARCH_CHILDREN);
1977 
1978  /* warn about audio/video streams which duration could not be estimated */
1979  for (unsigned i = 0; i < ic->nb_streams; i++) {
1980  const AVStream *const st = ic->streams[i];
1981  const FFStream *const sti = cffstream(st);
1982 
1983  if (st->duration == AV_NOPTS_VALUE) {
1984  switch (st->codecpar->codec_type) {
1985  case AVMEDIA_TYPE_VIDEO:
1986  case AVMEDIA_TYPE_AUDIO:
1987  if (st->start_time != AV_NOPTS_VALUE || sti->first_dts != AV_NOPTS_VALUE) {
1988  av_log(ic, AV_LOG_WARNING, "stream %d : no PTS found at end of file, duration not set\n", i);
1989  } else
1990  av_log(ic, AV_LOG_WARNING, "stream %d : no TS found at start of file, duration not set\n", i);
1991  }
1992  }
1993  }
1994 skip_duration_calc:
1996 
1997  avio_seek(ic->pb, old_offset, SEEK_SET);
1998  for (unsigned i = 0; i < ic->nb_streams; i++) {
1999  AVStream *const st = ic->streams[i];
2000  FFStream *const sti = ffstream(st);
2001 
2002  sti->cur_dts = sti->first_dts;
2003  sti->last_IP_pts = AV_NOPTS_VALUE;
2005  for (int j = 0; j < MAX_REORDER_DELAY + 1; j++)
2006  sti->pts_buffer[j] = AV_NOPTS_VALUE;
2007  }
2008 }
2009 
2010 /* 1:1 map to AVDurationEstimationMethod */
2011 static const char *const duration_name[] = {
2012  [AVFMT_DURATION_FROM_PTS] = "pts",
2013  [AVFMT_DURATION_FROM_STREAM] = "stream",
2014  [AVFMT_DURATION_FROM_BITRATE] = "bit rate",
2015 };
2016 
2018 {
2019  return duration_name[method];
2020 }
2021 
2022 static void estimate_timings(AVFormatContext *ic, int64_t old_offset)
2023 {
2024  int64_t file_size;
2025 
2026  /* get the file size, if possible */
2027  if (ic->iformat->flags & AVFMT_NOFILE) {
2028  file_size = 0;
2029  } else {
2030  file_size = avio_size(ic->pb);
2031  file_size = FFMAX(0, file_size);
2032  }
2033 
2034  if ((!strcmp(ic->iformat->name, "mpeg") ||
2035  !strcmp(ic->iformat->name, "mpegts")) &&
2036  file_size && (ic->pb->seekable & AVIO_SEEKABLE_NORMAL)) {
2037  /* get accurate estimate from the PTSes */
2038  estimate_timings_from_pts(ic, old_offset);
2040  } else if (has_duration(ic)) {
2041  /* at least one component has timings - we use them for all
2042  * the components */
2044  /* nut demuxer estimate the duration from PTS */
2045  if (!strcmp(ic->iformat->name, "nut"))
2047  else
2049  } else {
2050  /* less precise: use bitrate info */
2053  }
2055 
2056  for (unsigned i = 0; i < ic->nb_streams; i++) {
2057  AVStream *const st = ic->streams[i];
2058  if (st->time_base.den)
2059  av_log(ic, AV_LOG_TRACE, "stream %u: start_time: %s duration: %s\n", i,
2060  av_ts2timestr(st->start_time, &st->time_base),
2061  av_ts2timestr(st->duration, &st->time_base));
2062  }
2063  av_log(ic, AV_LOG_TRACE,
2064  "format: start_time: %s duration: %s (estimate from %s) bitrate=%"PRId64" kb/s\n",
2068  (int64_t)ic->bit_rate / 1000);
2069 }
2070 
2071 static int determinable_frame_size(const AVCodecContext *avctx)
2072 {
2073  switch(avctx->codec_id) {
2074  case AV_CODEC_ID_MP1:
2075  case AV_CODEC_ID_MP2:
2076  case AV_CODEC_ID_MP3:
2077  case AV_CODEC_ID_CODEC2:
2078  return 1;
2079  }
2080 
2081  return 0;
2082 }
2083 
2084 static int has_codec_parameters(const AVStream *st, const char **errmsg_ptr)
2085 {
2086  const FFStream *const sti = cffstream(st);
2087  const AVCodecContext *const avctx = sti->avctx;
2088 
2089 #define FAIL(errmsg) do { \
2090  if (errmsg_ptr) \
2091  *errmsg_ptr = errmsg; \
2092  return 0; \
2093  } while (0)
2094 
2095  if ( avctx->codec_id == AV_CODEC_ID_NONE
2096  && avctx->codec_type != AVMEDIA_TYPE_DATA)
2097  FAIL("unknown codec");
2098  switch (avctx->codec_type) {
2099  case AVMEDIA_TYPE_AUDIO:
2100  if (!avctx->frame_size && determinable_frame_size(avctx))
2101  FAIL("unspecified frame size");
2102  if (sti->info->found_decoder >= 0 &&
2103  avctx->sample_fmt == AV_SAMPLE_FMT_NONE)
2104  FAIL("unspecified sample format");
2105  if (!avctx->sample_rate)
2106  FAIL("unspecified sample rate");
2107  if (!avctx->ch_layout.nb_channels)
2108  FAIL("unspecified number of channels");
2109  if (sti->info->found_decoder >= 0 && !sti->nb_decoded_frames && avctx->codec_id == AV_CODEC_ID_DTS)
2110  FAIL("no decodable DTS frames");
2111  break;
2112  case AVMEDIA_TYPE_VIDEO:
2113  if (!avctx->width)
2114  FAIL("unspecified size");
2115  if (sti->info->found_decoder >= 0 && avctx->pix_fmt == AV_PIX_FMT_NONE)
2116  FAIL("unspecified pixel format");
2119  FAIL("no frame in rv30/40 and no sar");
2120  break;
2121  case AVMEDIA_TYPE_SUBTITLE:
2122  if (avctx->codec_id == AV_CODEC_ID_HDMV_PGS_SUBTITLE && !avctx->width)
2123  FAIL("unspecified size");
2124  break;
2125  case AVMEDIA_TYPE_DATA:
2126  if (avctx->codec_id == AV_CODEC_ID_NONE) return 1;
2127  }
2128 
2129  return 1;
2130 }
2131 
2132 /* returns 1 or 0 if or if not decoded data was returned, or a negative error */
2134  const AVPacket *pkt, AVDictionary **options)
2135 {
2136  FFStream *const sti = ffstream(st);
2137  AVCodecContext *const avctx = sti->avctx;
2138  const AVCodec *codec;
2139  int got_picture = 1, ret = 0;
2141  AVSubtitle subtitle;
2142  int do_skip_frame = 0;
2143  enum AVDiscard skip_frame;
2144  int pkt_to_send = pkt->size > 0;
2145 
2146  if (!frame)
2147  return AVERROR(ENOMEM);
2148 
2149  if (!avcodec_is_open(avctx) &&
2150  sti->info->found_decoder <= 0 &&
2151  (st->codecpar->codec_id != -sti->info->found_decoder || !st->codecpar->codec_id)) {
2152  AVDictionary *thread_opt = NULL;
2153 
2154  codec = find_probe_decoder(s, st, st->codecpar->codec_id);
2155 
2156  if (!codec) {
2157  sti->info->found_decoder = -st->codecpar->codec_id;
2158  ret = -1;
2159  goto fail;
2160  }
2161 
2162  /* Force thread count to 1 since the H.264 decoder will not extract
2163  * SPS and PPS to extradata during multi-threaded decoding. */
2164  av_dict_set(options ? options : &thread_opt, "threads", "1", 0);
2165  /* Force lowres to 0. The decoder might reduce the video size by the
2166  * lowres factor, and we don't want that propagated to the stream's
2167  * codecpar */
2168  av_dict_set(options ? options : &thread_opt, "lowres", "0", 0);
2169  if (s->codec_whitelist)
2170  av_dict_set(options ? options : &thread_opt, "codec_whitelist", s->codec_whitelist, 0);
2171  ret = avcodec_open2(avctx, codec, options ? options : &thread_opt);
2172  if (!options)
2173  av_dict_free(&thread_opt);
2174  if (ret < 0) {
2175  sti->info->found_decoder = -avctx->codec_id;
2176  goto fail;
2177  }
2178  sti->info->found_decoder = 1;
2179  } else if (!sti->info->found_decoder)
2180  sti->info->found_decoder = 1;
2181 
2182  if (sti->info->found_decoder < 0) {
2183  ret = -1;
2184  goto fail;
2185  }
2186 
2188  do_skip_frame = 1;
2189  skip_frame = avctx->skip_frame;
2190  avctx->skip_frame = AVDISCARD_ALL;
2191  }
2192 
2193  while ((pkt_to_send || (!pkt->data && got_picture)) &&
2194  ret >= 0 &&
2196  (!sti->codec_info_nb_frames &&
2198  got_picture = 0;
2199  if (avctx->codec_type == AVMEDIA_TYPE_VIDEO ||
2200  avctx->codec_type == AVMEDIA_TYPE_AUDIO) {
2201  ret = avcodec_send_packet(avctx, pkt);
2202  if (ret < 0 && ret != AVERROR(EAGAIN) && ret != AVERROR_EOF)
2203  break;
2204  if (ret >= 0)
2205  pkt_to_send = 0;
2206  ret = avcodec_receive_frame(avctx, frame);
2207  if (ret >= 0)
2208  got_picture = 1;
2209  if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF)
2210  ret = 0;
2211  } else if (avctx->codec_type == AVMEDIA_TYPE_SUBTITLE) {
2212  ret = avcodec_decode_subtitle2(avctx, &subtitle,
2213  &got_picture, pkt);
2214  if (got_picture)
2215  avsubtitle_free(&subtitle);
2216  if (ret >= 0)
2217  pkt_to_send = 0;
2218  }
2219  if (ret >= 0) {
2220  if (got_picture)
2221  sti->nb_decoded_frames++;
2222  ret = got_picture;
2223  }
2224  }
2225 
2226 fail:
2227  if (do_skip_frame) {
2228  avctx->skip_frame = skip_frame;
2229  }
2230 
2231  av_frame_free(&frame);
2232  return ret;
2233 }
2234 
2235 static int chapter_start_cmp(const void *p1, const void *p2)
2236 {
2237  const AVChapter *const ch1 = *(AVChapter**)p1;
2238  const AVChapter *const ch2 = *(AVChapter**)p2;
2239  int delta = av_compare_ts(ch1->start, ch1->time_base, ch2->start, ch2->time_base);
2240  if (delta)
2241  return delta;
2242  return FFDIFFSIGN(ch1->id, ch2->id);
2243 }
2244 
2246 {
2247  int64_t max_time = 0;
2248  AVChapter **timetable;
2249 
2250  if (!s->nb_chapters)
2251  return 0;
2252 
2253  if (s->duration > 0 && s->start_time < INT64_MAX - s->duration)
2254  max_time = s->duration +
2255  ((s->start_time == AV_NOPTS_VALUE) ? 0 : s->start_time);
2256 
2257  timetable = av_memdup(s->chapters, s->nb_chapters * sizeof(*timetable));
2258  if (!timetable)
2259  return AVERROR(ENOMEM);
2260  qsort(timetable, s->nb_chapters, sizeof(*timetable), chapter_start_cmp);
2261 
2262  for (unsigned i = 0; i < s->nb_chapters; i++)
2263  if (timetable[i]->end == AV_NOPTS_VALUE) {
2264  AVChapter *const ch = timetable[i];
2265  int64_t end = max_time ? av_rescale_q(max_time, AV_TIME_BASE_Q,
2266  ch->time_base)
2267  : INT64_MAX;
2268 
2269  if (i + 1 < s->nb_chapters) {
2270  const AVChapter *const ch1 = timetable[i + 1];
2271  int64_t next_start = av_rescale_q(ch1->start, ch1->time_base,
2272  ch->time_base);
2273  if (next_start > ch->start && next_start < end)
2274  end = next_start;
2275  }
2276  ch->end = (end == INT64_MAX || end < ch->start) ? ch->start : end;
2277  }
2278  av_free(timetable);
2279  return 0;
2280 }
2281 
2282 static int get_std_framerate(int i)
2283 {
2284  if (i < 30*12)
2285  return (i + 1) * 1001;
2286  i -= 30*12;
2287 
2288  if (i < 30)
2289  return (i + 31) * 1001 * 12;
2290  i -= 30;
2291 
2292  if (i < 3)
2293  return ((const int[]) { 80, 120, 240})[i] * 1001 * 12;
2294 
2295  i -= 3;
2296 
2297  return ((const int[]) { 24, 30, 60, 12, 15, 48 })[i] * 1000 * 12;
2298 }
2299 
2300 /* Is the time base unreliable?
2301  * This is a heuristic to balance between quick acceptance of the values in
2302  * the headers vs. some extra checks.
2303  * Old DivX and Xvid often have nonsense timebases like 1fps or 2fps.
2304  * MPEG-2 commonly misuses field repeat flags to store different framerates.
2305  * And there are "variable" fps files this needs to detect as well. */
2307 {
2308  FFStream *const sti = ffstream(st);
2309  const AVCodecDescriptor *desc = sti->codec_desc;
2310  AVCodecContext *c = sti->avctx;
2311  AVRational mul = (AVRational){ desc && (desc->props & AV_CODEC_PROP_FIELDS) ? 2 : 1, 1 };
2312  AVRational time_base = c->framerate.num ? av_inv_q(av_mul_q(c->framerate, mul))
2313  /* NOHEADER check added to not break existing behavior */
2314  : (((ic->ctx_flags & AVFMTCTX_NOHEADER) ||
2316  : st->time_base);
2317 
2318  if (time_base.den >= 101LL * time_base.num ||
2319  time_base.den < 5LL * time_base.num ||
2320  // c->codec_tag == AV_RL32("DIVX") ||
2321  // c->codec_tag == AV_RL32("XVID") ||
2322  c->codec_tag == AV_RL32("mp4v") ||
2323  c->codec_id == AV_CODEC_ID_MPEG2VIDEO ||
2324  c->codec_id == AV_CODEC_ID_GIF ||
2325  c->codec_id == AV_CODEC_ID_HEVC ||
2326  c->codec_id == AV_CODEC_ID_H264)
2327  return 1;
2328  return 0;
2329 }
2330 
2332 {
2333  FFStream *const sti = ffstream(st);
2334  FFStreamInfo *info = sti->info;
2335  int64_t last = info->last_dts;
2336 
2337  if ( ts != AV_NOPTS_VALUE && last != AV_NOPTS_VALUE && ts > last
2338  && ts - (uint64_t)last < INT64_MAX) {
2339  double dts = (is_relative(ts) ? ts - RELATIVE_TS_BASE : ts) * av_q2d(st->time_base);
2340  int64_t duration = ts - last;
2341 
2342  if (!info->duration_error)
2343  info->duration_error = av_mallocz(sizeof(info->duration_error[0])*2);
2344  if (!info->duration_error)
2345  return AVERROR(ENOMEM);
2346 
2347 // if (st->codec->codec_type == AVMEDIA_TYPE_VIDEO)
2348 // av_log(NULL, AV_LOG_ERROR, "%f\n", dts);
2349  for (int i = 0; i < MAX_STD_TIMEBASES; i++) {
2350  if (info->duration_error[0][1][i] < 1e10) {
2351  int framerate = get_std_framerate(i);
2352  double sdts = dts*framerate/(1001*12);
2353  for (int j = 0; j < 2; j++) {
2354  int64_t ticks = llrint(sdts+j*0.5);
2355  double error = sdts - ticks + j*0.5;
2356  info->duration_error[j][0][i] += error;
2357  info->duration_error[j][1][i] += error*error;
2358  }
2359  }
2360  }
2361  if (info->rfps_duration_sum <= INT64_MAX - duration) {
2362  info->duration_count++;
2363  info->rfps_duration_sum += duration;
2364  }
2365 
2366  if (info->duration_count % 10 == 0) {
2367  int n = info->duration_count;
2368  for (int i = 0; i < MAX_STD_TIMEBASES; i++) {
2369  if (info->duration_error[0][1][i] < 1e10) {
2370  double a0 = info->duration_error[0][0][i] / n;
2371  double error0 = info->duration_error[0][1][i] / n - a0*a0;
2372  double a1 = info->duration_error[1][0][i] / n;
2373  double error1 = info->duration_error[1][1][i] / n - a1*a1;
2374  if (error0 > 0.04 && error1 > 0.04) {
2375  info->duration_error[0][1][i] = 2e10;
2376  info->duration_error[1][1][i] = 2e10;
2377  }
2378  }
2379  }
2380  }
2381 
2382  // ignore the first 4 values, they might have some random jitter
2383  if (info->duration_count > 3 && is_relative(ts) == is_relative(last))
2384  info->duration_gcd = av_gcd(info->duration_gcd, duration);
2385  }
2386  if (ts != AV_NOPTS_VALUE)
2387  info->last_dts = ts;
2388 
2389  return 0;
2390 }
2391 
2393 {
2394  for (unsigned i = 0; i < ic->nb_streams; i++) {
2395  AVStream *const st = ic->streams[i];
2396  FFStream *const sti = ffstream(st);
2397 
2399  continue;
2400  // the check for tb_unreliable() is not completely correct, since this is not about handling
2401  // an unreliable/inexact time base, but a time base that is finer than necessary, as e.g.
2402  // ipmovie.c produces.
2403  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 &&
2404  sti->info->duration_gcd < INT64_MAX / st->time_base.num)
2405  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);
2406  if (sti->info->duration_count > 1 && !st->r_frame_rate.num
2407  && tb_unreliable(ic, st)) {
2408  int num = 0;
2409  double best_error = 0.01;
2410  AVRational ref_rate = st->r_frame_rate.num ? st->r_frame_rate : av_inv_q(st->time_base);
2411 
2412  for (int j = 0; j < MAX_STD_TIMEBASES; j++) {
2413  if (sti->info->codec_info_duration &&
2414  sti->info->codec_info_duration*av_q2d(st->time_base) < (1001*11.5)/get_std_framerate(j))
2415  continue;
2416  if (!sti->info->codec_info_duration && get_std_framerate(j) < 1001*12)
2417  continue;
2418 
2419  if (av_q2d(st->time_base) * sti->info->rfps_duration_sum / sti->info->duration_count < (1001*12.0 * 0.8)/get_std_framerate(j))
2420  continue;
2421 
2422  for (int k = 0; k < 2; k++) {
2423  int n = sti->info->duration_count;
2424  double a = sti->info->duration_error[k][0][j] / n;
2425  double error = sti->info->duration_error[k][1][j]/n - a*a;
2426 
2427  if (error < best_error && best_error> 0.000000001) {
2428  best_error= error;
2429  num = get_std_framerate(j);
2430  }
2431  if (error < 0.02)
2432  av_log(ic, AV_LOG_DEBUG, "rfps: %f %f\n", get_std_framerate(j) / 12.0/1001, error);
2433  }
2434  }
2435  // do not increase frame rate by more than 1 % in order to match a standard rate.
2436  if (num && (!ref_rate.num || (double)num/(12*1001) < 1.01 * av_q2d(ref_rate)))
2437  av_reduce(&st->r_frame_rate.num, &st->r_frame_rate.den, num, 12*1001, INT_MAX);
2438  }
2439  if ( !st->avg_frame_rate.num
2440  && st->r_frame_rate.num && sti->info->rfps_duration_sum
2441  && sti->info->codec_info_duration <= 0
2442  && sti->info->duration_count > 2
2443  && 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
2444  ) {
2445  av_log(ic, AV_LOG_DEBUG, "Setting avg frame rate based on r frame rate\n");
2446  st->avg_frame_rate = st->r_frame_rate;
2447  }
2448 
2449  av_freep(&sti->info->duration_error);
2450  sti->info->last_dts = AV_NOPTS_VALUE;
2451  sti->info->duration_count = 0;
2452  sti->info->rfps_duration_sum = 0;
2453  }
2454 }
2455 
2457 {
2458  const AVBitStreamFilter *const f = av_bsf_get_by_name("extract_extradata");
2459  if (!f)
2460  return 0;
2461 
2462  if (f->codec_ids) {
2463  const enum AVCodecID *ids;
2464  for (ids = f->codec_ids; *ids != AV_CODEC_ID_NONE; ids++)
2465  if (*ids == st->codecpar->codec_id)
2466  return 1;
2467  }
2468 
2469  return 0;
2470 }
2471 
2473 {
2474  FFStream *const sti = ffstream(st);
2475  const AVBitStreamFilter *f;
2476  int ret;
2477 
2478  f = av_bsf_get_by_name("extract_extradata");
2479  if (!f)
2480  goto finish;
2481 
2482  /* check that the codec id is supported */
2484  if (!ret)
2485  goto finish;
2486 
2489  if (ret < 0)
2490  return ret;
2491 
2493  st->codecpar);
2494  if (ret < 0)
2495  goto fail;
2496 
2498 
2500  if (ret < 0)
2501  goto fail;
2502 
2503 finish:
2504  sti->extract_extradata.inited = 1;
2505 
2506  return 0;
2507 fail:
2509  return ret;
2510 }
2511 
2513 {
2514  FFStream *const sti = ffstream(st);
2515  AVPacket *const pkt_ref = si->parse_pkt;
2516  int ret;
2517 
2518  if (!sti->extract_extradata.inited) {
2520  if (ret < 0)
2521  return ret;
2522  }
2523 
2524  if (sti->extract_extradata.inited && !sti->extract_extradata.bsf)
2525  return 0;
2526 
2527  ret = av_packet_ref(pkt_ref, pkt);
2528  if (ret < 0)
2529  return ret;
2530 
2531  ret = av_bsf_send_packet(sti->extract_extradata.bsf, pkt_ref);
2532  if (ret < 0) {
2533  av_packet_unref(pkt_ref);
2534  return ret;
2535  }
2536 
2537  while (ret >= 0 && !sti->avctx->extradata) {
2539  if (ret < 0) {
2540  if (ret != AVERROR(EAGAIN) && ret != AVERROR_EOF)
2541  return ret;
2542  continue;
2543  }
2544 
2545  for (int i = 0; i < pkt_ref->side_data_elems; i++) {
2546  AVPacketSideData *const side_data = &pkt_ref->side_data[i];
2547  if (side_data->type == AV_PKT_DATA_NEW_EXTRADATA) {
2548  sti->avctx->extradata = side_data->data;
2549  sti->avctx->extradata_size = side_data->size;
2550  side_data->data = NULL;
2551  side_data->size = 0;
2552  break;
2553  }
2554  }
2555  av_packet_unref(pkt_ref);
2556  }
2557 
2558  return 0;
2559 }
2560 
2562  const AVCodecContext *avctx)
2563 {
2564  AVCodecParameters *par_tmp;
2565  int ret;
2566 
2567  par_tmp = avcodec_parameters_alloc();
2568  if (!par_tmp)
2569  return AVERROR(ENOMEM);
2570 
2571  ret = avcodec_parameters_copy(par_tmp, par);
2572  if (ret < 0)
2573  goto fail;
2574 
2575  ret = avcodec_parameters_from_context(par, avctx);
2576  if (ret < 0)
2577  goto fail;
2578 
2579  /* Restore some values if they are signaled at the container level
2580  * given they may have been replaced by codec level values as read
2581  * internally by avformat_find_stream_info().
2582  */
2583  if (par_tmp->color_range != AVCOL_RANGE_UNSPECIFIED)
2584  par->color_range = par_tmp->color_range;
2585  if (par_tmp->color_primaries != AVCOL_PRI_UNSPECIFIED ||
2586  par_tmp->color_trc != AVCOL_TRC_UNSPECIFIED ||
2587  par_tmp->color_space != AVCOL_SPC_UNSPECIFIED) {
2588  par->color_primaries = par_tmp->color_primaries;
2589  par->color_trc = par_tmp->color_trc;
2590  par->color_space = par_tmp->color_space;
2591  }
2592  if (par_tmp->chroma_location != AVCHROMA_LOC_UNSPECIFIED)
2593  par->chroma_location = par_tmp->chroma_location;
2594 
2595  ret = 0;
2596 fail:
2597  avcodec_parameters_free(&par_tmp);
2598 
2599  return ret;
2600 }
2601 
2603 {
2604  FFFormatContext *const si = ffformatcontext(ic);
2605  int count = 0, ret = 0, err;
2606  int64_t read_size;
2607  AVPacket *pkt1 = si->pkt;
2608  int64_t old_offset = avio_tell(ic->pb);
2609  // new streams might appear, no options for those
2610  int orig_nb_streams = ic->nb_streams;
2611  int flush_codecs;
2612  int64_t max_analyze_duration = ic->max_analyze_duration;
2613  int64_t max_stream_analyze_duration;
2614  int64_t max_subtitle_analyze_duration;
2615  int64_t probesize = ic->probesize;
2616  int eof_reached = 0;
2617 
2618  flush_codecs = probesize > 0;
2619 
2620  av_opt_set_int(ic, "skip_clear", 1, AV_OPT_SEARCH_CHILDREN);
2621 
2622  max_stream_analyze_duration = max_analyze_duration;
2623  max_subtitle_analyze_duration = max_analyze_duration;
2624  if (!max_analyze_duration) {
2625  max_stream_analyze_duration =
2626  max_analyze_duration = 5*AV_TIME_BASE;
2627  max_subtitle_analyze_duration = 30*AV_TIME_BASE;
2628  if (!strcmp(ic->iformat->name, "flv"))
2629  max_stream_analyze_duration = 90*AV_TIME_BASE;
2630  if (!strcmp(ic->iformat->name, "mpeg") || !strcmp(ic->iformat->name, "mpegts"))
2631  max_stream_analyze_duration = 7*AV_TIME_BASE;
2632  }
2633 
2634  if (ic->pb) {
2635  FFIOContext *const ctx = ffiocontext(ic->pb);
2636  av_log(ic, AV_LOG_DEBUG, "Before avformat_find_stream_info() pos: %"PRId64" bytes read:%"PRId64" seeks:%d nb_streams:%d\n",
2637  avio_tell(ic->pb), ctx->bytes_read, ctx->seek_count, ic->nb_streams);
2638  }
2639 
2640  for (unsigned i = 0; i < ic->nb_streams; i++) {
2641  const AVCodec *codec;
2642  AVDictionary *thread_opt = NULL;
2643  AVStream *const st = ic->streams[i];
2644  FFStream *const sti = ffstream(st);
2645  AVCodecContext *const avctx = sti->avctx;
2646 
2647  /* check if the caller has overridden the codec id */
2648  // only for the split stuff
2649  if (!sti->parser && !(ic->flags & AVFMT_FLAG_NOPARSE) && sti->request_probe <= 0) {
2650  sti->parser = av_parser_init(st->codecpar->codec_id);
2651  if (sti->parser) {
2652  if (sti->need_parsing == AVSTREAM_PARSE_HEADERS) {
2654  } else if (sti->need_parsing == AVSTREAM_PARSE_FULL_RAW) {
2656  }
2657  } else if (sti->need_parsing) {
2658  av_log(ic, AV_LOG_VERBOSE, "parser not found for codec "
2659  "%s, packets or times may be invalid.\n",
2661  }
2662  }
2663 
2665  if (ret < 0)
2666  goto find_stream_info_err;
2667  if (sti->request_probe <= 0)
2668  sti->avctx_inited = 1;
2669 
2670  codec = find_probe_decoder(ic, st, st->codecpar->codec_id);
2671 
2672  /* Force thread count to 1 since the H.264 decoder will not extract
2673  * SPS and PPS to extradata during multi-threaded decoding. */
2674  av_dict_set(options ? &options[i] : &thread_opt, "threads", "1", 0);
2675  /* Force lowres to 0. The decoder might reduce the video size by the
2676  * lowres factor, and we don't want that propagated to the stream's
2677  * codecpar */
2678  av_dict_set(options ? &options[i] : &thread_opt, "lowres", "0", 0);
2679 
2680  if (ic->codec_whitelist)
2681  av_dict_set(options ? &options[i] : &thread_opt, "codec_whitelist", ic->codec_whitelist, 0);
2682 
2683  // Try to just open decoders, in case this is enough to get parameters.
2684  // Also ensure that subtitle_header is properly set.
2685  if (!has_codec_parameters(st, NULL) && sti->request_probe <= 0 ||
2687  if (codec && !avctx->codec)
2688  if (avcodec_open2(avctx, codec, options ? &options[i] : &thread_opt) < 0)
2689  av_log(ic, AV_LOG_WARNING,
2690  "Failed to open codec in %s\n", __func__);
2691  }
2692  if (!options)
2693  av_dict_free(&thread_opt);
2694  }
2695 
2696  read_size = 0;
2697  for (;;) {
2698  const AVPacket *pkt;
2699  AVStream *st;
2700  FFStream *sti;
2701  AVCodecContext *avctx;
2702  int analyzed_all_streams;
2703  unsigned i;
2705  ret = AVERROR_EXIT;
2706  av_log(ic, AV_LOG_DEBUG, "interrupted\n");
2707  break;
2708  }
2709 
2710  /* read_frame_internal() in a previous iteration of this loop may
2711  * have made changes to streams without returning a packet for them.
2712  * Handle that here. */
2713  ret = update_stream_avctx(ic);
2714  if (ret < 0)
2715  goto unref_then_goto_end;
2716 
2717  /* check if one codec still needs to be handled */
2718  for (i = 0; i < ic->nb_streams; i++) {
2719  AVStream *const st = ic->streams[i];
2720  FFStream *const sti = ffstream(st);
2721  int fps_analyze_framecount = 20;
2722  int count;
2723 
2724  if (!has_codec_parameters(st, NULL))
2725  break;
2726  /* If the timebase is coarse (like the usual millisecond precision
2727  * of mkv), we need to analyze more frames to reliably arrive at
2728  * the correct fps. */
2729  if (av_q2d(st->time_base) > 0.0005)
2730  fps_analyze_framecount *= 2;
2731  if (!tb_unreliable(ic, st))
2732  fps_analyze_framecount = 0;
2733  if (ic->fps_probe_size >= 0)
2734  fps_analyze_framecount = ic->fps_probe_size;
2736  fps_analyze_framecount = 0;
2737  /* variable fps and no guess at the real fps */
2738  count = (ic->iformat->flags & AVFMT_NOTIMESTAMPS) ?
2740  sti->info->duration_count;
2741  if (!(st->r_frame_rate.num && st->avg_frame_rate.num) &&
2743  if (count < fps_analyze_framecount)
2744  break;
2745  }
2746  // Look at the first 3 frames if there is evidence of frame delay
2747  // but the decoder delay is not set.
2748  if (sti->info->frame_delay_evidence && count < 2 && sti->avctx->has_b_frames == 0)
2749  break;
2750  if (!sti->avctx->extradata &&
2751  (!sti->extract_extradata.inited || sti->extract_extradata.bsf) &&
2753  break;
2754  if (sti->first_dts == AV_NOPTS_VALUE &&
2759  break;
2760  }
2761  analyzed_all_streams = 0;
2762  if (i == ic->nb_streams && !si->missing_streams) {
2763  analyzed_all_streams = 1;
2764  /* NOTE: If the format has no header, then we need to read some
2765  * packets to get most of the streams, so we cannot stop here. */
2766  if (!(ic->ctx_flags & AVFMTCTX_NOHEADER)) {
2767  /* If we found the info for all the codecs, we can stop. */
2768  ret = count;
2769  av_log(ic, AV_LOG_DEBUG, "All info found\n");
2770  flush_codecs = 0;
2771  break;
2772  }
2773  }
2774  /* We did not get all the codec info, but we read too much data. */
2775  if (read_size >= probesize) {
2776  ret = count;
2777  av_log(ic, AV_LOG_DEBUG,
2778  "Probe buffer size limit of %"PRId64" bytes reached\n", probesize);
2779  for (unsigned i = 0; i < ic->nb_streams; i++) {
2780  AVStream *const st = ic->streams[i];
2781  FFStream *const sti = ffstream(st);
2782  if (!st->r_frame_rate.num &&
2783  sti->info->duration_count <= 1 &&
2785  strcmp(ic->iformat->name, "image2"))
2786  av_log(ic, AV_LOG_WARNING,
2787  "Stream #%d: not enough frames to estimate rate; "
2788  "consider increasing probesize\n", i);
2789  }
2790  break;
2791  }
2792 
2793  /* NOTE: A new stream can be added there if no header in file
2794  * (AVFMTCTX_NOHEADER). */
2795  ret = read_frame_internal(ic, pkt1);
2796  if (ret == AVERROR(EAGAIN))
2797  continue;
2798 
2799  if (ret < 0) {
2800  /* EOF or error*/
2801  eof_reached = 1;
2802  break;
2803  }
2804 
2805  if (!(ic->flags & AVFMT_FLAG_NOBUFFER)) {
2807  pkt1, NULL, 0);
2808  if (ret < 0)
2809  goto unref_then_goto_end;
2810 
2811  pkt = &si->packet_buffer.tail->pkt;
2812  } else {
2813  pkt = pkt1;
2814  }
2815 
2816  st = ic->streams[pkt->stream_index];
2817  sti = ffstream(st);
2819  read_size += pkt->size;
2820 
2821  avctx = sti->avctx;
2822  if (!sti->avctx_inited) {
2824  if (ret < 0)
2825  goto unref_then_goto_end;
2826  sti->avctx_inited = 1;
2827  }
2828 
2829  if (pkt->dts != AV_NOPTS_VALUE && sti->codec_info_nb_frames > 1) {
2830  /* check for non-increasing dts */
2831  if (sti->info->fps_last_dts != AV_NOPTS_VALUE &&
2832  sti->info->fps_last_dts >= pkt->dts) {
2833  av_log(ic, AV_LOG_DEBUG,
2834  "Non-increasing DTS in stream %d: packet %d with DTS "
2835  "%"PRId64", packet %d with DTS %"PRId64"\n",
2836  st->index, sti->info->fps_last_dts_idx,
2838  pkt->dts);
2839  sti->info->fps_first_dts =
2841  }
2842  /* Check for a discontinuity in dts. If the difference in dts
2843  * is more than 1000 times the average packet duration in the
2844  * sequence, we treat it as a discontinuity. */
2845  if (sti->info->fps_last_dts != AV_NOPTS_VALUE &&
2846  sti->info->fps_last_dts_idx > sti->info->fps_first_dts_idx &&
2847  (pkt->dts - (uint64_t)sti->info->fps_last_dts) / 1000 >
2848  (sti->info->fps_last_dts - (uint64_t)sti->info->fps_first_dts) /
2849  (sti->info->fps_last_dts_idx - sti->info->fps_first_dts_idx)) {
2850  av_log(ic, AV_LOG_WARNING,
2851  "DTS discontinuity in stream %d: packet %d with DTS "
2852  "%"PRId64", packet %d with DTS %"PRId64"\n",
2853  st->index, sti->info->fps_last_dts_idx,
2855  pkt->dts);
2856  sti->info->fps_first_dts =
2858  }
2859 
2860  /* update stored dts values */
2861  if (sti->info->fps_first_dts == AV_NOPTS_VALUE) {
2862  sti->info->fps_first_dts = pkt->dts;
2864  }
2865  sti->info->fps_last_dts = pkt->dts;
2867  }
2868  if (sti->codec_info_nb_frames > 1) {
2869  int64_t t = 0;
2870  int64_t limit;
2871 
2872  if (st->time_base.den > 0)
2874  if (st->avg_frame_rate.num > 0)
2876 
2877  if ( t == 0
2878  && sti->codec_info_nb_frames > 30
2879  && sti->info->fps_first_dts != AV_NOPTS_VALUE
2880  && sti->info->fps_last_dts != AV_NOPTS_VALUE) {
2882  t = FFMAX(t, av_rescale_q(dur, st->time_base, AV_TIME_BASE_Q));
2883  }
2884 
2885  if (analyzed_all_streams) limit = max_analyze_duration;
2886  else if (avctx->codec_type == AVMEDIA_TYPE_SUBTITLE) limit = max_subtitle_analyze_duration;
2887  else limit = max_stream_analyze_duration;
2888 
2889  if (t >= limit) {
2890  av_log(ic, AV_LOG_VERBOSE, "max_analyze_duration %"PRId64" reached at %"PRId64" microseconds st:%d\n",
2891  limit,
2892  t, pkt->stream_index);
2893  if (ic->flags & AVFMT_FLAG_NOBUFFER)
2894  av_packet_unref(pkt1);
2895  break;
2896  }
2897  if (pkt->duration > 0 && pkt->duration < INT64_MAX - sti->info->codec_info_duration) {
2898  const int fields = sti->codec_desc && (sti->codec_desc->props & AV_CODEC_PROP_FIELDS);
2900  && (uint64_t)pkt->pts - st->start_time < INT64_MAX
2901  ) {
2903  } else
2905  sti->info->codec_info_duration_fields += sti->parser && sti->need_parsing && fields
2906  ? sti->parser->repeat_pict + 1 : 2;
2907  }
2908  }
2909  if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) {
2910 #if FF_API_R_FRAME_RATE
2911  ff_rfps_add_frame(ic, st, pkt->dts);
2912 #endif
2913  if (pkt->dts != pkt->pts && pkt->dts != AV_NOPTS_VALUE && pkt->pts != AV_NOPTS_VALUE)
2914  sti->info->frame_delay_evidence = 1;
2915  }
2916  if (!sti->avctx->extradata) {
2917  ret = extract_extradata(si, st, pkt);
2918  if (ret < 0)
2919  goto unref_then_goto_end;
2920  }
2921 
2922  /* If still no information, we try to open the codec and to
2923  * decompress the frame. We try to avoid that in most cases as
2924  * it takes longer and uses more memory. For MPEG-4, we need to
2925  * decompress for QuickTime.
2926  *
2927  * If AV_CODEC_CAP_CHANNEL_CONF is set this will force decoding of at
2928  * least one frame of codec data, this makes sure the codec initializes
2929  * the channel configuration and does not only trust the values from
2930  * the container. */
2931  try_decode_frame(ic, st, pkt,
2932  (options && i < orig_nb_streams) ? &options[i] : NULL);
2933 
2934  if (ic->flags & AVFMT_FLAG_NOBUFFER)
2935  av_packet_unref(pkt1);
2936 
2937  sti->codec_info_nb_frames++;
2938  count++;
2939  }
2940 
2941  if (eof_reached) {
2942  for (unsigned stream_index = 0; stream_index < ic->nb_streams; stream_index++) {
2943  AVStream *const st = ic->streams[stream_index];
2944  AVCodecContext *const avctx = ffstream(st)->avctx;
2945  if (!has_codec_parameters(st, NULL)) {
2946  const AVCodec *codec = find_probe_decoder(ic, st, st->codecpar->codec_id);
2947  if (codec && !avctx->codec) {
2948  AVDictionary *opts = NULL;
2949  if (ic->codec_whitelist)
2950  av_dict_set(&opts, "codec_whitelist", ic->codec_whitelist, 0);
2951  if (avcodec_open2(avctx, codec, (options && stream_index < orig_nb_streams) ? &options[stream_index] : &opts) < 0)
2952  av_log(ic, AV_LOG_WARNING,
2953  "Failed to open codec in %s\n", __func__);
2954  av_dict_free(&opts);
2955  }
2956  }
2957 
2958  // EOF already reached while reading the stream above.
2959  // So continue with reoordering DTS with whatever delay we have.
2961  update_dts_from_pts(ic, stream_index, si->packet_buffer.head);
2962  }
2963  }
2964  }
2965 
2966  if (flush_codecs) {
2967  AVPacket *empty_pkt = si->pkt;
2968  int err = 0;
2969  av_packet_unref(empty_pkt);
2970 
2971  for (unsigned i = 0; i < ic->nb_streams; i++) {
2972  AVStream *const st = ic->streams[i];
2973  FFStream *const sti = ffstream(st);
2974 
2975  /* flush the decoders */
2976  if (sti->info->found_decoder == 1) {
2977  err = try_decode_frame(ic, st, empty_pkt,
2978  (options && i < orig_nb_streams)
2979  ? &options[i] : NULL);
2980 
2981  if (err < 0) {
2982  av_log(ic, AV_LOG_INFO,
2983  "decoding for stream %d failed\n", st->index);
2984  }
2985  }
2986  }
2987  }
2988 
2989  ff_rfps_calculate(ic);
2990 
2991  for (unsigned i = 0; i < ic->nb_streams; i++) {
2992  AVStream *const st = ic->streams[i];
2993  FFStream *const sti = ffstream(st);
2994  AVCodecContext *const avctx = sti->avctx;
2995 
2996  if (avctx->codec_type == AVMEDIA_TYPE_VIDEO) {
2997  if (avctx->codec_id == AV_CODEC_ID_RAWVIDEO && !avctx->codec_tag && !avctx->bits_per_coded_sample) {
2998  uint32_t tag= avcodec_pix_fmt_to_codec_tag(avctx->pix_fmt);
3000  avctx->codec_tag= tag;
3001  }
3002 
3003  /* estimate average framerate if not set by demuxer */
3004  if (sti->info->codec_info_duration_fields &&
3005  !st->avg_frame_rate.num &&
3006  sti->info->codec_info_duration) {
3007  int best_fps = 0;
3008  double best_error = 0.01;
3009  AVRational codec_frame_rate = avctx->framerate;
3010 
3011  if (sti->info->codec_info_duration >= INT64_MAX / st->time_base.num / 2||
3012  sti->info->codec_info_duration_fields >= INT64_MAX / st->time_base.den ||
3013  sti->info->codec_info_duration < 0)
3014  continue;
3017  sti->info->codec_info_duration * 2 * (int64_t) st->time_base.num, 60000);
3018 
3019  /* Round guessed framerate to a "standard" framerate if it's
3020  * within 1% of the original estimate. */
3021  for (int j = 0; j < MAX_STD_TIMEBASES; j++) {
3022  AVRational std_fps = { get_std_framerate(j), 12 * 1001 };
3023  double error = fabs(av_q2d(st->avg_frame_rate) /
3024  av_q2d(std_fps) - 1);
3025 
3026  if (error < best_error) {
3027  best_error = error;
3028  best_fps = std_fps.num;
3029  }
3030 
3032  codec_frame_rate.num > 0 && codec_frame_rate.den > 0) {
3033  error = fabs(av_q2d(codec_frame_rate) /
3034  av_q2d(std_fps) - 1);
3035  if (error < best_error) {
3036  best_error = error;
3037  best_fps = std_fps.num;
3038  }
3039  }
3040  }
3041  if (best_fps)
3043  best_fps, 12 * 1001, INT_MAX);
3044  }
3045  if (!st->r_frame_rate.num) {
3046  const AVCodecDescriptor *desc = sti->codec_desc;
3047  AVRational mul = (AVRational){ desc && (desc->props & AV_CODEC_PROP_FIELDS) ? 2 : 1, 1 };
3048  AVRational fr = av_mul_q(avctx->framerate, mul);
3049 
3050  if (fr.num && fr.den && av_cmp_q(st->time_base, av_inv_q(fr)) <= 0) {
3051  st->r_frame_rate = fr;
3052  } else {
3053  st->r_frame_rate.num = st->time_base.den;
3054  st->r_frame_rate.den = st->time_base.num;
3055  }
3056  }
3057  st->codecpar->framerate = avctx->framerate;
3058  if (sti->display_aspect_ratio.num && sti->display_aspect_ratio.den) {
3059  AVRational hw_ratio = { avctx->height, avctx->width };
3061  hw_ratio);
3062  }
3063  } else if (avctx->codec_type == AVMEDIA_TYPE_AUDIO) {
3064  if (!avctx->bits_per_coded_sample)
3065  avctx->bits_per_coded_sample =
3067  // set stream disposition based on audio service type
3068  switch (avctx->audio_service_type) {
3071  break;
3074  break;
3077  break;
3080  break;
3083  break;
3084  }
3085  }
3086  }
3087 
3088  if (probesize)
3089  estimate_timings(ic, old_offset);
3090 
3091  av_opt_set_int(ic, "skip_clear", 0, AV_OPT_SEARCH_CHILDREN);
3092 
3093  if (ret >= 0 && ic->nb_streams)
3094  /* We could not have all the codec parameters before EOF. */
3095  ret = -1;
3096  for (unsigned i = 0; i < ic->nb_streams; i++) {
3097  AVStream *const st = ic->streams[i];
3098  FFStream *const sti = ffstream(st);
3099  const char *errmsg;
3100 
3101  /* if no packet was ever seen, update context now for has_codec_parameters */
3102  if (!sti->avctx_inited) {
3103  if (st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO &&
3105  st->codecpar->format = sti->avctx->sample_fmt;
3107  if (ret < 0)
3108  goto find_stream_info_err;
3109  }
3110  if (!has_codec_parameters(st, &errmsg)) {
3111  char buf[256];
3112  avcodec_string(buf, sizeof(buf), sti->avctx, 0);
3113  av_log(ic, AV_LOG_WARNING,
3114  "Could not find codec parameters for stream %d (%s): %s\n"
3115  "Consider increasing the value for the 'analyzeduration' (%"PRId64") and 'probesize' (%"PRId64") options\n",
3116  i, buf, errmsg, ic->max_analyze_duration, ic->probesize);
3117  } else {
3118  ret = 0;
3119  }
3120  }
3121 
3122  err = compute_chapters_end(ic);
3123  if (err < 0) {
3124  ret = err;
3125  goto find_stream_info_err;
3126  }
3127 
3128  /* update the stream parameters from the internal codec contexts */
3129  for (unsigned i = 0; i < ic->nb_streams; i++) {
3130  AVStream *const st = ic->streams[i];
3131  FFStream *const sti = ffstream(st);
3132 
3133  if (sti->avctx_inited) {
3134  ret = parameters_from_context(ic, st->codecpar, sti->avctx);
3135  if (ret < 0)
3136  goto find_stream_info_err;
3137 
3138  if (sti->avctx->rc_buffer_size > 0 || sti->avctx->rc_max_rate > 0 ||
3139  sti->avctx->rc_min_rate) {
3140  size_t cpb_size;
3141  AVCPBProperties *props = av_cpb_properties_alloc(&cpb_size);
3142  if (props) {
3143  if (sti->avctx->rc_buffer_size > 0)
3144  props->buffer_size = sti->avctx->rc_buffer_size;
3145  if (sti->avctx->rc_min_rate > 0)
3146  props->min_bitrate = sti->avctx->rc_min_rate;
3147  if (sti->avctx->rc_max_rate > 0)
3148  props->max_bitrate = sti->avctx->rc_max_rate;
3152  (uint8_t *)props, cpb_size, 0))
3153  av_free(props);
3154  }
3155  }
3156  }
3157 
3158  sti->avctx_inited = 0;
3159  }
3160 
3161 find_stream_info_err:
3162  for (unsigned i = 0; i < ic->nb_streams; i++) {
3163  AVStream *const st = ic->streams[i];
3164  FFStream *const sti = ffstream(st);
3165  int err;
3166 
3167  if (sti->info) {
3168  av_freep(&sti->info->duration_error);
3169  av_freep(&sti->info);
3170  }
3171 
3172  if (avcodec_is_open(sti->avctx)) {
3173  err = codec_close(sti);
3174  if (err < 0 && ret >= 0)
3175  ret = err;
3176  }
3177 
3179  }
3180  if (ic->pb) {
3181  FFIOContext *const ctx = ffiocontext(ic->pb);
3182  av_log(ic, AV_LOG_DEBUG, "After avformat_find_stream_info() pos: %"PRId64" bytes read:%"PRId64" seeks:%d frames:%d\n",
3183  avio_tell(ic->pb), ctx->bytes_read, ctx->seek_count, count);
3184  }
3185  return ret;
3186 
3187 unref_then_goto_end:
3188  av_packet_unref(pkt1);
3189  goto find_stream_info_err;
3190 }
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:173
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:1383
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:2331
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:1865
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:1678
AVERROR
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later. That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another. Frame references ownership and permissions
opt.h
AVCodecParameters::codec_type
enum AVMediaType codec_type
General type of the encoded data.
Definition: codec_par.h:51
av_probe_input_buffer2
int av_probe_input_buffer2(AVIOContext *pb, const AVInputFormat **fmt, const char *url, void *logctx, unsigned int offset, unsigned int max_probe_size)
Probe a bytestream to determine the input format.
Definition: format.c:253
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:806
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:327
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:504
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:2456
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:1683
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:1329
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:1869
av_read_frame
int av_read_frame(AVFormatContext *s, AVPacket *pkt)
Return the next frame of a stream.
Definition: demux.c:1583
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:703
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:61
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:80
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:1700
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:1334
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:329
av_filename_number_test
int av_filename_number_test(const char *filename)
Check whether filename actually is a numbered sequence generator.
Definition: utils.c: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:148
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:864
AVCodecContext::skip_frame
enum AVDiscard skip_frame
Skip decoding for selected frames.
Definition: avcodec.h:1670
fail
#define fail()
Definition: checkasm.h:216
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:171
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:2472
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:1201
avsubtitle_free
void avsubtitle_free(AVSubtitle *sub)
Free all allocated data in the given subtitle struct.
Definition: avcodec.c:411
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
pkt
AVPacket * pkt
Definition: movenc.c:60
chapter_start_cmp
static int chapter_start_cmp(const void *p1, const void *p2)
Definition: demux.c:2235
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
duration
int64_t duration
Definition: movenc.c:65
avformat_open_input
int avformat_open_input(AVFormatContext **ps, const char *filename, const AVInputFormat *fmt, AVDictionary **options)
Open an input stream and read the header.
Definition: demux.c: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:66
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:150
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:2011
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:721
av_assert0
#define av_assert0(cond)
assert() equivalent, that is always enabled.
Definition: avassert.h:41
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
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:1866
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:2071
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:2561
FFStreamInfo::found_decoder
int found_decoder
0 -> decoder has not been searched for yet.
Definition: demux.h:164
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:235
get_std_framerate
static int get_std_framerate(int i)
Definition: demux.c:2282
has_codec_parameters
static int has_codec_parameters(const AVStream *st, const char **errmsg_ptr)
Definition: demux.c:2084
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
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:1071
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:155
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:918
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:1170
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:156
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:1383
c
Undefined Behavior In the C some operations are like signed integer dereferencing freed accessing outside allocated Undefined Behavior must not occur in a C it is not safe even if the output of undefined operations is unused The unsafety may seem nit picking but Optimizing compilers have in fact optimized code on the assumption that no undefined Behavior occurs Optimizing code based on wrong assumptions can and has in some cases lead to effects beyond the output of computations The signed integer overflow problem in speed critical code Code which is highly optimized and works with signed integers sometimes has the problem that often the output of the computation does not c
Definition: undefined.txt:32
FAIL
#define FAIL(errmsg)
AVCodecParameters::sample_rate
int sample_rate
Audio only.
Definition: codec_par.h:184
av_opt_set_int
int av_opt_set_int(void *obj, const char *name, int64_t val, int search_flags)
Definition: opt.c:880
duration_estimate_name
static const char * duration_estimate_name(enum AVDurationEstimationMethod method)
Definition: demux.c:2017
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:90
avcodec_find_decoder
const AVCodec * avcodec_find_decoder(enum AVCodecID id)
Find a registered decoder with a matching codec ID.
Definition: allcodecs.c:1043
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:2602
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:149
avformat_alloc_context
AVFormatContext * avformat_alloc_context(void)
Allocate an AVFormatContext.
Definition: options.c:162
init_input
static int init_input(AVFormatContext *s, const char *filename, AVDictionary **options)
Definition: demux.c:158
AVIOContext::seekable
int seekable
A combination of AVIO_SEEKABLE_ flags or 0 when the stream is not seekable.
Definition: avio.h:261
FFStream
Definition: internal.h:128
shift
static int shift(int a, int b)
Definition: bonk.c:261
av_bsf_send_packet
int av_bsf_send_packet(AVBSFContext *ctx, AVPacket *pkt)
Submit a packet for filtering.
Definition: bsf.c:202
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:326
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:152
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:870
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:166
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:153
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:1811
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:2392
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:181
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:154
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:852
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
i
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:256
AVPacket::pts
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...
Definition: packet.h: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:1142
av_assert1
#define av_assert1(cond)
assert() equivalent, that does not lie in speed critical code.
Definition: avassert.h:57
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
FFStream::extract_extradata
struct FFStream::@456 extract_extradata
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:342
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
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:157
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:994
try_decode_frame
static int try_decode_frame(AVFormatContext *s, AVStream *st, const AVPacket *pkt, AVDictionary **options)
Definition: demux.c:2133
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:2306
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:96
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:172
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:151
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:143
ff_flush_packet_queue
void ff_flush_packet_queue(AVFormatContext *s)
Definition: avformat.c:132
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:839
DURATION_DEFAULT_MAX_READ_SIZE
#define DURATION_DEFAULT_MAX_READ_SIZE
Definition: demux.c:1864
avformat_free_context
void avformat_free_context(AVFormatContext *s)
Free an AVFormatContext and all its streams.
Definition: avformat.c:143
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:978
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:1173
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:78
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:2512
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:1794
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:1154
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:1266
av_log
#define av_log(a,...)
Definition: tableprint_vlc.h:27
AVFormatContext::start_time
int64_t start_time
Position of the first frame of the component, in AV_TIME_BASE fractional seconds.
Definition: avformat.h: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:174
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:2022
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:1986
AVStream::start_time
int64_t start_time
Decoding: pts of the first frame of the stream in presentation order, in stream time base.
Definition: avformat.h:793
PARSER_FLAG_ONCE
#define PARSER_FLAG_ONCE
Definition: avcodec.h:2624
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:2245
avpriv_codec_get_cap_skip_frame_fill_param
int avpriv_codec_get_cap_skip_frame_fill_param(const AVCodec *codec)
Definition: utils.c:402
FormatContextInternal::parse_queue
PacketList parse_queue
Packets split by the parser get queued here.
Definition: avformat_internal.h:85
AVFMT_EVENT_FLAG_METADATA_UPDATED
#define AVFMT_EVENT_FLAG_METADATA_UPDATED
Definition: avformat.h: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:91