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