FFmpeg
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
utils.c
Go to the documentation of this file.
1 /*
2  * various utility functions for use within FFmpeg
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 <stdarg.h>
23 #include <stdint.h>
24 
25 #include "config.h"
26 
27 #include "libavutil/avassert.h"
28 #include "libavutil/avstring.h"
29 #include "libavutil/dict.h"
30 #include "libavutil/internal.h"
31 #include "libavutil/mathematics.h"
32 #include "libavutil/opt.h"
33 #include "libavutil/parseutils.h"
34 #include "libavutil/pixdesc.h"
35 #include "libavutil/time.h"
37 #include "libavutil/timestamp.h"
38 
39 #include "libavcodec/bytestream.h"
40 #include "libavcodec/internal.h"
41 #include "libavcodec/raw.h"
42 
43 #include "audiointerleave.h"
44 #include "avformat.h"
45 #include "avio_internal.h"
46 #include "id3v2.h"
47 #include "internal.h"
48 #include "metadata.h"
49 #if CONFIG_NETWORK
50 #include "network.h"
51 #endif
52 #include "riff.h"
53 #include "url.h"
54 
55 #include "libavutil/ffversion.h"
56 const char av_format_ffversion[] = "FFmpeg version " FFMPEG_VERSION;
57 
58 /**
59  * @file
60  * various utility functions for use within FFmpeg
61  */
62 
63 unsigned avformat_version(void)
64 {
67 }
68 
69 const char *avformat_configuration(void)
70 {
71  return FFMPEG_CONFIGURATION;
72 }
73 
74 const char *avformat_license(void)
75 {
76 #define LICENSE_PREFIX "libavformat license: "
77  return LICENSE_PREFIX FFMPEG_LICENSE + sizeof(LICENSE_PREFIX) - 1;
78 }
79 
80 #define RELATIVE_TS_BASE (INT64_MAX - (1LL<<48))
81 
82 static int is_relative(int64_t ts) {
83  return ts > (RELATIVE_TS_BASE - (1LL<<48));
84 }
85 
86 /**
87  * Wrap a given time stamp, if there is an indication for an overflow
88  *
89  * @param st stream
90  * @param timestamp the time stamp to wrap
91  * @return resulting time stamp
92  */
93 static int64_t wrap_timestamp(AVStream *st, int64_t timestamp)
94 {
96  st->pts_wrap_reference != AV_NOPTS_VALUE && timestamp != AV_NOPTS_VALUE) {
98  timestamp < st->pts_wrap_reference)
99  return timestamp + (1ULL << st->pts_wrap_bits);
100  else if (st->pts_wrap_behavior == AV_PTS_WRAP_SUB_OFFSET &&
101  timestamp >= st->pts_wrap_reference)
102  return timestamp - (1ULL << st->pts_wrap_bits);
103  }
104  return timestamp;
105 }
106 
107 MAKE_ACCESSORS(AVStream, stream, AVRational, r_frame_rate)
108 MAKE_ACCESSORS(AVStream, stream, char *, recommended_encoder_configuration)
110 MAKE_ACCESSORS(AVFormatContext, format, AVCodec *, audio_codec)
111 MAKE_ACCESSORS(AVFormatContext, format, AVCodec *, subtitle_codec)
112 MAKE_ACCESSORS(AVFormatContext, format, AVCodec *, data_codec)
113 MAKE_ACCESSORS(AVFormatContext, format, int, metadata_header_padding)
114 MAKE_ACCESSORS(AVFormatContext, format, void *, opaque)
115 MAKE_ACCESSORS(AVFormatContext, format, av_format_control_message, control_message_cb)
116 #if FF_API_OLD_OPEN_CALLBACKS
118 MAKE_ACCESSORS(AVFormatContext, format, AVOpenCallback, open_cb)
120 #endif
121 
122 int64_t av_stream_get_end_pts(const AVStream *st)
123 {
124  if (st->priv_pts) {
125  return st->priv_pts->val;
126  } else
127  return AV_NOPTS_VALUE;
128 }
129 
130 struct AVCodecParserContext *av_stream_get_parser(const AVStream *st)
131 {
132  return st->parser;
133 }
134 
135 void av_format_inject_global_side_data(AVFormatContext *s)
136 {
137  int i;
139  for (i = 0; i < s->nb_streams; i++) {
140  AVStream *st = s->streams[i];
141  st->inject_global_side_data = 1;
142  }
143 }
144 
145 int ff_copy_whiteblacklists(AVFormatContext *dst, AVFormatContext *src)
146 {
147  av_assert0(!dst->codec_whitelist &&
148  !dst->format_whitelist &&
149  !dst->protocol_whitelist &&
150  !dst->protocol_blacklist);
151  dst-> codec_whitelist = av_strdup(src->codec_whitelist);
155  if ( (src-> codec_whitelist && !dst-> codec_whitelist)
156  || (src-> format_whitelist && !dst-> format_whitelist)
157  || (src->protocol_whitelist && !dst->protocol_whitelist)
158  || (src->protocol_blacklist && !dst->protocol_blacklist)) {
159  av_log(dst, AV_LOG_ERROR, "Failed to duplicate black/whitelist\n");
160  return AVERROR(ENOMEM);
161  }
162  return 0;
163 }
164 
165 static const AVCodec *find_decoder(AVFormatContext *s, AVStream *st, enum AVCodecID codec_id)
166 {
167 #if FF_API_LAVF_AVCTX
169  if (st->codec->codec)
170  return st->codec->codec;
172 #endif
173 
174  switch (st->codecpar->codec_type) {
175  case AVMEDIA_TYPE_VIDEO:
176  if (s->video_codec) return s->video_codec;
177  break;
178  case AVMEDIA_TYPE_AUDIO:
179  if (s->audio_codec) return s->audio_codec;
180  break;
182  if (s->subtitle_codec) return s->subtitle_codec;
183  break;
184  }
185 
186  return avcodec_find_decoder(codec_id);
187 }
188 
189 int av_format_get_probe_score(const AVFormatContext *s)
190 {
191  return s->probe_score;
192 }
193 
194 /* an arbitrarily chosen "sane" max packet size -- 50M */
195 #define SANE_CHUNK_SIZE (50000000)
196 
198 {
199  if (s->maxsize>= 0) {
200  int64_t remaining= s->maxsize - avio_tell(s);
201  if (remaining < size) {
202  int64_t newsize = avio_size(s);
203  if (!s->maxsize || s->maxsize<newsize)
204  s->maxsize = newsize - !newsize;
205  remaining= s->maxsize - avio_tell(s);
206  remaining= FFMAX(remaining, 0);
207  }
208 
209  if (s->maxsize>= 0 && remaining+1 < size) {
210  av_log(NULL, remaining ? AV_LOG_ERROR : AV_LOG_DEBUG, "Truncating packet of size %d to %"PRId64"\n", size, remaining+1);
211  size = remaining+1;
212  }
213  }
214  return size;
215 }
216 
217 /* Read the data in sane-sized chunks and append to pkt.
218  * Return the number of bytes read or an error. */
220 {
221  int64_t orig_pos = pkt->pos; // av_grow_packet might reset pos
222  int orig_size = pkt->size;
223  int ret;
224 
225  do {
226  int prev_size = pkt->size;
227  int read_size;
228 
229  /* When the caller requests a lot of data, limit it to the amount
230  * left in file or SANE_CHUNK_SIZE when it is not known. */
231  read_size = size;
232  if (read_size > SANE_CHUNK_SIZE/10) {
233  read_size = ffio_limit(s, read_size);
234  // If filesize/maxsize is unknown, limit to SANE_CHUNK_SIZE
235  if (s->maxsize < 0)
236  read_size = FFMIN(read_size, SANE_CHUNK_SIZE);
237  }
238 
239  ret = av_grow_packet(pkt, read_size);
240  if (ret < 0)
241  break;
242 
243  ret = avio_read(s, pkt->data + prev_size, read_size);
244  if (ret != read_size) {
245  av_shrink_packet(pkt, prev_size + FFMAX(ret, 0));
246  break;
247  }
248 
249  size -= read_size;
250  } while (size > 0);
251  if (size > 0)
252  pkt->flags |= AV_PKT_FLAG_CORRUPT;
253 
254  pkt->pos = orig_pos;
255  if (!pkt->size)
256  av_packet_unref(pkt);
257  return pkt->size > orig_size ? pkt->size - orig_size : ret;
258 }
259 
261 {
262  av_init_packet(pkt);
263  pkt->data = NULL;
264  pkt->size = 0;
265  pkt->pos = avio_tell(s);
266 
267  return append_packet_chunked(s, pkt, size);
268 }
269 
271 {
272  if (!pkt->size)
273  return av_get_packet(s, pkt, size);
274  return append_packet_chunked(s, pkt, size);
275 }
276 
277 int av_filename_number_test(const char *filename)
278 {
279  char buf[1024];
280  return filename &&
281  (av_get_frame_filename(buf, sizeof(buf), filename, 1) >= 0);
282 }
283 
284 static int set_codec_from_probe_data(AVFormatContext *s, AVStream *st,
285  AVProbeData *pd)
286 {
287  static const struct {
288  const char *name;
289  enum AVCodecID id;
290  enum AVMediaType type;
291  } fmt_id_type[] = {
303  { "mpegvideo", AV_CODEC_ID_MPEG2VIDEO, AVMEDIA_TYPE_VIDEO },
304  { "truehd", AV_CODEC_ID_TRUEHD, AVMEDIA_TYPE_AUDIO },
305  { 0 }
306  };
307  int score;
308  AVInputFormat *fmt = av_probe_input_format3(pd, 1, &score);
309 
310  if (fmt && st->request_probe <= score) {
311  int i;
312  av_log(s, AV_LOG_DEBUG,
313  "Probe with size=%d, packets=%d detected %s with score=%d\n",
315  fmt->name, score);
316  for (i = 0; fmt_id_type[i].name; i++) {
317  if (!strcmp(fmt->name, fmt_id_type[i].name)) {
318  if (fmt_id_type[i].type != AVMEDIA_TYPE_AUDIO &&
319  st->codecpar->sample_rate)
320  continue;
321  st->codecpar->codec_id = fmt_id_type[i].id;
322  st->codecpar->codec_type = fmt_id_type[i].type;
323  st->internal->need_context_update = 1;
324 #if FF_API_LAVF_AVCTX
326  st->codec->codec_type = st->codecpar->codec_type;
327  st->codec->codec_id = st->codecpar->codec_id;
329 #endif
330  return score;
331  }
332  }
333  }
334  return 0;
335 }
336 
337 /************************************************************/
338 /* input media file */
339 
340 int av_demuxer_open(AVFormatContext *ic) {
341  int err;
342 
343  if (ic->format_whitelist && av_match_list(ic->iformat->name, ic->format_whitelist, ',') <= 0) {
344  av_log(ic, AV_LOG_ERROR, "Format not on whitelist \'%s\'\n", ic->format_whitelist);
345  return AVERROR(EINVAL);
346  }
347 
348  if (ic->iformat->read_header) {
349  err = ic->iformat->read_header(ic);
350  if (err < 0)
351  return err;
352  }
353 
354  if (ic->pb && !ic->internal->data_offset)
355  ic->internal->data_offset = avio_tell(ic->pb);
356 
357  return 0;
358 }
359 
360 /* Open input file and probe the format if necessary. */
361 static int init_input(AVFormatContext *s, const char *filename,
363 {
364  int ret;
365  AVProbeData pd = { filename, NULL, 0 };
366  int score = AVPROBE_SCORE_RETRY;
367 
368  if (s->pb) {
370  if (!s->iformat)
371  return av_probe_input_buffer2(s->pb, &s->iformat, filename,
372  s, 0, s->format_probesize);
373  else if (s->iformat->flags & AVFMT_NOFILE)
374  av_log(s, AV_LOG_WARNING, "Custom AVIOContext makes no sense and "
375  "will be ignored with AVFMT_NOFILE format.\n");
376  return 0;
377  }
378 
379  if ((s->iformat && s->iformat->flags & AVFMT_NOFILE) ||
380  (!s->iformat && (s->iformat = av_probe_input_format2(&pd, 0, &score))))
381  return score;
382 
383  if ((ret = s->io_open(s, &s->pb, filename, AVIO_FLAG_READ | s->avio_flags, options)) < 0)
384  return ret;
385 
386  if (s->iformat)
387  return 0;
388  return av_probe_input_buffer2(s->pb, &s->iformat, filename,
389  s, 0, s->format_probesize);
390 }
391 
392 static int add_to_pktbuf(AVPacketList **packet_buffer, AVPacket *pkt,
393  AVPacketList **plast_pktl, int ref)
394 {
395  AVPacketList *pktl = av_mallocz(sizeof(AVPacketList));
396  int ret;
397 
398  if (!pktl)
399  return AVERROR(ENOMEM);
400 
401  if (ref) {
402  if ((ret = av_packet_ref(&pktl->pkt, pkt)) < 0) {
403  av_free(pktl);
404  return ret;
405  }
406  } else {
407  pktl->pkt = *pkt;
408  }
409 
410  if (*packet_buffer)
411  (*plast_pktl)->next = pktl;
412  else
413  *packet_buffer = pktl;
414 
415  /* Add the packet in the buffered packet list. */
416  *plast_pktl = pktl;
417  return 0;
418 }
419 
420 int avformat_queue_attached_pictures(AVFormatContext *s)
421 {
422  int i, ret;
423  for (i = 0; i < s->nb_streams; i++)
425  s->streams[i]->discard < AVDISCARD_ALL) {
426  if (s->streams[i]->attached_pic.size <= 0) {
428  "Attached picture on stream %d has invalid size, "
429  "ignoring\n", i);
430  continue;
431  }
432 
434  &s->streams[i]->attached_pic,
436  if (ret < 0)
437  return ret;
438  }
439  return 0;
440 }
441 
442 static int update_stream_avctx(AVFormatContext *s)
443 {
444  int i, ret;
445  for (i = 0; i < s->nb_streams; i++) {
446  AVStream *st = s->streams[i];
447 
448  if (!st->internal->need_context_update)
449  continue;
450 
451  /* update internal codec context, for the parser */
453  if (ret < 0)
454  return ret;
455 
456 #if FF_API_LAVF_AVCTX
458  /* update deprecated public codec context */
459  ret = avcodec_parameters_to_context(st->codec, st->codecpar);
460  if (ret < 0)
461  return ret;
463 #endif
464 
465  st->internal->need_context_update = 0;
466  }
467  return 0;
468 }
469 
470 
471 int avformat_open_input(AVFormatContext **ps, const char *filename,
473 {
474  AVFormatContext *s = *ps;
475  int i, ret = 0;
476  AVDictionary *tmp = NULL;
477  ID3v2ExtraMeta *id3v2_extra_meta = NULL;
478 
479  if (!s && !(s = avformat_alloc_context()))
480  return AVERROR(ENOMEM);
481  if (!s->av_class) {
482  av_log(NULL, AV_LOG_ERROR, "Input context has not been properly allocated by avformat_alloc_context() and is not NULL either\n");
483  return AVERROR(EINVAL);
484  }
485  if (fmt)
486  s->iformat = fmt;
487 
488  if (options)
489  av_dict_copy(&tmp, *options, 0);
490 
491  if (s->pb) // must be before any goto fail
493 
494  if ((ret = av_opt_set_dict(s, &tmp)) < 0)
495  goto fail;
496 
497  if ((ret = init_input(s, filename, &tmp)) < 0)
498  goto fail;
499  s->probe_score = ret;
500 
501  if (!s->protocol_whitelist && s->pb && s->pb->protocol_whitelist) {
503  if (!s->protocol_whitelist) {
504  ret = AVERROR(ENOMEM);
505  goto fail;
506  }
507  }
508 
509  if (!s->protocol_blacklist && s->pb && s->pb->protocol_blacklist) {
511  if (!s->protocol_blacklist) {
512  ret = AVERROR(ENOMEM);
513  goto fail;
514  }
515  }
516 
517  if (s->format_whitelist && av_match_list(s->iformat->name, s->format_whitelist, ',') <= 0) {
518  av_log(s, AV_LOG_ERROR, "Format not on whitelist \'%s\'\n", s->format_whitelist);
519  ret = AVERROR(EINVAL);
520  goto fail;
521  }
522 
524 
525  /* Check filename in case an image number is expected. */
526  if (s->iformat->flags & AVFMT_NEEDNUMBER) {
527  if (!av_filename_number_test(filename)) {
528  ret = AVERROR(EINVAL);
529  goto fail;
530  }
531  }
532 
534  av_strlcpy(s->filename, filename ? filename : "", sizeof(s->filename));
535 
536  /* Allocate private data. */
537  if (s->iformat->priv_data_size > 0) {
538  if (!(s->priv_data = av_mallocz(s->iformat->priv_data_size))) {
539  ret = AVERROR(ENOMEM);
540  goto fail;
541  }
542  if (s->iformat->priv_class) {
543  *(const AVClass **) s->priv_data = s->iformat->priv_class;
545  if ((ret = av_opt_set_dict(s->priv_data, &tmp)) < 0)
546  goto fail;
547  }
548  }
549 
550  /* e.g. AVFMT_NOFILE formats will not have a AVIOContext */
551  if (s->pb)
552  ff_id3v2_read(s, ID3v2_DEFAULT_MAGIC, &id3v2_extra_meta, 0);
553 
554  if (!(s->flags&AVFMT_FLAG_PRIV_OPT) && s->iformat->read_header)
555  if ((ret = s->iformat->read_header(s)) < 0)
556  goto fail;
557 
558  if (id3v2_extra_meta) {
559  if (!strcmp(s->iformat->name, "mp3") || !strcmp(s->iformat->name, "aac") ||
560  !strcmp(s->iformat->name, "tta")) {
561  if ((ret = ff_id3v2_parse_apic(s, &id3v2_extra_meta)) < 0)
562  goto fail;
563  } else
564  av_log(s, AV_LOG_DEBUG, "demuxer does not support additional id3 data, skipping\n");
565  }
566  ff_id3v2_free_extra_meta(&id3v2_extra_meta);
567 
568  if ((ret = avformat_queue_attached_pictures(s)) < 0)
569  goto fail;
570 
571  if (!(s->flags&AVFMT_FLAG_PRIV_OPT) && s->pb && !s->internal->data_offset)
572  s->internal->data_offset = avio_tell(s->pb);
573 
575 
577 
578  for (i = 0; i < s->nb_streams; i++)
580 
581  if (options) {
582  av_dict_free(options);
583  *options = tmp;
584  }
585  *ps = s;
586  return 0;
587 
588 fail:
589  ff_id3v2_free_extra_meta(&id3v2_extra_meta);
590  av_dict_free(&tmp);
591  if (s->pb && !(s->flags & AVFMT_FLAG_CUSTOM_IO))
592  avio_closep(&s->pb);
594  *ps = NULL;
595  return ret;
596 }
597 
598 /*******************************************************/
599 
600 static void force_codec_ids(AVFormatContext *s, AVStream *st)
601 {
602  switch (st->codecpar->codec_type) {
603  case AVMEDIA_TYPE_VIDEO:
604  if (s->video_codec_id)
605  st->codecpar->codec_id = s->video_codec_id;
606  break;
607  case AVMEDIA_TYPE_AUDIO:
608  if (s->audio_codec_id)
609  st->codecpar->codec_id = s->audio_codec_id;
610  break;
612  if (s->subtitle_codec_id)
614  break;
615  }
616 }
617 
618 static int probe_codec(AVFormatContext *s, AVStream *st, const AVPacket *pkt)
619 {
620  if (st->request_probe>0) {
621  AVProbeData *pd = &st->probe_data;
622  int end;
623  av_log(s, AV_LOG_DEBUG, "probing stream %d pp:%d\n", st->index, st->probe_packets);
624  --st->probe_packets;
625 
626  if (pkt) {
627  uint8_t *new_buf = av_realloc(pd->buf, pd->buf_size+pkt->size+AVPROBE_PADDING_SIZE);
628  if (!new_buf) {
630  "Failed to reallocate probe buffer for stream %d\n",
631  st->index);
632  goto no_packet;
633  }
634  pd->buf = new_buf;
635  memcpy(pd->buf + pd->buf_size, pkt->data, pkt->size);
636  pd->buf_size += pkt->size;
637  memset(pd->buf + pd->buf_size, 0, AVPROBE_PADDING_SIZE);
638  } else {
639 no_packet:
640  st->probe_packets = 0;
641  if (!pd->buf_size) {
643  "nothing to probe for stream %d\n", st->index);
644  }
645  }
646 
648  || st->probe_packets<= 0;
649 
650  if (end || av_log2(pd->buf_size) != av_log2(pd->buf_size - pkt->size)) {
651  int score = set_codec_from_probe_data(s, st, pd);
653  || end) {
654  pd->buf_size = 0;
655  av_freep(&pd->buf);
656  st->request_probe = -1;
657  if (st->codecpar->codec_id != AV_CODEC_ID_NONE) {
658  av_log(s, AV_LOG_DEBUG, "probed stream %d\n", st->index);
659  } else
660  av_log(s, AV_LOG_WARNING, "probed stream %d failed\n", st->index);
661  }
662  force_codec_ids(s, st);
663  }
664  }
665  return 0;
666 }
667 
668 static int update_wrap_reference(AVFormatContext *s, AVStream *st, int stream_index, AVPacket *pkt)
669 {
670  int64_t ref = pkt->dts;
671  int i, pts_wrap_behavior;
672  int64_t pts_wrap_reference;
673  AVProgram *first_program;
674 
675  if (ref == AV_NOPTS_VALUE)
676  ref = pkt->pts;
677  if (st->pts_wrap_reference != AV_NOPTS_VALUE || st->pts_wrap_bits >= 63 || ref == AV_NOPTS_VALUE || !s->correct_ts_overflow)
678  return 0;
679  ref &= (1LL << st->pts_wrap_bits)-1;
680 
681  // reference time stamp should be 60 s before first time stamp
682  pts_wrap_reference = ref - av_rescale(60, st->time_base.den, st->time_base.num);
683  // if first time stamp is not more than 1/8 and 60s before the wrap point, subtract rather than add wrap offset
684  pts_wrap_behavior = (ref < (1LL << st->pts_wrap_bits) - (1LL << st->pts_wrap_bits-3)) ||
685  (ref < (1LL << st->pts_wrap_bits) - av_rescale(60, st->time_base.den, st->time_base.num)) ?
687 
688  first_program = av_find_program_from_stream(s, NULL, stream_index);
689 
690  if (!first_program) {
691  int default_stream_index = av_find_default_stream_index(s);
692  if (s->streams[default_stream_index]->pts_wrap_reference == AV_NOPTS_VALUE) {
693  for (i = 0; i < s->nb_streams; i++) {
695  continue;
696  s->streams[i]->pts_wrap_reference = pts_wrap_reference;
697  s->streams[i]->pts_wrap_behavior = pts_wrap_behavior;
698  }
699  }
700  else {
701  st->pts_wrap_reference = s->streams[default_stream_index]->pts_wrap_reference;
702  st->pts_wrap_behavior = s->streams[default_stream_index]->pts_wrap_behavior;
703  }
704  }
705  else {
706  AVProgram *program = first_program;
707  while (program) {
708  if (program->pts_wrap_reference != AV_NOPTS_VALUE) {
709  pts_wrap_reference = program->pts_wrap_reference;
710  pts_wrap_behavior = program->pts_wrap_behavior;
711  break;
712  }
713  program = av_find_program_from_stream(s, program, stream_index);
714  }
715 
716  // update every program with differing pts_wrap_reference
717  program = first_program;
718  while (program) {
719  if (program->pts_wrap_reference != pts_wrap_reference) {
720  for (i = 0; i<program->nb_stream_indexes; i++) {
721  s->streams[program->stream_index[i]]->pts_wrap_reference = pts_wrap_reference;
722  s->streams[program->stream_index[i]]->pts_wrap_behavior = pts_wrap_behavior;
723  }
724 
725  program->pts_wrap_reference = pts_wrap_reference;
726  program->pts_wrap_behavior = pts_wrap_behavior;
727  }
728  program = av_find_program_from_stream(s, program, stream_index);
729  }
730  }
731  return 1;
732 }
733 
734 int ff_read_packet(AVFormatContext *s, AVPacket *pkt)
735 {
736  int ret, i, err;
737  AVStream *st;
738 
739  for (;;) {
741 
742  if (pktl) {
743  *pkt = pktl->pkt;
744  st = s->streams[pkt->stream_index];
746  if ((err = probe_codec(s, st, NULL)) < 0)
747  return err;
748  if (st->request_probe <= 0) {
749  s->internal->raw_packet_buffer = pktl->next;
751  av_free(pktl);
752  return 0;
753  }
754  }
755 
756  pkt->data = NULL;
757  pkt->size = 0;
758  av_init_packet(pkt);
759  ret = s->iformat->read_packet(s, pkt);
760  if (ret < 0) {
761  /* Some demuxers return FFERROR_REDO when they consume
762  data and discard it (ignored streams, junk, extradata).
763  We must re-call the demuxer to get the real packet. */
764  if (ret == FFERROR_REDO)
765  continue;
766  if (!pktl || ret == AVERROR(EAGAIN))
767  return ret;
768  for (i = 0; i < s->nb_streams; i++) {
769  st = s->streams[i];
770  if (st->probe_packets)
771  if ((err = probe_codec(s, st, NULL)) < 0)
772  return err;
773  av_assert0(st->request_probe <= 0);
774  }
775  continue;
776  }
777 
778  if (!pkt->buf) {
779  AVPacket tmp = { 0 };
780  ret = av_packet_ref(&tmp, pkt);
781  if (ret < 0)
782  return ret;
783  *pkt = tmp;
784  }
785 
786  if ((s->flags & AVFMT_FLAG_DISCARD_CORRUPT) &&
787  (pkt->flags & AV_PKT_FLAG_CORRUPT)) {
789  "Dropped corrupted packet (stream = %d)\n",
790  pkt->stream_index);
791  av_packet_unref(pkt);
792  continue;
793  }
794 
795  if (pkt->stream_index >= (unsigned)s->nb_streams) {
796  av_log(s, AV_LOG_ERROR, "Invalid stream index %d\n", pkt->stream_index);
797  continue;
798  }
799 
800  st = s->streams[pkt->stream_index];
801 
803  // correct first time stamps to negative values
804  if (!is_relative(st->first_dts))
805  st->first_dts = wrap_timestamp(st, st->first_dts);
806  if (!is_relative(st->start_time))
807  st->start_time = wrap_timestamp(st, st->start_time);
808  if (!is_relative(st->cur_dts))
809  st->cur_dts = wrap_timestamp(st, st->cur_dts);
810  }
811 
812  pkt->dts = wrap_timestamp(st, pkt->dts);
813  pkt->pts = wrap_timestamp(st, pkt->pts);
814 
815  force_codec_ids(s, st);
816 
817  /* TODO: audio: time filter; video: frame reordering (pts != dts) */
819  pkt->dts = pkt->pts = av_rescale_q(av_gettime(), AV_TIME_BASE_Q, st->time_base);
820 
821  if (!pktl && st->request_probe <= 0)
822  return ret;
823 
824  err = add_to_pktbuf(&s->internal->raw_packet_buffer, pkt,
826  if (err)
827  return err;
829 
830  if ((err = probe_codec(s, st, pkt)) < 0)
831  return err;
832  }
833 }
834 
835 
836 /**********************************************************/
837 
839 {
840  if (/*avctx->codec_id == AV_CODEC_ID_AAC ||*/
841  avctx->codec_id == AV_CODEC_ID_MP1 ||
842  avctx->codec_id == AV_CODEC_ID_MP2 ||
843  avctx->codec_id == AV_CODEC_ID_MP3/* ||
844  avctx->codec_id == AV_CODEC_ID_CELT*/)
845  return 1;
846  return 0;
847 }
848 
849 /**
850  * Return the frame duration in seconds. Return 0 if not available.
851  */
852 void ff_compute_frame_duration(AVFormatContext *s, int *pnum, int *pden, AVStream *st,
854 {
855  AVRational codec_framerate = s->iformat ? st->internal->avctx->framerate :
857  int frame_size, sample_rate;
858 
859 #if FF_API_LAVF_AVCTX
861  if ((!codec_framerate.den || !codec_framerate.num) && st->codec->time_base.den && st->codec->time_base.num)
862  codec_framerate = av_mul_q(av_inv_q(st->codec->time_base), (AVRational){1, st->codec->ticks_per_frame});
864 #endif
865 
866  *pnum = 0;
867  *pden = 0;
868  switch (st->codecpar->codec_type) {
869  case AVMEDIA_TYPE_VIDEO:
870  if (st->r_frame_rate.num && !pc && s->iformat) {
871  *pnum = st->r_frame_rate.den;
872  *pden = st->r_frame_rate.num;
873  } else if (st->time_base.num * 1000LL > st->time_base.den) {
874  *pnum = st->time_base.num;
875  *pden = st->time_base.den;
876  } else if (codec_framerate.den * 1000LL > codec_framerate.num) {
877  av_assert0(st->internal->avctx->ticks_per_frame);
878  av_reduce(pnum, pden,
879  codec_framerate.den,
880  codec_framerate.num * (int64_t)st->internal->avctx->ticks_per_frame,
881  INT_MAX);
882 
883  if (pc && pc->repeat_pict) {
884  av_assert0(s->iformat); // this may be wrong for interlaced encoding but its not used for that case
885  av_reduce(pnum, pden,
886  (*pnum) * (1LL + pc->repeat_pict),
887  (*pden),
888  INT_MAX);
889  }
890  /* If this codec can be interlaced or progressive then we need
891  * a parser to compute duration of a packet. Thus if we have
892  * no parser in such case leave duration undefined. */
893  if (st->internal->avctx->ticks_per_frame > 1 && !pc)
894  *pnum = *pden = 0;
895  }
896  break;
897  case AVMEDIA_TYPE_AUDIO:
898  if (st->internal->avctx_inited) {
899  frame_size = av_get_audio_frame_duration(st->internal->avctx, pkt->size);
900  sample_rate = st->internal->avctx->sample_rate;
901  } else {
902  frame_size = av_get_audio_frame_duration2(st->codecpar, pkt->size);
903  sample_rate = st->codecpar->sample_rate;
904  }
905  if (frame_size <= 0 || sample_rate <= 0)
906  break;
907  *pnum = frame_size;
908  *pden = sample_rate;
909  break;
910  default:
911  break;
912  }
913 }
914 
915 static int is_intra_only(enum AVCodecID id)
916 {
918  if (!d)
919  return 0;
921  return 0;
922  return 1;
923 }
924 
925 static int has_decode_delay_been_guessed(AVStream *st)
926 {
927  if (st->codecpar->codec_id != AV_CODEC_ID_H264) return 1;
928  if (!st->info) // if we have left find_stream_info then nb_decoded_frames won't increase anymore for stream copy
929  return 1;
930 #if CONFIG_H264_DECODER
931  if (st->internal->avctx->has_b_frames &&
933  return 1;
934 #endif
935  if (st->internal->avctx->has_b_frames<3)
936  return st->nb_decoded_frames >= 7;
937  else if (st->internal->avctx->has_b_frames<4)
938  return st->nb_decoded_frames >= 18;
939  else
940  return st->nb_decoded_frames >= 20;
941 }
942 
943 static AVPacketList *get_next_pkt(AVFormatContext *s, AVStream *st, AVPacketList *pktl)
944 {
945  if (pktl->next)
946  return pktl->next;
947  if (pktl == s->internal->packet_buffer_end)
948  return s->internal->parse_queue;
949  return NULL;
950 }
951 
952 static int64_t select_from_pts_buffer(AVStream *st, int64_t *pts_buffer, int64_t dts) {
953  int onein_oneout = st->codecpar->codec_id != AV_CODEC_ID_H264 &&
955 
956  if(!onein_oneout) {
957  int delay = st->internal->avctx->has_b_frames;
958  int i;
959 
960  if (dts == AV_NOPTS_VALUE) {
961  int64_t best_score = INT64_MAX;
962  for (i = 0; i<delay; i++) {
963  if (st->pts_reorder_error_count[i]) {
964  int64_t score = st->pts_reorder_error[i] / st->pts_reorder_error_count[i];
965  if (score < best_score) {
966  best_score = score;
967  dts = pts_buffer[i];
968  }
969  }
970  }
971  } else {
972  for (i = 0; i<delay; i++) {
973  if (pts_buffer[i] != AV_NOPTS_VALUE) {
974  int64_t diff = FFABS(pts_buffer[i] - dts)
975  + (uint64_t)st->pts_reorder_error[i];
976  diff = FFMAX(diff, st->pts_reorder_error[i]);
977  st->pts_reorder_error[i] = diff;
978  st->pts_reorder_error_count[i]++;
979  if (st->pts_reorder_error_count[i] > 250) {
980  st->pts_reorder_error[i] >>= 1;
981  st->pts_reorder_error_count[i] >>= 1;
982  }
983  }
984  }
985  }
986  }
987 
988  if (dts == AV_NOPTS_VALUE)
989  dts = pts_buffer[0];
990 
991  return dts;
992 }
993 
994 /**
995  * Updates the dts of packets of a stream in pkt_buffer, by re-ordering the pts
996  * of the packets in a window.
997  */
998 static void update_dts_from_pts(AVFormatContext *s, int stream_index,
999  AVPacketList *pkt_buffer)
1000 {
1001  AVStream *st = s->streams[stream_index];
1002  int delay = st->internal->avctx->has_b_frames;
1003  int i;
1004 
1005  int64_t pts_buffer[MAX_REORDER_DELAY+1];
1006 
1007  for (i = 0; i<MAX_REORDER_DELAY+1; i++)
1008  pts_buffer[i] = AV_NOPTS_VALUE;
1009 
1010  for (; pkt_buffer; pkt_buffer = get_next_pkt(s, st, pkt_buffer)) {
1011  if (pkt_buffer->pkt.stream_index != stream_index)
1012  continue;
1013 
1014  if (pkt_buffer->pkt.pts != AV_NOPTS_VALUE && delay <= MAX_REORDER_DELAY) {
1015  pts_buffer[0] = pkt_buffer->pkt.pts;
1016  for (i = 0; i<delay && pts_buffer[i] > pts_buffer[i + 1]; i++)
1017  FFSWAP(int64_t, pts_buffer[i], pts_buffer[i + 1]);
1018 
1019  pkt_buffer->pkt.dts = select_from_pts_buffer(st, pts_buffer, pkt_buffer->pkt.dts);
1020  }
1021  }
1022 }
1023 
1024 static void update_initial_timestamps(AVFormatContext *s, int stream_index,
1025  int64_t dts, int64_t pts, AVPacket *pkt)
1026 {
1027  AVStream *st = s->streams[stream_index];
1029  AVPacketList *pktl_it;
1030 
1031  uint64_t shift;
1032 
1033  if (st->first_dts != AV_NOPTS_VALUE ||
1034  dts == AV_NOPTS_VALUE ||
1035  st->cur_dts == AV_NOPTS_VALUE ||
1036  is_relative(dts))
1037  return;
1038 
1039  st->first_dts = dts - (st->cur_dts - RELATIVE_TS_BASE);
1040  st->cur_dts = dts;
1041  shift = (uint64_t)st->first_dts - RELATIVE_TS_BASE;
1042 
1043  if (is_relative(pts))
1044  pts += shift;
1045 
1046  for (pktl_it = pktl; pktl_it; pktl_it = get_next_pkt(s, st, pktl_it)) {
1047  if (pktl_it->pkt.stream_index != stream_index)
1048  continue;
1049  if (is_relative(pktl_it->pkt.pts))
1050  pktl_it->pkt.pts += shift;
1051 
1052  if (is_relative(pktl_it->pkt.dts))
1053  pktl_it->pkt.dts += shift;
1054 
1055  if (st->start_time == AV_NOPTS_VALUE && pktl_it->pkt.pts != AV_NOPTS_VALUE) {
1056  st->start_time = pktl_it->pkt.pts;
1059  }
1060  }
1061 
1063  update_dts_from_pts(s, stream_index, pktl);
1064  }
1065 
1066  if (st->start_time == AV_NOPTS_VALUE) {
1067  st->start_time = pts;
1068  if (st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO && st->codecpar->sample_rate)
1069  st->start_time += av_rescale_q(st->skip_samples, (AVRational){1, st->codecpar->sample_rate}, st->time_base);
1070  }
1071 }
1072 
1073 static void update_initial_durations(AVFormatContext *s, AVStream *st,
1074  int stream_index, int duration)
1075 {
1077  int64_t cur_dts = RELATIVE_TS_BASE;
1078 
1079  if (st->first_dts != AV_NOPTS_VALUE) {
1081  return;
1083  cur_dts = st->first_dts;
1084  for (; pktl; pktl = get_next_pkt(s, st, pktl)) {
1085  if (pktl->pkt.stream_index == stream_index) {
1086  if (pktl->pkt.pts != pktl->pkt.dts ||
1087  pktl->pkt.dts != AV_NOPTS_VALUE ||
1088  pktl->pkt.duration)
1089  break;
1090  cur_dts -= duration;
1091  }
1092  }
1093  if (pktl && pktl->pkt.dts != st->first_dts) {
1094  av_log(s, AV_LOG_DEBUG, "first_dts %s not matching first dts %s (pts %s, duration %"PRId64") in the queue\n",
1095  av_ts2str(st->first_dts), av_ts2str(pktl->pkt.dts), av_ts2str(pktl->pkt.pts), pktl->pkt.duration);
1096  return;
1097  }
1098  if (!pktl) {
1099  av_log(s, AV_LOG_DEBUG, "first_dts %s but no packet with dts in the queue\n", av_ts2str(st->first_dts));
1100  return;
1101  }
1103  st->first_dts = cur_dts;
1104  } else if (st->cur_dts != RELATIVE_TS_BASE)
1105  return;
1106 
1107  for (; pktl; pktl = get_next_pkt(s, st, pktl)) {
1108  if (pktl->pkt.stream_index != stream_index)
1109  continue;
1110  if (pktl->pkt.pts == pktl->pkt.dts &&
1111  (pktl->pkt.dts == AV_NOPTS_VALUE || pktl->pkt.dts == st->first_dts) &&
1112  !pktl->pkt.duration) {
1113  pktl->pkt.dts = cur_dts;
1114  if (!st->internal->avctx->has_b_frames)
1115  pktl->pkt.pts = cur_dts;
1116 // if (st->codecpar->codec_type != AVMEDIA_TYPE_AUDIO)
1117  pktl->pkt.duration = duration;
1118  } else
1119  break;
1120  cur_dts = pktl->pkt.dts + pktl->pkt.duration;
1121  }
1122  if (!pktl)
1123  st->cur_dts = cur_dts;
1124 }
1125 
1126 static void compute_pkt_fields(AVFormatContext *s, AVStream *st,
1128  int64_t next_dts, int64_t next_pts)
1129 {
1130  int num, den, presentation_delayed, delay, i;
1131  int64_t offset;
1133  int onein_oneout = st->codecpar->codec_id != AV_CODEC_ID_H264 &&
1135 
1136  if (s->flags & AVFMT_FLAG_NOFILLIN)
1137  return;
1138 
1139  if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO && pkt->dts != AV_NOPTS_VALUE) {
1140  if (pkt->dts == pkt->pts && st->last_dts_for_order_check != AV_NOPTS_VALUE) {
1141  if (st->last_dts_for_order_check <= pkt->dts) {
1142  st->dts_ordered++;
1143  } else {
1145  "DTS %"PRIi64" < %"PRIi64" out of order\n",
1146  pkt->dts,
1148  st->dts_misordered++;
1149  }
1150  if (st->dts_ordered + st->dts_misordered > 250) {
1151  st->dts_ordered >>= 1;
1152  st->dts_misordered >>= 1;
1153  }
1154  }
1155 
1156  st->last_dts_for_order_check = pkt->dts;
1157  if (st->dts_ordered < 8*st->dts_misordered && pkt->dts == pkt->pts)
1158  pkt->dts = AV_NOPTS_VALUE;
1159  }
1160 
1161  if ((s->flags & AVFMT_FLAG_IGNDTS) && pkt->pts != AV_NOPTS_VALUE)
1162  pkt->dts = AV_NOPTS_VALUE;
1163 
1164  if (pc && pc->pict_type == AV_PICTURE_TYPE_B
1165  && !st->internal->avctx->has_b_frames)
1166  //FIXME Set low_delay = 0 when has_b_frames = 1
1167  st->internal->avctx->has_b_frames = 1;
1168 
1169  /* do we have a video B-frame ? */
1170  delay = st->internal->avctx->has_b_frames;
1171  presentation_delayed = 0;
1172 
1173  /* XXX: need has_b_frame, but cannot get it if the codec is
1174  * not initialized */
1175  if (delay &&
1176  pc && pc->pict_type != AV_PICTURE_TYPE_B)
1177  presentation_delayed = 1;
1178 
1179  if (pkt->pts != AV_NOPTS_VALUE && pkt->dts != AV_NOPTS_VALUE &&
1180  st->pts_wrap_bits < 63 &&
1181  pkt->dts - (1LL << (st->pts_wrap_bits - 1)) > pkt->pts) {
1182  if (is_relative(st->cur_dts) || pkt->dts - (1LL<<(st->pts_wrap_bits - 1)) > st->cur_dts) {
1183  pkt->dts -= 1LL << st->pts_wrap_bits;
1184  } else
1185  pkt->pts += 1LL << st->pts_wrap_bits;
1186  }
1187 
1188  /* Some MPEG-2 in MPEG-PS lack dts (issue #171 / input_file.mpg).
1189  * We take the conservative approach and discard both.
1190  * Note: If this is misbehaving for an H.264 file, then possibly
1191  * presentation_delayed is not set correctly. */
1192  if (delay == 1 && pkt->dts == pkt->pts &&
1193  pkt->dts != AV_NOPTS_VALUE && presentation_delayed) {
1194  av_log(s, AV_LOG_DEBUG, "invalid dts/pts combination %"PRIi64"\n", pkt->dts);
1195  if ( strcmp(s->iformat->name, "mov,mp4,m4a,3gp,3g2,mj2")
1196  && strcmp(s->iformat->name, "flv")) // otherwise we discard correct timestamps for vc1-wmapro.ism
1197  pkt->dts = AV_NOPTS_VALUE;
1198  }
1199 
1200  duration = av_mul_q((AVRational) {pkt->duration, 1}, st->time_base);
1201  if (pkt->duration == 0) {
1202  ff_compute_frame_duration(s, &num, &den, st, pc, pkt);
1203  if (den && num) {
1204  duration = (AVRational) {num, den};
1205  pkt->duration = av_rescale_rnd(1,
1206  num * (int64_t) st->time_base.den,
1207  den * (int64_t) st->time_base.num,
1208  AV_ROUND_DOWN);
1209  }
1210  }
1211 
1212  if (pkt->duration != 0 && (s->internal->packet_buffer || s->internal->parse_queue))
1213  update_initial_durations(s, st, pkt->stream_index, pkt->duration);
1214 
1215  /* Correct timestamps with byte offset if demuxers only have timestamps
1216  * on packet boundaries */
1217  if (pc && st->need_parsing == AVSTREAM_PARSE_TIMESTAMPS && pkt->size) {
1218  /* this will estimate bitrate based on this frame's duration and size */
1219  offset = av_rescale(pc->offset, pkt->duration, pkt->size);
1220  if (pkt->pts != AV_NOPTS_VALUE)
1221  pkt->pts += offset;
1222  if (pkt->dts != AV_NOPTS_VALUE)
1223  pkt->dts += offset;
1224  }
1225 
1226  /* This may be redundant, but it should not hurt. */
1227  if (pkt->dts != AV_NOPTS_VALUE &&
1228  pkt->pts != AV_NOPTS_VALUE &&
1229  pkt->pts > pkt->dts)
1230  presentation_delayed = 1;
1231 
1232  if (s->debug & FF_FDEBUG_TS)
1233  av_log(s, AV_LOG_TRACE,
1234  "IN delayed:%d pts:%s, dts:%s cur_dts:%s st:%d pc:%p duration:%"PRId64" delay:%d onein_oneout:%d\n",
1235  presentation_delayed, av_ts2str(pkt->pts), av_ts2str(pkt->dts), av_ts2str(st->cur_dts),
1236  pkt->stream_index, pc, pkt->duration, delay, onein_oneout);
1237 
1238  /* Interpolate PTS and DTS if they are not present. We skip H264
1239  * currently because delay and has_b_frames are not reliably set. */
1240  if ((delay == 0 || (delay == 1 && pc)) &&
1241  onein_oneout) {
1242  if (presentation_delayed) {
1243  /* DTS = decompression timestamp */
1244  /* PTS = presentation timestamp */
1245  if (pkt->dts == AV_NOPTS_VALUE)
1246  pkt->dts = st->last_IP_pts;
1247  update_initial_timestamps(s, pkt->stream_index, pkt->dts, pkt->pts, pkt);
1248  if (pkt->dts == AV_NOPTS_VALUE)
1249  pkt->dts = st->cur_dts;
1250 
1251  /* This is tricky: the dts must be incremented by the duration
1252  * of the frame we are displaying, i.e. the last I- or P-frame. */
1253  if (st->last_IP_duration == 0)
1254  st->last_IP_duration = pkt->duration;
1255  if (pkt->dts != AV_NOPTS_VALUE)
1256  st->cur_dts = pkt->dts + st->last_IP_duration;
1257  if (pkt->dts != AV_NOPTS_VALUE &&
1258  pkt->pts == AV_NOPTS_VALUE &&
1259  st->last_IP_duration > 0 &&
1260  ((uint64_t)st->cur_dts - (uint64_t)next_dts + 1) <= 2 &&
1261  next_dts != next_pts &&
1262  next_pts != AV_NOPTS_VALUE)
1263  pkt->pts = next_dts;
1264 
1265  st->last_IP_duration = pkt->duration;
1266  st->last_IP_pts = pkt->pts;
1267  /* Cannot compute PTS if not present (we can compute it only
1268  * by knowing the future. */
1269  } else if (pkt->pts != AV_NOPTS_VALUE ||
1270  pkt->dts != AV_NOPTS_VALUE ||
1271  pkt->duration ) {
1272 
1273  /* presentation is not delayed : PTS and DTS are the same */
1274  if (pkt->pts == AV_NOPTS_VALUE)
1275  pkt->pts = pkt->dts;
1277  pkt->pts, pkt);
1278  if (pkt->pts == AV_NOPTS_VALUE)
1279  pkt->pts = st->cur_dts;
1280  pkt->dts = pkt->pts;
1281  if (pkt->pts != AV_NOPTS_VALUE)
1282  st->cur_dts = av_add_stable(st->time_base, pkt->pts, duration, 1);
1283  }
1284  }
1285 
1286  if (pkt->pts != AV_NOPTS_VALUE && delay <= MAX_REORDER_DELAY) {
1287  st->pts_buffer[0] = pkt->pts;
1288  for (i = 0; i<delay && st->pts_buffer[i] > st->pts_buffer[i + 1]; i++)
1289  FFSWAP(int64_t, st->pts_buffer[i], st->pts_buffer[i + 1]);
1290 
1292  pkt->dts = select_from_pts_buffer(st, st->pts_buffer, pkt->dts);
1293  }
1294  // We skipped it above so we try here.
1295  if (!onein_oneout)
1296  // This should happen on the first packet
1297  update_initial_timestamps(s, pkt->stream_index, pkt->dts, pkt->pts, pkt);
1298  if (pkt->dts > st->cur_dts)
1299  st->cur_dts = pkt->dts;
1300 
1301  if (s->debug & FF_FDEBUG_TS)
1302  av_log(s, AV_LOG_TRACE, "OUTdelayed:%d/%d pts:%s, dts:%s cur_dts:%s\n",
1303  presentation_delayed, delay, av_ts2str(pkt->pts), av_ts2str(pkt->dts), av_ts2str(st->cur_dts));
1304 
1305  /* update flags */
1306  if (is_intra_only(st->codecpar->codec_id))
1307  pkt->flags |= AV_PKT_FLAG_KEY;
1308 #if FF_API_CONVERGENCE_DURATION
1310  if (pc)
1313 #endif
1314 }
1315 
1316 static void free_packet_buffer(AVPacketList **pkt_buf, AVPacketList **pkt_buf_end)
1317 {
1318  while (*pkt_buf) {
1319  AVPacketList *pktl = *pkt_buf;
1320  *pkt_buf = pktl->next;
1321  av_packet_unref(&pktl->pkt);
1322  av_freep(&pktl);
1323  }
1324  *pkt_buf_end = NULL;
1325 }
1326 
1327 /**
1328  * Parse a packet, add all split parts to parse_queue.
1329  *
1330  * @param pkt Packet to parse, NULL when flushing the parser at end of stream.
1331  */
1332 static int parse_packet(AVFormatContext *s, AVPacket *pkt, int stream_index)
1333 {
1334  AVPacket out_pkt = { 0 }, flush_pkt = { 0 };
1335  AVStream *st = s->streams[stream_index];
1336  uint8_t *data = pkt ? pkt->data : NULL;
1337  int size = pkt ? pkt->size : 0;
1338  int ret = 0, got_output = 0;
1339 
1340  if (!pkt) {
1342  pkt = &flush_pkt;
1343  got_output = 1;
1344  } else if (!size && st->parser->flags & PARSER_FLAG_COMPLETE_FRAMES) {
1345  // preserve 0-size sync packets
1347  }
1348 
1349  while (size > 0 || (pkt == &flush_pkt && got_output)) {
1350  int len;
1351  int64_t next_pts = pkt->pts;
1352  int64_t next_dts = pkt->dts;
1353 
1354  av_init_packet(&out_pkt);
1355  len = av_parser_parse2(st->parser, st->internal->avctx,
1356  &out_pkt.data, &out_pkt.size, data, size,
1357  pkt->pts, pkt->dts, pkt->pos);
1358 
1359  pkt->pts = pkt->dts = AV_NOPTS_VALUE;
1360  pkt->pos = -1;
1361  /* increment read pointer */
1362  data += len;
1363  size -= len;
1364 
1365  got_output = !!out_pkt.size;
1366 
1367  if (!out_pkt.size)
1368  continue;
1369 
1370  if (pkt->side_data) {
1371  out_pkt.side_data = pkt->side_data;
1372  out_pkt.side_data_elems = pkt->side_data_elems;
1373  pkt->side_data = NULL;
1374  pkt->side_data_elems = 0;
1375  }
1376 
1377  /* set the duration */
1378  out_pkt.duration = (st->parser->flags & PARSER_FLAG_COMPLETE_FRAMES) ? pkt->duration : 0;
1380  if (st->internal->avctx->sample_rate > 0) {
1381  out_pkt.duration =
1383  (AVRational) { 1, st->internal->avctx->sample_rate },
1384  st->time_base,
1385  AV_ROUND_DOWN);
1386  }
1387  }
1388 
1389  out_pkt.stream_index = st->index;
1390  out_pkt.pts = st->parser->pts;
1391  out_pkt.dts = st->parser->dts;
1392  out_pkt.pos = st->parser->pos;
1393 
1395  out_pkt.pos = st->parser->frame_offset;
1396 
1397  if (st->parser->key_frame == 1 ||
1398  (st->parser->key_frame == -1 &&
1400  out_pkt.flags |= AV_PKT_FLAG_KEY;
1401 
1402  if (st->parser->key_frame == -1 && st->parser->pict_type ==AV_PICTURE_TYPE_NONE && (pkt->flags&AV_PKT_FLAG_KEY))
1403  out_pkt.flags |= AV_PKT_FLAG_KEY;
1404 
1405  compute_pkt_fields(s, st, st->parser, &out_pkt, next_dts, next_pts);
1406 
1407  ret = add_to_pktbuf(&s->internal->parse_queue, &out_pkt,
1408  &s->internal->parse_queue_end, 1);
1409  av_packet_unref(&out_pkt);
1410  if (ret < 0)
1411  goto fail;
1412  }
1413 
1414  /* end of the stream => close and free the parser */
1415  if (pkt == &flush_pkt) {
1416  av_parser_close(st->parser);
1417  st->parser = NULL;
1418  }
1419 
1420 fail:
1422  return ret;
1423 }
1424 
1425 static int read_from_packet_buffer(AVPacketList **pkt_buffer,
1426  AVPacketList **pkt_buffer_end,
1427  AVPacket *pkt)
1428 {
1429  AVPacketList *pktl;
1430  av_assert0(*pkt_buffer);
1431  pktl = *pkt_buffer;
1432  *pkt = pktl->pkt;
1433  *pkt_buffer = pktl->next;
1434  if (!pktl->next)
1435  *pkt_buffer_end = NULL;
1436  av_freep(&pktl);
1437  return 0;
1438 }
1439 
1440 static int64_t ts_to_samples(AVStream *st, int64_t ts)
1441 {
1442  return av_rescale(ts, st->time_base.num * st->codecpar->sample_rate, st->time_base.den);
1443 }
1444 
1445 static int read_frame_internal(AVFormatContext *s, AVPacket *pkt)
1446 {
1447  int ret = 0, i, got_packet = 0;
1448  AVDictionary *metadata = NULL;
1449 
1450  av_init_packet(pkt);
1451 
1452  while (!got_packet && !s->internal->parse_queue) {
1453  AVStream *st;
1454  AVPacket cur_pkt;
1455 
1456  /* read next packet */
1457  ret = ff_read_packet(s, &cur_pkt);
1458  if (ret < 0) {
1459  if (ret == AVERROR(EAGAIN))
1460  return ret;
1461  /* flush the parsers */
1462  for (i = 0; i < s->nb_streams; i++) {
1463  st = s->streams[i];
1464  if (st->parser && st->need_parsing)
1465  parse_packet(s, NULL, st->index);
1466  }
1467  /* all remaining packets are now in parse_queue =>
1468  * really terminate parsing */
1469  break;
1470  }
1471  ret = 0;
1472  st = s->streams[cur_pkt.stream_index];
1473 
1474  /* update context if required */
1475  if (st->internal->need_context_update) {
1476  if (avcodec_is_open(st->internal->avctx)) {
1477  av_log(s, AV_LOG_DEBUG, "Demuxer context update while decoder is open, closing and trying to re-open\n");
1479  st->info->found_decoder = 0;
1480  }
1481 
1483  if (ret < 0)
1484  return ret;
1485 
1486  st->internal->need_context_update = 0;
1487  }
1488 
1489  if (cur_pkt.pts != AV_NOPTS_VALUE &&
1490  cur_pkt.dts != AV_NOPTS_VALUE &&
1491  cur_pkt.pts < cur_pkt.dts) {
1493  "Invalid timestamps stream=%d, pts=%s, dts=%s, size=%d\n",
1494  cur_pkt.stream_index,
1495  av_ts2str(cur_pkt.pts),
1496  av_ts2str(cur_pkt.dts),
1497  cur_pkt.size);
1498  }
1499  if (s->debug & FF_FDEBUG_TS)
1500  av_log(s, AV_LOG_DEBUG,
1501  "ff_read_packet stream=%d, pts=%s, dts=%s, size=%d, duration=%"PRId64", flags=%d\n",
1502  cur_pkt.stream_index,
1503  av_ts2str(cur_pkt.pts),
1504  av_ts2str(cur_pkt.dts),
1505  cur_pkt.size, cur_pkt.duration, cur_pkt.flags);
1506 
1507  if (st->need_parsing && !st->parser && !(s->flags & AVFMT_FLAG_NOPARSE)) {
1508  st->parser = av_parser_init(st->codecpar->codec_id);
1509  if (!st->parser) {
1510  av_log(s, AV_LOG_VERBOSE, "parser not found for codec "
1511  "%s, packets or times may be invalid.\n",
1513  /* no parser available: just output the raw packets */
1515  } else if (st->need_parsing == AVSTREAM_PARSE_HEADERS)
1517  else if (st->need_parsing == AVSTREAM_PARSE_FULL_ONCE)
1518  st->parser->flags |= PARSER_FLAG_ONCE;
1519  else if (st->need_parsing == AVSTREAM_PARSE_FULL_RAW)
1521  }
1522 
1523  if (!st->need_parsing || !st->parser) {
1524  /* no parsing needed: we just output the packet as is */
1525  *pkt = cur_pkt;
1527  if ((s->iformat->flags & AVFMT_GENERIC_INDEX) &&
1528  (pkt->flags & AV_PKT_FLAG_KEY) && pkt->dts != AV_NOPTS_VALUE) {
1529  ff_reduce_index(s, st->index);
1530  av_add_index_entry(st, pkt->pos, pkt->dts,
1531  0, 0, AVINDEX_KEYFRAME);
1532  }
1533  got_packet = 1;
1534  } else if (st->discard < AVDISCARD_ALL) {
1535  if ((ret = parse_packet(s, &cur_pkt, cur_pkt.stream_index)) < 0)
1536  return ret;
1538  st->codecpar->bit_rate = st->internal->avctx->bit_rate;
1539  st->codecpar->channels = st->internal->avctx->channels;
1541  st->codecpar->codec_id = st->internal->avctx->codec_id;
1542  } else {
1543  /* free packet */
1544  av_packet_unref(&cur_pkt);
1545  }
1546  if (pkt->flags & AV_PKT_FLAG_KEY)
1547  st->skip_to_keyframe = 0;
1548  if (st->skip_to_keyframe) {
1549  av_packet_unref(&cur_pkt);
1550  if (got_packet) {
1551  *pkt = cur_pkt;
1552  }
1553  got_packet = 0;
1554  }
1555  }
1556 
1557  if (!got_packet && s->internal->parse_queue)
1559 
1560  if (ret >= 0) {
1561  AVStream *st = s->streams[pkt->stream_index];
1562  int discard_padding = 0;
1563  if (st->first_discard_sample && pkt->pts != AV_NOPTS_VALUE) {
1564  int64_t pts = pkt->pts - (is_relative(pkt->pts) ? RELATIVE_TS_BASE : 0);
1565  int64_t sample = ts_to_samples(st, pts);
1566  int duration = ts_to_samples(st, pkt->duration);
1567  int64_t end_sample = sample + duration;
1568  if (duration > 0 && end_sample >= st->first_discard_sample &&
1569  sample < st->last_discard_sample)
1570  discard_padding = FFMIN(end_sample - st->first_discard_sample, duration);
1571  }
1572  if (st->start_skip_samples && (pkt->pts == 0 || pkt->pts == RELATIVE_TS_BASE))
1573  st->skip_samples = st->start_skip_samples;
1574  if (st->skip_samples || discard_padding) {
1576  if (p) {
1577  AV_WL32(p, st->skip_samples);
1578  AV_WL32(p + 4, discard_padding);
1579  av_log(s, AV_LOG_DEBUG, "demuxer injecting skip %d / discard %d\n", st->skip_samples, discard_padding);
1580  }
1581  st->skip_samples = 0;
1582  }
1583 
1584  if (st->inject_global_side_data) {
1585  for (i = 0; i < st->nb_side_data; i++) {
1586  AVPacketSideData *src_sd = &st->side_data[i];
1587  uint8_t *dst_data;
1588 
1589  if (av_packet_get_side_data(pkt, src_sd->type, NULL))
1590  continue;
1591 
1592  dst_data = av_packet_new_side_data(pkt, src_sd->type, src_sd->size);
1593  if (!dst_data) {
1594  av_log(s, AV_LOG_WARNING, "Could not inject global side data\n");
1595  continue;
1596  }
1597 
1598  memcpy(dst_data, src_sd->data, src_sd->size);
1599  }
1600  st->inject_global_side_data = 0;
1601  }
1602 
1603  if (!(s->flags & AVFMT_FLAG_KEEP_SIDE_DATA))
1605  }
1606 
1607  av_opt_get_dict_val(s, "metadata", AV_OPT_SEARCH_CHILDREN, &metadata);
1608  if (metadata) {
1610  av_dict_copy(&s->metadata, metadata, 0);
1611  av_dict_free(&metadata);
1613  }
1614 
1615 #if FF_API_LAVF_AVCTX
1617 #endif
1618 
1619  if (s->debug & FF_FDEBUG_TS)
1620  av_log(s, AV_LOG_DEBUG,
1621  "read_frame_internal stream=%d, pts=%s, dts=%s, "
1622  "size=%d, duration=%"PRId64", flags=%d\n",
1623  pkt->stream_index,
1624  av_ts2str(pkt->pts),
1625  av_ts2str(pkt->dts),
1626  pkt->size, pkt->duration, pkt->flags);
1627 
1628  return ret;
1629 }
1630 
1631 int av_read_frame(AVFormatContext *s, AVPacket *pkt)
1632 {
1633  const int genpts = s->flags & AVFMT_FLAG_GENPTS;
1634  int eof = 0;
1635  int ret;
1636  AVStream *st;
1637 
1638  if (!genpts) {
1639  ret = s->internal->packet_buffer
1641  &s->internal->packet_buffer_end, pkt)
1642  : read_frame_internal(s, pkt);
1643  if (ret < 0)
1644  return ret;
1645  goto return_packet;
1646  }
1647 
1648  for (;;) {
1649  AVPacketList *pktl = s->internal->packet_buffer;
1650 
1651  if (pktl) {
1652  AVPacket *next_pkt = &pktl->pkt;
1653 
1654  if (next_pkt->dts != AV_NOPTS_VALUE) {
1655  int wrap_bits = s->streams[next_pkt->stream_index]->pts_wrap_bits;
1656  // last dts seen for this stream. if any of packets following
1657  // current one had no dts, we will set this to AV_NOPTS_VALUE.
1658  int64_t last_dts = next_pkt->dts;
1659  while (pktl && next_pkt->pts == AV_NOPTS_VALUE) {
1660  if (pktl->pkt.stream_index == next_pkt->stream_index &&
1661  (av_compare_mod(next_pkt->dts, pktl->pkt.dts, 2LL << (wrap_bits - 1)) < 0)) {
1662  if (av_compare_mod(pktl->pkt.pts, pktl->pkt.dts, 2LL << (wrap_bits - 1))) {
1663  // not B-frame
1664  next_pkt->pts = pktl->pkt.dts;
1665  }
1666  if (last_dts != AV_NOPTS_VALUE) {
1667  // Once last dts was set to AV_NOPTS_VALUE, we don't change it.
1668  last_dts = pktl->pkt.dts;
1669  }
1670  }
1671  pktl = pktl->next;
1672  }
1673  if (eof && next_pkt->pts == AV_NOPTS_VALUE && last_dts != AV_NOPTS_VALUE) {
1674  // Fixing the last reference frame had none pts issue (For MXF etc).
1675  // We only do this when
1676  // 1. eof.
1677  // 2. we are not able to resolve a pts value for current packet.
1678  // 3. the packets for this stream at the end of the files had valid dts.
1679  next_pkt->pts = last_dts + next_pkt->duration;
1680  }
1681  pktl = s->internal->packet_buffer;
1682  }
1683 
1684  /* read packet from packet buffer, if there is data */
1685  st = s->streams[next_pkt->stream_index];
1686  if (!(next_pkt->pts == AV_NOPTS_VALUE && st->discard < AVDISCARD_ALL &&
1687  next_pkt->dts != AV_NOPTS_VALUE && !eof)) {
1689  &s->internal->packet_buffer_end, pkt);
1690  goto return_packet;
1691  }
1692  }
1693 
1694  ret = read_frame_internal(s, pkt);
1695  if (ret < 0) {
1696  if (pktl && ret != AVERROR(EAGAIN)) {
1697  eof = 1;
1698  continue;
1699  } else
1700  return ret;
1701  }
1702 
1703  ret = add_to_pktbuf(&s->internal->packet_buffer, pkt,
1704  &s->internal->packet_buffer_end, 1);
1705  av_packet_unref(pkt);
1706  if (ret < 0)
1707  return ret;
1708  }
1709 
1710 return_packet:
1711 
1712  st = s->streams[pkt->stream_index];
1713  if ((s->iformat->flags & AVFMT_GENERIC_INDEX) && pkt->flags & AV_PKT_FLAG_KEY) {
1714  ff_reduce_index(s, st->index);
1715  av_add_index_entry(st, pkt->pos, pkt->dts, 0, 0, AVINDEX_KEYFRAME);
1716  }
1717 
1718  if (is_relative(pkt->dts))
1719  pkt->dts -= RELATIVE_TS_BASE;
1720  if (is_relative(pkt->pts))
1721  pkt->pts -= RELATIVE_TS_BASE;
1722 
1723  return ret;
1724 }
1725 
1726 /* XXX: suppress the packet queue */
1727 static void flush_packet_queue(AVFormatContext *s)
1728 {
1729  if (!s->internal)
1730  return;
1734 
1736 }
1737 
1738 /*******************************************************/
1739 /* seek support */
1740 
1741 int av_find_default_stream_index(AVFormatContext *s)
1742 {
1743  int i;
1744  AVStream *st;
1745  int best_stream = 0;
1746  int best_score = INT_MIN;
1747 
1748  if (s->nb_streams <= 0)
1749  return -1;
1750  for (i = 0; i < s->nb_streams; i++) {
1751  int score = 0;
1752  st = s->streams[i];
1753  if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) {
1755  score -= 400;
1756  if (st->codecpar->width && st->codecpar->height)
1757  score += 50;
1758  score+= 25;
1759  }
1760  if (st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO) {
1761  if (st->codecpar->sample_rate)
1762  score += 50;
1763  }
1764  if (st->codec_info_nb_frames)
1765  score += 12;
1766 
1767  if (st->discard != AVDISCARD_ALL)
1768  score += 200;
1769 
1770  if (score > best_score) {
1771  best_score = score;
1772  best_stream = i;
1773  }
1774  }
1775  return best_stream;
1776 }
1777 
1778 /** Flush the frame reader. */
1779 void ff_read_frame_flush(AVFormatContext *s)
1780 {
1781  AVStream *st;
1782  int i, j;
1783 
1784  flush_packet_queue(s);
1785 
1786  /* Reset read state for each stream. */
1787  for (i = 0; i < s->nb_streams; i++) {
1788  st = s->streams[i];
1789 
1790  if (st->parser) {
1791  av_parser_close(st->parser);
1792  st->parser = NULL;
1793  }
1796  if (st->first_dts == AV_NOPTS_VALUE)
1797  st->cur_dts = RELATIVE_TS_BASE;
1798  else
1799  /* We set the current DTS to an unspecified origin. */
1800  st->cur_dts = AV_NOPTS_VALUE;
1801 
1803 
1804  for (j = 0; j < MAX_REORDER_DELAY + 1; j++)
1805  st->pts_buffer[j] = AV_NOPTS_VALUE;
1806 
1808  st->inject_global_side_data = 1;
1809 
1810  st->skip_samples = 0;
1811  }
1812 }
1813 
1814 void ff_update_cur_dts(AVFormatContext *s, AVStream *ref_st, int64_t timestamp)
1815 {
1816  int i;
1817 
1818  for (i = 0; i < s->nb_streams; i++) {
1819  AVStream *st = s->streams[i];
1820 
1821  st->cur_dts =
1822  av_rescale(timestamp,
1823  st->time_base.den * (int64_t) ref_st->time_base.num,
1824  st->time_base.num * (int64_t) ref_st->time_base.den);
1825  }
1826 }
1827 
1828 void ff_reduce_index(AVFormatContext *s, int stream_index)
1829 {
1830  AVStream *st = s->streams[stream_index];
1831  unsigned int max_entries = s->max_index_size / sizeof(AVIndexEntry);
1832 
1833  if ((unsigned) st->nb_index_entries >= max_entries) {
1834  int i;
1835  for (i = 0; 2 * i < st->nb_index_entries; i++)
1836  st->index_entries[i] = st->index_entries[2 * i];
1837  st->nb_index_entries = i;
1838  }
1839 }
1840 
1841 int ff_add_index_entry(AVIndexEntry **index_entries,
1842  int *nb_index_entries,
1843  unsigned int *index_entries_allocated_size,
1844  int64_t pos, int64_t timestamp,
1845  int size, int distance, int flags)
1846 {
1847  AVIndexEntry *entries, *ie;
1848  int index;
1849 
1850  if ((unsigned) *nb_index_entries + 1 >= UINT_MAX / sizeof(AVIndexEntry))
1851  return -1;
1852 
1853  if (timestamp == AV_NOPTS_VALUE)
1854  return AVERROR(EINVAL);
1855 
1856  if (size < 0 || size > 0x3FFFFFFF)
1857  return AVERROR(EINVAL);
1858 
1859  if (is_relative(timestamp)) //FIXME this maintains previous behavior but we should shift by the correct offset once known
1860  timestamp -= RELATIVE_TS_BASE;
1861 
1862  entries = av_fast_realloc(*index_entries,
1863  index_entries_allocated_size,
1864  (*nb_index_entries + 1) *
1865  sizeof(AVIndexEntry));
1866  if (!entries)
1867  return -1;
1868 
1869  *index_entries = entries;
1870 
1871  index = ff_index_search_timestamp(*index_entries, *nb_index_entries,
1872  timestamp, AVSEEK_FLAG_ANY);
1873 
1874  if (index < 0) {
1875  index = (*nb_index_entries)++;
1876  ie = &entries[index];
1877  av_assert0(index == 0 || ie[-1].timestamp < timestamp);
1878  } else {
1879  ie = &entries[index];
1880  if (ie->timestamp != timestamp) {
1881  if (ie->timestamp <= timestamp)
1882  return -1;
1883  memmove(entries + index + 1, entries + index,
1884  sizeof(AVIndexEntry) * (*nb_index_entries - index));
1885  (*nb_index_entries)++;
1886  } else if (ie->pos == pos && distance < ie->min_distance)
1887  // do not reduce the distance
1888  distance = ie->min_distance;
1889  }
1890 
1891  ie->pos = pos;
1892  ie->timestamp = timestamp;
1893  ie->min_distance = distance;
1894  ie->size = size;
1895  ie->flags = flags;
1896 
1897  return index;
1898 }
1899 
1900 int av_add_index_entry(AVStream *st, int64_t pos, int64_t timestamp,
1901  int size, int distance, int flags)
1902 {
1903  timestamp = wrap_timestamp(st, timestamp);
1905  &st->index_entries_allocated_size, pos,
1906  timestamp, size, distance, flags);
1907 }
1908 
1909 int ff_index_search_timestamp(const AVIndexEntry *entries, int nb_entries,
1910  int64_t wanted_timestamp, int flags)
1911 {
1912  int a, b, m;
1913  int64_t timestamp;
1914 
1915  a = -1;
1916  b = nb_entries;
1917 
1918  // Optimize appending index entries at the end.
1919  if (b && entries[b - 1].timestamp < wanted_timestamp)
1920  a = b - 1;
1921 
1922  while (b - a > 1) {
1923  m = (a + b) >> 1;
1924  timestamp = entries[m].timestamp;
1925  if (timestamp >= wanted_timestamp)
1926  b = m;
1927  if (timestamp <= wanted_timestamp)
1928  a = m;
1929  }
1930  m = (flags & AVSEEK_FLAG_BACKWARD) ? a : b;
1931 
1932  if (!(flags & AVSEEK_FLAG_ANY))
1933  while (m >= 0 && m < nb_entries &&
1934  !(entries[m].flags & AVINDEX_KEYFRAME))
1935  m += (flags & AVSEEK_FLAG_BACKWARD) ? -1 : 1;
1936 
1937  if (m == nb_entries)
1938  return -1;
1939  return m;
1940 }
1941 
1942 void ff_configure_buffers_for_index(AVFormatContext *s, int64_t time_tolerance)
1943 {
1944  int ist1, ist2;
1945  int64_t pos_delta = 0;
1946  int64_t skip = 0;
1947  //We could use URLProtocol flags here but as many user applications do not use URLProtocols this would be unreliable
1948  const char *proto = avio_find_protocol_name(s->filename);
1949 
1950  if (!proto) {
1951  av_log(s, AV_LOG_INFO,
1952  "Protocol name not provided, cannot determine if input is local or "
1953  "a network protocol, buffers and access patterns cannot be configured "
1954  "optimally without knowing the protocol\n");
1955  }
1956 
1957  if (proto && !(strcmp(proto, "file") && strcmp(proto, "pipe") && strcmp(proto, "cache")))
1958  return;
1959 
1960  for (ist1 = 0; ist1 < s->nb_streams; ist1++) {
1961  AVStream *st1 = s->streams[ist1];
1962  for (ist2 = 0; ist2 < s->nb_streams; ist2++) {
1963  AVStream *st2 = s->streams[ist2];
1964  int i1, i2;
1965 
1966  if (ist1 == ist2)
1967  continue;
1968 
1969  for (i1 = i2 = 0; i1 < st1->nb_index_entries; i1++) {
1970  AVIndexEntry *e1 = &st1->index_entries[i1];
1971  int64_t e1_pts = av_rescale_q(e1->timestamp, st1->time_base, AV_TIME_BASE_Q);
1972 
1973  skip = FFMAX(skip, e1->size);
1974  for (; i2 < st2->nb_index_entries; i2++) {
1975  AVIndexEntry *e2 = &st2->index_entries[i2];
1976  int64_t e2_pts = av_rescale_q(e2->timestamp, st2->time_base, AV_TIME_BASE_Q);
1977  if (e2_pts - e1_pts < time_tolerance)
1978  continue;
1979  pos_delta = FFMAX(pos_delta, e1->pos - e2->pos);
1980  break;
1981  }
1982  }
1983  }
1984  }
1985 
1986  pos_delta *= 2;
1987  /* XXX This could be adjusted depending on protocol*/
1988  if (s->pb->buffer_size < pos_delta && pos_delta < (1<<24)) {
1989  av_log(s, AV_LOG_VERBOSE, "Reconfiguring buffers to size %"PRId64"\n", pos_delta);
1990  ffio_set_buf_size(s->pb, pos_delta);
1991  s->pb->short_seek_threshold = FFMAX(s->pb->short_seek_threshold, pos_delta/2);
1992  }
1993 
1994  if (skip < (1<<23)) {
1996  }
1997 }
1998 
1999 int av_index_search_timestamp(AVStream *st, int64_t wanted_timestamp, int flags)
2000 {
2002  wanted_timestamp, flags);
2003 }
2004 
2005 static int64_t ff_read_timestamp(AVFormatContext *s, int stream_index, int64_t *ppos, int64_t pos_limit,
2006  int64_t (*read_timestamp)(struct AVFormatContext *, int , int64_t *, int64_t ))
2007 {
2008  int64_t ts = read_timestamp(s, stream_index, ppos, pos_limit);
2009  if (stream_index >= 0)
2010  ts = wrap_timestamp(s->streams[stream_index], ts);
2011  return ts;
2012 }
2013 
2014 int ff_seek_frame_binary(AVFormatContext *s, int stream_index,
2015  int64_t target_ts, int flags)
2016 {
2017  AVInputFormat *avif = s->iformat;
2018  int64_t av_uninit(pos_min), av_uninit(pos_max), pos, pos_limit;
2019  int64_t ts_min, ts_max, ts;
2020  int index;
2021  int64_t ret;
2022  AVStream *st;
2023 
2024  if (stream_index < 0)
2025  return -1;
2026 
2027  av_log(s, AV_LOG_TRACE, "read_seek: %d %s\n", stream_index, av_ts2str(target_ts));
2028 
2029  ts_max =
2030  ts_min = AV_NOPTS_VALUE;
2031  pos_limit = -1; // GCC falsely says it may be uninitialized.
2032 
2033  st = s->streams[stream_index];
2034  if (st->index_entries) {
2035  AVIndexEntry *e;
2036 
2037  /* FIXME: Whole function must be checked for non-keyframe entries in
2038  * index case, especially read_timestamp(). */
2039  index = av_index_search_timestamp(st, target_ts,
2040  flags | AVSEEK_FLAG_BACKWARD);
2041  index = FFMAX(index, 0);
2042  e = &st->index_entries[index];
2043 
2044  if (e->timestamp <= target_ts || e->pos == e->min_distance) {
2045  pos_min = e->pos;
2046  ts_min = e->timestamp;
2047  av_log(s, AV_LOG_TRACE, "using cached pos_min=0x%"PRIx64" dts_min=%s\n",
2048  pos_min, av_ts2str(ts_min));
2049  } else {
2050  av_assert1(index == 0);
2051  }
2052 
2053  index = av_index_search_timestamp(st, target_ts,
2054  flags & ~AVSEEK_FLAG_BACKWARD);
2055  av_assert0(index < st->nb_index_entries);
2056  if (index >= 0) {
2057  e = &st->index_entries[index];
2058  av_assert1(e->timestamp >= target_ts);
2059  pos_max = e->pos;
2060  ts_max = e->timestamp;
2061  pos_limit = pos_max - e->min_distance;
2062  av_log(s, AV_LOG_TRACE, "using cached pos_max=0x%"PRIx64" pos_limit=0x%"PRIx64
2063  " dts_max=%s\n", pos_max, pos_limit, av_ts2str(ts_max));
2064  }
2065  }
2066 
2067  pos = ff_gen_search(s, stream_index, target_ts, pos_min, pos_max, pos_limit,
2068  ts_min, ts_max, flags, &ts, avif->read_timestamp);
2069  if (pos < 0)
2070  return -1;
2071 
2072  /* do the seek */
2073  if ((ret = avio_seek(s->pb, pos, SEEK_SET)) < 0)
2074  return ret;
2075 
2077  ff_update_cur_dts(s, st, ts);
2078 
2079  return 0;
2080 }
2081 
2082 int ff_find_last_ts(AVFormatContext *s, int stream_index, int64_t *ts, int64_t *pos,
2083  int64_t (*read_timestamp)(struct AVFormatContext *, int , int64_t *, int64_t ))
2084 {
2085  int64_t step = 1024;
2086  int64_t limit, ts_max;
2087  int64_t filesize = avio_size(s->pb);
2088  int64_t pos_max = filesize - 1;
2089  do {
2090  limit = pos_max;
2091  pos_max = FFMAX(0, (pos_max) - step);
2092  ts_max = ff_read_timestamp(s, stream_index,
2093  &pos_max, limit, read_timestamp);
2094  step += step;
2095  } while (ts_max == AV_NOPTS_VALUE && 2*limit > step);
2096  if (ts_max == AV_NOPTS_VALUE)
2097  return -1;
2098 
2099  for (;;) {
2100  int64_t tmp_pos = pos_max + 1;
2101  int64_t tmp_ts = ff_read_timestamp(s, stream_index,
2102  &tmp_pos, INT64_MAX, read_timestamp);
2103  if (tmp_ts == AV_NOPTS_VALUE)
2104  break;
2105  av_assert0(tmp_pos > pos_max);
2106  ts_max = tmp_ts;
2107  pos_max = tmp_pos;
2108  if (tmp_pos >= filesize)
2109  break;
2110  }
2111 
2112  if (ts)
2113  *ts = ts_max;
2114  if (pos)
2115  *pos = pos_max;
2116 
2117  return 0;
2118 }
2119 
2120 int64_t ff_gen_search(AVFormatContext *s, int stream_index, int64_t target_ts,
2121  int64_t pos_min, int64_t pos_max, int64_t pos_limit,
2122  int64_t ts_min, int64_t ts_max,
2123  int flags, int64_t *ts_ret,
2124  int64_t (*read_timestamp)(struct AVFormatContext *, int,
2125  int64_t *, int64_t))
2126 {
2127  int64_t pos, ts;
2128  int64_t start_pos;
2129  int no_change;
2130  int ret;
2131 
2132  av_log(s, AV_LOG_TRACE, "gen_seek: %d %s\n", stream_index, av_ts2str(target_ts));
2133 
2134  if (ts_min == AV_NOPTS_VALUE) {
2135  pos_min = s->internal->data_offset;
2136  ts_min = ff_read_timestamp(s, stream_index, &pos_min, INT64_MAX, read_timestamp);
2137  if (ts_min == AV_NOPTS_VALUE)
2138  return -1;
2139  }
2140 
2141  if (ts_min >= target_ts) {
2142  *ts_ret = ts_min;
2143  return pos_min;
2144  }
2145 
2146  if (ts_max == AV_NOPTS_VALUE) {
2147  if ((ret = ff_find_last_ts(s, stream_index, &ts_max, &pos_max, read_timestamp)) < 0)
2148  return ret;
2149  pos_limit = pos_max;
2150  }
2151 
2152  if (ts_max <= target_ts) {
2153  *ts_ret = ts_max;
2154  return pos_max;
2155  }
2156 
2157  av_assert0(ts_min < ts_max);
2158 
2159  no_change = 0;
2160  while (pos_min < pos_limit) {
2161  av_log(s, AV_LOG_TRACE,
2162  "pos_min=0x%"PRIx64" pos_max=0x%"PRIx64" dts_min=%s dts_max=%s\n",
2163  pos_min, pos_max, av_ts2str(ts_min), av_ts2str(ts_max));
2164  av_assert0(pos_limit <= pos_max);
2165 
2166  if (no_change == 0) {
2167  int64_t approximate_keyframe_distance = pos_max - pos_limit;
2168  // interpolate position (better than dichotomy)
2169  pos = av_rescale(target_ts - ts_min, pos_max - pos_min,
2170  ts_max - ts_min) +
2171  pos_min - approximate_keyframe_distance;
2172  } else if (no_change == 1) {
2173  // bisection if interpolation did not change min / max pos last time
2174  pos = (pos_min + pos_limit) >> 1;
2175  } else {
2176  /* linear search if bisection failed, can only happen if there
2177  * are very few or no keyframes between min/max */
2178  pos = pos_min;
2179  }
2180  if (pos <= pos_min)
2181  pos = pos_min + 1;
2182  else if (pos > pos_limit)
2183  pos = pos_limit;
2184  start_pos = pos;
2185 
2186  // May pass pos_limit instead of -1.
2187  ts = ff_read_timestamp(s, stream_index, &pos, INT64_MAX, read_timestamp);
2188  if (pos == pos_max)
2189  no_change++;
2190  else
2191  no_change = 0;
2192  av_log(s, AV_LOG_TRACE, "%"PRId64" %"PRId64" %"PRId64" / %s %s %s"
2193  " target:%s limit:%"PRId64" start:%"PRId64" noc:%d\n",
2194  pos_min, pos, pos_max,
2195  av_ts2str(ts_min), av_ts2str(ts), av_ts2str(ts_max), av_ts2str(target_ts),
2196  pos_limit, start_pos, no_change);
2197  if (ts == AV_NOPTS_VALUE) {
2198  av_log(s, AV_LOG_ERROR, "read_timestamp() failed in the middle\n");
2199  return -1;
2200  }
2201  if (target_ts <= ts) {
2202  pos_limit = start_pos - 1;
2203  pos_max = pos;
2204  ts_max = ts;
2205  }
2206  if (target_ts >= ts) {
2207  pos_min = pos;
2208  ts_min = ts;
2209  }
2210  }
2211 
2212  pos = (flags & AVSEEK_FLAG_BACKWARD) ? pos_min : pos_max;
2213  ts = (flags & AVSEEK_FLAG_BACKWARD) ? ts_min : ts_max;
2214 #if 0
2215  pos_min = pos;
2216  ts_min = ff_read_timestamp(s, stream_index, &pos_min, INT64_MAX, read_timestamp);
2217  pos_min++;
2218  ts_max = ff_read_timestamp(s, stream_index, &pos_min, INT64_MAX, read_timestamp);
2219  av_log(s, AV_LOG_TRACE, "pos=0x%"PRIx64" %s<=%s<=%s\n",
2220  pos, av_ts2str(ts_min), av_ts2str(target_ts), av_ts2str(ts_max));
2221 #endif
2222  *ts_ret = ts;
2223  return pos;
2224 }
2225 
2226 static int seek_frame_byte(AVFormatContext *s, int stream_index,
2227  int64_t pos, int flags)
2228 {
2229  int64_t pos_min, pos_max;
2230 
2231  pos_min = s->internal->data_offset;
2232  pos_max = avio_size(s->pb) - 1;
2233 
2234  if (pos < pos_min)
2235  pos = pos_min;
2236  else if (pos > pos_max)
2237  pos = pos_max;
2238 
2239  avio_seek(s->pb, pos, SEEK_SET);
2240 
2241  s->io_repositioned = 1;
2242 
2243  return 0;
2244 }
2245 
2246 static int seek_frame_generic(AVFormatContext *s, int stream_index,
2247  int64_t timestamp, int flags)
2248 {
2249  int index;
2250  int64_t ret;
2251  AVStream *st;
2252  AVIndexEntry *ie;
2253 
2254  st = s->streams[stream_index];
2255 
2256  index = av_index_search_timestamp(st, timestamp, flags);
2257 
2258  if (index < 0 && st->nb_index_entries &&
2259  timestamp < st->index_entries[0].timestamp)
2260  return -1;
2261 
2262  if (index < 0 || index == st->nb_index_entries - 1) {
2263  AVPacket pkt;
2264  int nonkey = 0;
2265 
2266  if (st->nb_index_entries) {
2268  ie = &st->index_entries[st->nb_index_entries - 1];
2269  if ((ret = avio_seek(s->pb, ie->pos, SEEK_SET)) < 0)
2270  return ret;
2271  ff_update_cur_dts(s, st, ie->timestamp);
2272  } else {
2273  if ((ret = avio_seek(s->pb, s->internal->data_offset, SEEK_SET)) < 0)
2274  return ret;
2275  }
2276  for (;;) {
2277  int read_status;
2278  do {
2279  read_status = av_read_frame(s, &pkt);
2280  } while (read_status == AVERROR(EAGAIN));
2281  if (read_status < 0)
2282  break;
2283  if (stream_index == pkt.stream_index && pkt.dts > timestamp) {
2284  if (pkt.flags & AV_PKT_FLAG_KEY) {
2285  av_packet_unref(&pkt);
2286  break;
2287  }
2288  if (nonkey++ > 1000 && st->codecpar->codec_id != AV_CODEC_ID_CDGRAPHICS) {
2289  av_log(s, AV_LOG_ERROR,"seek_frame_generic failed as this stream seems to contain no keyframes after the target timestamp, %d non keyframes found\n", nonkey);
2290  av_packet_unref(&pkt);
2291  break;
2292  }
2293  }
2294  av_packet_unref(&pkt);
2295  }
2296  index = av_index_search_timestamp(st, timestamp, flags);
2297  }
2298  if (index < 0)
2299  return -1;
2300 
2302  if (s->iformat->read_seek)
2303  if (s->iformat->read_seek(s, stream_index, timestamp, flags) >= 0)
2304  return 0;
2305  ie = &st->index_entries[index];
2306  if ((ret = avio_seek(s->pb, ie->pos, SEEK_SET)) < 0)
2307  return ret;
2308  ff_update_cur_dts(s, st, ie->timestamp);
2309 
2310  return 0;
2311 }
2312 
2313 static int seek_frame_internal(AVFormatContext *s, int stream_index,
2314  int64_t timestamp, int flags)
2315 {
2316  int ret;
2317  AVStream *st;
2318 
2319  if (flags & AVSEEK_FLAG_BYTE) {
2320  if (s->iformat->flags & AVFMT_NO_BYTE_SEEK)
2321  return -1;
2323  return seek_frame_byte(s, stream_index, timestamp, flags);
2324  }
2325 
2326  if (stream_index < 0) {
2327  stream_index = av_find_default_stream_index(s);
2328  if (stream_index < 0)
2329  return -1;
2330 
2331  st = s->streams[stream_index];
2332  /* timestamp for default must be expressed in AV_TIME_BASE units */
2333  timestamp = av_rescale(timestamp, st->time_base.den,
2334  AV_TIME_BASE * (int64_t) st->time_base.num);
2335  }
2336 
2337  /* first, we try the format specific seek */
2338  if (s->iformat->read_seek) {
2340  ret = s->iformat->read_seek(s, stream_index, timestamp, flags);
2341  } else
2342  ret = -1;
2343  if (ret >= 0)
2344  return 0;
2345 
2346  if (s->iformat->read_timestamp &&
2347  !(s->iformat->flags & AVFMT_NOBINSEARCH)) {
2349  return ff_seek_frame_binary(s, stream_index, timestamp, flags);
2350  } else if (!(s->iformat->flags & AVFMT_NOGENSEARCH)) {
2352  return seek_frame_generic(s, stream_index, timestamp, flags);
2353  } else
2354  return -1;
2355 }
2356 
2357 int av_seek_frame(AVFormatContext *s, int stream_index,
2358  int64_t timestamp, int flags)
2359 {
2360  int ret;
2361 
2362  if (s->iformat->read_seek2 && !s->iformat->read_seek) {
2363  int64_t min_ts = INT64_MIN, max_ts = INT64_MAX;
2364  if ((flags & AVSEEK_FLAG_BACKWARD))
2365  max_ts = timestamp;
2366  else
2367  min_ts = timestamp;
2368  return avformat_seek_file(s, stream_index, min_ts, timestamp, max_ts,
2369  flags & ~AVSEEK_FLAG_BACKWARD);
2370  }
2371 
2372  ret = seek_frame_internal(s, stream_index, timestamp, flags);
2373 
2374  if (ret >= 0)
2376 
2377  return ret;
2378 }
2379 
2380 int avformat_seek_file(AVFormatContext *s, int stream_index, int64_t min_ts,
2381  int64_t ts, int64_t max_ts, int flags)
2382 {
2383  if (min_ts > ts || max_ts < ts)
2384  return -1;
2385  if (stream_index < -1 || stream_index >= (int)s->nb_streams)
2386  return AVERROR(EINVAL);
2387 
2388  if (s->seek2any>0)
2389  flags |= AVSEEK_FLAG_ANY;
2390  flags &= ~AVSEEK_FLAG_BACKWARD;
2391 
2392  if (s->iformat->read_seek2) {
2393  int ret;
2395 
2396  if (stream_index == -1 && s->nb_streams == 1) {
2397  AVRational time_base = s->streams[0]->time_base;
2398  ts = av_rescale_q(ts, AV_TIME_BASE_Q, time_base);
2399  min_ts = av_rescale_rnd(min_ts, time_base.den,
2400  time_base.num * (int64_t)AV_TIME_BASE,
2402  max_ts = av_rescale_rnd(max_ts, time_base.den,
2403  time_base.num * (int64_t)AV_TIME_BASE,
2405  }
2406 
2407  ret = s->iformat->read_seek2(s, stream_index, min_ts,
2408  ts, max_ts, flags);
2409 
2410  if (ret >= 0)
2412  return ret;
2413  }
2414 
2415  if (s->iformat->read_timestamp) {
2416  // try to seek via read_timestamp()
2417  }
2418 
2419  // Fall back on old API if new is not implemented but old is.
2420  // Note the old API has somewhat different semantics.
2421  if (s->iformat->read_seek || 1) {
2422  int dir = (ts - (uint64_t)min_ts > (uint64_t)max_ts - ts ? AVSEEK_FLAG_BACKWARD : 0);
2423  int ret = av_seek_frame(s, stream_index, ts, flags | dir);
2424  if (ret<0 && ts != min_ts && max_ts != ts) {
2425  ret = av_seek_frame(s, stream_index, dir ? max_ts : min_ts, flags | dir);
2426  if (ret >= 0)
2427  ret = av_seek_frame(s, stream_index, ts, flags | (dir^AVSEEK_FLAG_BACKWARD));
2428  }
2429  return ret;
2430  }
2431 
2432  // try some generic seek like seek_frame_generic() but with new ts semantics
2433  return -1; //unreachable
2434 }
2435 
2436 int avformat_flush(AVFormatContext *s)
2437 {
2439  return 0;
2440 }
2441 
2442 /*******************************************************/
2443 
2444 /**
2445  * Return TRUE if the stream has accurate duration in any stream.
2446  *
2447  * @return TRUE if the stream has accurate duration for at least one component.
2448  */
2449 static int has_duration(AVFormatContext *ic)
2450 {
2451  int i;
2452  AVStream *st;
2453 
2454  for (i = 0; i < ic->nb_streams; i++) {
2455  st = ic->streams[i];
2456  if (st->duration != AV_NOPTS_VALUE)
2457  return 1;
2458  }
2459  if (ic->duration != AV_NOPTS_VALUE)
2460  return 1;
2461  return 0;
2462 }
2463 
2464 /**
2465  * Estimate the stream timings from the one of each components.
2466  *
2467  * Also computes the global bitrate if possible.
2468  */
2469 static void update_stream_timings(AVFormatContext *ic)
2470 {
2471  int64_t start_time, start_time1, start_time_text, end_time, end_time1;
2472  int64_t duration, duration1, filesize;
2473  int i;
2474  AVStream *st;
2475  AVProgram *p;
2476 
2477  start_time = INT64_MAX;
2478  start_time_text = INT64_MAX;
2479  end_time = INT64_MIN;
2480  duration = INT64_MIN;
2481  for (i = 0; i < ic->nb_streams; i++) {
2482  st = ic->streams[i];
2483  if (st->start_time != AV_NOPTS_VALUE && st->time_base.den) {
2484  start_time1 = av_rescale_q(st->start_time, st->time_base,
2485  AV_TIME_BASE_Q);
2487  if (start_time1 < start_time_text)
2488  start_time_text = start_time1;
2489  } else
2490  start_time = FFMIN(start_time, start_time1);
2491  end_time1 = av_rescale_q_rnd(st->duration, st->time_base,
2494  if (end_time1 != AV_NOPTS_VALUE && start_time1 <= INT64_MAX - end_time1) {
2495  end_time1 += start_time1;
2496  end_time = FFMAX(end_time, end_time1);
2497  }
2498  for (p = NULL; (p = av_find_program_from_stream(ic, p, i)); ) {
2499  if (p->start_time == AV_NOPTS_VALUE || p->start_time > start_time1)
2500  p->start_time = start_time1;
2501  if (p->end_time < end_time1)
2502  p->end_time = end_time1;
2503  }
2504  }
2505  if (st->duration != AV_NOPTS_VALUE) {
2506  duration1 = av_rescale_q(st->duration, st->time_base,
2507  AV_TIME_BASE_Q);
2508  duration = FFMAX(duration, duration1);
2509  }
2510  }
2511  if (start_time == INT64_MAX || (start_time > start_time_text && start_time - start_time_text < AV_TIME_BASE))
2512  start_time = start_time_text;
2513  else if (start_time > start_time_text)
2514  av_log(ic, AV_LOG_VERBOSE, "Ignoring outlier non primary stream starttime %f\n", start_time_text / (float)AV_TIME_BASE);
2515 
2516  if (start_time != INT64_MAX) {
2517  ic->start_time = start_time;
2518  if (end_time != INT64_MIN) {
2519  if (ic->nb_programs) {
2520  for (i = 0; i < ic->nb_programs; i++) {
2521  p = ic->programs[i];
2522  if (p->start_time != AV_NOPTS_VALUE && p->end_time > p->start_time)
2523  duration = FFMAX(duration, p->end_time - p->start_time);
2524  }
2525  } else
2526  duration = FFMAX(duration, end_time - start_time);
2527  }
2528  }
2529  if (duration != INT64_MIN && duration > 0 && ic->duration == AV_NOPTS_VALUE) {
2530  ic->duration = duration;
2531  }
2532  if (ic->pb && (filesize = avio_size(ic->pb)) > 0 && ic->duration > 0) {
2533  /* compute the bitrate */
2534  double bitrate = (double) filesize * 8.0 * AV_TIME_BASE /
2535  (double) ic->duration;
2536  if (bitrate >= 0 && bitrate <= INT64_MAX)
2537  ic->bit_rate = bitrate;
2538  }
2539 }
2540 
2541 static void fill_all_stream_timings(AVFormatContext *ic)
2542 {
2543  int i;
2544  AVStream *st;
2545 
2547  for (i = 0; i < ic->nb_streams; i++) {
2548  st = ic->streams[i];
2549  if (st->start_time == AV_NOPTS_VALUE) {
2550  if (ic->start_time != AV_NOPTS_VALUE)
2552  st->time_base);
2553  if (ic->duration != AV_NOPTS_VALUE)
2555  st->time_base);
2556  }
2557  }
2558 }
2559 
2560 static void estimate_timings_from_bit_rate(AVFormatContext *ic)
2561 {
2562  int64_t filesize, duration;
2563  int i, show_warning = 0;
2564  AVStream *st;
2565 
2566  /* if bit_rate is already set, we believe it */
2567  if (ic->bit_rate <= 0) {
2568  int64_t bit_rate = 0;
2569  for (i = 0; i < ic->nb_streams; i++) {
2570  st = ic->streams[i];
2571  if (st->codecpar->bit_rate <= 0 && st->internal->avctx->bit_rate > 0)
2572  st->codecpar->bit_rate = st->internal->avctx->bit_rate;
2573  if (st->codecpar->bit_rate > 0) {
2574  if (INT64_MAX - st->codecpar->bit_rate < bit_rate) {
2575  bit_rate = 0;
2576  break;
2577  }
2578  bit_rate += st->codecpar->bit_rate;
2579  } else if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO && st->codec_info_nb_frames > 1) {
2580  // If we have a videostream with packets but without a bitrate
2581  // then consider the sum not known
2582  bit_rate = 0;
2583  break;
2584  }
2585  }
2586  ic->bit_rate = bit_rate;
2587  }
2588 
2589  /* if duration is already set, we believe it */
2590  if (ic->duration == AV_NOPTS_VALUE &&
2591  ic->bit_rate != 0) {
2592  filesize = ic->pb ? avio_size(ic->pb) : 0;
2593  if (filesize > ic->internal->data_offset) {
2594  filesize -= ic->internal->data_offset;
2595  for (i = 0; i < ic->nb_streams; i++) {
2596  st = ic->streams[i];
2597  if ( st->time_base.num <= INT64_MAX / ic->bit_rate
2598  && st->duration == AV_NOPTS_VALUE) {
2599  duration = av_rescale(8 * filesize, st->time_base.den,
2600  ic->bit_rate *
2601  (int64_t) st->time_base.num);
2602  st->duration = duration;
2603  show_warning = 1;
2604  }
2605  }
2606  }
2607  }
2608  if (show_warning)
2609  av_log(ic, AV_LOG_WARNING,
2610  "Estimating duration from bitrate, this may be inaccurate\n");
2611 }
2612 
2613 #define DURATION_MAX_READ_SIZE 250000LL
2614 #define DURATION_MAX_RETRY 6
2615 
2616 /* only usable for MPEG-PS streams */
2617 static void estimate_timings_from_pts(AVFormatContext *ic, int64_t old_offset)
2618 {
2619  AVPacket pkt1, *pkt = &pkt1;
2620  AVStream *st;
2621  int num, den, read_size, i, ret;
2622  int found_duration = 0;
2623  int is_end;
2624  int64_t filesize, offset, duration;
2625  int retry = 0;
2626 
2627  /* flush packet queue */
2628  flush_packet_queue(ic);
2629 
2630  for (i = 0; i < ic->nb_streams; i++) {
2631  st = ic->streams[i];
2632  if (st->start_time == AV_NOPTS_VALUE &&
2633  st->first_dts == AV_NOPTS_VALUE &&
2635  av_log(ic, AV_LOG_WARNING,
2636  "start time for stream %d is not set in estimate_timings_from_pts\n", i);
2637 
2638  if (st->parser) {
2639  av_parser_close(st->parser);
2640  st->parser = NULL;
2641  }
2642  }
2643 
2644  av_opt_set(ic, "skip_changes", "1", AV_OPT_SEARCH_CHILDREN);
2645  /* estimate the end time (duration) */
2646  /* XXX: may need to support wrapping */
2647  filesize = ic->pb ? avio_size(ic->pb) : 0;
2648  do {
2649  is_end = found_duration;
2650  offset = filesize - (DURATION_MAX_READ_SIZE << retry);
2651  if (offset < 0)
2652  offset = 0;
2653 
2654  avio_seek(ic->pb, offset, SEEK_SET);
2655  read_size = 0;
2656  for (;;) {
2657  if (read_size >= DURATION_MAX_READ_SIZE << (FFMAX(retry - 1, 0)))
2658  break;
2659 
2660  do {
2661  ret = ff_read_packet(ic, pkt);
2662  } while (ret == AVERROR(EAGAIN));
2663  if (ret != 0)
2664  break;
2665  read_size += pkt->size;
2666  st = ic->streams[pkt->stream_index];
2667  if (pkt->pts != AV_NOPTS_VALUE &&
2668  (st->start_time != AV_NOPTS_VALUE ||
2669  st->first_dts != AV_NOPTS_VALUE)) {
2670  if (pkt->duration == 0) {
2671  ff_compute_frame_duration(ic, &num, &den, st, st->parser, pkt);
2672  if (den && num) {
2673  pkt->duration = av_rescale_rnd(1,
2674  num * (int64_t) st->time_base.den,
2675  den * (int64_t) st->time_base.num,
2676  AV_ROUND_DOWN);
2677  }
2678  }
2679  duration = pkt->pts + pkt->duration;
2680  found_duration = 1;
2681  if (st->start_time != AV_NOPTS_VALUE)
2682  duration -= st->start_time;
2683  else
2684  duration -= st->first_dts;
2685  if (duration > 0) {
2686  if (st->duration == AV_NOPTS_VALUE || st->info->last_duration<= 0 ||
2687  (st->duration < duration && FFABS(duration - st->info->last_duration) < 60LL*st->time_base.den / st->time_base.num))
2688  st->duration = duration;
2689  st->info->last_duration = duration;
2690  }
2691  }
2692  av_packet_unref(pkt);
2693  }
2694 
2695  /* check if all audio/video streams have valid duration */
2696  if (!is_end) {
2697  is_end = 1;
2698  for (i = 0; i < ic->nb_streams; i++) {
2699  st = ic->streams[i];
2700  switch (st->codecpar->codec_type) {
2701  case AVMEDIA_TYPE_VIDEO:
2702  case AVMEDIA_TYPE_AUDIO:
2703  if (st->duration == AV_NOPTS_VALUE)
2704  is_end = 0;
2705  }
2706  }
2707  }
2708  } while (!is_end &&
2709  offset &&
2710  ++retry <= DURATION_MAX_RETRY);
2711 
2712  av_opt_set(ic, "skip_changes", "0", AV_OPT_SEARCH_CHILDREN);
2713 
2714  /* warn about audio/video streams which duration could not be estimated */
2715  for (i = 0; i < ic->nb_streams; i++) {
2716  st = ic->streams[i];
2717  if (st->duration == AV_NOPTS_VALUE) {
2718  switch (st->codecpar->codec_type) {
2719  case AVMEDIA_TYPE_VIDEO:
2720  case AVMEDIA_TYPE_AUDIO:
2721  if (st->start_time != AV_NOPTS_VALUE || st->first_dts != AV_NOPTS_VALUE) {
2722  av_log(ic, AV_LOG_DEBUG, "stream %d : no PTS found at end of file, duration not set\n", i);
2723  } else
2724  av_log(ic, AV_LOG_DEBUG, "stream %d : no TS found at start of file, duration not set\n", i);
2725  }
2726  }
2727  }
2729 
2730  avio_seek(ic->pb, old_offset, SEEK_SET);
2731  for (i = 0; i < ic->nb_streams; i++) {
2732  int j;
2733 
2734  st = ic->streams[i];
2735  st->cur_dts = st->first_dts;
2738  for (j = 0; j < MAX_REORDER_DELAY + 1; j++)
2739  st->pts_buffer[j] = AV_NOPTS_VALUE;
2740  }
2741 }
2742 
2743 static void estimate_timings(AVFormatContext *ic, int64_t old_offset)
2744 {
2745  int64_t file_size;
2746 
2747  /* get the file size, if possible */
2748  if (ic->iformat->flags & AVFMT_NOFILE) {
2749  file_size = 0;
2750  } else {
2751  file_size = avio_size(ic->pb);
2752  file_size = FFMAX(0, file_size);
2753  }
2754 
2755  if ((!strcmp(ic->iformat->name, "mpeg") ||
2756  !strcmp(ic->iformat->name, "mpegts")) &&
2757  file_size && ic->pb->seekable) {
2758  /* get accurate estimate from the PTSes */
2759  estimate_timings_from_pts(ic, old_offset);
2761  } else if (has_duration(ic)) {
2762  /* at least one component has timings - we use them for all
2763  * the components */
2766  } else {
2767  /* less precise: use bitrate info */
2770  }
2772 
2773  {
2774  int i;
2775  AVStream av_unused *st;
2776  for (i = 0; i < ic->nb_streams; i++) {
2777  st = ic->streams[i];
2778  av_log(ic, AV_LOG_TRACE, "stream %d: start_time: %0.3f duration: %0.3f\n", i,
2779  (double) st->start_time * av_q2d(st->time_base),
2780  (double) st->duration * av_q2d(st->time_base));
2781  }
2782  av_log(ic, AV_LOG_TRACE,
2783  "format: start_time: %0.3f duration: %0.3f bitrate=%"PRId64" kb/s\n",
2784  (double) ic->start_time / AV_TIME_BASE,
2785  (double) ic->duration / AV_TIME_BASE,
2786  (int64_t)ic->bit_rate / 1000);
2787  }
2788 }
2789 
2790 static int has_codec_parameters(AVStream *st, const char **errmsg_ptr)
2791 {
2792  AVCodecContext *avctx = st->internal->avctx;
2793 
2794 #define FAIL(errmsg) do { \
2795  if (errmsg_ptr) \
2796  *errmsg_ptr = errmsg; \
2797  return 0; \
2798  } while (0)
2799 
2800  if ( avctx->codec_id == AV_CODEC_ID_NONE
2801  && avctx->codec_type != AVMEDIA_TYPE_DATA)
2802  FAIL("unknown codec");
2803  switch (avctx->codec_type) {
2804  case AVMEDIA_TYPE_AUDIO:
2805  if (!avctx->frame_size && determinable_frame_size(avctx))
2806  FAIL("unspecified frame size");
2807  if (st->info->found_decoder >= 0 &&
2808  avctx->sample_fmt == AV_SAMPLE_FMT_NONE)
2809  FAIL("unspecified sample format");
2810  if (!avctx->sample_rate)
2811  FAIL("unspecified sample rate");
2812  if (!avctx->channels)
2813  FAIL("unspecified number of channels");
2814  if (st->info->found_decoder >= 0 && !st->nb_decoded_frames && avctx->codec_id == AV_CODEC_ID_DTS)
2815  FAIL("no decodable DTS frames");
2816  break;
2817  case AVMEDIA_TYPE_VIDEO:
2818  if (!avctx->width)
2819  FAIL("unspecified size");
2820  if (st->info->found_decoder >= 0 && avctx->pix_fmt == AV_PIX_FMT_NONE)
2821  FAIL("unspecified pixel format");
2824  FAIL("no frame in rv30/40 and no sar");
2825  break;
2826  case AVMEDIA_TYPE_SUBTITLE:
2827  if (avctx->codec_id == AV_CODEC_ID_HDMV_PGS_SUBTITLE && !avctx->width)
2828  FAIL("unspecified size");
2829  break;
2830  case AVMEDIA_TYPE_DATA:
2831  if (avctx->codec_id == AV_CODEC_ID_NONE) return 1;
2832  }
2833 
2834  return 1;
2835 }
2836 
2837 /* returns 1 or 0 if or if not decoded data was returned, or a negative error */
2838 static int try_decode_frame(AVFormatContext *s, AVStream *st, AVPacket *avpkt,
2840 {
2841  AVCodecContext *avctx = st->internal->avctx;
2842  const AVCodec *codec;
2843  int got_picture = 1, ret = 0;
2845  AVSubtitle subtitle;
2846  AVPacket pkt = *avpkt;
2847  int do_skip_frame = 0;
2848  enum AVDiscard skip_frame;
2849 
2850  if (!frame)
2851  return AVERROR(ENOMEM);
2852 
2853  if (!avcodec_is_open(avctx) &&
2854  st->info->found_decoder <= 0 &&
2855  (st->codecpar->codec_id != -st->info->found_decoder || !st->codecpar->codec_id)) {
2856  AVDictionary *thread_opt = NULL;
2857 
2858  codec = find_decoder(s, st, st->codecpar->codec_id);
2859 
2860  if (!codec) {
2861  st->info->found_decoder = -st->codecpar->codec_id;
2862  ret = -1;
2863  goto fail;
2864  }
2865 
2866  /* Force thread count to 1 since the H.264 decoder will not extract
2867  * SPS and PPS to extradata during multi-threaded decoding. */
2868  av_dict_set(options ? options : &thread_opt, "threads", "1", 0);
2869  if (s->codec_whitelist)
2870  av_dict_set(options ? options : &thread_opt, "codec_whitelist", s->codec_whitelist, 0);
2871  ret = avcodec_open2(avctx, codec, options ? options : &thread_opt);
2872  if (!options)
2873  av_dict_free(&thread_opt);
2874  if (ret < 0) {
2875  st->info->found_decoder = -avctx->codec_id;
2876  goto fail;
2877  }
2878  st->info->found_decoder = 1;
2879  } else if (!st->info->found_decoder)
2880  st->info->found_decoder = 1;
2881 
2882  if (st->info->found_decoder < 0) {
2883  ret = -1;
2884  goto fail;
2885  }
2886 
2888  do_skip_frame = 1;
2889  skip_frame = avctx->skip_frame;
2890  avctx->skip_frame = AVDISCARD_ALL;
2891  }
2892 
2893  while ((pkt.size > 0 || (!pkt.data && got_picture)) &&
2894  ret >= 0 &&
2896  (!st->codec_info_nb_frames &&
2898  got_picture = 0;
2899  if (avctx->codec_type == AVMEDIA_TYPE_VIDEO ||
2900  avctx->codec_type == AVMEDIA_TYPE_AUDIO) {
2901  ret = avcodec_send_packet(avctx, &pkt);
2902  if (ret < 0 && ret != AVERROR(EAGAIN) && ret != AVERROR_EOF)
2903  break;
2904  if (ret >= 0)
2905  pkt.size = 0;
2906  ret = avcodec_receive_frame(avctx, frame);
2907  if (ret >= 0)
2908  got_picture = 1;
2909  if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF)
2910  ret = 0;
2911  } else if (avctx->codec_type == AVMEDIA_TYPE_SUBTITLE) {
2912  ret = avcodec_decode_subtitle2(avctx, &subtitle,
2913  &got_picture, &pkt);
2914  if (ret >= 0)
2915  pkt.size = 0;
2916  }
2917  if (ret >= 0) {
2918  if (got_picture)
2919  st->nb_decoded_frames++;
2920  ret = got_picture;
2921  }
2922  }
2923 
2924  if (!pkt.data && !got_picture)
2925  ret = -1;
2926 
2927 fail:
2928  if (do_skip_frame) {
2929  avctx->skip_frame = skip_frame;
2930  }
2931 
2932  av_frame_free(&frame);
2933  return ret;
2934 }
2935 
2936 unsigned int ff_codec_get_tag(const AVCodecTag *tags, enum AVCodecID id)
2937 {
2938  while (tags->id != AV_CODEC_ID_NONE) {
2939  if (tags->id == id)
2940  return tags->tag;
2941  tags++;
2942  }
2943  return 0;
2944 }
2945 
2946 enum AVCodecID ff_codec_get_id(const AVCodecTag *tags, unsigned int tag)
2947 {
2948  int i;
2949  for (i = 0; tags[i].id != AV_CODEC_ID_NONE; i++)
2950  if (tag == tags[i].tag)
2951  return tags[i].id;
2952  for (i = 0; tags[i].id != AV_CODEC_ID_NONE; i++)
2953  if (avpriv_toupper4(tag) == avpriv_toupper4(tags[i].tag))
2954  return tags[i].id;
2955  return AV_CODEC_ID_NONE;
2956 }
2957 
2958 enum AVCodecID ff_get_pcm_codec_id(int bps, int flt, int be, int sflags)
2959 {
2960  if (bps <= 0 || bps > 64)
2961  return AV_CODEC_ID_NONE;
2962 
2963  if (flt) {
2964  switch (bps) {
2965  case 32:
2967  case 64:
2969  default:
2970  return AV_CODEC_ID_NONE;
2971  }
2972  } else {
2973  bps += 7;
2974  bps >>= 3;
2975  if (sflags & (1 << (bps - 1))) {
2976  switch (bps) {
2977  case 1:
2978  return AV_CODEC_ID_PCM_S8;
2979  case 2:
2981  case 3:
2983  case 4:
2985  default:
2986  return AV_CODEC_ID_NONE;
2987  }
2988  } else {
2989  switch (bps) {
2990  case 1:
2991  return AV_CODEC_ID_PCM_U8;
2992  case 2:
2994  case 3:
2996  case 4:
2998  default:
2999  return AV_CODEC_ID_NONE;
3000  }
3001  }
3002  }
3003 }
3004 
3005 unsigned int av_codec_get_tag(const AVCodecTag *const *tags, enum AVCodecID id)
3006 {
3007  unsigned int tag;
3008  if (!av_codec_get_tag2(tags, id, &tag))
3009  return 0;
3010  return tag;
3011 }
3012 
3013 int av_codec_get_tag2(const AVCodecTag * const *tags, enum AVCodecID id,
3014  unsigned int *tag)
3015 {
3016  int i;
3017  for (i = 0; tags && tags[i]; i++) {
3018  const AVCodecTag *codec_tags = tags[i];
3019  while (codec_tags->id != AV_CODEC_ID_NONE) {
3020  if (codec_tags->id == id) {
3021  *tag = codec_tags->tag;
3022  return 1;
3023  }
3024  codec_tags++;
3025  }
3026  }
3027  return 0;
3028 }
3029 
3030 enum AVCodecID av_codec_get_id(const AVCodecTag *const *tags, unsigned int tag)
3031 {
3032  int i;
3033  for (i = 0; tags && tags[i]; i++) {
3034  enum AVCodecID id = ff_codec_get_id(tags[i], tag);
3035  if (id != AV_CODEC_ID_NONE)
3036  return id;
3037  }
3038  return AV_CODEC_ID_NONE;
3039 }
3040 
3041 static void compute_chapters_end(AVFormatContext *s)
3042 {
3043  unsigned int i, j;
3044  int64_t max_time = 0;
3045 
3046  if (s->duration > 0 && s->start_time < INT64_MAX - s->duration)
3047  max_time = s->duration +
3048  ((s->start_time == AV_NOPTS_VALUE) ? 0 : s->start_time);
3049 
3050  for (i = 0; i < s->nb_chapters; i++)
3051  if (s->chapters[i]->end == AV_NOPTS_VALUE) {
3052  AVChapter *ch = s->chapters[i];
3053  int64_t end = max_time ? av_rescale_q(max_time, AV_TIME_BASE_Q,
3054  ch->time_base)
3055  : INT64_MAX;
3056 
3057  for (j = 0; j < s->nb_chapters; j++) {
3058  AVChapter *ch1 = s->chapters[j];
3059  int64_t next_start = av_rescale_q(ch1->start, ch1->time_base,
3060  ch->time_base);
3061  if (j != i && next_start > ch->start && next_start < end)
3062  end = next_start;
3063  }
3064  ch->end = (end == INT64_MAX) ? ch->start : end;
3065  }
3066 }
3067 
3068 static int get_std_framerate(int i)
3069 {
3070  if (i < 30*12)
3071  return (i + 1) * 1001;
3072  i -= 30*12;
3073 
3074  if (i < 30)
3075  return (i + 31) * 1001 * 12;
3076  i -= 30;
3077 
3078  if (i < 3)
3079  return ((const int[]) { 80, 120, 240})[i] * 1001 * 12;
3080 
3081  i -= 3;
3082 
3083  return ((const int[]) { 24, 30, 60, 12, 15, 48 })[i] * 1000 * 12;
3084 }
3085 
3086 /* Is the time base unreliable?
3087  * This is a heuristic to balance between quick acceptance of the values in
3088  * the headers vs. some extra checks.
3089  * Old DivX and Xvid often have nonsense timebases like 1fps or 2fps.
3090  * MPEG-2 commonly misuses field repeat flags to store different framerates.
3091  * And there are "variable" fps files this needs to detect as well. */
3093 {
3094  if (c->time_base.den >= 101LL * c->time_base.num ||
3095  c->time_base.den < 5LL * c->time_base.num ||
3096  // c->codec_tag == AV_RL32("DIVX") ||
3097  // c->codec_tag == AV_RL32("XVID") ||
3098  c->codec_tag == AV_RL32("mp4v") ||
3100  c->codec_id == AV_CODEC_ID_GIF ||
3101  c->codec_id == AV_CODEC_ID_HEVC ||
3102  c->codec_id == AV_CODEC_ID_H264)
3103  return 1;
3104  return 0;
3105 }
3106 
3108 {
3109  int ret;
3110 
3112  par->extradata = NULL;
3113  par->extradata_size = 0;
3114  return AVERROR(EINVAL);
3115  }
3117  if (par->extradata) {
3118  memset(par->extradata + size, 0, AV_INPUT_BUFFER_PADDING_SIZE);
3119  par->extradata_size = size;
3120  ret = 0;
3121  } else {
3122  par->extradata_size = 0;
3123  ret = AVERROR(ENOMEM);
3124  }
3125  return ret;
3126 }
3127 
3128 int ff_get_extradata(AVFormatContext *s, AVCodecParameters *par, AVIOContext *pb, int size)
3129 {
3130  int ret = ff_alloc_extradata(par, size);
3131  if (ret < 0)
3132  return ret;
3133  ret = avio_read(pb, par->extradata, size);
3134  if (ret != size) {
3135  av_freep(&par->extradata);
3136  par->extradata_size = 0;
3137  av_log(s, AV_LOG_ERROR, "Failed to read extradata of size %d\n", size);
3138  return ret < 0 ? ret : AVERROR_INVALIDDATA;
3139  }
3140 
3141  return ret;
3142 }
3143 
3144 int ff_rfps_add_frame(AVFormatContext *ic, AVStream *st, int64_t ts)
3145 {
3146  int i, j;
3147  int64_t last = st->info->last_dts;
3148 
3149  if ( ts != AV_NOPTS_VALUE && last != AV_NOPTS_VALUE && ts > last
3150  && ts - (uint64_t)last < INT64_MAX) {
3151  double dts = (is_relative(ts) ? ts - RELATIVE_TS_BASE : ts) * av_q2d(st->time_base);
3152  int64_t duration = ts - last;
3153 
3154  if (!st->info->duration_error)
3155  st->info->duration_error = av_mallocz(sizeof(st->info->duration_error[0])*2);
3156  if (!st->info->duration_error)
3157  return AVERROR(ENOMEM);
3158 
3159 // if (st->codec->codec_type == AVMEDIA_TYPE_VIDEO)
3160 // av_log(NULL, AV_LOG_ERROR, "%f\n", dts);
3161  for (i = 0; i<MAX_STD_TIMEBASES; i++) {
3162  if (st->info->duration_error[0][1][i] < 1e10) {
3163  int framerate = get_std_framerate(i);
3164  double sdts = dts*framerate/(1001*12);
3165  for (j= 0; j<2; j++) {
3166  int64_t ticks = llrint(sdts+j*0.5);
3167  double error= sdts - ticks + j*0.5;
3168  st->info->duration_error[j][0][i] += error;
3169  st->info->duration_error[j][1][i] += error*error;
3170  }
3171  }
3172  }
3173  st->info->duration_count++;
3175 
3176  if (st->info->duration_count % 10 == 0) {
3177  int n = st->info->duration_count;
3178  for (i = 0; i<MAX_STD_TIMEBASES; i++) {
3179  if (st->info->duration_error[0][1][i] < 1e10) {
3180  double a0 = st->info->duration_error[0][0][i] / n;
3181  double error0 = st->info->duration_error[0][1][i] / n - a0*a0;
3182  double a1 = st->info->duration_error[1][0][i] / n;
3183  double error1 = st->info->duration_error[1][1][i] / n - a1*a1;
3184  if (error0 > 0.04 && error1 > 0.04) {
3185  st->info->duration_error[0][1][i] = 2e10;
3186  st->info->duration_error[1][1][i] = 2e10;
3187  }
3188  }
3189  }
3190  }
3191 
3192  // ignore the first 4 values, they might have some random jitter
3193  if (st->info->duration_count > 3 && is_relative(ts) == is_relative(last))
3194  st->info->duration_gcd = av_gcd(st->info->duration_gcd, duration);
3195  }
3196  if (ts != AV_NOPTS_VALUE)
3197  st->info->last_dts = ts;
3198 
3199  return 0;
3200 }
3201 
3202 void ff_rfps_calculate(AVFormatContext *ic)
3203 {
3204  int i, j;
3205 
3206  for (i = 0; i < ic->nb_streams; i++) {
3207  AVStream *st = ic->streams[i];
3208 
3210  continue;
3211  // the check for tb_unreliable() is not completely correct, since this is not about handling
3212  // an unreliable/inexact time base, but a time base that is finer than necessary, as e.g.
3213  // ipmovie.c produces.
3214  if (tb_unreliable(st->internal->avctx) && st->info->duration_count > 15 && st->info->duration_gcd > FFMAX(1, st->time_base.den/(500LL*st->time_base.num)) && !st->r_frame_rate.num)
3215  av_reduce(&st->r_frame_rate.num, &st->r_frame_rate.den, st->time_base.den, st->time_base.num * st->info->duration_gcd, INT_MAX);
3216  if (st->info->duration_count>1 && !st->r_frame_rate.num
3217  && tb_unreliable(st->internal->avctx)) {
3218  int num = 0;
3219  double best_error= 0.01;
3220  AVRational ref_rate = st->r_frame_rate.num ? st->r_frame_rate : av_inv_q(st->time_base);
3221 
3222  for (j= 0; j<MAX_STD_TIMEBASES; j++) {
3223  int k;
3224 
3225  if (st->info->codec_info_duration &&
3226  st->info->codec_info_duration*av_q2d(st->time_base) < (1001*11.5)/get_std_framerate(j))
3227  continue;
3228  if (!st->info->codec_info_duration && get_std_framerate(j) < 1001*12)
3229  continue;
3230 
3231  if (av_q2d(st->time_base) * st->info->rfps_duration_sum / st->info->duration_count < (1001*12.0 * 0.8)/get_std_framerate(j))
3232  continue;
3233 
3234  for (k= 0; k<2; k++) {
3235  int n = st->info->duration_count;
3236  double a= st->info->duration_error[k][0][j] / n;
3237  double error= st->info->duration_error[k][1][j]/n - a*a;
3238 
3239  if (error < best_error && best_error> 0.000000001) {
3240  best_error= error;
3241  num = get_std_framerate(j);
3242  }
3243  if (error < 0.02)
3244  av_log(ic, AV_LOG_DEBUG, "rfps: %f %f\n", get_std_framerate(j) / 12.0/1001, error);
3245  }
3246  }
3247  // do not increase frame rate by more than 1 % in order to match a standard rate.
3248  if (num && (!ref_rate.num || (double)num/(12*1001) < 1.01 * av_q2d(ref_rate)))
3249  av_reduce(&st->r_frame_rate.num, &st->r_frame_rate.den, num, 12*1001, INT_MAX);
3250  }
3251  if ( !st->avg_frame_rate.num
3252  && st->r_frame_rate.num && st->info->rfps_duration_sum
3253  && st->info->codec_info_duration <= 0
3254  && st->info->duration_count > 2
3255  && fabs(1.0 / (av_q2d(st->r_frame_rate) * av_q2d(st->time_base)) - st->info->rfps_duration_sum / (double)st->info->duration_count) <= 1.0
3256  ) {
3257  av_log(ic, AV_LOG_DEBUG, "Setting avg frame rate based on r frame rate\n");
3258  st->avg_frame_rate = st->r_frame_rate;
3259  }
3260 
3261  av_freep(&st->info->duration_error);
3262  st->info->last_dts = AV_NOPTS_VALUE;
3263  st->info->duration_count = 0;
3264  st->info->rfps_duration_sum = 0;
3265  }
3266 }
3267 
3269 {
3270  int i, count = 0, ret = 0, j;
3271  int64_t read_size;
3272  AVStream *st;
3273  AVCodecContext *avctx;
3274  AVPacket pkt1, *pkt;
3275  int64_t old_offset = avio_tell(ic->pb);
3276  // new streams might appear, no options for those
3277  int orig_nb_streams = ic->nb_streams;
3278  int flush_codecs;
3279  int64_t max_analyze_duration = ic->max_analyze_duration;
3280  int64_t max_stream_analyze_duration;
3281  int64_t max_subtitle_analyze_duration;
3282  int64_t probesize = ic->probesize;
3283  int eof_reached = 0;
3284 
3285  flush_codecs = probesize > 0;
3286 
3287  av_opt_set(ic, "skip_clear", "1", AV_OPT_SEARCH_CHILDREN);
3288 
3289  max_stream_analyze_duration = max_analyze_duration;
3290  max_subtitle_analyze_duration = max_analyze_duration;
3291  if (!max_analyze_duration) {
3292  max_stream_analyze_duration =
3293  max_analyze_duration = 5*AV_TIME_BASE;
3294  max_subtitle_analyze_duration = 30*AV_TIME_BASE;
3295  if (!strcmp(ic->iformat->name, "flv"))
3296  max_stream_analyze_duration = 90*AV_TIME_BASE;
3297  if (!strcmp(ic->iformat->name, "mpeg") || !strcmp(ic->iformat->name, "mpegts"))
3298  max_stream_analyze_duration = 7*AV_TIME_BASE;
3299  }
3300 
3301  if (ic->pb)
3302  av_log(ic, AV_LOG_DEBUG, "Before avformat_find_stream_info() pos: %"PRId64" bytes read:%"PRId64" seeks:%d nb_streams:%d\n",
3303  avio_tell(ic->pb), ic->pb->bytes_read, ic->pb->seek_count, ic->nb_streams);
3304 
3305  for (i = 0; i < ic->nb_streams; i++) {
3306  const AVCodec *codec;
3307  AVDictionary *thread_opt = NULL;
3308  st = ic->streams[i];
3309  avctx = st->internal->avctx;
3310 
3311  if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO ||
3313 /* if (!st->time_base.num)
3314  st->time_base = */
3315  if (!avctx->time_base.num)
3316  avctx->time_base = st->time_base;
3317  }
3318  // only for the split stuff
3319  if (!st->parser && !(ic->flags & AVFMT_FLAG_NOPARSE) && st->request_probe <= 0) {
3320  st->parser = av_parser_init(st->codecpar->codec_id);
3321  if (st->parser) {
3322  if (st->need_parsing == AVSTREAM_PARSE_HEADERS) {
3324  } else if (st->need_parsing == AVSTREAM_PARSE_FULL_RAW) {
3326  }
3327  } else if (st->need_parsing) {
3328  av_log(ic, AV_LOG_VERBOSE, "parser not found for codec "
3329  "%s, packets or times may be invalid.\n",
3331  }
3332  }
3333 
3334  /* check if the caller has overridden the codec id */
3335 #if FF_API_LAVF_AVCTX
3337  if (st->codec->codec_id != st->internal->orig_codec_id) {
3338  st->codecpar->codec_id = st->codec->codec_id;
3339  st->codecpar->codec_type = st->codec->codec_type;
3340  st->internal->orig_codec_id = st->codec->codec_id;
3341  }
3343 #endif
3344  if (st->codecpar->codec_id != st->internal->orig_codec_id)
3346 
3347  ret = avcodec_parameters_to_context(avctx, st->codecpar);
3348  if (ret < 0)
3349  goto find_stream_info_err;
3350  if (st->request_probe <= 0)
3351  st->internal->avctx_inited = 1;
3352 
3353  codec = find_decoder(ic, st, st->codecpar->codec_id);
3354 
3355  /* Force thread count to 1 since the H.264 decoder will not extract
3356  * SPS and PPS to extradata during multi-threaded decoding. */
3357  av_dict_set(options ? &options[i] : &thread_opt, "threads", "1", 0);
3358 
3359  if (ic->codec_whitelist)
3360  av_dict_set(options ? &options[i] : &thread_opt, "codec_whitelist", ic->codec_whitelist, 0);
3361 
3362  /* Ensure that subtitle_header is properly set. */
3364  && codec && !avctx->codec) {
3365  if (avcodec_open2(avctx, codec, options ? &options[i] : &thread_opt) < 0)
3366  av_log(ic, AV_LOG_WARNING,
3367  "Failed to open codec in av_find_stream_info\n");
3368  }
3369 
3370  // Try to just open decoders, in case this is enough to get parameters.
3371  if (!has_codec_parameters(st, NULL) && st->request_probe <= 0) {
3372  if (codec && !avctx->codec)
3373  if (avcodec_open2(avctx, codec, options ? &options[i] : &thread_opt) < 0)
3374  av_log(ic, AV_LOG_WARNING,
3375  "Failed to open codec in av_find_stream_info\n");
3376  }
3377  if (!options)
3378  av_dict_free(&thread_opt);
3379  }
3380 
3381  for (i = 0; i < ic->nb_streams; i++) {
3382 #if FF_API_R_FRAME_RATE
3383  ic->streams[i]->info->last_dts = AV_NOPTS_VALUE;
3384 #endif
3387  }
3388 
3389  read_size = 0;
3390  for (;;) {
3391  int analyzed_all_streams;
3393  ret = AVERROR_EXIT;
3394  av_log(ic, AV_LOG_DEBUG, "interrupted\n");
3395  break;
3396  }
3397 
3398  /* check if one codec still needs to be handled */
3399  for (i = 0; i < ic->nb_streams; i++) {
3400  int fps_analyze_framecount = 20;
3401 
3402  st = ic->streams[i];
3403  if (!has_codec_parameters(st, NULL))
3404  break;
3405  /* If the timebase is coarse (like the usual millisecond precision
3406  * of mkv), we need to analyze more frames to reliably arrive at
3407  * the correct fps. */
3408  if (av_q2d(st->time_base) > 0.0005)
3409  fps_analyze_framecount *= 2;
3410  if (!tb_unreliable(st->internal->avctx))
3411  fps_analyze_framecount = 0;
3412  if (ic->fps_probe_size >= 0)
3413  fps_analyze_framecount = ic->fps_probe_size;
3415  fps_analyze_framecount = 0;
3416  /* variable fps and no guess at the real fps */
3417  if (!(st->r_frame_rate.num && st->avg_frame_rate.num) &&
3419  int count = (ic->iformat->flags & AVFMT_NOTIMESTAMPS) ?
3421  st->info->duration_count;
3422  if (count < fps_analyze_framecount)
3423  break;
3424  }
3425  if (st->parser && st->parser->parser->split &&
3426  !st->codecpar->extradata)
3427  break;
3428  if (st->first_dts == AV_NOPTS_VALUE &&
3429  !(ic->iformat->flags & AVFMT_NOTIMESTAMPS) &&
3433  break;
3434  }
3435  analyzed_all_streams = 0;
3436  if (i == ic->nb_streams) {
3437  analyzed_all_streams = 1;
3438  /* NOTE: If the format has no header, then we need to read some
3439  * packets to get most of the streams, so we cannot stop here. */
3440  if (!(ic->ctx_flags & AVFMTCTX_NOHEADER)) {
3441  /* If we found the info for all the codecs, we can stop. */
3442  ret = count;
3443  av_log(ic, AV_LOG_DEBUG, "All info found\n");
3444  flush_codecs = 0;
3445  break;
3446  }
3447  }
3448  /* We did not get all the codec info, but we read too much data. */
3449  if (read_size >= probesize) {
3450  ret = count;
3451  av_log(ic, AV_LOG_DEBUG,
3452  "Probe buffer size limit of %"PRId64" bytes reached\n", probesize);
3453  for (i = 0; i < ic->nb_streams; i++)
3454  if (!ic->streams[i]->r_frame_rate.num &&
3455  ic->streams[i]->info->duration_count <= 1 &&
3457  strcmp(ic->iformat->name, "image2"))
3458  av_log(ic, AV_LOG_WARNING,
3459  "Stream #%d: not enough frames to estimate rate; "
3460  "consider increasing probesize\n", i);
3461  break;
3462  }
3463 
3464  /* NOTE: A new stream can be added there if no header in file
3465  * (AVFMTCTX_NOHEADER). */
3466  ret = read_frame_internal(ic, &pkt1);
3467  if (ret == AVERROR(EAGAIN))
3468  continue;
3469 
3470  if (ret < 0) {
3471  /* EOF or error*/
3472  eof_reached = 1;
3473  break;
3474  }
3475 
3476  pkt = &pkt1;
3477 
3478  if (!(ic->flags & AVFMT_FLAG_NOBUFFER)) {
3479  ret = add_to_pktbuf(&ic->internal->packet_buffer, pkt,
3480  &ic->internal->packet_buffer_end, 0);
3481  if (ret < 0)
3482  goto find_stream_info_err;
3483  }
3484 
3485  st = ic->streams[pkt->stream_index];
3487  read_size += pkt->size;
3488 
3489  avctx = st->internal->avctx;
3490  if (!st->internal->avctx_inited) {
3491  ret = avcodec_parameters_to_context(avctx, st->codecpar);
3492  if (ret < 0)
3493  goto find_stream_info_err;
3494  st->internal->avctx_inited = 1;
3495  }
3496 
3497  if (pkt->dts != AV_NOPTS_VALUE && st->codec_info_nb_frames > 1) {
3498  /* check for non-increasing dts */
3499  if (st->info->fps_last_dts != AV_NOPTS_VALUE &&
3500  st->info->fps_last_dts >= pkt->dts) {
3501  av_log(ic, AV_LOG_DEBUG,
3502  "Non-increasing DTS in stream %d: packet %d with DTS "
3503  "%"PRId64", packet %d with DTS %"PRId64"\n",
3504  st->index, st->info->fps_last_dts_idx,
3506  pkt->dts);
3507  st->info->fps_first_dts =
3509  }
3510  /* Check for a discontinuity in dts. If the difference in dts
3511  * is more than 1000 times the average packet duration in the
3512  * sequence, we treat it as a discontinuity. */
3513  if (st->info->fps_last_dts != AV_NOPTS_VALUE &&
3515  (pkt->dts - st->info->fps_last_dts) / 1000 >
3516  (st->info->fps_last_dts - st->info->fps_first_dts) /
3517  (st->info->fps_last_dts_idx - st->info->fps_first_dts_idx)) {
3518  av_log(ic, AV_LOG_WARNING,
3519  "DTS discontinuity in stream %d: packet %d with DTS "
3520  "%"PRId64", packet %d with DTS %"PRId64"\n",
3521  st->index, st->info->fps_last_dts_idx,
3523  pkt->dts);
3524  st->info->fps_first_dts =
3526  }
3527 
3528  /* update stored dts values */
3529  if (st->info->fps_first_dts == AV_NOPTS_VALUE) {
3530  st->info->fps_first_dts = pkt->dts;
3532  }
3533  st->info->fps_last_dts = pkt->dts;
3535  }
3536  if (st->codec_info_nb_frames>1) {
3537  int64_t t = 0;
3538  int64_t limit;
3539 
3540  if (st->time_base.den > 0)
3542  if (st->avg_frame_rate.num > 0)
3544 
3545  if ( t == 0
3546  && st->codec_info_nb_frames>30
3547  && st->info->fps_first_dts != AV_NOPTS_VALUE
3548  && st->info->fps_last_dts != AV_NOPTS_VALUE)
3550 
3551  if (analyzed_all_streams) limit = max_analyze_duration;
3552  else if (avctx->codec_type == AVMEDIA_TYPE_SUBTITLE) limit = max_subtitle_analyze_duration;
3553  else limit = max_stream_analyze_duration;
3554 
3555  if (t >= limit) {
3556  av_log(ic, AV_LOG_VERBOSE, "max_analyze_duration %"PRId64" reached at %"PRId64" microseconds st:%d\n",
3557  limit,
3558  t, pkt->stream_index);
3559  if (ic->flags & AVFMT_FLAG_NOBUFFER)
3560  av_packet_unref(pkt);
3561  break;
3562  }
3563  if (pkt->duration) {
3564  if (avctx->codec_type == AVMEDIA_TYPE_SUBTITLE && pkt->pts != AV_NOPTS_VALUE && pkt->pts >= st->start_time) {
3565  st->info->codec_info_duration = FFMIN(pkt->pts - st->start_time, st->info->codec_info_duration + pkt->duration);
3566  } else
3567  st->info->codec_info_duration += pkt->duration;
3568  st->info->codec_info_duration_fields += st->parser && st->need_parsing && avctx->ticks_per_frame ==2 ? st->parser->repeat_pict + 1 : 2;
3569  }
3570  }
3571 #if FF_API_R_FRAME_RATE
3573  ff_rfps_add_frame(ic, st, pkt->dts);
3574 #endif
3575  if (st->parser && st->parser->parser->split && !avctx->extradata) {
3576  int i = st->parser->parser->split(avctx, pkt->data, pkt->size);
3577  if (i > 0 && i < FF_MAX_EXTRADATA_SIZE) {
3578  avctx->extradata_size = i;
3579  avctx->extradata = av_mallocz(avctx->extradata_size +
3581  if (!avctx->extradata)
3582  return AVERROR(ENOMEM);
3583  memcpy(avctx->extradata, pkt->data,
3584  avctx->extradata_size);
3585  }
3586  }
3587 
3588  /* If still no information, we try to open the codec and to
3589  * decompress the frame. We try to avoid that in most cases as
3590  * it takes longer and uses more memory. For MPEG-4, we need to
3591  * decompress for QuickTime.
3592  *
3593  * If AV_CODEC_CAP_CHANNEL_CONF is set this will force decoding of at
3594  * least one frame of codec data, this makes sure the codec initializes
3595  * the channel configuration and does not only trust the values from
3596  * the container. */
3597  try_decode_frame(ic, st, pkt,
3598  (options && i < orig_nb_streams) ? &options[i] : NULL);
3599 
3600  if (ic->flags & AVFMT_FLAG_NOBUFFER)
3601  av_packet_unref(pkt);
3602 
3603  st->codec_info_nb_frames++;
3604  count++;
3605  }
3606 
3607  if (eof_reached) {
3608  int stream_index;
3609  for (stream_index = 0; stream_index < ic->nb_streams; stream_index++) {
3610  st = ic->streams[stream_index];
3611  avctx = st->internal->avctx;
3612  if (!has_codec_parameters(st, NULL)) {
3613  const AVCodec *codec = find_decoder(ic, st, st->codecpar->codec_id);
3614  if (codec && !avctx->codec) {
3615  if (avcodec_open2(avctx, codec, (options && stream_index < orig_nb_streams) ? &options[stream_index] : NULL) < 0)
3616  av_log(ic, AV_LOG_WARNING,
3617  "Failed to open codec in av_find_stream_info\n");
3618  }
3619  }
3620 
3621  // EOF already reached while reading the stream above.
3622  // So continue with reoordering DTS with whatever delay we have.
3624  update_dts_from_pts(ic, stream_index, ic->internal->packet_buffer);
3625  }
3626  }
3627  }
3628 
3629  if (flush_codecs) {
3630  AVPacket empty_pkt = { 0 };
3631  int err = 0;
3632  av_init_packet(&empty_pkt);
3633 
3634  for (i = 0; i < ic->nb_streams; i++) {
3635 
3636  st = ic->streams[i];
3637 
3638  /* flush the decoders */
3639  if (st->info->found_decoder == 1) {
3640  do {
3641  err = try_decode_frame(ic, st, &empty_pkt,
3642  (options && i < orig_nb_streams)
3643  ? &options[i] : NULL);
3644  } while (err > 0 && !has_codec_parameters(st, NULL));
3645 
3646  if (err < 0) {
3647  av_log(ic, AV_LOG_INFO,
3648  "decoding for stream %d failed\n", st->index);
3649  }
3650  }
3651  }
3652  }
3653 
3654  // close codecs which were opened in try_decode_frame()
3655  for (i = 0; i < ic->nb_streams; i++) {
3656  st = ic->streams[i];
3658  }
3659 
3660  ff_rfps_calculate(ic);
3661 
3662  for (i = 0; i < ic->nb_streams; i++) {
3663  st = ic->streams[i];
3664  avctx = st->internal->avctx;
3665  if (avctx->codec_type == AVMEDIA_TYPE_VIDEO) {
3666  if (avctx->codec_id == AV_CODEC_ID_RAWVIDEO && !avctx->codec_tag && !avctx->bits_per_coded_sample) {
3667  uint32_t tag= avcodec_pix_fmt_to_codec_tag(avctx->pix_fmt);
3669  avctx->codec_tag= tag;
3670  }
3671 
3672  /* estimate average framerate if not set by demuxer */
3673  if (st->info->codec_info_duration_fields &&
3674  !st->avg_frame_rate.num &&
3675  st->info->codec_info_duration) {
3676  int best_fps = 0;
3677  double best_error = 0.01;
3678 
3679  if (st->info->codec_info_duration >= INT64_MAX / st->time_base.num / 2||
3680  st->info->codec_info_duration_fields >= INT64_MAX / st->time_base.den ||
3681  st->info->codec_info_duration < 0)
3682  continue;
3684  st->info->codec_info_duration_fields * (int64_t) st->time_base.den,
3685  st->info->codec_info_duration * 2 * (int64_t) st->time_base.num, 60000);
3686 
3687  /* Round guessed framerate to a "standard" framerate if it's
3688  * within 1% of the original estimate. */
3689  for (j = 0; j < MAX_STD_TIMEBASES; j++) {
3690  AVRational std_fps = { get_std_framerate(j), 12 * 1001 };
3691  double error = fabs(av_q2d(st->avg_frame_rate) /
3692  av_q2d(std_fps) - 1);
3693 
3694  if (error < best_error) {
3695  best_error = error;
3696  best_fps = std_fps.num;
3697  }
3698  }
3699  if (best_fps)
3701  best_fps, 12 * 1001, INT_MAX);
3702  }
3703 
3704  if (!st->r_frame_rate.num) {
3705  if ( avctx->time_base.den * (int64_t) st->time_base.num
3706  <= avctx->time_base.num * avctx->ticks_per_frame * (int64_t) st->time_base.den) {
3707  st->r_frame_rate.num = avctx->time_base.den;
3708  st->r_frame_rate.den = avctx->time_base.num * avctx->ticks_per_frame;
3709  } else {
3710  st->r_frame_rate.num = st->time_base.den;
3711  st->r_frame_rate.den = st->time_base.num;
3712  }
3713  }
3715  AVRational hw_ratio = { avctx->height, avctx->width };
3717  hw_ratio);
3718  }
3719  } else if (avctx->codec_type == AVMEDIA_TYPE_AUDIO) {
3720  if (!avctx->bits_per_coded_sample)
3721  avctx->bits_per_coded_sample =
3723  // set stream disposition based on audio service type
3724  switch (avctx->audio_service_type) {
3727  break;
3730  break;
3733  break;
3736  break;
3739  break;
3740  }
3741  }
3742  }
3743 
3744  if (probesize)
3745  estimate_timings(ic, old_offset);
3746 
3747  av_opt_set(ic, "skip_clear", "0", AV_OPT_SEARCH_CHILDREN);
3748 
3749  if (ret >= 0 && ic->nb_streams)
3750  /* We could not have all the codec parameters before EOF. */
3751  ret = -1;
3752  for (i = 0; i < ic->nb_streams; i++) {
3753  const char *errmsg;
3754  st = ic->streams[i];
3755 
3756  /* if no packet was ever seen, update context now for has_codec_parameters */
3757  if (!st->internal->avctx_inited) {
3758  if (st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO &&
3760  st->codecpar->format = st->internal->avctx->sample_fmt;
3762  if (ret < 0)
3763  goto find_stream_info_err;
3764  }
3765  if (!has_codec_parameters(st, &errmsg)) {
3766  char buf[256];
3767  avcodec_string(buf, sizeof(buf), st->internal->avctx, 0);
3768  av_log(ic, AV_LOG_WARNING,
3769  "Could not find codec parameters for stream %d (%s): %s\n"
3770  "Consider increasing the value for the 'analyzeduration' and 'probesize' options\n",
3771  i, buf, errmsg);
3772  } else {
3773  ret = 0;
3774  }
3775  }
3776 
3778 
3779  /* update the stream parameters from the internal codec contexts */
3780  for (i = 0; i < ic->nb_streams; i++) {
3781  st = ic->streams[i];
3782 
3783  if (st->internal->avctx_inited) {
3784  int orig_w = st->codecpar->width;
3785  int orig_h = st->codecpar->height;
3787  if (ret < 0)
3788  goto find_stream_info_err;
3789  // The decoder might reduce the video size by the lowres factor.
3790  if (av_codec_get_lowres(st->internal->avctx) && orig_w) {
3791  st->codecpar->width = orig_w;
3792  st->codecpar->height = orig_h;
3793  }
3794  }
3795 
3796 #if FF_API_LAVF_AVCTX
3798  ret = avcodec_parameters_to_context(st->codec, st->codecpar);
3799  if (ret < 0)
3800  goto find_stream_info_err;
3801 
3802  // The old API (AVStream.codec) "requires" the resolution to be adjusted
3803  // by the lowres factor.
3804  if (av_codec_get_lowres(st->internal->avctx) && st->internal->avctx->width) {
3806  st->codec->width = st->internal->avctx->width;
3807  st->codec->height = st->internal->avctx->height;
3808  }
3809 
3810  if (st->codec->codec_tag != MKTAG('t','m','c','d'))
3811  st->codec->time_base = st->internal->avctx->time_base;
3812  st->codec->framerate = st->avg_frame_rate;
3813 
3814  if (st->internal->avctx->subtitle_header) {
3815  st->codec->subtitle_header = av_malloc(st->internal->avctx->subtitle_header_size);
3816  if (!st->codec->subtitle_header)
3817  goto find_stream_info_err;
3818  st->codec->subtitle_header_size = st->internal->avctx->subtitle_header_size;
3819  memcpy(st->codec->subtitle_header, st->internal->avctx->subtitle_header,
3820  st->codec->subtitle_header_size);
3821  }
3822 
3823  // Fields unavailable in AVCodecParameters
3824  st->codec->coded_width = st->internal->avctx->coded_width;
3825  st->codec->coded_height = st->internal->avctx->coded_height;
3826  st->codec->properties = st->internal->avctx->properties;
3828 #endif
3829 
3830  st->internal->avctx_inited = 0;
3831  }
3832 
3833 find_stream_info_err:
3834  for (i = 0; i < ic->nb_streams; i++) {
3835  st = ic->streams[i];
3836  if (st->info)
3837  av_freep(&st->info->duration_error);
3838  av_freep(&ic->streams[i]->info);
3839  }
3840  if (ic->pb)
3841  av_log(ic, AV_LOG_DEBUG, "After avformat_find_stream_info() pos: %"PRId64" bytes read:%"PRId64" seeks:%d frames:%d\n",
3842  avio_tell(ic->pb), ic->pb->bytes_read, ic->pb->seek_count, count);
3843  return ret;
3844 }
3845 
3846 AVProgram *av_find_program_from_stream(AVFormatContext *ic, AVProgram *last, int s)
3847 {
3848  int i, j;
3849 
3850  for (i = 0; i < ic->nb_programs; i++) {
3851  if (ic->programs[i] == last) {
3852  last = NULL;
3853  } else {
3854  if (!last)
3855  for (j = 0; j < ic->programs[i]->nb_stream_indexes; j++)
3856  if (ic->programs[i]->stream_index[j] == s)
3857  return ic->programs[i];
3858  }
3859  }
3860  return NULL;
3861 }
3862 
3863 int av_find_best_stream(AVFormatContext *ic, enum AVMediaType type,
3864  int wanted_stream_nb, int related_stream,
3865  AVCodec **decoder_ret, int flags)
3866 {
3867  int i, nb_streams = ic->nb_streams;
3868  int ret = AVERROR_STREAM_NOT_FOUND, best_count = -1, best_bitrate = -1, best_multiframe = -1, count, bitrate, multiframe;
3869  unsigned *program = NULL;
3870  const AVCodec *decoder = NULL, *best_decoder = NULL;
3871 
3872  if (related_stream >= 0 && wanted_stream_nb < 0) {
3873  AVProgram *p = av_find_program_from_stream(ic, NULL, related_stream);
3874  if (p) {
3875  program = p->stream_index;
3876  nb_streams = p->nb_stream_indexes;
3877  }
3878  }
3879  for (i = 0; i < nb_streams; i++) {
3880  int real_stream_index = program ? program[i] : i;
3881  AVStream *st = ic->streams[real_stream_index];
3882  AVCodecParameters *par = st->codecpar;
3883  if (par->codec_type != type)
3884  continue;
3885  if (wanted_stream_nb >= 0 && real_stream_index != wanted_stream_nb)
3886  continue;
3887  if (wanted_stream_nb != real_stream_index &&
3890  continue;
3891  if (type == AVMEDIA_TYPE_AUDIO && !(par->channels && par->sample_rate))
3892  continue;
3893  if (decoder_ret) {
3894  decoder = find_decoder(ic, st, par->codec_id);
3895  if (!decoder) {
3896  if (ret < 0)
3898  continue;
3899  }
3900  }
3902  bitrate = par->bit_rate;
3903  multiframe = FFMIN(5, count);
3904  if ((best_multiframe > multiframe) ||
3905  (best_multiframe == multiframe && best_bitrate > bitrate) ||
3906  (best_multiframe == multiframe && best_bitrate == bitrate && best_count >= count))
3907  continue;
3908  best_count = count;
3909  best_bitrate = bitrate;
3910  best_multiframe = multiframe;
3911  ret = real_stream_index;
3912  best_decoder = decoder;
3913  if (program && i == nb_streams - 1 && ret < 0) {
3914  program = NULL;
3915  nb_streams = ic->nb_streams;
3916  /* no related stream found, try again with everything */
3917  i = 0;
3918  }
3919  }
3920  if (decoder_ret)
3921  *decoder_ret = (AVCodec*)best_decoder;
3922  return ret;
3923 }
3924 
3925 /*******************************************************/
3926 
3927 int av_read_play(AVFormatContext *s)
3928 {
3929  if (s->iformat->read_play)
3930  return s->iformat->read_play(s);
3931  if (s->pb)
3932  return avio_pause(s->pb, 0);
3933  return AVERROR(ENOSYS);
3934 }
3935 
3936 int av_read_pause(AVFormatContext *s)
3937 {
3938  if (s->iformat->read_pause)
3939  return s->iformat->read_pause(s);
3940  if (s->pb)
3941  return avio_pause(s->pb, 1);
3942  return AVERROR(ENOSYS);
3943 }
3944 
3945 static void free_stream(AVStream **pst)
3946 {
3947  AVStream *st = *pst;
3948  int i;
3949 
3950  if (!st)
3951  return;
3952 
3953  for (i = 0; i < st->nb_side_data; i++)
3954  av_freep(&st->side_data[i].data);
3955  av_freep(&st->side_data);
3956 
3957  if (st->parser)
3958  av_parser_close(st->parser);
3959 
3960  if (st->attached_pic.data)
3962 
3963  if (st->internal) {
3965  for (i = 0; i < st->internal->nb_bsfcs; i++) {
3966  av_bsf_free(&st->internal->bsfcs[i]);
3967  av_freep(&st->internal->bsfcs);
3968  }
3969  }
3970  av_freep(&st->internal);
3971 
3972  av_dict_free(&st->metadata);
3974  av_freep(&st->probe_data.buf);
3975  av_freep(&st->index_entries);
3976 #if FF_API_LAVF_AVCTX
3978  av_freep(&st->codec->extradata);
3979  av_freep(&st->codec->subtitle_header);
3980  av_freep(&st->codec);
3982 #endif
3983  av_freep(&st->priv_data);
3984  if (st->info)
3985  av_freep(&st->info->duration_error);
3986  av_freep(&st->info);
3988  av_freep(&st->priv_pts);
3989 
3990  av_freep(pst);
3991 }
3992 
3993 void ff_free_stream(AVFormatContext *s, AVStream *st)
3994 {
3995  av_assert0(s->nb_streams>0);
3996  av_assert0(s->streams[ s->nb_streams - 1 ] == st);
3997 
3998  free_stream(&s->streams[ --s->nb_streams ]);
3999 }
4000 
4001 void avformat_free_context(AVFormatContext *s)
4002 {
4003  int i;
4004 
4005  if (!s)
4006  return;
4007 
4008  av_opt_free(s);
4009  if (s->iformat && s->iformat->priv_class && s->priv_data)
4010  av_opt_free(s->priv_data);
4011  if (s->oformat && s->oformat->priv_class && s->priv_data)
4012  av_opt_free(s->priv_data);
4013 
4014  for (i = s->nb_streams - 1; i >= 0; i--)
4015  ff_free_stream(s, s->streams[i]);
4016 
4017 
4018  for (i = s->nb_programs - 1; i >= 0; i--) {
4019  av_dict_free(&s->programs[i]->metadata);
4020  av_freep(&s->programs[i]->stream_index);
4021  av_freep(&s->programs[i]);
4022  }
4023  av_freep(&s->programs);
4024  av_freep(&s->priv_data);
4025  while (s->nb_chapters--) {
4027  av_freep(&s->chapters[s->nb_chapters]);
4028  }
4029  av_freep(&s->chapters);
4030  av_dict_free(&s->metadata);
4031  av_freep(&s->streams);
4032  av_freep(&s->internal);
4033  flush_packet_queue(s);
4034  av_free(s);
4035 }
4036 
4037 void avformat_close_input(AVFormatContext **ps)
4038 {
4039  AVFormatContext *s;
4040  AVIOContext *pb;
4041 
4042  if (!ps || !*ps)
4043  return;
4044 
4045  s = *ps;
4046  pb = s->pb;
4047 
4048  if ((s->iformat && strcmp(s->iformat->name, "image2") && s->iformat->flags & AVFMT_NOFILE) ||
4049  (s->flags & AVFMT_FLAG_CUSTOM_IO))
4050  pb = NULL;
4051 
4052  flush_packet_queue(s);
4053 
4054  if (s->iformat)
4055  if (s->iformat->read_close)
4056  s->iformat->read_close(s);
4057 
4059 
4060  *ps = NULL;
4061 
4062  avio_close(pb);
4063 }
4064 
4065 AVStream *avformat_new_stream(AVFormatContext *s, const AVCodec *c)
4066 {
4067  AVStream *st;
4068  int i;
4069  AVStream **streams;
4070 
4071  if (s->nb_streams >= INT_MAX/sizeof(*streams))
4072  return NULL;
4073  streams = av_realloc_array(s->streams, s->nb_streams + 1, sizeof(*streams));
4074  if (!streams)
4075  return NULL;
4076  s->streams = streams;
4077 
4078  st = av_mallocz(sizeof(AVStream));
4079  if (!st)
4080  return NULL;
4081  if (!(st->info = av_mallocz(sizeof(*st->info)))) {
4082  av_free(st);
4083  return NULL;
4084  }
4085  st->info->last_dts = AV_NOPTS_VALUE;
4086 
4087 #if FF_API_LAVF_AVCTX
4089  st->codec = avcodec_alloc_context3(c);
4090  if (!st->codec) {
4091  av_free(st->info);
4092  av_free(st);
4093  return NULL;
4094  }
4096 #endif
4097 
4098  st->internal = av_mallocz(sizeof(*st->internal));
4099  if (!st->internal)
4100  goto fail;
4101 
4103  if (!st->codecpar)
4104  goto fail;
4105 
4107  if (!st->internal->avctx)
4108  goto fail;
4109 
4110  if (s->iformat) {
4111 #if FF_API_LAVF_AVCTX
4113  /* no default bitrate if decoding */
4114  st->codec->bit_rate = 0;
4116 #endif
4117 
4118  /* default pts setting is MPEG-like */
4119  avpriv_set_pts_info(st, 33, 1, 90000);
4120  /* we set the current DTS to 0 so that formats without any timestamps
4121  * but durations get some timestamps, formats with some unknown
4122  * timestamps have their first few packets buffered and the
4123  * timestamps corrected before they are returned to the user */
4124  st->cur_dts = RELATIVE_TS_BASE;
4125  } else {
4126  st->cur_dts = AV_NOPTS_VALUE;
4127  }
4128 
4129  st->index = s->nb_streams;
4130  st->start_time = AV_NOPTS_VALUE;
4131  st->duration = AV_NOPTS_VALUE;
4132  st->first_dts = AV_NOPTS_VALUE;
4136 
4139  for (i = 0; i < MAX_REORDER_DELAY + 1; i++)
4140  st->pts_buffer[i] = AV_NOPTS_VALUE;
4141 
4142  st->sample_aspect_ratio = (AVRational) { 0, 1 };
4143 
4144 #if FF_API_R_FRAME_RATE
4145  st->info->last_dts = AV_NOPTS_VALUE;
4146 #endif
4149 
4151 
4152  st->internal->need_context_update = 1;
4153 
4154  s->streams[s->nb_streams++] = st;
4155  return st;
4156 fail:
4157  free_stream(&st);
4158  return NULL;
4159 }
4160 
4161 AVProgram *av_new_program(AVFormatContext *ac, int id)
4162 {
4163  AVProgram *program = NULL;
4164  int i;
4165 
4166  av_log(ac, AV_LOG_TRACE, "new_program: id=0x%04x\n", id);
4167 
4168  for (i = 0; i < ac->nb_programs; i++)
4169  if (ac->programs[i]->id == id)
4170  program = ac->programs[i];
4171 
4172  if (!program) {
4173  program = av_mallocz(sizeof(AVProgram));
4174  if (!program)
4175  return NULL;
4176  dynarray_add(&ac->programs, &ac->nb_programs, program);
4177  program->discard = AVDISCARD_NONE;
4178  }
4179  program->id = id;
4182 
4183  program->start_time =
4184  program->end_time = AV_NOPTS_VALUE;
4185 
4186  return program;
4187 }
4188 
4189 AVChapter *avpriv_new_chapter(AVFormatContext *s, int id, AVRational time_base,
4190  int64_t start, int64_t end, const char *title)
4191 {
4192  AVChapter *chapter = NULL;
4193  int i;
4194 
4195  if (end != AV_NOPTS_VALUE && start > end) {
4196  av_log(s, AV_LOG_ERROR, "Chapter end time %"PRId64" before start %"PRId64"\n", end, start);
4197  return NULL;
4198  }
4199 
4200  for (i = 0; i < s->nb_chapters; i++)
4201  if (s->chapters[i]->id == id)
4202  chapter = s->chapters[i];
4203 
4204  if (!chapter) {
4205  chapter = av_mallocz(sizeof(AVChapter));
4206  if (!chapter)
4207  return NULL;
4208  dynarray_add(&s->chapters, &s->nb_chapters, chapter);
4209  }
4210  av_dict_set(&chapter->metadata, "title", title, 0);
4211  chapter->id = id;
4212  chapter->time_base = time_base;
4213  chapter->start = start;
4214  chapter->end = end;
4215 
4216  return chapter;
4217 }
4218 
4219 void av_program_add_stream_index(AVFormatContext *ac, int progid, unsigned idx)
4220 {
4221  int i, j;
4222  AVProgram *program = NULL;
4223  void *tmp;
4224 
4225  if (idx >= ac->nb_streams) {
4226  av_log(ac, AV_LOG_ERROR, "stream index %d is not valid\n", idx);
4227  return;
4228  }
4229 
4230  for (i = 0; i < ac->nb_programs; i++) {
4231  if (ac->programs[i]->id != progid)
4232  continue;
4233  program = ac->programs[i];
4234  for (j = 0; j < program->nb_stream_indexes; j++)
4235  if (program->stream_index[j] == idx)
4236  return;
4237 
4238  tmp = av_realloc_array(program->stream_index, program->nb_stream_indexes+1, sizeof(unsigned int));
4239  if (!tmp)
4240  return;
4241  program->stream_index = tmp;
4242  program->stream_index[program->nb_stream_indexes++] = idx;
4243  return;
4244  }
4245 }
4246 
4247 uint64_t ff_ntp_time(void)
4248 {
4249  return (av_gettime() / 1000) * 1000 + NTP_OFFSET_US;
4250 }
4251 
4252 int av_get_frame_filename(char *buf, int buf_size, const char *path, int number)
4253 {
4254  const char *p;
4255  char *q, buf1[20], c;
4256  int nd, len, percentd_found;
4257 
4258  q = buf;
4259  p = path;
4260  percentd_found = 0;
4261  for (;;) {
4262  c = *p++;
4263  if (c == '\0')
4264  break;
4265  if (c == '%') {
4266  do {
4267  nd = 0;
4268  while (av_isdigit(*p))
4269  nd = nd * 10 + *p++ - '0';
4270  c = *p++;
4271  } while (av_isdigit(c));
4272 
4273  switch (c) {
4274  case '%':
4275  goto addchar;
4276  case 'd':
4277  if (percentd_found)
4278  goto fail;
4279  percentd_found = 1;
4280  if (number < 0)
4281  nd += 1;
4282  snprintf(buf1, sizeof(buf1), "%0*d", nd, number);
4283  len = strlen(buf1);
4284  if ((q - buf + len) > buf_size - 1)
4285  goto fail;
4286  memcpy(q, buf1, len);
4287  q += len;
4288  break;
4289  default:
4290  goto fail;
4291  }
4292  } else {
4293 addchar:
4294  if ((q - buf) < buf_size - 1)
4295  *q++ = c;
4296  }
4297  }
4298  if (!percentd_found)
4299  goto fail;
4300  *q = '\0';
4301  return 0;
4302 fail:
4303  *q = '\0';
4304  return -1;
4305 }
4306 
4307 void av_url_split(char *proto, int proto_size,
4308  char *authorization, int authorization_size,
4309  char *hostname, int hostname_size,
4310  int *port_ptr, char *path, int path_size, const char *url)
4311 {
4312  const char *p, *ls, *ls2, *at, *at2, *col, *brk;
4313 
4314  if (port_ptr)
4315  *port_ptr = -1;
4316  if (proto_size > 0)
4317  proto[0] = 0;
4318  if (authorization_size > 0)
4319  authorization[0] = 0;
4320  if (hostname_size > 0)
4321  hostname[0] = 0;
4322  if (path_size > 0)
4323  path[0] = 0;
4324 
4325  /* parse protocol */
4326  if ((p = strchr(url, ':'))) {
4327  av_strlcpy(proto, url, FFMIN(proto_size, p + 1 - url));
4328  p++; /* skip ':' */
4329  if (*p == '/')
4330  p++;
4331  if (*p == '/')
4332  p++;
4333  } else {
4334  /* no protocol means plain filename */
4335  av_strlcpy(path, url, path_size);
4336  return;
4337  }
4338 
4339  /* separate path from hostname */
4340  ls = strchr(p, '/');
4341  ls2 = strchr(p, '?');
4342  if (!ls)
4343  ls = ls2;
4344  else if (ls && ls2)
4345  ls = FFMIN(ls, ls2);
4346  if (ls)
4347  av_strlcpy(path, ls, path_size);
4348  else
4349  ls = &p[strlen(p)]; // XXX
4350 
4351  /* the rest is hostname, use that to parse auth/port */
4352  if (ls != p) {
4353  /* authorization (user[:pass]@hostname) */
4354  at2 = p;
4355  while ((at = strchr(p, '@')) && at < ls) {
4356  av_strlcpy(authorization, at2,
4357  FFMIN(authorization_size, at + 1 - at2));
4358  p = at + 1; /* skip '@' */
4359  }
4360 
4361  if (*p == '[' && (brk = strchr(p, ']')) && brk < ls) {
4362  /* [host]:port */
4363  av_strlcpy(hostname, p + 1,
4364  FFMIN(hostname_size, brk - p));
4365  if (brk[1] == ':' && port_ptr)
4366  *port_ptr = atoi(brk + 2);
4367  } else if ((col = strchr(p, ':')) && col < ls) {
4368  av_strlcpy(hostname, p,
4369  FFMIN(col + 1 - p, hostname_size));
4370  if (port_ptr)
4371  *port_ptr = atoi(col + 1);
4372  } else
4373  av_strlcpy(hostname, p,
4374  FFMIN(ls + 1 - p, hostname_size));
4375  }
4376 }
4377 
4378 char *ff_data_to_hex(char *buff, const uint8_t *src, int s, int lowercase)
4379 {
4380  int i;
4381  static const char hex_table_uc[16] = { '0', '1', '2', '3',
4382  '4', '5', '6', '7',
4383  '8', '9', 'A', 'B',
4384  'C', 'D', 'E', 'F' };
4385  static const char hex_table_lc[16] = { '0', '1', '2', '3',
4386  '4', '5', '6', '7',
4387  '8', '9', 'a', 'b',
4388  'c', 'd', 'e', 'f' };
4389  const char *hex_table = lowercase ? hex_table_lc : hex_table_uc;
4390 
4391  for (i = 0; i < s; i++) {
4392  buff[i * 2] = hex_table[src[i] >> 4];
4393  buff[i * 2 + 1] = hex_table[src[i] & 0xF];
4394  }
4395 
4396  return buff;
4397 }
4398 
4399 int ff_hex_to_data(uint8_t *data, const char *p)
4400 {
4401  int c, len, v;
4402 
4403  len = 0;
4404  v = 1;
4405  for (;;) {
4406  p += strspn(p, SPACE_CHARS);
4407  if (*p == '\0')
4408  break;
4409  c = av_toupper((unsigned char) *p++);
4410  if (c >= '0' && c <= '9')
4411  c = c - '0';
4412  else if (c >= 'A' && c <= 'F')
4413  c = c - 'A' + 10;
4414  else
4415  break;
4416  v = (v << 4) | c;
4417  if (v & 0x100) {
4418  if (data)
4419  data[len] = v;
4420  len++;
4421  v = 1;
4422  }
4423  }
4424  return len;
4425 }
4426 
4427 void avpriv_set_pts_info(AVStream *s, int pts_wrap_bits,
4428  unsigned int pts_num, unsigned int pts_den)
4429 {
4430  AVRational new_tb;
4431  if (av_reduce(&new_tb.num, &new_tb.den, pts_num, pts_den, INT_MAX)) {
4432  if (new_tb.num != pts_num)
4434  "st:%d removing common factor %d from timebase\n",
4435  s->index, pts_num / new_tb.num);
4436  } else
4438  "st:%d has too large timebase, reducing\n", s->index);
4439 
4440  if (new_tb.num <= 0 || new_tb.den <= 0) {
4442  "Ignoring attempt to set invalid timebase %d/%d for st:%d\n",
4443  new_tb.num, new_tb.den,
4444  s->index);
4445  return;
4446  }
4447  s->time_base = new_tb;
4448 #if FF_API_LAVF_AVCTX
4450  av_codec_set_pkt_timebase(s->codec, new_tb);
4452 #endif
4454  s->pts_wrap_bits = pts_wrap_bits;
4455 }
4456 
4457 void ff_parse_key_value(const char *str, ff_parse_key_val_cb callback_get_buf,
4458  void *context)
4459 {
4460  const char *ptr = str;
4461 
4462  /* Parse key=value pairs. */
4463  for (;;) {
4464  const char *key;
4465  char *dest = NULL, *dest_end;
4466  int key_len, dest_len = 0;
4467 
4468  /* Skip whitespace and potential commas. */
4469  while (*ptr && (av_isspace(*ptr) || *ptr == ','))
4470  ptr++;
4471  if (!*ptr)
4472  break;
4473 
4474  key = ptr;
4475 
4476  if (!(ptr = strchr(key, '=')))
4477  break;
4478  ptr++;
4479  key_len = ptr - key;
4480 
4481  callback_get_buf(context, key, key_len, &dest, &dest_len);
4482  dest_end = dest + dest_len - 1;
4483 
4484  if (*ptr == '\"') {
4485  ptr++;
4486  while (*ptr && *ptr != '\"') {
4487  if (*ptr == '\\') {
4488  if (!ptr[1])
4489  break;
4490  if (dest && dest < dest_end)
4491  *dest++ = ptr[1];
4492  ptr += 2;
4493  } else {
4494  if (dest && dest < dest_end)
4495  *dest++ = *ptr;
4496  ptr++;
4497  }
4498  }
4499  if (*ptr == '\"')
4500  ptr++;
4501  } else {
4502  for (; *ptr && !(av_isspace(*ptr) || *ptr == ','); ptr++)
4503  if (dest && dest < dest_end)
4504  *dest++ = *ptr;
4505  }
4506  if (dest)
4507  *dest = 0;
4508  }
4509 }
4510 
4511 int ff_find_stream_index(AVFormatContext *s, int id)
4512 {
4513  int i;
4514  for (i = 0; i < s->nb_streams; i++)
4515  if (s->streams[i]->id == id)
4516  return i;
4517  return -1;
4518 }
4519 
4521  int std_compliance)
4522 {
4523  if (ofmt) {
4524  unsigned int codec_tag;
4525  if (ofmt->query_codec)
4526  return ofmt->query_codec(codec_id, std_compliance);
4527  else if (ofmt->codec_tag)
4528  return !!av_codec_get_tag2(ofmt->codec_tag, codec_id, &codec_tag);
4529  else if (codec_id == ofmt->video_codec ||
4530  codec_id == ofmt->audio_codec ||
4531  codec_id == ofmt->subtitle_codec)
4532  return 1;
4533  }
4534  return AVERROR_PATCHWELCOME;
4535 }
4536 
4538 {
4539 #if CONFIG_NETWORK
4540  int ret;
4542  if ((ret = ff_network_init()) < 0)
4543  return ret;
4544  if ((ret = ff_tls_init()) < 0)
4545  return ret;
4546 #endif
4547  return 0;
4548 }
4549 
4551 {
4552 #if CONFIG_NETWORK
4553  ff_network_close();
4554  ff_tls_deinit();
4556 #endif
4557  return 0;
4558 }
4559 
4561  uint64_t channel_layout, int32_t sample_rate,
4563 {
4564  uint32_t flags = 0;
4565  int size = 4;
4566  uint8_t *data;
4567  if (!pkt)
4568  return AVERROR(EINVAL);
4569  if (channels) {
4570  size += 4;
4572  }
4573  if (channel_layout) {
4574  size += 8;
4576  }
4577  if (sample_rate) {
4578  size += 4;
4580  }
4581  if (width || height) {
4582  size += 8;
4584  }
4586  if (!data)
4587  return AVERROR(ENOMEM);
4588  bytestream_put_le32(&data, flags);
4589  if (channels)
4590  bytestream_put_le32(&data, channels);
4591  if (channel_layout)
4592  bytestream_put_le64(&data, channel_layout);
4593  if (sample_rate)
4594  bytestream_put_le32(&data, sample_rate);
4595  if (width || height) {
4596  bytestream_put_le32(&data, width);
4597  bytestream_put_le32(&data, height);
4598  }
4599  return 0;
4600 }
4601 
4602 AVRational av_guess_sample_aspect_ratio(AVFormatContext *format, AVStream *stream, AVFrame *frame)
4603 {
4604  AVRational undef = {0, 1};
4605  AVRational stream_sample_aspect_ratio = stream ? stream->sample_aspect_ratio : undef;
4606  AVRational codec_sample_aspect_ratio = stream && stream->codecpar ? stream->codecpar->sample_aspect_ratio : undef;
4607  AVRational frame_sample_aspect_ratio = frame ? frame->sample_aspect_ratio : codec_sample_aspect_ratio;
4608 
4609  av_reduce(&stream_sample_aspect_ratio.num, &stream_sample_aspect_ratio.den,
4610  stream_sample_aspect_ratio.num, stream_sample_aspect_ratio.den, INT_MAX);
4611  if (stream_sample_aspect_ratio.num <= 0 || stream_sample_aspect_ratio.den <= 0)
4612  stream_sample_aspect_ratio = undef;
4613 
4614  av_reduce(&frame_sample_aspect_ratio.num, &frame_sample_aspect_ratio.den,
4615  frame_sample_aspect_ratio.num, frame_sample_aspect_ratio.den, INT_MAX);
4616  if (frame_sample_aspect_ratio.num <= 0 || frame_sample_aspect_ratio.den <= 0)
4617  frame_sample_aspect_ratio = undef;
4618 
4619  if (stream_sample_aspect_ratio.num)
4620  return stream_sample_aspect_ratio;
4621  else
4622  return frame_sample_aspect_ratio;
4623 }
4624 
4625 AVRational av_guess_frame_rate(AVFormatContext *format, AVStream *st, AVFrame *frame)
4626 {
4627  AVRational fr = st->r_frame_rate;
4628  AVRational codec_fr = st->internal->avctx->framerate;
4629  AVRational avg_fr = st->avg_frame_rate;
4630 
4631  if (avg_fr.num > 0 && avg_fr.den > 0 && fr.num > 0 && fr.den > 0 &&
4632  av_q2d(avg_fr) < 70 && av_q2d(fr) > 210) {
4633  fr = avg_fr;
4634  }
4635 
4636 
4637  if (st->internal->avctx->ticks_per_frame > 1) {
4638  if ( codec_fr.num > 0 && codec_fr.den > 0 &&
4639  (fr.num == 0 || av_q2d(codec_fr) < av_q2d(fr)*0.7 && fabs(1.0 - av_q2d(av_div_q(avg_fr, fr))) > 0.1))
4640  fr = codec_fr;
4641  }
4642 
4643  return fr;
4644 }
4645 
4646 int avformat_match_stream_specifier(AVFormatContext *s, AVStream *st,
4647  const char *spec)
4648 {
4649  if (*spec <= '9' && *spec >= '0') /* opt:index */
4650  return strtol(spec, NULL, 0) == st->index;
4651  else if (*spec == 'v' || *spec == 'a' || *spec == 's' || *spec == 'd' ||
4652  *spec == 't' || *spec == 'V') { /* opt:[vasdtV] */
4653  enum AVMediaType type;
4654  int nopic = 0;
4655 
4656  switch (*spec++) {
4657  case 'v': type = AVMEDIA_TYPE_VIDEO; break;
4658  case 'a': type = AVMEDIA_TYPE_AUDIO; break;
4659  case 's': type = AVMEDIA_TYPE_SUBTITLE; break;
4660  case 'd': type = AVMEDIA_TYPE_DATA; break;
4661  case 't': type = AVMEDIA_TYPE_ATTACHMENT; break;
4662  case 'V': type = AVMEDIA_TYPE_VIDEO; nopic = 1; break;
4663  default: av_assert0(0);
4664  }
4665 #if FF_API_LAVF_AVCTX
4667  if (type != st->codecpar->codec_type
4668  && (st->codecpar->codec_type != AVMEDIA_TYPE_UNKNOWN || st->codec->codec_type != type))
4669  return 0;
4671 #else
4672  if (type != st->codecpar->codec_type)
4673  return 0;
4674 #endif
4675  if (nopic && (st->disposition & AV_DISPOSITION_ATTACHED_PIC))
4676  return 0;
4677  if (*spec++ == ':') { /* possibly followed by :index */
4678  int i, index = strtol(spec, NULL, 0);
4679  for (i = 0; i < s->nb_streams; i++) {
4680 #if FF_API_LAVF_AVCTX
4682  if ((s->streams[i]->codecpar->codec_type == type
4683  || s->streams[i]->codec->codec_type == type
4684  ) &&
4685  !(nopic && (st->disposition & AV_DISPOSITION_ATTACHED_PIC)) &&
4686  index-- == 0)
4687  return i == st->index;
4689 #else
4690  if ((s->streams[i]->codecpar->codec_type == type) &&
4691  !(nopic && (st->disposition & AV_DISPOSITION_ATTACHED_PIC)) &&
4692  index-- == 0)
4693  return i == st->index;
4694 #endif
4695  }
4696  return 0;
4697  }
4698  return 1;
4699  } else if (*spec == 'p' && *(spec + 1) == ':') {
4700  int prog_id, i, j;
4701  char *endptr;
4702  spec += 2;
4703  prog_id = strtol(spec, &endptr, 0);
4704  for (i = 0; i < s->nb_programs; i++) {
4705  if (s->programs[i]->id != prog_id)
4706  continue;
4707 
4708  if (*endptr++ == ':') {
4709  int stream_idx = strtol(endptr, NULL, 0);
4710  return stream_idx >= 0 &&
4711  stream_idx < s->programs[i]->nb_stream_indexes &&
4712  st->index == s->programs[i]->stream_index[stream_idx];
4713  }
4714 
4715  for (j = 0; j < s->programs[i]->nb_stream_indexes; j++)
4716  if (st->index == s->programs[i]->stream_index[j])
4717  return 1;
4718  }
4719  return 0;
4720  } else if (*spec == '#' ||
4721  (*spec == 'i' && *(spec + 1) == ':')) {
4722  int stream_id;
4723  char *endptr;
4724  spec += 1 + (*spec == 'i');
4725  stream_id = strtol(spec, &endptr, 0);
4726  if (!*endptr)
4727  return stream_id == st->id;
4728  } else if (*spec == 'm' && *(spec + 1) == ':') {
4730  char *key, *val;
4731  int ret;
4732 
4733  spec += 2;
4734  val = strchr(spec, ':');
4735 
4736  key = val ? av_strndup(spec, val - spec) : av_strdup(spec);
4737  if (!key)
4738  return AVERROR(ENOMEM);
4739 
4740  tag = av_dict_get(st->metadata, key, NULL, 0);
4741  if (tag) {
4742  if (!val || !strcmp(tag->value, val + 1))
4743  ret = 1;
4744  else
4745  ret = 0;
4746  } else
4747  ret = 0;
4748 
4749  av_freep(&key);
4750  return ret;
4751  } else if (*spec == 'u') {
4752  AVCodecParameters *par = st->codecpar;
4753 #if FF_API_LAVF_AVCTX
4755  AVCodecContext *codec = st->codec;
4757 #endif
4758  int val;
4759  switch (par->codec_type) {
4760  case AVMEDIA_TYPE_AUDIO:
4761  val = par->sample_rate && par->channels;
4762 #if FF_API_LAVF_AVCTX
4763  val = val || (codec->sample_rate && codec->channels);
4764 #endif
4765  if (par->format == AV_SAMPLE_FMT_NONE
4767  && codec->sample_fmt == AV_SAMPLE_FMT_NONE
4768 #endif
4769  )
4770  return 0;
4771  break;
4772  case AVMEDIA_TYPE_VIDEO:
4773  val = par->width && par->height;
4774 #if FF_API_LAVF_AVCTX
4775  val = val || (codec->width && codec->height);
4776 #endif
4777  if (par->format == AV_PIX_FMT_NONE
4779  && codec->pix_fmt == AV_PIX_FMT_NONE
4780 #endif
4781  )
4782  return 0;
4783  break;
4784  case AVMEDIA_TYPE_UNKNOWN:
4785  val = 0;
4786  break;
4787  default:
4788  val = 1;
4789  break;
4790  }
4791 #if FF_API_LAVF_AVCTX
4792  return (par->codec_id != AV_CODEC_ID_NONE || codec->codec_id != AV_CODEC_ID_NONE) && val != 0;
4793 #else
4794  return par->codec_id != AV_CODEC_ID_NONE && val != 0;
4795 #endif
4796  } else if (!*spec) /* empty specifier, matches everything */
4797  return 1;
4798 
4799  av_log(s, AV_LOG_ERROR, "Invalid stream specifier: %s.\n", spec);
4800  return AVERROR(EINVAL);
4801 }
4802 
4804 {
4805  static const uint8_t avci100_1080p_extradata[] = {
4806  // SPS
4807  0x00, 0x00, 0x00, 0x01, 0x67, 0x7a, 0x10, 0x29,
4808  0xb6, 0xd4, 0x20, 0x22, 0x33, 0x19, 0xc6, 0x63,
4809  0x23, 0x21, 0x01, 0x11, 0x98, 0xce, 0x33, 0x19,
4810  0x18, 0x21, 0x02, 0x56, 0xb9, 0x3d, 0x7d, 0x7e,
4811  0x4f, 0xe3, 0x3f, 0x11, 0xf1, 0x9e, 0x08, 0xb8,
4812  0x8c, 0x54, 0x43, 0xc0, 0x78, 0x02, 0x27, 0xe2,
4813  0x70, 0x1e, 0x30, 0x10, 0x10, 0x14, 0x00, 0x00,
4814  0x03, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0xca,
4815  0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
4816  // PPS
4817  0x00, 0x00, 0x00, 0x01, 0x68, 0xce, 0x33, 0x48,
4818  0xd0
4819  };
4820  static const uint8_t avci100_1080i_extradata[] = {
4821  // SPS
4822  0x00, 0x00, 0x00, 0x01, 0x67, 0x7a, 0x10, 0x29,
4823  0xb6, 0xd4, 0x20, 0x22, 0x33, 0x19, 0xc6, 0x63,
4824  0x23, 0x21, 0x01, 0x11, 0x98, 0xce, 0x33, 0x19,
4825  0x18, 0x21, 0x03, 0x3a, 0x46, 0x65, 0x6a, 0x65,
4826  0x24, 0xad, 0xe9, 0x12, 0x32, 0x14, 0x1a, 0x26,
4827  0x34, 0xad, 0xa4, 0x41, 0x82, 0x23, 0x01, 0x50,
4828  0x2b, 0x1a, 0x24, 0x69, 0x48, 0x30, 0x40, 0x2e,
4829  0x11, 0x12, 0x08, 0xc6, 0x8c, 0x04, 0x41, 0x28,
4830  0x4c, 0x34, 0xf0, 0x1e, 0x01, 0x13, 0xf2, 0xe0,
4831  0x3c, 0x60, 0x20, 0x20, 0x28, 0x00, 0x00, 0x03,
4832  0x00, 0x08, 0x00, 0x00, 0x03, 0x01, 0x94, 0x20,
4833  // PPS
4834  0x00, 0x00, 0x00, 0x01, 0x68, 0xce, 0x33, 0x48,
4835  0xd0
4836  };
4837  static const uint8_t avci50_1080p_extradata[] = {
4838  // SPS
4839  0x00, 0x00, 0x00, 0x01, 0x67, 0x6e, 0x10, 0x28,
4840  0xa6, 0xd4, 0x20, 0x32, 0x33, 0x0c, 0x71, 0x18,
4841  0x88, 0x62, 0x10, 0x19, 0x19, 0x86, 0x38, 0x8c,
4842  0x44, 0x30, 0x21, 0x02, 0x56, 0x4e, 0x6f, 0x37,
4843  0xcd, 0xf9, 0xbf, 0x81, 0x6b, 0xf3, 0x7c, 0xde,
4844  0x6e, 0x6c, 0xd3, 0x3c, 0x05, 0xa0, 0x22, 0x7e,
4845  0x5f, 0xfc, 0x00, 0x0c, 0x00, 0x13, 0x8c, 0x04,
4846  0x04, 0x05, 0x00, 0x00, 0x03, 0x00, 0x01, 0x00,
4847  0x00, 0x03, 0x00, 0x32, 0x84, 0x00, 0x00, 0x00,
4848  // PPS
4849  0x00, 0x00, 0x00, 0x01, 0x68, 0xee, 0x31, 0x12,
4850  0x11
4851  };
4852  static const uint8_t avci50_1080i_extradata[] = {
4853  // SPS
4854  0x00, 0x00, 0x00, 0x01, 0x67, 0x6e, 0x10, 0x28,
4855  0xa6, 0xd4, 0x20, 0x32, 0x33, 0x0c, 0x71, 0x18,
4856  0x88, 0x62, 0x10, 0x19, 0x19, 0x86, 0x38, 0x8c,
4857  0x44, 0x30, 0x21, 0x02, 0x56, 0x4e, 0x6e, 0x61,
4858  0x87, 0x3e, 0x73, 0x4d, 0x98, 0x0c, 0x03, 0x06,
4859  0x9c, 0x0b, 0x73, 0xe6, 0xc0, 0xb5, 0x18, 0x63,
4860  0x0d, 0x39, 0xe0, 0x5b, 0x02, 0xd4, 0xc6, 0x19,
4861  0x1a, 0x79, 0x8c, 0x32, 0x34, 0x24, 0xf0, 0x16,
4862  0x81, 0x13, 0xf7, 0xff, 0x80, 0x02, 0x00, 0x01,
4863  0xf1, 0x80, 0x80, 0x80, 0xa0, 0x00, 0x00, 0x03,
4864  0x00, 0x20, 0x00, 0x00, 0x06, 0x50, 0x80, 0x00,
4865  // PPS
4866  0x00, 0x00, 0x00, 0x01, 0x68, 0xee, 0x31, 0x12,
4867  0x11
4868  };
4869  static const uint8_t avci100_720p_extradata[] = {
4870  // SPS
4871  0x00, 0x00, 0x00, 0x01, 0x67, 0x7a, 0x10, 0x29,
4872  0xb6, 0xd4, 0x20, 0x2a, 0x33, 0x1d, 0xc7, 0x62,
4873  0xa1, 0x08, 0x40, 0x54, 0x66, 0x3b, 0x8e, 0xc5,
4874  0x42, 0x02, 0x10, 0x25, 0x64, 0x2c, 0x89, 0xe8,
4875  0x85, 0xe4, 0x21, 0x4b, 0x90, 0x83, 0x06, 0x95,
4876  0xd1, 0x06, 0x46, 0x97, 0x20, 0xc8, 0xd7, 0x43,
4877  0x08, 0x11, 0xc2, 0x1e, 0x4c, 0x91, 0x0f, 0x01,
4878  0x40, 0x16, 0xec, 0x07, 0x8c, 0x04, 0x04, 0x05,
4879  0x00, 0x00, 0x03, 0x00, 0x01, 0x00, 0x00, 0x03,
4880  0x00, 0x64, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00,
4881  // PPS
4882  0x00, 0x00, 0x00, 0x01, 0x68, 0xce, 0x31, 0x12,
4883  0x11
4884  };
4885  static const uint8_t avci50_720p_extradata[] = {
4886  // SPS
4887  0x00, 0x00, 0x00, 0x01, 0x67, 0x6e, 0x10, 0x20,
4888  0xa6, 0xd4, 0x20, 0x32, 0x33, 0x0c, 0x71, 0x18,
4889  0x88, 0x62, 0x10, 0x19, 0x19, 0x86, 0x38, 0x8c,
4890  0x44, 0x30, 0x21, 0x02, 0x56, 0x4e, 0x6f, 0x37,
4891  0xcd, 0xf9, 0xbf, 0x81, 0x6b, 0xf3, 0x7c, 0xde,
4892  0x6e, 0x6c, 0xd3, 0x3c, 0x0f, 0x01, 0x6e, 0xff,
4893  0xc0, 0x00, 0xc0, 0x01, 0x38, 0xc0, 0x40, 0x40,
4894  0x50, 0x00, 0x00, 0x03, 0x00, 0x10, 0x00, 0x00,
4895  0x06, 0x48, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
4896  // PPS
4897  0x00, 0x00, 0x00, 0x01, 0x68, 0xee, 0x31, 0x12,
4898  0x11
4899  };
4900 
4901  const uint8_t *data = NULL;
4902  int size = 0;
4903 
4904  if (st->codecpar->width == 1920) {
4906  data = avci100_1080p_extradata;
4907  size = sizeof(avci100_1080p_extradata);
4908  } else {
4909  data = avci100_1080i_extradata;
4910  size = sizeof(avci100_1080i_extradata);
4911  }
4912  } else if (st->codecpar->width == 1440) {
4914  data = avci50_1080p_extradata;
4915  size = sizeof(avci50_1080p_extradata);
4916  } else {
4917  data = avci50_1080i_extradata;
4918  size = sizeof(avci50_1080i_extradata);
4919  }
4920  } else if (st->codecpar->width == 1280) {
4921  data = avci100_720p_extradata;
4922  size = sizeof(avci100_720p_extradata);
4923  } else if (st->codecpar->width == 960) {
4924  data = avci50_720p_extradata;
4925  size = sizeof(avci50_720p_extradata);
4926  }
4927 
4928  if (!size)
4929  return 0;
4930 
4931  av_freep(&st->codecpar->extradata);
4932  if (ff_alloc_extradata(st->codecpar, size))
4933  return AVERROR(ENOMEM);
4934  memcpy(st->codecpar->extradata, data, size);
4935 
4936  return 0;
4937 }
4938 
4940  int *size)
4941 {
4942  int i;
4943 
4944  for (i = 0; i < st->nb_side_data; i++) {
4945  if (st->side_data[i].type == type) {
4946  if (size)
4947  *size = st->side_data[i].size;
4948  return st->side_data[i].data;
4949  }
4950  }
4951  return NULL;
4952 }
4953 
4955  int size)
4956 {
4957  AVPacketSideData *sd, *tmp;
4958  int i;
4959  uint8_t *data = av_malloc(size);
4960 
4961  if (!data)
4962  return NULL;
4963 
4964  for (i = 0; i < st->nb_side_data; i++) {
4965  sd = &st->side_data[i];
4966 
4967  if (sd->type == type) {
4968  av_freep(&sd->data);
4969  sd->data = data;
4970  sd->size = size;
4971  return sd->data;
4972  }
4973  }
4974 
4975  tmp = av_realloc_array(st->side_data, st->nb_side_data + 1, sizeof(*tmp));
4976  if (!tmp) {
4977  av_freep(&data);
4978  return NULL;
4979  }
4980 
4981  st->side_data = tmp;
4982  st->nb_side_data++;
4983 
4984  sd = &st->side_data[st->nb_side_data - 1];
4985  sd->type = type;
4986  sd->data = data;
4987  sd->size = size;
4988  return data;
4989 }
4990 
4991 int ff_stream_add_bitstream_filter(AVStream *st, const char *name, const char *args)
4992 {
4993  int ret;
4994  const AVBitStreamFilter *bsf;
4995  AVBSFContext *bsfc;
4996  AVCodecParameters *in_par;
4997 
4998  if (!(bsf = av_bsf_get_by_name(name))) {
4999  av_log(NULL, AV_LOG_ERROR, "Unknown bitstream filter '%s'\n", name);
5000  return AVERROR_BSF_NOT_FOUND;
5001  }
5002 
5003  if ((ret = av_bsf_alloc(bsf, &bsfc)) < 0)
5004  return ret;
5005 
5006  if (st->internal->nb_bsfcs) {
5007  in_par = st->internal->bsfcs[st->internal->nb_bsfcs - 1]->par_out;
5008  bsfc->time_base_in = st->internal->bsfcs[st->internal->nb_bsfcs - 1]->time_base_out;
5009  } else {
5010  in_par = st->codecpar;
5011  bsfc->time_base_in = st->time_base;
5012  }
5013 
5014  if ((ret = avcodec_parameters_copy(bsfc->par_in, in_par)) < 0) {
5015  av_bsf_free(&bsfc);
5016  return ret;
5017  }
5018 
5019  if (args && bsfc->filter->priv_class) {
5020  const AVOption *opt = av_opt_next(bsfc->priv_data, NULL);
5021  const char * shorthand[2] = {NULL};
5022 
5023  if (opt)
5024  shorthand[0] = opt->name;
5025 
5026  if ((ret = av_opt_set_from_string(bsfc->priv_data, args, shorthand, "=", ":")) < 0) {
5027  av_bsf_free(&bsfc);
5028  return ret;
5029  }
5030  }
5031 
5032  if ((ret = av_bsf_init(bsfc)) < 0) {
5033  av_bsf_free(&bsfc);
5034  return ret;
5035  }
5036 
5037  if ((ret = av_dynarray_add_nofree(&st->internal->bsfcs, &st->internal->nb_bsfcs, bsfc))) {
5038  av_bsf_free(&bsfc);
5039  return ret;
5040  }
5041 
5043  "Automatically inserted bitstream filter '%s'; args='%s'\n",
5044  name, args ? args : "");
5045  return 1;
5046 }
5047 
5048 #if FF_API_OLD_BSF
5050 int av_apply_bitstream_filters(AVCodecContext *codec, AVPacket *pkt,
5052 {
5053  int ret = 0;
5054  while (bsfc) {
5055  AVPacket new_pkt = *pkt;
5056  int a = av_bitstream_filter_filter(bsfc, codec, NULL,
5057  &new_pkt.data, &new_pkt.size,
5058  pkt->data, pkt->size,
5059  pkt->flags & AV_PKT_FLAG_KEY);
5060  if (a == 0 && new_pkt.size == 0 && new_pkt.side_data_elems == 0) {
5061  av_packet_unref(pkt);
5062  memset(pkt, 0, sizeof(*pkt));
5063  return 0;
5064  }
5065  if(a == 0 && new_pkt.data != pkt->data) {
5066  uint8_t *t = av_malloc(new_pkt.size + AV_INPUT_BUFFER_PADDING_SIZE); //the new should be a subset of the old so cannot overflow
5067  if (t) {
5068  memcpy(t, new_pkt.data, new_pkt.size);
5069  memset(t + new_pkt.size, 0, AV_INPUT_BUFFER_PADDING_SIZE);
5070  new_pkt.data = t;
5071  new_pkt.buf = NULL;
5072  a = 1;
5073  } else {
5074  a = AVERROR(ENOMEM);
5075  }
5076  }
5077  if (a > 0) {
5078  new_pkt.buf = av_buffer_create(new_pkt.data, new_pkt.size,
5080  if (new_pkt.buf) {
5081  pkt->side_data = NULL;
5082  pkt->side_data_elems = 0;
5083  av_packet_unref(pkt);
5084  } else {
5085  av_freep(&new_pkt.data);
5086  a = AVERROR(ENOMEM);
5087  }
5088  }
5089  if (a < 0) {
5090  av_log(codec, AV_LOG_ERROR,
5091  "Failed to open bitstream filter %s for stream %d with codec %s",
5092  bsfc->filter->name, pkt->stream_index,
5093  codec->codec ? codec->codec->name : "copy");
5094  ret = a;
5095  break;
5096  }
5097  *pkt = new_pkt;
5098 
5099  bsfc = bsfc->next;
5100  }
5101  return ret;
5102 }
5104 #endif
5105 
5106 void ff_format_io_close(AVFormatContext *s, AVIOContext **pb)
5107 {
5108  if (*pb)
5109  s->io_close(s, *pb);
5110  *pb = NULL;
5111 }
5112 
5113 int ff_parse_creation_time_metadata(AVFormatContext *s, int64_t *timestamp, int return_seconds)
5114 {
5115  AVDictionaryEntry *entry;
5116  int64_t parsed_timestamp;
5117  int ret;
5118  if ((entry = av_dict_get(s->metadata, "creation_time", NULL, 0))) {
5119  if ((ret = av_parse_time(&parsed_timestamp, entry->value, 0)) >= 0) {
5120  *timestamp = return_seconds ? parsed_timestamp / 1000000 : parsed_timestamp;
5121  return 1;
5122  } else {
5123  av_log(s, AV_LOG_WARNING, "Failed to parse creation_time %s\n", entry->value);
5124  return ret;
5125  }
5126  }
5127  return 0;
5128 }
5129 
5130 int ff_standardize_creation_time(AVFormatContext *s)
5131 {
5132  int64_t timestamp;
5133  int ret = ff_parse_creation_time_metadata(s, &timestamp, 0);
5134  if (ret == 1) {
5135  time_t seconds = timestamp / 1000000;
5136  struct tm *ptm, tmbuf;
5137  ptm = gmtime_r(&seconds, &tmbuf);
5138  if (ptm) {
5139  char buf[32];
5140  if (!strftime(buf, sizeof(buf), "%Y-%m-%dT%H:%M:%S", ptm))
5141  return AVERROR_EXTERNAL;
5142  av_strlcatf(buf, sizeof(buf), ".%06dZ", (int)(timestamp % 1000000));
5143  av_dict_set(&s->metadata, "creation_time", buf, 0);
5144  } else {
5145  return AVERROR_EXTERNAL;
5146  }
5147  }
5148  return ret;
5149 }
5150 
5151 int ff_get_packet_palette(AVFormatContext *s, AVPacket *pkt, int ret, uint32_t *palette)
5152 {
5153  uint8_t *side_data;
5154  int size;
5155 
5156  side_data = av_packet_get_side_data(pkt, AV_PKT_DATA_PALETTE, &size);
5157  if (side_data) {
5158  if (size != AVPALETTE_SIZE) {
5159  av_log(s, AV_LOG_ERROR, "Invalid palette side data\n");
5160  return AVERROR_INVALIDDATA;
5161  }
5162  memcpy(palette, side_data, AVPALETTE_SIZE);
5163  return 1;
5164  }
5165 
5166  if (ret == CONTAINS_PAL) {
5167  int i;
5168  for (i = 0; i < AVPALETTE_COUNT; i++)
5169  palette[i] = AV_RL32(pkt->data + pkt->size - AVPALETTE_SIZE + i*4);
5170  return 1;
5171  }
5172 
5173  return 0;
5174 }
5175 
5177 {
5178  int ret;
5179  char *str;
5180 
5181  ret = av_bprint_finalize(buf, &str);
5182  if (ret < 0)
5183  return ret;
5184  if (!av_bprint_is_complete(buf)) {
5185  av_free(str);
5186  return AVERROR(ENOMEM);
5187  }
5188 
5189  par->extradata = str;
5190  /* Note: the string is NUL terminated (so extradata can be read as a
5191  * string), but the ending character is not accounted in the size (in
5192  * binary formats you are likely not supposed to mux that character). When
5193  * extradata is copied, it is also padded with AV_INPUT_BUFFER_PADDING_SIZE
5194  * zeros. */
5195  par->extradata_size = buf->len;
5196  return 0;
5197 }
unsigned int nb_chapters
Number of chapters in AVChapter array.
Definition: avformat.h:1528
static int add_to_pktbuf(AVPacketList **packet_buffer, AVPacket *pkt, AVPacketList **plast_pktl, int ref)
Definition: utils.c:392
unsigned int max_index_size
Maximum amount of memory in bytes to use for the index of each stream.
Definition: avformat.h:1509
void av_url_split(char *proto, int proto_size, char *authorization, int authorization_size, char *hostname, int hostname_size, int *port_ptr, char *path, int path_size, const char *url)
Split a URL string into components.
Definition: utils.c:4307
#define AVSEEK_FLAG_BACKWARD
Definition: avformat.h:2366
int64_t probesize
Maximum size of the data read from input for determining the input container format.
Definition: avformat.h:1465
static void free_stream(AVStream **pst)
Definition: utils.c:3945
int av_opt_get_dict_val(void *obj, const char *name, int search_flags, AVDictionary **out_val)
Definition: opt.c:972
void av_bsf_free(AVBSFContext **ctx)
Free a bitstream filter context and everything associated with it; write NULL into the supplied point...
Definition: bsf.c:33
int64_t first_dts
Timestamp corresponding to the last dts sync point.
Definition: avformat.h:1058
#define NULL
Definition: coverity.c:32
AVChapter * avpriv_new_chapter(AVFormatContext *s, int id, AVRational time_base, int64_t start, int64_t end, const char *title)
Add a new chapter.
Definition: utils.c:4189
const struct AVCodec * codec
Definition: avcodec.h:1658
full parsing and interpolation of timestamps for frames not starting on a packet boundary ...
Definition: avformat.h:808
AVRational framerate
Definition: avcodec.h:3338
const char const char void * val
Definition: avisynth_c.h:634
#define AV_CODEC_PROP_INTRA_ONLY
Codec uses only intra compression.
Definition: avcodec.h:691
enum AVFieldOrder field_order
Video only.
Definition: avcodec.h:4003
static void fill_all_stream_timings(AVFormatContext *ic)
Definition: utils.c:2541
#define AVFMT_NOBINSEARCH
Format does not allow to fall back on binary search via read_timestamp.
Definition: avformat.h:490
int64_t duration_gcd
Definition: avformat.h:1022
int ff_get_packet_palette(AVFormatContext *s, AVPacket *pkt, int ret, uint32_t *palette)
Retrieves the palette from a packet, either from side data, or appended to the video data in the pack...
Definition: utils.c:5151
const char * s
Definition: avisynth_c.h:631
Bytestream IO Context.
Definition: avio.h:147
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition: error.h:59
const AVClass * priv_class
A class for the private data, used to declare bitstream filter private AVOptions. ...
Definition: avcodec.h:5742
enum AVCodecID codec_id
Definition: ffmpeg_vaapi.c:149
static void update_initial_durations(AVFormatContext *s, AVStream *st, int stream_index, int duration)
Definition: utils.c:1073
AVProbeData probe_data
Definition: avformat.h:1081
int64_t avio_size(AVIOContext *s)
Get the filesize.
Definition: aviobuf.c:309
AVCodecParameters * par_out
Parameters of the output stream.
Definition: avcodec.h:5708
#define AV_PTS_WRAP_ADD_OFFSET
add the format specific offset on wrap detection
Definition: avformat.h:866
static int shift(int a, int b)
Definition: sonic.c:82
AVPacketSideDataType
Definition: avcodec.h:1349
enum AVCodecID id
Definition: internal.h:45
static av_const int av_isdigit(int c)
Locale-independent conversion of ASCII isdigit.
Definition: avstring.h:206
int av_demuxer_open(AVFormatContext *ic)
Definition: utils.c:340
char * recommended_encoder_configuration
String containing paris of key and values describing recommended encoder configuration.
Definition: avformat.h:1213
struct AVPacketList * raw_packet_buffer
Raw packets from the demuxer, prior to parsing and decoding.
Definition: internal.h:90
This structure describes decoded (raw) audio or video data.
Definition: frame.h:184
int64_t(* read_timestamp)(struct AVFormatContext *s, int stream_index, int64_t *pos, int64_t pos_limit)
Get the next timestamp in stream[stream_index].time_base units.
Definition: avformat.h:759
AVIOInterruptCB interrupt_callback
Custom interrupt callbacks for the I/O layer.
Definition: avformat.h:1577
AVOption.
Definition: opt.h:245
ptrdiff_t const GLvoid * data
Definition: opengl_enc.c:101
void(* ff_parse_key_val_cb)(void *context, const char *key, int key_len, char **dest, int *dest_len)
Callback function type for ff_parse_key_value.
Definition: internal.h:284
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: utils.c:1900
static int64_t ff_read_timestamp(AVFormatContext *s, int stream_index, int64_t *ppos, int64_t pos_limit, int64_t(*read_timestamp)(struct AVFormatContext *, int, int64_t *, int64_t))
Definition: utils.c:2005
static void update_stream_timings(AVFormatContext *ic)
Estimate the stream timings from the one of each components.
Definition: utils.c:2469
struct AVPacketList * parse_queue_end
Definition: internal.h:96
enum AVCodecID id
Definition: mxfenc.c:104
int coded_width
Bitstream width / height, may be different from width/height e.g.
Definition: avcodec.h:1851
static int get_std_framerate(int i)
Definition: utils.c:3068
const char * fmt
Definition: avisynth_c.h:632
static int update_stream_avctx(AVFormatContext *s)
Definition: utils.c:442
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
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:1686
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: avformat.h:1139
#define AV_LOG_WARNING
Something somehow does not look correct.
Definition: log.h:182
int64_t bit_rate
the average bitrate
Definition: avcodec.h:1714
int64_t pos
byte position in stream, -1 if unknown
Definition: avcodec.h:1600
void av_shrink_packet(AVPacket *pkt, int size)
Reduce packet size, correctly zeroing padding.
Definition: avpacket.c:101
int ff_seek_frame_binary(AVFormatContext *s, int stream_index, int64_t target_ts, int flags)
Perform a binary search using av_index_search_timestamp() and AVInputFormat.read_timestamp().
Definition: utils.c:2014
int64_t pts_buffer[MAX_REORDER_DELAY+1]
Definition: avformat.h:1083
int av_parse_time(int64_t *timeval, const char *timestr, int duration)
Parse timestr and return in *time a corresponding number of microseconds.
Definition: parseutils.c:559
int64_t pos
Definition: avformat.h:816
int probe_packets
Number of packets to buffer for codec probing.
Definition: avformat.h:1066
#define NTP_OFFSET_US
Definition: internal.h:207
#define AVSEEK_FLAG_ANY
seek to any frame, even non-keyframes
Definition: avformat.h:2368
AVRational sample_aspect_ratio
Video only.
Definition: avcodec.h:3998
int64_t data_offset
offset of the first packet
Definition: internal.h:82
struct FFFrac * priv_pts
Definition: avformat.h:1222
#define a0
Definition: regdef.h:46
AVRational av_guess_sample_aspect_ratio(AVFormatContext *format, AVStream *stream, AVFrame *frame)
Guess the sample aspect ratio of a frame, based on both the stream and the frame aspect ratio...
Definition: utils.c:4602
enum AVCodecID video_codec
default video codec
Definition: avformat.h:533
void av_opt_set_defaults(void *s)
Set the values of all AVOption fields to their default values.
Definition: opt.c:1264
int64_t first_discard_sample
If not 0, the first audio sample that should be discarded from the stream.
Definition: avformat.h:1147
attribute_deprecated int av_bitstream_filter_filter(AVBitStreamFilterContext *bsfc, AVCodecContext *avctx, const char *args, uint8_t **poutbuf, int *poutbuf_size, const uint8_t *buf, int buf_size, int keyframe)
Filter bitstream.
static int64_t wrap_timestamp(AVStream *st, int64_t timestamp)
Wrap a given time stamp, if there is an indication for an overflow.
Definition: utils.c:93
enum AVCodecID codec_id
Specific type of the encoded data (the codec used).
Definition: avcodec.h:3922
const struct AVBitStreamFilter * filter
The bitstream filter this context is an instance of.
Definition: avcodec.h:5686
int64_t pts_wrap_reference
Internal data to check for wrapping of the time stamp.
Definition: avformat.h:1171
AVRational sample_aspect_ratio
sample aspect ratio (0 if unknown)
Definition: avformat.h:943
void av_codec_set_pkt_timebase(AVCodecContext *avctx, AVRational val)
int num
numerator
Definition: rational.h:44
int ff_index_search_timestamp(const AVIndexEntry *entries, int nb_entries, int64_t wanted_timestamp, int flags)
Internal version of av_index_search_timestamp.
Definition: utils.c:1909
The bitstream filter state.
Definition: avcodec.h:5677
int index
stream index in AVFormatContext
Definition: avformat.h:877
int size
Definition: avcodec.h:1581
const char * b
Definition: vf_curves.c:109
static void estimate_timings_from_pts(AVFormatContext *ic, int64_t old_offset)
Definition: utils.c:2617
#define ID3v2_DEFAULT_MAGIC
Default magic bytes for ID3v2 header: "ID3".
Definition: id3v2.h:35
int avio_flags
avio flags, used to force AVIO_FLAG_DIRECT.
Definition: avformat.h:1678
int64_t avio_seek(AVIOContext *s, int64_t offset, int whence)
fseek() equivalent for AVIOContext.
Definition: aviobuf.c:230
#define AVIO_FLAG_READ
read-only
Definition: avio.h:606
#define AVPROBE_PADDING_SIZE
extra allocated bytes at the end of the probe buffer
Definition: avformat.h:473
AVIndexEntry * index_entries
Only used if the format does not support seeking natively.
Definition: avformat.h:1085
static av_const int av_isspace(int c)
Locale-independent conversion of ASCII isspace.
Definition: avstring.h:222
AVFormatInternal * internal
An opaque field for libavformat internal usage.
Definition: avformat.h:1752
const AVBitStreamFilter * av_bsf_get_by_name(const char *name)
int av_log2(unsigned v)
Definition: intmath.c:26
int ff_find_stream_index(AVFormatContext *s, int id)
Find stream index based on format-specific stream ID.
Definition: utils.c:4511
int64_t bit_rate
Total stream bitrate in bit/s, 0 if not available.
Definition: avformat.h:1427
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
Definition: avcodec.h:1877
uint8_t * av_stream_get_side_data(AVStream *st, enum AVPacketSideDataType type, int *size)
Get side information from stream.
Definition: utils.c:4939
#define AV_PTS_WRAP_SUB_OFFSET
subtract the format specific offset on wrap detection
Definition: avformat.h:867
void ff_network_close(void)
Definition: network.c:102
int event_flags
Flags for the user to detect events happening on the file.
Definition: avformat.h:1614
int av_dict_copy(AVDictionary **dst, const AVDictionary *src, int flags)
Copy entries from one AVDictionary struct into another.
Definition: dict.c:216
#define AV_DISPOSITION_HEARING_IMPAIRED
stream for hearing impaired audiences
Definition: avformat.h:842
int avpriv_codec_get_cap_skip_frame_fill_param(const AVCodec *codec)
Definition: utils.c:1163
#define a1
Definition: regdef.h:47
static void estimate_timings_from_bit_rate(AVFormatContext *ic)
Definition: utils.c:2560
int ff_tls_init(void)
Definition: network.c:30
void * priv_data
Definition: avformat.h:891
int64_t avio_skip(AVIOContext *s, int64_t offset)
Skip given number of bytes forward.
Definition: aviobuf.c:304
#define AV_CODEC_CAP_CHANNEL_CONF
Codec should fill in channel configuration and samplerate instead of container.
Definition: avcodec.h:1015
#define AV_DISPOSITION_CLEAN_EFFECTS
stream without voice
Definition: avformat.h:844
AVInputFormat * av_probe_input_format3(AVProbeData *pd, int is_opened, int *score_ret)
Guess the file format.
Definition: format.c:173
int duration
Duration of the current frame.
Definition: avcodec.h:5045
discard all
Definition: avcodec.h:784
AVPacketSideData * side_data
An array of side data that applies to the whole stream (i.e.
Definition: avformat.h:983
static AVPacket pkt
void ff_parse_key_value(const char *str, ff_parse_key_val_cb callback_get_buf, void *context)
Parse a string with comma-separated key=value pairs.
Definition: utils.c:4457
int priv_data_size
Size of private data so that it can be allocated in the wrapper.
Definition: avformat.h:711
int ctx_flags
Flags signalling stream properties.
Definition: avformat.h:1374
int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub, int *got_sub_ptr, AVPacket *avpkt)
Decode a subtitle message.
Definition: utils.c:2589
AVDictionary * metadata
Definition: avformat.h:1286
int av_opt_set_dict_val(void *obj, const char *name, const AVDictionary *val, int search_flags)
Definition: opt.c:678
int64_t maxsize
max filesize, used to limit allocations This field is internal to libavformat and access from outside...
Definition: avio.h:249
static int read_frame_internal(AVFormatContext *s, AVPacket *pkt)
Definition: utils.c:1445
void * priv_data
Opaque filter-specific private data.
Definition: avcodec.h:5698
int ff_parse_creation_time_metadata(AVFormatContext *s, int64_t *timestamp, int return_seconds)
Parse creation_time in AVFormatContext metadata if exists and warn if the parsing fails...
Definition: utils.c:5113
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:1078
#define sample
enum AVCodecID subtitle_codec_id
Forced subtitle codec_id.
Definition: avformat.h:1497
AVCodec.
Definition: avcodec.h:3542
static void force_codec_ids(AVFormatContext *s, AVStream *st)
Definition: utils.c:600
This struct describes the properties of an encoded stream.
Definition: avcodec.h:3914
int av_bsf_init(AVBSFContext *ctx)
Prepare the filter for use, after all the parameters and options have been set.
Definition: bsf.c:132
static int has_codec_parameters(AVStream *st, const char **errmsg_ptr)
Definition: utils.c:2790
int av_bprint_finalize(AVBPrint *buf, char **ret_str)
Finalize a print buffer.
Definition: bprint.c:235
static void estimate_timings(AVFormatContext *ic, int64_t old_offset)
Definition: utils.c:2743
static int has_decode_delay_been_guessed(AVStream *st)
Definition: utils.c:925
int avpriv_h264_has_num_reorder_frames(AVCodecContext *avctx)
Definition: h264.c:60
int64_t last_dts_for_order_check
Internal data to analyze DTS and detect faulty mpeg streams.
Definition: avformat.h:1199
#define AV_DISPOSITION_KARAOKE
Definition: avformat.h:834
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented...
Definition: avcodec.h:1786
Undefined.
Definition: avutil.h:265
enum AVAudioServiceType audio_service_type
Type of service that the audio stream conveys.
Definition: avcodec.h:2475
Format I/O context.
Definition: avformat.h:1325
enum AVDiscard skip_frame
Skip decoding for selected frames.
Definition: avcodec.h:3264
AVRational av_guess_frame_rate(AVFormatContext *format, AVStream *st, AVFrame *frame)
Guess the frame rate, based on both the container and codec information.
Definition: utils.c:4625
unsigned int nb_stream_indexes
Definition: avformat.h:1257
int av_bsf_alloc(const AVBitStreamFilter *filter, AVBSFContext **ctx)
Allocate a context for a given bitstream filter.
Definition: bsf.c:79
int ff_network_inited_globally
Definition: network.c:53
int av_opt_set_from_string(void *ctx, const char *opts, const char *const *shorthand, const char *key_val_sep, const char *pairs_sep)
Parse the key-value pairs list in opts.
Definition: opt.c:1464
#define AVFMT_FLAG_NOPARSE
Do not use AVParsers, you also must set AVFMT_FLAG_NOFILLIN as the fillin code works on frames and no...
Definition: avformat.h:1442
int64_t cur_dts
Definition: avformat.h:1059
#define av_assert0(cond)
assert() equivalent, that is always enabled.
Definition: avassert.h:37
internal metadata API header see avformat.h or the public API!
Public dictionary API.
const char * name
Definition: opt.h:246
#define DURATION_MAX_READ_SIZE
Definition: utils.c:2613
#define AVFMT_FLAG_DISCARD_CORRUPT
Discard frames marked corrupted.
Definition: avformat.h:1445
int(* read_close)(struct AVFormatContext *)
Close the stream.
Definition: avformat.h:742
static int64_t start_time
Definition: ffplay.c:330
enum AVSampleFormat sample_fmt
audio sample format
Definition: avcodec.h:2418
uint8_t
Round toward +infinity.
Definition: mathematics.h:74
static int nb_streams
Definition: ffprobe.c:254
#define av_malloc(s)
AVFrame * av_frame_alloc(void)
Allocate an AVFrame and set its fields to default values.
Definition: frame.c:140
Opaque data information usually continuous.
Definition: avutil.h:195
#define AVFMT_FLAG_KEEP_SIDE_DATA
Don't merge side data but keep it separate.
Definition: avformat.h:1457
int width
Video only.
Definition: avcodec.h:3988
int ff_network_init(void)
Definition: network.c:55
#define AVFMTCTX_NOHEADER
signal that no header is present (streams are added dynamically)
Definition: avformat.h:1278
AVOptions.
int subtitle_header_size
Definition: avcodec.h:3275
static int probe_codec(AVFormatContext *s, AVStream *st, const AVPacket *pkt)
Definition: utils.c:618
int flags
Can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER, AVFMT_SHOW_IDS, AVFMT_GENERIC_INDEX, AVFMT_TS_DISCONT, AVFMT_NOBINSEARCH, AVFMT_NOGENSEARCH, AVFMT_NO_BYTE_SEEK, AVFMT_SEEK_TO_PTS.
Definition: avformat.h:674
AVCodecParameters * avcodec_parameters_alloc(void)
Allocate a new AVCodecParameters and set its fields to default values (unknown/invalid/0).
Definition: utils.c:4038
timestamp utils, mostly useful for debugging/logging purposes
unsigned avformat_version(void)
Return the LIBAVFORMAT_VERSION_INT constant.
Definition: utils.c:63
const char * avformat_license(void)
Return the libavformat license.
Definition: utils.c:74
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, or 0 if no associated fourCC code can be found.
Definition: raw.c:274
#define AV_LOG_TRACE
Extremely verbose debugging, useful for libav* development.
Definition: log.h:202
AVPacket pkt
Definition: avformat.h:1933
#define AVPALETTE_SIZE
Definition: pixfmt.h:32
static av_cold int end(AVCodecContext *avctx)
Definition: avrndec.c:90
int id
unique ID to identify the chapter
Definition: avformat.h:1283
int64_t duration
Duration of this packet in AVStream->time_base units, 0 if unknown.
Definition: avcodec.h:1598
int id
Format-specific stream ID.
Definition: avformat.h:883
enum AVStreamParseType need_parsing
Definition: avformat.h:1074
enum AVCodecID ff_codec_get_id(const AVCodecTag *tags, unsigned int tag)
Definition: utils.c:2946
int avformat_match_stream_specifier(AVFormatContext *s, AVStream *st, const char *spec)
Check if the stream st contained in s is matched by the stream specifier spec.
Definition: utils.c:4646
int duration_count
Definition: avformat.h:1023
#define AVFMT_FLAG_GENPTS
Generate missing pts even if it requires parsing future frames.
Definition: avformat.h:1437
int nb_side_data
The number of elements in the AVStream.side_data array.
Definition: avformat.h:987
uint8_t * extradata
some codecs need / can use extradata like Huffman tables.
Definition: avcodec.h:1764
AVStream * avformat_new_stream(AVFormatContext *s, const AVCodec *c)
Add a new stream to a media file.
Definition: utils.c:4065
#define FFERROR_REDO
Returned by demuxers to indicate that data was consumed but discarded (ignored streams or junk data)...
Definition: internal.h:564
static int set_codec_from_probe_data(AVFormatContext *s, AVStream *st, AVProbeData *pd)
Definition: utils.c:284
AVStream ** streams
A list of all streams in the file.
Definition: avformat.h:1393
int64_t duration
Definition: movenc.c:63
int avcodec_parameters_to_context(AVCodecContext *codec, const AVCodecParameters *par)
Fill the codec context based on the values from the supplied codec parameters.
Definition: utils.c:4133
int ff_standardize_creation_time(AVFormatContext *s)
Standardize creation_time metadata in AVFormatContext to an ISO-8601 timestamp string.
Definition: utils.c:5130
static AVFrame * frame
AVFormatContext * avformat_alloc_context(void)
Allocate an AVFormatContext.
Definition: options.c:132
int inject_global_side_data
Internal data to inject global side data.
Definition: avformat.h:1206
const char * avformat_configuration(void)
Return the libavformat build-time configuration.
Definition: utils.c:69
int64_t bytes_read
Bytes read statistic This field is internal to libavformat and access from outside is not allowed...
Definition: avio.h:262
void av_codec_set_lowres(AVCodecContext *avctx, int val)
const char * name
Definition: avcodec.h:5724
const AVClass * priv_class
AVClass for the private context.
Definition: avformat.h:685
static double av_q2d(AVRational a)
Convert rational to double.
Definition: rational.h:80
AVDictionaryEntry * av_dict_get(const AVDictionary *m, const char *key, const AVDictionaryEntry *prev, int flags)
Get a dictionary entry with matching key.
Definition: dict.c:39
int64_t last_duration
Definition: avformat.h:1036
int flags
Flags modifying the (de)muxer behaviour.
Definition: avformat.h:1436
#define DURATION_MAX_RETRY
Definition: utils.c:2614
uint8_t * data
Definition: avcodec.h:1580
AVRational av_mul_q(AVRational b, AVRational c)
Multiply two rationals.
Definition: rational.c:80
AVProgram * av_new_program(AVFormatContext *ac, int id)
Definition: utils.c:4161
int(* read_header)(struct AVFormatContext *)
Read the format header and initialize the AVFormatContext structure.
Definition: avformat.h:725
char * protocol_whitelist
',' separated list of allowed protocols.
Definition: avformat.h:1861
void ff_rfps_calculate(AVFormatContext *ic)
Definition: utils.c:3202
uint32_t tag
Definition: movenc.c:1367
int avformat_network_init(void)
Do global initialization of network components.
Definition: utils.c:4537
char * av_strndup(const char *s, size_t len)
Duplicate a substring of the string s.
Definition: mem.c:279
int fps_probe_size
The number of frames used for determining the framerate in avformat_find_stream_info().
Definition: avformat.h:1559
#define AVERROR_EOF
End of file.
Definition: error.h:55
#define AV_LOG_VERBOSE
Detailed information.
Definition: log.h:192
uint8_t * data
Definition: avcodec.h:1524
ptrdiff_t size
Definition: opengl_enc.c:101
int av_probe_input_buffer2(AVIOContext *pb, 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:266
static av_always_inline int64_t avio_tell(AVIOContext *s)
ftell() equivalent for AVIOContext.
Definition: avio.h:511
int bits_per_coded_sample
bits per sample/pixel from the demuxer (needed for huffyuv).
Definition: avcodec.h:3042
struct AVPacketList * packet_buffer
This buffer is only needed when packets were already buffered but not decoded, for example to get the...
Definition: internal.h:78
enum AVDiscard discard
selects which program to discard and which to feed to the caller
Definition: avformat.h:1255
int raw_packet_buffer_remaining_size
Definition: internal.h:101
enum AVCodecID ff_get_pcm_codec_id(int bps, int flt, int be, int sflags)
Select a PCM codec based on the given parameters.
Definition: utils.c:2958
const OptionDef options[]
Definition: ffserver.c:3969
struct AVBitStreamFilterContext * next
Definition: avcodec.h:5656
unsigned int * stream_index
Definition: avformat.h:1256
enum AVCodecID video_codec_id
Forced video codec_id.
Definition: avformat.h:1485
full parsing and repack with timestamp and position generation by parser for raw this assumes that ea...
Definition: avformat.h:810
uint64_t channel_layout
Audio only.
Definition: avcodec.h:4024
#define av_log(a,...)
int64_t rfps_duration_sum
Definition: avformat.h:1024
int avio_read(AVIOContext *s, unsigned char *buf, int size)
Read size bytes from AVIOContext into buf.
Definition: aviobuf.c:598
unsigned m
Definition: audioconvert.c:187
Duration estimated from bitrate (less accurate)
Definition: avformat.h:1306
unsigned int correct_ts_overflow
Correct single timestamp overflows.
Definition: avformat.h:1700
struct AVOutputFormat * oformat
The output container format.
Definition: avformat.h:1344
static const AVCodec * find_decoder(AVFormatContext *s, AVStream *st, enum AVCodecID codec_id)
Definition: utils.c:165
int av_packet_ref(AVPacket *dst, const AVPacket *src)
Setup a new reference to the data described by a given packet.
Definition: avpacket.c:572
#define FF_API_LAVF_AVCTX
Definition: version.h:80
int64_t start_time
Definition: avformat.h:1271
static void free_packet_buffer(AVPacketList **pkt_buf, AVPacketList **pkt_buf_end)
Definition: utils.c:1316
int64_t bit_rate
The average bitrate of the encoded data (in bits per second).
Definition: avcodec.h:3951
#define AV_PKT_FLAG_KEY
The packet contains a keyframe.
Definition: avcodec.h:1612
static int determinable_frame_size(AVCodecContext *avctx)
Definition: utils.c:838
void av_format_inject_global_side_data(AVFormatContext *s)
This function will cause global side data to be injected in the next packet of each stream as well as...
Definition: utils.c:135
int ff_find_last_ts(AVFormatContext *s, int stream_index, int64_t *ts, int64_t *pos, int64_t(*read_timestamp)(struct AVFormatContext *, int, int64_t *, int64_t))
Definition: utils.c:2082
static void update_dts_from_pts(AVFormatContext *s, int stream_index, AVPacketList *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: utils.c:998
void av_buffer_default_free(void *opaque, uint8_t *data)
Default free callback, which calls av_free() on the buffer data.
Definition: buffer.c:61
int ff_read_packet(AVFormatContext *s, AVPacket *pkt)
Read a transport packet from a media file.
Definition: utils.c:734
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
int av_find_best_stream(AVFormatContext *ic, enum AVMediaType type, int wanted_stream_nb, int related_stream, AVCodec **decoder_ret, int flags)
Find the "best" stream in the file.
Definition: utils.c:3863
av_cold int avcodec_close(AVCodecContext *avctx)
Close a given AVCodecContext and free all the data associated with it (but not the AVCodecContext its...
Definition: utils.c:2959
#define AVINDEX_KEYFRAME
Definition: avformat.h:823
int avctx_inited
1 if avctx has been initialized with the values from the codec parameters
Definition: internal.h:157
#define AVPROBE_SCORE_STREAM_RETRY
Definition: avformat.h:467
AVProgram * av_find_program_from_stream(AVFormatContext *ic, AVProgram *last, int s)
Find the programs which belong to a given stream.
Definition: utils.c:3846
int max_ts_probe
Maximum number of packets to read while waiting for the first timestamp.
Definition: avformat.h:1621
void ff_read_frame_flush(AVFormatContext *s)
Flush the frame reader.
Definition: utils.c:1779
int format_probesize
number of bytes to read maximally to identify format.
Definition: avformat.h:1730
AVCodecID
Identify the syntax and semantics of the bitstream.
Definition: avcodec.h:189
int avcodec_parameters_copy(AVCodecParameters *dst, const AVCodecParameters *src)
Copy the contents of src to dst.
Definition: utils.c:4059
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:176
int av_get_bits_per_sample(enum AVCodecID codec_id)
Return codec bits per sample.
Definition: utils.c:3446
AVDictionary * metadata
Metadata that applies to the whole file.
Definition: avformat.h:1539
int has_b_frames
Size of the frame reordering buffer in the decoder.
Definition: avcodec.h:1971
int nb_decoded_frames
Number of internally decoded frames, used internally in libavformat, do not access its lifetime diffe...
Definition: avformat.h:1160
int64_t pos
Byte position of currently parsed frame in stream.
Definition: avcodec.h:5033
int av_index_search_timestamp(AVStream *st, int64_t wanted_timestamp, int flags)
Get the index for a specific timestamp.
Definition: utils.c:1999
void * av_fast_realloc(void *ptr, unsigned int *size, size_t min_size)
Reallocate the given block if it is not large enough, otherwise do nothing.
Definition: mem.c:480
char * ff_data_to_hex(char *buff, const uint8_t *src, int s, int lowercase)
Definition: utils.c:4378
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: utils.c:1828
int av_dynarray_add_nofree(void *tab_ptr, int *nb_ptr, void *elem)
Add an element to a dynamic array.
Definition: mem.c:310
int av_codec_get_tag2(const AVCodecTag *const *tags, enum AVCodecID id, unsigned int *tag)
Definition: utils.c:3013
struct AVCodecParser * parser
Definition: avcodec.h:4925
#define MAKE_ACCESSORS(str, name, type, field)
Definition: internal.h:87
int64_t pts_wrap_reference
reference dts for wrap detection
Definition: avformat.h:1274
An AV_PKT_DATA_PARAM_CHANGE side data packet is laid out as follows:
Definition: avcodec.h:1368
#define AVERROR(e)
Definition: error.h:43
int ffio_set_buf_size(AVIOContext *s, int buf_size)
Definition: aviobuf.c:953
#define SANE_CHUNK_SIZE
Definition: utils.c:195
#define AVFMT_FLAG_IGNDTS
Ignore DTS on frames that contain both DTS & PTS.
Definition: avformat.h:1440
unsigned int avpriv_toupper4(unsigned int x)
Definition: utils.c:3833
void av_frame_free(AVFrame **frame)
Free the frame and any dynamically allocated objects in it, e.g.
Definition: frame.c:153
int64_t timestamp
Timestamp in AVStream.time_base units, preferably the time from which on correctly decoded frames are...
Definition: avformat.h:817
int(* query_codec)(enum AVCodecID id, int std_compliance)
Test if the given codec can be stored in this container.
Definition: avformat.h:587
int avio_close(AVIOContext *s)
Close the resource accessed by the AVIOContext s and free it.
Definition: aviobuf.c:1063
int avcodec_is_open(AVCodecContext *s)
Definition: utils.c:3917
AVRational av_div_q(AVRational b, AVRational c)
Divide one rational by another.
Definition: rational.c:88
int attribute_align_arg avcodec_receive_frame(AVCodecContext *avctx, AVFrame *frame)
Return decoded output data from a decoder.
Definition: utils.c:2823
int av_match_list(const char *name, const char *list, char separator)
Check if a name is in a list.
Definition: avstring.c:419
int capabilities
Codec capabilities.
Definition: avcodec.h:3561
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
Definition: log.h:197
unsigned int nb_programs
Definition: avformat.h:1478
int last_IP_duration
Definition: avformat.h:1061
int av_read_play(AVFormatContext *s)
Start playing a network-based stream (e.g.
Definition: utils.c:3927
void av_dict_free(AVDictionary **pm)
Free all the memory allocated for an AVDictionary struct and all keys and values. ...
Definition: dict.c:202
preferred ID for decoding MPEG audio layer 1, 2 or 3
Definition: avcodec.h:515
enum AVMediaType codec_type
General type of the encoded data.
Definition: avcodec.h:3918
AVBufferRef * buf
A reference to the reference-counted buffer where the packet data is stored.
Definition: avcodec.h:1563
void ff_id3v2_free_extra_meta(ID3v2ExtraMeta **extra_meta)
Free memory allocated parsing special (non-text) metadata.
Definition: id3v2.c:1062
AVChapter ** chapters
Definition: avformat.h:1529
Round to nearest and halfway cases away from zero.
Definition: mathematics.h:75
AVRational time_base_in
The timebase used for the timestamps of the input packets.
Definition: avcodec.h:5714
simple assert() macros that are a bit more flexible than ISO C assert().
int64_t av_gcd(int64_t a, int64_t b)
Compute the greatest common divisor of a and b.
Definition: mathematics.c:37
const AVOption * av_opt_next(const void *obj, const AVOption *last)
Iterate over all AVOptions belonging to obj.
Definition: opt.c:45
const char * protocol_whitelist
',' separated list of allowed protocols.
Definition: avio.h:292
enum AVPacketSideDataType type
Definition: avcodec.h:1526
const char * name
Name of the codec implementation.
Definition: avcodec.h:3549
int side_data_elems
Definition: avcodec.h:1592
AVBufferRef * av_buffer_create(uint8_t *data, int size, void(*free)(void *opaque, uint8_t *data), void *opaque, int flags)
Create an AVBuffer from an existing array.
Definition: buffer.c:28
int skip_samples
Number of samples to skip at the start of the frame decoded from the next packet. ...
Definition: avformat.h:1130
static const uint8_t offset[127][2]
Definition: vf_spp.c:92
GLsizei count
Definition: opengl_enc.c:109
AVRational avg_frame_rate
Average framerate.
Definition: avformat.h:954
New fields can be added to the end with minor version bumps.
Definition: avformat.h:1252
#define FFMAX(a, b)
Definition: common.h:94
void avcodec_parameters_free(AVCodecParameters **ppar)
Free an AVCodecParameters instance and everything associated with it and write NULL to the supplied p...
Definition: utils.c:4048
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:3657
struct AVCodecParserContext * av_stream_get_parser(const AVStream *st)
Definition: utils.c:130
AVInputFormat * av_probe_input_format2(AVProbeData *pd, int is_opened, int *score_max)
Guess the file format.
Definition: format.c:249
int64_t val
Definition: internal.h:62
int min_distance
Minimum distance between this and the previous keyframe, used to avoid unneeded searching.
Definition: avformat.h:826
size_t av_strlcpy(char *dst, const char *src, size_t size)
Copy the string src to dst, but no more than size - 1 bytes, and null-terminate dst.
Definition: avstring.c:83
#define fail()
Definition: checkasm.h:81
const char * protocol_blacklist
',' separated list of disallowed protocols.
Definition: avio.h:297
const char av_format_ffversion[]
Definition: utils.c:56
AVCodec * audio_codec
Forced audio codec.
Definition: avformat.h:1776
static struct tm * gmtime_r(const time_t *clock, struct tm *result)
Definition: time_internal.h:26
#define AVFMT_FLAG_PRIV_OPT
Enable use of private options by delaying codec open (this could be made default once all code is con...
Definition: avformat.h:1456
int flags
A combination of AV_PKT_FLAG values.
Definition: avcodec.h:1586
int av_codec_get_lowres(const AVCodecContext *avctx)
const AVCodecDescriptor * avcodec_descriptor_get(enum AVCodecID id)
Definition: codec_desc.c:2956
uint64_t channel_layout
Audio channel layout.
Definition: avcodec.h:2461
int extradata_size
Size of the extradata content in bytes.
Definition: avcodec.h:3940
int seek_count
seek statistic This field is internal to libavformat and access from outside is not allowed...
Definition: avio.h:268
Only parse headers, do not repack.
Definition: avformat.h:807
char * format_whitelist
',' separated list of allowed demuxers.
Definition: avformat.h:1746
static int genpts
Definition: ffplay.c:333
static AVPacket flush_pkt
Definition: ffplay.c:360
int avformat_query_codec(const AVOutputFormat *ofmt, enum AVCodecID codec_id, int std_compliance)
Test if the given container can store a codec.
Definition: utils.c:4520
int av_packet_merge_side_data(AVPacket *pkt)
Definition: avpacket.c:376
#define AVFMT_FLAG_NOBUFFER
Do not buffer frames when possible.
Definition: avformat.h:1443
int ff_add_index_entry(AVIndexEntry **index_entries, int *nb_index_entries, unsigned int *index_entries_allocated_size, int64_t pos, int64_t timestamp, int size, int distance, int flags)
Internal version of av_add_index_entry.
Definition: utils.c:1841
static float distance(float x, float y, int band)
int props
Codec properties, a combination of AV_CODEC_PROP_* flags.
Definition: avcodec.h:673
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
int buf_size
Size of buf except extra allocated bytes.
Definition: avformat.h:462
void avpriv_set_pts_info(AVStream *s, int pts_wrap_bits, unsigned int pts_num, unsigned int pts_den)
Set the time base and wrapping info for a given stream.
Definition: utils.c:4427
unsigned char * buf
Buffer must have AVPROBE_PADDING_SIZE of extra allocated bytes filled with zero.
Definition: avformat.h:461
static int init_input(AVFormatContext *s, const char *filename, AVDictionary **options)
Definition: utils.c:361
static AVPacketList * get_next_pkt(AVFormatContext *s, AVStream *st, AVPacketList *pktl)
Definition: utils.c:943
common internal API header
#define FF_MAX_EXTRADATA_SIZE
Maximum size in bytes of extradata.
Definition: internal.h:213
unsigned int nb_streams
Number of elements in AVFormatContext.streams.
Definition: avformat.h:1381
AVBSFContext ** bsfcs
bitstream filters to run on stream
Definition: internal.h:142
int64_t fps_first_dts
Those are used for average framerate estimation.
Definition: avformat.h:1041
int av_read_pause(AVFormatContext *s)
Pause a network-based stream (e.g.
Definition: utils.c:3936
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
int seekable
A combination of AVIO_SEEKABLE_ flags or 0 when the stream is not seekable.
Definition: avio.h:243
#define dynarray_add(tab, nb_ptr, elem)
Definition: internal.h:168
char filename[1024]
input or output filename
Definition: avformat.h:1401
#define av_assert1(cond)
assert() equivalent, that does not lie in speed critical code.
Definition: avassert.h:53
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
int ff_bprint_to_codecpar_extradata(AVCodecParameters *par, struct AVBPrint *buf)
Finalize buf into extradata and set its size appropriately.
Definition: utils.c:5176
int update_initial_durations_done
Internal data to prevent doing update_initial_durations() twice.
Definition: avformat.h:1188
#define AV_TIME_BASE
Internal time base represented as integer.
Definition: avutil.h:246
#define FFMIN(a, b)
Definition: common.h:96
enum AVCodecID audio_codec_id
Forced audio codec_id.
Definition: avformat.h:1491
void ff_configure_buffers_for_index(AVFormatContext *s, int64_t time_tolerance)
Definition: utils.c:1942
Raw Video Codec.
static void compute_pkt_fields(AVFormatContext *s, AVStream *st, AVCodecParserContext *pc, AVPacket *pkt, int64_t next_dts, int64_t next_pts)
Definition: utils.c:1126
struct AVStream::@176 * info
AVCodecContext * avcodec_alloc_context3(const AVCodec *codec)
Allocate an AVCodecContext and set its fields to default values.
Definition: options.c:156
#define AV_OPT_SEARCH_CHILDREN
Search in possible children of the given object first.
Definition: opt.h:556
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:136
#define LIBAVFORMAT_VERSION_MICRO
Definition: version.h:36
static const chunk_decoder decoder[8]
Definition: dfa.c:327
int width
picture width / height.
Definition: avcodec.h:1836
#define RELATIVE_TS_BASE
Definition: utils.c:80
int64_t offset
byte offset from starting packet start
Definition: avcodec.h:4963
AVRational time_base_out
The timebase used for the timestamps of the output packets.
Definition: avcodec.h:5720
int av_find_default_stream_index(AVFormatContext *s)
Definition: utils.c:1741
#define FAIL(errmsg)
void av_program_add_stream_index(AVFormatContext *ac, int progid, unsigned idx)
Definition: utils.c:4219
Duration estimated from a stream with a known duration.
Definition: avformat.h:1305
internal header for RIFF based (de)muxers do NOT include this in end user applications ...
int32_t
void av_parser_close(AVCodecParserContext *s)
Definition: parser.c:235
uint8_t dts_ordered
Definition: avformat.h:1200
static int seek_frame_generic(AVFormatContext *s, int stream_index, int64_t timestamp, int flags)
Definition: utils.c:2246
int64_t ff_gen_search(AVFormatContext *s, int stream_index, int64_t target_ts, int64_t pos_min, int64_t pos_max, int64_t pos_limit, int64_t ts_min, int64_t ts_max, int flags, int64_t *ts_ret, int64_t(*read_timestamp)(struct AVFormatContext *, int, int64_t *, int64_t))
Perform a binary search using read_timestamp().
Definition: utils.c:2120
static int64_t select_from_pts_buffer(AVStream *st, int64_t *pts_buffer, int64_t dts)
Definition: utils.c:952
#define AVFMT_EVENT_FLAG_METADATA_UPDATED
The call resulted in updated metadata.
Definition: avformat.h:1615
void ff_format_io_close(AVFormatContext *s, AVIOContext **pb)
Definition: utils.c:5106
#define FFABS(a)
Absolute value, Note, INT_MIN / INT64_MIN result in undefined behavior as they are not representable ...
Definition: common.h:72
void ff_compute_frame_duration(AVFormatContext *s, int *pnum, int *pden, AVStream *st, AVCodecParserContext *pc, AVPacket *pkt)
Return the frame duration in seconds.
Definition: utils.c:852
static int update_wrap_reference(AVFormatContext *s, AVStream *st, int stream_index, AVPacket *pkt)
Definition: utils.c:668
#define AVERROR_BSF_NOT_FOUND
Bitstream filter not found.
Definition: error.h:49
int n
Definition: avisynth_c.h:547
static int av_bprint_is_complete(const AVBPrint *buf)
Test if the print buffer is complete (not truncated).
Definition: bprint.h:185
AVDictionary * metadata
Definition: avformat.h:945
uint8_t * av_stream_new_side_data(AVStream *st, enum AVPacketSideDataType type, int size)
Allocate new information from stream.
Definition: utils.c:4954
int ticks_per_frame
For some codecs, the time base is closer to the field rate than the frame rate.
Definition: avcodec.h:1795
#define AVPROBE_SCORE_RETRY
Definition: avformat.h:466
int probe_score
format probing score.
Definition: avformat.h:1723
#define AVFMT_FLAG_CUSTOM_IO
The caller has supplied a custom AVIOContext, don't avio_close() it.
Definition: avformat.h:1444
int av_format_get_probe_score(const AVFormatContext *s)
Definition: utils.c:189
Usually treated as AVMEDIA_TYPE_DATA.
Definition: avutil.h:192
Opaque data information usually sparse.
Definition: avutil.h:197
int64_t skip_initial_bytes
Skip initial bytes when opening stream.
Definition: avformat.h:1693
#define src
Definition: vp9dsp.c:530
int(* read_pause)(struct AVFormatContext *)
Pause playing - only meaningful if using a network-based format (RTSP).
Definition: avformat.h:772
const AVClass * priv_class
AVClass for the private context.
Definition: avformat.h:550
#define AVERROR_EXIT
Immediate exit was requested; the called function should not be restarted.
Definition: error.h:56
enum AVPixelFormat avpriv_find_pix_fmt(const PixelFormatTag *tags, unsigned int fourcc)
Definition: utils.c:1009
int buffer_size
Maximum buffer size.
Definition: avio.h:209
preferred ID for MPEG-1/2 video decoding
Definition: avcodec.h:194
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:1473
void ff_update_cur_dts(AVFormatContext *s, AVStream *ref_st, int64_t timestamp)
Update cur_dts of all streams based on the given timestamp and AVStream.
Definition: utils.c:1814
#define AV_DISPOSITION_ATTACHED_PIC
The stream is stored in the file as an attached picture/"cover art" (e.g.
Definition: avformat.h:851
const char * avcodec_get_name(enum AVCodecID id)
Get the name of a codec.
Definition: utils.c:3082
int av_get_frame_filename(char *buf, int buf_size, const char *path, int number)
Return in 'buf' the path with 'd' replaced by a number.
Definition: utils.c:4252
int av_append_packet(AVIOContext *s, AVPacket *pkt, int size)
Read data and append it to the current content of the AVPacket.
Definition: utils.c:270
uint8_t pts_reorder_error_count[MAX_REORDER_DELAY+1]
Definition: avformat.h:1194
int ff_alloc_extradata(AVCodecParameters *par, int size)
Allocate extradata with additional AV_INPUT_BUFFER_PADDING_SIZE at end which is always set to 0...
Definition: utils.c:3107
#define AV_DISPOSITION_VISUAL_IMPAIRED
stream for visual impaired audiences
Definition: avformat.h:843
#define CONTAINS_PAL
Definition: internal.h:592
int64_t av_gettime(void)
Get the current time in microseconds.
Definition: time.c:39
Stream structure.
Definition: avformat.h:876
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
Definition: error.h:62
#define AVFMT_NOTIMESTAMPS
Format does not need / have any timestamps.
Definition: avformat.h:484
int64_t end
chapter start/end time in time_base units
Definition: avformat.h:1285
int avformat_queue_attached_pictures(AVFormatContext *s)
Definition: utils.c:420
int attribute_align_arg avcodec_send_packet(AVCodecContext *avctx, const AVPacket *avpkt)
Supply raw packet data as input to a decoder.
Definition: utils.c:2777
int avformat_network_deinit(void)
Undo the initialization done by avformat_network_init.
Definition: utils.c:4550
int frame_size
Number of samples per channel in an audio frame.
Definition: avcodec.h:2430
uint8_t dts_misordered
Definition: avformat.h:1201
#define FF_FDEBUG_TS
Definition: avformat.h:1583
static int width
Definition: utils.c:158
#define LIBAVFORMAT_VERSION_INT
Definition: version.h:38
sample_rate
#define AV_LOG_INFO
Standard information.
Definition: log.h:187
int64_t pts_reorder_error[MAX_REORDER_DELAY+1]
Internal data to generate dts from pts.
Definition: avformat.h:1193
int frame_size
Definition: mxfenc.c:1821
AVCodecParserContext * av_parser_init(int codec_id)
Definition: parser.c:51
int64_t end_time
Definition: avformat.h:1272
AVStreamInternal * internal
An opaque field for libavformat internal usage.
Definition: avformat.h:1228
enum AVMediaType codec_type
Definition: avcodec.h:1657
unsigned int ff_codec_get_tag(const AVCodecTag *tags, enum AVCodecID id)
Definition: utils.c:2936
int(* read_seek)(struct AVFormatContext *, int stream_index, int64_t timestamp, int flags)
Seek to a given timestamp relative to the frames in stream component stream_index.
Definition: avformat.h:752
static int64_t ts_to_samples(AVStream *st, int64_t ts)
Definition: utils.c:1440
int ff_check_interrupt(AVIOInterruptCB *cb)
Check if the user has requested to interrupt a blocking function associated with cb.
Definition: avio.c:655
int debug
Flags to enable debugging.
Definition: avformat.h:1582
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:171
enum AVCodecID codec_id
Definition: avcodec.h:1666
#define AV_TIME_BASE_Q
Internal time base represented as fractional value.
Definition: avutil.h:252
static int append_packet_chunked(AVIOContext *s, AVPacket *pkt, int size)
Definition: utils.c:219
int av_opt_set_dict(void *obj, AVDictionary **options)
Set all the options from a given dictionary on an object.
Definition: opt.c:1561
char * av_strdup(const char *s)
Duplicate the string s.
Definition: mem.c:267
int sample_rate
samples per second
Definition: avcodec.h:2410
AVIOContext * pb
I/O context.
Definition: avformat.h:1367
unsigned int av_codec_get_tag(const AVCodecTag *const *tags, enum AVCodecID id)
Definition: utils.c:3005
const struct AVCodecTag *const * codec_tag
List of supported codec_id-codec_tag pairs, ordered by "better choice first".
Definition: avformat.h:547
main external API structure.
Definition: avcodec.h:1649
AVCodec * avcodec_find_decoder(enum AVCodecID id)
Find a registered decoder with a matching codec ID.
Definition: utils.c:3063
void av_packet_unref(AVPacket *pkt)
Wipe the packet.
Definition: avpacket.c:563
int io_repositioned
IO repositioned flag.
Definition: avformat.h:1760
int av_filename_number_test(const char *filename)
Check whether filename actually is a numbered sequence generator.
Definition: utils.c:277
AVRational sample_aspect_ratio
Sample aspect ratio for the video frame, 0/1 if unknown/unspecified.
Definition: frame.h:263
unsigned int codec_tag
fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A').
Definition: avcodec.h:1681
#define AVFMT_NOGENSEARCH
Format does not allow to fall back on generic search.
Definition: avformat.h:491
int(* read_packet)(struct AVFormatContext *, AVPacket *pkt)
Read one packet and put it in 'pkt'.
Definition: avformat.h:736
int pts_wrap_behavior
behavior on wrap detection
Definition: avformat.h:1275
void * buf
Definition: avisynth_c.h:553
double(* duration_error)[2][MAX_STD_TIMEBASES]
Definition: avformat.h:1025
GLint GLenum type
Definition: opengl_enc.c:105
int extradata_size
Definition: avcodec.h:1765
#define llrint(x)
Definition: libm.h:394
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:69
struct AVBitStreamFilter * filter
Definition: avcodec.h:5654
int nb_index_entries
Definition: avformat.h:1087
int coded_height
Definition: avcodec.h:1851
static const char * format
Definition: movenc.c:47
enum AVCodecID av_codec_get_id(const AVCodecTag *const *tags, unsigned int tag)
Definition: utils.c:3030
Describe the class of an AVClass context structure.
Definition: log.h:67
int ff_hex_to_data(uint8_t *data, const char *p)
Parse a string of hexadecimal strings.
Definition: utils.c:4399
static av_const int av_toupper(int c)
Locale-independent conversion of ASCII characters to uppercase.
Definition: avstring.h:231
int index
Definition: gxfenc.c:89
#define AVFMT_GENERIC_INDEX
Use generic index building code.
Definition: avformat.h:485
enum AVCodecID subtitle_codec
default subtitle codec
Definition: avformat.h:534
#define SPACE_CHARS
Definition: internal.h:272
rational number numerator/denominator
Definition: rational.h:43
int avcodec_parameters_from_context(AVCodecParameters *par, const AVCodecContext *codec)
Fill the parameters struct based on the values from the supplied codec context.
Definition: utils.c:4077
int64_t last_dts
Definition: avformat.h:1021
AVRational display_aspect_ratio
display aspect ratio (0 if unknown)
Definition: avformat.h:1220
Recommmends skipping the specified number of samples.
Definition: avcodec.h:1452
uint64_t ff_ntp_time(void)
Get the current time since NTP epoch in microseconds.
Definition: utils.c:4247
#define AVSEEK_FLAG_BYTE
seeking based on position in bytes
Definition: avformat.h:2367
int need_context_update
Whether the internal avctx needs to be updated from codecpar (after a late change to codecpar) ...
Definition: internal.h:164
const AVClass * av_class
A class for logging and AVOptions.
Definition: avformat.h:1330
AVMediaType
Definition: avutil.h:191
size_t av_strlcatf(char *dst, size_t size, const char *fmt,...)
Definition: avstring.c:101
int ff_generate_avci_extradata(AVStream *st)
Generate standard extradata for AVC-Intra based on width/height and field order.
Definition: utils.c:4803
int short_seek_threshold
Threshold to favor readahead over seek.
Definition: avio.h:287
int64_t fps_last_dts
Definition: avformat.h:1043
#define RAW_PACKET_BUFFER_SIZE
Remaining size available for raw_packet_buffer, in bytes.
Definition: internal.h:100
static int seek_frame_internal(AVFormatContext *s, int stream_index, int64_t timestamp, int flags)
Definition: utils.c:2313
int attribute_align_arg avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options)
Initialize the AVCodecContext to use the given AVCodec.
Definition: utils.c:1208
#define snprintf
Definition: snprintf.h:34
int found_decoder
0 -> decoder has not been searched for yet.
Definition: avformat.h:1034
void avformat_free_context(AVFormatContext *s)
Free an AVFormatContext and all its streams.
Definition: utils.c:4001
int inject_global_side_data
Definition: internal.h:119
This structure contains the data a format has to probe a file.
Definition: avformat.h:459
int av_get_audio_frame_duration(AVCodecContext *avctx, int frame_bytes)
Return audio frame duration.
Definition: utils.c:3648
misc parsing utilities
int av_read_frame(AVFormatContext *s, AVPacket *pkt)
Return the next frame of a stream.
Definition: utils.c:1631
static int has_duration(AVFormatContext *ic)
Return TRUE if the stream has accurate duration in any stream.
Definition: utils.c:2449
int avio_pause(AVIOContext *h, int pause)
Pause and resume playing - only meaningful if using a network streaming protocol (e.g.
Definition: aviobuf.c:1106
Round toward -infinity.
Definition: mathematics.h:73
int avformat_seek_file(AVFormatContext *s, int stream_index, int64_t min_ts, int64_t ts, int64_t max_ts, int flags)
Seek to timestamp ts.
Definition: utils.c:2380
static int try_decode_frame(AVFormatContext *s, AVStream *st, AVPacket *avpkt, AVDictionary **options)
Definition: utils.c:2838
attribute_deprecated int64_t convergence_duration
Definition: avcodec.h:4979
#define AVPALETTE_COUNT
Definition: pixfmt.h:33
This struct describes the properties of a single codec described by an AVCodecID. ...
Definition: avcodec.h:657
int seek2any
Force seeking to any (also non key) frames.
Definition: avformat.h:1707
full parsing and repack of the first frame only, only implemented for H.264 currently ...
Definition: avformat.h:809
const char * avio_find_protocol_name(const char *url)
Return the name of the protocol that will handle the passed URL.
Definition: avio.c:473
AVDictionary * metadata
Definition: avformat.h:1258
int64_t codec_info_duration
Definition: avformat.h:1026
static int64_t pts
Global timestamp for the audio frames.
int fps_first_dts_idx
Definition: avformat.h:1042
static av_always_inline AVRational av_inv_q(AVRational q)
Invert a rational.
Definition: rational.h:133
static int flags
Definition: cpu.c:47
int64_t start_time
Position of the first frame of the component, in AV_TIME_BASE fractional seconds. ...
Definition: avformat.h:1410
Duration accurately estimated from PTSes.
Definition: avformat.h:1304
#define LICENSE_PREFIX
int ff_copy_whiteblacklists(AVFormatContext *dst, AVFormatContext *src)
Copies the whilelists from one context to the other.
Definition: utils.c:145
int av_seek_frame(AVFormatContext *s, int stream_index, int64_t timestamp, int flags)
Seek to the keyframe at timestamp.
Definition: utils.c:2357
unsigned int tag
Definition: internal.h:46
static int is_intra_only(enum AVCodecID id)
Definition: utils.c:915
struct AVPacketList * parse_queue
Packets split by the parser get queued here.
Definition: internal.h:95
int64_t start
Definition: avformat.h:1285
int64_t duration
Decoding: duration of the stream, in stream time base.
Definition: avformat.h:930
#define PARSER_FLAG_ONCE
Definition: avcodec.h:4958
int sample_rate
Audio only.
Definition: avcodec.h:4032
enum AVMediaType type
Definition: avcodec.h:659
static int is_relative(int64_t ts)
Definition: utils.c:82
int palette
Definition: v4l.c:61
static int tb_unreliable(AVCodecContext *c)
Definition: utils.c:3092
Main libavformat public API header.
AVPacketSideData * side_data
Additional packet data that can be provided by the container.
Definition: avcodec.h:1591
attribute_deprecated int64_t convergence_duration
Definition: avcodec.h:1609
int(* split)(AVCodecContext *avctx, const uint8_t *buf, int buf_size)
Definition: avcodec.h:5101
void av_opt_free(void *obj)
Free all allocated objects in obj.
Definition: opt.c:1516
#define FF_DISABLE_DEPRECATION_WARNINGS
Definition: internal.h:80
common internal api header.
struct AVPacketList * next
Definition: avformat.h:1934
if(ret< 0)
Definition: vf_mcdeint.c:282
static int ref[MAX_W *MAX_W]
Definition: jpeg2000dwt.c:107
int pts_wrap_behavior
Options for behavior, when a wrap is detected.
Definition: avformat.h:1183
#define AVFMT_NOFILE
Demuxer will use avio_open, no opened file should be provided by the caller.
Definition: avformat.h:476
int(* read_play)(struct AVFormatContext *)
Start/resume playing - only meaningful if using a network-based format (RTSP).
Definition: avformat.h:766
void * av_realloc(void *ptr, size_t size)
Allocate or reallocate a block of memory.
Definition: mem.c:145
int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options)
Read packets of a media file to get stream information.
Definition: utils.c:3268
int64_t start_time
Decoding: pts of the first frame of the stream in presentation order, in stream time base...
Definition: avformat.h:923
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
AVCodec * video_codec
Forced video codec.
Definition: avformat.h:1768
static double c[64]
int disposition
AV_DISPOSITION_* bit field.
Definition: avformat.h:934
enum AVCodecID orig_codec_id
Definition: internal.h:159
int(* av_format_control_message)(struct AVFormatContext *s, int type, void *data, size_t data_size)
Callback used by devices to communicate with application.
Definition: avformat.h:1293
int pts_wrap_bits
number of bits in pts (used for wrapping control)
Definition: avformat.h:1048
Bi-dir predicted.
Definition: avutil.h:268
void ff_free_stream(AVFormatContext *s, AVStream *st)
Definition: utils.c:3993
int ff_rfps_add_frame(AVFormatContext *ic, AVStream *st, int64_t ts)
add frame for rfps calculation.
Definition: utils.c:3144
AVRational time_base
time base in which the start/end timestamps are specified
Definition: avformat.h:1284
#define PARSER_FLAG_COMPLETE_FRAMES
Definition: avcodec.h:4957
void * av_realloc_array(void *ptr, size_t nmemb, size_t size)
Definition: mem.c:208
int av_grow_packet(AVPacket *pkt, int grow_by)
Increase packet size, correctly zeroing padding.
Definition: avpacket.c:109
unsigned properties
Definition: avcodec.h:3471
void av_init_packet(AVPacket *pkt)
Initialize optional fields of a packet with default values.
Definition: avpacket.c:33
void ff_id3v2_read(AVFormatContext *s, const char *magic, ID3v2ExtraMeta **extra_meta, unsigned int max_search_size)
Read an ID3v2 tag, including supported extra metadata and chapters.
Definition: id3v2.c:1056
int den
denominator
Definition: rational.h:45
#define AV_PKT_FLAG_CORRUPT
The packet content is corrupted.
Definition: avcodec.h:1613
unsigned bps
Definition: movenc.c:1368
struct AVInputFormat * iformat
The input container format.
Definition: avformat.h:1337
void avformat_close_input(AVFormatContext **ps)
Close an opened input AVFormatContext.
Definition: utils.c:4037
#define AV_PTS_WRAP_IGNORE
Options for behavior on timestamp wrap detection.
Definition: avformat.h:865
int64_t codec_info_duration_fields
Definition: avformat.h:1027
#define AV_INPUT_BUFFER_PADDING_SIZE
Required number of additionally allocated bytes at the end of the input bitstream for decoding...
Definition: avcodec.h:731
void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode)
Definition: utils.c:3122
Flag to pass INT64_MIN/MAX through instead of rescaling, this avoids special cases for AV_NOPTS_VALUE...
Definition: mathematics.h:76
unsigned int index_entries_allocated_size
Definition: avformat.h:1088
#define AVERROR_DECODER_NOT_FOUND
Decoder not found.
Definition: error.h:52
int skip_to_keyframe
Indicates that everything up to the next keyframe should be discarded.
Definition: avformat.h:1125
int64_t frame_offset
Definition: avcodec.h:4926
static int parse_packet(AVFormatContext *s, AVPacket *pkt, int stream_index)
Parse a packet, add all split parts to parse_queue.
Definition: utils.c:1332
static int read_from_packet_buffer(AVPacketList **pkt_buffer, AVPacketList **pkt_buffer_end, AVPacket *pkt)
Definition: utils.c:1425
int ff_get_extradata(AVFormatContext *s, AVCodecParameters *par, AVIOContext *pb, int size)
Allocate extradata with additional AV_INPUT_BUFFER_PADDING_SIZE at end which is always set to 0 and f...
Definition: utils.c:3128
static av_always_inline int diff(const uint32_t a, const uint32_t b)
struct AVPacketList * packet_buffer_end
Definition: internal.h:79
#define av_free(p)
#define AVFMT_NO_BYTE_SEEK
Format does not allow seeking by bytes.
Definition: avformat.h:492
char * value
Definition: dict.h:87
AVCodec * subtitle_codec
Forced subtitle codec.
Definition: avformat.h:1784
#define FF_ENABLE_DEPRECATION_WARNINGS
Definition: internal.h:81
int(* AVOpenCallback)(struct AVFormatContext *s, AVIOContext **pb, const char *url, int flags, const AVIOInterruptCB *int_cb, AVDictionary **options)
Definition: avformat.h:1296
#define av_ts2str(ts)
Convenience macro, the return value should be used only directly in function arguments but never stan...
Definition: timestamp.h:54
int len
int channels
number of audio channels
Definition: avcodec.h:2411
enum AVCodecID audio_codec
default audio codec
Definition: avformat.h:532
char * codec_whitelist
',' separated list of allowed decoders.
Definition: avformat.h:1738
static uint8_t tmp[8]
Definition: des.c:38
struct AVCodecParserContext * parser
Definition: avformat.h:1075
void * priv_data
Format private data.
Definition: avformat.h:1353
int codec_info_nb_frames
Number of frames that have been demuxed during av_find_stream_info()
Definition: avformat.h:1071
const struct PixelFormatTag * avpriv_get_raw_pix_fmt_tags(void)
Definition: raw.c:269
#define AVERROR_STREAM_NOT_FOUND
Stream not found.
Definition: error.h:65
int avformat_open_input(AVFormatContext **ps, const char *filename, AVInputFormat *fmt, AVDictionary **options)
Open an input stream and read the header.
Definition: utils.c:471
static void flush_packet_queue(AVFormatContext *s)
Definition: utils.c:1727
#define AV_DISPOSITION_COMMENT
Definition: avformat.h:832
uint8_t * extradata
Extra binary data needed for initializing the decoder, codec-dependent.
Definition: avcodec.h:3936
AVDiscard
Definition: avcodec.h:775
int channels
Audio only.
Definition: avcodec.h:4028
AVCodecContext * avctx
The codec context used by avformat_find_stream_info, the parser, etc.
Definition: internal.h:153
static int height
Definition: utils.c:158
#define av_uninit(x)
Definition: attributes.h:149
int64_t dts
Decompression timestamp in AVStream->time_base units; the time at which the packet is decompressed...
Definition: avcodec.h:1579
static int seek_frame_byte(AVFormatContext *s, int stream_index, int64_t pos, int flags)
Definition: utils.c:2226
char * protocol_blacklist
',' separated list of disallowed protocols.
Definition: avformat.h:1896
int repeat_pict
This field is used for proper frame duration computation in lavf.
Definition: avcodec.h:4941
int64_t duration
Duration of the stream, in AV_TIME_BASE fractional seconds.
Definition: avformat.h:1420
int avformat_flush(AVFormatContext *s)
Discard all internally buffered data.
Definition: utils.c:2436
int64_t last_IP_pts
Definition: avformat.h:1060
void ff_tls_deinit(void)
Definition: network.c:43
int(* read_seek2)(struct AVFormatContext *s, int stream_index, int64_t min_ts, int64_t ts, int64_t max_ts, int flags)
Seek to timestamp ts.
Definition: avformat.h:780
#define av_freep(p)
void INT64 start
Definition: avisynth_c.h:553
const char * name
A comma separated list of short names for the format.
Definition: avformat.h:660
uint8_t * av_packet_get_side_data(AVPacket *pkt, enum AVPacketSideDataType type, int *size)
Get side information from packet.
Definition: avpacket.c:334
unbuffered private I/O API
static void compute_chapters_end(AVFormatContext *s)
Definition: utils.c:3041
AVCodecParameters * codecpar
Definition: avformat.h:1006
#define FFSWAP(type, a, b)
Definition: common.h:99
static void update_initial_timestamps(AVFormatContext *s, int stream_index, int64_t dts, int64_t pts, AVPacket *pkt)
Definition: utils.c:1024
uint8_t * av_packet_new_side_data(AVPacket *pkt, enum AVPacketSideDataType type, int size)
Allocate new information of a packet.
Definition: avpacket.c:313
int fps_last_dts_idx
Definition: avformat.h:1044
int stream_index
Definition: avcodec.h:1582
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented...
Definition: avformat.h:913
int ff_stream_add_bitstream_filter(AVStream *st, const char *name, const char *args)
Add a bitstream filter to a stream.
Definition: utils.c:4991
#define MKTAG(a, b, c, d)
Definition: common.h:342
enum AVDiscard discard
Selects which packets can be discarded at will and do not need to be demuxed.
Definition: avformat.h:936
int ff_add_param_change(AVPacket *pkt, int32_t channels, uint64_t channel_layout, int32_t sample_rate, int32_t width, int32_t height)
Add side data to a packet for changing parameters to the given values.
Definition: utils.c:4560
AVRational r_frame_rate
Real base framerate of the stream.
Definition: avformat.h:1101
int(* io_open)(struct AVFormatContext *s, AVIOContext **pb, const char *url, int flags, AVDictionary **options)
Definition: avformat.h:1883
int ffio_limit(AVIOContext *s, int size)
Definition: utils.c:197
int request_probe
stream probing state -1 -> probing finished 0 -> no probing requested rest -> perform probing with re...
Definition: avformat.h:1120
#define MAX_PROBE_PACKETS
Definition: internal.h:36
int use_wallclock_as_timestamps
forces the use of wallclock timestamps as pts/dts of packets This has undefined results in the presen...
Definition: avformat.h:1671
#define AVERROR_EXTERNAL
Generic error in an external library.
Definition: error.h:57
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_RL32
Definition: bytestream.h:87
This structure stores compressed data.
Definition: avcodec.h:1557
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: aviobuf.c:1086
AVCodecParameters * par_in
Parameters of the input stream.
Definition: avcodec.h:5703
int key_frame
Set by parser to 1 for key frames and 0 for non-key frames.
Definition: avcodec.h:4972
int av_opt_set(void *obj, const char *name, const char *val, int search_flags)
Definition: opt.c:431
void(* io_close)(struct AVFormatContext *s, AVIOContext *pb)
A callback for closing the streams opened with AVFormatContext.io_open().
Definition: avformat.h:1889
#define AVFMT_FLAG_NOFILLIN
Do not infer any values from other values, just return what is stored in the container.
Definition: avformat.h:1441
void * av_mallocz(size_t size)
Allocate a block of size bytes with alignment suitable for all memory accesses (including vectors if ...
Definition: mem.c:252
#define MAX_STD_TIMEBASES
Stream information used internally by av_find_stream_info()
Definition: avformat.h:1019
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...
Definition: avcodec.h:1573
AVPacket attached_pic
For streams with AV_DISPOSITION_ATTACHED_PIC disposition, this packet will contain the attached pictu...
Definition: avformat.h:963
int64_t av_stream_get_end_pts(const AVStream *st)
Returns the pts of the last muxed packet + its duration.
Definition: utils.c:122
#define AV_NOPTS_VALUE
Undefined timestamp value.
Definition: avutil.h:240
int av_get_packet(AVIOContext *s, AVPacket *pkt, int size)
Allocate and read the payload of a packet and initialize its fields with default values.
Definition: utils.c:260
#define av_unused
Definition: attributes.h:126
AVProgram ** programs
Definition: avformat.h:1479
#define PARSER_FLAG_USE_CODEC_TS
Definition: avcodec.h:4961
#define AVFMT_NEEDNUMBER
Needs 'd' in filename.
Definition: avformat.h:477
discard nothing
Definition: avcodec.h:778
#define AV_WL32(p, v)
Definition: intreadwrite.h:426
struct AVPacketList * raw_packet_buffer_end
Definition: internal.h:91
int64_t av_compare_mod(uint64_t a, uint64_t b, uint64_t mod)
Compare 2 integers modulo mod.
Definition: mathematics.c:160
const char * name
Definition: opengl_enc.c:103
uint8_t * subtitle_header
Header containing style information for text subtitles.
Definition: avcodec.h:3274