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(const 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, const 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, const 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 static const AVCodec *find_probe_decoder(AVFormatContext *s, const AVStream *st, enum AVCodecID codec_id)
190 {
191  const AVCodec *codec;
192 
193 #if CONFIG_H264_DECODER
194  /* Other parts of the code assume this decoder to be used for h264,
195  * so force it if possible. */
196  if (codec_id == AV_CODEC_ID_H264)
197  return avcodec_find_decoder_by_name("h264");
198 #endif
199 
200  codec = find_decoder(s, st, codec_id);
201  if (!codec)
202  return NULL;
203 
205  const AVCodec *probe_codec = NULL;
206  while (probe_codec = av_codec_next(probe_codec)) {
207  if (probe_codec->id == codec_id &&
208  av_codec_is_decoder(probe_codec) &&
210  return probe_codec;
211  }
212  }
213  }
214 
215  return codec;
216 }
217 
218 int av_format_get_probe_score(const AVFormatContext *s)
219 {
220  return s->probe_score;
221 }
222 
223 /* an arbitrarily chosen "sane" max packet size -- 50M */
224 #define SANE_CHUNK_SIZE (50000000)
225 
227 {
228  if (s->maxsize>= 0) {
229  int64_t remaining= s->maxsize - avio_tell(s);
230  if (remaining < size) {
231  int64_t newsize = avio_size(s);
232  if (!s->maxsize || s->maxsize<newsize)
233  s->maxsize = newsize - !newsize;
234  remaining= s->maxsize - avio_tell(s);
235  remaining= FFMAX(remaining, 0);
236  }
237 
238  if (s->maxsize>= 0 && remaining+1 < size) {
239  av_log(NULL, remaining ? AV_LOG_ERROR : AV_LOG_DEBUG, "Truncating packet of size %d to %"PRId64"\n", size, remaining+1);
240  size = remaining+1;
241  }
242  }
243  return size;
244 }
245 
246 /* Read the data in sane-sized chunks and append to pkt.
247  * Return the number of bytes read or an error. */
249 {
250  int64_t orig_pos = pkt->pos; // av_grow_packet might reset pos
251  int orig_size = pkt->size;
252  int ret;
253 
254  do {
255  int prev_size = pkt->size;
256  int read_size;
257 
258  /* When the caller requests a lot of data, limit it to the amount
259  * left in file or SANE_CHUNK_SIZE when it is not known. */
260  read_size = size;
261  if (read_size > SANE_CHUNK_SIZE/10) {
262  read_size = ffio_limit(s, read_size);
263  // If filesize/maxsize is unknown, limit to SANE_CHUNK_SIZE
264  if (s->maxsize < 0)
265  read_size = FFMIN(read_size, SANE_CHUNK_SIZE);
266  }
267 
268  ret = av_grow_packet(pkt, read_size);
269  if (ret < 0)
270  break;
271 
272  ret = avio_read(s, pkt->data + prev_size, read_size);
273  if (ret != read_size) {
274  av_shrink_packet(pkt, prev_size + FFMAX(ret, 0));
275  break;
276  }
277 
278  size -= read_size;
279  } while (size > 0);
280  if (size > 0)
281  pkt->flags |= AV_PKT_FLAG_CORRUPT;
282 
283  pkt->pos = orig_pos;
284  if (!pkt->size)
285  av_packet_unref(pkt);
286  return pkt->size > orig_size ? pkt->size - orig_size : ret;
287 }
288 
290 {
291  av_init_packet(pkt);
292  pkt->data = NULL;
293  pkt->size = 0;
294  pkt->pos = avio_tell(s);
295 
296  return append_packet_chunked(s, pkt, size);
297 }
298 
300 {
301  if (!pkt->size)
302  return av_get_packet(s, pkt, size);
303  return append_packet_chunked(s, pkt, size);
304 }
305 
306 int av_filename_number_test(const char *filename)
307 {
308  char buf[1024];
309  return filename &&
310  (av_get_frame_filename(buf, sizeof(buf), filename, 1) >= 0);
311 }
312 
313 static int set_codec_from_probe_data(AVFormatContext *s, AVStream *st,
314  AVProbeData *pd)
315 {
316  static const struct {
317  const char *name;
318  enum AVCodecID id;
319  enum AVMediaType type;
320  } fmt_id_type[] = {
331  { "mjpeg_2000",AV_CODEC_ID_JPEG2000, AVMEDIA_TYPE_VIDEO },
333  { "mpegvideo", AV_CODEC_ID_MPEG2VIDEO, AVMEDIA_TYPE_VIDEO },
334  { "truehd", AV_CODEC_ID_TRUEHD, AVMEDIA_TYPE_AUDIO },
335  { 0 }
336  };
337  int score;
338  AVInputFormat *fmt = av_probe_input_format3(pd, 1, &score);
339 
340  if (fmt) {
341  int i;
342  av_log(s, AV_LOG_DEBUG,
343  "Probe with size=%d, packets=%d detected %s with score=%d\n",
345  fmt->name, score);
346  for (i = 0; fmt_id_type[i].name; i++) {
347  if (!strcmp(fmt->name, fmt_id_type[i].name)) {
348  if (fmt_id_type[i].type != AVMEDIA_TYPE_AUDIO &&
349  st->codecpar->sample_rate)
350  continue;
351  if (st->request_probe > score &&
352  st->codecpar->codec_id != fmt_id_type[i].id)
353  continue;
354  st->codecpar->codec_id = fmt_id_type[i].id;
355  st->codecpar->codec_type = fmt_id_type[i].type;
356  st->internal->need_context_update = 1;
357 #if FF_API_LAVF_AVCTX
359  st->codec->codec_type = st->codecpar->codec_type;
360  st->codec->codec_id = st->codecpar->codec_id;
362 #endif
363  return score;
364  }
365  }
366  }
367  return 0;
368 }
369 
370 /************************************************************/
371 /* input media file */
372 
373 int av_demuxer_open(AVFormatContext *ic) {
374  int err;
375 
376  if (ic->format_whitelist && av_match_list(ic->iformat->name, ic->format_whitelist, ',') <= 0) {
377  av_log(ic, AV_LOG_ERROR, "Format not on whitelist \'%s\'\n", ic->format_whitelist);
378  return AVERROR(EINVAL);
379  }
380 
381  if (ic->iformat->read_header) {
382  err = ic->iformat->read_header(ic);
383  if (err < 0)
384  return err;
385  }
386 
387  if (ic->pb && !ic->internal->data_offset)
388  ic->internal->data_offset = avio_tell(ic->pb);
389 
390  return 0;
391 }
392 
393 /* Open input file and probe the format if necessary. */
394 static int init_input(AVFormatContext *s, const char *filename,
396 {
397  int ret;
398  AVProbeData pd = { filename, NULL, 0 };
399  int score = AVPROBE_SCORE_RETRY;
400 
401  if (s->pb) {
403  if (!s->iformat)
404  return av_probe_input_buffer2(s->pb, &s->iformat, filename,
405  s, 0, s->format_probesize);
406  else if (s->iformat->flags & AVFMT_NOFILE)
407  av_log(s, AV_LOG_WARNING, "Custom AVIOContext makes no sense and "
408  "will be ignored with AVFMT_NOFILE format.\n");
409  return 0;
410  }
411 
412  if ((s->iformat && s->iformat->flags & AVFMT_NOFILE) ||
413  (!s->iformat && (s->iformat = av_probe_input_format2(&pd, 0, &score))))
414  return score;
415 
416  if ((ret = s->io_open(s, &s->pb, filename, AVIO_FLAG_READ | s->avio_flags, options)) < 0)
417  return ret;
418 
419  if (s->iformat)
420  return 0;
421  return av_probe_input_buffer2(s->pb, &s->iformat, filename,
422  s, 0, s->format_probesize);
423 }
424 
425 static int add_to_pktbuf(AVPacketList **packet_buffer, AVPacket *pkt,
426  AVPacketList **plast_pktl, int ref)
427 {
428  AVPacketList *pktl = av_mallocz(sizeof(AVPacketList));
429  int ret;
430 
431  if (!pktl)
432  return AVERROR(ENOMEM);
433 
434  if (ref) {
435  if ((ret = av_packet_ref(&pktl->pkt, pkt)) < 0) {
436  av_free(pktl);
437  return ret;
438  }
439  } else {
440  pktl->pkt = *pkt;
441  }
442 
443  if (*packet_buffer)
444  (*plast_pktl)->next = pktl;
445  else
446  *packet_buffer = pktl;
447 
448  /* Add the packet in the buffered packet list. */
449  *plast_pktl = pktl;
450  return 0;
451 }
452 
453 int avformat_queue_attached_pictures(AVFormatContext *s)
454 {
455  int i, ret;
456  for (i = 0; i < s->nb_streams; i++)
458  s->streams[i]->discard < AVDISCARD_ALL) {
459  if (s->streams[i]->attached_pic.size <= 0) {
461  "Attached picture on stream %d has invalid size, "
462  "ignoring\n", i);
463  continue;
464  }
465 
467  &s->streams[i]->attached_pic,
469  if (ret < 0)
470  return ret;
471  }
472  return 0;
473 }
474 
475 static int update_stream_avctx(AVFormatContext *s)
476 {
477  int i, ret;
478  for (i = 0; i < s->nb_streams; i++) {
479  AVStream *st = s->streams[i];
480 
481  if (!st->internal->need_context_update)
482  continue;
483 
484  /* close parser, because it depends on the codec */
485  if (st->parser && st->internal->avctx->codec_id != st->codecpar->codec_id) {
486  av_parser_close(st->parser);
487  st->parser = NULL;
488  }
489 
490  /* update internal codec context, for the parser */
492  if (ret < 0)
493  return ret;
494 
495 #if FF_API_LAVF_AVCTX
497  /* update deprecated public codec context */
498  ret = avcodec_parameters_to_context(st->codec, st->codecpar);
499  if (ret < 0)
500  return ret;
502 #endif
503 
504  st->internal->need_context_update = 0;
505  }
506  return 0;
507 }
508 
509 
510 int avformat_open_input(AVFormatContext **ps, const char *filename,
512 {
513  AVFormatContext *s = *ps;
514  int i, ret = 0;
515  AVDictionary *tmp = NULL;
516  ID3v2ExtraMeta *id3v2_extra_meta = NULL;
517 
518  if (!s && !(s = avformat_alloc_context()))
519  return AVERROR(ENOMEM);
520  if (!s->av_class) {
521  av_log(NULL, AV_LOG_ERROR, "Input context has not been properly allocated by avformat_alloc_context() and is not NULL either\n");
522  return AVERROR(EINVAL);
523  }
524  if (fmt)
525  s->iformat = fmt;
526 
527  if (options)
528  av_dict_copy(&tmp, *options, 0);
529 
530  if (s->pb) // must be before any goto fail
532 
533  if ((ret = av_opt_set_dict(s, &tmp)) < 0)
534  goto fail;
535 
536  av_strlcpy(s->filename, filename ? filename : "", sizeof(s->filename));
537  if ((ret = init_input(s, filename, &tmp)) < 0)
538  goto fail;
539  s->probe_score = ret;
540 
541  if (!s->protocol_whitelist && s->pb && s->pb->protocol_whitelist) {
543  if (!s->protocol_whitelist) {
544  ret = AVERROR(ENOMEM);
545  goto fail;
546  }
547  }
548 
549  if (!s->protocol_blacklist && s->pb && s->pb->protocol_blacklist) {
551  if (!s->protocol_blacklist) {
552  ret = AVERROR(ENOMEM);
553  goto fail;
554  }
555  }
556 
557  if (s->format_whitelist && av_match_list(s->iformat->name, s->format_whitelist, ',') <= 0) {
558  av_log(s, AV_LOG_ERROR, "Format not on whitelist \'%s\'\n", s->format_whitelist);
559  ret = AVERROR(EINVAL);
560  goto fail;
561  }
562 
564 
565  /* Check filename in case an image number is expected. */
566  if (s->iformat->flags & AVFMT_NEEDNUMBER) {
567  if (!av_filename_number_test(filename)) {
568  ret = AVERROR(EINVAL);
569  goto fail;
570  }
571  }
572 
574 
575  /* Allocate private data. */
576  if (s->iformat->priv_data_size > 0) {
577  if (!(s->priv_data = av_mallocz(s->iformat->priv_data_size))) {
578  ret = AVERROR(ENOMEM);
579  goto fail;
580  }
581  if (s->iformat->priv_class) {
582  *(const AVClass **) s->priv_data = s->iformat->priv_class;
584  if ((ret = av_opt_set_dict(s->priv_data, &tmp)) < 0)
585  goto fail;
586  }
587  }
588 
589  /* e.g. AVFMT_NOFILE formats will not have a AVIOContext */
590  if (s->pb)
591  ff_id3v2_read_dict(s->pb, &s->internal->id3v2_meta, ID3v2_DEFAULT_MAGIC, &id3v2_extra_meta);
592 
593 
594  if (!(s->flags&AVFMT_FLAG_PRIV_OPT) && s->iformat->read_header)
595  if ((ret = s->iformat->read_header(s)) < 0)
596  goto fail;
597 
598  if (!s->metadata) {
599  s->metadata = s->internal->id3v2_meta;
600  s->internal->id3v2_meta = NULL;
601  } else if (s->internal->id3v2_meta) {
602  int level = AV_LOG_WARNING;
604  level = AV_LOG_ERROR;
605  av_log(s, level, "Discarding ID3 tags because more suitable tags were found.\n");
608  return AVERROR_INVALIDDATA;
609  }
610 
611  if (id3v2_extra_meta) {
612  if (!strcmp(s->iformat->name, "mp3") || !strcmp(s->iformat->name, "aac") ||
613  !strcmp(s->iformat->name, "tta")) {
614  if ((ret = ff_id3v2_parse_apic(s, &id3v2_extra_meta)) < 0)
615  goto fail;
616  } else
617  av_log(s, AV_LOG_DEBUG, "demuxer does not support additional id3 data, skipping\n");
618  }
619  ff_id3v2_free_extra_meta(&id3v2_extra_meta);
620 
621  if ((ret = avformat_queue_attached_pictures(s)) < 0)
622  goto fail;
623 
624  if (!(s->flags&AVFMT_FLAG_PRIV_OPT) && s->pb && !s->internal->data_offset)
625  s->internal->data_offset = avio_tell(s->pb);
626 
628 
630 
631  for (i = 0; i < s->nb_streams; i++)
633 
634  if (options) {
635  av_dict_free(options);
636  *options = tmp;
637  }
638  *ps = s;
639  return 0;
640 
641 fail:
642  ff_id3v2_free_extra_meta(&id3v2_extra_meta);
643  av_dict_free(&tmp);
644  if (s->pb && !(s->flags & AVFMT_FLAG_CUSTOM_IO))
645  avio_closep(&s->pb);
647  *ps = NULL;
648  return ret;
649 }
650 
651 /*******************************************************/
652 
653 static void force_codec_ids(AVFormatContext *s, AVStream *st)
654 {
655  switch (st->codecpar->codec_type) {
656  case AVMEDIA_TYPE_VIDEO:
657  if (s->video_codec_id)
658  st->codecpar->codec_id = s->video_codec_id;
659  break;
660  case AVMEDIA_TYPE_AUDIO:
661  if (s->audio_codec_id)
662  st->codecpar->codec_id = s->audio_codec_id;
663  break;
665  if (s->subtitle_codec_id)
667  break;
668  case AVMEDIA_TYPE_DATA:
669  if (s->data_codec_id)
670  st->codecpar->codec_id = s->data_codec_id;
671  break;
672  }
673 }
674 
675 static int probe_codec(AVFormatContext *s, AVStream *st, const AVPacket *pkt)
676 {
677  if (st->request_probe>0) {
678  AVProbeData *pd = &st->probe_data;
679  int end;
680  av_log(s, AV_LOG_DEBUG, "probing stream %d pp:%d\n", st->index, st->probe_packets);
681  --st->probe_packets;
682 
683  if (pkt) {
684  uint8_t *new_buf = av_realloc(pd->buf, pd->buf_size+pkt->size+AVPROBE_PADDING_SIZE);
685  if (!new_buf) {
687  "Failed to reallocate probe buffer for stream %d\n",
688  st->index);
689  goto no_packet;
690  }
691  pd->buf = new_buf;
692  memcpy(pd->buf + pd->buf_size, pkt->data, pkt->size);
693  pd->buf_size += pkt->size;
694  memset(pd->buf + pd->buf_size, 0, AVPROBE_PADDING_SIZE);
695  } else {
696 no_packet:
697  st->probe_packets = 0;
698  if (!pd->buf_size) {
700  "nothing to probe for stream %d\n", st->index);
701  }
702  }
703 
705  || st->probe_packets<= 0;
706 
707  if (end || av_log2(pd->buf_size) != av_log2(pd->buf_size - pkt->size)) {
708  int score = set_codec_from_probe_data(s, st, pd);
710  || end) {
711  pd->buf_size = 0;
712  av_freep(&pd->buf);
713  st->request_probe = -1;
714  if (st->codecpar->codec_id != AV_CODEC_ID_NONE) {
715  av_log(s, AV_LOG_DEBUG, "probed stream %d\n", st->index);
716  } else
717  av_log(s, AV_LOG_WARNING, "probed stream %d failed\n", st->index);
718  }
719  force_codec_ids(s, st);
720  }
721  }
722  return 0;
723 }
724 
725 static int update_wrap_reference(AVFormatContext *s, AVStream *st, int stream_index, AVPacket *pkt)
726 {
727  int64_t ref = pkt->dts;
728  int i, pts_wrap_behavior;
729  int64_t pts_wrap_reference;
730  AVProgram *first_program;
731 
732  if (ref == AV_NOPTS_VALUE)
733  ref = pkt->pts;
734  if (st->pts_wrap_reference != AV_NOPTS_VALUE || st->pts_wrap_bits >= 63 || ref == AV_NOPTS_VALUE || !s->correct_ts_overflow)
735  return 0;
736  ref &= (1LL << st->pts_wrap_bits)-1;
737 
738  // reference time stamp should be 60 s before first time stamp
739  pts_wrap_reference = ref - av_rescale(60, st->time_base.den, st->time_base.num);
740  // if first time stamp is not more than 1/8 and 60s before the wrap point, subtract rather than add wrap offset
741  pts_wrap_behavior = (ref < (1LL << st->pts_wrap_bits) - (1LL << st->pts_wrap_bits-3)) ||
742  (ref < (1LL << st->pts_wrap_bits) - av_rescale(60, st->time_base.den, st->time_base.num)) ?
744 
745  first_program = av_find_program_from_stream(s, NULL, stream_index);
746 
747  if (!first_program) {
748  int default_stream_index = av_find_default_stream_index(s);
749  if (s->streams[default_stream_index]->pts_wrap_reference == AV_NOPTS_VALUE) {
750  for (i = 0; i < s->nb_streams; i++) {
752  continue;
753  s->streams[i]->pts_wrap_reference = pts_wrap_reference;
754  s->streams[i]->pts_wrap_behavior = pts_wrap_behavior;
755  }
756  }
757  else {
758  st->pts_wrap_reference = s->streams[default_stream_index]->pts_wrap_reference;
759  st->pts_wrap_behavior = s->streams[default_stream_index]->pts_wrap_behavior;
760  }
761  }
762  else {
763  AVProgram *program = first_program;
764  while (program) {
765  if (program->pts_wrap_reference != AV_NOPTS_VALUE) {
766  pts_wrap_reference = program->pts_wrap_reference;
767  pts_wrap_behavior = program->pts_wrap_behavior;
768  break;
769  }
770  program = av_find_program_from_stream(s, program, stream_index);
771  }
772 
773  // update every program with differing pts_wrap_reference
774  program = first_program;
775  while (program) {
776  if (program->pts_wrap_reference != pts_wrap_reference) {
777  for (i = 0; i<program->nb_stream_indexes; i++) {
778  s->streams[program->stream_index[i]]->pts_wrap_reference = pts_wrap_reference;
779  s->streams[program->stream_index[i]]->pts_wrap_behavior = pts_wrap_behavior;
780  }
781 
782  program->pts_wrap_reference = pts_wrap_reference;
783  program->pts_wrap_behavior = pts_wrap_behavior;
784  }
785  program = av_find_program_from_stream(s, program, stream_index);
786  }
787  }
788  return 1;
789 }
790 
791 int ff_read_packet(AVFormatContext *s, AVPacket *pkt)
792 {
793  int ret, i, err;
794  AVStream *st;
795 
796  for (;;) {
798 
799  if (pktl) {
800  *pkt = pktl->pkt;
801  st = s->streams[pkt->stream_index];
803  if ((err = probe_codec(s, st, NULL)) < 0)
804  return err;
805  if (st->request_probe <= 0) {
806  s->internal->raw_packet_buffer = pktl->next;
808  av_free(pktl);
809  return 0;
810  }
811  }
812 
813  pkt->data = NULL;
814  pkt->size = 0;
815  av_init_packet(pkt);
816  ret = s->iformat->read_packet(s, pkt);
817  if (ret < 0) {
818  /* Some demuxers return FFERROR_REDO when they consume
819  data and discard it (ignored streams, junk, extradata).
820  We must re-call the demuxer to get the real packet. */
821  if (ret == FFERROR_REDO)
822  continue;
823  if (!pktl || ret == AVERROR(EAGAIN))
824  return ret;
825  for (i = 0; i < s->nb_streams; i++) {
826  st = s->streams[i];
827  if (st->probe_packets || st->request_probe > 0)
828  if ((err = probe_codec(s, st, NULL)) < 0)
829  return err;
830  av_assert0(st->request_probe <= 0);
831  }
832  continue;
833  }
834 
835  if (!pkt->buf) {
836  AVPacket tmp = { 0 };
837  ret = av_packet_ref(&tmp, pkt);
838  if (ret < 0)
839  return ret;
840  *pkt = tmp;
841  }
842 
843  if ((s->flags & AVFMT_FLAG_DISCARD_CORRUPT) &&
844  (pkt->flags & AV_PKT_FLAG_CORRUPT)) {
846  "Dropped corrupted packet (stream = %d)\n",
847  pkt->stream_index);
848  av_packet_unref(pkt);
849  continue;
850  }
851 
852  if (pkt->stream_index >= (unsigned)s->nb_streams) {
853  av_log(s, AV_LOG_ERROR, "Invalid stream index %d\n", pkt->stream_index);
854  continue;
855  }
856 
857  st = s->streams[pkt->stream_index];
858 
860  // correct first time stamps to negative values
861  if (!is_relative(st->first_dts))
862  st->first_dts = wrap_timestamp(st, st->first_dts);
863  if (!is_relative(st->start_time))
864  st->start_time = wrap_timestamp(st, st->start_time);
865  if (!is_relative(st->cur_dts))
866  st->cur_dts = wrap_timestamp(st, st->cur_dts);
867  }
868 
869  pkt->dts = wrap_timestamp(st, pkt->dts);
870  pkt->pts = wrap_timestamp(st, pkt->pts);
871 
872  force_codec_ids(s, st);
873 
874  /* TODO: audio: time filter; video: frame reordering (pts != dts) */
876  pkt->dts = pkt->pts = av_rescale_q(av_gettime(), AV_TIME_BASE_Q, st->time_base);
877 
878  if (!pktl && st->request_probe <= 0)
879  return ret;
880 
881  err = add_to_pktbuf(&s->internal->raw_packet_buffer, pkt,
883  if (err)
884  return err;
886 
887  if ((err = probe_codec(s, st, pkt)) < 0)
888  return err;
889  }
890 }
891 
892 
893 /**********************************************************/
894 
896 {
897  if (/*avctx->codec_id == AV_CODEC_ID_AAC ||*/
898  avctx->codec_id == AV_CODEC_ID_MP1 ||
899  avctx->codec_id == AV_CODEC_ID_MP2 ||
900  avctx->codec_id == AV_CODEC_ID_MP3/* ||
901  avctx->codec_id == AV_CODEC_ID_CELT*/)
902  return 1;
903  return 0;
904 }
905 
906 /**
907  * Return the frame duration in seconds. Return 0 if not available.
908  */
909 void ff_compute_frame_duration(AVFormatContext *s, int *pnum, int *pden, AVStream *st,
911 {
912  AVRational codec_framerate = s->iformat ? st->internal->avctx->framerate :
914  int frame_size, sample_rate;
915 
916 #if FF_API_LAVF_AVCTX
918  if ((!codec_framerate.den || !codec_framerate.num) && st->codec->time_base.den && st->codec->time_base.num)
919  codec_framerate = av_mul_q(av_inv_q(st->codec->time_base), (AVRational){1, st->codec->ticks_per_frame});
921 #endif
922 
923  *pnum = 0;
924  *pden = 0;
925  switch (st->codecpar->codec_type) {
926  case AVMEDIA_TYPE_VIDEO:
927  if (st->r_frame_rate.num && !pc && s->iformat) {
928  *pnum = st->r_frame_rate.den;
929  *pden = st->r_frame_rate.num;
930  } else if (st->time_base.num * 1000LL > st->time_base.den) {
931  *pnum = st->time_base.num;
932  *pden = st->time_base.den;
933  } else if (codec_framerate.den * 1000LL > codec_framerate.num) {
934  av_assert0(st->internal->avctx->ticks_per_frame);
935  av_reduce(pnum, pden,
936  codec_framerate.den,
937  codec_framerate.num * (int64_t)st->internal->avctx->ticks_per_frame,
938  INT_MAX);
939 
940  if (pc && pc->repeat_pict) {
941  av_assert0(s->iformat); // this may be wrong for interlaced encoding but its not used for that case
942  av_reduce(pnum, pden,
943  (*pnum) * (1LL + pc->repeat_pict),
944  (*pden),
945  INT_MAX);
946  }
947  /* If this codec can be interlaced or progressive then we need
948  * a parser to compute duration of a packet. Thus if we have
949  * no parser in such case leave duration undefined. */
950  if (st->internal->avctx->ticks_per_frame > 1 && !pc)
951  *pnum = *pden = 0;
952  }
953  break;
954  case AVMEDIA_TYPE_AUDIO:
955  if (st->internal->avctx_inited) {
956  frame_size = av_get_audio_frame_duration(st->internal->avctx, pkt->size);
957  sample_rate = st->internal->avctx->sample_rate;
958  } else {
959  frame_size = av_get_audio_frame_duration2(st->codecpar, pkt->size);
960  sample_rate = st->codecpar->sample_rate;
961  }
962  if (frame_size <= 0 || sample_rate <= 0)
963  break;
964  *pnum = frame_size;
965  *pden = sample_rate;
966  break;
967  default:
968  break;
969  }
970 }
971 
972 static int is_intra_only(enum AVCodecID id)
973 {
975  if (!d)
976  return 0;
978  return 0;
979  return 1;
980 }
981 
982 static int has_decode_delay_been_guessed(AVStream *st)
983 {
984  if (st->codecpar->codec_id != AV_CODEC_ID_H264) return 1;
985  if (!st->info) // if we have left find_stream_info then nb_decoded_frames won't increase anymore for stream copy
986  return 1;
987 #if CONFIG_H264_DECODER
988  if (st->internal->avctx->has_b_frames &&
990  return 1;
991 #endif
992  if (st->internal->avctx->has_b_frames<3)
993  return st->nb_decoded_frames >= 7;
994  else if (st->internal->avctx->has_b_frames<4)
995  return st->nb_decoded_frames >= 18;
996  else
997  return st->nb_decoded_frames >= 20;
998 }
999 
1000 static AVPacketList *get_next_pkt(AVFormatContext *s, AVStream *st, AVPacketList *pktl)
1001 {
1002  if (pktl->next)
1003  return pktl->next;
1004  if (pktl == s->internal->packet_buffer_end)
1005  return s->internal->parse_queue;
1006  return NULL;
1007 }
1008 
1009 static int64_t select_from_pts_buffer(AVStream *st, int64_t *pts_buffer, int64_t dts) {
1010  int onein_oneout = st->codecpar->codec_id != AV_CODEC_ID_H264 &&
1012 
1013  if(!onein_oneout) {
1014  int delay = st->internal->avctx->has_b_frames;
1015  int i;
1016 
1017  if (dts == AV_NOPTS_VALUE) {
1018  int64_t best_score = INT64_MAX;
1019  for (i = 0; i<delay; i++) {
1020  if (st->pts_reorder_error_count[i]) {
1021  int64_t score = st->pts_reorder_error[i] / st->pts_reorder_error_count[i];
1022  if (score < best_score) {
1023  best_score = score;
1024  dts = pts_buffer[i];
1025  }
1026  }
1027  }
1028  } else {
1029  for (i = 0; i<delay; i++) {
1030  if (pts_buffer[i] != AV_NOPTS_VALUE) {
1031  int64_t diff = FFABS(pts_buffer[i] - dts)
1032  + (uint64_t)st->pts_reorder_error[i];
1033  diff = FFMAX(diff, st->pts_reorder_error[i]);
1034  st->pts_reorder_error[i] = diff;
1035  st->pts_reorder_error_count[i]++;
1036  if (st->pts_reorder_error_count[i] > 250) {
1037  st->pts_reorder_error[i] >>= 1;
1038  st->pts_reorder_error_count[i] >>= 1;
1039  }
1040  }
1041  }
1042  }
1043  }
1044 
1045  if (dts == AV_NOPTS_VALUE)
1046  dts = pts_buffer[0];
1047 
1048  return dts;
1049 }
1050 
1051 /**
1052  * Updates the dts of packets of a stream in pkt_buffer, by re-ordering the pts
1053  * of the packets in a window.
1054  */
1055 static void update_dts_from_pts(AVFormatContext *s, int stream_index,
1056  AVPacketList *pkt_buffer)
1057 {
1058  AVStream *st = s->streams[stream_index];
1059  int delay = st->internal->avctx->has_b_frames;
1060  int i;
1061 
1062  int64_t pts_buffer[MAX_REORDER_DELAY+1];
1063 
1064  for (i = 0; i<MAX_REORDER_DELAY+1; i++)
1065  pts_buffer[i] = AV_NOPTS_VALUE;
1066 
1067  for (; pkt_buffer; pkt_buffer = get_next_pkt(s, st, pkt_buffer)) {
1068  if (pkt_buffer->pkt.stream_index != stream_index)
1069  continue;
1070 
1071  if (pkt_buffer->pkt.pts != AV_NOPTS_VALUE && delay <= MAX_REORDER_DELAY) {
1072  pts_buffer[0] = pkt_buffer->pkt.pts;
1073  for (i = 0; i<delay && pts_buffer[i] > pts_buffer[i + 1]; i++)
1074  FFSWAP(int64_t, pts_buffer[i], pts_buffer[i + 1]);
1075 
1076  pkt_buffer->pkt.dts = select_from_pts_buffer(st, pts_buffer, pkt_buffer->pkt.dts);
1077  }
1078  }
1079 }
1080 
1081 static void update_initial_timestamps(AVFormatContext *s, int stream_index,
1082  int64_t dts, int64_t pts, AVPacket *pkt)
1083 {
1084  AVStream *st = s->streams[stream_index];
1086  AVPacketList *pktl_it;
1087 
1088  uint64_t shift;
1089 
1090  if (st->first_dts != AV_NOPTS_VALUE ||
1091  dts == AV_NOPTS_VALUE ||
1092  st->cur_dts == AV_NOPTS_VALUE ||
1093  is_relative(dts))
1094  return;
1095 
1096  st->first_dts = dts - (st->cur_dts - RELATIVE_TS_BASE);
1097  st->cur_dts = dts;
1098  shift = (uint64_t)st->first_dts - RELATIVE_TS_BASE;
1099 
1100  if (is_relative(pts))
1101  pts += shift;
1102 
1103  for (pktl_it = pktl; pktl_it; pktl_it = get_next_pkt(s, st, pktl_it)) {
1104  if (pktl_it->pkt.stream_index != stream_index)
1105  continue;
1106  if (is_relative(pktl_it->pkt.pts))
1107  pktl_it->pkt.pts += shift;
1108 
1109  if (is_relative(pktl_it->pkt.dts))
1110  pktl_it->pkt.dts += shift;
1111 
1112  if (st->start_time == AV_NOPTS_VALUE && pktl_it->pkt.pts != AV_NOPTS_VALUE) {
1113  st->start_time = pktl_it->pkt.pts;
1116  }
1117  }
1118 
1120  update_dts_from_pts(s, stream_index, pktl);
1121  }
1122 
1123  if (st->start_time == AV_NOPTS_VALUE) {
1124  st->start_time = pts;
1125  if (st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO && st->codecpar->sample_rate)
1126  st->start_time += av_rescale_q(st->skip_samples, (AVRational){1, st->codecpar->sample_rate}, st->time_base);
1127  }
1128 }
1129 
1130 static void update_initial_durations(AVFormatContext *s, AVStream *st,
1131  int stream_index, int duration)
1132 {
1134  int64_t cur_dts = RELATIVE_TS_BASE;
1135 
1136  if (st->first_dts != AV_NOPTS_VALUE) {
1138  return;
1140  cur_dts = st->first_dts;
1141  for (; pktl; pktl = get_next_pkt(s, st, pktl)) {
1142  if (pktl->pkt.stream_index == stream_index) {
1143  if (pktl->pkt.pts != pktl->pkt.dts ||
1144  pktl->pkt.dts != AV_NOPTS_VALUE ||
1145  pktl->pkt.duration)
1146  break;
1147  cur_dts -= duration;
1148  }
1149  }
1150  if (pktl && pktl->pkt.dts != st->first_dts) {
1151  av_log(s, AV_LOG_DEBUG, "first_dts %s not matching first dts %s (pts %s, duration %"PRId64") in the queue\n",
1152  av_ts2str(st->first_dts), av_ts2str(pktl->pkt.dts), av_ts2str(pktl->pkt.pts), pktl->pkt.duration);
1153  return;
1154  }
1155  if (!pktl) {
1156  av_log(s, AV_LOG_DEBUG, "first_dts %s but no packet with dts in the queue\n", av_ts2str(st->first_dts));
1157  return;
1158  }
1160  st->first_dts = cur_dts;
1161  } else if (st->cur_dts != RELATIVE_TS_BASE)
1162  return;
1163 
1164  for (; pktl; pktl = get_next_pkt(s, st, pktl)) {
1165  if (pktl->pkt.stream_index != stream_index)
1166  continue;
1167  if ((pktl->pkt.pts == pktl->pkt.dts ||
1168  pktl->pkt.pts == AV_NOPTS_VALUE) &&
1169  (pktl->pkt.dts == AV_NOPTS_VALUE ||
1170  pktl->pkt.dts == st->first_dts ||
1171  pktl->pkt.dts == RELATIVE_TS_BASE) &&
1172  !pktl->pkt.duration) {
1173  pktl->pkt.dts = cur_dts;
1174  if (!st->internal->avctx->has_b_frames)
1175  pktl->pkt.pts = cur_dts;
1176 // if (st->codecpar->codec_type != AVMEDIA_TYPE_AUDIO)
1177  pktl->pkt.duration = duration;
1178  } else
1179  break;
1180  cur_dts = pktl->pkt.dts + pktl->pkt.duration;
1181  }
1182  if (!pktl)
1183  st->cur_dts = cur_dts;
1184 }
1185 
1186 static void compute_pkt_fields(AVFormatContext *s, AVStream *st,
1188  int64_t next_dts, int64_t next_pts)
1189 {
1190  int num, den, presentation_delayed, delay, i;
1191  int64_t offset;
1193  int onein_oneout = st->codecpar->codec_id != AV_CODEC_ID_H264 &&
1195 
1196  if (s->flags & AVFMT_FLAG_NOFILLIN)
1197  return;
1198 
1199  if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO && pkt->dts != AV_NOPTS_VALUE) {
1200  if (pkt->dts == pkt->pts && st->last_dts_for_order_check != AV_NOPTS_VALUE) {
1201  if (st->last_dts_for_order_check <= pkt->dts) {
1202  st->dts_ordered++;
1203  } else {
1205  "DTS %"PRIi64" < %"PRIi64" out of order\n",
1206  pkt->dts,
1208  st->dts_misordered++;
1209  }
1210  if (st->dts_ordered + st->dts_misordered > 250) {
1211  st->dts_ordered >>= 1;
1212  st->dts_misordered >>= 1;
1213  }
1214  }
1215 
1216  st->last_dts_for_order_check = pkt->dts;
1217  if (st->dts_ordered < 8*st->dts_misordered && pkt->dts == pkt->pts)
1218  pkt->dts = AV_NOPTS_VALUE;
1219  }
1220 
1221  if ((s->flags & AVFMT_FLAG_IGNDTS) && pkt->pts != AV_NOPTS_VALUE)
1222  pkt->dts = AV_NOPTS_VALUE;
1223 
1224  if (pc && pc->pict_type == AV_PICTURE_TYPE_B
1225  && !st->internal->avctx->has_b_frames)
1226  //FIXME Set low_delay = 0 when has_b_frames = 1
1227  st->internal->avctx->has_b_frames = 1;
1228 
1229  /* do we have a video B-frame ? */
1230  delay = st->internal->avctx->has_b_frames;
1231  presentation_delayed = 0;
1232 
1233  /* XXX: need has_b_frame, but cannot get it if the codec is
1234  * not initialized */
1235  if (delay &&
1236  pc && pc->pict_type != AV_PICTURE_TYPE_B)
1237  presentation_delayed = 1;
1238 
1239  if (pkt->pts != AV_NOPTS_VALUE && pkt->dts != AV_NOPTS_VALUE &&
1240  st->pts_wrap_bits < 63 &&
1241  pkt->dts - (1LL << (st->pts_wrap_bits - 1)) > pkt->pts) {
1242  if (is_relative(st->cur_dts) || pkt->dts - (1LL<<(st->pts_wrap_bits - 1)) > st->cur_dts) {
1243  pkt->dts -= 1LL << st->pts_wrap_bits;
1244  } else
1245  pkt->pts += 1LL << st->pts_wrap_bits;
1246  }
1247 
1248  /* Some MPEG-2 in MPEG-PS lack dts (issue #171 / input_file.mpg).
1249  * We take the conservative approach and discard both.
1250  * Note: If this is misbehaving for an H.264 file, then possibly
1251  * presentation_delayed is not set correctly. */
1252  if (delay == 1 && pkt->dts == pkt->pts &&
1253  pkt->dts != AV_NOPTS_VALUE && presentation_delayed) {
1254  av_log(s, AV_LOG_DEBUG, "invalid dts/pts combination %"PRIi64"\n", pkt->dts);
1255  if ( strcmp(s->iformat->name, "mov,mp4,m4a,3gp,3g2,mj2")
1256  && strcmp(s->iformat->name, "flv")) // otherwise we discard correct timestamps for vc1-wmapro.ism
1257  pkt->dts = AV_NOPTS_VALUE;
1258  }
1259 
1260  duration = av_mul_q((AVRational) {pkt->duration, 1}, st->time_base);
1261  if (pkt->duration == 0) {
1262  ff_compute_frame_duration(s, &num, &den, st, pc, pkt);
1263  if (den && num) {
1264  duration = (AVRational) {num, den};
1265  pkt->duration = av_rescale_rnd(1,
1266  num * (int64_t) st->time_base.den,
1267  den * (int64_t) st->time_base.num,
1268  AV_ROUND_DOWN);
1269  }
1270  }
1271 
1272  if (pkt->duration != 0 && (s->internal->packet_buffer || s->internal->parse_queue))
1273  update_initial_durations(s, st, pkt->stream_index, pkt->duration);
1274 
1275  /* Correct timestamps with byte offset if demuxers only have timestamps
1276  * on packet boundaries */
1277  if (pc && st->need_parsing == AVSTREAM_PARSE_TIMESTAMPS && pkt->size) {
1278  /* this will estimate bitrate based on this frame's duration and size */
1279  offset = av_rescale(pc->offset, pkt->duration, pkt->size);
1280  if (pkt->pts != AV_NOPTS_VALUE)
1281  pkt->pts += offset;
1282  if (pkt->dts != AV_NOPTS_VALUE)
1283  pkt->dts += offset;
1284  }
1285 
1286  /* This may be redundant, but it should not hurt. */
1287  if (pkt->dts != AV_NOPTS_VALUE &&
1288  pkt->pts != AV_NOPTS_VALUE &&
1289  pkt->pts > pkt->dts)
1290  presentation_delayed = 1;
1291 
1292  if (s->debug & FF_FDEBUG_TS)
1293  av_log(s, AV_LOG_TRACE,
1294  "IN delayed:%d pts:%s, dts:%s cur_dts:%s st:%d pc:%p duration:%"PRId64" delay:%d onein_oneout:%d\n",
1295  presentation_delayed, av_ts2str(pkt->pts), av_ts2str(pkt->dts), av_ts2str(st->cur_dts),
1296  pkt->stream_index, pc, pkt->duration, delay, onein_oneout);
1297 
1298  /* Interpolate PTS and DTS if they are not present. We skip H264
1299  * currently because delay and has_b_frames are not reliably set. */
1300  if ((delay == 0 || (delay == 1 && pc)) &&
1301  onein_oneout) {
1302  if (presentation_delayed) {
1303  /* DTS = decompression timestamp */
1304  /* PTS = presentation timestamp */
1305  if (pkt->dts == AV_NOPTS_VALUE)
1306  pkt->dts = st->last_IP_pts;
1307  update_initial_timestamps(s, pkt->stream_index, pkt->dts, pkt->pts, pkt);
1308  if (pkt->dts == AV_NOPTS_VALUE)
1309  pkt->dts = st->cur_dts;
1310 
1311  /* This is tricky: the dts must be incremented by the duration
1312  * of the frame we are displaying, i.e. the last I- or P-frame. */
1313  if (st->last_IP_duration == 0)
1314  st->last_IP_duration = pkt->duration;
1315  if (pkt->dts != AV_NOPTS_VALUE)
1316  st->cur_dts = pkt->dts + st->last_IP_duration;
1317  if (pkt->dts != AV_NOPTS_VALUE &&
1318  pkt->pts == AV_NOPTS_VALUE &&
1319  st->last_IP_duration > 0 &&
1320  ((uint64_t)st->cur_dts - (uint64_t)next_dts + 1) <= 2 &&
1321  next_dts != next_pts &&
1322  next_pts != AV_NOPTS_VALUE)
1323  pkt->pts = next_dts;
1324 
1325  st->last_IP_duration = pkt->duration;
1326  st->last_IP_pts = pkt->pts;
1327  /* Cannot compute PTS if not present (we can compute it only
1328  * by knowing the future. */
1329  } else if (pkt->pts != AV_NOPTS_VALUE ||
1330  pkt->dts != AV_NOPTS_VALUE ||
1331  pkt->duration ) {
1332 
1333  /* presentation is not delayed : PTS and DTS are the same */
1334  if (pkt->pts == AV_NOPTS_VALUE)
1335  pkt->pts = pkt->dts;
1337  pkt->pts, pkt);
1338  if (pkt->pts == AV_NOPTS_VALUE)
1339  pkt->pts = st->cur_dts;
1340  pkt->dts = pkt->pts;
1341  if (pkt->pts != AV_NOPTS_VALUE)
1342  st->cur_dts = av_add_stable(st->time_base, pkt->pts, duration, 1);
1343  }
1344  }
1345 
1346  if (pkt->pts != AV_NOPTS_VALUE && delay <= MAX_REORDER_DELAY) {
1347  st->pts_buffer[0] = pkt->pts;
1348  for (i = 0; i<delay && st->pts_buffer[i] > st->pts_buffer[i + 1]; i++)
1349  FFSWAP(int64_t, st->pts_buffer[i], st->pts_buffer[i + 1]);
1350 
1352  pkt->dts = select_from_pts_buffer(st, st->pts_buffer, pkt->dts);
1353  }
1354  // We skipped it above so we try here.
1355  if (!onein_oneout)
1356  // This should happen on the first packet
1357  update_initial_timestamps(s, pkt->stream_index, pkt->dts, pkt->pts, pkt);
1358  if (pkt->dts > st->cur_dts)
1359  st->cur_dts = pkt->dts;
1360 
1361  if (s->debug & FF_FDEBUG_TS)
1362  av_log(s, AV_LOG_TRACE, "OUTdelayed:%d/%d pts:%s, dts:%s cur_dts:%s\n",
1363  presentation_delayed, delay, av_ts2str(pkt->pts), av_ts2str(pkt->dts), av_ts2str(st->cur_dts));
1364 
1365  /* update flags */
1366  if (is_intra_only(st->codecpar->codec_id))
1367  pkt->flags |= AV_PKT_FLAG_KEY;
1368 #if FF_API_CONVERGENCE_DURATION
1370  if (pc)
1373 #endif
1374 }
1375 
1376 static void free_packet_buffer(AVPacketList **pkt_buf, AVPacketList **pkt_buf_end)
1377 {
1378  while (*pkt_buf) {
1379  AVPacketList *pktl = *pkt_buf;
1380  *pkt_buf = pktl->next;
1381  av_packet_unref(&pktl->pkt);
1382  av_freep(&pktl);
1383  }
1384  *pkt_buf_end = NULL;
1385 }
1386 
1387 /**
1388  * Parse a packet, add all split parts to parse_queue.
1389  *
1390  * @param pkt Packet to parse, NULL when flushing the parser at end of stream.
1391  */
1392 static int parse_packet(AVFormatContext *s, AVPacket *pkt, int stream_index)
1393 {
1394  AVPacket out_pkt = { 0 }, flush_pkt = { 0 };
1395  AVStream *st = s->streams[stream_index];
1396  uint8_t *data = pkt ? pkt->data : NULL;
1397  int size = pkt ? pkt->size : 0;
1398  int ret = 0, got_output = 0;
1399 
1400  if (!pkt) {
1402  pkt = &flush_pkt;
1403  got_output = 1;
1404  } else if (!size && st->parser->flags & PARSER_FLAG_COMPLETE_FRAMES) {
1405  // preserve 0-size sync packets
1407  }
1408 
1409  while (size > 0 || (pkt == &flush_pkt && got_output)) {
1410  int len;
1411  int64_t next_pts = pkt->pts;
1412  int64_t next_dts = pkt->dts;
1413 
1414  av_init_packet(&out_pkt);
1415  len = av_parser_parse2(st->parser, st->internal->avctx,
1416  &out_pkt.data, &out_pkt.size, data, size,
1417  pkt->pts, pkt->dts, pkt->pos);
1418 
1419  pkt->pts = pkt->dts = AV_NOPTS_VALUE;
1420  pkt->pos = -1;
1421  /* increment read pointer */
1422  data += len;
1423  size -= len;
1424 
1425  got_output = !!out_pkt.size;
1426 
1427  if (!out_pkt.size)
1428  continue;
1429 
1430  if (pkt->side_data) {
1431  out_pkt.side_data = pkt->side_data;
1432  out_pkt.side_data_elems = pkt->side_data_elems;
1433  pkt->side_data = NULL;
1434  pkt->side_data_elems = 0;
1435  }
1436 
1437  /* set the duration */
1438  out_pkt.duration = (st->parser->flags & PARSER_FLAG_COMPLETE_FRAMES) ? pkt->duration : 0;
1440  if (st->internal->avctx->sample_rate > 0) {
1441  out_pkt.duration =
1443  (AVRational) { 1, st->internal->avctx->sample_rate },
1444  st->time_base,
1445  AV_ROUND_DOWN);
1446  }
1447  }
1448 
1449  out_pkt.stream_index = st->index;
1450  out_pkt.pts = st->parser->pts;
1451  out_pkt.dts = st->parser->dts;
1452  out_pkt.pos = st->parser->pos;
1453 
1455  out_pkt.pos = st->parser->frame_offset;
1456 
1457  if (st->parser->key_frame == 1 ||
1458  (st->parser->key_frame == -1 &&
1460  out_pkt.flags |= AV_PKT_FLAG_KEY;
1461 
1462  if (st->parser->key_frame == -1 && st->parser->pict_type ==AV_PICTURE_TYPE_NONE && (pkt->flags&AV_PKT_FLAG_KEY))
1463  out_pkt.flags |= AV_PKT_FLAG_KEY;
1464 
1465  compute_pkt_fields(s, st, st->parser, &out_pkt, next_dts, next_pts);
1466 
1467  ret = add_to_pktbuf(&s->internal->parse_queue, &out_pkt,
1468  &s->internal->parse_queue_end, 1);
1469  av_packet_unref(&out_pkt);
1470  if (ret < 0)
1471  goto fail;
1472  }
1473 
1474  /* end of the stream => close and free the parser */
1475  if (pkt == &flush_pkt) {
1476  av_parser_close(st->parser);
1477  st->parser = NULL;
1478  }
1479 
1480 fail:
1482  return ret;
1483 }
1484 
1485 static int read_from_packet_buffer(AVPacketList **pkt_buffer,
1486  AVPacketList **pkt_buffer_end,
1487  AVPacket *pkt)
1488 {
1489  AVPacketList *pktl;
1490  av_assert0(*pkt_buffer);
1491  pktl = *pkt_buffer;
1492  *pkt = pktl->pkt;
1493  *pkt_buffer = pktl->next;
1494  if (!pktl->next)
1495  *pkt_buffer_end = NULL;
1496  av_freep(&pktl);
1497  return 0;
1498 }
1499 
1500 static int64_t ts_to_samples(AVStream *st, int64_t ts)
1501 {
1502  return av_rescale(ts, st->time_base.num * st->codecpar->sample_rate, st->time_base.den);
1503 }
1504 
1505 static int read_frame_internal(AVFormatContext *s, AVPacket *pkt)
1506 {
1507  int ret = 0, i, got_packet = 0;
1508  AVDictionary *metadata = NULL;
1509 
1510  av_init_packet(pkt);
1511 
1512  while (!got_packet && !s->internal->parse_queue) {
1513  AVStream *st;
1514  AVPacket cur_pkt;
1515 
1516  /* read next packet */
1517  ret = ff_read_packet(s, &cur_pkt);
1518  if (ret < 0) {
1519  if (ret == AVERROR(EAGAIN))
1520  return ret;
1521  /* flush the parsers */
1522  for (i = 0; i < s->nb_streams; i++) {
1523  st = s->streams[i];
1524  if (st->parser && st->need_parsing)
1525  parse_packet(s, NULL, st->index);
1526  }
1527  /* all remaining packets are now in parse_queue =>
1528  * really terminate parsing */
1529  break;
1530  }
1531  ret = 0;
1532  st = s->streams[cur_pkt.stream_index];
1533 
1534  /* update context if required */
1535  if (st->internal->need_context_update) {
1536  if (avcodec_is_open(st->internal->avctx)) {
1537  av_log(s, AV_LOG_DEBUG, "Demuxer context update while decoder is open, closing and trying to re-open\n");
1539  st->info->found_decoder = 0;
1540  }
1541 
1542  /* close parser, because it depends on the codec */
1543  if (st->parser && st->internal->avctx->codec_id != st->codecpar->codec_id) {
1544  av_parser_close(st->parser);
1545  st->parser = NULL;
1546  }
1547 
1549  if (ret < 0)
1550  return ret;
1551 
1552 #if FF_API_LAVF_AVCTX
1554  /* update deprecated public codec context */
1555  ret = avcodec_parameters_to_context(st->codec, st->codecpar);
1556  if (ret < 0)
1557  return ret;
1559 #endif
1560 
1561  st->internal->need_context_update = 0;
1562  }
1563 
1564  if (cur_pkt.pts != AV_NOPTS_VALUE &&
1565  cur_pkt.dts != AV_NOPTS_VALUE &&
1566  cur_pkt.pts < cur_pkt.dts) {
1568  "Invalid timestamps stream=%d, pts=%s, dts=%s, size=%d\n",
1569  cur_pkt.stream_index,
1570  av_ts2str(cur_pkt.pts),
1571  av_ts2str(cur_pkt.dts),
1572  cur_pkt.size);
1573  }
1574  if (s->debug & FF_FDEBUG_TS)
1575  av_log(s, AV_LOG_DEBUG,
1576  "ff_read_packet stream=%d, pts=%s, dts=%s, size=%d, duration=%"PRId64", flags=%d\n",
1577  cur_pkt.stream_index,
1578  av_ts2str(cur_pkt.pts),
1579  av_ts2str(cur_pkt.dts),
1580  cur_pkt.size, cur_pkt.duration, cur_pkt.flags);
1581 
1582  if (st->need_parsing && !st->parser && !(s->flags & AVFMT_FLAG_NOPARSE)) {
1583  st->parser = av_parser_init(st->codecpar->codec_id);
1584  if (!st->parser) {
1585  av_log(s, AV_LOG_VERBOSE, "parser not found for codec "
1586  "%s, packets or times may be invalid.\n",
1588  /* no parser available: just output the raw packets */
1590  } else if (st->need_parsing == AVSTREAM_PARSE_HEADERS)
1592  else if (st->need_parsing == AVSTREAM_PARSE_FULL_ONCE)
1593  st->parser->flags |= PARSER_FLAG_ONCE;
1594  else if (st->need_parsing == AVSTREAM_PARSE_FULL_RAW)
1596  }
1597 
1598  if (!st->need_parsing || !st->parser) {
1599  /* no parsing needed: we just output the packet as is */
1600  *pkt = cur_pkt;
1602  if ((s->iformat->flags & AVFMT_GENERIC_INDEX) &&
1603  (pkt->flags & AV_PKT_FLAG_KEY) && pkt->dts != AV_NOPTS_VALUE) {
1604  ff_reduce_index(s, st->index);
1605  av_add_index_entry(st, pkt->pos, pkt->dts,
1606  0, 0, AVINDEX_KEYFRAME);
1607  }
1608  got_packet = 1;
1609  } else if (st->discard < AVDISCARD_ALL) {
1610  if ((ret = parse_packet(s, &cur_pkt, cur_pkt.stream_index)) < 0)
1611  return ret;
1613  st->codecpar->bit_rate = st->internal->avctx->bit_rate;
1614  st->codecpar->channels = st->internal->avctx->channels;
1616  st->codecpar->codec_id = st->internal->avctx->codec_id;
1617  } else {
1618  /* free packet */
1619  av_packet_unref(&cur_pkt);
1620  }
1621  if (pkt->flags & AV_PKT_FLAG_KEY)
1622  st->skip_to_keyframe = 0;
1623  if (st->skip_to_keyframe) {
1624  av_packet_unref(&cur_pkt);
1625  if (got_packet) {
1626  *pkt = cur_pkt;
1627  }
1628  got_packet = 0;
1629  }
1630  }
1631 
1632  if (!got_packet && s->internal->parse_queue)
1634 
1635  if (ret >= 0) {
1636  AVStream *st = s->streams[pkt->stream_index];
1637  int discard_padding = 0;
1638  if (st->first_discard_sample && pkt->pts != AV_NOPTS_VALUE) {
1639  int64_t pts = pkt->pts - (is_relative(pkt->pts) ? RELATIVE_TS_BASE : 0);
1640  int64_t sample = ts_to_samples(st, pts);
1641  int duration = ts_to_samples(st, pkt->duration);
1642  int64_t end_sample = sample + duration;
1643  if (duration > 0 && end_sample >= st->first_discard_sample &&
1644  sample < st->last_discard_sample)
1645  discard_padding = FFMIN(end_sample - st->first_discard_sample, duration);
1646  }
1647  if (st->start_skip_samples && (pkt->pts == 0 || pkt->pts == RELATIVE_TS_BASE))
1648  st->skip_samples = st->start_skip_samples;
1649  if (st->skip_samples || discard_padding) {
1651  if (p) {
1652  AV_WL32(p, st->skip_samples);
1653  AV_WL32(p + 4, discard_padding);
1654  av_log(s, AV_LOG_DEBUG, "demuxer injecting skip %d / discard %d\n", st->skip_samples, discard_padding);
1655  }
1656  st->skip_samples = 0;
1657  }
1658 
1659  if (st->inject_global_side_data) {
1660  for (i = 0; i < st->nb_side_data; i++) {
1661  AVPacketSideData *src_sd = &st->side_data[i];
1662  uint8_t *dst_data;
1663 
1664  if (av_packet_get_side_data(pkt, src_sd->type, NULL))
1665  continue;
1666 
1667  dst_data = av_packet_new_side_data(pkt, src_sd->type, src_sd->size);
1668  if (!dst_data) {
1669  av_log(s, AV_LOG_WARNING, "Could not inject global side data\n");
1670  continue;
1671  }
1672 
1673  memcpy(dst_data, src_sd->data, src_sd->size);
1674  }
1675  st->inject_global_side_data = 0;
1676  }
1677 
1678 #if FF_API_LAVF_MERGE_SD
1680  if (!(s->flags & AVFMT_FLAG_KEEP_SIDE_DATA))
1683 #endif
1684  }
1685 
1686  av_opt_get_dict_val(s, "metadata", AV_OPT_SEARCH_CHILDREN, &metadata);
1687  if (metadata) {
1689  av_dict_copy(&s->metadata, metadata, 0);
1690  av_dict_free(&metadata);
1692  }
1693 
1694 #if FF_API_LAVF_AVCTX
1696 #endif
1697 
1698  if (s->debug & FF_FDEBUG_TS)
1699  av_log(s, AV_LOG_DEBUG,
1700  "read_frame_internal stream=%d, pts=%s, dts=%s, "
1701  "size=%d, duration=%"PRId64", flags=%d\n",
1702  pkt->stream_index,
1703  av_ts2str(pkt->pts),
1704  av_ts2str(pkt->dts),
1705  pkt->size, pkt->duration, pkt->flags);
1706 
1707  return ret;
1708 }
1709 
1710 int av_read_frame(AVFormatContext *s, AVPacket *pkt)
1711 {
1712  const int genpts = s->flags & AVFMT_FLAG_GENPTS;
1713  int eof = 0;
1714  int ret;
1715  AVStream *st;
1716 
1717  if (!genpts) {
1718  ret = s->internal->packet_buffer
1720  &s->internal->packet_buffer_end, pkt)
1721  : read_frame_internal(s, pkt);
1722  if (ret < 0)
1723  return ret;
1724  goto return_packet;
1725  }
1726 
1727  for (;;) {
1728  AVPacketList *pktl = s->internal->packet_buffer;
1729 
1730  if (pktl) {
1731  AVPacket *next_pkt = &pktl->pkt;
1732 
1733  if (next_pkt->dts != AV_NOPTS_VALUE) {
1734  int wrap_bits = s->streams[next_pkt->stream_index]->pts_wrap_bits;
1735  av_assert2(wrap_bits <= 64);
1736  // last dts seen for this stream. if any of packets following
1737  // current one had no dts, we will set this to AV_NOPTS_VALUE.
1738  int64_t last_dts = next_pkt->dts;
1739  while (pktl && next_pkt->pts == AV_NOPTS_VALUE) {
1740  if (pktl->pkt.stream_index == next_pkt->stream_index &&
1741  av_compare_mod(next_pkt->dts, pktl->pkt.dts, 2ULL << (wrap_bits - 1)) < 0) {
1742  if (av_compare_mod(pktl->pkt.pts, pktl->pkt.dts, 2ULL << (wrap_bits - 1))) {
1743  // not B-frame
1744  next_pkt->pts = pktl->pkt.dts;
1745  }
1746  if (last_dts != AV_NOPTS_VALUE) {
1747  // Once last dts was set to AV_NOPTS_VALUE, we don't change it.
1748  last_dts = pktl->pkt.dts;
1749  }
1750  }
1751  pktl = pktl->next;
1752  }
1753  if (eof && next_pkt->pts == AV_NOPTS_VALUE && last_dts != AV_NOPTS_VALUE) {
1754  // Fixing the last reference frame had none pts issue (For MXF etc).
1755  // We only do this when
1756  // 1. eof.
1757  // 2. we are not able to resolve a pts value for current packet.
1758  // 3. the packets for this stream at the end of the files had valid dts.
1759  next_pkt->pts = last_dts + next_pkt->duration;
1760  }
1761  pktl = s->internal->packet_buffer;
1762  }
1763 
1764  /* read packet from packet buffer, if there is data */
1765  st = s->streams[next_pkt->stream_index];
1766  if (!(next_pkt->pts == AV_NOPTS_VALUE && st->discard < AVDISCARD_ALL &&
1767  next_pkt->dts != AV_NOPTS_VALUE && !eof)) {
1769  &s->internal->packet_buffer_end, pkt);
1770  goto return_packet;
1771  }
1772  }
1773 
1774  ret = read_frame_internal(s, pkt);
1775  if (ret < 0) {
1776  if (pktl && ret != AVERROR(EAGAIN)) {
1777  eof = 1;
1778  continue;
1779  } else
1780  return ret;
1781  }
1782 
1783  ret = add_to_pktbuf(&s->internal->packet_buffer, pkt,
1784  &s->internal->packet_buffer_end, 1);
1785  av_packet_unref(pkt);
1786  if (ret < 0)
1787  return ret;
1788  }
1789 
1790 return_packet:
1791 
1792  st = s->streams[pkt->stream_index];
1793  if ((s->iformat->flags & AVFMT_GENERIC_INDEX) && pkt->flags & AV_PKT_FLAG_KEY) {
1794  ff_reduce_index(s, st->index);
1795  av_add_index_entry(st, pkt->pos, pkt->dts, 0, 0, AVINDEX_KEYFRAME);
1796  }
1797 
1798  if (is_relative(pkt->dts))
1799  pkt->dts -= RELATIVE_TS_BASE;
1800  if (is_relative(pkt->pts))
1801  pkt->pts -= RELATIVE_TS_BASE;
1802 
1803  return ret;
1804 }
1805 
1806 /* XXX: suppress the packet queue */
1807 static void flush_packet_queue(AVFormatContext *s)
1808 {
1809  if (!s->internal)
1810  return;
1814 
1816 }
1817 
1818 /*******************************************************/
1819 /* seek support */
1820 
1821 int av_find_default_stream_index(AVFormatContext *s)
1822 {
1823  int i;
1824  AVStream *st;
1825  int best_stream = 0;
1826  int best_score = INT_MIN;
1827 
1828  if (s->nb_streams <= 0)
1829  return -1;
1830  for (i = 0; i < s->nb_streams; i++) {
1831  int score = 0;
1832  st = s->streams[i];
1833  if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) {
1835  score -= 400;
1836  if (st->codecpar->width && st->codecpar->height)
1837  score += 50;
1838  score+= 25;
1839  }
1840  if (st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO) {
1841  if (st->codecpar->sample_rate)
1842  score += 50;
1843  }
1844  if (st->codec_info_nb_frames)
1845  score += 12;
1846 
1847  if (st->discard != AVDISCARD_ALL)
1848  score += 200;
1849 
1850  if (score > best_score) {
1851  best_score = score;
1852  best_stream = i;
1853  }
1854  }
1855  return best_stream;
1856 }
1857 
1858 /** Flush the frame reader. */
1859 void ff_read_frame_flush(AVFormatContext *s)
1860 {
1861  AVStream *st;
1862  int i, j;
1863 
1864  flush_packet_queue(s);
1865 
1866  /* Reset read state for each stream. */
1867  for (i = 0; i < s->nb_streams; i++) {
1868  st = s->streams[i];
1869 
1870  if (st->parser) {
1871  av_parser_close(st->parser);
1872  st->parser = NULL;
1873  }
1876  if (st->first_dts == AV_NOPTS_VALUE)
1877  st->cur_dts = RELATIVE_TS_BASE;
1878  else
1879  /* We set the current DTS to an unspecified origin. */
1880  st->cur_dts = AV_NOPTS_VALUE;
1881 
1883 
1884  for (j = 0; j < MAX_REORDER_DELAY + 1; j++)
1885  st->pts_buffer[j] = AV_NOPTS_VALUE;
1886 
1888  st->inject_global_side_data = 1;
1889 
1890  st->skip_samples = 0;
1891  }
1892 }
1893 
1894 void ff_update_cur_dts(AVFormatContext *s, AVStream *ref_st, int64_t timestamp)
1895 {
1896  int i;
1897 
1898  for (i = 0; i < s->nb_streams; i++) {
1899  AVStream *st = s->streams[i];
1900 
1901  st->cur_dts =
1902  av_rescale(timestamp,
1903  st->time_base.den * (int64_t) ref_st->time_base.num,
1904  st->time_base.num * (int64_t) ref_st->time_base.den);
1905  }
1906 }
1907 
1908 void ff_reduce_index(AVFormatContext *s, int stream_index)
1909 {
1910  AVStream *st = s->streams[stream_index];
1911  unsigned int max_entries = s->max_index_size / sizeof(AVIndexEntry);
1912 
1913  if ((unsigned) st->nb_index_entries >= max_entries) {
1914  int i;
1915  for (i = 0; 2 * i < st->nb_index_entries; i++)
1916  st->index_entries[i] = st->index_entries[2 * i];
1917  st->nb_index_entries = i;
1918  }
1919 }
1920 
1921 int ff_add_index_entry(AVIndexEntry **index_entries,
1922  int *nb_index_entries,
1923  unsigned int *index_entries_allocated_size,
1924  int64_t pos, int64_t timestamp,
1925  int size, int distance, int flags)
1926 {
1927  AVIndexEntry *entries, *ie;
1928  int index;
1929 
1930  if ((unsigned) *nb_index_entries + 1 >= UINT_MAX / sizeof(AVIndexEntry))
1931  return -1;
1932 
1933  if (timestamp == AV_NOPTS_VALUE)
1934  return AVERROR(EINVAL);
1935 
1936  if (size < 0 || size > 0x3FFFFFFF)
1937  return AVERROR(EINVAL);
1938 
1939  if (is_relative(timestamp)) //FIXME this maintains previous behavior but we should shift by the correct offset once known
1940  timestamp -= RELATIVE_TS_BASE;
1941 
1942  entries = av_fast_realloc(*index_entries,
1943  index_entries_allocated_size,
1944  (*nb_index_entries + 1) *
1945  sizeof(AVIndexEntry));
1946  if (!entries)
1947  return -1;
1948 
1949  *index_entries = entries;
1950 
1951  index = ff_index_search_timestamp(*index_entries, *nb_index_entries,
1952  timestamp, AVSEEK_FLAG_ANY);
1953 
1954  if (index < 0) {
1955  index = (*nb_index_entries)++;
1956  ie = &entries[index];
1957  av_assert0(index == 0 || ie[-1].timestamp < timestamp);
1958  } else {
1959  ie = &entries[index];
1960  if (ie->timestamp != timestamp) {
1961  if (ie->timestamp <= timestamp)
1962  return -1;
1963  memmove(entries + index + 1, entries + index,
1964  sizeof(AVIndexEntry) * (*nb_index_entries - index));
1965  (*nb_index_entries)++;
1966  } else if (ie->pos == pos && distance < ie->min_distance)
1967  // do not reduce the distance
1968  distance = ie->min_distance;
1969  }
1970 
1971  ie->pos = pos;
1972  ie->timestamp = timestamp;
1973  ie->min_distance = distance;
1974  ie->size = size;
1975  ie->flags = flags;
1976 
1977  return index;
1978 }
1979 
1980 int av_add_index_entry(AVStream *st, int64_t pos, int64_t timestamp,
1981  int size, int distance, int flags)
1982 {
1983  timestamp = wrap_timestamp(st, timestamp);
1985  &st->index_entries_allocated_size, pos,
1986  timestamp, size, distance, flags);
1987 }
1988 
1989 int ff_index_search_timestamp(const AVIndexEntry *entries, int nb_entries,
1990  int64_t wanted_timestamp, int flags)
1991 {
1992  int a, b, m;
1993  int64_t timestamp;
1994 
1995  a = -1;
1996  b = nb_entries;
1997 
1998  // Optimize appending index entries at the end.
1999  if (b && entries[b - 1].timestamp < wanted_timestamp)
2000  a = b - 1;
2001 
2002  while (b - a > 1) {
2003  m = (a + b) >> 1;
2004 
2005  // Search for the next non-discarded packet.
2006  while ((entries[m].flags & AVINDEX_DISCARD_FRAME) && m < b && m < nb_entries - 1) {
2007  m++;
2008  if (m == b && entries[m].timestamp >= wanted_timestamp) {
2009  m = b - 1;
2010  break;
2011  }
2012  }
2013 
2014  timestamp = entries[m].timestamp;
2015  if (timestamp >= wanted_timestamp)
2016  b = m;
2017  if (timestamp <= wanted_timestamp)
2018  a = m;
2019  }
2020  m = (flags & AVSEEK_FLAG_BACKWARD) ? a : b;
2021 
2022  if (!(flags & AVSEEK_FLAG_ANY))
2023  while (m >= 0 && m < nb_entries &&
2024  !(entries[m].flags & AVINDEX_KEYFRAME))
2025  m += (flags & AVSEEK_FLAG_BACKWARD) ? -1 : 1;
2026 
2027  if (m == nb_entries)
2028  return -1;
2029  return m;
2030 }
2031 
2032 void ff_configure_buffers_for_index(AVFormatContext *s, int64_t time_tolerance)
2033 {
2034  int ist1, ist2;
2035  int64_t pos_delta = 0;
2036  int64_t skip = 0;
2037  //We could use URLProtocol flags here but as many user applications do not use URLProtocols this would be unreliable
2038  const char *proto = avio_find_protocol_name(s->filename);
2039 
2040  if (!proto) {
2041  av_log(s, AV_LOG_INFO,
2042  "Protocol name not provided, cannot determine if input is local or "
2043  "a network protocol, buffers and access patterns cannot be configured "
2044  "optimally without knowing the protocol\n");
2045  }
2046 
2047  if (proto && !(strcmp(proto, "file") && strcmp(proto, "pipe") && strcmp(proto, "cache")))
2048  return;
2049 
2050  for (ist1 = 0; ist1 < s->nb_streams; ist1++) {
2051  AVStream *st1 = s->streams[ist1];
2052  for (ist2 = 0; ist2 < s->nb_streams; ist2++) {
2053  AVStream *st2 = s->streams[ist2];
2054  int i1, i2;
2055 
2056  if (ist1 == ist2)
2057  continue;
2058 
2059  for (i1 = i2 = 0; i1 < st1->nb_index_entries; i1++) {
2060  AVIndexEntry *e1 = &st1->index_entries[i1];
2061  int64_t e1_pts = av_rescale_q(e1->timestamp, st1->time_base, AV_TIME_BASE_Q);
2062 
2063  skip = FFMAX(skip, e1->size);
2064  for (; i2 < st2->nb_index_entries; i2++) {
2065  AVIndexEntry *e2 = &st2->index_entries[i2];
2066  int64_t e2_pts = av_rescale_q(e2->timestamp, st2->time_base, AV_TIME_BASE_Q);
2067  if (e2_pts - e1_pts < time_tolerance)
2068  continue;
2069  pos_delta = FFMAX(pos_delta, e1->pos - e2->pos);
2070  break;
2071  }
2072  }
2073  }
2074  }
2075 
2076  pos_delta *= 2;
2077  /* XXX This could be adjusted depending on protocol*/
2078  if (s->pb->buffer_size < pos_delta && pos_delta < (1<<24)) {
2079  av_log(s, AV_LOG_VERBOSE, "Reconfiguring buffers to size %"PRId64"\n", pos_delta);
2080  ffio_set_buf_size(s->pb, pos_delta);
2081  s->pb->short_seek_threshold = FFMAX(s->pb->short_seek_threshold, pos_delta/2);
2082  }
2083 
2084  if (skip < (1<<23)) {
2086  }
2087 }
2088 
2089 int av_index_search_timestamp(AVStream *st, int64_t wanted_timestamp, int flags)
2090 {
2092  wanted_timestamp, flags);
2093 }
2094 
2095 static int64_t ff_read_timestamp(AVFormatContext *s, int stream_index, int64_t *ppos, int64_t pos_limit,
2096  int64_t (*read_timestamp)(struct AVFormatContext *, int , int64_t *, int64_t ))
2097 {
2098  int64_t ts = read_timestamp(s, stream_index, ppos, pos_limit);
2099  if (stream_index >= 0)
2100  ts = wrap_timestamp(s->streams[stream_index], ts);
2101  return ts;
2102 }
2103 
2104 int ff_seek_frame_binary(AVFormatContext *s, int stream_index,
2105  int64_t target_ts, int flags)
2106 {
2107  AVInputFormat *avif = s->iformat;
2108  int64_t av_uninit(pos_min), av_uninit(pos_max), pos, pos_limit;
2109  int64_t ts_min, ts_max, ts;
2110  int index;
2111  int64_t ret;
2112  AVStream *st;
2113 
2114  if (stream_index < 0)
2115  return -1;
2116 
2117  av_log(s, AV_LOG_TRACE, "read_seek: %d %s\n", stream_index, av_ts2str(target_ts));
2118 
2119  ts_max =
2120  ts_min = AV_NOPTS_VALUE;
2121  pos_limit = -1; // GCC falsely says it may be uninitialized.
2122 
2123  st = s->streams[stream_index];
2124  if (st->index_entries) {
2125  AVIndexEntry *e;
2126 
2127  /* FIXME: Whole function must be checked for non-keyframe entries in
2128  * index case, especially read_timestamp(). */
2129  index = av_index_search_timestamp(st, target_ts,
2130  flags | AVSEEK_FLAG_BACKWARD);
2131  index = FFMAX(index, 0);
2132  e = &st->index_entries[index];
2133 
2134  if (e->timestamp <= target_ts || e->pos == e->min_distance) {
2135  pos_min = e->pos;
2136  ts_min = e->timestamp;
2137  av_log(s, AV_LOG_TRACE, "using cached pos_min=0x%"PRIx64" dts_min=%s\n",
2138  pos_min, av_ts2str(ts_min));
2139  } else {
2140  av_assert1(index == 0);
2141  }
2142 
2143  index = av_index_search_timestamp(st, target_ts,
2144  flags & ~AVSEEK_FLAG_BACKWARD);
2145  av_assert0(index < st->nb_index_entries);
2146  if (index >= 0) {
2147  e = &st->index_entries[index];
2148  av_assert1(e->timestamp >= target_ts);
2149  pos_max = e->pos;
2150  ts_max = e->timestamp;
2151  pos_limit = pos_max - e->min_distance;
2152  av_log(s, AV_LOG_TRACE, "using cached pos_max=0x%"PRIx64" pos_limit=0x%"PRIx64
2153  " dts_max=%s\n", pos_max, pos_limit, av_ts2str(ts_max));
2154  }
2155  }
2156 
2157  pos = ff_gen_search(s, stream_index, target_ts, pos_min, pos_max, pos_limit,
2158  ts_min, ts_max, flags, &ts, avif->read_timestamp);
2159  if (pos < 0)
2160  return -1;
2161 
2162  /* do the seek */
2163  if ((ret = avio_seek(s->pb, pos, SEEK_SET)) < 0)
2164  return ret;
2165 
2167  ff_update_cur_dts(s, st, ts);
2168 
2169  return 0;
2170 }
2171 
2172 int ff_find_last_ts(AVFormatContext *s, int stream_index, int64_t *ts, int64_t *pos,
2173  int64_t (*read_timestamp)(struct AVFormatContext *, int , int64_t *, int64_t ))
2174 {
2175  int64_t step = 1024;
2176  int64_t limit, ts_max;
2177  int64_t filesize = avio_size(s->pb);
2178  int64_t pos_max = filesize - 1;
2179  do {
2180  limit = pos_max;
2181  pos_max = FFMAX(0, (pos_max) - step);
2182  ts_max = ff_read_timestamp(s, stream_index,
2183  &pos_max, limit, read_timestamp);
2184  step += step;
2185  } while (ts_max == AV_NOPTS_VALUE && 2*limit > step);
2186  if (ts_max == AV_NOPTS_VALUE)
2187  return -1;
2188 
2189  for (;;) {
2190  int64_t tmp_pos = pos_max + 1;
2191  int64_t tmp_ts = ff_read_timestamp(s, stream_index,
2192  &tmp_pos, INT64_MAX, read_timestamp);
2193  if (tmp_ts == AV_NOPTS_VALUE)
2194  break;
2195  av_assert0(tmp_pos > pos_max);
2196  ts_max = tmp_ts;
2197  pos_max = tmp_pos;
2198  if (tmp_pos >= filesize)
2199  break;
2200  }
2201 
2202  if (ts)
2203  *ts = ts_max;
2204  if (pos)
2205  *pos = pos_max;
2206 
2207  return 0;
2208 }
2209 
2210 int64_t ff_gen_search(AVFormatContext *s, int stream_index, int64_t target_ts,
2211  int64_t pos_min, int64_t pos_max, int64_t pos_limit,
2212  int64_t ts_min, int64_t ts_max,
2213  int flags, int64_t *ts_ret,
2214  int64_t (*read_timestamp)(struct AVFormatContext *, int,
2215  int64_t *, int64_t))
2216 {
2217  int64_t pos, ts;
2218  int64_t start_pos;
2219  int no_change;
2220  int ret;
2221 
2222  av_log(s, AV_LOG_TRACE, "gen_seek: %d %s\n", stream_index, av_ts2str(target_ts));
2223 
2224  if (ts_min == AV_NOPTS_VALUE) {
2225  pos_min = s->internal->data_offset;
2226  ts_min = ff_read_timestamp(s, stream_index, &pos_min, INT64_MAX, read_timestamp);
2227  if (ts_min == AV_NOPTS_VALUE)
2228  return -1;
2229  }
2230 
2231  if (ts_min >= target_ts) {
2232  *ts_ret = ts_min;
2233  return pos_min;
2234  }
2235 
2236  if (ts_max == AV_NOPTS_VALUE) {
2237  if ((ret = ff_find_last_ts(s, stream_index, &ts_max, &pos_max, read_timestamp)) < 0)
2238  return ret;
2239  pos_limit = pos_max;
2240  }
2241 
2242  if (ts_max <= target_ts) {
2243  *ts_ret = ts_max;
2244  return pos_max;
2245  }
2246 
2247  av_assert0(ts_min < ts_max);
2248 
2249  no_change = 0;
2250  while (pos_min < pos_limit) {
2251  av_log(s, AV_LOG_TRACE,
2252  "pos_min=0x%"PRIx64" pos_max=0x%"PRIx64" dts_min=%s dts_max=%s\n",
2253  pos_min, pos_max, av_ts2str(ts_min), av_ts2str(ts_max));
2254  av_assert0(pos_limit <= pos_max);
2255 
2256  if (no_change == 0) {
2257  int64_t approximate_keyframe_distance = pos_max - pos_limit;
2258  // interpolate position (better than dichotomy)
2259  pos = av_rescale(target_ts - ts_min, pos_max - pos_min,
2260  ts_max - ts_min) +
2261  pos_min - approximate_keyframe_distance;
2262  } else if (no_change == 1) {
2263  // bisection if interpolation did not change min / max pos last time
2264  pos = (pos_min + pos_limit) >> 1;
2265  } else {
2266  /* linear search if bisection failed, can only happen if there
2267  * are very few or no keyframes between min/max */
2268  pos = pos_min;
2269  }
2270  if (pos <= pos_min)
2271  pos = pos_min + 1;
2272  else if (pos > pos_limit)
2273  pos = pos_limit;
2274  start_pos = pos;
2275 
2276  // May pass pos_limit instead of -1.
2277  ts = ff_read_timestamp(s, stream_index, &pos, INT64_MAX, read_timestamp);
2278  if (pos == pos_max)
2279  no_change++;
2280  else
2281  no_change = 0;
2282  av_log(s, AV_LOG_TRACE, "%"PRId64" %"PRId64" %"PRId64" / %s %s %s"
2283  " target:%s limit:%"PRId64" start:%"PRId64" noc:%d\n",
2284  pos_min, pos, pos_max,
2285  av_ts2str(ts_min), av_ts2str(ts), av_ts2str(ts_max), av_ts2str(target_ts),
2286  pos_limit, start_pos, no_change);
2287  if (ts == AV_NOPTS_VALUE) {
2288  av_log(s, AV_LOG_ERROR, "read_timestamp() failed in the middle\n");
2289  return -1;
2290  }
2291  if (target_ts <= ts) {
2292  pos_limit = start_pos - 1;
2293  pos_max = pos;
2294  ts_max = ts;
2295  }
2296  if (target_ts >= ts) {
2297  pos_min = pos;
2298  ts_min = ts;
2299  }
2300  }
2301 
2302  pos = (flags & AVSEEK_FLAG_BACKWARD) ? pos_min : pos_max;
2303  ts = (flags & AVSEEK_FLAG_BACKWARD) ? ts_min : ts_max;
2304 #if 0
2305  pos_min = pos;
2306  ts_min = ff_read_timestamp(s, stream_index, &pos_min, INT64_MAX, read_timestamp);
2307  pos_min++;
2308  ts_max = ff_read_timestamp(s, stream_index, &pos_min, INT64_MAX, read_timestamp);
2309  av_log(s, AV_LOG_TRACE, "pos=0x%"PRIx64" %s<=%s<=%s\n",
2310  pos, av_ts2str(ts_min), av_ts2str(target_ts), av_ts2str(ts_max));
2311 #endif
2312  *ts_ret = ts;
2313  return pos;
2314 }
2315 
2316 static int seek_frame_byte(AVFormatContext *s, int stream_index,
2317  int64_t pos, int flags)
2318 {
2319  int64_t pos_min, pos_max;
2320 
2321  pos_min = s->internal->data_offset;
2322  pos_max = avio_size(s->pb) - 1;
2323 
2324  if (pos < pos_min)
2325  pos = pos_min;
2326  else if (pos > pos_max)
2327  pos = pos_max;
2328 
2329  avio_seek(s->pb, pos, SEEK_SET);
2330 
2331  s->io_repositioned = 1;
2332 
2333  return 0;
2334 }
2335 
2336 static int seek_frame_generic(AVFormatContext *s, int stream_index,
2337  int64_t timestamp, int flags)
2338 {
2339  int index;
2340  int64_t ret;
2341  AVStream *st;
2342  AVIndexEntry *ie;
2343 
2344  st = s->streams[stream_index];
2345 
2346  index = av_index_search_timestamp(st, timestamp, flags);
2347 
2348  if (index < 0 && st->nb_index_entries &&
2349  timestamp < st->index_entries[0].timestamp)
2350  return -1;
2351 
2352  if (index < 0 || index == st->nb_index_entries - 1) {
2353  AVPacket pkt;
2354  int nonkey = 0;
2355 
2356  if (st->nb_index_entries) {
2358  ie = &st->index_entries[st->nb_index_entries - 1];
2359  if ((ret = avio_seek(s->pb, ie->pos, SEEK_SET)) < 0)
2360  return ret;
2361  ff_update_cur_dts(s, st, ie->timestamp);
2362  } else {
2363  if ((ret = avio_seek(s->pb, s->internal->data_offset, SEEK_SET)) < 0)
2364  return ret;
2365  }
2366  for (;;) {
2367  int read_status;
2368  do {
2369  read_status = av_read_frame(s, &pkt);
2370  } while (read_status == AVERROR(EAGAIN));
2371  if (read_status < 0)
2372  break;
2373  if (stream_index == pkt.stream_index && pkt.dts > timestamp) {
2374  if (pkt.flags & AV_PKT_FLAG_KEY) {
2375  av_packet_unref(&pkt);
2376  break;
2377  }
2378  if (nonkey++ > 1000 && st->codecpar->codec_id != AV_CODEC_ID_CDGRAPHICS) {
2379  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);
2380  av_packet_unref(&pkt);
2381  break;
2382  }
2383  }
2384  av_packet_unref(&pkt);
2385  }
2386  index = av_index_search_timestamp(st, timestamp, flags);
2387  }
2388  if (index < 0)
2389  return -1;
2390 
2392  if (s->iformat->read_seek)
2393  if (s->iformat->read_seek(s, stream_index, timestamp, flags) >= 0)
2394  return 0;
2395  ie = &st->index_entries[index];
2396  if ((ret = avio_seek(s->pb, ie->pos, SEEK_SET)) < 0)
2397  return ret;
2398  ff_update_cur_dts(s, st, ie->timestamp);
2399 
2400  return 0;
2401 }
2402 
2403 static int seek_frame_internal(AVFormatContext *s, int stream_index,
2404  int64_t timestamp, int flags)
2405 {
2406  int ret;
2407  AVStream *st;
2408 
2409  if (flags & AVSEEK_FLAG_BYTE) {
2410  if (s->iformat->flags & AVFMT_NO_BYTE_SEEK)
2411  return -1;
2413  return seek_frame_byte(s, stream_index, timestamp, flags);
2414  }
2415 
2416  if (stream_index < 0) {
2417  stream_index = av_find_default_stream_index(s);
2418  if (stream_index < 0)
2419  return -1;
2420 
2421  st = s->streams[stream_index];
2422  /* timestamp for default must be expressed in AV_TIME_BASE units */
2423  timestamp = av_rescale(timestamp, st->time_base.den,
2424  AV_TIME_BASE * (int64_t) st->time_base.num);
2425  }
2426 
2427  /* first, we try the format specific seek */
2428  if (s->iformat->read_seek) {
2430  ret = s->iformat->read_seek(s, stream_index, timestamp, flags);
2431  } else
2432  ret = -1;
2433  if (ret >= 0)
2434  return 0;
2435 
2436  if (s->iformat->read_timestamp &&
2437  !(s->iformat->flags & AVFMT_NOBINSEARCH)) {
2439  return ff_seek_frame_binary(s, stream_index, timestamp, flags);
2440  } else if (!(s->iformat->flags & AVFMT_NOGENSEARCH)) {
2442  return seek_frame_generic(s, stream_index, timestamp, flags);
2443  } else
2444  return -1;
2445 }
2446 
2447 int av_seek_frame(AVFormatContext *s, int stream_index,
2448  int64_t timestamp, int flags)
2449 {
2450  int ret;
2451 
2452  if (s->iformat->read_seek2 && !s->iformat->read_seek) {
2453  int64_t min_ts = INT64_MIN, max_ts = INT64_MAX;
2454  if ((flags & AVSEEK_FLAG_BACKWARD))
2455  max_ts = timestamp;
2456  else
2457  min_ts = timestamp;
2458  return avformat_seek_file(s, stream_index, min_ts, timestamp, max_ts,
2459  flags & ~AVSEEK_FLAG_BACKWARD);
2460  }
2461 
2462  ret = seek_frame_internal(s, stream_index, timestamp, flags);
2463 
2464  if (ret >= 0)
2466 
2467  return ret;
2468 }
2469 
2470 int avformat_seek_file(AVFormatContext *s, int stream_index, int64_t min_ts,
2471  int64_t ts, int64_t max_ts, int flags)
2472 {
2473  if (min_ts > ts || max_ts < ts)
2474  return -1;
2475  if (stream_index < -1 || stream_index >= (int)s->nb_streams)
2476  return AVERROR(EINVAL);
2477 
2478  if (s->seek2any>0)
2479  flags |= AVSEEK_FLAG_ANY;
2480  flags &= ~AVSEEK_FLAG_BACKWARD;
2481 
2482  if (s->iformat->read_seek2) {
2483  int ret;
2485 
2486  if (stream_index == -1 && s->nb_streams == 1) {
2487  AVRational time_base = s->streams[0]->time_base;
2488  ts = av_rescale_q(ts, AV_TIME_BASE_Q, time_base);
2489  min_ts = av_rescale_rnd(min_ts, time_base.den,
2490  time_base.num * (int64_t)AV_TIME_BASE,
2492  max_ts = av_rescale_rnd(max_ts, time_base.den,
2493  time_base.num * (int64_t)AV_TIME_BASE,
2495  stream_index = 0;
2496  }
2497 
2498  ret = s->iformat->read_seek2(s, stream_index, min_ts,
2499  ts, max_ts, flags);
2500 
2501  if (ret >= 0)
2503  return ret;
2504  }
2505 
2506  if (s->iformat->read_timestamp) {
2507  // try to seek via read_timestamp()
2508  }
2509 
2510  // Fall back on old API if new is not implemented but old is.
2511  // Note the old API has somewhat different semantics.
2512  if (s->iformat->read_seek || 1) {
2513  int dir = (ts - (uint64_t)min_ts > (uint64_t)max_ts - ts ? AVSEEK_FLAG_BACKWARD : 0);
2514  int ret = av_seek_frame(s, stream_index, ts, flags | dir);
2515  if (ret<0 && ts != min_ts && max_ts != ts) {
2516  ret = av_seek_frame(s, stream_index, dir ? max_ts : min_ts, flags | dir);
2517  if (ret >= 0)
2518  ret = av_seek_frame(s, stream_index, ts, flags | (dir^AVSEEK_FLAG_BACKWARD));
2519  }
2520  return ret;
2521  }
2522 
2523  // try some generic seek like seek_frame_generic() but with new ts semantics
2524  return -1; //unreachable
2525 }
2526 
2527 int avformat_flush(AVFormatContext *s)
2528 {
2530  return 0;
2531 }
2532 
2533 /*******************************************************/
2534 
2535 /**
2536  * Return TRUE if the stream has accurate duration in any stream.
2537  *
2538  * @return TRUE if the stream has accurate duration for at least one component.
2539  */
2540 static int has_duration(AVFormatContext *ic)
2541 {
2542  int i;
2543  AVStream *st;
2544 
2545  for (i = 0; i < ic->nb_streams; i++) {
2546  st = ic->streams[i];
2547  if (st->duration != AV_NOPTS_VALUE)
2548  return 1;
2549  }
2550  if (ic->duration != AV_NOPTS_VALUE)
2551  return 1;
2552  return 0;
2553 }
2554 
2555 /**
2556  * Estimate the stream timings from the one of each components.
2557  *
2558  * Also computes the global bitrate if possible.
2559  */
2560 static void update_stream_timings(AVFormatContext *ic)
2561 {
2562  int64_t start_time, start_time1, start_time_text, end_time, end_time1, end_time_text;
2563  int64_t duration, duration1, filesize;
2564  int i;
2565  AVStream *st;
2566  AVProgram *p;
2567 
2568  start_time = INT64_MAX;
2569  start_time_text = INT64_MAX;
2570  end_time = INT64_MIN;
2571  end_time_text = INT64_MIN;
2572  duration = INT64_MIN;
2573  for (i = 0; i < ic->nb_streams; i++) {
2574  st = ic->streams[i];
2575  if (st->start_time != AV_NOPTS_VALUE && st->time_base.den) {
2576  start_time1 = av_rescale_q(st->start_time, st->time_base,
2577  AV_TIME_BASE_Q);
2579  if (start_time1 < start_time_text)
2580  start_time_text = start_time1;
2581  } else
2582  start_time = FFMIN(start_time, start_time1);
2583  end_time1 = av_rescale_q_rnd(st->duration, st->time_base,
2586  if (end_time1 != AV_NOPTS_VALUE && (end_time1 > 0 ? start_time1 <= INT64_MAX - end_time1 : start_time1 >= INT64_MIN - end_time1)) {
2587  end_time1 += start_time1;
2589  end_time_text = FFMAX(end_time_text, end_time1);
2590  else
2591  end_time = FFMAX(end_time, end_time1);
2592  }
2593  for (p = NULL; (p = av_find_program_from_stream(ic, p, i)); ) {
2594  if (p->start_time == AV_NOPTS_VALUE || p->start_time > start_time1)
2595  p->start_time = start_time1;
2596  if (p->end_time < end_time1)
2597  p->end_time = end_time1;
2598  }
2599  }
2600  if (st->duration != AV_NOPTS_VALUE) {
2601  duration1 = av_rescale_q(st->duration, st->time_base,
2602  AV_TIME_BASE_Q);
2603  duration = FFMAX(duration, duration1);
2604  }
2605  }
2606  if (start_time == INT64_MAX || (start_time > start_time_text && start_time - start_time_text < AV_TIME_BASE))
2607  start_time = start_time_text;
2608  else if (start_time > start_time_text)
2609  av_log(ic, AV_LOG_VERBOSE, "Ignoring outlier non primary stream starttime %f\n", start_time_text / (float)AV_TIME_BASE);
2610 
2611  if (end_time == INT64_MIN || (end_time < end_time_text && end_time_text - end_time < AV_TIME_BASE)) {
2612  end_time = end_time_text;
2613  } else if (end_time < end_time_text) {
2614  av_log(ic, AV_LOG_VERBOSE, "Ignoring outlier non primary stream endtime %f\n", end_time_text / (float)AV_TIME_BASE);
2615  }
2616 
2617  if (start_time != INT64_MAX) {
2618  ic->start_time = start_time;
2619  if (end_time != INT64_MIN) {
2620  if (ic->nb_programs > 1) {
2621  for (i = 0; i < ic->nb_programs; i++) {
2622  p = ic->programs[i];
2623  if (p->start_time != AV_NOPTS_VALUE &&
2624  p->end_time > p->start_time &&
2625  p->end_time - (uint64_t)p->start_time <= INT64_MAX)
2626  duration = FFMAX(duration, p->end_time - p->start_time);
2627  }
2628  } else if (end_time >= start_time && end_time - (uint64_t)start_time <= INT64_MAX) {
2629  duration = FFMAX(duration, end_time - start_time);
2630  }
2631  }
2632  }
2633  if (duration != INT64_MIN && duration > 0 && ic->duration == AV_NOPTS_VALUE) {
2634  ic->duration = duration;
2635  }
2636  if (ic->pb && (filesize = avio_size(ic->pb)) > 0 && ic->duration > 0) {
2637  /* compute the bitrate */
2638  double bitrate = (double) filesize * 8.0 * AV_TIME_BASE /
2639  (double) ic->duration;
2640  if (bitrate >= 0 && bitrate <= INT64_MAX)
2641  ic->bit_rate = bitrate;
2642  }
2643 }
2644 
2645 static void fill_all_stream_timings(AVFormatContext *ic)
2646 {
2647  int i;
2648  AVStream *st;
2649 
2651  for (i = 0; i < ic->nb_streams; i++) {
2652  st = ic->streams[i];
2653  if (st->start_time == AV_NOPTS_VALUE) {
2654  if (ic->start_time != AV_NOPTS_VALUE)
2656  st->time_base);
2657  if (ic->duration != AV_NOPTS_VALUE)
2659  st->time_base);
2660  }
2661  }
2662 }
2663 
2664 static void estimate_timings_from_bit_rate(AVFormatContext *ic)
2665 {
2666  int64_t filesize, duration;
2667  int i, show_warning = 0;
2668  AVStream *st;
2669 
2670  /* if bit_rate is already set, we believe it */
2671  if (ic->bit_rate <= 0) {
2672  int64_t bit_rate = 0;
2673  for (i = 0; i < ic->nb_streams; i++) {
2674  st = ic->streams[i];
2675  if (st->codecpar->bit_rate <= 0 && st->internal->avctx->bit_rate > 0)
2676  st->codecpar->bit_rate = st->internal->avctx->bit_rate;
2677  if (st->codecpar->bit_rate > 0) {
2678  if (INT64_MAX - st->codecpar->bit_rate < bit_rate) {
2679  bit_rate = 0;
2680  break;
2681  }
2682  bit_rate += st->codecpar->bit_rate;
2683  } else if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO && st->codec_info_nb_frames > 1) {
2684  // If we have a videostream with packets but without a bitrate
2685  // then consider the sum not known
2686  bit_rate = 0;
2687  break;
2688  }
2689  }
2690  ic->bit_rate = bit_rate;
2691  }
2692 
2693  /* if duration is already set, we believe it */
2694  if (ic->duration == AV_NOPTS_VALUE &&
2695  ic->bit_rate != 0) {
2696  filesize = ic->pb ? avio_size(ic->pb) : 0;
2697  if (filesize > ic->internal->data_offset) {
2698  filesize -= ic->internal->data_offset;
2699  for (i = 0; i < ic->nb_streams; i++) {
2700  st = ic->streams[i];
2701  if ( st->time_base.num <= INT64_MAX / ic->bit_rate
2702  && st->duration == AV_NOPTS_VALUE) {
2703  duration = av_rescale(8 * filesize, st->time_base.den,
2704  ic->bit_rate *
2705  (int64_t) st->time_base.num);
2706  st->duration = duration;
2707  show_warning = 1;
2708  }
2709  }
2710  }
2711  }
2712  if (show_warning)
2713  av_log(ic, AV_LOG_WARNING,
2714  "Estimating duration from bitrate, this may be inaccurate\n");
2715 }
2716 
2717 #define DURATION_MAX_READ_SIZE 250000LL
2718 #define DURATION_MAX_RETRY 6
2719 
2720 /* only usable for MPEG-PS streams */
2721 static void estimate_timings_from_pts(AVFormatContext *ic, int64_t old_offset)
2722 {
2723  AVPacket pkt1, *pkt = &pkt1;
2724  AVStream *st;
2725  int num, den, read_size, i, ret;
2726  int found_duration = 0;
2727  int is_end;
2728  int64_t filesize, offset, duration;
2729  int retry = 0;
2730 
2731  /* flush packet queue */
2732  flush_packet_queue(ic);
2733 
2734  for (i = 0; i < ic->nb_streams; i++) {
2735  st = ic->streams[i];
2736  if (st->start_time == AV_NOPTS_VALUE &&
2737  st->first_dts == AV_NOPTS_VALUE &&
2739  av_log(ic, AV_LOG_WARNING,
2740  "start time for stream %d is not set in estimate_timings_from_pts\n", i);
2741 
2742  if (st->parser) {
2743  av_parser_close(st->parser);
2744  st->parser = NULL;
2745  }
2746  }
2747 
2748  av_opt_set(ic, "skip_changes", "1", AV_OPT_SEARCH_CHILDREN);
2749  /* estimate the end time (duration) */
2750  /* XXX: may need to support wrapping */
2751  filesize = ic->pb ? avio_size(ic->pb) : 0;
2752  do {
2753  is_end = found_duration;
2754  offset = filesize - (DURATION_MAX_READ_SIZE << retry);
2755  if (offset < 0)
2756  offset = 0;
2757 
2758  avio_seek(ic->pb, offset, SEEK_SET);
2759  read_size = 0;
2760  for (;;) {
2761  if (read_size >= DURATION_MAX_READ_SIZE << (FFMAX(retry - 1, 0)))
2762  break;
2763 
2764  do {
2765  ret = ff_read_packet(ic, pkt);
2766  } while (ret == AVERROR(EAGAIN));
2767  if (ret != 0)
2768  break;
2769  read_size += pkt->size;
2770  st = ic->streams[pkt->stream_index];
2771  if (pkt->pts != AV_NOPTS_VALUE &&
2772  (st->start_time != AV_NOPTS_VALUE ||
2773  st->first_dts != AV_NOPTS_VALUE)) {
2774  if (pkt->duration == 0) {
2775  ff_compute_frame_duration(ic, &num, &den, st, st->parser, pkt);
2776  if (den && num) {
2777  pkt->duration = av_rescale_rnd(1,
2778  num * (int64_t) st->time_base.den,
2779  den * (int64_t) st->time_base.num,
2780  AV_ROUND_DOWN);
2781  }
2782  }
2783  duration = pkt->pts + pkt->duration;
2784  found_duration = 1;
2785  if (st->start_time != AV_NOPTS_VALUE)
2786  duration -= st->start_time;
2787  else
2788  duration -= st->first_dts;
2789  if (duration > 0) {
2790  if (st->duration == AV_NOPTS_VALUE || st->info->last_duration<= 0 ||
2791  (st->duration < duration && FFABS(duration - st->info->last_duration) < 60LL*st->time_base.den / st->time_base.num))
2792  st->duration = duration;
2793  st->info->last_duration = duration;
2794  }
2795  }
2796  av_packet_unref(pkt);
2797  }
2798 
2799  /* check if all audio/video streams have valid duration */
2800  if (!is_end) {
2801  is_end = 1;
2802  for (i = 0; i < ic->nb_streams; i++) {
2803  st = ic->streams[i];
2804  switch (st->codecpar->codec_type) {
2805  case AVMEDIA_TYPE_VIDEO:
2806  case AVMEDIA_TYPE_AUDIO:
2807  if (st->duration == AV_NOPTS_VALUE)
2808  is_end = 0;
2809  }
2810  }
2811  }
2812  } while (!is_end &&
2813  offset &&
2814  ++retry <= DURATION_MAX_RETRY);
2815 
2816  av_opt_set(ic, "skip_changes", "0", AV_OPT_SEARCH_CHILDREN);
2817 
2818  /* warn about audio/video streams which duration could not be estimated */
2819  for (i = 0; i < ic->nb_streams; i++) {
2820  st = ic->streams[i];
2821  if (st->duration == AV_NOPTS_VALUE) {
2822  switch (st->codecpar->codec_type) {
2823  case AVMEDIA_TYPE_VIDEO:
2824  case AVMEDIA_TYPE_AUDIO:
2825  if (st->start_time != AV_NOPTS_VALUE || st->first_dts != AV_NOPTS_VALUE) {
2826  av_log(ic, AV_LOG_DEBUG, "stream %d : no PTS found at end of file, duration not set\n", i);
2827  } else
2828  av_log(ic, AV_LOG_DEBUG, "stream %d : no TS found at start of file, duration not set\n", i);
2829  }
2830  }
2831  }
2833 
2834  avio_seek(ic->pb, old_offset, SEEK_SET);
2835  for (i = 0; i < ic->nb_streams; i++) {
2836  int j;
2837 
2838  st = ic->streams[i];
2839  st->cur_dts = st->first_dts;
2842  for (j = 0; j < MAX_REORDER_DELAY + 1; j++)
2843  st->pts_buffer[j] = AV_NOPTS_VALUE;
2844  }
2845 }
2846 
2847 static void estimate_timings(AVFormatContext *ic, int64_t old_offset)
2848 {
2849  int64_t file_size;
2850 
2851  /* get the file size, if possible */
2852  if (ic->iformat->flags & AVFMT_NOFILE) {
2853  file_size = 0;
2854  } else {
2855  file_size = avio_size(ic->pb);
2856  file_size = FFMAX(0, file_size);
2857  }
2858 
2859  if ((!strcmp(ic->iformat->name, "mpeg") ||
2860  !strcmp(ic->iformat->name, "mpegts")) &&
2861  file_size && (ic->pb->seekable & AVIO_SEEKABLE_NORMAL)) {
2862  /* get accurate estimate from the PTSes */
2863  estimate_timings_from_pts(ic, old_offset);
2865  } else if (has_duration(ic)) {
2866  /* at least one component has timings - we use them for all
2867  * the components */
2870  } else {
2871  /* less precise: use bitrate info */
2874  }
2876 
2877  {
2878  int i;
2879  AVStream av_unused *st;
2880  for (i = 0; i < ic->nb_streams; i++) {
2881  st = ic->streams[i];
2882  av_log(ic, AV_LOG_TRACE, "stream %d: start_time: %0.3f duration: %0.3f\n", i,
2883  (double) st->start_time * av_q2d(st->time_base),
2884  (double) st->duration * av_q2d(st->time_base));
2885  }
2886  av_log(ic, AV_LOG_TRACE,
2887  "format: start_time: %0.3f duration: %0.3f bitrate=%"PRId64" kb/s\n",
2888  (double) ic->start_time / AV_TIME_BASE,
2889  (double) ic->duration / AV_TIME_BASE,
2890  (int64_t)ic->bit_rate / 1000);
2891  }
2892 }
2893 
2894 static int has_codec_parameters(AVStream *st, const char **errmsg_ptr)
2895 {
2896  AVCodecContext *avctx = st->internal->avctx;
2897 
2898 #define FAIL(errmsg) do { \
2899  if (errmsg_ptr) \
2900  *errmsg_ptr = errmsg; \
2901  return 0; \
2902  } while (0)
2903 
2904  if ( avctx->codec_id == AV_CODEC_ID_NONE
2905  && avctx->codec_type != AVMEDIA_TYPE_DATA)
2906  FAIL("unknown codec");
2907  switch (avctx->codec_type) {
2908  case AVMEDIA_TYPE_AUDIO:
2909  if (!avctx->frame_size && determinable_frame_size(avctx))
2910  FAIL("unspecified frame size");
2911  if (st->info->found_decoder >= 0 &&
2912  avctx->sample_fmt == AV_SAMPLE_FMT_NONE)
2913  FAIL("unspecified sample format");
2914  if (!avctx->sample_rate)
2915  FAIL("unspecified sample rate");
2916  if (!avctx->channels)
2917  FAIL("unspecified number of channels");
2918  if (st->info->found_decoder >= 0 && !st->nb_decoded_frames && avctx->codec_id == AV_CODEC_ID_DTS)
2919  FAIL("no decodable DTS frames");
2920  break;
2921  case AVMEDIA_TYPE_VIDEO:
2922  if (!avctx->width)
2923  FAIL("unspecified size");
2924  if (st->info->found_decoder >= 0 && avctx->pix_fmt == AV_PIX_FMT_NONE)
2925  FAIL("unspecified pixel format");
2928  FAIL("no frame in rv30/40 and no sar");
2929  break;
2930  case AVMEDIA_TYPE_SUBTITLE:
2931  if (avctx->codec_id == AV_CODEC_ID_HDMV_PGS_SUBTITLE && !avctx->width)
2932  FAIL("unspecified size");
2933  break;
2934  case AVMEDIA_TYPE_DATA:
2935  if (avctx->codec_id == AV_CODEC_ID_NONE) return 1;
2936  }
2937 
2938  return 1;
2939 }
2940 
2941 /* returns 1 or 0 if or if not decoded data was returned, or a negative error */
2942 static int try_decode_frame(AVFormatContext *s, AVStream *st, AVPacket *avpkt,
2944 {
2945  AVCodecContext *avctx = st->internal->avctx;
2946  const AVCodec *codec;
2947  int got_picture = 1, ret = 0;
2949  AVSubtitle subtitle;
2950  AVPacket pkt = *avpkt;
2951  int do_skip_frame = 0;
2952  enum AVDiscard skip_frame;
2953 
2954  if (!frame)
2955  return AVERROR(ENOMEM);
2956 
2957  if (!avcodec_is_open(avctx) &&
2958  st->info->found_decoder <= 0 &&
2959  (st->codecpar->codec_id != -st->info->found_decoder || !st->codecpar->codec_id)) {
2960  AVDictionary *thread_opt = NULL;
2961 
2962  codec = find_probe_decoder(s, st, st->codecpar->codec_id);
2963 
2964  if (!codec) {
2965  st->info->found_decoder = -st->codecpar->codec_id;
2966  ret = -1;
2967  goto fail;
2968  }
2969 
2970  /* Force thread count to 1 since the H.264 decoder will not extract
2971  * SPS and PPS to extradata during multi-threaded decoding. */
2972  av_dict_set(options ? options : &thread_opt, "threads", "1", 0);
2973  if (s->codec_whitelist)
2974  av_dict_set(options ? options : &thread_opt, "codec_whitelist", s->codec_whitelist, 0);
2975  ret = avcodec_open2(avctx, codec, options ? options : &thread_opt);
2976  if (!options)
2977  av_dict_free(&thread_opt);
2978  if (ret < 0) {
2979  st->info->found_decoder = -avctx->codec_id;
2980  goto fail;
2981  }
2982  st->info->found_decoder = 1;
2983  } else if (!st->info->found_decoder)
2984  st->info->found_decoder = 1;
2985 
2986  if (st->info->found_decoder < 0) {
2987  ret = -1;
2988  goto fail;
2989  }
2990 
2992  do_skip_frame = 1;
2993  skip_frame = avctx->skip_frame;
2994  avctx->skip_frame = AVDISCARD_ALL;
2995  }
2996 
2997  while ((pkt.size > 0 || (!pkt.data && got_picture)) &&
2998  ret >= 0 &&
3000  (!st->codec_info_nb_frames &&
3002  got_picture = 0;
3003  if (avctx->codec_type == AVMEDIA_TYPE_VIDEO ||
3004  avctx->codec_type == AVMEDIA_TYPE_AUDIO) {
3005  ret = avcodec_send_packet(avctx, &pkt);
3006  if (ret < 0 && ret != AVERROR(EAGAIN) && ret != AVERROR_EOF)
3007  break;
3008  if (ret >= 0)
3009  pkt.size = 0;
3010  ret = avcodec_receive_frame(avctx, frame);
3011  if (ret >= 0)
3012  got_picture = 1;
3013  if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF)
3014  ret = 0;
3015  } else if (avctx->codec_type == AVMEDIA_TYPE_SUBTITLE) {
3016  ret = avcodec_decode_subtitle2(avctx, &subtitle,
3017  &got_picture, &pkt);
3018  if (ret >= 0)
3019  pkt.size = 0;
3020  }
3021  if (ret >= 0) {
3022  if (got_picture)
3023  st->nb_decoded_frames++;
3024  ret = got_picture;
3025  }
3026  }
3027 
3028  if (!pkt.data && !got_picture)
3029  ret = -1;
3030 
3031 fail:
3032  if (do_skip_frame) {
3033  avctx->skip_frame = skip_frame;
3034  }
3035 
3036  av_frame_free(&frame);
3037  return ret;
3038 }
3039 
3040 unsigned int ff_codec_get_tag(const AVCodecTag *tags, enum AVCodecID id)
3041 {
3042  while (tags->id != AV_CODEC_ID_NONE) {
3043  if (tags->id == id)
3044  return tags->tag;
3045  tags++;
3046  }
3047  return 0;
3048 }
3049 
3050 enum AVCodecID ff_codec_get_id(const AVCodecTag *tags, unsigned int tag)
3051 {
3052  int i;
3053  for (i = 0; tags[i].id != AV_CODEC_ID_NONE; i++)
3054  if (tag == tags[i].tag)
3055  return tags[i].id;
3056  for (i = 0; tags[i].id != AV_CODEC_ID_NONE; i++)
3057  if (avpriv_toupper4(tag) == avpriv_toupper4(tags[i].tag))
3058  return tags[i].id;
3059  return AV_CODEC_ID_NONE;
3060 }
3061 
3062 enum AVCodecID ff_get_pcm_codec_id(int bps, int flt, int be, int sflags)
3063 {
3064  if (bps <= 0 || bps > 64)
3065  return AV_CODEC_ID_NONE;
3066 
3067  if (flt) {
3068  switch (bps) {
3069  case 32:
3071  case 64:
3073  default:
3074  return AV_CODEC_ID_NONE;
3075  }
3076  } else {
3077  bps += 7;
3078  bps >>= 3;
3079  if (sflags & (1 << (bps - 1))) {
3080  switch (bps) {
3081  case 1:
3082  return AV_CODEC_ID_PCM_S8;
3083  case 2:
3085  case 3:
3087  case 4:
3089  case 8:
3091  default:
3092  return AV_CODEC_ID_NONE;
3093  }
3094  } else {
3095  switch (bps) {
3096  case 1:
3097  return AV_CODEC_ID_PCM_U8;
3098  case 2:
3100  case 3:
3102  case 4:
3104  default:
3105  return AV_CODEC_ID_NONE;
3106  }
3107  }
3108  }
3109 }
3110 
3111 unsigned int av_codec_get_tag(const AVCodecTag *const *tags, enum AVCodecID id)
3112 {
3113  unsigned int tag;
3114  if (!av_codec_get_tag2(tags, id, &tag))
3115  return 0;
3116  return tag;
3117 }
3118 
3119 int av_codec_get_tag2(const AVCodecTag * const *tags, enum AVCodecID id,
3120  unsigned int *tag)
3121 {
3122  int i;
3123  for (i = 0; tags && tags[i]; i++) {
3124  const AVCodecTag *codec_tags = tags[i];
3125  while (codec_tags->id != AV_CODEC_ID_NONE) {
3126  if (codec_tags->id == id) {
3127  *tag = codec_tags->tag;
3128  return 1;
3129  }
3130  codec_tags++;
3131  }
3132  }
3133  return 0;
3134 }
3135 
3136 enum AVCodecID av_codec_get_id(const AVCodecTag *const *tags, unsigned int tag)
3137 {
3138  int i;
3139  for (i = 0; tags && tags[i]; i++) {
3140  enum AVCodecID id = ff_codec_get_id(tags[i], tag);
3141  if (id != AV_CODEC_ID_NONE)
3142  return id;
3143  }
3144  return AV_CODEC_ID_NONE;
3145 }
3146 
3147 static void compute_chapters_end(AVFormatContext *s)
3148 {
3149  unsigned int i, j;
3150  int64_t max_time = 0;
3151 
3152  if (s->duration > 0 && s->start_time < INT64_MAX - s->duration)
3153  max_time = s->duration +
3154  ((s->start_time == AV_NOPTS_VALUE) ? 0 : s->start_time);
3155 
3156  for (i = 0; i < s->nb_chapters; i++)
3157  if (s->chapters[i]->end == AV_NOPTS_VALUE) {
3158  AVChapter *ch = s->chapters[i];
3159  int64_t end = max_time ? av_rescale_q(max_time, AV_TIME_BASE_Q,
3160  ch->time_base)
3161  : INT64_MAX;
3162 
3163  for (j = 0; j < s->nb_chapters; j++) {
3164  AVChapter *ch1 = s->chapters[j];
3165  int64_t next_start = av_rescale_q(ch1->start, ch1->time_base,
3166  ch->time_base);
3167  if (j != i && next_start > ch->start && next_start < end)
3168  end = next_start;
3169  }
3170  ch->end = (end == INT64_MAX) ? ch->start : end;
3171  }
3172 }
3173 
3174 static int get_std_framerate(int i)
3175 {
3176  if (i < 30*12)
3177  return (i + 1) * 1001;
3178  i -= 30*12;
3179 
3180  if (i < 30)
3181  return (i + 31) * 1001 * 12;
3182  i -= 30;
3183 
3184  if (i < 3)
3185  return ((const int[]) { 80, 120, 240})[i] * 1001 * 12;
3186 
3187  i -= 3;
3188 
3189  return ((const int[]) { 24, 30, 60, 12, 15, 48 })[i] * 1000 * 12;
3190 }
3191 
3192 /* Is the time base unreliable?
3193  * This is a heuristic to balance between quick acceptance of the values in
3194  * the headers vs. some extra checks.
3195  * Old DivX and Xvid often have nonsense timebases like 1fps or 2fps.
3196  * MPEG-2 commonly misuses field repeat flags to store different framerates.
3197  * And there are "variable" fps files this needs to detect as well. */
3199 {
3200  if (c->time_base.den >= 101LL * c->time_base.num ||
3201  c->time_base.den < 5LL * c->time_base.num ||
3202  // c->codec_tag == AV_RL32("DIVX") ||
3203  // c->codec_tag == AV_RL32("XVID") ||
3204  c->codec_tag == AV_RL32("mp4v") ||
3206  c->codec_id == AV_CODEC_ID_GIF ||
3207  c->codec_id == AV_CODEC_ID_HEVC ||
3208  c->codec_id == AV_CODEC_ID_H264)
3209  return 1;
3210  return 0;
3211 }
3212 
3214 {
3215  int ret;
3216 
3218  par->extradata = NULL;
3219  par->extradata_size = 0;
3220  return AVERROR(EINVAL);
3221  }
3223  if (par->extradata) {
3224  memset(par->extradata + size, 0, AV_INPUT_BUFFER_PADDING_SIZE);
3225  par->extradata_size = size;
3226  ret = 0;
3227  } else {
3228  par->extradata_size = 0;
3229  ret = AVERROR(ENOMEM);
3230  }
3231  return ret;
3232 }
3233 
3234 int ff_get_extradata(AVFormatContext *s, AVCodecParameters *par, AVIOContext *pb, int size)
3235 {
3236  int ret = ff_alloc_extradata(par, size);
3237  if (ret < 0)
3238  return ret;
3239  ret = avio_read(pb, par->extradata, size);
3240  if (ret != size) {
3241  av_freep(&par->extradata);
3242  par->extradata_size = 0;
3243  av_log(s, AV_LOG_ERROR, "Failed to read extradata of size %d\n", size);
3244  return ret < 0 ? ret : AVERROR_INVALIDDATA;
3245  }
3246 
3247  return ret;
3248 }
3249 
3250 int ff_rfps_add_frame(AVFormatContext *ic, AVStream *st, int64_t ts)
3251 {
3252  int i, j;
3253  int64_t last = st->info->last_dts;
3254 
3255  if ( ts != AV_NOPTS_VALUE && last != AV_NOPTS_VALUE && ts > last
3256  && ts - (uint64_t)last < INT64_MAX) {
3257  double dts = (is_relative(ts) ? ts - RELATIVE_TS_BASE : ts) * av_q2d(st->time_base);
3258  int64_t duration = ts - last;
3259 
3260  if (!st->info->duration_error)
3261  st->info->duration_error = av_mallocz(sizeof(st->info->duration_error[0])*2);
3262  if (!st->info->duration_error)
3263  return AVERROR(ENOMEM);
3264 
3265 // if (st->codec->codec_type == AVMEDIA_TYPE_VIDEO)
3266 // av_log(NULL, AV_LOG_ERROR, "%f\n", dts);
3267  for (i = 0; i<MAX_STD_TIMEBASES; i++) {
3268  if (st->info->duration_error[0][1][i] < 1e10) {
3269  int framerate = get_std_framerate(i);
3270  double sdts = dts*framerate/(1001*12);
3271  for (j= 0; j<2; j++) {
3272  int64_t ticks = llrint(sdts+j*0.5);
3273  double error= sdts - ticks + j*0.5;
3274  st->info->duration_error[j][0][i] += error;
3275  st->info->duration_error[j][1][i] += error*error;
3276  }
3277  }
3278  }
3279  st->info->duration_count++;
3281 
3282  if (st->info->duration_count % 10 == 0) {
3283  int n = st->info->duration_count;
3284  for (i = 0; i<MAX_STD_TIMEBASES; i++) {
3285  if (st->info->duration_error[0][1][i] < 1e10) {
3286  double a0 = st->info->duration_error[0][0][i] / n;
3287  double error0 = st->info->duration_error[0][1][i] / n - a0*a0;
3288  double a1 = st->info->duration_error[1][0][i] / n;
3289  double error1 = st->info->duration_error[1][1][i] / n - a1*a1;
3290  if (error0 > 0.04 && error1 > 0.04) {
3291  st->info->duration_error[0][1][i] = 2e10;
3292  st->info->duration_error[1][1][i] = 2e10;
3293  }
3294  }
3295  }
3296  }
3297 
3298  // ignore the first 4 values, they might have some random jitter
3299  if (st->info->duration_count > 3 && is_relative(ts) == is_relative(last))
3300  st->info->duration_gcd = av_gcd(st->info->duration_gcd, duration);
3301  }
3302  if (ts != AV_NOPTS_VALUE)
3303  st->info->last_dts = ts;
3304 
3305  return 0;
3306 }
3307 
3308 void ff_rfps_calculate(AVFormatContext *ic)
3309 {
3310  int i, j;
3311 
3312  for (i = 0; i < ic->nb_streams; i++) {
3313  AVStream *st = ic->streams[i];
3314 
3316  continue;
3317  // the check for tb_unreliable() is not completely correct, since this is not about handling
3318  // an unreliable/inexact time base, but a time base that is finer than necessary, as e.g.
3319  // ipmovie.c produces.
3320  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)
3321  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);
3322  if (st->info->duration_count>1 && !st->r_frame_rate.num
3323  && tb_unreliable(st->internal->avctx)) {
3324  int num = 0;
3325  double best_error= 0.01;
3326  AVRational ref_rate = st->r_frame_rate.num ? st->r_frame_rate : av_inv_q(st->time_base);
3327 
3328  for (j= 0; j<MAX_STD_TIMEBASES; j++) {
3329  int k;
3330 
3331  if (st->info->codec_info_duration &&
3332  st->info->codec_info_duration*av_q2d(st->time_base) < (1001*11.5)/get_std_framerate(j))
3333  continue;
3334  if (!st->info->codec_info_duration && get_std_framerate(j) < 1001*12)
3335  continue;
3336 
3337  if (av_q2d(st->time_base) * st->info->rfps_duration_sum / st->info->duration_count < (1001*12.0 * 0.8)/get_std_framerate(j))
3338  continue;
3339 
3340  for (k= 0; k<2; k++) {
3341  int n = st->info->duration_count;
3342  double a= st->info->duration_error[k][0][j] / n;
3343  double error= st->info->duration_error[k][1][j]/n - a*a;
3344 
3345  if (error < best_error && best_error> 0.000000001) {
3346  best_error= error;
3347  num = get_std_framerate(j);
3348  }
3349  if (error < 0.02)
3350  av_log(ic, AV_LOG_DEBUG, "rfps: %f %f\n", get_std_framerate(j) / 12.0/1001, error);
3351  }
3352  }
3353  // do not increase frame rate by more than 1 % in order to match a standard rate.
3354  if (num && (!ref_rate.num || (double)num/(12*1001) < 1.01 * av_q2d(ref_rate)))
3355  av_reduce(&st->r_frame_rate.num, &st->r_frame_rate.den, num, 12*1001, INT_MAX);
3356  }
3357  if ( !st->avg_frame_rate.num
3358  && st->r_frame_rate.num && st->info->rfps_duration_sum
3359  && st->info->codec_info_duration <= 0
3360  && st->info->duration_count > 2
3361  && 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
3362  ) {
3363  av_log(ic, AV_LOG_DEBUG, "Setting avg frame rate based on r frame rate\n");
3364  st->avg_frame_rate = st->r_frame_rate;
3365  }
3366 
3367  av_freep(&st->info->duration_error);
3368  st->info->last_dts = AV_NOPTS_VALUE;
3369  st->info->duration_count = 0;
3370  st->info->rfps_duration_sum = 0;
3371  }
3372 }
3373 
3375 {
3376  int i, count = 0, ret = 0, j;
3377  int64_t read_size;
3378  AVStream *st;
3379  AVCodecContext *avctx;
3380  AVPacket pkt1, *pkt;
3381  int64_t old_offset = avio_tell(ic->pb);
3382  // new streams might appear, no options for those
3383  int orig_nb_streams = ic->nb_streams;
3384  int flush_codecs;
3385  int64_t max_analyze_duration = ic->max_analyze_duration;
3386  int64_t max_stream_analyze_duration;
3387  int64_t max_subtitle_analyze_duration;
3388  int64_t probesize = ic->probesize;
3389  int eof_reached = 0;
3390  int *missing_streams = av_opt_ptr(ic->iformat->priv_class, ic->priv_data, "missing_streams");
3391 
3392  flush_codecs = probesize > 0;
3393 
3394  av_opt_set(ic, "skip_clear", "1", AV_OPT_SEARCH_CHILDREN);
3395 
3396  max_stream_analyze_duration = max_analyze_duration;
3397  max_subtitle_analyze_duration = max_analyze_duration;
3398  if (!max_analyze_duration) {
3399  max_stream_analyze_duration =
3400  max_analyze_duration = 5*AV_TIME_BASE;
3401  max_subtitle_analyze_duration = 30*AV_TIME_BASE;
3402  if (!strcmp(ic->iformat->name, "flv"))
3403  max_stream_analyze_duration = 90*AV_TIME_BASE;
3404  if (!strcmp(ic->iformat->name, "mpeg") || !strcmp(ic->iformat->name, "mpegts"))
3405  max_stream_analyze_duration = 7*AV_TIME_BASE;
3406  }
3407 
3408  if (ic->pb)
3409  av_log(ic, AV_LOG_DEBUG, "Before avformat_find_stream_info() pos: %"PRId64" bytes read:%"PRId64" seeks:%d nb_streams:%d\n",
3410  avio_tell(ic->pb), ic->pb->bytes_read, ic->pb->seek_count, ic->nb_streams);
3411 
3412  for (i = 0; i < ic->nb_streams; i++) {
3413  const AVCodec *codec;
3414  AVDictionary *thread_opt = NULL;
3415  st = ic->streams[i];
3416  avctx = st->internal->avctx;
3417 
3418  if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO ||
3420 /* if (!st->time_base.num)
3421  st->time_base = */
3422  if (!avctx->time_base.num)
3423  avctx->time_base = st->time_base;
3424  }
3425 
3426  /* check if the caller has overridden the codec id */
3427 #if FF_API_LAVF_AVCTX
3429  if (st->codec->codec_id != st->internal->orig_codec_id) {
3430  st->codecpar->codec_id = st->codec->codec_id;
3431  st->codecpar->codec_type = st->codec->codec_type;
3432  st->internal->orig_codec_id = st->codec->codec_id;
3433  }
3435 #endif
3436  // only for the split stuff
3437  if (!st->parser && !(ic->flags & AVFMT_FLAG_NOPARSE) && st->request_probe <= 0) {
3438  st->parser = av_parser_init(st->codecpar->codec_id);
3439  if (st->parser) {
3440  if (st->need_parsing == AVSTREAM_PARSE_HEADERS) {
3442  } else if (st->need_parsing == AVSTREAM_PARSE_FULL_RAW) {
3444  }
3445  } else if (st->need_parsing) {
3446  av_log(ic, AV_LOG_VERBOSE, "parser not found for codec "
3447  "%s, packets or times may be invalid.\n",
3449  }
3450  }
3451 
3452  if (st->codecpar->codec_id != st->internal->orig_codec_id)
3454 
3455  ret = avcodec_parameters_to_context(avctx, st->codecpar);
3456  if (ret < 0)
3457  goto find_stream_info_err;
3458  if (st->request_probe <= 0)
3459  st->internal->avctx_inited = 1;
3460 
3461  codec = find_probe_decoder(ic, st, st->codecpar->codec_id);
3462 
3463  /* Force thread count to 1 since the H.264 decoder will not extract
3464  * SPS and PPS to extradata during multi-threaded decoding. */
3465  av_dict_set(options ? &options[i] : &thread_opt, "threads", "1", 0);
3466 
3467  if (ic->codec_whitelist)
3468  av_dict_set(options ? &options[i] : &thread_opt, "codec_whitelist", ic->codec_whitelist, 0);
3469 
3470  /* Ensure that subtitle_header is properly set. */
3472  && codec && !avctx->codec) {
3473  if (avcodec_open2(avctx, codec, options ? &options[i] : &thread_opt) < 0)
3474  av_log(ic, AV_LOG_WARNING,
3475  "Failed to open codec in %s\n",__FUNCTION__);
3476  }
3477 
3478  // Try to just open decoders, in case this is enough to get parameters.
3479  if (!has_codec_parameters(st, NULL) && st->request_probe <= 0) {
3480  if (codec && !avctx->codec)
3481  if (avcodec_open2(avctx, codec, options ? &options[i] : &thread_opt) < 0)
3482  av_log(ic, AV_LOG_WARNING,
3483  "Failed to open codec in %s\n",__FUNCTION__);
3484  }
3485  if (!options)
3486  av_dict_free(&thread_opt);
3487  }
3488 
3489  for (i = 0; i < ic->nb_streams; i++) {
3490 #if FF_API_R_FRAME_RATE
3491  ic->streams[i]->info->last_dts = AV_NOPTS_VALUE;
3492 #endif
3495  }
3496 
3497  read_size = 0;
3498  for (;;) {
3499  int analyzed_all_streams;
3501  ret = AVERROR_EXIT;
3502  av_log(ic, AV_LOG_DEBUG, "interrupted\n");
3503  break;
3504  }
3505 
3506  /* check if one codec still needs to be handled */
3507  for (i = 0; i < ic->nb_streams; i++) {
3508  int fps_analyze_framecount = 20;
3509 
3510  st = ic->streams[i];
3511  if (!has_codec_parameters(st, NULL))
3512  break;
3513  /* If the timebase is coarse (like the usual millisecond precision
3514  * of mkv), we need to analyze more frames to reliably arrive at
3515  * the correct fps. */
3516  if (av_q2d(st->time_base) > 0.0005)
3517  fps_analyze_framecount *= 2;
3518  if (!tb_unreliable(st->internal->avctx))
3519  fps_analyze_framecount = 0;
3520  if (ic->fps_probe_size >= 0)
3521  fps_analyze_framecount = ic->fps_probe_size;
3523  fps_analyze_framecount = 0;
3524  /* variable fps and no guess at the real fps */
3525  if (!(st->r_frame_rate.num && st->avg_frame_rate.num) &&
3527  int count = (ic->iformat->flags & AVFMT_NOTIMESTAMPS) ?
3529  st->info->duration_count;
3530  if (count < fps_analyze_framecount)
3531  break;
3532  }
3533  if (st->parser && st->parser->parser->split &&
3534  !st->internal->avctx->extradata)
3535  break;
3536  if (st->first_dts == AV_NOPTS_VALUE &&
3537  !(ic->iformat->flags & AVFMT_NOTIMESTAMPS) &&
3541  break;
3542  }
3543  analyzed_all_streams = 0;
3544  if (!missing_streams || !*missing_streams)
3545  if (i == ic->nb_streams) {
3546  analyzed_all_streams = 1;
3547  /* NOTE: If the format has no header, then we need to read some
3548  * packets to get most of the streams, so we cannot stop here. */
3549  if (!(ic->ctx_flags & AVFMTCTX_NOHEADER)) {
3550  /* If we found the info for all the codecs, we can stop. */
3551  ret = count;
3552  av_log(ic, AV_LOG_DEBUG, "All info found\n");
3553  flush_codecs = 0;
3554  break;
3555  }
3556  }
3557  /* We did not get all the codec info, but we read too much data. */
3558  if (read_size >= probesize) {
3559  ret = count;
3560  av_log(ic, AV_LOG_DEBUG,
3561  "Probe buffer size limit of %"PRId64" bytes reached\n", probesize);
3562  for (i = 0; i < ic->nb_streams; i++)
3563  if (!ic->streams[i]->r_frame_rate.num &&
3564  ic->streams[i]->info->duration_count <= 1 &&
3566  strcmp(ic->iformat->name, "image2"))
3567  av_log(ic, AV_LOG_WARNING,
3568  "Stream #%d: not enough frames to estimate rate; "
3569  "consider increasing probesize\n", i);
3570  break;
3571  }
3572 
3573  /* NOTE: A new stream can be added there if no header in file
3574  * (AVFMTCTX_NOHEADER). */
3575  ret = read_frame_internal(ic, &pkt1);
3576  if (ret == AVERROR(EAGAIN))
3577  continue;
3578 
3579  if (ret < 0) {
3580  /* EOF or error*/
3581  eof_reached = 1;
3582  break;
3583  }
3584 
3585  pkt = &pkt1;
3586 
3587  if (!(ic->flags & AVFMT_FLAG_NOBUFFER)) {
3588  ret = add_to_pktbuf(&ic->internal->packet_buffer, pkt,
3589  &ic->internal->packet_buffer_end, 0);
3590  if (ret < 0)
3591  goto find_stream_info_err;
3592  }
3593 
3594  st = ic->streams[pkt->stream_index];
3596  read_size += pkt->size;
3597 
3598  avctx = st->internal->avctx;
3599  if (!st->internal->avctx_inited) {
3600  ret = avcodec_parameters_to_context(avctx, st->codecpar);
3601  if (ret < 0)
3602  goto find_stream_info_err;
3603  st->internal->avctx_inited = 1;
3604  }
3605 
3606  if (pkt->dts != AV_NOPTS_VALUE && st->codec_info_nb_frames > 1) {
3607  /* check for non-increasing dts */
3608  if (st->info->fps_last_dts != AV_NOPTS_VALUE &&
3609  st->info->fps_last_dts >= pkt->dts) {
3610  av_log(ic, AV_LOG_DEBUG,
3611  "Non-increasing DTS in stream %d: packet %d with DTS "
3612  "%"PRId64", packet %d with DTS %"PRId64"\n",
3613  st->index, st->info->fps_last_dts_idx,
3615  pkt->dts);
3616  st->info->fps_first_dts =
3618  }
3619  /* Check for a discontinuity in dts. If the difference in dts
3620  * is more than 1000 times the average packet duration in the
3621  * sequence, we treat it as a discontinuity. */
3622  if (st->info->fps_last_dts != AV_NOPTS_VALUE &&
3624  (pkt->dts - st->info->fps_last_dts) / 1000 >
3625  (st->info->fps_last_dts - st->info->fps_first_dts) /
3626  (st->info->fps_last_dts_idx - st->info->fps_first_dts_idx)) {
3627  av_log(ic, AV_LOG_WARNING,
3628  "DTS discontinuity in stream %d: packet %d with DTS "
3629  "%"PRId64", packet %d with DTS %"PRId64"\n",
3630  st->index, st->info->fps_last_dts_idx,
3632  pkt->dts);
3633  st->info->fps_first_dts =
3635  }
3636 
3637  /* update stored dts values */
3638  if (st->info->fps_first_dts == AV_NOPTS_VALUE) {
3639  st->info->fps_first_dts = pkt->dts;
3641  }
3642  st->info->fps_last_dts = pkt->dts;
3644  }
3645  if (st->codec_info_nb_frames>1) {
3646  int64_t t = 0;
3647  int64_t limit;
3648 
3649  if (st->time_base.den > 0)
3651  if (st->avg_frame_rate.num > 0)
3653 
3654  if ( t == 0
3655  && st->codec_info_nb_frames>30
3656  && st->info->fps_first_dts != AV_NOPTS_VALUE
3657  && st->info->fps_last_dts != AV_NOPTS_VALUE)
3659 
3660  if (analyzed_all_streams) limit = max_analyze_duration;
3661  else if (avctx->codec_type == AVMEDIA_TYPE_SUBTITLE) limit = max_subtitle_analyze_duration;
3662  else limit = max_stream_analyze_duration;
3663 
3664  if (t >= limit) {
3665  av_log(ic, AV_LOG_VERBOSE, "max_analyze_duration %"PRId64" reached at %"PRId64" microseconds st:%d\n",
3666  limit,
3667  t, pkt->stream_index);
3668  if (ic->flags & AVFMT_FLAG_NOBUFFER)
3669  av_packet_unref(pkt);
3670  break;
3671  }
3672  if (pkt->duration) {
3673  if (avctx->codec_type == AVMEDIA_TYPE_SUBTITLE && pkt->pts != AV_NOPTS_VALUE && pkt->pts >= st->start_time) {
3674  st->info->codec_info_duration = FFMIN(pkt->pts - st->start_time, st->info->codec_info_duration + pkt->duration);
3675  } else
3676  st->info->codec_info_duration += pkt->duration;
3677  st->info->codec_info_duration_fields += st->parser && st->need_parsing && avctx->ticks_per_frame ==2 ? st->parser->repeat_pict + 1 : 2;
3678  }
3679  }
3680 #if FF_API_R_FRAME_RATE
3682  ff_rfps_add_frame(ic, st, pkt->dts);
3683 #endif
3684  if (st->parser && st->parser->parser->split && !avctx->extradata) {
3685  int i = st->parser->parser->split(avctx, pkt->data, pkt->size);
3686  if (i > 0 && i < FF_MAX_EXTRADATA_SIZE) {
3687  avctx->extradata_size = i;
3688  avctx->extradata = av_mallocz(avctx->extradata_size +
3690  if (!avctx->extradata)
3691  return AVERROR(ENOMEM);
3692  memcpy(avctx->extradata, pkt->data,
3693  avctx->extradata_size);
3694  }
3695  }
3696 
3697  /* If still no information, we try to open the codec and to
3698  * decompress the frame. We try to avoid that in most cases as
3699  * it takes longer and uses more memory. For MPEG-4, we need to
3700  * decompress for QuickTime.
3701  *
3702  * If AV_CODEC_CAP_CHANNEL_CONF is set this will force decoding of at
3703  * least one frame of codec data, this makes sure the codec initializes
3704  * the channel configuration and does not only trust the values from
3705  * the container. */
3706  try_decode_frame(ic, st, pkt,
3707  (options && i < orig_nb_streams) ? &options[i] : NULL);
3708 
3709  if (ic->flags & AVFMT_FLAG_NOBUFFER)
3710  av_packet_unref(pkt);
3711 
3712  st->codec_info_nb_frames++;
3713  count++;
3714  }
3715 
3716  if (eof_reached) {
3717  int stream_index;
3718  for (stream_index = 0; stream_index < ic->nb_streams; stream_index++) {
3719  st = ic->streams[stream_index];
3720  avctx = st->internal->avctx;
3721  if (!has_codec_parameters(st, NULL)) {
3722  const AVCodec *codec = find_probe_decoder(ic, st, st->codecpar->codec_id);
3723  if (codec && !avctx->codec) {
3724  AVDictionary *opts = NULL;
3725  if (ic->codec_whitelist)
3726  av_dict_set(&opts, "codec_whitelist", ic->codec_whitelist, 0);
3727  if (avcodec_open2(avctx, codec, (options && stream_index < orig_nb_streams) ? &options[stream_index] : &opts) < 0)
3728  av_log(ic, AV_LOG_WARNING,
3729  "Failed to open codec in %s\n",__FUNCTION__);
3730  av_dict_free(&opts);
3731  }
3732  }
3733 
3734  // EOF already reached while reading the stream above.
3735  // So continue with reoordering DTS with whatever delay we have.
3737  update_dts_from_pts(ic, stream_index, ic->internal->packet_buffer);
3738  }
3739  }
3740  }
3741 
3742  if (flush_codecs) {
3743  AVPacket empty_pkt = { 0 };
3744  int err = 0;
3745  av_init_packet(&empty_pkt);
3746 
3747  for (i = 0; i < ic->nb_streams; i++) {
3748 
3749  st = ic->streams[i];
3750 
3751  /* flush the decoders */
3752  if (st->info->found_decoder == 1) {
3753  do {
3754  err = try_decode_frame(ic, st, &empty_pkt,
3755  (options && i < orig_nb_streams)
3756  ? &options[i] : NULL);
3757  } while (err > 0 && !has_codec_parameters(st, NULL));
3758 
3759  if (err < 0) {
3760  av_log(ic, AV_LOG_INFO,
3761  "decoding for stream %d failed\n", st->index);
3762  }
3763  }
3764  }
3765  }
3766 
3767  ff_rfps_calculate(ic);
3768 
3769  for (i = 0; i < ic->nb_streams; i++) {
3770  st = ic->streams[i];
3771  avctx = st->internal->avctx;
3772  if (avctx->codec_type == AVMEDIA_TYPE_VIDEO) {
3773  if (avctx->codec_id == AV_CODEC_ID_RAWVIDEO && !avctx->codec_tag && !avctx->bits_per_coded_sample) {
3774  uint32_t tag= avcodec_pix_fmt_to_codec_tag(avctx->pix_fmt);
3776  avctx->codec_tag= tag;
3777  }
3778 
3779  /* estimate average framerate if not set by demuxer */
3780  if (st->info->codec_info_duration_fields &&
3781  !st->avg_frame_rate.num &&
3782  st->info->codec_info_duration) {
3783  int best_fps = 0;
3784  double best_error = 0.01;
3785 
3786  if (st->info->codec_info_duration >= INT64_MAX / st->time_base.num / 2||
3787  st->info->codec_info_duration_fields >= INT64_MAX / st->time_base.den ||
3788  st->info->codec_info_duration < 0)
3789  continue;
3791  st->info->codec_info_duration_fields * (int64_t) st->time_base.den,
3792  st->info->codec_info_duration * 2 * (int64_t) st->time_base.num, 60000);
3793 
3794  /* Round guessed framerate to a "standard" framerate if it's
3795  * within 1% of the original estimate. */
3796  for (j = 0; j < MAX_STD_TIMEBASES; j++) {
3797  AVRational std_fps = { get_std_framerate(j), 12 * 1001 };
3798  double error = fabs(av_q2d(st->avg_frame_rate) /
3799  av_q2d(std_fps) - 1);
3800 
3801  if (error < best_error) {
3802  best_error = error;
3803  best_fps = std_fps.num;
3804  }
3805  }
3806  if (best_fps)
3808  best_fps, 12 * 1001, INT_MAX);
3809  }
3810 
3811  if (!st->r_frame_rate.num) {
3812  if ( avctx->time_base.den * (int64_t) st->time_base.num
3813  <= avctx->time_base.num * avctx->ticks_per_frame * (int64_t) st->time_base.den) {
3814  st->r_frame_rate.num = avctx->time_base.den;
3815  st->r_frame_rate.den = avctx->time_base.num * avctx->ticks_per_frame;
3816  } else {
3817  st->r_frame_rate.num = st->time_base.den;
3818  st->r_frame_rate.den = st->time_base.num;
3819  }
3820  }
3822  AVRational hw_ratio = { avctx->height, avctx->width };
3824  hw_ratio);
3825  }
3826  } else if (avctx->codec_type == AVMEDIA_TYPE_AUDIO) {
3827  if (!avctx->bits_per_coded_sample)
3828  avctx->bits_per_coded_sample =
3830  // set stream disposition based on audio service type
3831  switch (avctx->audio_service_type) {
3834  break;
3837  break;
3840  break;
3843  break;
3846  break;
3847  }
3848  }
3849  }
3850 
3851  if (probesize)
3852  estimate_timings(ic, old_offset);
3853 
3854  av_opt_set(ic, "skip_clear", "0", AV_OPT_SEARCH_CHILDREN);
3855 
3856  if (ret >= 0 && ic->nb_streams)
3857  /* We could not have all the codec parameters before EOF. */
3858  ret = -1;
3859  for (i = 0; i < ic->nb_streams; i++) {
3860  const char *errmsg;
3861  st = ic->streams[i];
3862 
3863  /* if no packet was ever seen, update context now for has_codec_parameters */
3864  if (!st->internal->avctx_inited) {
3865  if (st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO &&
3867  st->codecpar->format = st->internal->avctx->sample_fmt;
3869  if (ret < 0)
3870  goto find_stream_info_err;
3871  }
3872  if (!has_codec_parameters(st, &errmsg)) {
3873  char buf[256];
3874  avcodec_string(buf, sizeof(buf), st->internal->avctx, 0);
3875  av_log(ic, AV_LOG_WARNING,
3876  "Could not find codec parameters for stream %d (%s): %s\n"
3877  "Consider increasing the value for the 'analyzeduration' and 'probesize' options\n",
3878  i, buf, errmsg);
3879  } else {
3880  ret = 0;
3881  }
3882  }
3883 
3885 
3886  /* update the stream parameters from the internal codec contexts */
3887  for (i = 0; i < ic->nb_streams; i++) {
3888  st = ic->streams[i];
3889 
3890  if (st->internal->avctx_inited) {
3891  int orig_w = st->codecpar->width;
3892  int orig_h = st->codecpar->height;
3894  if (ret < 0)
3895  goto find_stream_info_err;
3896  // The decoder might reduce the video size by the lowres factor.
3897  if (av_codec_get_lowres(st->internal->avctx) && orig_w) {
3898  st->codecpar->width = orig_w;
3899  st->codecpar->height = orig_h;
3900  }
3901  }
3902 
3903 #if FF_API_LAVF_AVCTX
3905  ret = avcodec_parameters_to_context(st->codec, st->codecpar);
3906  if (ret < 0)
3907  goto find_stream_info_err;
3908 
3909  // The old API (AVStream.codec) "requires" the resolution to be adjusted
3910  // by the lowres factor.
3911  if (av_codec_get_lowres(st->internal->avctx) && st->internal->avctx->width) {
3913  st->codec->width = st->internal->avctx->width;
3914  st->codec->height = st->internal->avctx->height;
3915  }
3916 
3917  if (st->codec->codec_tag != MKTAG('t','m','c','d')) {
3918  st->codec->time_base = st->internal->avctx->time_base;
3919  st->codec->ticks_per_frame = st->internal->avctx->ticks_per_frame;
3920  }
3921  st->codec->framerate = st->avg_frame_rate;
3922 
3923  if (st->internal->avctx->subtitle_header) {
3924  st->codec->subtitle_header = av_malloc(st->internal->avctx->subtitle_header_size);
3925  if (!st->codec->subtitle_header)
3926  goto find_stream_info_err;
3927  st->codec->subtitle_header_size = st->internal->avctx->subtitle_header_size;
3928  memcpy(st->codec->subtitle_header, st->internal->avctx->subtitle_header,
3929  st->codec->subtitle_header_size);
3930  }
3931 
3932  // Fields unavailable in AVCodecParameters
3933  st->codec->coded_width = st->internal->avctx->coded_width;
3934  st->codec->coded_height = st->internal->avctx->coded_height;
3935  st->codec->properties = st->internal->avctx->properties;
3937 #endif
3938 
3939  st->internal->avctx_inited = 0;
3940  }
3941 
3942 find_stream_info_err:
3943  for (i = 0; i < ic->nb_streams; i++) {
3944  st = ic->streams[i];
3945  if (st->info)
3946  av_freep(&st->info->duration_error);
3947  avcodec_close(ic->streams[i]->internal->avctx);
3948  av_freep(&ic->streams[i]->info);
3949  }
3950  if (ic->pb)
3951  av_log(ic, AV_LOG_DEBUG, "After avformat_find_stream_info() pos: %"PRId64" bytes read:%"PRId64" seeks:%d frames:%d\n",
3952  avio_tell(ic->pb), ic->pb->bytes_read, ic->pb->seek_count, count);
3953  return ret;
3954 }
3955 
3956 AVProgram *av_find_program_from_stream(AVFormatContext *ic, AVProgram *last, int s)
3957 {
3958  int i, j;
3959 
3960  for (i = 0; i < ic->nb_programs; i++) {
3961  if (ic->programs[i] == last) {
3962  last = NULL;
3963  } else {
3964  if (!last)
3965  for (j = 0; j < ic->programs[i]->nb_stream_indexes; j++)
3966  if (ic->programs[i]->stream_index[j] == s)
3967  return ic->programs[i];
3968  }
3969  }
3970  return NULL;
3971 }
3972 
3973 int av_find_best_stream(AVFormatContext *ic, enum AVMediaType type,
3974  int wanted_stream_nb, int related_stream,
3975  AVCodec **decoder_ret, int flags)
3976 {
3977  int i, nb_streams = ic->nb_streams;
3978  int ret = AVERROR_STREAM_NOT_FOUND, best_count = -1, best_bitrate = -1, best_multiframe = -1, count, bitrate, multiframe;
3979  unsigned *program = NULL;
3980  const AVCodec *decoder = NULL, *best_decoder = NULL;
3981 
3982  if (related_stream >= 0 && wanted_stream_nb < 0) {
3983  AVProgram *p = av_find_program_from_stream(ic, NULL, related_stream);
3984  if (p) {
3985  program = p->stream_index;
3986  nb_streams = p->nb_stream_indexes;
3987  }
3988  }
3989  for (i = 0; i < nb_streams; i++) {
3990  int real_stream_index = program ? program[i] : i;
3991  AVStream *st = ic->streams[real_stream_index];
3992  AVCodecParameters *par = st->codecpar;
3993  if (par->codec_type != type)
3994  continue;
3995  if (wanted_stream_nb >= 0 && real_stream_index != wanted_stream_nb)
3996  continue;
3997  if (wanted_stream_nb != real_stream_index &&
4000  continue;
4001  if (type == AVMEDIA_TYPE_AUDIO && !(par->channels && par->sample_rate))
4002  continue;
4003  if (decoder_ret) {
4004  decoder = find_decoder(ic, st, par->codec_id);
4005  if (!decoder) {
4006  if (ret < 0)
4008  continue;
4009  }
4010  }
4012  bitrate = par->bit_rate;
4013  multiframe = FFMIN(5, count);
4014  if ((best_multiframe > multiframe) ||
4015  (best_multiframe == multiframe && best_bitrate > bitrate) ||
4016  (best_multiframe == multiframe && best_bitrate == bitrate && best_count >= count))
4017  continue;
4018  best_count = count;
4019  best_bitrate = bitrate;
4020  best_multiframe = multiframe;
4021  ret = real_stream_index;
4022  best_decoder = decoder;
4023  if (program && i == nb_streams - 1 && ret < 0) {
4024  program = NULL;
4025  nb_streams = ic->nb_streams;
4026  /* no related stream found, try again with everything */
4027  i = 0;
4028  }
4029  }
4030  if (decoder_ret)
4031  *decoder_ret = (AVCodec*)best_decoder;
4032  return ret;
4033 }
4034 
4035 /*******************************************************/
4036 
4037 int av_read_play(AVFormatContext *s)
4038 {
4039  if (s->iformat->read_play)
4040  return s->iformat->read_play(s);
4041  if (s->pb)
4042  return avio_pause(s->pb, 0);
4043  return AVERROR(ENOSYS);
4044 }
4045 
4046 int av_read_pause(AVFormatContext *s)
4047 {
4048  if (s->iformat->read_pause)
4049  return s->iformat->read_pause(s);
4050  if (s->pb)
4051  return avio_pause(s->pb, 1);
4052  return AVERROR(ENOSYS);
4053 }
4054 
4055 int ff_stream_encode_params_copy(AVStream *dst, const AVStream *src)
4056 {
4057  int ret, i;
4058 
4059  dst->id = src->id;
4060  dst->time_base = src->time_base;
4061  dst->nb_frames = src->nb_frames;
4062  dst->disposition = src->disposition;
4064  dst->avg_frame_rate = src->avg_frame_rate;
4065  dst->r_frame_rate = src->r_frame_rate;
4066 
4067  av_dict_free(&dst->metadata);
4068  ret = av_dict_copy(&dst->metadata, src->metadata, 0);
4069  if (ret < 0)
4070  return ret;
4071 
4072  ret = avcodec_parameters_copy(dst->codecpar, src->codecpar);
4073  if (ret < 0)
4074  return ret;
4075 
4076  /* Free existing side data*/
4077  for (i = 0; i < dst->nb_side_data; i++)
4078  av_free(dst->side_data[i].data);
4079  av_freep(&dst->side_data);
4080  dst->nb_side_data = 0;
4081 
4082  /* Copy side data if present */
4083  if (src->nb_side_data) {
4085  sizeof(AVPacketSideData));
4086  if (!dst->side_data)
4087  return AVERROR(ENOMEM);
4088  dst->nb_side_data = src->nb_side_data;
4089 
4090  for (i = 0; i < src->nb_side_data; i++) {
4091  uint8_t *data = av_memdup(src->side_data[i].data,
4092  src->side_data[i].size);
4093  if (!data)
4094  return AVERROR(ENOMEM);
4095  dst->side_data[i].type = src->side_data[i].type;
4096  dst->side_data[i].size = src->side_data[i].size;
4097  dst->side_data[i].data = data;
4098  }
4099  }
4100 
4103  const char *conf_str = src->recommended_encoder_configuration;
4106  return AVERROR(ENOMEM);
4107  }
4108 
4109  return 0;
4110 }
4111 
4112 static void free_stream(AVStream **pst)
4113 {
4114  AVStream *st = *pst;
4115  int i;
4116 
4117  if (!st)
4118  return;
4119 
4120  for (i = 0; i < st->nb_side_data; i++)
4121  av_freep(&st->side_data[i].data);
4122  av_freep(&st->side_data);
4123 
4124  if (st->parser)
4125  av_parser_close(st->parser);
4126 
4127  if (st->attached_pic.data)
4129 
4130  if (st->internal) {
4132  for (i = 0; i < st->internal->nb_bsfcs; i++) {
4133  av_bsf_free(&st->internal->bsfcs[i]);
4134  av_freep(&st->internal->bsfcs);
4135  }
4136  }
4137  av_freep(&st->internal);
4138 
4139  av_dict_free(&st->metadata);
4141  av_freep(&st->probe_data.buf);
4142  av_freep(&st->index_entries);
4143 #if FF_API_LAVF_AVCTX
4145  avcodec_free_context(&st->codec);
4147 #endif
4148  av_freep(&st->priv_data);
4149  if (st->info)
4150  av_freep(&st->info->duration_error);
4151  av_freep(&st->info);
4153  av_freep(&st->priv_pts);
4154 
4155  av_freep(pst);
4156 }
4157 
4158 void ff_free_stream(AVFormatContext *s, AVStream *st)
4159 {
4160  av_assert0(s->nb_streams>0);
4161  av_assert0(s->streams[ s->nb_streams - 1 ] == st);
4162 
4163  free_stream(&s->streams[ --s->nb_streams ]);
4164 }
4165 
4166 void avformat_free_context(AVFormatContext *s)
4167 {
4168  int i;
4169 
4170  if (!s)
4171  return;
4172 
4173  av_opt_free(s);
4174  if (s->iformat && s->iformat->priv_class && s->priv_data)
4175  av_opt_free(s->priv_data);
4176  if (s->oformat && s->oformat->priv_class && s->priv_data)
4177  av_opt_free(s->priv_data);
4178 
4179  for (i = s->nb_streams - 1; i >= 0; i--)
4180  ff_free_stream(s, s->streams[i]);
4181 
4182 
4183  for (i = s->nb_programs - 1; i >= 0; i--) {
4184  av_dict_free(&s->programs[i]->metadata);
4185  av_freep(&s->programs[i]->stream_index);
4186  av_freep(&s->programs[i]);
4187  }
4188  av_freep(&s->programs);
4189  av_freep(&s->priv_data);
4190  while (s->nb_chapters--) {
4192  av_freep(&s->chapters[s->nb_chapters]);
4193  }
4194  av_freep(&s->chapters);
4195  av_dict_free(&s->metadata);
4197  av_freep(&s->streams);
4198  flush_packet_queue(s);
4199  av_freep(&s->internal);
4200  av_free(s);
4201 }
4202 
4203 void avformat_close_input(AVFormatContext **ps)
4204 {
4205  AVFormatContext *s;
4206  AVIOContext *pb;
4207 
4208  if (!ps || !*ps)
4209  return;
4210 
4211  s = *ps;
4212  pb = s->pb;
4213 
4214  if ((s->iformat && strcmp(s->iformat->name, "image2") && s->iformat->flags & AVFMT_NOFILE) ||
4215  (s->flags & AVFMT_FLAG_CUSTOM_IO))
4216  pb = NULL;
4217 
4218  flush_packet_queue(s);
4219 
4220  if (s->iformat)
4221  if (s->iformat->read_close)
4222  s->iformat->read_close(s);
4223 
4225 
4226  *ps = NULL;
4227 
4228  avio_close(pb);
4229 }
4230 
4231 AVStream *avformat_new_stream(AVFormatContext *s, const AVCodec *c)
4232 {
4233  AVStream *st;
4234  int i;
4235  AVStream **streams;
4236 
4237  if (s->nb_streams >= FFMIN(s->max_streams, INT_MAX/sizeof(*streams))) {
4238  if (s->max_streams < INT_MAX/sizeof(*streams))
4239  av_log(s, AV_LOG_ERROR, "Number of streams exceeds max_streams parameter (%d), see the documentation if you wish to increase it\n", s->max_streams);
4240  return NULL;
4241  }
4242  streams = av_realloc_array(s->streams, s->nb_streams + 1, sizeof(*streams));
4243  if (!streams)
4244  return NULL;
4245  s->streams = streams;
4246 
4247  st = av_mallocz(sizeof(AVStream));
4248  if (!st)
4249  return NULL;
4250  if (!(st->info = av_mallocz(sizeof(*st->info)))) {
4251  av_free(st);
4252  return NULL;
4253  }
4254  st->info->last_dts = AV_NOPTS_VALUE;
4255 
4256 #if FF_API_LAVF_AVCTX
4258  st->codec = avcodec_alloc_context3(c);
4259  if (!st->codec) {
4260  av_free(st->info);
4261  av_free(st);
4262  return NULL;
4263  }
4265 #endif
4266 
4267  st->internal = av_mallocz(sizeof(*st->internal));
4268  if (!st->internal)
4269  goto fail;
4270 
4272  if (!st->codecpar)
4273  goto fail;
4274 
4276  if (!st->internal->avctx)
4277  goto fail;
4278 
4279  if (s->iformat) {
4280 #if FF_API_LAVF_AVCTX
4282  /* no default bitrate if decoding */
4283  st->codec->bit_rate = 0;
4285 #endif
4286 
4287  /* default pts setting is MPEG-like */
4288  avpriv_set_pts_info(st, 33, 1, 90000);
4289  /* we set the current DTS to 0 so that formats without any timestamps
4290  * but durations get some timestamps, formats with some unknown
4291  * timestamps have their first few packets buffered and the
4292  * timestamps corrected before they are returned to the user */
4293  st->cur_dts = RELATIVE_TS_BASE;
4294  } else {
4295  st->cur_dts = AV_NOPTS_VALUE;
4296  }
4297 
4298  st->index = s->nb_streams;
4299  st->start_time = AV_NOPTS_VALUE;
4300  st->duration = AV_NOPTS_VALUE;
4301  st->first_dts = AV_NOPTS_VALUE;
4305 
4308  for (i = 0; i < MAX_REORDER_DELAY + 1; i++)
4309  st->pts_buffer[i] = AV_NOPTS_VALUE;
4310 
4311  st->sample_aspect_ratio = (AVRational) { 0, 1 };
4312 
4313 #if FF_API_R_FRAME_RATE
4314  st->info->last_dts = AV_NOPTS_VALUE;
4315 #endif
4318 
4320 
4321  st->internal->need_context_update = 1;
4322 
4323  s->streams[s->nb_streams++] = st;
4324  return st;
4325 fail:
4326  free_stream(&st);
4327  return NULL;
4328 }
4329 
4330 AVProgram *av_new_program(AVFormatContext *ac, int id)
4331 {
4332  AVProgram *program = NULL;
4333  int i;
4334 
4335  av_log(ac, AV_LOG_TRACE, "new_program: id=0x%04x\n", id);
4336 
4337  for (i = 0; i < ac->nb_programs; i++)
4338  if (ac->programs[i]->id == id)
4339  program = ac->programs[i];
4340 
4341  if (!program) {
4342  program = av_mallocz(sizeof(AVProgram));
4343  if (!program)
4344  return NULL;
4345  dynarray_add(&ac->programs, &ac->nb_programs, program);
4346  program->discard = AVDISCARD_NONE;
4347  }
4348  program->id = id;
4351 
4352  program->start_time =
4353  program->end_time = AV_NOPTS_VALUE;
4354 
4355  return program;
4356 }
4357 
4358 AVChapter *avpriv_new_chapter(AVFormatContext *s, int id, AVRational time_base,
4359  int64_t start, int64_t end, const char *title)
4360 {
4361  AVChapter *chapter = NULL;
4362  int i;
4363 
4364  if (end != AV_NOPTS_VALUE && start > end) {
4365  av_log(s, AV_LOG_ERROR, "Chapter end time %"PRId64" before start %"PRId64"\n", end, start);
4366  return NULL;
4367  }
4368 
4369  for (i = 0; i < s->nb_chapters; i++)
4370  if (s->chapters[i]->id == id)
4371  chapter = s->chapters[i];
4372 
4373  if (!chapter) {
4374  chapter = av_mallocz(sizeof(AVChapter));
4375  if (!chapter)
4376  return NULL;
4377  dynarray_add(&s->chapters, &s->nb_chapters, chapter);
4378  }
4379  av_dict_set(&chapter->metadata, "title", title, 0);
4380  chapter->id = id;
4381  chapter->time_base = time_base;
4382  chapter->start = start;
4383  chapter->end = end;
4384 
4385  return chapter;
4386 }
4387 
4388 void av_program_add_stream_index(AVFormatContext *ac, int progid, unsigned idx)
4389 {
4390  int i, j;
4391  AVProgram *program = NULL;
4392  void *tmp;
4393 
4394  if (idx >= ac->nb_streams) {
4395  av_log(ac, AV_LOG_ERROR, "stream index %d is not valid\n", idx);
4396  return;
4397  }
4398 
4399  for (i = 0; i < ac->nb_programs; i++) {
4400  if (ac->programs[i]->id != progid)
4401  continue;
4402  program = ac->programs[i];
4403  for (j = 0; j < program->nb_stream_indexes; j++)
4404  if (program->stream_index[j] == idx)
4405  return;
4406 
4407  tmp = av_realloc_array(program->stream_index, program->nb_stream_indexes+1, sizeof(unsigned int));
4408  if (!tmp)
4409  return;
4410  program->stream_index = tmp;
4411  program->stream_index[program->nb_stream_indexes++] = idx;
4412  return;
4413  }
4414 }
4415 
4416 uint64_t ff_ntp_time(void)
4417 {
4418  return (av_gettime() / 1000) * 1000 + NTP_OFFSET_US;
4419 }
4420 
4421 int av_get_frame_filename2(char *buf, int buf_size, const char *path, int number, int flags)
4422 {
4423  const char *p;
4424  char *q, buf1[20], c;
4425  int nd, len, percentd_found;
4426 
4427  q = buf;
4428  p = path;
4429  percentd_found = 0;
4430  for (;;) {
4431  c = *p++;
4432  if (c == '\0')
4433  break;
4434  if (c == '%') {
4435  do {
4436  nd = 0;
4437  while (av_isdigit(*p))
4438  nd = nd * 10 + *p++ - '0';
4439  c = *p++;
4440  } while (av_isdigit(c));
4441 
4442  switch (c) {
4443  case '%':
4444  goto addchar;
4445  case 'd':
4446  if (!(flags & AV_FRAME_FILENAME_FLAGS_MULTIPLE) && percentd_found)
4447  goto fail;
4448  percentd_found = 1;
4449  if (number < 0)
4450  nd += 1;
4451  snprintf(buf1, sizeof(buf1), "%0*d", nd, number);
4452  len = strlen(buf1);
4453  if ((q - buf + len) > buf_size - 1)
4454  goto fail;
4455  memcpy(q, buf1, len);
4456  q += len;
4457  break;
4458  default:
4459  goto fail;
4460  }
4461  } else {
4462 addchar:
4463  if ((q - buf) < buf_size - 1)
4464  *q++ = c;
4465  }
4466  }
4467  if (!percentd_found)
4468  goto fail;
4469  *q = '\0';
4470  return 0;
4471 fail:
4472  *q = '\0';
4473  return -1;
4474 }
4475 
4476 int av_get_frame_filename(char *buf, int buf_size, const char *path, int number)
4477 {
4478  return av_get_frame_filename2(buf, buf_size, path, number, 0);
4479 }
4480 
4481 void av_url_split(char *proto, int proto_size,
4482  char *authorization, int authorization_size,
4483  char *hostname, int hostname_size,
4484  int *port_ptr, char *path, int path_size, const char *url)
4485 {
4486  const char *p, *ls, *ls2, *at, *at2, *col, *brk;
4487 
4488  if (port_ptr)
4489  *port_ptr = -1;
4490  if (proto_size > 0)
4491  proto[0] = 0;
4492  if (authorization_size > 0)
4493  authorization[0] = 0;
4494  if (hostname_size > 0)
4495  hostname[0] = 0;
4496  if (path_size > 0)
4497  path[0] = 0;
4498 
4499  /* parse protocol */
4500  if ((p = strchr(url, ':'))) {
4501  av_strlcpy(proto, url, FFMIN(proto_size, p + 1 - url));
4502  p++; /* skip ':' */
4503  if (*p == '/')
4504  p++;
4505  if (*p == '/')
4506  p++;
4507  } else {
4508  /* no protocol means plain filename */
4509  av_strlcpy(path, url, path_size);
4510  return;
4511  }
4512 
4513  /* separate path from hostname */
4514  ls = strchr(p, '/');
4515  ls2 = strchr(p, '?');
4516  if (!ls)
4517  ls = ls2;
4518  else if (ls && ls2)
4519  ls = FFMIN(ls, ls2);
4520  if (ls)
4521  av_strlcpy(path, ls, path_size);
4522  else
4523  ls = &p[strlen(p)]; // XXX
4524 
4525  /* the rest is hostname, use that to parse auth/port */
4526  if (ls != p) {
4527  /* authorization (user[:pass]@hostname) */
4528  at2 = p;
4529  while ((at = strchr(p, '@')) && at < ls) {
4530  av_strlcpy(authorization, at2,
4531  FFMIN(authorization_size, at + 1 - at2));
4532  p = at + 1; /* skip '@' */
4533  }
4534 
4535  if (*p == '[' && (brk = strchr(p, ']')) && brk < ls) {
4536  /* [host]:port */
4537  av_strlcpy(hostname, p + 1,
4538  FFMIN(hostname_size, brk - p));
4539  if (brk[1] == ':' && port_ptr)
4540  *port_ptr = atoi(brk + 2);
4541  } else if ((col = strchr(p, ':')) && col < ls) {
4542  av_strlcpy(hostname, p,
4543  FFMIN(col + 1 - p, hostname_size));
4544  if (port_ptr)
4545  *port_ptr = atoi(col + 1);
4546  } else
4547  av_strlcpy(hostname, p,
4548  FFMIN(ls + 1 - p, hostname_size));
4549  }
4550 }
4551 
4552 char *ff_data_to_hex(char *buff, const uint8_t *src, int s, int lowercase)
4553 {
4554  int i;
4555  static const char hex_table_uc[16] = { '0', '1', '2', '3',
4556  '4', '5', '6', '7',
4557  '8', '9', 'A', 'B',
4558  'C', 'D', 'E', 'F' };
4559  static const char hex_table_lc[16] = { '0', '1', '2', '3',
4560  '4', '5', '6', '7',
4561  '8', '9', 'a', 'b',
4562  'c', 'd', 'e', 'f' };
4563  const char *hex_table = lowercase ? hex_table_lc : hex_table_uc;
4564 
4565  for (i = 0; i < s; i++) {
4566  buff[i * 2] = hex_table[src[i] >> 4];
4567  buff[i * 2 + 1] = hex_table[src[i] & 0xF];
4568  }
4569 
4570  return buff;
4571 }
4572 
4573 int ff_hex_to_data(uint8_t *data, const char *p)
4574 {
4575  int c, len, v;
4576 
4577  len = 0;
4578  v = 1;
4579  for (;;) {
4580  p += strspn(p, SPACE_CHARS);
4581  if (*p == '\0')
4582  break;
4583  c = av_toupper((unsigned char) *p++);
4584  if (c >= '0' && c <= '9')
4585  c = c - '0';
4586  else if (c >= 'A' && c <= 'F')
4587  c = c - 'A' + 10;
4588  else
4589  break;
4590  v = (v << 4) | c;
4591  if (v & 0x100) {
4592  if (data)
4593  data[len] = v;
4594  len++;
4595  v = 1;
4596  }
4597  }
4598  return len;
4599 }
4600 
4601 void avpriv_set_pts_info(AVStream *s, int pts_wrap_bits,
4602  unsigned int pts_num, unsigned int pts_den)
4603 {
4604  AVRational new_tb;
4605  if (av_reduce(&new_tb.num, &new_tb.den, pts_num, pts_den, INT_MAX)) {
4606  if (new_tb.num != pts_num)
4608  "st:%d removing common factor %d from timebase\n",
4609  s->index, pts_num / new_tb.num);
4610  } else
4612  "st:%d has too large timebase, reducing\n", s->index);
4613 
4614  if (new_tb.num <= 0 || new_tb.den <= 0) {
4616  "Ignoring attempt to set invalid timebase %d/%d for st:%d\n",
4617  new_tb.num, new_tb.den,
4618  s->index);
4619  return;
4620  }
4621  s->time_base = new_tb;
4622 #if FF_API_LAVF_AVCTX
4624  av_codec_set_pkt_timebase(s->codec, new_tb);
4626 #endif
4628  s->pts_wrap_bits = pts_wrap_bits;
4629 }
4630 
4631 void ff_parse_key_value(const char *str, ff_parse_key_val_cb callback_get_buf,
4632  void *context)
4633 {
4634  const char *ptr = str;
4635 
4636  /* Parse key=value pairs. */
4637  for (;;) {
4638  const char *key;
4639  char *dest = NULL, *dest_end;
4640  int key_len, dest_len = 0;
4641 
4642  /* Skip whitespace and potential commas. */
4643  while (*ptr && (av_isspace(*ptr) || *ptr == ','))
4644  ptr++;
4645  if (!*ptr)
4646  break;
4647 
4648  key = ptr;
4649 
4650  if (!(ptr = strchr(key, '=')))
4651  break;
4652  ptr++;
4653  key_len = ptr - key;
4654 
4655  callback_get_buf(context, key, key_len, &dest, &dest_len);
4656  dest_end = dest + dest_len - 1;
4657 
4658  if (*ptr == '\"') {
4659  ptr++;
4660  while (*ptr && *ptr != '\"') {
4661  if (*ptr == '\\') {
4662  if (!ptr[1])
4663  break;
4664  if (dest && dest < dest_end)
4665  *dest++ = ptr[1];
4666  ptr += 2;
4667  } else {
4668  if (dest && dest < dest_end)
4669  *dest++ = *ptr;
4670  ptr++;
4671  }
4672  }
4673  if (*ptr == '\"')
4674  ptr++;
4675  } else {
4676  for (; *ptr && !(av_isspace(*ptr) || *ptr == ','); ptr++)
4677  if (dest && dest < dest_end)
4678  *dest++ = *ptr;
4679  }
4680  if (dest)
4681  *dest = 0;
4682  }
4683 }
4684 
4685 int ff_find_stream_index(AVFormatContext *s, int id)
4686 {
4687  int i;
4688  for (i = 0; i < s->nb_streams; i++)
4689  if (s->streams[i]->id == id)
4690  return i;
4691  return -1;
4692 }
4693 
4695  int std_compliance)
4696 {
4697  if (ofmt) {
4698  unsigned int codec_tag;
4699  if (ofmt->query_codec)
4700  return ofmt->query_codec(codec_id, std_compliance);
4701  else if (ofmt->codec_tag)
4702  return !!av_codec_get_tag2(ofmt->codec_tag, codec_id, &codec_tag);
4703  else if (codec_id == ofmt->video_codec ||
4704  codec_id == ofmt->audio_codec ||
4705  codec_id == ofmt->subtitle_codec ||
4706  codec_id == ofmt->data_codec)
4707  return 1;
4708  }
4709  return AVERROR_PATCHWELCOME;
4710 }
4711 
4713 {
4714 #if CONFIG_NETWORK
4715  int ret;
4717  if ((ret = ff_network_init()) < 0)
4718  return ret;
4719  if ((ret = ff_tls_init()) < 0)
4720  return ret;
4721 #endif
4722  return 0;
4723 }
4724 
4726 {
4727 #if CONFIG_NETWORK
4728  ff_network_close();
4729  ff_tls_deinit();
4730  ff_network