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