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