FFmpeg
Loading...
Searching...
No Matches
demux.c
Go to the documentation of this file.
1/*
2 * Core demuxing component
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 <stdint.h>
23
24#include "config_components.h"
25
26#include "libavutil/avassert.h"
27#include "libavutil/avstring.h"
28#include "libavutil/dict.h"
29#include "libavutil/internal.h"
32#include "libavutil/mem.h"
33#include "libavutil/opt.h"
34#include "libavutil/pixfmt.h"
35#include "libavutil/time.h"
36#include "libavutil/timestamp.h"
37
38#include "libavcodec/avcodec.h"
39#include "libavcodec/bsf.h"
41#include "libavcodec/internal.h"
42#include "packet_internal.h"
43#include "libavcodec/raw.h"
44
45#include "avformat.h"
46#include "avformat_internal.h"
47#include "avio_internal.h"
48#include "demux.h"
49#include "id3v2.h"
50#include "internal.h"
51#include "url.h"
52
53static int64_t wrap_timestamp(const AVStream *st, int64_t timestamp)
54{
55 const FFStream *const sti = cffstream(st);
56 if (sti->pts_wrap_behavior != AV_PTS_WRAP_IGNORE && st->pts_wrap_bits < 64 &&
57 sti->pts_wrap_reference != AV_NOPTS_VALUE && timestamp != AV_NOPTS_VALUE) {
59 timestamp < sti->pts_wrap_reference)
60 return timestamp + (1ULL << st->pts_wrap_bits);
62 timestamp >= sti->pts_wrap_reference)
63 return timestamp - (1ULL << st->pts_wrap_bits);
64 }
65 return timestamp;
66}
67
69{
70 return wrap_timestamp(st, timestamp);
71}
72
74{
75 const AVCodec *codec;
76
77#if CONFIG_H264_DECODER
78 /* Other parts of the code assume this decoder to be used for h264,
79 * so force it if possible. */
81 return avcodec_find_decoder_by_name("h264");
82#endif
83
84 codec = ff_find_decoder(s, st, codec_id);
85 if (!codec)
86 return NULL;
87
89 const AVCodec *probe_codec = NULL;
90 void *iter = NULL;
91 while ((probe_codec = av_codec_iterate(&iter))) {
92 if (probe_codec->id == codec->id &&
95 return probe_codec;
96 }
97 }
98 }
99
100 return codec;
101}
102
104 AVProbeData *pd)
105{
106 static const struct {
107 const char *name;
108 enum AVCodecID id;
109 enum AVMediaType type;
110 } fmt_id_type[] = {
123 { "mjpeg_2000", AV_CODEC_ID_JPEG2000, AVMEDIA_TYPE_VIDEO },
129 { 0 }
130 };
131 int score;
132 const AVInputFormat *fmt = av_probe_input_format3(pd, 1, &score);
133 FFStream *const sti = ffstream(st);
134
135 if (fmt) {
137 "Probe with size=%d, packets=%d detected %s with score=%d\n",
138 pd->buf_size, s->max_probe_packets - sti->probe_packets,
139 fmt->name, score);
140 for (int i = 0; fmt_id_type[i].name; i++) {
141 if (!strcmp(fmt->name, fmt_id_type[i].name)) {
142 if (fmt_id_type[i].type != AVMEDIA_TYPE_AUDIO &&
144 continue;
145 if (sti->request_probe > score &&
146 st->codecpar->codec_id != fmt_id_type[i].id)
147 continue;
148 st->codecpar->codec_id = fmt_id_type[i].id;
149 st->codecpar->codec_type = fmt_id_type[i].type;
150 sti->need_context_update = 1;
151 return score;
152 }
153 }
154 }
155 return 0;
156}
157
158static int init_input(AVFormatContext *s, const char *filename,
160{
161 int ret;
162 AVProbeData pd = { filename, NULL, 0 };
163 int score = AVPROBE_SCORE_RETRY;
164
165 if (s->pb) {
166 s->flags |= AVFMT_FLAG_CUSTOM_IO;
167 if (!s->iformat)
168 return av_probe_input_buffer2(s->pb, &s->iformat, filename,
169 s, 0, s->format_probesize);
170 else if (s->iformat->flags & AVFMT_NOFILE)
171 av_log(s, AV_LOG_WARNING, "Custom AVIOContext makes no sense and "
172 "will be ignored with AVFMT_NOFILE format.\n");
173 return 0;
174 }
175
176 if ((s->iformat && s->iformat->flags & AVFMT_NOFILE) ||
177 (!s->iformat && (s->iformat = av_probe_input_format2(&pd, 0, &score))))
178 return score;
179
180 if ((ret = s->io_open(s, &s->pb, filename, AVIO_FLAG_READ | s->avio_flags, options)) < 0)
181 return ret;
182
183 if (s->iformat)
184 return 0;
185 return av_probe_input_buffer2(s->pb, &s->iformat, filename,
186 s, 0, s->format_probesize);
187}
188
189static int codec_close(FFStream *sti);
190
192{
193 int ret;
194 for (unsigned i = 0; i < s->nb_streams; i++) {
195 AVStream *const st = s->streams[i];
196 FFStream *const sti = ffstream(st);
197
198 if (!sti->need_context_update)
199 continue;
200
201 if (avcodec_is_open(sti->avctx)) {
202 av_log(s, AV_LOG_DEBUG, "Demuxer context update while decoder is open, closing and trying to re-open\n");
203 ret = codec_close(sti);
204 sti->info->found_decoder = 0;
205 if (ret < 0)
206 return ret;
207 }
208
209 /* close parser, because it depends on the codec */
210 if (sti->parser && sti->avctx->codec_id != st->codecpar->codec_id) {
212 sti->parser = NULL;
213 }
214
215 /* update internal codec context, for the parser */
217 if (ret < 0)
218 return ret;
219
221
222 sti->need_context_update = 0;
223 }
224 return 0;
225}
226
230
231int avformat_open_input(AVFormatContext **ps, const char *filename,
232 const AVInputFormat *fmt, AVDictionary **options)
233{
235 AVFormatContext *s = *ps;
236 FFFormatContext *si;
238 ID3v2ExtraMeta *id3v2_extra_meta = NULL;
239 int ret = 0;
240
241 if (!s && !(s = avformat_alloc_context()))
242 return AVERROR(ENOMEM);
243 fci = ff_fc_internal(s);
244 si = &fci->fc;
245 if (!s->av_class) {
246 av_log(NULL, AV_LOG_ERROR, "Input context has not been properly allocated by avformat_alloc_context() and is not NULL either\n");
247 return AVERROR(EINVAL);
248 }
249 if (fmt)
250 s->iformat = fmt;
251
252 if (options)
253 av_dict_copy(&tmp, *options, 0);
254
255 if (s->pb) // must be before any goto fail
256 s->flags |= AVFMT_FLAG_CUSTOM_IO;
257
258 if ((ret = av_opt_set_dict(s, &tmp)) < 0)
259 goto fail;
260
261 if (!(s->url = av_strdup(filename ? filename : ""))) {
262 ret = AVERROR(ENOMEM);
263 goto fail;
264 }
265
266 if ((ret = init_input(s, filename, &tmp)) < 0)
267 goto fail;
268 s->probe_score = ret;
269
270 if (!s->protocol_whitelist && s->pb && s->pb->protocol_whitelist) {
271 s->protocol_whitelist = av_strdup(s->pb->protocol_whitelist);
272 if (!s->protocol_whitelist) {
273 ret = AVERROR(ENOMEM);
274 goto fail;
275 }
276 }
277
278 if (!s->protocol_blacklist && s->pb && s->pb->protocol_blacklist) {
279 s->protocol_blacklist = av_strdup(s->pb->protocol_blacklist);
280 if (!s->protocol_blacklist) {
281 ret = AVERROR(ENOMEM);
282 goto fail;
283 }
284 }
285
286 if (s->format_whitelist && av_match_list(s->iformat->name, s->format_whitelist, ',') <= 0) {
287 av_log(s, AV_LOG_ERROR, "Format not on whitelist \'%s\'\n", s->format_whitelist);
288 ret = AVERROR(EINVAL);
289 goto fail;
290 }
291
292 avio_skip(s->pb, s->skip_initial_bytes);
293
294 /* Check filename in case an image number is expected. */
295 if (s->iformat->flags & AVFMT_NEEDNUMBER) {
296 if (!av_filename_number_test(filename)) {
297 ret = AVERROR(EINVAL);
298 goto fail;
299 }
300 }
301
302 s->duration = s->start_time = AV_NOPTS_VALUE;
303
304 /* Allocate private data. */
305 if (ffifmt(s->iformat)->priv_data_size > 0) {
306 if (!(s->priv_data = av_mallocz(ffifmt(s->iformat)->priv_data_size))) {
307 ret = AVERROR(ENOMEM);
308 goto fail;
309 }
310 if (s->iformat->priv_class) {
311 *(const AVClass **) s->priv_data = s->iformat->priv_class;
312 av_opt_set_defaults(s->priv_data);
313 if ((ret = av_opt_set_dict(s->priv_data, &tmp)) < 0)
314 goto fail;
315 }
316 }
317
318 /* e.g. AVFMT_NOFILE formats will not have an AVIOContext */
319 if (s->pb && is_id3v2_format(s->iformat))
320 ff_id3v2_read_dict(s, s->pb, &si->id3v2_meta, ID3v2_DEFAULT_MAGIC, &id3v2_extra_meta);
321
322 if (ffifmt(s->iformat)->read_header)
323 if ((ret = ffifmt(s->iformat)->read_header(s)) < 0) {
325 goto close;
326 goto fail;
327 }
328
329 if (!s->metadata) {
330 s->metadata = si->id3v2_meta;
331 si->id3v2_meta = NULL;
332 } else if (si->id3v2_meta) {
333 av_log(s, AV_LOG_WARNING, "Discarding ID3 tags because more suitable tags were found.\n");
335 }
336
337 if (id3v2_extra_meta) {
338 if ((ret = ff_id3v2_parse_apic(s, id3v2_extra_meta)) < 0)
339 goto close;
340 if ((ret = ff_id3v2_parse_chapters(s, id3v2_extra_meta)) < 0)
341 goto close;
342 if ((ret = ff_id3v2_parse_priv(s, id3v2_extra_meta)) < 0)
343 goto close;
344 ff_id3v2_free_extra_meta(&id3v2_extra_meta);
345 }
346
347 if ((ret = avformat_queue_attached_pictures(s)) < 0)
348 goto close;
349
350 if (s->pb && !si->data_offset)
351 si->data_offset = avio_tell(s->pb);
352
353 fci->raw_packet_buffer_size = 0;
354
356
357#if FF_API_STREAM_GROUP_ENTRIES
359 for (unsigned i = 0; i < s->nb_stream_groups; i++) {
360 AVStreamGroup *const stg = s->stream_groups[i];
362 AVStreamGroupTileGrid *tile_grid = stg->params.tile_grid;
363 for (int j = 0; j < stg->nb_coded_side_data; j++) {
364 const AVPacketSideData *src = &stg->coded_side_data[j];
365 AVPacketSideData *dst = av_packet_side_data_new(&tile_grid->coded_side_data,
366 &tile_grid->nb_coded_side_data,
367 src->type, src->size, 0);
368 if (!dst) {
369 ret = AVERROR(ENOMEM);
370 goto close;
371 }
372
373 memcpy(dst->data, src->data, src->size);
374 }
375 }
376 }
378#endif
379
380 if (options) {
382 *options = tmp;
383 }
384 *ps = s;
385 return 0;
386
387close:
388 if (ffifmt(s->iformat)->read_close)
389 ffifmt(s->iformat)->read_close(s);
390fail:
391 ff_id3v2_free_extra_meta(&id3v2_extra_meta);
393 if (s->pb && !(s->flags & AVFMT_FLAG_CUSTOM_IO))
394 ff_format_io_close(s, &s->pb);
396 *ps = NULL;
397 return ret;
398}
399
401{
403 AVIOContext *pb;
404
405 if (!ps || !*ps)
406 return;
407
408 s = *ps;
409 pb = s->pb;
410
411 if ((s->iformat && strcmp(s->iformat->name, "image2") && s->iformat->flags & AVFMT_NOFILE) ||
412 (s->flags & AVFMT_FLAG_CUSTOM_IO))
413 pb = NULL;
414
415 if (s->iformat)
416 if (ffifmt(s->iformat)->read_close)
417 ffifmt(s->iformat)->read_close(s);
418
419 ff_format_io_close(s, &pb);
421
422 *ps = NULL;
423}
424
426{
427 switch (st->codecpar->codec_type) {
429 if (s->video_codec_id)
430 st->codecpar->codec_id = s->video_codec_id;
431 break;
433 if (s->audio_codec_id)
434 st->codecpar->codec_id = s->audio_codec_id;
435 break;
437 if (s->subtitle_codec_id)
438 st->codecpar->codec_id = s->subtitle_codec_id;
439 break;
441 if (s->data_codec_id)
442 st->codecpar->codec_id = s->data_codec_id;
443 break;
444 }
445}
446
448{
450 FFStream *const sti = ffstream(st);
451
452 if (sti->request_probe > 0) {
453 AVProbeData *const pd = &sti->probe_data;
454 int end;
455 av_log(s, AV_LOG_DEBUG, "probing stream %d pp:%d\n", st->index, sti->probe_packets);
456 --sti->probe_packets;
457
458 if (pkt) {
459 uint8_t *new_buf = av_realloc(pd->buf, pd->buf_size+pkt->size+AVPROBE_PADDING_SIZE);
460 if (!new_buf) {
462 "Failed to reallocate probe buffer for stream %d\n",
463 st->index);
464 goto no_packet;
465 }
466 pd->buf = new_buf;
467 memcpy(pd->buf + pd->buf_size, pkt->data, pkt->size);
468 pd->buf_size += pkt->size;
469 memset(pd->buf + pd->buf_size, 0, AVPROBE_PADDING_SIZE);
470 } else {
471no_packet:
472 sti->probe_packets = 0;
473 if (!pd->buf_size) {
475 "nothing to probe for stream %d\n", st->index);
476 }
477 }
478
479 end = fci->raw_packet_buffer_size >= s->probesize ||
480 sti->probe_packets <= 0;
481
482 if (end || av_log2(pd->buf_size) != av_log2(pd->buf_size - pkt->size)) {
483 int score = set_codec_from_probe_data(s, st, pd);
485 || end) {
486 pd->buf_size = 0;
487 av_freep(&pd->buf);
488 sti->request_probe = -1;
489 if (st->codecpar->codec_id != AV_CODEC_ID_NONE) {
490 av_log(s, AV_LOG_DEBUG, "probed stream %d\n", st->index);
491 } else
492 av_log(s, AV_LOG_WARNING, "probed stream %d failed\n", st->index);
493 }
494 force_codec_ids(s, st);
495 }
496 }
497 return 0;
498}
499
500static int update_wrap_reference(AVFormatContext *s, AVStream *st, int stream_index, AVPacket *pkt)
501{
502 FFStream *const sti = ffstream(st);
503 int64_t ref = pkt->dts;
504 int pts_wrap_behavior;
505 int64_t pts_wrap_reference;
506 AVProgram *first_program;
507
508 if (ref == AV_NOPTS_VALUE)
509 ref = pkt->pts;
510 if (sti->pts_wrap_reference != AV_NOPTS_VALUE || st->pts_wrap_bits >= 63 || ref == AV_NOPTS_VALUE || !s->correct_ts_overflow)
511 return 0;
512 ref &= (1LL << st->pts_wrap_bits)-1;
513
514 // reference time stamp should be 60 s before first time stamp
515 pts_wrap_reference = ref - av_rescale(60, st->time_base.den, st->time_base.num);
516 // if first time stamp is not more than 1/8 and 60s before the wrap point, subtract rather than add wrap offset
517 pts_wrap_behavior = (ref < (1LL << st->pts_wrap_bits) - (1LL << st->pts_wrap_bits-3)) ||
518 (ref < (1LL << st->pts_wrap_bits) - av_rescale(60, st->time_base.den, st->time_base.num)) ?
520
521 first_program = av_find_program_from_stream(s, NULL, stream_index);
522
523 if (!first_program) {
524 int default_stream_index = av_find_default_stream_index(s);
525 FFStream *const default_sti = ffstream(s->streams[default_stream_index]);
526 if (default_sti->pts_wrap_reference == AV_NOPTS_VALUE) {
527 for (unsigned i = 0; i < s->nb_streams; i++) {
528 FFStream *const sti = ffstream(s->streams[i]);
530 continue;
531 sti->pts_wrap_reference = pts_wrap_reference;
532 sti->pts_wrap_behavior = pts_wrap_behavior;
533 }
534 } else {
535 sti->pts_wrap_reference = default_sti->pts_wrap_reference;
536 sti->pts_wrap_behavior = default_sti->pts_wrap_behavior;
537 }
538 } else {
539 AVProgram *program = first_program;
540 while (program) {
541 if (program->pts_wrap_reference != AV_NOPTS_VALUE) {
542 pts_wrap_reference = program->pts_wrap_reference;
543 pts_wrap_behavior = program->pts_wrap_behavior;
544 break;
545 }
546 program = av_find_program_from_stream(s, program, stream_index);
547 }
548
549 // update every program with differing pts_wrap_reference
550 program = first_program;
551 while (program) {
552 if (program->pts_wrap_reference != pts_wrap_reference) {
553 for (unsigned i = 0; i < program->nb_stream_indexes; i++) {
554 FFStream *const sti = ffstream(s->streams[program->stream_index[i]]);
555 sti->pts_wrap_reference = pts_wrap_reference;
556 sti->pts_wrap_behavior = pts_wrap_behavior;
557 }
558
559 program->pts_wrap_reference = pts_wrap_reference;
560 program->pts_wrap_behavior = pts_wrap_behavior;
561 }
562 program = av_find_program_from_stream(s, program, stream_index);
563 }
564 }
565 return 1;
566}
567
569{
570 FFStream *const sti = ffstream(st);
571
572 if (update_wrap_reference(s, st, pkt->stream_index, pkt) && sti->pts_wrap_behavior == AV_PTS_WRAP_SUB_OFFSET) {
573 // correct first time stamps to negative values
574 if (!is_relative(sti->first_dts))
575 sti->first_dts = wrap_timestamp(st, sti->first_dts);
576 if (!is_relative(st->start_time))
577 st->start_time = wrap_timestamp(st, st->start_time);
578 if (!is_relative(sti->cur_dts))
579 sti->cur_dts = wrap_timestamp(st, sti->cur_dts);
580 }
581
582 pkt->dts = wrap_timestamp(st, pkt->dts);
583 pkt->pts = wrap_timestamp(st, pkt->pts);
584
585 force_codec_ids(s, st);
586
587 /* TODO: audio: time filter; video: frame reordering (pts != dts) */
588 if (s->use_wallclock_as_timestamps)
589 pkt->dts = pkt->pts = av_rescale_q(av_gettime(), AV_TIME_BASE_Q, st->time_base);
590}
591
592/**
593 * Handle a new packet and either return it directly if possible and
594 * allow_passthrough is true or queue the packet (or drop the packet
595 * if corrupt).
596 *
597 * @return < 0 on error, 0 if the packet was passed through,
598 * 1 if it was queued or dropped
599 */
600static int handle_new_packet(AVFormatContext *s, AVPacket *pkt, int allow_passthrough)
601{
603 AVStream *st;
604 FFStream *sti;
605 int err;
606
607 av_assert0(pkt->stream_index < (unsigned)s->nb_streams &&
608 "Invalid stream index.\n");
609
610 if (pkt->flags & AV_PKT_FLAG_CORRUPT) {
612 "Packet corrupt (stream = %d, dts = %s)%s.\n",
613 pkt->stream_index, av_ts2str(pkt->dts),
614 s->flags & AVFMT_FLAG_DISCARD_CORRUPT ? ", dropping it" : "");
615 if (s->flags & AVFMT_FLAG_DISCARD_CORRUPT) {
617 return 1;
618 }
619 }
620
621 st = s->streams[pkt->stream_index];
622 sti = ffstream(st);
623
624 update_timestamps(s, st, pkt);
625
626 if (sti->request_probe <= 0 && allow_passthrough && !fci->raw_packet_buffer.head)
627 return 0;
628
630 if (err < 0) {
632 return err;
633 }
634
635 pkt = &fci->raw_packet_buffer.tail->pkt;
636 fci->raw_packet_buffer_size += pkt->size;
637
638 err = probe_codec(s, st, pkt);
639 if (err < 0)
640 return err;
641
642 return 1;
643}
644
646{
647 int err = handle_new_packet(s, pkt, 0);
648
649 return err < 0 ? err : 0;
650}
651
653{
655 int err;
656
657#if FF_API_INIT_PACKET
659 pkt->data = NULL;
660 pkt->size = 0;
661 av_init_packet(pkt);
663#else
665#endif
666
667 for (;;) {
669
670 if (pktl) {
671 AVStream *const st = s->streams[pktl->pkt.stream_index];
672 if (fci->raw_packet_buffer_size >= s->probesize)
673 if ((err = probe_codec(s, st, NULL)) < 0)
674 return err;
675 if (ffstream(st)->request_probe <= 0) {
677 fci->raw_packet_buffer_size -= pkt->size;
678 return 0;
679 }
680 }
681
682 err = ffifmt(s->iformat)->read_packet(s, pkt);
683 if (err < 0) {
685
686 /* Some demuxers return FFERROR_REDO when they consume
687 data and discard it (ignored streams, junk, extradata).
688 We must re-call the demuxer to get the real packet. */
689 if (err == FFERROR_REDO)
690 continue;
691 if (!pktl || err == AVERROR(EAGAIN))
692 return err;
693 for (unsigned i = 0; i < s->nb_streams; i++) {
694 AVStream *const st = s->streams[i];
695 FFStream *const sti = ffstream(st);
696 if (sti->probe_packets || sti->request_probe > 0)
697 if ((err = probe_codec(s, st, NULL)) < 0)
698 return err;
699 av_assert0(sti->request_probe <= 0);
700 }
701 continue;
702 }
703
705 if (err < 0) {
707 return err;
708 }
709
710 err = handle_new_packet(s, pkt, 1);
711 if (err <= 0) /* Error or passthrough */
712 return err;
713 }
714}
715
716/**
717 * Return the frame duration in seconds. Return 0 if not available.
718 */
719static void compute_frame_duration(AVFormatContext *s, int *pnum, int *pden,
721 AVPacket *pkt)
722{
723 FFStream *const sti = ffstream(st);
724 AVRational codec_framerate = sti->avctx->framerate;
725 int frame_size, sample_rate;
726
727 *pnum = 0;
728 *pden = 0;
729 switch (st->codecpar->codec_type) {
731 if (st->r_frame_rate.num && (!pc || !codec_framerate.num)) {
732 *pnum = st->r_frame_rate.den;
733 *pden = st->r_frame_rate.num;
734 } else if ((s->iformat->flags & AVFMT_NOTIMESTAMPS) &&
735 !codec_framerate.num &&
737 *pnum = st->avg_frame_rate.den;
738 *pden = st->avg_frame_rate.num;
739 } else if (st->time_base.num * 1000LL > st->time_base.den) {
740 *pnum = st->time_base.num;
741 *pden = st->time_base.den;
742 } else if (codec_framerate.den * 1000LL > codec_framerate.num) {
743 int ticks_per_frame = (sti->codec_desc &&
744 (sti->codec_desc->props & AV_CODEC_PROP_FIELDS)) ? 2 : 1;
745 av_reduce(pnum, pden,
746 codec_framerate.den,
747 codec_framerate.num * (int64_t)ticks_per_frame,
748 INT_MAX);
749
750 if (pc && pc->repeat_pict) {
751 av_reduce(pnum, pden,
752 (*pnum) * (1LL + pc->repeat_pict),
753 (*pden),
754 INT_MAX);
755 }
756 /* If this codec can be interlaced or progressive then we need
757 * a parser to compute duration of a packet. Thus if we have
758 * no parser in such case leave duration undefined. */
759 if (sti->codec_desc &&
760 (sti->codec_desc->props & AV_CODEC_PROP_FIELDS) && !pc)
761 *pnum = *pden = 0;
762 }
763 break;
765 if (sti->avctx_inited) {
767 sample_rate = sti->avctx->sample_rate;
768 } else {
770 sample_rate = st->codecpar->sample_rate;
771 }
772 if (frame_size <= 0 || sample_rate <= 0)
773 break;
774 *pnum = frame_size;
775 *pden = sample_rate;
776 break;
777 default:
778 break;
779 }
780}
781
783{
784 FFStream *const sti = ffstream(st);
785 if (st->codecpar->codec_id != AV_CODEC_ID_H264) return 1;
786 if (!sti->info) // if we have left find_stream_info then nb_decoded_frames won't increase anymore for stream copy
787 return 1;
789#if CONFIG_H264_DECODER
790 if (sti->avctx->has_b_frames && avcodec_is_open(sti->avctx) &&
792 return 1;
793#endif
794 if (sti->avctx->has_b_frames < 3)
795 return sti->nb_decoded_frames >= 7;
796 else if (sti->avctx->has_b_frames < 4)
797 return sti->nb_decoded_frames >= 18;
798 else
799 return sti->nb_decoded_frames >= 20;
800}
801
803 PacketListEntry *pktl)
804{
806 FFFormatContext *const si = &fci->fc;
807 if (pktl->next)
808 return pktl->next;
809 if (pktl == si->packet_buffer.tail)
810 return fci->parse_queue.head;
811 return NULL;
812}
813
815{
816 FFStream *const sti = ffstream(st);
817 int onein_oneout = st->codecpar->codec_id != AV_CODEC_ID_H264 &&
820
821 if (!onein_oneout) {
822 int delay = sti->avctx->has_b_frames;
823
824 if (dts == AV_NOPTS_VALUE) {
825 int64_t best_score = INT64_MAX;
826 for (int i = 0; i < delay; i++) {
827 if (sti->pts_reorder_error_count[i]) {
829 if (score < best_score) {
830 best_score = score;
831 dts = pts_buffer[i];
832 }
833 }
834 }
835 } else {
836 for (int i = 0; i < delay; i++) {
837 if (pts_buffer[i] != AV_NOPTS_VALUE) {
838#define ABSDIFF(a,b) (((a) < (b)) ? (b) - (uint64_t)(a) : ((a) - (uint64_t)(b)))
839 uint64_t diff = ABSDIFF(pts_buffer[i], dts);
840
841 if (diff > INT64_MAX - sti->pts_reorder_error[i]) {
842 diff = INT64_MAX;
843 } else
844 diff += sti->pts_reorder_error[i];
845
846 sti->pts_reorder_error[i] = diff;
848 if (sti->pts_reorder_error_count[i] > 250) {
849 sti->pts_reorder_error[i] >>= 1;
850 sti->pts_reorder_error_count[i] >>= 1;
851 }
852 }
853 }
854 }
855 }
856
857 if (dts == AV_NOPTS_VALUE)
858 dts = pts_buffer[0];
859
860 return dts;
861}
862
863/**
864 * Updates the dts of packets of a stream in pkt_buffer, by re-ordering the pts
865 * of the packets in a window.
866 */
867static void update_dts_from_pts(AVFormatContext *s, int stream_index,
868 PacketListEntry *pkt_buffer)
869{
870 AVStream *const st = s->streams[stream_index];
871 int delay = ffstream(st)->avctx->has_b_frames;
872
873 int64_t pts_buffer[MAX_REORDER_DELAY+1];
874
875 for (int i = 0; i < MAX_REORDER_DELAY + 1; i++)
876 pts_buffer[i] = AV_NOPTS_VALUE;
877
878 for (; pkt_buffer; pkt_buffer = get_next_pkt(s, st, pkt_buffer)) {
879 if (pkt_buffer->pkt.stream_index != stream_index)
880 continue;
881
882 if (pkt_buffer->pkt.pts != AV_NOPTS_VALUE && delay <= MAX_REORDER_DELAY) {
883 pts_buffer[0] = pkt_buffer->pkt.pts;
884 for (int i = 0; i < delay && pts_buffer[i] > pts_buffer[i + 1]; i++)
885 FFSWAP(int64_t, pts_buffer[i], pts_buffer[i + 1]);
886
887 pkt_buffer->pkt.dts = select_from_pts_buffer(st, pts_buffer, pkt_buffer->pkt.dts);
888 }
889 }
890}
891
892static void update_initial_timestamps(AVFormatContext *s, int stream_index,
894{
896 FFFormatContext *const si = &fci->fc;
897 AVStream *const st = s->streams[stream_index];
898 FFStream *const sti = ffstream(st);
900
901 uint64_t shift;
902
903 if (sti->first_dts != AV_NOPTS_VALUE ||
904 dts == AV_NOPTS_VALUE ||
905 sti->cur_dts == AV_NOPTS_VALUE ||
906 sti->cur_dts < INT_MIN + RELATIVE_TS_BASE ||
907 dts < INT_MIN + (sti->cur_dts - RELATIVE_TS_BASE) ||
908 is_relative(dts))
909 return;
910
911 sti->first_dts = dts - (sti->cur_dts - RELATIVE_TS_BASE);
912 sti->cur_dts = dts;
913 shift = (uint64_t)sti->first_dts - RELATIVE_TS_BASE;
914
915 if (is_relative(pts))
916 pts += shift;
917
918 for (PacketListEntry *pktl_it = pktl; pktl_it; pktl_it = get_next_pkt(s, st, pktl_it)) {
919 if (pktl_it->pkt.stream_index != stream_index)
920 continue;
921 if (is_relative(pktl_it->pkt.pts))
922 pktl_it->pkt.pts += shift;
923
924 if (is_relative(pktl_it->pkt.dts))
925 pktl_it->pkt.dts += shift;
926
927 if (st->start_time == AV_NOPTS_VALUE && pktl_it->pkt.pts != AV_NOPTS_VALUE) {
928 st->start_time = pktl_it->pkt.pts;
930 st->start_time = av_sat_add64(st->start_time, av_rescale_q(sti->skip_samples, (AVRational){1, st->codecpar->sample_rate}, st->time_base));
931 }
932 }
933
935 update_dts_from_pts(s, stream_index, pktl);
936
937 if (st->start_time == AV_NOPTS_VALUE) {
938 if (st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO || !(pkt->flags & AV_PKT_FLAG_DISCARD)) {
939 st->start_time = pts;
940 }
942 st->start_time = av_sat_add64(st->start_time, av_rescale_q(sti->skip_samples, (AVRational){1, st->codecpar->sample_rate}, st->time_base));
943 }
944}
945
947 int stream_index, int64_t duration)
948{
950 FFFormatContext *const si = &fci->fc;
951 FFStream *const sti = ffstream(st);
953 int64_t cur_dts = RELATIVE_TS_BASE;
954
955 if (sti->first_dts != AV_NOPTS_VALUE) {
957 return;
959 cur_dts = sti->first_dts;
960 for (; pktl; pktl = get_next_pkt(s, st, pktl)) {
961 if (pktl->pkt.stream_index == stream_index) {
962 if (pktl->pkt.pts != pktl->pkt.dts ||
963 pktl->pkt.dts != AV_NOPTS_VALUE ||
964 pktl->pkt.duration)
965 break;
966 cur_dts -= duration;
967 }
968 }
969 if (pktl && pktl->pkt.dts != sti->first_dts) {
970 av_log(s, AV_LOG_DEBUG, "first_dts %s not matching first dts %s (pts %s, duration %"PRId64") in the queue\n",
971 av_ts2str(sti->first_dts), av_ts2str(pktl->pkt.dts), av_ts2str(pktl->pkt.pts), pktl->pkt.duration);
972 return;
973 }
974 if (!pktl) {
975 av_log(s, AV_LOG_DEBUG, "first_dts %s but no packet with dts in the queue\n", av_ts2str(sti->first_dts));
976 return;
977 }
978 pktl = si->packet_buffer.head ? si->packet_buffer.head : fci->parse_queue.head;
979 sti->first_dts = cur_dts;
980 } else if (sti->cur_dts != RELATIVE_TS_BASE)
981 return;
982
983 for (; pktl; pktl = get_next_pkt(s, st, pktl)) {
984 if (pktl->pkt.stream_index != stream_index)
985 continue;
986 if ((pktl->pkt.pts == pktl->pkt.dts ||
987 pktl->pkt.pts == AV_NOPTS_VALUE) &&
988 (pktl->pkt.dts == AV_NOPTS_VALUE ||
989 pktl->pkt.dts == sti->first_dts ||
990 pktl->pkt.dts == RELATIVE_TS_BASE) &&
991 !pktl->pkt.duration &&
992 av_sat_add64(cur_dts, duration) == cur_dts + (uint64_t)duration
993 ) {
994 pktl->pkt.dts = cur_dts;
995 if (!sti->avctx->has_b_frames)
996 pktl->pkt.pts = cur_dts;
997 pktl->pkt.duration = duration;
998 } else
999 break;
1000 cur_dts = pktl->pkt.dts + pktl->pkt.duration;
1001 }
1002 if (!pktl)
1003 sti->cur_dts = cur_dts;
1004}
1005
1008 int64_t next_dts, int64_t next_pts)
1009{
1011 FFFormatContext *const si = &fci->fc;
1012 FFStream *const sti = ffstream(st);
1013 int num, den, presentation_delayed, delay;
1016 int onein_oneout = st->codecpar->codec_id != AV_CODEC_ID_H264 &&
1019
1020 if (s->flags & AVFMT_FLAG_NOFILLIN)
1021 return;
1022
1023 if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO && pkt->dts != AV_NOPTS_VALUE) {
1024 if (pkt->dts == pkt->pts && sti->last_dts_for_order_check != AV_NOPTS_VALUE) {
1025 if (sti->last_dts_for_order_check <= pkt->dts) {
1026 sti->dts_ordered++;
1027 } else {
1029 "DTS %"PRIi64" < %"PRIi64" out of order\n",
1030 pkt->dts,
1032 sti->dts_misordered++;
1033 }
1034 if (sti->dts_ordered + sti->dts_misordered > 250) {
1035 sti->dts_ordered >>= 1;
1036 sti->dts_misordered >>= 1;
1037 }
1038 }
1039
1040 sti->last_dts_for_order_check = pkt->dts;
1041 if (sti->dts_ordered < 8 * sti->dts_misordered && pkt->dts == pkt->pts)
1042 pkt->dts = AV_NOPTS_VALUE;
1043 }
1044
1045 if ((s->flags & AVFMT_FLAG_IGNDTS) && pkt->pts != AV_NOPTS_VALUE)
1046 pkt->dts = AV_NOPTS_VALUE;
1047
1048 if (pc && pc->pict_type == AV_PICTURE_TYPE_B
1049 && !sti->avctx->has_b_frames)
1050 //FIXME Set low_delay = 0 when has_b_frames = 1
1051 sti->avctx->has_b_frames = 1;
1052
1053 /* do we have a video B-frame ? */
1054 delay = sti->avctx->has_b_frames;
1055 presentation_delayed = 0;
1056
1057 /* XXX: need has_b_frame, but cannot get it if the codec is
1058 * not initialized */
1059 if (delay &&
1060 pc && pc->pict_type != AV_PICTURE_TYPE_B)
1061 presentation_delayed = 1;
1062
1063 if (pkt->pts != AV_NOPTS_VALUE && pkt->dts != AV_NOPTS_VALUE &&
1064 st->pts_wrap_bits < 63 && pkt->dts > INT64_MIN + (1LL << st->pts_wrap_bits) &&
1065 pkt->dts - (1LL << (st->pts_wrap_bits - 1)) > pkt->pts) {
1066 if (is_relative(sti->cur_dts) || pkt->dts - (1LL<<(st->pts_wrap_bits - 1)) > sti->cur_dts) {
1067 pkt->dts -= 1LL << st->pts_wrap_bits;
1068 } else
1069 pkt->pts += 1LL << st->pts_wrap_bits;
1070 }
1071
1072 /* Some MPEG-2 in MPEG-PS lack dts (issue #171 / input_file.mpg).
1073 * We take the conservative approach and discard both.
1074 * Note: If this is misbehaving for an H.264 file, then possibly
1075 * presentation_delayed is not set correctly. */
1076 if (delay == 1 && pkt->dts == pkt->pts &&
1077 pkt->dts != AV_NOPTS_VALUE && presentation_delayed) {
1078 av_log(s, AV_LOG_DEBUG, "invalid dts/pts combination %"PRIi64"\n", pkt->dts);
1079 if ( strcmp(s->iformat->name, "mov,mp4,m4a,3gp,3g2,mj2")
1080 && strcmp(s->iformat->name, "flv")) // otherwise we discard correct timestamps for vc1-wmapro.ism
1081 pkt->dts = AV_NOPTS_VALUE;
1082 }
1083
1084 duration = av_mul_q((AVRational) {pkt->duration, 1}, st->time_base);
1085 if (pkt->duration <= 0) {
1086 compute_frame_duration(s, &num, &den, st, pc, pkt);
1087 if (den && num) {
1088 duration = (AVRational) {num, den};
1089 pkt->duration = av_rescale_rnd(1,
1090 num * (int64_t) st->time_base.den,
1091 den * (int64_t) st->time_base.num,
1093 }
1094 }
1095
1096 if (pkt->duration > 0 && (si->packet_buffer.head || fci->parse_queue.head))
1097 update_initial_durations(s, st, pkt->stream_index, pkt->duration);
1098
1099 /* Correct timestamps with byte offset if demuxers only have timestamps
1100 * on packet boundaries */
1101 if (pc && sti->need_parsing == AVSTREAM_PARSE_TIMESTAMPS && pkt->size) {
1102 /* this will estimate bitrate based on this frame's duration and size */
1103 offset = av_rescale(pc->offset, pkt->duration, pkt->size);
1104 if (pkt->pts != AV_NOPTS_VALUE)
1105 pkt->pts += offset;
1106 if (pkt->dts != AV_NOPTS_VALUE)
1107 pkt->dts += offset;
1108 }
1109
1110 /* This may be redundant, but it should not hurt. */
1111 if (pkt->dts != AV_NOPTS_VALUE &&
1112 pkt->pts != AV_NOPTS_VALUE &&
1113 pkt->pts > pkt->dts)
1114 presentation_delayed = 1;
1115
1116 if (s->debug & AV_FDEBUG_TS)
1118 "IN delayed:%d pts:%s, dts:%s cur_dts:%s st:%d pc:%p duration:%"PRId64" delay:%d onein_oneout:%d\n",
1119 presentation_delayed, av_ts2str(pkt->pts), av_ts2str(pkt->dts), av_ts2str(sti->cur_dts),
1120 pkt->stream_index, pc, pkt->duration, delay, onein_oneout);
1121
1122 /* Interpolate PTS and DTS if they are not present. We skip H264
1123 * currently because delay and has_b_frames are not reliably set. */
1124 if ((delay == 0 || (delay == 1 && pc)) &&
1125 onein_oneout) {
1126 if (presentation_delayed) {
1127 /* DTS = decompression timestamp */
1128 /* PTS = presentation timestamp */
1129 if (pkt->dts == AV_NOPTS_VALUE)
1130 pkt->dts = sti->last_IP_pts;
1131 update_initial_timestamps(s, pkt->stream_index, pkt->dts, pkt->pts, pkt);
1132 if (pkt->dts == AV_NOPTS_VALUE)
1133 pkt->dts = sti->cur_dts;
1134
1135 /* This is tricky: the dts must be incremented by the duration
1136 * of the frame we are displaying, i.e. the last I- or P-frame. */
1137 if (sti->last_IP_duration == 0 && (uint64_t)pkt->duration <= INT32_MAX)
1138 sti->last_IP_duration = pkt->duration;
1139 if (pkt->dts != AV_NOPTS_VALUE)
1140 sti->cur_dts = av_sat_add64(pkt->dts, sti->last_IP_duration);
1141 if (pkt->dts != AV_NOPTS_VALUE &&
1142 pkt->pts == AV_NOPTS_VALUE &&
1143 sti->last_IP_duration > 0 &&
1144 ((uint64_t)sti->cur_dts - (uint64_t)next_dts + 1) <= 2 &&
1145 next_dts != next_pts &&
1146 next_pts != AV_NOPTS_VALUE)
1147 pkt->pts = next_dts;
1148
1149 if ((uint64_t)pkt->duration <= INT32_MAX)
1150 sti->last_IP_duration = pkt->duration;
1151 sti->last_IP_pts = pkt->pts;
1152 /* Cannot compute PTS if not present (we can compute it only
1153 * by knowing the future. */
1154 } else if (pkt->pts != AV_NOPTS_VALUE ||
1155 pkt->dts != AV_NOPTS_VALUE ||
1156 pkt->duration > 0 ) {
1157
1158 /* presentation is not delayed : PTS and DTS are the same */
1159 if (pkt->pts == AV_NOPTS_VALUE)
1160 pkt->pts = pkt->dts;
1161 update_initial_timestamps(s, pkt->stream_index, pkt->pts,
1162 pkt->pts, pkt);
1163 if (pkt->pts == AV_NOPTS_VALUE)
1164 pkt->pts = sti->cur_dts;
1165 pkt->dts = pkt->pts;
1166 if (pkt->pts != AV_NOPTS_VALUE && duration.num >= 0)
1167 sti->cur_dts = av_add_stable(st->time_base, pkt->pts, duration, 1);
1168 }
1169 }
1170
1171 if (pkt->pts != AV_NOPTS_VALUE && delay <= MAX_REORDER_DELAY) {
1172 sti->pts_buffer[0] = pkt->pts;
1173 for (int i = 0; i < delay && sti->pts_buffer[i] > sti->pts_buffer[i + 1]; i++)
1174 FFSWAP(int64_t, sti->pts_buffer[i], sti->pts_buffer[i + 1]);
1175
1177 pkt->dts = select_from_pts_buffer(st, sti->pts_buffer, pkt->dts);
1178 }
1179 // We skipped it above so we try here.
1180 if (!onein_oneout)
1181 // This should happen on the first packet
1182 update_initial_timestamps(s, pkt->stream_index, pkt->dts, pkt->pts, pkt);
1183 if (pkt->dts > sti->cur_dts)
1184 sti->cur_dts = pkt->dts;
1185
1186 if (s->debug & AV_FDEBUG_TS)
1187 av_log(s, AV_LOG_DEBUG, "OUTdelayed:%d/%d pts:%s, dts:%s cur_dts:%s st:%d (%d)\n",
1188 presentation_delayed, delay, av_ts2str(pkt->pts), av_ts2str(pkt->dts), av_ts2str(sti->cur_dts), st->index, st->id);
1189
1190 /* update flags */
1192 pkt->flags |= AV_PKT_FLAG_KEY;
1193}
1194
1195/**
1196 * Parse a packet, add all split parts to parse_queue.
1197 *
1198 * @param pkt Packet to parse; must not be NULL.
1199 * @param flush Indicates whether to flush. If set, pkt must be blank.
1200 */
1202 int stream_index, int flush)
1203{
1205 AVStream *st = s->streams[stream_index];
1206 FFStream *const sti = ffstream(st);
1207 AVPacket *out_pkt = sti->parse_pkt;
1208 const AVPacketSideData *sd = NULL;
1209 const uint8_t *data = pkt->data;
1210 uint8_t *extradata = sti->avctx->extradata;
1211 int extradata_size = sti->avctx->extradata_size;
1212 int size = pkt->size;
1213 int ret = 0, got_output = flush, pkt_side_data_consumed = 0;
1214
1215 if (!size && !flush && sti->parser->flags & PARSER_FLAG_COMPLETE_FRAMES) {
1216 // preserve 0-size sync packets
1217 compute_pkt_fields(s, st, sti->parser, pkt, pkt->dts, pkt->pts);
1218
1219 // Theora has valid 0-sized packets that need to be output
1220 if (st->codecpar->codec_id == AV_CODEC_ID_THEORA) {
1221 ret = ff_packet_list_put(&fci->parse_queue,
1222 pkt, NULL, 0);
1223 if (ret < 0)
1224 goto fail;
1225 }
1226 }
1227
1228 if (pkt->side_data_elems)
1229 sd = av_packet_side_data_get(pkt->side_data, pkt->side_data_elems,
1231 if (sd) {
1232 av_assert1(size && !flush);
1233
1234 sti->avctx->extradata = sd->data;
1235 sti->avctx->extradata_size = sd->size;
1236 }
1237
1238 while (size > 0 || (flush && got_output)) {
1239 int64_t next_pts = pkt->pts;
1240 int64_t next_dts = pkt->dts;
1241 int len;
1242
1243 len = av_parser_parse2(sti->parser, sti->avctx,
1244 &out_pkt->data, &out_pkt->size, data, size,
1245 pkt->pts, pkt->dts, pkt->pos);
1246
1247 pkt->pts = pkt->dts = AV_NOPTS_VALUE;
1248 pkt->pos = -1;
1249 /* increment read pointer */
1250 av_assert1(data || !len);
1251 data = len ? data + len : data;
1252 size -= len;
1253
1254 got_output = !!out_pkt->size;
1255
1256 if (pkt->side_data && !out_pkt->side_data) {
1257 /* for the first iteration, side_data are simply moved to output.
1258 * in case of additional iterations, they are duplicated each time. */
1259 if (!pkt_side_data_consumed) {
1260 pkt_side_data_consumed = 1;
1261 out_pkt->side_data = pkt->side_data;
1262 out_pkt->side_data_elems = pkt->side_data_elems;
1263 } else for (int i = 0; i < pkt->side_data_elems; i++) {
1264 const AVPacketSideData *const src_sd = &pkt->side_data[i];
1265 uint8_t *dst_data = av_packet_new_side_data(out_pkt, src_sd->type, src_sd->size);
1266 if (!dst_data) {
1267 ret = AVERROR(ENOMEM);
1268 goto fail;
1269 }
1270 memcpy(dst_data, src_sd->data, src_sd->size);
1271 }
1272 }
1273
1274 if (!out_pkt->size)
1275 continue;
1276
1277 if (pkt->buf && out_pkt->data == pkt->data) {
1278 /* reference pkt->buf only when out_pkt->data is guaranteed to point
1279 * to data in it and not in the parser's internal buffer. */
1280 /* XXX: Ensure this is the case with all parsers when sti->parser->flags
1281 * is PARSER_FLAG_COMPLETE_FRAMES and check for that instead? */
1282 out_pkt->buf = av_buffer_ref(pkt->buf);
1283 if (!out_pkt->buf) {
1284 ret = AVERROR(ENOMEM);
1285 goto fail;
1286 }
1287 } else {
1288 ret = av_packet_make_refcounted(out_pkt);
1289 if (ret < 0)
1290 goto fail;
1291 }
1292
1293 /* set the duration */
1294 out_pkt->duration = (sti->parser->flags & PARSER_FLAG_COMPLETE_FRAMES) ? pkt->duration : 0;
1296 if (sti->avctx->sample_rate > 0 && !out_pkt->duration && sti->parser->duration > 0) {
1297 out_pkt->duration =
1299 (AVRational) { 1, sti->avctx->sample_rate },
1300 st->time_base,
1302 }
1303 } else if (st->codecpar->codec_id == AV_CODEC_ID_GIF) {
1304 if (st->time_base.num > 0 && st->time_base.den > 0 &&
1305 sti->parser->duration) {
1306 out_pkt->duration = sti->parser->duration;
1307 }
1308 }
1309
1310 out_pkt->stream_index = st->index;
1311 out_pkt->pts = sti->parser->pts;
1312 out_pkt->dts = sti->parser->dts;
1313 out_pkt->pos = sti->parser->pos;
1314 out_pkt->flags |= pkt->flags & (AV_PKT_FLAG_DISCARD | AV_PKT_FLAG_CORRUPT);
1315
1317 out_pkt->pos = sti->parser->frame_offset;
1318
1319 if (sti->parser->key_frame == 1 ||
1320 (sti->parser->key_frame == -1 &&
1322 out_pkt->flags |= AV_PKT_FLAG_KEY;
1323
1324 if (sti->parser->key_frame == -1 && sti->parser->pict_type ==AV_PICTURE_TYPE_NONE && (pkt->flags&AV_PKT_FLAG_KEY))
1325 out_pkt->flags |= AV_PKT_FLAG_KEY;
1326
1327 compute_pkt_fields(s, st, sti->parser, out_pkt, next_dts, next_pts);
1328
1329 ret = ff_packet_list_put(&fci->parse_queue,
1330 out_pkt, NULL, 0);
1331 if (ret < 0)
1332 goto fail;
1333 }
1334
1335 /* end of the stream => close and free the parser */
1336 if (flush) {
1337 av_parser_close(sti->parser);
1338 sti->parser = NULL;
1339 }
1340
1341fail:
1342 if (sd) {
1343 sti->avctx->extradata = extradata;
1344 sti->avctx->extradata_size = extradata_size;
1345 }
1346 if (pkt_side_data_consumed) {
1347 pkt->side_data = NULL;
1348 pkt->side_data_elems = 0;
1349 }
1350
1351 if (ret < 0)
1352 av_packet_unref(out_pkt);
1354 return ret;
1355}
1356
1358{
1359 return av_rescale(ts, st->time_base.num * st->codecpar->sample_rate, st->time_base.den);
1360}
1361
1362static int codec_close(FFStream *sti)
1363{
1364 AVCodecContext *avctx_new = NULL;
1365 AVCodecParameters *par_tmp = NULL;
1366 const AVCodec *new_codec = NULL;
1367 int ret;
1368
1369 new_codec =
1370 (sti->avctx->codec_id != sti->pub.codecpar->codec_id) ?
1372 sti->avctx->codec;
1373
1374 avctx_new = avcodec_alloc_context3(new_codec);
1375 if (!avctx_new) {
1376 ret = AVERROR(ENOMEM);
1377 goto fail;
1378 }
1379
1380 par_tmp = avcodec_parameters_alloc();
1381 if (!par_tmp) {
1382 ret = AVERROR(ENOMEM);
1383 goto fail;
1384 }
1385
1386 ret = avcodec_parameters_from_context(par_tmp, sti->avctx);
1387 if (ret < 0)
1388 goto fail;
1389
1390 ret = avcodec_parameters_to_context(avctx_new, par_tmp);
1391 if (ret < 0)
1392 goto fail;
1393
1394 avctx_new->pkt_timebase = sti->avctx->pkt_timebase;
1395
1397 sti->avctx = avctx_new;
1398
1399 avctx_new = NULL;
1400 ret = 0;
1401
1402fail:
1403 avcodec_free_context(&avctx_new);
1404 avcodec_parameters_free(&par_tmp);
1405
1406 return ret;
1407}
1408
1409static int extract_extradata(FFFormatContext *si, AVStream *st, const AVPacket *pkt);
1410
1412{
1414 FFFormatContext *const si = &fci->fc;
1415 int ret, got_packet = 0;
1417
1418 while (!got_packet && !fci->parse_queue.head) {
1419 AVStream *st;
1420 FFStream *sti;
1421
1422 /* read next packet */
1423 ret = ff_read_packet(s, pkt);
1424 if (ret < 0) {
1425 if (ret == AVERROR(EAGAIN))
1426 return ret;
1427 /* flush the parsers */
1428 for (unsigned i = 0; i < s->nb_streams; i++) {
1429 AVStream *const st = s->streams[i];
1430 FFStream *const sti = ffstream(st);
1431 if (sti->parser && sti->need_parsing)
1432 parse_packet(s, pkt, st->index, 1);
1433 }
1434 /* all remaining packets are now in parse_queue =>
1435 * really terminate parsing */
1436 break;
1437 }
1438 ret = 0;
1439 st = s->streams[pkt->stream_index];
1440 sti = ffstream(st);
1441
1443
1444 int new_extradata = !!av_packet_side_data_get(pkt->side_data, pkt->side_data_elems,
1446 if (new_extradata)
1447 sti->need_context_update = 1;
1448
1449 /* update context if required */
1450 if (sti->need_context_update) {
1451 if (avcodec_is_open(sti->avctx)) {
1452 av_log(s, AV_LOG_DEBUG, "Demuxer context update while decoder is open, closing and trying to re-open\n");
1453 ret = codec_close(sti);
1454 sti->info->found_decoder = 0;
1455 if (ret < 0)
1456 return ret;
1457 }
1458
1459 /* close parser, because it depends on the codec and extradata */
1460 if (sti->parser &&
1461 (sti->avctx->codec_id != st->codecpar->codec_id || new_extradata)) {
1462 av_parser_close(sti->parser);
1463 sti->parser = NULL;
1464 }
1465
1467 if (ret < 0) {
1469 return ret;
1470 }
1471
1472 if (!sti->avctx->extradata) {
1473 sti->extract_extradata.inited = 0;
1474
1475 ret = extract_extradata(si, st, pkt);
1476 if (ret < 0) {
1478 return ret;
1479 }
1480 }
1481
1483
1484 sti->need_context_update = 0;
1485 }
1486
1487 if (pkt->pts != AV_NOPTS_VALUE &&
1488 pkt->dts != AV_NOPTS_VALUE &&
1489 pkt->pts < pkt->dts) {
1491 "Invalid timestamps stream=%d, pts=%s, dts=%s, size=%d\n",
1492 pkt->stream_index,
1493 av_ts2str(pkt->pts),
1494 av_ts2str(pkt->dts),
1495 pkt->size);
1496 }
1497 if (s->debug & AV_FDEBUG_TS)
1499 "ff_read_packet stream=%d, pts=%s, dts=%s, size=%d, duration=%"PRId64", flags=%d\n",
1500 pkt->stream_index,
1501 av_ts2str(pkt->pts),
1502 av_ts2str(pkt->dts),
1503 pkt->size, pkt->duration, pkt->flags);
1504
1505 if (sti->need_parsing && !sti->parser && !(s->flags & AVFMT_FLAG_NOPARSE)) {
1507 if (!sti->parser) {
1508 av_log(s, AV_LOG_VERBOSE, "parser not found for codec "
1509 "%s, packets or times may be invalid.\n",
1511 /* no parser available: just output the raw packets */
1513 } else if (sti->need_parsing == AVSTREAM_PARSE_HEADERS)
1515 else if (sti->need_parsing == AVSTREAM_PARSE_FULL_ONCE)
1516 sti->parser->flags |= PARSER_FLAG_ONCE;
1517 else if (sti->need_parsing == AVSTREAM_PARSE_FULL_RAW)
1519 }
1520
1521 if (!sti->need_parsing || !sti->parser) {
1522 /* no parsing needed: we just output the packet as is */
1524 if ((s->iformat->flags & AVFMT_GENERIC_INDEX) &&
1525 (pkt->flags & AV_PKT_FLAG_KEY) && pkt->dts != AV_NOPTS_VALUE) {
1526 ff_reduce_index(s, st->index);
1527 av_add_index_entry(st, pkt->pos, pkt->dts,
1528 0, 0, AVINDEX_KEYFRAME);
1529 }
1530 got_packet = 1;
1531 } else if (st->discard < AVDISCARD_ALL) {
1532 if ((ret = parse_packet(s, pkt, pkt->stream_index, 0)) < 0)
1533 return ret;
1535 st->codecpar->bit_rate = sti->avctx->bit_rate;
1537 if (ret < 0)
1538 return ret;
1539 st->codecpar->codec_id = sti->avctx->codec_id;
1540 } else {
1541 /* free packet */
1543 }
1544 if (pkt->flags & AV_PKT_FLAG_KEY)
1545 sti->skip_to_keyframe = 0;
1546 if (sti->skip_to_keyframe) {
1548 got_packet = 0;
1549 }
1550 }
1551
1552 if (!got_packet && fci->parse_queue.head)
1553 ret = ff_packet_list_get(&fci->parse_queue, pkt);
1554
1555 if (ret >= 0) {
1556 AVStream *const st = s->streams[pkt->stream_index];
1557 FFStream *const sti = ffstream(st);
1558 int discard_padding = 0;
1559 if (sti->first_discard_sample && pkt->pts != AV_NOPTS_VALUE) {
1560 int64_t pts = pkt->pts - (is_relative(pkt->pts) ? RELATIVE_TS_BASE : 0);
1562 int64_t duration = FFMAX(st->codecpar->frame_size, ts_to_samples(st, pkt->duration));
1563 int64_t end_sample = sample + duration;
1564 if (duration > 0 && end_sample >= sti->first_discard_sample &&
1565 sample < sti->last_discard_sample)
1566 discard_padding = FFMIN(end_sample - sti->first_discard_sample, duration);
1567 }
1568 if (sti->start_skip_samples && (pkt->pts == 0 || pkt->pts == RELATIVE_TS_BASE))
1569 sti->skip_samples = sti->start_skip_samples;
1570 sti->skip_samples = FFMAX(0, sti->skip_samples);
1571 if (sti->skip_samples || discard_padding) {
1573 if (p) {
1574 AV_WL32(p, sti->skip_samples);
1575 AV_WL32(p + 4, discard_padding);
1576 av_log(s, AV_LOG_DEBUG, "demuxer injecting skip %u / discard %u\n",
1577 (unsigned)sti->skip_samples, (unsigned)discard_padding);
1578 }
1579 sti->skip_samples = 0;
1580 }
1581 }
1582
1583 if (!fci->metafree) {
1584 int metaret = av_opt_get_dict_val(s, "metadata", AV_OPT_SEARCH_CHILDREN, &metadata);
1585 if (metadata) {
1586 s->event_flags |= AVFMT_EVENT_FLAG_METADATA_UPDATED;
1587 av_dict_copy(&s->metadata, metadata, 0);
1590 }
1591 fci->metafree = metaret == AVERROR_OPTION_NOT_FOUND;
1592 }
1593
1594 if (s->debug & AV_FDEBUG_TS)
1596 "read_frame_internal stream=%d, pts=%s, dts=%s, "
1597 "size=%d, duration=%"PRId64", flags=%d\n",
1598 pkt->stream_index,
1599 av_ts2str(pkt->pts),
1600 av_ts2str(pkt->dts),
1601 pkt->size, pkt->duration, pkt->flags);
1602
1603 /* A demuxer might have returned EOF because of an IO error, let's
1604 * propagate this back to the user. */
1605 if (ret == AVERROR_EOF && s->pb && s->pb->error < 0 && s->pb->error != AVERROR(EAGAIN))
1606 ret = s->pb->error;
1607
1608 return ret;
1609}
1610
1612{
1613 FFFormatContext *const si = ffformatcontext(s);
1614 const int genpts = s->flags & AVFMT_FLAG_GENPTS;
1615 int eof = 0;
1616 int ret;
1617 AVStream *st;
1618
1619 if (!genpts) {
1620 ret = si->packet_buffer.head
1623 if (ret < 0)
1624 return ret;
1625 goto return_packet;
1626 }
1627
1628 for (;;) {
1630
1631 if (pktl) {
1632 AVPacket *next_pkt = &pktl->pkt;
1633
1634 if (next_pkt->dts != AV_NOPTS_VALUE) {
1635 int wrap_bits = s->streams[next_pkt->stream_index]->pts_wrap_bits;
1636 // last dts seen for this stream. if any of packets following
1637 // current one had no dts, we will set this to AV_NOPTS_VALUE.
1638 int64_t last_dts = next_pkt->dts;
1639 av_assert2(wrap_bits <= 64);
1640 while (pktl && next_pkt->pts == AV_NOPTS_VALUE) {
1641 if (pktl->pkt.stream_index == next_pkt->stream_index &&
1642 av_compare_mod(next_pkt->dts, pktl->pkt.dts, 2ULL << (wrap_bits - 1)) < 0) {
1643 if (av_compare_mod(pktl->pkt.pts, pktl->pkt.dts, 2ULL << (wrap_bits - 1))) {
1644 // not B-frame
1645 next_pkt->pts = pktl->pkt.dts;
1646 }
1647 if (last_dts != AV_NOPTS_VALUE) {
1648 // Once last dts was set to AV_NOPTS_VALUE, we don't change it.
1649 last_dts = pktl->pkt.dts;
1650 }
1651 }
1652 pktl = pktl->next;
1653 }
1654 if (eof && next_pkt->pts == AV_NOPTS_VALUE && last_dts != AV_NOPTS_VALUE) {
1655 // Fixing the last reference frame had none pts issue (For MXF etc).
1656 // We only do this when
1657 // 1. eof.
1658 // 2. we are not able to resolve a pts value for current packet.
1659 // 3. the packets for this stream at the end of the files had valid dts.
1660 next_pkt->pts = last_dts + next_pkt->duration;
1661 }
1662 pktl = si->packet_buffer.head;
1663 }
1664
1665 /* read packet from packet buffer, if there is data */
1666 st = s->streams[next_pkt->stream_index];
1667 if (!(next_pkt->pts == AV_NOPTS_VALUE && st->discard < AVDISCARD_ALL &&
1668 next_pkt->dts != AV_NOPTS_VALUE && !eof)) {
1670 goto return_packet;
1671 }
1672 }
1673
1674 ret = read_frame_internal(s, pkt);
1675 if (ret < 0) {
1676 if (pktl && ret != AVERROR(EAGAIN)) {
1677 eof = 1;
1678 continue;
1679 } else
1680 return ret;
1681 }
1682
1684 pkt, NULL, 0);
1685 if (ret < 0) {
1687 return ret;
1688 }
1689 }
1690
1691return_packet:
1692 st = s->streams[pkt->stream_index];
1693 if ((s->iformat->flags & AVFMT_GENERIC_INDEX) && pkt->flags & AV_PKT_FLAG_KEY) {
1694 ff_reduce_index(s, st->index);
1695 av_add_index_entry(st, pkt->pos, pkt->dts, 0, 0, AVINDEX_KEYFRAME);
1696 }
1697
1698 if (is_relative(pkt->dts))
1699 pkt->dts -= RELATIVE_TS_BASE;
1700 if (is_relative(pkt->pts))
1701 pkt->pts -= RELATIVE_TS_BASE;
1702
1703 return ret;
1704}
1705
1706/**
1707 * Return TRUE if the stream has accurate duration in any stream.
1708 *
1709 * @return TRUE if the stream has accurate duration for at least one component.
1710 */
1712{
1713 for (unsigned i = 0; i < ic->nb_streams; i++) {
1714 const AVStream *const st = ic->streams[i];
1715 if (st->duration != AV_NOPTS_VALUE)
1716 return 1;
1717 }
1718 if (ic->duration != AV_NOPTS_VALUE)
1719 return 1;
1720 return 0;
1721}
1722
1723/**
1724 * Estimate the stream timings from the one of each components.
1725 *
1726 * Also computes the global bitrate if possible.
1727 */
1729{
1730 int64_t start_time, start_time1, start_time_text, end_time, end_time1, end_time_text;
1731 int64_t duration, duration1, duration_text, filesize;
1732
1733 start_time = INT64_MAX;
1734 start_time_text = INT64_MAX;
1735 end_time = INT64_MIN;
1736 end_time_text = INT64_MIN;
1737 duration = INT64_MIN;
1738 duration_text = INT64_MIN;
1739
1740 for (unsigned i = 0; i < ic->nb_streams; i++) {
1741 AVStream *const st = ic->streams[i];
1742 int is_text = st->codecpar->codec_type == AVMEDIA_TYPE_SUBTITLE ||
1744
1745 if (st->start_time != AV_NOPTS_VALUE && st->time_base.den) {
1746 start_time1 = av_rescale_q(st->start_time, st->time_base,
1748 if (is_text)
1749 start_time_text = FFMIN(start_time_text, start_time1);
1750 else
1751 start_time = FFMIN(start_time, start_time1);
1752 end_time1 = av_rescale_q_rnd(st->duration, st->time_base,
1755 if (end_time1 != AV_NOPTS_VALUE && (end_time1 > 0 ? start_time1 <= INT64_MAX - end_time1 : start_time1 >= INT64_MIN - end_time1)) {
1756 end_time1 += start_time1;
1757 if (is_text)
1758 end_time_text = FFMAX(end_time_text, end_time1);
1759 else
1760 end_time = FFMAX(end_time, end_time1);
1761 }
1762 for (AVProgram *p = NULL; (p = av_find_program_from_stream(ic, p, i)); ) {
1763 if (p->start_time == AV_NOPTS_VALUE || p->start_time > start_time1)
1764 p->start_time = start_time1;
1765 if (p->end_time < end_time1)
1766 p->end_time = end_time1;
1767 }
1768 }
1769 if (st->duration != AV_NOPTS_VALUE) {
1770 duration1 = av_rescale_q(st->duration, st->time_base,
1772 if (is_text)
1773 duration_text = FFMAX(duration_text, duration1);
1774 else
1775 duration = FFMAX(duration, duration1);
1776 }
1777 }
1778 if (start_time == INT64_MAX || (start_time > start_time_text && start_time - (uint64_t)start_time_text < AV_TIME_BASE))
1779 start_time = start_time_text;
1780 else if (start_time > start_time_text)
1781 av_log(ic, AV_LOG_VERBOSE, "Ignoring outlier non primary stream starttime %f\n", start_time_text / (float)AV_TIME_BASE);
1782
1783 if (end_time == INT64_MIN || (end_time < end_time_text && end_time_text - (uint64_t)end_time < AV_TIME_BASE))
1784 end_time = end_time_text;
1785 else if (end_time < end_time_text)
1786 av_log(ic, AV_LOG_VERBOSE, "Ignoring outlier non primary stream endtime %f\n", end_time_text / (float)AV_TIME_BASE);
1787
1788 if (duration == INT64_MIN || (duration < duration_text && (uint64_t)duration_text - duration < AV_TIME_BASE))
1789 duration = duration_text;
1790 else if (duration < duration_text)
1791 av_log(ic, AV_LOG_VERBOSE, "Ignoring outlier non primary stream duration %f\n", duration_text / (float)AV_TIME_BASE);
1792
1793 if (start_time != INT64_MAX) {
1794 ic->start_time = start_time;
1795 if (end_time != INT64_MIN) {
1796 if (ic->nb_programs > 1) {
1797 for (unsigned i = 0; i < ic->nb_programs; i++) {
1798 AVProgram *const p = ic->programs[i];
1799
1800 if (p->start_time != AV_NOPTS_VALUE &&
1801 p->end_time > p->start_time &&
1802 p->end_time - (uint64_t)p->start_time <= INT64_MAX)
1803 duration = FFMAX(duration, p->end_time - p->start_time);
1804 }
1805 } else if (end_time >= start_time && end_time - (uint64_t)start_time <= INT64_MAX) {
1806 duration = FFMAX(duration, end_time - start_time);
1807 }
1808 }
1809 }
1810 if (duration != INT64_MIN && duration > 0 && ic->duration == AV_NOPTS_VALUE) {
1811 ic->duration = duration;
1812 }
1813 if (ic->pb && (filesize = avio_size(ic->pb)) > 0 && ic->duration > 0) {
1814 /* compute the bitrate */
1815 double bitrate = (double) filesize * 8.0 * AV_TIME_BASE /
1816 (double) ic->duration;
1817 if (bitrate >= 0 && bitrate <= INT64_MAX)
1818 ic->bit_rate = bitrate;
1819 }
1820}
1821
1823{
1825 for (unsigned i = 0; i < ic->nb_streams; i++) {
1826 AVStream *const st = ic->streams[i];
1827
1828 if (st->start_time == AV_NOPTS_VALUE) {
1829 if (ic->start_time != AV_NOPTS_VALUE)
1831 st->time_base);
1832 if (ic->duration != AV_NOPTS_VALUE)
1834 st->time_base);
1835 }
1836 }
1837}
1838
1840{
1841 FFFormatContext *const si = ffformatcontext(ic);
1842 int show_warning = 0;
1843
1844 /* if bit_rate is already set, we believe it */
1845 if (ic->bit_rate <= 0) {
1846 int64_t bit_rate = 0;
1847 for (unsigned i = 0; i < ic->nb_streams; i++) {
1848 const AVStream *const st = ic->streams[i];
1849 const FFStream *const sti = cffstream(st);
1850 if (st->codecpar->bit_rate <= 0 && sti->avctx->bit_rate > 0)
1851 st->codecpar->bit_rate = sti->avctx->bit_rate;
1852 if (st->codecpar->bit_rate > 0) {
1853 if (INT64_MAX - st->codecpar->bit_rate < bit_rate) {
1854 bit_rate = 0;
1855 break;
1856 }
1857 bit_rate += st->codecpar->bit_rate;
1858 } else if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO && sti->codec_info_nb_frames > 1) {
1859 // If we have a videostream with packets but without a bitrate
1860 // then consider the sum not known
1861 bit_rate = 0;
1862 break;
1863 }
1864 }
1865 ic->bit_rate = bit_rate;
1866 }
1867
1868 /* if duration is already set, we believe it */
1869 if (ic->duration == AV_NOPTS_VALUE &&
1870 ic->bit_rate != 0) {
1871 int64_t filesize = ic->pb ? avio_size(ic->pb) : 0;
1872 if (filesize > si->data_offset) {
1873 filesize -= si->data_offset;
1874 for (unsigned i = 0; i < ic->nb_streams; i++) {
1875 AVStream *const st = ic->streams[i];
1876
1877 if ( st->time_base.num <= INT64_MAX / ic->bit_rate
1878 && st->duration == AV_NOPTS_VALUE) {
1879 st->duration = av_rescale(filesize, 8LL * st->time_base.den,
1880 ic->bit_rate *
1881 (int64_t) st->time_base.num);
1882 show_warning = 1;
1883 }
1884 }
1885 }
1886 }
1887 if (show_warning)
1889 "Estimating duration from bitrate, this may be inaccurate\n");
1890}
1891
1892#define DURATION_DEFAULT_MAX_READ_SIZE 250000LL
1893#define DURATION_DEFAULT_MAX_RETRY 6
1894#define DURATION_MAX_RETRY 1
1895
1896/* only usable for MPEG-PS streams */
1898{
1899 FFFormatContext *const si = ffformatcontext(ic);
1900 AVPacket *const pkt = si->pkt;
1901 int num, den, read_size, ret;
1903 int duration_max_retry = ic->duration_probesize ? DURATION_MAX_RETRY : DURATION_DEFAULT_MAX_RETRY;
1904 int found_duration = 0;
1905 int is_end;
1907 int retry = 0;
1908
1909 /* flush packet queue */
1911
1912 for (unsigned i = 0; i < ic->nb_streams; i++) {
1913 AVStream *const st = ic->streams[i];
1914 FFStream *const sti = ffstream(st);
1915
1916 if (st->start_time == AV_NOPTS_VALUE &&
1917 sti->first_dts == AV_NOPTS_VALUE &&
1920 "start time for stream %d is not set in estimate_timings_from_pts\n", i);
1921
1922 if (sti->parser) {
1923 av_parser_close(sti->parser);
1924 sti->parser = NULL;
1925 }
1926 }
1927
1929 av_log(ic, AV_LOG_INFO, "Skipping duration calculation in estimate_timings_from_pts\n");
1930 goto skip_duration_calc;
1931 }
1932
1933 av_opt_set_int(ic, "skip_changes", 1, AV_OPT_SEARCH_CHILDREN);
1934 /* estimate the end time (duration) */
1935 /* XXX: may need to support wrapping */
1936 filesize = ic->pb ? avio_size(ic->pb) : 0;
1937 do {
1938 is_end = found_duration;
1939 offset = filesize - (duration_max_read_size << retry);
1940 if (offset < 0)
1941 offset = 0;
1942
1943 avio_seek(ic->pb, offset, SEEK_SET);
1944 read_size = 0;
1945 for (;;) {
1946 AVStream *st;
1947 FFStream *sti;
1948 if (read_size >= duration_max_read_size << (FFMAX(retry - 1, 0)))
1949 break;
1950
1951 do {
1952 ret = ff_read_packet(ic, pkt);
1953 } while (ret == AVERROR(EAGAIN));
1954 if (ret != 0)
1955 break;
1956 read_size += pkt->size;
1957 st = ic->streams[pkt->stream_index];
1958 sti = ffstream(st);
1959 if (pkt->pts != AV_NOPTS_VALUE &&
1960 (st->start_time != AV_NOPTS_VALUE ||
1961 sti->first_dts != AV_NOPTS_VALUE)) {
1962 if (pkt->duration == 0) {
1963 compute_frame_duration(ic, &num, &den, st, sti->parser, pkt);
1964 if (den && num) {
1965 pkt->duration = av_rescale_rnd(1,
1966 num * (int64_t) st->time_base.den,
1967 den * (int64_t) st->time_base.num,
1969 }
1970 }
1971 duration = pkt->pts + pkt->duration;
1972 found_duration = 1;
1973 if (st->start_time != AV_NOPTS_VALUE)
1974 duration -= st->start_time;
1975 else
1976 duration -= sti->first_dts;
1977 if (duration > 0) {
1978 if (st->duration == AV_NOPTS_VALUE || sti->info->last_duration<= 0 ||
1979 (st->duration < duration && FFABS(duration - sti->info->last_duration) < 60LL*st->time_base.den / st->time_base.num))
1980 st->duration = duration;
1981 sti->info->last_duration = duration;
1982 }
1983 }
1985 }
1986
1987 /* check if all audio/video streams have valid duration */
1988 if (!is_end) {
1989 is_end = 1;
1990 for (unsigned i = 0; i < ic->nb_streams; i++) {
1991 const AVStream *const st = ic->streams[i];
1992 switch (st->codecpar->codec_type) {
1993 case AVMEDIA_TYPE_VIDEO:
1994 case AVMEDIA_TYPE_AUDIO:
1995 if (st->duration == AV_NOPTS_VALUE)
1996 is_end = 0;
1997 }
1998 }
1999 }
2000 } while (!is_end &&
2001 offset &&
2002 ++retry <= duration_max_retry);
2003
2004 av_opt_set_int(ic, "skip_changes", 0, AV_OPT_SEARCH_CHILDREN);
2005
2006 /* warn about audio/video streams which duration could not be estimated */
2007 for (unsigned i = 0; i < ic->nb_streams; i++) {
2008 const AVStream *const st = ic->streams[i];
2009 const FFStream *const sti = cffstream(st);
2010
2011 if (st->duration == AV_NOPTS_VALUE) {
2012 switch (st->codecpar->codec_type) {
2013 case AVMEDIA_TYPE_VIDEO:
2014 case AVMEDIA_TYPE_AUDIO:
2015 if (st->start_time != AV_NOPTS_VALUE || sti->first_dts != AV_NOPTS_VALUE) {
2016 av_log(ic, AV_LOG_WARNING, "stream %d : no PTS found at end of file, duration not set\n", i);
2017 } else
2018 av_log(ic, AV_LOG_WARNING, "stream %d : no TS found at start of file, duration not set\n", i);
2019 }
2020 }
2021 }
2022skip_duration_calc:
2024
2025 avio_seek(ic->pb, old_offset, SEEK_SET);
2026 for (unsigned i = 0; i < ic->nb_streams; i++) {
2027 AVStream *const st = ic->streams[i];
2028 FFStream *const sti = ffstream(st);
2029
2030 sti->cur_dts = sti->first_dts;
2033 for (int j = 0; j < MAX_REORDER_DELAY + 1; j++)
2034 sti->pts_buffer[j] = AV_NOPTS_VALUE;
2035 }
2036}
2037
2038/* 1:1 map to AVDurationEstimationMethod */
2039static const char *const duration_name[] = {
2040 [AVFMT_DURATION_FROM_PTS] = "pts",
2041 [AVFMT_DURATION_FROM_STREAM] = "stream",
2042 [AVFMT_DURATION_FROM_BITRATE] = "bit rate",
2043};
2044
2046{
2047 return duration_name[method];
2048}
2049
2050static void estimate_timings(AVFormatContext *ic, int64_t old_offset)
2051{
2052 int64_t file_size;
2053
2054 /* get the file size, if possible */
2055 if (ic->iformat->flags & AVFMT_NOFILE) {
2056 file_size = 0;
2057 } else {
2058 file_size = avio_size(ic->pb);
2059 file_size = FFMAX(0, file_size);
2060 }
2061
2062 if ((!strcmp(ic->iformat->name, "mpeg") ||
2063 !strcmp(ic->iformat->name, "mpegts")) &&
2064 file_size && (ic->pb->seekable & AVIO_SEEKABLE_NORMAL)) {
2065 /* get accurate estimate from the PTSes */
2066 estimate_timings_from_pts(ic, old_offset);
2068 } else if (has_duration(ic)) {
2069 /* at least one component has timings - we use them for all
2070 * the components */
2072 /* nut demuxer estimate the duration from PTS */
2073 if (!strcmp(ic->iformat->name, "nut"))
2075 else
2077 } else {
2078 /* less precise: use bitrate info */
2081 }
2083
2084 for (unsigned i = 0; i < ic->nb_streams; i++) {
2085 AVStream *const st = ic->streams[i];
2086 if (st->time_base.den)
2087 av_log(ic, AV_LOG_TRACE, "stream %u: start_time: %s duration: %s\n", i,
2089 av_ts2timestr(st->duration, &st->time_base));
2090 }
2091 av_log(ic, AV_LOG_TRACE,
2092 "format: start_time: %s duration: %s (estimate from %s) bitrate=%"PRId64" kb/s\n",
2096 (int64_t)ic->bit_rate / 1000);
2097}
2098
2100{
2101 switch(avctx->codec_id) {
2102 case AV_CODEC_ID_MP1:
2103 case AV_CODEC_ID_MP2:
2104 case AV_CODEC_ID_MP3:
2105 case AV_CODEC_ID_CODEC2:
2106 return 1;
2107 }
2108
2109 return 0;
2110}
2111
2112static int has_codec_parameters(const AVStream *st, const char **errmsg_ptr)
2113{
2114 const FFStream *const sti = cffstream(st);
2115 const AVCodecContext *const avctx = sti->avctx;
2116
2117#define FAIL(errmsg) do { \
2118 if (errmsg_ptr) \
2119 *errmsg_ptr = errmsg; \
2120 return 0; \
2121 } while (0)
2122
2123 if ( avctx->codec_id == AV_CODEC_ID_NONE
2124 && avctx->codec_type != AVMEDIA_TYPE_DATA)
2125 FAIL("unknown codec");
2126 switch (avctx->codec_type) {
2127 case AVMEDIA_TYPE_AUDIO:
2128 if (!avctx->frame_size && determinable_frame_size(avctx))
2129 FAIL("unspecified frame size");
2130 if (sti->info->found_decoder >= 0 &&
2132 FAIL("unspecified sample format");
2133 if (!avctx->sample_rate)
2134 FAIL("unspecified sample rate");
2135 if (!avctx->ch_layout.nb_channels)
2136 FAIL("unspecified number of channels");
2137 if (sti->info->found_decoder >= 0 && !sti->nb_decoded_frames && avctx->codec_id == AV_CODEC_ID_DTS)
2138 FAIL("no decodable DTS frames");
2139 break;
2140 case AVMEDIA_TYPE_VIDEO:
2141 if (!avctx->width)
2142 FAIL("unspecified size");
2143 if (sti->info->found_decoder >= 0 && avctx->pix_fmt == AV_PIX_FMT_NONE)
2144 FAIL("unspecified pixel format");
2147 FAIL("no frame in rv30/40 and no sar");
2148 break;
2150 if (avctx->codec_id == AV_CODEC_ID_HDMV_PGS_SUBTITLE && !avctx->width)
2151 FAIL("unspecified size");
2152 break;
2153 case AVMEDIA_TYPE_DATA:
2154 if (avctx->codec_id == AV_CODEC_ID_NONE) return 1;
2155 }
2156
2157 return 1;
2158}
2159
2160/* returns 1 or 0 if or if not decoded data was returned, or a negative error */
2162 const AVPacket *pkt, AVDictionary **options)
2163{
2164 FFStream *const sti = ffstream(st);
2165 AVCodecContext *const avctx = sti->avctx;
2166 const AVCodec *codec;
2167 int got_picture = 1, ret = 0;
2169 AVSubtitle subtitle;
2170 int do_skip_frame = 0;
2171 enum AVDiscard skip_frame;
2172 int pkt_to_send = pkt->size > 0;
2173
2174 if (!frame)
2175 return AVERROR(ENOMEM);
2176
2177 if (!avcodec_is_open(avctx) &&
2178 sti->info->found_decoder <= 0 &&
2179 (st->codecpar->codec_id != -sti->info->found_decoder || !st->codecpar->codec_id)) {
2180 AVDictionary *thread_opt = NULL;
2181
2182 codec = find_probe_decoder(s, st, st->codecpar->codec_id);
2183
2184 if (!codec) {
2185 sti->info->found_decoder = -st->codecpar->codec_id;
2186 ret = -1;
2187 goto fail;
2188 }
2189
2190 /* Force thread count to 1 since the H.264 decoder will not extract
2191 * SPS and PPS to extradata during multi-threaded decoding. */
2192 av_dict_set(options ? options : &thread_opt, "threads", "1", 0);
2193 /* Force lowres to 0. The decoder might reduce the video size by the
2194 * lowres factor, and we don't want that propagated to the stream's
2195 * codecpar */
2196 av_dict_set(options ? options : &thread_opt, "lowres", "0", 0);
2197 if (s->codec_whitelist)
2198 av_dict_set(options ? options : &thread_opt, "codec_whitelist", s->codec_whitelist, 0);
2199 ret = avcodec_open2(avctx, codec, options ? options : &thread_opt);
2200 if (!options)
2201 av_dict_free(&thread_opt);
2202 if (ret < 0) {
2203 sti->info->found_decoder = -avctx->codec_id;
2204 goto fail;
2205 }
2206 sti->info->found_decoder = 1;
2207 } else if (!sti->info->found_decoder)
2208 sti->info->found_decoder = 1;
2209
2210 if (sti->info->found_decoder < 0) {
2211 ret = -1;
2212 goto fail;
2213 }
2214
2216 do_skip_frame = 1;
2217 skip_frame = avctx->skip_frame;
2218 avctx->skip_frame = AVDISCARD_ALL;
2219 }
2220
2221 while ((pkt_to_send || (!pkt->data && got_picture)) &&
2222 ret >= 0 &&
2224 (!sti->codec_info_nb_frames &&
2226 got_picture = 0;
2227 if (avctx->codec_type == AVMEDIA_TYPE_VIDEO ||
2228 avctx->codec_type == AVMEDIA_TYPE_AUDIO) {
2229 ret = avcodec_send_packet(avctx, pkt);
2230 if (ret < 0 && ret != AVERROR(EAGAIN) && ret != AVERROR_EOF)
2231 break;
2232 if (ret >= 0)
2233 pkt_to_send = 0;
2234 ret = avcodec_receive_frame(avctx, frame);
2235 if (ret >= 0)
2236 got_picture = 1;
2237 if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF)
2238 ret = 0;
2239 } else if (avctx->codec_type == AVMEDIA_TYPE_SUBTITLE) {
2240 ret = avcodec_decode_subtitle2(avctx, &subtitle,
2241 &got_picture, pkt);
2242 if (got_picture)
2243 avsubtitle_free(&subtitle);
2244 if (ret >= 0)
2245 pkt_to_send = 0;
2246 }
2247 if (ret >= 0) {
2248 if (got_picture)
2249 sti->nb_decoded_frames++;
2250 ret = got_picture;
2251 }
2252 }
2253
2254fail:
2255 if (do_skip_frame) {
2256 avctx->skip_frame = skip_frame;
2257 }
2258
2260 return ret;
2261}
2262
2263static int chapter_start_cmp(const void *p1, const void *p2)
2264{
2265 const AVChapter *const ch1 = *(AVChapter**)p1;
2266 const AVChapter *const ch2 = *(AVChapter**)p2;
2267 int delta = av_compare_ts(ch1->start, ch1->time_base, ch2->start, ch2->time_base);
2268 if (delta)
2269 return delta;
2270 return FFDIFFSIGN(ch1->id, ch2->id);
2271}
2272
2274{
2275 int64_t max_time = 0;
2276 AVChapter **timetable;
2277
2278 if (!s->nb_chapters)
2279 return 0;
2280
2281 if (s->duration > 0 && s->start_time < INT64_MAX - s->duration)
2282 max_time = s->duration +
2283 ((s->start_time == AV_NOPTS_VALUE) ? 0 : s->start_time);
2284
2285 timetable = av_memdup(s->chapters, s->nb_chapters * sizeof(*timetable));
2286 if (!timetable)
2287 return AVERROR(ENOMEM);
2288 qsort(timetable, s->nb_chapters, sizeof(*timetable), chapter_start_cmp);
2289
2290 for (unsigned i = 0; i < s->nb_chapters; i++)
2291 if (timetable[i]->end == AV_NOPTS_VALUE) {
2292 AVChapter *const ch = timetable[i];
2293 int64_t end = max_time ? av_rescale_q(max_time, AV_TIME_BASE_Q,
2294 ch->time_base)
2295 : INT64_MAX;
2296
2297 if (i + 1 < s->nb_chapters) {
2298 const AVChapter *const ch1 = timetable[i + 1];
2299 int64_t next_start = av_rescale_q(ch1->start, ch1->time_base,
2300 ch->time_base);
2301 if (next_start > ch->start && next_start < end)
2302 end = next_start;
2303 }
2304 ch->end = (end == INT64_MAX || end < ch->start) ? ch->start : end;
2305 }
2306 av_free(timetable);
2307 return 0;
2308}
2309
2310static int get_std_framerate(int i)
2311{
2312 if (i < 30*12)
2313 return (i + 1) * 1001;
2314 i -= 30*12;
2315
2316 if (i < 30)
2317 return (i + 31) * 1001 * 12;
2318 i -= 30;
2319
2320 if (i < 3)
2321 return ((const int[]) { 80, 120, 240})[i] * 1001 * 12;
2322
2323 i -= 3;
2324
2325 return ((const int[]) { 24, 30, 60, 12, 15, 48 })[i] * 1000 * 12;
2326}
2327
2328/* Is the time base unreliable?
2329 * This is a heuristic to balance between quick acceptance of the values in
2330 * the headers vs. some extra checks.
2331 * Old DivX and Xvid often have nonsense timebases like 1fps or 2fps.
2332 * MPEG-2 commonly misuses field repeat flags to store different framerates.
2333 * And there are "variable" fps files this needs to detect as well. */
2335{
2336 FFStream *const sti = ffstream(st);
2337 const AVCodecDescriptor *desc = sti->codec_desc;
2338 AVCodecContext *c = sti->avctx;
2339 AVRational mul = (AVRational){ desc && (desc->props & AV_CODEC_PROP_FIELDS) ? 2 : 1, 1 };
2340 AVRational time_base = c->framerate.num ? av_inv_q(av_mul_q(c->framerate, mul))
2341 /* NOHEADER check added to not break existing behavior */
2342 : (((ic->ctx_flags & AVFMTCTX_NOHEADER) ||
2344 : st->time_base);
2345
2346 if (time_base.den >= 101LL * time_base.num ||
2347 time_base.den < 5LL * time_base.num ||
2348 // c->codec_tag == AV_RL32("DIVX") ||
2349 // c->codec_tag == AV_RL32("XVID") ||
2350 c->codec_tag == AV_RL32("mp4v") ||
2351 c->codec_id == AV_CODEC_ID_MPEG2VIDEO ||
2352 c->codec_id == AV_CODEC_ID_GIF ||
2353 c->codec_id == AV_CODEC_ID_HEVC ||
2354 c->codec_id == AV_CODEC_ID_H264)
2355 return 1;
2356 return 0;
2357}
2358
2360{
2361 FFStream *const sti = ffstream(st);
2362 FFStreamInfo *info = sti->info;
2363 int64_t last = info->last_dts;
2364
2365 if ( ts != AV_NOPTS_VALUE && last != AV_NOPTS_VALUE && ts > last
2366 && ts - (uint64_t)last < INT64_MAX) {
2367 double dts = (is_relative(ts) ? ts - RELATIVE_TS_BASE : ts) * av_q2d(st->time_base);
2368 int64_t duration = ts - last;
2369
2370 if (!info->duration_error)
2371 info->duration_error = av_mallocz(sizeof(info->duration_error[0])*2);
2372 if (!info->duration_error)
2373 return AVERROR(ENOMEM);
2374
2375// if (st->codec->codec_type == AVMEDIA_TYPE_VIDEO)
2376// av_log(NULL, AV_LOG_ERROR, "%f\n", dts);
2377 for (int i = 0; i < MAX_STD_TIMEBASES; i++) {
2378 if (info->duration_error[0][1][i] < 1e10) {
2380 double sdts = dts*framerate/(1001*12);
2381 for (int j = 0; j < 2; j++) {
2382 int64_t ticks = llrint(sdts+j*0.5);
2383 double error = sdts - ticks + j*0.5;
2384 info->duration_error[j][0][i] += error;
2385 info->duration_error[j][1][i] += error*error;
2386 }
2387 }
2388 }
2389 if (info->rfps_duration_sum <= INT64_MAX - duration) {
2390 info->duration_count++;
2391 info->rfps_duration_sum += duration;
2392 }
2393
2394 if (info->duration_count % 10 == 0) {
2395 int n = info->duration_count;
2396 for (int i = 0; i < MAX_STD_TIMEBASES; i++) {
2397 if (info->duration_error[0][1][i] < 1e10) {
2398 double a0 = info->duration_error[0][0][i] / n;
2399 double error0 = info->duration_error[0][1][i] / n - a0*a0;
2400 double a1 = info->duration_error[1][0][i] / n;
2401 double error1 = info->duration_error[1][1][i] / n - a1*a1;
2402 if (error0 > 0.04 && error1 > 0.04) {
2403 info->duration_error[0][1][i] = 2e10;
2404 info->duration_error[1][1][i] = 2e10;
2405 }
2406 }
2407 }
2408 }
2409
2410 // ignore the first 4 values, they might have some random jitter
2411 if (info->duration_count > 3 && is_relative(ts) == is_relative(last))
2412 info->duration_gcd = av_gcd(info->duration_gcd, duration);
2413 }
2414 if (ts != AV_NOPTS_VALUE)
2415 info->last_dts = ts;
2416
2417 return 0;
2418}
2419
2421{
2422 for (unsigned i = 0; i < ic->nb_streams; i++) {
2423 AVStream *const st = ic->streams[i];
2424 FFStream *const sti = ffstream(st);
2425
2427 continue;
2428 // the check for tb_unreliable() is not completely correct, since this is not about handling
2429 // an unreliable/inexact time base, but a time base that is finer than necessary, as e.g.
2430 // ipmovie.c produces.
2431 if (tb_unreliable(ic, st) && sti->info->duration_count > 15 && sti->info->duration_gcd > FFMAX(1, st->time_base.den/(500LL*st->time_base.num)) && !st->r_frame_rate.num &&
2432 sti->info->duration_gcd < INT64_MAX / st->time_base.num)
2433 av_reduce(&st->r_frame_rate.num, &st->r_frame_rate.den, st->time_base.den, st->time_base.num * sti->info->duration_gcd, INT_MAX);
2434 if (sti->info->duration_count > 1 && !st->r_frame_rate.num
2435 && tb_unreliable(ic, st)) {
2436 int num = 0;
2437 double best_error = 0.01;
2438 AVRational ref_rate = st->r_frame_rate.num ? st->r_frame_rate : av_inv_q(st->time_base);
2439
2440 for (int j = 0; j < MAX_STD_TIMEBASES; j++) {
2441 if (sti->info->codec_info_duration &&
2442 sti->info->codec_info_duration*av_q2d(st->time_base) < (1001*11.5)/get_std_framerate(j))
2443 continue;
2444 if (!sti->info->codec_info_duration && get_std_framerate(j) < 1001*12)
2445 continue;
2446
2447 if (av_q2d(st->time_base) * sti->info->rfps_duration_sum / sti->info->duration_count < (1001*12.0 * 0.8)/get_std_framerate(j))
2448 continue;
2449
2450 for (int k = 0; k < 2; k++) {
2451 int n = sti->info->duration_count;
2452 double a = sti->info->duration_error[k][0][j] / n;
2453 double error = sti->info->duration_error[k][1][j]/n - a*a;
2454
2455 if (error < best_error && best_error> 0.000000001) {
2456 best_error= error;
2458 }
2459 if (error < 0.02)
2460 av_log(ic, AV_LOG_DEBUG, "rfps: %f %f\n", get_std_framerate(j) / 12.0/1001, error);
2461 }
2462 }
2463 // do not increase frame rate by more than 1 % in order to match a standard rate.
2464 if (num && (!ref_rate.num || (double)num/(12*1001) < 1.01 * av_q2d(ref_rate)))
2465 av_reduce(&st->r_frame_rate.num, &st->r_frame_rate.den, num, 12*1001, INT_MAX);
2466 }
2467 if ( !st->avg_frame_rate.num
2468 && st->r_frame_rate.num && sti->info->rfps_duration_sum
2469 && sti->info->codec_info_duration <= 0
2470 && sti->info->duration_count > 2
2471 && fabs(1.0 / (av_q2d(st->r_frame_rate) * av_q2d(st->time_base)) - sti->info->rfps_duration_sum / (double)sti->info->duration_count) <= 1.0
2472 ) {
2473 av_log(ic, AV_LOG_DEBUG, "Setting avg frame rate based on r frame rate\n");
2474 st->avg_frame_rate = st->r_frame_rate;
2475 }
2476
2479 sti->info->duration_count = 0;
2480 sti->info->rfps_duration_sum = 0;
2481 }
2482}
2483
2485{
2486 const AVBitStreamFilter *const f = av_bsf_get_by_name("extract_extradata");
2487 if (!f)
2488 return 0;
2489
2490 if (f->codec_ids) {
2491 const enum AVCodecID *ids;
2492 for (ids = f->codec_ids; *ids != AV_CODEC_ID_NONE; ids++)
2493 if (*ids == st->codecpar->codec_id)
2494 return 1;
2495 }
2496
2497 return 0;
2498}
2499
2501{
2502 FFStream *const sti = ffstream(st);
2503 const AVBitStreamFilter *f;
2504 int ret;
2505
2506 f = av_bsf_get_by_name("extract_extradata");
2507 if (!f)
2508 goto finish;
2509
2510 /* check that the codec id is supported */
2511 ret = extract_extradata_check(st);
2512 if (!ret)
2513 goto finish;
2514
2516 ret = av_bsf_alloc(f, &sti->extract_extradata.bsf);
2517 if (ret < 0)
2518 return ret;
2519
2521 st->codecpar);
2522 if (ret < 0)
2523 goto fail;
2524
2526
2527 ret = av_bsf_init(sti->extract_extradata.bsf);
2528 if (ret < 0)
2529 goto fail;
2530
2531finish:
2532 sti->extract_extradata.inited = 1;
2533
2534 return 0;
2535fail:
2537 return ret;
2538}
2539
2541{
2542 FFStream *const sti = ffstream(st);
2543 AVPacket *const pkt_ref = si->parse_pkt;
2544 int ret;
2545
2546 if (!sti->extract_extradata.inited) {
2547 ret = extract_extradata_init(st);
2548 if (ret < 0)
2549 return ret;
2550 }
2551
2553 return 0;
2554
2555 ret = av_packet_ref(pkt_ref, pkt);
2556 if (ret < 0)
2557 return ret;
2558
2559 ret = av_bsf_send_packet(sti->extract_extradata.bsf, pkt_ref);
2560 if (ret < 0) {
2561 av_packet_unref(pkt_ref);
2562 return ret;
2563 }
2564
2565 while (ret >= 0 && !sti->avctx->extradata) {
2566 ret = av_bsf_receive_packet(sti->extract_extradata.bsf, pkt_ref);
2567 if (ret < 0) {
2568 if (ret != AVERROR(EAGAIN) && ret != AVERROR_EOF)
2569 return ret;
2570 continue;
2571 }
2572
2573 for (int i = 0; i < pkt_ref->side_data_elems; i++) {
2574 AVPacketSideData *const side_data = &pkt_ref->side_data[i];
2575 if (side_data->type == AV_PKT_DATA_NEW_EXTRADATA) {
2576 sti->avctx->extradata = side_data->data;
2577 sti->avctx->extradata_size = side_data->size;
2578 side_data->data = NULL;
2579 side_data->size = 0;
2580 break;
2581 }
2582 }
2583 av_packet_unref(pkt_ref);
2584 }
2585
2586 return 0;
2587}
2588
2590 const AVCodecContext *avctx)
2591{
2592 AVCodecParameters *par_tmp;
2593 int ret;
2594
2595 par_tmp = avcodec_parameters_alloc();
2596 if (!par_tmp)
2597 return AVERROR(ENOMEM);
2598
2599 ret = avcodec_parameters_copy(par_tmp, par);
2600 if (ret < 0)
2601 goto fail;
2602
2603 ret = avcodec_parameters_from_context(par, avctx);
2604 if (ret < 0)
2605 goto fail;
2606
2607 /* Restore some values if they are signaled at the container level
2608 * given they may have been replaced by codec level values as read
2609 * internally by avformat_find_stream_info().
2610 */
2611 if (par_tmp->color_range != AVCOL_RANGE_UNSPECIFIED)
2612 par->color_range = par_tmp->color_range;
2613 if (par_tmp->color_primaries != AVCOL_PRI_UNSPECIFIED)
2614 par->color_primaries = par_tmp->color_primaries;
2615 if (par_tmp->color_trc != AVCOL_TRC_UNSPECIFIED)
2616 par->color_trc = par_tmp->color_trc;
2617 if (par_tmp->color_space != AVCOL_SPC_UNSPECIFIED)
2618 par->color_space = par_tmp->color_space;
2620 par->chroma_location = par_tmp->chroma_location;
2621
2622 /* A failed avcodec_open2() zeroes ch_layout through
2623 * ff_codec_close() -> av_opt_free(); do not copy that empty layout
2624 * over a container-signaled one. Other AVOption types used here are
2625 * integers and are not cleared. */
2626 if (par_tmp->ch_layout.nb_channels > 0 && !par->ch_layout.nb_channels) {
2627 ret = av_channel_layout_copy(&par->ch_layout, &par_tmp->ch_layout);
2628 if (ret < 0)
2629 goto fail;
2630 }
2631
2632 ret = 0;
2633fail:
2634 avcodec_parameters_free(&par_tmp);
2635
2636 return ret;
2637}
2638
2640{
2641 FFFormatContext *const si = ffformatcontext(ic);
2642 int count = 0, ret = 0, err;
2643 int64_t read_size;
2644 AVPacket *pkt1 = si->pkt;
2645 int64_t old_offset = avio_tell(ic->pb);
2646 // new streams might appear, no options for those
2647 int orig_nb_streams = ic->nb_streams;
2648 int flush_codecs;
2649 int64_t max_analyze_duration = ic->max_analyze_duration;
2650 int64_t max_stream_analyze_duration;
2651 int64_t max_subtitle_analyze_duration;
2652 int64_t probesize = ic->probesize;
2653 int eof_reached = 0;
2654
2655 flush_codecs = probesize > 0;
2656
2657 av_opt_set_int(ic, "skip_clear", 1, AV_OPT_SEARCH_CHILDREN);
2658
2659 max_stream_analyze_duration = max_analyze_duration;
2660 max_subtitle_analyze_duration = max_analyze_duration;
2661 if (!max_analyze_duration) {
2662 max_stream_analyze_duration =
2663 max_analyze_duration = 5*AV_TIME_BASE;
2664 max_subtitle_analyze_duration = 30*AV_TIME_BASE;
2665 if (!strcmp(ic->iformat->name, "flv"))
2666 max_stream_analyze_duration = 90*AV_TIME_BASE;
2667 if (!strcmp(ic->iformat->name, "mpeg") || !strcmp(ic->iformat->name, "mpegts"))
2668 max_stream_analyze_duration = 7*AV_TIME_BASE;
2669 }
2670
2671 if (ic->pb) {
2672 FFIOContext *const ctx = ffiocontext(ic->pb);
2673 av_log(ic, AV_LOG_DEBUG, "Before avformat_find_stream_info() pos: %"PRId64" bytes read:%"PRId64" seeks:%d nb_streams:%d\n",
2674 avio_tell(ic->pb), ctx->bytes_read, ctx->seek_count, ic->nb_streams);
2675 }
2676
2677 for (unsigned i = 0; i < ic->nb_streams; i++) {
2678 const AVCodec *codec;
2679 AVDictionary *thread_opt = NULL;
2680 AVStream *const st = ic->streams[i];
2681 FFStream *const sti = ffstream(st);
2682 AVCodecContext *const avctx = sti->avctx;
2683
2684 /* check if the caller has overridden the codec id */
2685 // only for the split stuff
2686 if (!sti->parser && !(ic->flags & AVFMT_FLAG_NOPARSE) && sti->request_probe <= 0) {
2688 if (sti->parser) {
2691 } else if (sti->need_parsing == AVSTREAM_PARSE_FULL_RAW) {
2693 }
2694 } else if (sti->need_parsing) {
2695 av_log(ic, AV_LOG_VERBOSE, "parser not found for codec "
2696 "%s, packets or times may be invalid.\n",
2698 }
2699 }
2700
2701 ret = avcodec_parameters_to_context(avctx, st->codecpar);
2702 if (ret < 0)
2703 goto find_stream_info_err;
2704 if (sti->request_probe <= 0)
2705 sti->avctx_inited = 1;
2706
2707 codec = find_probe_decoder(ic, st, st->codecpar->codec_id);
2708
2709 /* Force thread count to 1 since the H.264 decoder will not extract
2710 * SPS and PPS to extradata during multi-threaded decoding. */
2711 av_dict_set(options ? &options[i] : &thread_opt, "threads", "1", 0);
2712 /* Force lowres to 0. The decoder might reduce the video size by the
2713 * lowres factor, and we don't want that propagated to the stream's
2714 * codecpar */
2715 av_dict_set(options ? &options[i] : &thread_opt, "lowres", "0", 0);
2716
2717 if (ic->codec_whitelist)
2718 av_dict_set(options ? &options[i] : &thread_opt, "codec_whitelist", ic->codec_whitelist, 0);
2719
2720 // Try to just open decoders, in case this is enough to get parameters.
2721 // Also ensure that subtitle_header is properly set.
2722 if (!has_codec_parameters(st, NULL) && sti->request_probe <= 0 ||
2724 if (codec && !avctx->codec)
2725 if (avcodec_open2(avctx, codec, options ? &options[i] : &thread_opt) < 0)
2727 "Failed to open codec in %s\n", __func__);
2728 }
2729 if (!options)
2730 av_dict_free(&thread_opt);
2731 }
2732
2733 read_size = 0;
2734 for (;;) {
2735 const AVPacket *pkt;
2736 AVStream *st;
2737 FFStream *sti;
2738 AVCodecContext *avctx;
2739 int analyzed_all_streams;
2740 unsigned i;
2742 ret = AVERROR_EXIT;
2743 av_log(ic, AV_LOG_DEBUG, "interrupted\n");
2744 break;
2745 }
2746
2747 /* read_frame_internal() in a previous iteration of this loop may
2748 * have made changes to streams without returning a packet for them.
2749 * Handle that here. */
2750 ret = update_stream_avctx(ic);
2751 if (ret < 0)
2752 goto unref_then_goto_end;
2753
2754 /* check if one codec still needs to be handled */
2755 for (i = 0; i < ic->nb_streams; i++) {
2756 AVStream *const st = ic->streams[i];
2757 FFStream *const sti = ffstream(st);
2758 int fps_analyze_framecount = 20;
2759 int count;
2760
2761 if (!has_codec_parameters(st, NULL))
2762 break;
2763 /* If the timebase is coarse (like the usual millisecond precision
2764 * of mkv), we need to analyze more frames to reliably arrive at
2765 * the correct fps. */
2766 if (av_q2d(st->time_base) > 0.0005)
2767 fps_analyze_framecount *= 2;
2768 if (!tb_unreliable(ic, st))
2769 fps_analyze_framecount = 0;
2770 if (ic->fps_probe_size >= 0)
2771 fps_analyze_framecount = ic->fps_probe_size;
2773 fps_analyze_framecount = 0;
2774 /* variable fps and no guess at the real fps */
2775 count = (ic->iformat->flags & AVFMT_NOTIMESTAMPS) ?
2777 sti->info->duration_count;
2778 if (!(st->r_frame_rate.num && st->avg_frame_rate.num) &&
2780 if (count < fps_analyze_framecount)
2781 break;
2782 }
2783 // Look at the first 3 frames if there is evidence of frame delay
2784 // but the decoder delay is not set.
2785 if (sti->info->frame_delay_evidence && count < 2 && sti->avctx->has_b_frames == 0)
2786 break;
2787 if (!sti->avctx->extradata &&
2790 break;
2791 if (sti->first_dts == AV_NOPTS_VALUE &&
2796 break;
2797 }
2798 analyzed_all_streams = 0;
2799 if (i == ic->nb_streams && !si->missing_streams) {
2800 analyzed_all_streams = 1;
2801 /* NOTE: If the format has no header, then we need to read some
2802 * packets to get most of the streams, so we cannot stop here. */
2803 if (!(ic->ctx_flags & AVFMTCTX_NOHEADER)) {
2804 /* If we found the info for all the codecs, we can stop. */
2805 ret = count;
2806 av_log(ic, AV_LOG_DEBUG, "All info found\n");
2807 flush_codecs = 0;
2808 break;
2809 }
2810 }
2811 /* We did not get all the codec info, but we read too much data. */
2812 if (read_size >= probesize) {
2813 ret = count;
2814 av_log(ic, AV_LOG_DEBUG,
2815 "Probe buffer size limit of %"PRId64" bytes reached\n", probesize);
2816 for (unsigned i = 0; i < ic->nb_streams; i++) {
2817 AVStream *const st = ic->streams[i];
2818 FFStream *const sti = ffstream(st);
2819 if (!st->r_frame_rate.num &&
2820 sti->info->duration_count <= 1 &&
2822 strcmp(ic->iformat->name, "image2"))
2824 "Stream #%d: not enough frames to estimate rate; "
2825 "consider increasing probesize\n", i);
2826 }
2827 break;
2828 }
2829
2830 /* NOTE: A new stream can be added there if no header in file
2831 * (AVFMTCTX_NOHEADER). */
2832 ret = read_frame_internal(ic, pkt1);
2833 if (ret == AVERROR(EAGAIN))
2834 continue;
2835
2836 if (ret < 0) {
2837 /* EOF or error*/
2838 eof_reached = 1;
2839 break;
2840 }
2841
2842 if (!(ic->flags & AVFMT_FLAG_NOBUFFER)) {
2844 pkt1, NULL, 0);
2845 if (ret < 0)
2846 goto unref_then_goto_end;
2847
2848 pkt = &si->packet_buffer.tail->pkt;
2849 } else {
2850 pkt = pkt1;
2851 }
2852
2853 st = ic->streams[pkt->stream_index];
2854 sti = ffstream(st);
2856 read_size += pkt->size;
2857
2858 avctx = sti->avctx;
2859 if (!sti->avctx_inited) {
2860 ret = avcodec_parameters_to_context(avctx, st->codecpar);
2861 if (ret < 0)
2862 goto unref_then_goto_end;
2863 sti->avctx_inited = 1;
2864 }
2865
2866 if (pkt->dts != AV_NOPTS_VALUE && sti->codec_info_nb_frames > 1) {
2867 /* check for non-increasing dts */
2868 if (sti->info->fps_last_dts != AV_NOPTS_VALUE &&
2869 sti->info->fps_last_dts >= pkt->dts) {
2870 av_log(ic, AV_LOG_DEBUG,
2871 "Non-increasing DTS in stream %d: packet %d with DTS "
2872 "%"PRId64", packet %d with DTS %"PRId64"\n",
2873 st->index, sti->info->fps_last_dts_idx,
2875 pkt->dts);
2876 sti->info->fps_first_dts =
2878 }
2879 /* Check for a discontinuity in dts. If the difference in dts
2880 * is more than 1000 times the average packet duration in the
2881 * sequence, we treat it as a discontinuity. */
2882 if (sti->info->fps_last_dts != AV_NOPTS_VALUE &&
2884 (pkt->dts - (uint64_t)sti->info->fps_last_dts) / 1000 >
2885 (sti->info->fps_last_dts - (uint64_t)sti->info->fps_first_dts) /
2886 (sti->info->fps_last_dts_idx - sti->info->fps_first_dts_idx)) {
2888 "DTS discontinuity in stream %d: packet %d with DTS "
2889 "%"PRId64", packet %d with DTS %"PRId64"\n",
2890 st->index, sti->info->fps_last_dts_idx,
2892 pkt->dts);
2893 sti->info->fps_first_dts =
2895 }
2896
2897 /* update stored dts values */
2898 if (sti->info->fps_first_dts == AV_NOPTS_VALUE) {
2899 sti->info->fps_first_dts = pkt->dts;
2901 }
2902 sti->info->fps_last_dts = pkt->dts;
2904 }
2905 if (sti->codec_info_nb_frames > 1) {
2906 int64_t t = 0;
2907 int64_t limit;
2908
2909 if (st->time_base.den > 0)
2911 if (st->avg_frame_rate.num > 0)
2913
2914 if ( t == 0
2915 && sti->codec_info_nb_frames > 30
2917 && sti->info->fps_last_dts != AV_NOPTS_VALUE) {
2919 t = FFMAX(t, av_rescale_q(dur, st->time_base, AV_TIME_BASE_Q));
2920 }
2921
2922 if (analyzed_all_streams) limit = max_analyze_duration;
2923 else if (avctx->codec_type == AVMEDIA_TYPE_SUBTITLE) limit = max_subtitle_analyze_duration;
2924 else limit = max_stream_analyze_duration;
2925
2926 if (t >= limit) {
2927 av_log(ic, AV_LOG_VERBOSE, "max_analyze_duration %"PRId64" reached at %"PRId64" microseconds st:%d\n",
2928 limit,
2929 t, pkt->stream_index);
2930 if (ic->flags & AVFMT_FLAG_NOBUFFER)
2931 av_packet_unref(pkt1);
2932 break;
2933 }
2934 if (pkt->duration > 0 && pkt->duration < INT64_MAX - sti->info->codec_info_duration) {
2935 const int fields = sti->codec_desc && (sti->codec_desc->props & AV_CODEC_PROP_FIELDS);
2936 if (avctx->codec_type == AVMEDIA_TYPE_SUBTITLE && pkt->pts != AV_NOPTS_VALUE && st->start_time != AV_NOPTS_VALUE && pkt->pts >= st->start_time
2937 && (uint64_t)pkt->pts - st->start_time < INT64_MAX
2938 ) {
2939 sti->info->codec_info_duration = FFMIN(pkt->pts - st->start_time, sti->info->codec_info_duration + pkt->duration);
2940 } else
2941 sti->info->codec_info_duration += pkt->duration;
2942 sti->info->codec_info_duration_fields += sti->parser && sti->need_parsing && fields
2943 ? sti->parser->repeat_pict + 1 : 2;
2944 }
2945 }
2947#if FF_API_R_FRAME_RATE
2948 ff_rfps_add_frame(ic, st, pkt->dts);
2949#endif
2950 if (pkt->dts != pkt->pts && pkt->dts != AV_NOPTS_VALUE && pkt->pts != AV_NOPTS_VALUE)
2951 sti->info->frame_delay_evidence = 1;
2952 }
2953 if (!sti->avctx->extradata) {
2954 ret = extract_extradata(si, st, pkt);
2955 if (ret < 0)
2956 goto unref_then_goto_end;
2957 }
2958
2959 /* If still no information, we try to open the codec and to
2960 * decompress the frame. We try to avoid that in most cases as
2961 * it takes longer and uses more memory. For MPEG-4, we need to
2962 * decompress for QuickTime.
2963 *
2964 * If AV_CODEC_CAP_CHANNEL_CONF is set this will force decoding of at
2965 * least one frame of codec data, this makes sure the codec initializes
2966 * the channel configuration and does not only trust the values from
2967 * the container. */
2968 try_decode_frame(ic, st, pkt,
2969 (options && i < orig_nb_streams) ? &options[i] : NULL);
2970
2971 if (ic->flags & AVFMT_FLAG_NOBUFFER)
2972 av_packet_unref(pkt1);
2973
2974 sti->codec_info_nb_frames++;
2975 count++;
2976 }
2977
2978 if (eof_reached) {
2979 for (unsigned stream_index = 0; stream_index < ic->nb_streams; stream_index++) {
2980 AVStream *const st = ic->streams[stream_index];
2981 AVCodecContext *const avctx = ffstream(st)->avctx;
2982 if (!has_codec_parameters(st, NULL)) {
2983 const AVCodec *codec = find_probe_decoder(ic, st, st->codecpar->codec_id);
2984 if (codec && !avctx->codec) {
2986 if (ic->codec_whitelist)
2987 av_dict_set(&opts, "codec_whitelist", ic->codec_whitelist, 0);
2988 if (avcodec_open2(avctx, codec, (options && stream_index < orig_nb_streams) ? &options[stream_index] : &opts) < 0)
2990 "Failed to open codec in %s\n", __func__);
2992 }
2993 }
2994
2995 // EOF already reached while reading the stream above.
2996 // So continue with reoordering DTS with whatever delay we have.
2998 update_dts_from_pts(ic, stream_index, si->packet_buffer.head);
2999 }
3000 }
3001 }
3002
3003 if (flush_codecs) {
3004 AVPacket *empty_pkt = si->pkt;
3005 int err = 0;
3006 av_packet_unref(empty_pkt);
3007
3008 for (unsigned i = 0; i < ic->nb_streams; i++) {
3009 AVStream *const st = ic->streams[i];
3010 FFStream *const sti = ffstream(st);
3011
3012 /* flush the decoders */
3013 if (sti->info->found_decoder == 1) {
3014 err = try_decode_frame(ic, st, empty_pkt,
3015 (options && i < orig_nb_streams)
3016 ? &options[i] : NULL);
3017
3018 if (err < 0) {
3019 av_log(ic, AV_LOG_INFO,
3020 "decoding for stream %d failed\n", st->index);
3021 }
3022 }
3023 }
3024 }
3025
3027
3028 for (unsigned i = 0; i < ic->nb_streams; i++) {
3029 AVStream *const st = ic->streams[i];
3030 FFStream *const sti = ffstream(st);
3031 AVCodecContext *const avctx = sti->avctx;
3032
3033 if (avctx->codec_type == AVMEDIA_TYPE_VIDEO) {
3034 if (avctx->codec_id == AV_CODEC_ID_RAWVIDEO && !avctx->codec_tag && !avctx->bits_per_coded_sample) {
3035 uint32_t tag= avcodec_pix_fmt_to_codec_tag(avctx->pix_fmt);
3037 avctx->codec_tag= tag;
3038 }
3039
3040 /* estimate average framerate if not set by demuxer */
3041 if (sti->info->codec_info_duration_fields &&
3042 !st->avg_frame_rate.num &&
3043 sti->info->codec_info_duration) {
3044 int best_fps = 0;
3045 double best_error = 0.01;
3046 AVRational codec_frame_rate = avctx->framerate;
3047
3048 if (sti->info->codec_info_duration >= INT64_MAX / st->time_base.num / 2||
3049 sti->info->codec_info_duration_fields >= INT64_MAX / st->time_base.den ||
3050 sti->info->codec_info_duration < 0)
3051 continue;
3054 sti->info->codec_info_duration * 2 * (int64_t) st->time_base.num, 60000);
3055
3056 /* Round guessed framerate to a "standard" framerate if it's
3057 * within 1% of the original estimate. */
3058 for (int j = 0; j < MAX_STD_TIMEBASES; j++) {
3059 AVRational std_fps = { get_std_framerate(j), 12 * 1001 };
3060 double error = fabs(av_q2d(st->avg_frame_rate) /
3061 av_q2d(std_fps) - 1);
3062
3063 if (error < best_error) {
3064 best_error = error;
3065 best_fps = std_fps.num;
3066 }
3067
3069 codec_frame_rate.num > 0 && codec_frame_rate.den > 0) {
3070 error = fabs(av_q2d(codec_frame_rate) /
3071 av_q2d(std_fps) - 1);
3072 if (error < best_error) {
3073 best_error = error;
3074 best_fps = std_fps.num;
3075 }
3076 }
3077 }
3078 if (best_fps)
3080 best_fps, 12 * 1001, INT_MAX);
3081 }
3082 if (!st->r_frame_rate.num) {
3083 const AVCodecDescriptor *desc = sti->codec_desc;
3084 AVRational mul = (AVRational){ desc && (desc->props & AV_CODEC_PROP_FIELDS) ? 2 : 1, 1 };
3085 AVRational fr = av_mul_q(avctx->framerate, mul);
3086
3087 if (fr.num && fr.den && av_cmp_q(st->time_base, av_inv_q(fr)) <= 0) {
3088 st->r_frame_rate = fr;
3089 } else {
3090 st->r_frame_rate.num = st->time_base.den;
3091 st->r_frame_rate.den = st->time_base.num;
3092 }
3093 }
3094 st->codecpar->framerate = avctx->framerate;
3096 AVRational hw_ratio = { avctx->height, avctx->width };
3098 hw_ratio);
3099 }
3100 } else if (avctx->codec_type == AVMEDIA_TYPE_AUDIO) {
3101 if (!avctx->bits_per_coded_sample)
3102 avctx->bits_per_coded_sample =
3104 // set stream disposition based on audio service type
3105 switch (avctx->audio_service_type) {
3108 break;
3111 break;
3114 break;
3117 break;
3120 break;
3121 }
3122 }
3123 }
3124
3125 if (probesize)
3126 estimate_timings(ic, old_offset);
3127
3128 av_opt_set_int(ic, "skip_clear", 0, AV_OPT_SEARCH_CHILDREN);
3129
3130 if (ret >= 0 && ic->nb_streams)
3131 /* We could not have all the codec parameters before EOF. */
3132 ret = -1;
3133 for (unsigned i = 0; i < ic->nb_streams; i++) {
3134 AVStream *const st = ic->streams[i];
3135 FFStream *const sti = ffstream(st);
3136 const char *errmsg;
3137
3138 /* if no packet was ever seen, update context now for has_codec_parameters */
3139 if (!sti->avctx_inited) {
3142 st->codecpar->format = sti->avctx->sample_fmt;
3144 if (ret < 0)
3145 goto find_stream_info_err;
3146 }
3147 if (!has_codec_parameters(st, &errmsg)) {
3148 char buf[256];
3149 avcodec_string(buf, sizeof(buf), sti->avctx, 0);
3151 "Could not find codec parameters for stream %d (%s): %s\n"
3152 "Consider increasing the value for the 'analyzeduration' (%"PRId64") and 'probesize' (%"PRId64") options\n",
3153 i, buf, errmsg, ic->max_analyze_duration, ic->probesize);
3154 } else {
3155 ret = 0;
3156 }
3157 }
3158
3159 err = compute_chapters_end(ic);
3160 if (err < 0) {
3161 ret = err;
3162 goto find_stream_info_err;
3163 }
3164
3165 /* update the stream parameters from the internal codec contexts */
3166 for (unsigned i = 0; i < ic->nb_streams; i++) {
3167 AVStream *const st = ic->streams[i];
3168 FFStream *const sti = ffstream(st);
3169
3170 if (sti->avctx_inited) {
3171 ret = parameters_from_context(ic, st->codecpar, sti->avctx);
3172 if (ret < 0)
3173 goto find_stream_info_err;
3174
3175 if (sti->avctx->rc_buffer_size > 0 || sti->avctx->rc_max_rate > 0 ||
3176 sti->avctx->rc_min_rate) {
3177 size_t cpb_size;
3178 AVCPBProperties *props = av_cpb_properties_alloc(&cpb_size);
3179 if (props) {
3180 if (sti->avctx->rc_buffer_size > 0)
3181 props->buffer_size = sti->avctx->rc_buffer_size;
3182 if (sti->avctx->rc_min_rate > 0)
3183 props->min_bitrate = sti->avctx->rc_min_rate;
3184 if (sti->avctx->rc_max_rate > 0)
3185 props->max_bitrate = sti->avctx->rc_max_rate;
3189 (uint8_t *)props, cpb_size, 0))
3190 av_free(props);
3191 }
3192 }
3193 }
3194
3195 sti->avctx_inited = 0;
3196 }
3197
3198 /* update the stream group parameters from the stream contexts if needed */
3199 for (unsigned i = 0; i < ic->nb_stream_groups; i++) {
3200 AVStreamGroup *const stg = ic->stream_groups[i];
3202 const AVStream *st;
3203
3205 continue;
3206
3207 /* For LCEVC in mpegts, the parser is needed to get the enhancement layer
3208 * dimensions */
3209 lcevc = stg->params.layered_video;
3210 if (lcevc->width && lcevc->height)
3211 continue;
3213 st = stg->entries[lcevc->el_index]->stream;
3214 lcevc->width = st->codecpar->width;
3215 lcevc->height = st->codecpar->height;
3216 }
3217
3218find_stream_info_err:
3219 for (unsigned i = 0; i < ic->nb_streams; i++) {
3220 AVStream *const st = ic->streams[i];
3221 FFStream *const sti = ffstream(st);
3222 int err;
3223
3224 if (sti->info) {
3226 av_freep(&sti->info);
3227 }
3228
3229 if (avcodec_is_open(sti->avctx)) {
3230 err = codec_close(sti);
3231 if (err < 0 && ret >= 0)
3232 ret = err;
3233 }
3234
3236 }
3237 if (ic->pb) {
3238 FFIOContext *const ctx = ffiocontext(ic->pb);
3239 av_log(ic, AV_LOG_DEBUG, "After avformat_find_stream_info() pos: %"PRId64" bytes read:%"PRId64" seeks:%d frames:%d\n",
3240 avio_tell(ic->pb), ctx->bytes_read, ctx->seek_count, count);
3241 }
3242 return ret;
3243
3244unref_then_goto_end:
3245 av_packet_unref(pkt1);
3246 goto find_stream_info_err;
3247}
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
Definition dsp.h:97
static AVFormatContext * ctx
static void finish(void)
static AVDictionary * opts
static av_cold void close(AVCodecParserContext *s)
Definition apv_parser.c:197
simple assert() macros that are a bit more flexible than ISO C assert().
#define av_assert2(cond)
assert() equivalent, that does lie in speed critical code.
Definition avassert.h:68
#define av_assert1(cond)
assert() equivalent, that does not lie in speed critical code.
Definition avassert.h:58
#define av_assert0(cond)
assert() equivalent, that is always enabled.
Definition avassert.h:42
Libavcodec external API header.
#define PARSER_FLAG_USE_CODEC_TS
Definition avcodec.h:2671
#define PARSER_FLAG_ONCE
Definition avcodec.h:2668
#define PARSER_FLAG_COMPLETE_FRAMES
Definition avcodec.h:2667
void ff_flush_packet_queue(AVFormatContext *s)
Definition avformat.c:153
int ff_format_io_close(AVFormatContext *s, AVIOContext **pb)
Definition avformat.c:983
int ff_is_intra_only(enum AVCodecID id)
Definition avformat.c:934
const AVCodec * ff_find_decoder(AVFormatContext *s, const AVStream *st, enum AVCodecID codec_id)
Definition avformat.c:883
Main libavformat public API header.
#define AVFMT_EVENT_FLAG_METADATA_UPDATED
Definition avformat.h:1795
#define AV_PTS_WRAP_SUB_OFFSET
subtract the format specific offset on wrap detection
Definition avformat.h:759
@ AV_STREAM_GROUP_ENTRY_STREAM
Definition avformat.h:1172
#define AVPROBE_SCORE_STREAM_RETRY
Definition avformat.h:481
#define AV_PTS_WRAP_IGNORE
Options for behavior on timestamp wrap detection.
Definition avformat.h:757
#define AVINDEX_KEYFRAME
Definition avformat.h:630
#define AVPROBE_PADDING_SIZE
extra allocated bytes at the end of the probe buffer
Definition avformat.h:487
#define AV_DISPOSITION_HEARING_IMPAIRED
The stream is intended for hearing impaired audiences.
Definition avformat.h:678
#define AV_DISPOSITION_COMMENT
The stream is a commentary track.
Definition avformat.h:659
@ AV_STREAM_GROUP_PARAMS_TILE_GRID
Definition avformat.h:1161
@ AV_STREAM_GROUP_PARAMS_LCEVC
Definition avformat.h:1162
#define AVFMTCTX_NOHEADER
signal that no header is present (streams are added dynamically)
Definition avformat.h:1351
#define AVFMT_FLAG_IGNDTS
Ignore DTS on frames that contain both DTS & PTS.
Definition avformat.h:1556
#define AV_FDEBUG_TS
Definition avformat.h:1692
#define AV_DISPOSITION_KARAOKE
The stream contains karaoke audio.
Definition avformat.h:667
#define AVFMT_FLAG_GENPTS
Generate missing pts even if it requires parsing future frames.
Definition avformat.h:1553
#define AVFMT_NOFILE
Demuxer will use avio_open, no opened file should be provided by the caller.
Definition avformat.h:490
AVDurationEstimationMethod
The duration of a video can be estimated through various ways, and this enum can be used to know how ...
Definition avformat.h:1380
@ AVFMT_DURATION_FROM_BITRATE
Duration estimated from bitrate (less accurate)
Definition avformat.h:1383
@ AVFMT_DURATION_FROM_PTS
Duration accurately estimated from PTSes.
Definition avformat.h:1381
@ AVFMT_DURATION_FROM_STREAM
Duration estimated from a stream with a known duration.
Definition avformat.h:1382
#define AVSTREAM_EVENT_FLAG_NEW_PACKETS
Definition avformat.h:892
#define AVFMT_FLAG_DISCARD_CORRUPT
Discard frames marked corrupted.
Definition avformat.h:1561
#define AV_DISPOSITION_CLEAN_EFFECTS
The audio stream contains music and sound effects without voice.
Definition avformat.h:686
#define AV_DISPOSITION_VISUAL_IMPAIRED
The stream is intended for visually impaired audiences.
Definition avformat.h:682
#define AV_DISPOSITION_ATTACHED_PIC
The stream is stored in the file as an attached picture/"cover art" (e.g.
Definition avformat.h:694
#define AVFMT_FLAG_CUSTOM_IO
The caller has supplied a custom AVIOContext, don't avio_close() it.
Definition avformat.h:1560
#define AVFMT_FLAG_NOFILLIN
Do not infer any values from other values, just return what is stored in the container.
Definition avformat.h:1557
#define AVFMT_GENERIC_INDEX
Use generic index building code.
Definition avformat.h:501
#define AV_PTS_WRAP_ADD_OFFSET
add the format specific offset on wrap detection
Definition avformat.h:758
#define AVPROBE_SCORE_RETRY
Definition avformat.h:480
#define AVFMT_NOTIMESTAMPS
Format does not need / have any timestamps.
Definition avformat.h:500
#define AVFMT_FLAG_NOBUFFER
Do not buffer frames when possible.
Definition avformat.h:1559
#define AVFMT_NEEDNUMBER
Needs 'd' in filename.
Definition avformat.h:491
#define AVFMT_FLAG_NOPARSE
Do not use AVParsers, you also must set AVFMT_FLAG_NOFILLIN as the filling code works on frames and n...
Definition avformat.h:1558
@ AVSTREAM_PARSE_TIMESTAMPS
full parsing and interpolation of timestamps for frames not starting on a packet boundary
Definition avformat.h:615
@ AVSTREAM_PARSE_FULL_ONCE
full parsing and repack of the first frame only, only implemented for H.264 currently
Definition avformat.h:616
@ AVSTREAM_PARSE_FULL_RAW
full parsing and repack with timestamp and position generation by parser for raw this assumes that ea...
Definition avformat.h:617
@ AVSTREAM_PARSE_HEADERS
Only parse headers, do not repack.
Definition avformat.h:614
@ AVSTREAM_PARSE_NONE
Definition avformat.h:612
#define RELATIVE_TS_BASE
static av_always_inline FormatContextInternal * ff_fc_internal(AVFormatContext *s)
static av_always_inline int is_relative(int64_t ts)
int ff_check_interrupt(AVIOInterruptCB *cb)
Check if the user has requested to interrupt a blocking function associated with cb.
Definition avio.c:929
int64_t avio_seek(AVIOContext *s, int64_t offset, int whence)
fseek() equivalent for AVIOContext.
Definition aviobuf.c:236
#define AVIO_SEEKABLE_NORMAL
Seeking works like for a local file.
Definition avio.h:41
#define AVIO_FLAG_READ
read-only
Definition avio.h:617
int64_t avio_size(AVIOContext *s)
Get the filesize.
Definition aviobuf.c:326
static av_always_inline int64_t avio_tell(AVIOContext *s)
ftell() equivalent for AVIOContext.
Definition avio.h:494
int64_t avio_skip(AVIOContext *s, int64_t offset)
Skip given number of bytes forward.
Definition aviobuf.c:321
static av_always_inline FFIOContext * ffiocontext(AVIOContext *ctx)
static int FUNC metadata(CodedBitstreamContext *ctx, RWContext *rw, APVRawMetadata *current)
#define i(width, name, range_min, range_max)
Definition cbs_h264.c:63
#define f(width, name)
Definition cbs_vp8.c:236
#define s(width, name)
Definition cbs_vp9.c:198
int avcodec_parameters_from_context(AVCodecParameters *par, const AVCodecContext *codec)
Definition codec_par.c:138
AVCodecParameters * avcodec_parameters_alloc(void)
Definition codec_par.c:57
int avcodec_parameters_copy(AVCodecParameters *dst, const AVCodecParameters *src)
Definition codec_par.c:107
void avcodec_parameters_free(AVCodecParameters **ppar)
Definition codec_par.c:67
int avcodec_parameters_to_context(AVCodecContext *codec, const AVCodecParameters *par)
Definition codec_par.c:206
#define av_sat_sub64
Definition common.h:142
#define av_sat_add64
Definition common.h:139
#define FFABS(a)
Absolute value, Note, INT_MIN / INT64_MIN result in undefined behavior as they are not representable ...
Definition common.h:74
#define NULL
Definition coverity.c:32
long long int64_t
Definition coverity.c:34
static __device__ float fabs(float a)
AVCPBProperties * av_cpb_properties_alloc(size_t *size)
Allocate a CPB properties structure and initialize its fields to default values.
Definition utils.c:982
@ AV_AUDIO_SERVICE_TYPE_EFFECTS
Definition defs.h:251
@ AV_AUDIO_SERVICE_TYPE_KARAOKE
Definition defs.h:258
@ AV_AUDIO_SERVICE_TYPE_HEARING_IMPAIRED
Definition defs.h:253
@ AV_AUDIO_SERVICE_TYPE_COMMENTARY
Definition defs.h:255
@ AV_AUDIO_SERVICE_TYPE_VISUALLY_IMPAIRED
Definition defs.h:252
int ff_buffer_packet(AVFormatContext *s, AVPacket *pkt)
Definition demux.c:645
static int determinable_frame_size(const AVCodecContext *avctx)
Definition demux.c:2099
static void update_initial_timestamps(AVFormatContext *s, int stream_index, int64_t dts, int64_t pts, AVPacket *pkt)
Definition demux.c:892
static int update_wrap_reference(AVFormatContext *s, AVStream *st, int stream_index, AVPacket *pkt)
Definition demux.c:500
static int has_decode_delay_been_guessed(AVStream *st)
Definition demux.c:782
static void fill_all_stream_timings(AVFormatContext *ic)
Definition demux.c:1822
static int init_input(AVFormatContext *s, const char *filename, AVDictionary **options)
Definition demux.c:158
static int has_codec_parameters(const AVStream *st, const char **errmsg_ptr)
Definition demux.c:2112
static void force_codec_ids(AVFormatContext *s, AVStream *st)
Definition demux.c:425
#define DURATION_DEFAULT_MAX_READ_SIZE
Definition demux.c:1892
static int64_t select_from_pts_buffer(AVStream *st, int64_t *pts_buffer, int64_t dts)
Definition demux.c:814
static int try_decode_frame(AVFormatContext *s, AVStream *st, const AVPacket *pkt, AVDictionary **options)
Definition demux.c:2161
static void compute_pkt_fields(AVFormatContext *s, AVStream *st, AVCodecParserContext *pc, AVPacket *pkt, int64_t next_dts, int64_t next_pts)
Definition demux.c:1006
#define ABSDIFF(a, b)
#define FAIL(errmsg)
static const char * duration_estimate_name(enum AVDurationEstimationMethod method)
Definition demux.c:2045
static void update_initial_durations(AVFormatContext *s, AVStream *st, int stream_index, int64_t duration)
Definition demux.c:946
void ff_rfps_calculate(AVFormatContext *ic)
Definition demux.c:2420
static int probe_codec(AVFormatContext *s, AVStream *st, const AVPacket *pkt)
Definition demux.c:447
static void update_dts_from_pts(AVFormatContext *s, int stream_index, PacketListEntry *pkt_buffer)
Updates the dts of packets of a stream in pkt_buffer, by re-ordering the pts of the packets in a wind...
Definition demux.c:867
static int compute_chapters_end(AVFormatContext *s)
Definition demux.c:2273
static void estimate_timings(AVFormatContext *ic, int64_t old_offset)
Definition demux.c:2050
#define DURATION_DEFAULT_MAX_RETRY
Definition demux.c:1893
int ff_rfps_add_frame(AVFormatContext *ic, AVStream *st, int64_t ts)
add frame for rfps calculation.
Definition demux.c:2359
static int set_codec_from_probe_data(AVFormatContext *s, AVStream *st, AVProbeData *pd)
Definition demux.c:103
static const char *const duration_name[]
Definition demux.c:2039
static int64_t ts_to_samples(AVStream *st, int64_t ts)
Definition demux.c:1357
static int chapter_start_cmp(const void *p1, const void *p2)
Definition demux.c:2263
static void estimate_timings_from_bit_rate(AVFormatContext *ic)
Definition demux.c:1839
static void estimate_timings_from_pts(AVFormatContext *ic, int64_t old_offset)
Definition demux.c:1897
static int64_t wrap_timestamp(const AVStream *st, int64_t timestamp)
Definition demux.c:53
static int extract_extradata_init(AVStream *st)
Definition demux.c:2500
static void update_timestamps(AVFormatContext *s, AVStream *st, AVPacket *pkt)
Definition demux.c:568
static void compute_frame_duration(AVFormatContext *s, int *pnum, int *pden, AVStream *st, AVCodecParserContext *pc, AVPacket *pkt)
Return the frame duration in seconds.
Definition demux.c:719
static int parameters_from_context(AVFormatContext *ic, AVCodecParameters *par, const AVCodecContext *avctx)
Definition demux.c:2589
static int handle_new_packet(AVFormatContext *s, AVPacket *pkt, int allow_passthrough)
Handle a new packet and either return it directly if possible and allow_passthrough is true or queue ...
Definition demux.c:600
static int get_std_framerate(int i)
Definition demux.c:2310
static int has_duration(AVFormatContext *ic)
Return TRUE if the stream has accurate duration in any stream.
Definition demux.c:1711
static int update_stream_avctx(AVFormatContext *s)
Definition demux.c:191
static int tb_unreliable(AVFormatContext *ic, AVStream *st)
Definition demux.c:2334
int64_t ff_wrap_timestamp(const AVStream *st, int64_t timestamp)
Wrap a given time stamp, if there is an indication for an overflow.
Definition demux.c:68
#define DURATION_MAX_RETRY
Definition demux.c:1894
static PacketListEntry * get_next_pkt(AVFormatContext *s, AVStream *st, PacketListEntry *pktl)
Definition demux.c:802
static void update_stream_timings(AVFormatContext *ic)
Estimate the stream timings from the one of each components.
Definition demux.c:1728
static int parse_packet(AVFormatContext *s, AVPacket *pkt, int stream_index, int flush)
Parse a packet, add all split parts to parse_queue.
Definition demux.c:1201
static int extract_extradata_check(AVStream *st)
Definition demux.c:2484
static int read_frame_internal(AVFormatContext *s, AVPacket *pkt)
Definition demux.c:1411
static int extract_extradata(FFFormatContext *si, AVStream *st, const AVPacket *pkt)
Definition demux.c:2540
int ff_read_packet(AVFormatContext *s, AVPacket *pkt)
Read a transport packet from a media file.
Definition demux.c:652
static const AVCodec * find_probe_decoder(AVFormatContext *s, const AVStream *st, enum AVCodecID codec_id)
Definition demux.c:73
static int codec_close(FFStream *sti)
Definition demux.c:1362
static av_always_inline int is_id3v2_format(const AVInputFormat *fmt)
Definition demux.c:227
#define FF_INFMT_FLAG_PREFER_CODEC_FRAMERATE
Definition demux.h:40
#define FF_INFMT_FLAG_INIT_CLEANUP
For an FFInputFormat with this flag set read_close() needs to be called by the caller upon read_heade...
Definition demux.h:35
#define FF_INFMT_FLAG_ID3V2_AUTO
Automatically parse ID3v2 metadata.
Definition demux.h:45
#define MAX_STD_TIMEBASES
Definition demux.h:191
static const FFInputFormat * ffifmt(const AVInputFormat *fmt)
Definition demux.h:186
#define FFERROR_REDO
Returned by demuxers to indicate that data was consumed but discarded (ignored streams or junk data).
Definition demux.h:224
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 seek.c:50
static AVPacket * pkt
static AVFrame * frame
Public dictionary API.
void(* flush)(AVBSFContext *ctx)
Definition dts2pts.c:610
enum AVCodecID id
Definition dts2pts.c:607
static int64_t filesize(AVIOContext *pb)
Definition ffmpeg_mux.c:52
static int64_t duration
Definition ffplay.c:411
static int genpts
Definition ffplay.c:413
static int64_t start_time
Definition ffplay.c:410
#define sample
static const uint8_t frame_size[4]
Definition g723_1.h:222
#define fail
Definition test.h:479
void av_bsf_free(AVBSFContext **pctx)
Free a bitstream filter context and everything associated with it; write NULL into the supplied point...
Definition bsf.c:47
int av_bsf_init(AVBSFContext *ctx)
Prepare the filter for use, after all the parameters and options have been set.
Definition bsf.c:147
int av_bsf_alloc(const AVBitStreamFilter *filter, AVBSFContext **pctx)
Allocate a context for a given bitstream filter.
Definition bsf.c:99
int av_bsf_receive_packet(AVBSFContext *ctx, AVPacket *pkt)
Retrieve a filtered packet.
Definition bsf.c:228
int av_bsf_send_packet(AVBSFContext *ctx, AVPacket *pkt)
Submit a packet for filtering.
Definition bsf.c:200
const AVBitStreamFilter * av_bsf_get_by_name(const char *name)
int av_get_bits_per_sample(enum AVCodecID codec_id)
Return codec bits per sample.
Definition utils.c:557
const AVCodecDescriptor * avcodec_descriptor_get(enum AVCodecID id)
int attribute_align_arg avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options)
Initialize the AVCodecContext to use the given AVCodec.
Definition avcodec.c:145
#define AV_CODEC_CAP_AVOID_PROBING
Decoder is not a preferred choice for probing.
Definition codec.h:126
#define AV_CODEC_PROP_FIELDS
Video codec supports separate coding of fields in interlaced frames.
Definition codec_desc.h:97
AVCodecContext * avcodec_alloc_context3(const AVCodec *codec)
Allocate an AVCodecContext and set its fields to default values.
Definition options.c:149
int av_codec_is_decoder(const AVCodec *codec)
Definition utils.c:85
const AVCodec * avcodec_find_decoder(enum AVCodecID id)
Find a registered decoder with a matching codec ID.
Definition allcodecs.c:997
const AVCodec * avcodec_find_decoder_by_name(const char *name)
Find a registered decoder with the specified name.
Definition allcodecs.c:1025
void avsubtitle_free(AVSubtitle *sub)
Free all allocated data in the given subtitle struct.
Definition avcodec.c:422
const char * avcodec_get_name(enum AVCodecID id)
Get the name of a codec.
Definition utils.c:421
AVCodecID
Identify the syntax and semantics of the bitstream.
Definition codec_id.h:47
#define AV_CODEC_CAP_CHANNEL_CONF
Codec should fill in channel configuration and samplerate instead of container.
Definition codec.h:94
const AVCodec * av_codec_iterate(void **opaque)
Iterate over all registered codecs.
Definition allcodecs.c:950
void avcodec_free_context(AVCodecContext **avctx)
Free the codec context and everything associated with it and write NULL to the provided pointer.
Definition options.c:168
#define AV_CODEC_CAP_EXPERIMENTAL
Codec is experimental and is thus avoided in favor of non experimental encoders.
Definition codec.h:90
@ AV_CODEC_ID_HDMV_PGS_SUBTITLE
Definition codec_id.h:576
@ AV_CODEC_ID_EAC3
Definition codec_id.h:497
@ AV_CODEC_ID_DVB_SUBTITLE
Definition codec_id.h:571
@ AV_CODEC_ID_RAWVIDEO
Definition codec_id.h:63
@ AV_CODEC_ID_GIF
Definition codec_id.h:147
@ AV_CODEC_ID_H264
Definition codec_id.h:77
@ AV_CODEC_ID_APTX
Definition codec_id.h:542
@ AV_CODEC_ID_NONE
Definition codec_id.h:48
@ AV_CODEC_ID_JPEG2000
Definition codec_id.h:138
@ AV_CODEC_ID_MP1
Definition codec_id.h:499
@ AV_CODEC_ID_VVC
Definition codec_id.h:247
@ AV_CODEC_ID_AV1
Definition codec_id.h:275
@ AV_CODEC_ID_THEORA
Definition codec_id.h:80
@ AV_CODEC_ID_CODEC2
Definition codec_id.h:524
@ AV_CODEC_ID_MP2
Definition codec_id.h:457
@ AV_CODEC_ID_RV40
Definition codec_id.h:119
@ AV_CODEC_ID_DTS
Definition codec_id.h:461
@ AV_CODEC_ID_HEVC
Definition codec_id.h:223
@ AV_CODEC_ID_RV30
Definition codec_id.h:118
@ AV_CODEC_ID_AAC
Definition codec_id.h:459
@ AV_CODEC_ID_TRUEHD
Definition codec_id.h:501
@ AV_CODEC_ID_AC3
Definition codec_id.h:460
@ AV_CODEC_ID_DVB_TELETEXT
Definition codec_id.h:577
@ AV_CODEC_ID_MPEG4
Definition codec_id.h:62
@ AV_CODEC_ID_EVC
Definition codec_id.h:316
@ AV_CODEC_ID_MP3
preferred ID for decoding MPEG audio layer 1, 2 or 3
Definition codec_id.h:458
@ AV_CODEC_ID_AAC_LATM
Definition codec_id.h:506
@ AV_CODEC_ID_MPEG2VIDEO
preferred ID for MPEG-1/2 video decoding
Definition codec_id.h:52
int avcodec_receive_frame(AVCodecContext *avctx, AVFrame *frame)
Alias for avcodec_receive_frame_flags(avctx, frame, 0).
Definition avcodec.c:721
AVDiscard
Definition defs.h:237
int avcodec_send_packet(AVCodecContext *avctx, const AVPacket *avpkt)
Supply raw packet data as input to a decoder.
Definition decode.c:734
int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub, int *got_sub_ptr, const AVPacket *avpkt)
Decode a subtitle message.
Definition decode.c:939
@ AVDISCARD_ALL
discard all
Definition defs.h:246
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,...
Definition raw.c:31
int av_get_audio_frame_duration(AVCodecContext *avctx, int frame_bytes)
Return audio frame duration.
Definition utils.c:817
void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode)
Definition avcodec.c:515
int avcodec_is_open(AVCodecContext *s)
Definition avcodec.c:703
AVPacketSideData * av_packet_side_data_new(AVPacketSideData **psd, int *pnb_sd, enum AVPacketSideDataType type, size_t size, int flags)
Allocate a new packet side data.
Definition packet.c:621
AVPacketSideData * av_packet_side_data_add(AVPacketSideData **psd, int *pnb_sd, enum AVPacketSideDataType type, void *data, size_t size, int flags)
Wrap existing data as packet side data.
Definition packet.c:614
const AVPacketSideData * av_packet_side_data_get(const AVPacketSideData *sd, int nb_sd, enum AVPacketSideDataType type)
Get side information from a side data array.
Definition packet.c:571
@ AV_PKT_DATA_SKIP_SAMPLES
Recommends skipping the specified number of samples.
Definition packet.h:153
@ AV_PKT_DATA_CPB_PROPERTIES
This side data corresponds to the AVCPBProperties struct.
Definition packet.h:142
@ AV_PKT_DATA_NEW_EXTRADATA
The AV_PKT_DATA_NEW_EXTRADATA is used to notify the codec or the format that the extradata buffer was...
Definition packet.h:56
#define AV_PKT_FLAG_DISCARD
Flag is used to discard packets which are required to maintain valid decoder state but are not requir...
Definition packet.h:664
#define AV_PKT_FLAG_CORRUPT
The packet content is corrupted.
Definition packet.h:658
void av_packet_unref(AVPacket *pkt)
Wipe the packet.
Definition packet.c:435
uint8_t * av_packet_new_side_data(AVPacket *pkt, enum AVPacketSideDataType type, size_t size)
Allocate new information of a packet.
Definition packet.c:231
#define AV_PKT_FLAG_KEY
The packet contains a keyframe.
Definition packet.h:657
int av_packet_make_refcounted(AVPacket *pkt)
Ensure the data described by a given packet is reference counted.
Definition packet.c:498
int av_packet_ref(AVPacket *dst, const AVPacket *src)
Setup a new reference to the data described by a given packet.
Definition packet.c:443
AVCodecParserContext * av_parser_init(enum AVCodecID codec_id)
Definition parser.c:35
void av_parser_close(AVCodecParserContext *s)
Definition parser.c:203
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:120
AVFormatContext * avformat_alloc_context(void)
Allocate an AVFormatContext.
Definition options.c:165
void avformat_free_context(AVFormatContext *s)
Free an AVFormatContext and all its streams.
Definition avformat.c:164
AVProgram * av_find_program_from_stream(AVFormatContext *ic, AVProgram *last, int s)
Find the programs which belong to a given stream.
Definition avformat.c:469
const AVInputFormat * av_probe_input_format3(const AVProbeData *pd, int is_opened, int *score_ret)
Guess the file format.
Definition format.c:156
int av_read_frame(AVFormatContext *s, AVPacket *pkt)
Return the next frame of a stream.
Definition demux.c:1611
int av_probe_input_buffer2(AVIOContext *pb, const AVInputFormat **fmt, const char *url, void *logctx, unsigned int offset, unsigned int max_probe_size)
Probe a bytestream to determine the input format.
Definition format.c:256
int avformat_open_input(AVFormatContext **ps, const char *filename, const AVInputFormat *fmt, AVDictionary **options)
Open an input stream and read the header.
Definition demux.c:231
const AVInputFormat * av_probe_input_format2(const AVProbeData *pd, int is_opened, int *score_max)
Guess the file format.
Definition format.c:238
int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options)
Read packets of a media file to get stream information.
Definition demux.c:2639
void avformat_close_input(AVFormatContext **ps)
Close an opened input AVFormatContext.
Definition demux.c:400
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 seek.c:122
int avformat_queue_attached_pictures(AVFormatContext *s)
Definition demux_utils.c:87
int av_find_default_stream_index(AVFormatContext *s)
Definition avformat.c:484
int av_filename_number_test(const char *filename)
Check whether filename actually is a numbered sequence generator.
Definition utils.c:121
int av_channel_layout_copy(AVChannelLayout *dst, const AVChannelLayout *src)
Make a copy of a channel layout.
AVBufferRef * av_buffer_ref(const AVBufferRef *buf)
Create a new reference to an AVBuffer.
Definition buffer.c:104
void av_dict_free(AVDictionary **pm)
Free all the memory allocated for an AVDictionary struct and all keys and values.
Definition dict.c:236
int av_dict_copy(AVDictionary **dst, const AVDictionary *src, int flags)
Copy entries from one AVDictionary struct into another.
Definition dict.c:250
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:87
#define AVERROR_EXIT
Immediate exit was requested; the called function should not be restarted.
Definition error.h:58
#define AVERROR_EOF
End of file.
Definition error.h:57
#define AVERROR(e)
Definition error.h:45
#define AVERROR_OPTION_NOT_FOUND
Option not found.
Definition error.h:63
void av_frame_free(AVFrame **frame)
Free the frame and any dynamically allocated objects in it, e.g.
Definition frame.c:64
AVFrame * av_frame_alloc(void)
Allocate an AVFrame and set its fields to default values.
Definition frame.c:52
#define AV_LOG_TRACE
Extremely verbose debugging, useful for libav* development.
Definition log.h:236
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
Definition log.h:231
#define AV_LOG_WARNING
Something somehow does not look correct.
Definition log.h:216
#define AV_LOG_VERBOSE
Detailed information.
Definition log.h:226
#define AV_LOG_INFO
Standard information.
Definition log.h:221
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition log.h:210
AVRational av_mul_q(AVRational b, AVRational c)
Multiply two rationals.
Definition rational.c:80
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
static double av_q2d(AVRational a)
Convert an AVRational to a double.
Definition rational.h:104
static int av_cmp_q(AVRational a, AVRational b)
Compare two rationals.
Definition rational.h:89
static av_always_inline AVRational av_inv_q(AVRational q)
Invert a rational.
Definition rational.h:159
int64_t av_add_stable(AVRational ts_tb, int64_t ts, AVRational inc_tb, int64_t inc)
Add a value to a timestamp.
int av_compare_ts(int64_t ts_a, AVRational tb_a, int64_t ts_b, AVRational tb_b)
Compare two timestamps each in its own time base.
int64_t av_rescale(int64_t a, int64_t b, int64_t c)
Rescale a 64-bit integer with rounding to nearest.
int64_t av_rescale_rnd(int64_t a, int64_t b, int64_t c, enum AVRounding rnd)
Rescale a 64-bit integer with specified rounding.
Definition mathematics.c:58
int64_t av_gcd(int64_t a, int64_t b)
Compute the greatest common divisor of two integer operands.
Definition mathematics.c:37
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.
int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq)
Rescale a 64-bit integer by 2 rational numbers.
int64_t av_compare_mod(uint64_t a, uint64_t b, uint64_t mod)
Compare the remainders of two integer operands divided by a common divisor.
@ AV_ROUND_DOWN
Round toward -infinity.
@ AV_ROUND_PASS_MINMAX
Flag telling rescaling functions to pass INT64_MIN/MAX through unchanged, avoiding special cases for ...
@ AV_ROUND_NEAR_INF
Round to nearest and halfway cases away from zero.
void * av_memdup(const void *p, size_t size)
Duplicate a buffer with av_malloc().
Definition mem.c:408
AVMediaType
Definition avutil.h:198
@ AVMEDIA_TYPE_AUDIO
Definition avutil.h:201
@ AVMEDIA_TYPE_SUBTITLE
Definition avutil.h:203
@ AVMEDIA_TYPE_VIDEO
Definition avutil.h:200
@ AVMEDIA_TYPE_DATA
Opaque data information usually continuous.
Definition avutil.h:202
@ AVMEDIA_TYPE_UNKNOWN
Usually treated as AVMEDIA_TYPE_DATA.
Definition avutil.h:199
@ AV_PICTURE_TYPE_I
Intra.
Definition avutil.h:278
@ AV_PICTURE_TYPE_NONE
Undefined.
Definition avutil.h:277
@ AV_PICTURE_TYPE_B
Bi-dir predicted.
Definition avutil.h:280
@ AV_SAMPLE_FMT_NONE
Definition samplefmt.h:56
int av_match_list(const char *name, const char *list, char separator)
Check if a name is in a list.
Definition avstring.c:443
#define AV_NOPTS_VALUE
Undefined timestamp value.
Definition avutil.h:247
#define AV_TIME_BASE
Internal time base represented as integer.
Definition avutil.h:253
#define AV_TIME_BASE_Q
Internal time base represented as fractional value.
Definition avutil.h:263
int av_opt_get_dict_val(void *obj, const char *name, int search_flags, AVDictionary **out_val)
Definition opt.c:1463
#define AV_OPT_SEARCH_CHILDREN
Search in possible children of the given object first.
Definition opt.h:604
void av_opt_set_defaults(void *s)
Set the values of all AVOption fields to their default values.
Definition opt.c:1758
int av_opt_set_int(void *obj, const char *name, int64_t val, int search_flags)
Definition opt.c:938
int av_opt_set_dict_val(void *obj, const char *name, const AVDictionary *val, int search_flags)
Definition opt.c:1053
int av_opt_set_dict(void *obj, AVDictionary **options)
Set all the options from a given dictionary on an object.
Definition opt.c:2066
int a
#define MAX_REORDER_DELAY
void ff_id3v2_free_extra_meta(ID3v2ExtraMeta **extra_meta)
Free memory allocated parsing special (non-text) metadata.
Definition id3v2.c:1186
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:1202
int ff_id3v2_parse_priv(AVFormatContext *s, ID3v2ExtraMeta *extra_meta)
Add metadata for all PRIV tags in the ID3v2 header.
Definition id3v2.c:1298
int ff_id3v2_parse_chapters(AVFormatContext *s, ID3v2ExtraMeta *cur)
Create chapters for all CHAP tags found in the ID3v2 header.
Definition id3v2.c:1233
void ff_id3v2_read_dict(AVFormatContext *s, AVIOContext *pb, AVDictionary **metadata, const char *magic, ID3v2ExtraMeta **extra_meta)
Read an ID3v2 tag into specified dictionary and retrieve supported extra metadata.
Definition id3v2.c:1174
#define ID3v2_DEFAULT_MAGIC
Default magic bytes for ID3v2 header: "ID3".
Definition id3v2.h:35
#define av_log2
Definition intmath.h:84
#define AV_WL32(p, v)
#define AV_RL32(p)
uint32_t type
Definition jpegmpfenc.c:80
unsigned offset
Definition libaomenc.c:763
static int shift(int a, int b)
Definition bonk.c:261
int avpriv_h264_has_num_reorder_frames(AVCodecContext *avctx)
Definition h264dec.c:63
common internal api header.
int avpriv_codec_get_cap_skip_frame_fill_param(const AVCodec *codec)
Definition utils.c:417
int av_get_audio_frame_duration2(AVCodecParameters *par, int frame_bytes)
Definition utils.c:830
static av_always_inline FFStream * ffstream(AVStream *st)
Definition internal.h:365
static av_always_inline const FFStream * cffstream(const AVStream *st)
Definition internal.h:370
static av_always_inline FFFormatContext * ffformatcontext(AVFormatContext *s)
Definition internal.h:130
int ff_packet_list_get(PacketList *list, AVPacket *pkt)
Remove the oldest AVPacket in the list and return it.
Definition packet_list.c:89
int ff_packet_list_put(PacketList *list, AVPacket *pkt, int(*copy)(AVPacket *dst, const AVPacket *src), int flags)
Append an AVPacket to the list.
Definition packet_list.c:40
#define av_always_inline
Definition attributes.h:72
common internal API header
#define FF_DISABLE_DEPRECATION_WARNINGS
Definition internal.h:71
#define FF_ENABLE_DEPRECATION_WARNINGS
Definition internal.h:72
const char * desc
Definition libsvtav1.c:83
#define FFSWAP(type, a, b)
Definition macros.h:52
#define FFMIN(a, b)
Definition macros.h:49
#define FFMAX(a, b)
Definition macros.h:47
#define FFDIFFSIGN(x, y)
Comparator.
Definition macros.h:45
Memory handling functions.
uint32_t tag
Definition movenc.c:2128
const char data[16]
Definition mxf.c:149
#define av_strdup(s)
Definition ops_static.c:55
#define av_realloc(p, s)
Definition ops_static.c:54
AVOptions.
pixel format definitions
@ AVCHROMA_LOC_UNSPECIFIED
Definition pixfmt.h:808
@ AVCOL_RANGE_UNSPECIFIED
Definition pixfmt.h:754
@ AV_PIX_FMT_NONE
Definition pixfmt.h:72
@ AVCOL_PRI_UNSPECIFIED
Definition pixfmt.h:650
@ AVCOL_TRC_UNSPECIFIED
Definition pixfmt.h:680
@ AVCOL_SPC_UNSPECIFIED
Definition pixfmt.h:714
const char * name
Definition qsvenc.c:142
enum AVPixelFormat avpriv_pix_fmt_find(enum PixelFormatTagLists list, unsigned fourcc)
Definition raw.c:78
Raw Video Codec.
@ PIX_FMT_LIST_RAW
Definition raw.h:38
AVCodecParameters * par_in
Parameters of the input stream.
Definition bsf.h:90
AVRational time_base_in
The timebase used for the timestamps of the input packets.
Definition bsf.h:102
This structure describes the bitrate properties of an encoded bitstream.
Definition defs.h:296
int64_t max_bitrate
Maximum bitrate of the stream, in bits per second.
Definition defs.h:301
int64_t buffer_size
The size of the buffer to which the ratecontrol is applied, in bits.
Definition defs.h:317
int64_t min_bitrate
Minimum bitrate of the stream, in bits per second.
Definition defs.h:306
int nb_channels
Number of channels in this layout.
int64_t id
unique ID to identify the chapter
Definition avformat.h:1360
int64_t start
Definition avformat.h:1362
int64_t end
chapter start/end time in time_base units
Definition avformat.h:1362
AVRational time_base
time base in which the start/end timestamps are specified
Definition avformat.h:1361
Describe the class of an AVClass context structure.
Definition log.h:76
main external API structure.
Definition avcodec.h:443
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
Definition avcodec.h:643
int width
picture width / height.
Definition avcodec.h:604
int rc_buffer_size
decoder bitstream buffer size
Definition avcodec.h:1273
AVChannelLayout ch_layout
Audio channel layout.
Definition avcodec.h:1055
enum AVSampleFormat sample_fmt
audio sample format
Definition avcodec.h:1047
unsigned int codec_tag
fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A').
Definition avcodec.h:468
AVRational pkt_timebase
Timebase in which pkt_dts/pts and AVPacket.dts/pts are expressed.
Definition avcodec.h:554
enum AVAudioServiceType audio_service_type
Type of service that the audio stream conveys.
Definition avcodec.h:1089
enum AVMediaType codec_type
Definition avcodec.h:451
AVRational framerate
Definition avcodec.h:563
int bits_per_coded_sample
bits per sample/pixel from the demuxer (needed for huffyuv).
Definition avcodec.h:1569
int has_b_frames
Size of the frame reordering buffer in the decoder.
Definition avcodec.h:709
int64_t bit_rate
the average bitrate
Definition avcodec.h:493
const struct AVCodec * codec
Definition avcodec.h:452
int sample_rate
samples per second
Definition avcodec.h:1040
int64_t rc_max_rate
maximum bitrate
Definition avcodec.h:1288
uint8_t * extradata
Out-of-band global headers that may be used by some codecs.
Definition avcodec.h:526
int64_t rc_min_rate
minimum bitrate
Definition avcodec.h:1295
enum AVCodecID codec_id
Definition avcodec.h:453
int extradata_size
Definition avcodec.h:527
int frame_size
Number of samples per channel in an audio frame.
Definition avcodec.h:1068
enum AVDiscard skip_frame
Skip decoding for selected frames.
Definition avcodec.h:1672
This struct describes the properties of a single codec described by an AVCodecID.
Definition codec_desc.h:38
int props
Codec properties, a combination of AV_CODEC_PROP_* flags.
Definition codec_desc.h:54
This struct describes the properties of an encoded stream.
Definition codec_par.h:49
enum AVColorSpace color_space
Definition codec_par.h:192
int frame_size
Audio frame size, if known.
Definition codec_par.h:227
int height
The height of the video frame in pixels.
Definition codec_par.h:150
int nb_coded_side_data
Amount of entries in coded_side_data.
Definition codec_par.h:88
AVChannelLayout ch_layout
The channel layout and number of channels.
Definition codec_par.h:207
int width
The width of the video frame in pixels.
Definition codec_par.h:143
int64_t bit_rate
The average bitrate of the encoded data (in bits per second).
Definition codec_par.h:99
enum AVMediaType codec_type
General type of the encoded data.
Definition codec_par.h:53
AVRational framerate
Number of frames per second, for streams with constant frame durations.
Definition codec_par.h:175
AVRational sample_aspect_ratio
The aspect ratio (width/height) which a single pixel should have when displayed.
Definition codec_par.h:161
enum AVCodecID codec_id
Specific type of the encoded data (the codec used).
Definition codec_par.h:57
enum AVColorPrimaries color_primaries
Definition codec_par.h:190
int sample_rate
The number of audio samples per second.
Definition codec_par.h:213
enum AVColorTransferCharacteristic color_trc
Definition codec_par.h:191
AVPacketSideData * coded_side_data
Additional data associated with the entire stream.
Definition codec_par.h:83
enum AVChromaLocation chroma_location
Definition codec_par.h:193
enum AVColorRange color_range
Additional colorspace characteristics.
Definition codec_par.h:189
int duration
Duration of the current frame.
Definition avcodec.h:2747
int64_t pos
Byte position of currently parsed frame in stream.
Definition avcodec.h:2735
int repeat_pict
This field is used for proper frame duration computation in lavf.
Definition avcodec.h:2651
int key_frame
Set by parser to 1 for key frames and 0 for non-key frames.
Definition avcodec.h:2682
int64_t offset
byte offset from starting packet start
Definition avcodec.h:2673
AVCodec.
Definition codec.h:175
enum AVCodecID id
Definition codec.h:189
int capabilities
Codec capabilities.
Definition codec.h:194
Format I/O context.
Definition avformat.h:1400
unsigned int nb_streams
Number of elements in AVFormatContext.streams.
Definition avformat.h:1456
AVStreamGroup ** stream_groups
A list of all stream groups in the file.
Definition avformat.h:1488
AVIOContext * pb
I/O context.
Definition avformat.h:1442
int64_t start_time
Position of the first frame of the component, in AV_TIME_BASE fractional seconds.
Definition avformat.h:1526
int flags
Flags modifying the (de)muxer behaviour.
Definition avformat.h:1552
AVProgram ** programs
Definition avformat.h:1614
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:1608
int ctx_flags
Flags signalling stream properties.
Definition avformat.h:1449
int fps_probe_size
The number of frames used for determining the framerate in avformat_find_stream_info().
Definition avformat.h:1668
unsigned int nb_programs
Definition avformat.h:1613
AVIOInterruptCB interrupt_callback
Custom interrupt callbacks for the I/O layer.
Definition avformat.h:1686
const struct AVInputFormat * iformat
The input container format.
Definition avformat.h:1412
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:1849
int64_t bit_rate
Total stream bitrate in bit/s, 0 if not available.
Definition avformat.h:1543
int64_t duration_probesize
Maximum number of bytes read from input in order to determine stream durations when using estimate_ti...
Definition avformat.h:2041
char * codec_whitelist
',' separated list of allowed decoders.
Definition avformat.h:1905
unsigned int nb_stream_groups
Number of elements in AVFormatContext.stream_groups.
Definition avformat.h:1475
int64_t probesize
Maximum number of bytes read from input in order to determine stream properties.
Definition avformat.h:1600
AVStream ** streams
A list of all streams in the file.
Definition avformat.h:1468
int64_t duration
Duration of the stream, in AV_TIME_BASE fractional seconds.
Definition avformat.h:1536
int max_ts_probe
Maximum number of packets to read while waiting for the first timestamp.
Definition avformat.h:1746
int skip_estimate_duration_from_pts
Skip duration calculation in estimate_timings_from_pts.
Definition avformat.h:1834
This structure describes decoded (raw) audio or video data.
Definition frame.h:479
Bytestream IO Context.
Definition avio.h:160
int seekable
A combination of AVIO_SEEKABLE_ flags or 0 when the stream is not seekable.
Definition avio.h:261
int flags
Can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER, AVFMT_EXPERIMENTAL, AVFMT_SHOW_IDS,...
Definition avformat.h:587
const char * name
A comma separated list of short names for the format.
Definition avformat.h:572
This structure stores auxiliary information for decoding, presenting, or otherwise processing the cod...
Definition packet.h:431
uint8_t * data
Definition packet.h:432
enum AVPacketSideDataType type
Definition packet.h:434
This structure stores compressed data.
Definition packet.h:587
int stream_index
Definition packet.h:612
AVBufferRef * buf
A reference to the reference-counted buffer where the packet data is stored.
Definition packet.h:593
int flags
A combination of AV_PKT_FLAG values.
Definition packet.h:616
int size
Definition packet.h:611
int64_t duration
Duration of this packet in AVStream->time_base units, 0 if unknown.
Definition packet.h:628
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...
Definition packet.h:603
int64_t dts
Decompression timestamp in AVStream->time_base units; the time at which the packet is decompressed.
Definition packet.h:609
uint8_t * data
Definition packet.h:610
int64_t pos
byte position in stream, -1 if unknown
Definition packet.h:630
AVPacketSideData * side_data
Additional packet data that can be provided by the container.
Definition packet.h:621
int side_data_elems
Definition packet.h:622
This structure contains the data a format has to probe a file.
Definition avformat.h:473
int buf_size
Size of buf except extra allocated bytes.
Definition avformat.h:476
unsigned char * buf
Buffer must have AVPROBE_PADDING_SIZE of extra allocated bytes filled with zero.
Definition avformat.h:475
New fields can be added to the end with minor version bumps.
Definition avformat.h:1324
unsigned int nb_stream_indexes
Definition avformat.h:1329
unsigned int * stream_index
Definition avformat.h:1328
int64_t pts_wrap_reference
reference dts for wrap detection
Definition avformat.h:1347
int pts_wrap_behavior
behavior on wrap detection
Definition avformat.h:1348
Rational number (pair of numerator and denominator).
Definition rational.h:58
int num
Numerator.
Definition rational.h:59
int den
Denominator.
Definition rational.h:60
enum AVStreamGroupEntryType type
Definition avformat.h:1177
AVStream * stream
Definition avformat.h:1179
AVStreamGroupLayeredVideo is meant to define the relation between a base layer video stream and a sep...
Definition avformat.h:1104
int height
Height of the final image for presentation.
Definition avformat.h:1129
unsigned int el_index
Index of the enhancement layer stream in AVStreamGroup.
Definition avformat.h:1113
int width
Width of the final stream for presentation.
Definition avformat.h:1125
AVStreamGroupTileGrid holds information on how to combine several independent images on a single canv...
Definition avformat.h:975
enum AVStreamGroupParamsType type
Group type.
Definition avformat.h:1211
AVStreamGroupEntry ** entries
A list of streams or child groups in the group.
Definition avformat.h:1298
struct AVStreamGroupTileGrid * tile_grid
Definition avformat.h:1219
int nb_coded_side_data
Amount of entries in coded_side_data.
Definition avformat.h:1311
union AVStreamGroup::@313244315204024013007202273061153315146016101155 params
Group type-specific parameters.
AVPacketSideData * coded_side_data
Additional data associated with the group.
Definition avformat.h:1306
struct AVStreamGroupLayeredVideo * layered_video
Definition avformat.h:1220
Stream structure.
Definition avformat.h:768
AVCodecParameters * codecpar
Codec parameters associated with this stream.
Definition avformat.h:791
AVRational sample_aspect_ratio
sample aspect ratio (0 if unknown)
Definition avformat.h:846
enum AVDiscard discard
Selects which packets can be discarded at will and do not need to be demuxed.
Definition avformat.h:839
int64_t duration
Decoding: duration of the stream, in stream time base.
Definition avformat.h:827
int id
Format-specific stream ID.
Definition avformat.h:780
int index
stream index in AVFormatContext
Definition avformat.h:774
int pts_wrap_bits
Number of bits in timestamps.
Definition avformat.h:911
int64_t start_time
Decoding: pts of the first frame of the stream in presentation order, in stream time base.
Definition avformat.h:817
AVRational avg_frame_rate
Average framerate.
Definition avformat.h:857
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented.
Definition avformat.h:807
int event_flags
Flags indicating events happening on the stream, a combination of AVSTREAM_EVENT_FLAG_*.
Definition avformat.h:879
AVRational r_frame_rate
Real base framerate of the stream.
Definition avformat.h:902
int disposition
Stream disposition - a combination of AV_DISPOSITION_* flags.
Definition avformat.h:837
PacketList packet_buffer
This buffer is only needed when packets were already buffered but not decoded, for example to get the...
Definition internal.h:86
AVDictionary * id3v2_meta
ID3v2 tag useful for MP3 demuxing.
Definition internal.h:118
int64_t data_offset
offset of the first packet
Definition internal.h:89
AVPacket * parse_pkt
The generic code uses this as a temporary packet to parse packets or for muxing, especially flushing.
Definition internal.h:104
AVPacket * pkt
Used to hold temporary packets for the generic demuxing code.
Definition internal.h:111
int priv_data_size
Size of private data so that it can be allocated in the wrapper.
Definition demux.h:80
int flags_internal
Internal flags.
Definition demux.h:85
int(* read_packet)(struct AVFormatContext *, AVPacket *pkt)
Read one packet and put it in 'pkt'.
Definition demux.h:109
int(* read_close)(struct AVFormatContext *)
Close the stream.
Definition demux.h:115
int(* read_header)(struct AVFormatContext *)
Read the format header and initialize the AVFormatContext structure.
Definition demux.h:99
int fps_last_dts_idx
Definition demux.h:217
int64_t codec_info_duration_fields
Definition demux.h:199
int found_decoder
0 -> decoder has not been searched for yet.
Definition demux.h:207
int64_t duration_gcd
Definition demux.h:194
int64_t fps_first_dts
Those are used for average framerate estimation.
Definition demux.h:214
int fps_first_dts_idx
Definition demux.h:215
int frame_delay_evidence
Definition demux.h:200
double(* duration_error)[2][MAX_STD_TIMEBASES]
Definition demux.h:197
int64_t rfps_duration_sum
Definition demux.h:196
int64_t codec_info_duration
Definition demux.h:198
int64_t last_duration
Definition demux.h:209
int64_t last_dts
Definition demux.h:193
int64_t fps_last_dts
Definition demux.h:216
int duration_count
Definition demux.h:195
int64_t pts_wrap_reference
Internal data to check for wrapping of the time stamp.
Definition internal.h:262
int last_IP_duration
Definition internal.h:313
int probe_packets
Number of packets to buffer for codec probing.
Definition internal.h:318
int skip_to_keyframe
Indicates that everything up to the next keyframe should be discarded.
Definition internal.h:210
struct AVCodecContext * avctx
The codec context used by avformat_find_stream_info, the parser, etc.
Definition internal.h:163
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 internal.h:224
int64_t cur_dts
Definition internal.h:360
int avctx_inited
1 if avctx has been initialized with the values from the codec parameters
Definition internal.h:167
int request_probe
stream probing state -1 -> probing finished 0 -> no probing requested rest -> perform probing with re...
Definition internal.h:205
AVProbeData probe_data
Definition internal.h:305
struct AVBSFContext * bsf
Definition internal.h:173
int64_t first_discard_sample
If not 0, the first audio sample that should be discarded from the stream.
Definition internal.h:232
int64_t pts_buffer[MAX_REORDER_DELAY+1]
Definition internal.h:289
int inited
Definition internal.h:174
uint8_t pts_reorder_error_count[MAX_REORDER_DELAY+1]
Definition internal.h:287
uint8_t dts_ordered
Definition internal.h:295
int64_t last_dts_for_order_check
Internal data to analyze DTS and detect faulty mpeg streams.
Definition internal.h:294
uint8_t dts_misordered
Definition internal.h:296
int skip_samples
Number of samples to skip at the start of the frame decoded from the next packet.
Definition internal.h:215
const struct AVCodecDescriptor * codec_desc
Definition internal.h:362
struct AVCodecParserContext * parser
Definition internal.h:322
AVStream pub
The public context.
Definition internal.h:139
int update_initial_durations_done
Internal data to prevent doing update_initial_durations() twice.
Definition internal.h:279
int nb_decoded_frames
Number of internally decoded frames, used internally in libavformat, do not access its lifetime diffe...
Definition internal.h:245
int64_t first_dts
Timestamp corresponding to the last dts sync point.
Definition internal.h:359
int pts_wrap_behavior
Options for behavior, when a wrap is detected.
Definition internal.h:274
int need_context_update
Whether the internal avctx needs to be updated from codecpar (after a late change to codecpar)
Definition internal.h:180
struct FFStreamInfo * info
Stream information used internally by avformat_find_stream_info()
Definition internal.h:189
AVRational display_aspect_ratio
display aspect ratio (0 if unknown)
Definition internal.h:303
int64_t last_IP_pts
Definition internal.h:312
AVPacket * parse_pkt
The generic code uses this as a temporary packet to parse packets or for muxing, especially flushing.
Definition internal.h:337
struct FFStream::@143263315346311247247365102337045232073206113210 extract_extradata
enum AVStreamParseType need_parsing
Definition internal.h:321
int codec_info_nb_frames
Number of frames that have been demuxed during avformat_find_stream_info()
Definition internal.h:342
int64_t pts_reorder_error[MAX_REORDER_DELAY+1]
Internal data to generate dts from pts.
Definition internal.h:286
PacketList parse_queue
Packets split by the parser get queued here.
PacketList raw_packet_buffer
Raw packets from the demuxer, prior to parsing and decoding.
int metafree
Contexts and child contexts do not contain a metadata option.
int raw_packet_buffer_size
Sum of the size of packets in raw_packet_buffer, in bytes.
struct PacketListEntry * next
PacketListEntry * tail
PacketListEntry * head
#define llrint
Definition tablegen.h:47
#define av_free(p)
#define av_mallocz(s)
#define av_freep(p)
#define av_log(a,...)
static void error(const char *err)
static uint8_t tmp[40]
Definition aes_ctr.c:52
float framerate
Definition av1_levels.c:29
int64_t bitrate
Definition av1_levels.c:47
#define src
Definition vp8dsp.c:248
int num
Definition error.c:23
static int ref[MAX_W *MAX_W]
int64_t av_gettime(void)
Get the current time in microseconds.
Definition time.c:40
timestamp utils, mostly useful for debugging/logging purposes
#define av_ts2str(ts)
Convenience macro, the return value should be used only directly in function arguments but never stan...
Definition timestamp.h:54
#define av_ts2timestr(ts, tb)
Convenience macro, the return value should be used only directly in function arguments but never stan...
Definition timestamp.h:83
static int64_t pts
int size
unbuffered private I/O API
enum AVCodecID codec_id
static av_always_inline int diff(const struct color_info *a, const struct color_info *b, const int trans_thresh)
static double limit(double x)
static double a0(void *priv, double x, double y)
Definition vf_xfade.c:2035
static double a1(void *priv, double x, double y)
Definition vf_xfade.c:2036
float delta
int len
static double c[64]