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 (options) {
359 *options = tmp;
360 }
361 *ps = s;
362 return 0;
363
364close:
365 if (ffifmt(s->iformat)->read_close)
366 ffifmt(s->iformat)->read_close(s);
367fail:
368 ff_id3v2_free_extra_meta(&id3v2_extra_meta);
370 if (s->pb && !(s->flags & AVFMT_FLAG_CUSTOM_IO))
371 ff_format_io_close(s, &s->pb);
373 *ps = NULL;
374 return ret;
375}
376
378{
380 AVIOContext *pb;
381
382 if (!ps || !*ps)
383 return;
384
385 s = *ps;
386 pb = s->pb;
387
388 if ((s->iformat && strcmp(s->iformat->name, "image2") && s->iformat->flags & AVFMT_NOFILE) ||
389 (s->flags & AVFMT_FLAG_CUSTOM_IO))
390 pb = NULL;
391
392 if (s->iformat)
393 if (ffifmt(s->iformat)->read_close)
394 ffifmt(s->iformat)->read_close(s);
395
396 ff_format_io_close(s, &pb);
398
399 *ps = NULL;
400}
401
403{
404 switch (st->codecpar->codec_type) {
406 if (s->video_codec_id)
407 st->codecpar->codec_id = s->video_codec_id;
408 break;
410 if (s->audio_codec_id)
411 st->codecpar->codec_id = s->audio_codec_id;
412 break;
414 if (s->subtitle_codec_id)
415 st->codecpar->codec_id = s->subtitle_codec_id;
416 break;
418 if (s->data_codec_id)
419 st->codecpar->codec_id = s->data_codec_id;
420 break;
421 }
422}
423
425{
427 FFStream *const sti = ffstream(st);
428
429 if (sti->request_probe > 0) {
430 AVProbeData *const pd = &sti->probe_data;
431 int end;
432 av_log(s, AV_LOG_DEBUG, "probing stream %d pp:%d\n", st->index, sti->probe_packets);
433 --sti->probe_packets;
434
435 if (pkt) {
436 uint8_t *new_buf = av_realloc(pd->buf, pd->buf_size+pkt->size+AVPROBE_PADDING_SIZE);
437 if (!new_buf) {
439 "Failed to reallocate probe buffer for stream %d\n",
440 st->index);
441 goto no_packet;
442 }
443 pd->buf = new_buf;
444 memcpy(pd->buf + pd->buf_size, pkt->data, pkt->size);
445 pd->buf_size += pkt->size;
446 memset(pd->buf + pd->buf_size, 0, AVPROBE_PADDING_SIZE);
447 } else {
448no_packet:
449 sti->probe_packets = 0;
450 if (!pd->buf_size) {
452 "nothing to probe for stream %d\n", st->index);
453 }
454 }
455
456 end = fci->raw_packet_buffer_size >= s->probesize ||
457 sti->probe_packets <= 0;
458
459 if (end || av_log2(pd->buf_size) != av_log2(pd->buf_size - pkt->size)) {
460 int score = set_codec_from_probe_data(s, st, pd);
462 || end) {
463 pd->buf_size = 0;
464 av_freep(&pd->buf);
465 sti->request_probe = -1;
466 if (st->codecpar->codec_id != AV_CODEC_ID_NONE) {
467 av_log(s, AV_LOG_DEBUG, "probed stream %d\n", st->index);
468 } else
469 av_log(s, AV_LOG_WARNING, "probed stream %d failed\n", st->index);
470 }
471 force_codec_ids(s, st);
472 }
473 }
474 return 0;
475}
476
477static int update_wrap_reference(AVFormatContext *s, AVStream *st, int stream_index, AVPacket *pkt)
478{
479 FFStream *const sti = ffstream(st);
480 int64_t ref = pkt->dts;
481 int pts_wrap_behavior;
482 int64_t pts_wrap_reference;
483 AVProgram *first_program;
484
485 if (ref == AV_NOPTS_VALUE)
486 ref = pkt->pts;
487 if (sti->pts_wrap_reference != AV_NOPTS_VALUE || st->pts_wrap_bits >= 63 || ref == AV_NOPTS_VALUE || !s->correct_ts_overflow)
488 return 0;
489 ref &= (1LL << st->pts_wrap_bits)-1;
490
491 // reference time stamp should be 60 s before first time stamp
492 pts_wrap_reference = ref - av_rescale(60, st->time_base.den, st->time_base.num);
493 // if first time stamp is not more than 1/8 and 60s before the wrap point, subtract rather than add wrap offset
494 pts_wrap_behavior = (ref < (1LL << st->pts_wrap_bits) - (1LL << st->pts_wrap_bits-3)) ||
495 (ref < (1LL << st->pts_wrap_bits) - av_rescale(60, st->time_base.den, st->time_base.num)) ?
497
498 first_program = av_find_program_from_stream(s, NULL, stream_index);
499
500 if (!first_program) {
501 int default_stream_index = av_find_default_stream_index(s);
502 FFStream *const default_sti = ffstream(s->streams[default_stream_index]);
503 if (default_sti->pts_wrap_reference == AV_NOPTS_VALUE) {
504 for (unsigned i = 0; i < s->nb_streams; i++) {
505 FFStream *const sti = ffstream(s->streams[i]);
507 continue;
508 sti->pts_wrap_reference = pts_wrap_reference;
509 sti->pts_wrap_behavior = pts_wrap_behavior;
510 }
511 } else {
512 sti->pts_wrap_reference = default_sti->pts_wrap_reference;
513 sti->pts_wrap_behavior = default_sti->pts_wrap_behavior;
514 }
515 } else {
516 AVProgram *program = first_program;
517 while (program) {
518 if (program->pts_wrap_reference != AV_NOPTS_VALUE) {
519 pts_wrap_reference = program->pts_wrap_reference;
520 pts_wrap_behavior = program->pts_wrap_behavior;
521 break;
522 }
523 program = av_find_program_from_stream(s, program, stream_index);
524 }
525
526 // update every program with differing pts_wrap_reference
527 program = first_program;
528 while (program) {
529 if (program->pts_wrap_reference != pts_wrap_reference) {
530 for (unsigned i = 0; i < program->nb_stream_indexes; i++) {
531 FFStream *const sti = ffstream(s->streams[program->stream_index[i]]);
532 sti->pts_wrap_reference = pts_wrap_reference;
533 sti->pts_wrap_behavior = pts_wrap_behavior;
534 }
535
536 program->pts_wrap_reference = pts_wrap_reference;
537 program->pts_wrap_behavior = pts_wrap_behavior;
538 }
539 program = av_find_program_from_stream(s, program, stream_index);
540 }
541 }
542 return 1;
543}
544
546{
547 FFStream *const sti = ffstream(st);
548
549 if (update_wrap_reference(s, st, pkt->stream_index, pkt) && sti->pts_wrap_behavior == AV_PTS_WRAP_SUB_OFFSET) {
550 // correct first time stamps to negative values
551 if (!is_relative(sti->first_dts))
552 sti->first_dts = wrap_timestamp(st, sti->first_dts);
553 if (!is_relative(st->start_time))
554 st->start_time = wrap_timestamp(st, st->start_time);
555 if (!is_relative(sti->cur_dts))
556 sti->cur_dts = wrap_timestamp(st, sti->cur_dts);
557 }
558
559 pkt->dts = wrap_timestamp(st, pkt->dts);
560 pkt->pts = wrap_timestamp(st, pkt->pts);
561
562 force_codec_ids(s, st);
563
564 /* TODO: audio: time filter; video: frame reordering (pts != dts) */
565 if (s->use_wallclock_as_timestamps)
566 pkt->dts = pkt->pts = av_rescale_q(av_gettime(), AV_TIME_BASE_Q, st->time_base);
567}
568
569/**
570 * Handle a new packet and either return it directly if possible and
571 * allow_passthrough is true or queue the packet (or drop the packet
572 * if corrupt).
573 *
574 * @return < 0 on error, 0 if the packet was passed through,
575 * 1 if it was queued or dropped
576 */
577static int handle_new_packet(AVFormatContext *s, AVPacket *pkt, int allow_passthrough)
578{
580 AVStream *st;
581 FFStream *sti;
582 int err;
583
584 av_assert0(pkt->stream_index < (unsigned)s->nb_streams &&
585 "Invalid stream index.\n");
586
587 if (pkt->flags & AV_PKT_FLAG_CORRUPT) {
589 "Packet corrupt (stream = %d, dts = %s)%s.\n",
590 pkt->stream_index, av_ts2str(pkt->dts),
591 s->flags & AVFMT_FLAG_DISCARD_CORRUPT ? ", dropping it" : "");
592 if (s->flags & AVFMT_FLAG_DISCARD_CORRUPT) {
594 return 1;
595 }
596 }
597
598 st = s->streams[pkt->stream_index];
599 sti = ffstream(st);
600
601 update_timestamps(s, st, pkt);
602
603 if (sti->request_probe <= 0 && allow_passthrough && !fci->raw_packet_buffer.head)
604 return 0;
605
607 if (err < 0) {
609 return err;
610 }
611
612 pkt = &fci->raw_packet_buffer.tail->pkt;
613 fci->raw_packet_buffer_size += pkt->size;
614
615 err = probe_codec(s, st, pkt);
616 if (err < 0)
617 return err;
618
619 return 1;
620}
621
623{
624 int err = handle_new_packet(s, pkt, 0);
625
626 return err < 0 ? err : 0;
627}
628
630{
632 int err;
633
634#if FF_API_INIT_PACKET
636 pkt->data = NULL;
637 pkt->size = 0;
638 av_init_packet(pkt);
640#else
642#endif
643
644 for (;;) {
646
647 if (pktl) {
648 AVStream *const st = s->streams[pktl->pkt.stream_index];
649 if (fci->raw_packet_buffer_size >= s->probesize)
650 if ((err = probe_codec(s, st, NULL)) < 0)
651 return err;
652 if (ffstream(st)->request_probe <= 0) {
654 fci->raw_packet_buffer_size -= pkt->size;
655 return 0;
656 }
657 }
658
659 err = ffifmt(s->iformat)->read_packet(s, pkt);
660 if (err < 0) {
662
663 /* Some demuxers return FFERROR_REDO when they consume
664 data and discard it (ignored streams, junk, extradata).
665 We must re-call the demuxer to get the real packet. */
666 if (err == FFERROR_REDO)
667 continue;
668 if (!pktl || err == AVERROR(EAGAIN))
669 return err;
670 for (unsigned i = 0; i < s->nb_streams; i++) {
671 AVStream *const st = s->streams[i];
672 FFStream *const sti = ffstream(st);
673 if (sti->probe_packets || sti->request_probe > 0)
674 if ((err = probe_codec(s, st, NULL)) < 0)
675 return err;
676 av_assert0(sti->request_probe <= 0);
677 }
678 continue;
679 }
680
682 if (err < 0) {
684 return err;
685 }
686
687 err = handle_new_packet(s, pkt, 1);
688 if (err <= 0) /* Error or passthrough */
689 return err;
690 }
691}
692
693/**
694 * Return the frame duration in seconds. Return 0 if not available.
695 */
696static void compute_frame_duration(AVFormatContext *s, int *pnum, int *pden,
698 AVPacket *pkt)
699{
700 FFStream *const sti = ffstream(st);
701 AVRational codec_framerate = sti->avctx->framerate;
702 int frame_size, sample_rate;
703
704 *pnum = 0;
705 *pden = 0;
706 switch (st->codecpar->codec_type) {
708 if (st->r_frame_rate.num && (!pc || !codec_framerate.num)) {
709 *pnum = st->r_frame_rate.den;
710 *pden = st->r_frame_rate.num;
711 } else if ((s->iformat->flags & AVFMT_NOTIMESTAMPS) &&
712 !codec_framerate.num &&
714 *pnum = st->avg_frame_rate.den;
715 *pden = st->avg_frame_rate.num;
716 } else if (st->time_base.num * 1000LL > st->time_base.den) {
717 *pnum = st->time_base.num;
718 *pden = st->time_base.den;
719 } else if (codec_framerate.den * 1000LL > codec_framerate.num) {
720 int ticks_per_frame = (sti->codec_desc &&
721 (sti->codec_desc->props & AV_CODEC_PROP_FIELDS)) ? 2 : 1;
722 av_reduce(pnum, pden,
723 codec_framerate.den,
724 codec_framerate.num * (int64_t)ticks_per_frame,
725 INT_MAX);
726
727 if (pc && pc->repeat_pict) {
728 av_reduce(pnum, pden,
729 (*pnum) * (1LL + pc->repeat_pict),
730 (*pden),
731 INT_MAX);
732 }
733 /* If this codec can be interlaced or progressive then we need
734 * a parser to compute duration of a packet. Thus if we have
735 * no parser in such case leave duration undefined. */
736 if (sti->codec_desc &&
737 (sti->codec_desc->props & AV_CODEC_PROP_FIELDS) && !pc)
738 *pnum = *pden = 0;
739 }
740 break;
742 if (sti->avctx_inited) {
744 sample_rate = sti->avctx->sample_rate;
745 } else {
747 sample_rate = st->codecpar->sample_rate;
748 }
749 if (frame_size <= 0 || sample_rate <= 0)
750 break;
751 *pnum = frame_size;
752 *pden = sample_rate;
753 break;
754 default:
755 break;
756 }
757}
758
760{
761 FFStream *const sti = ffstream(st);
762 if (st->codecpar->codec_id != AV_CODEC_ID_H264) return 1;
763 if (!sti->info) // if we have left find_stream_info then nb_decoded_frames won't increase anymore for stream copy
764 return 1;
766#if CONFIG_H264_DECODER
767 if (sti->avctx->has_b_frames && avcodec_is_open(sti->avctx) &&
769 return 1;
770#endif
771 if (sti->avctx->has_b_frames < 3)
772 return sti->nb_decoded_frames >= 7;
773 else if (sti->avctx->has_b_frames < 4)
774 return sti->nb_decoded_frames >= 18;
775 else
776 return sti->nb_decoded_frames >= 20;
777}
778
780 PacketListEntry *pktl)
781{
783 FFFormatContext *const si = &fci->fc;
784 if (pktl->next)
785 return pktl->next;
786 if (pktl == si->packet_buffer.tail)
787 return fci->parse_queue.head;
788 return NULL;
789}
790
792{
793 FFStream *const sti = ffstream(st);
794 int onein_oneout = st->codecpar->codec_id != AV_CODEC_ID_H264 &&
797
798 if (!onein_oneout) {
799 int delay = sti->avctx->has_b_frames;
800
801 if (dts == AV_NOPTS_VALUE) {
802 int64_t best_score = INT64_MAX;
803 for (int i = 0; i < delay; i++) {
804 if (sti->pts_reorder_error_count[i]) {
806 if (score < best_score) {
807 best_score = score;
808 dts = pts_buffer[i];
809 }
810 }
811 }
812 } else {
813 for (int i = 0; i < delay; i++) {
814 if (pts_buffer[i] != AV_NOPTS_VALUE) {
815#define ABSDIFF(a,b) (((a) < (b)) ? (b) - (uint64_t)(a) : ((a) - (uint64_t)(b)))
816 uint64_t diff = ABSDIFF(pts_buffer[i], dts);
817
818 if (diff > INT64_MAX - sti->pts_reorder_error[i]) {
819 diff = INT64_MAX;
820 } else
821 diff += sti->pts_reorder_error[i];
822
823 sti->pts_reorder_error[i] = diff;
825 if (sti->pts_reorder_error_count[i] > 250) {
826 sti->pts_reorder_error[i] >>= 1;
827 sti->pts_reorder_error_count[i] >>= 1;
828 }
829 }
830 }
831 }
832 }
833
834 if (dts == AV_NOPTS_VALUE)
835 dts = pts_buffer[0];
836
837 return dts;
838}
839
840/**
841 * Updates the dts of packets of a stream in pkt_buffer, by re-ordering the pts
842 * of the packets in a window.
843 */
844static void update_dts_from_pts(AVFormatContext *s, int stream_index,
845 PacketListEntry *pkt_buffer)
846{
847 AVStream *const st = s->streams[stream_index];
848 int delay = ffstream(st)->avctx->has_b_frames;
849
850 int64_t pts_buffer[MAX_REORDER_DELAY+1];
851
852 for (int i = 0; i < MAX_REORDER_DELAY + 1; i++)
853 pts_buffer[i] = AV_NOPTS_VALUE;
854
855 for (; pkt_buffer; pkt_buffer = get_next_pkt(s, st, pkt_buffer)) {
856 if (pkt_buffer->pkt.stream_index != stream_index)
857 continue;
858
859 if (pkt_buffer->pkt.pts != AV_NOPTS_VALUE && delay <= MAX_REORDER_DELAY) {
860 pts_buffer[0] = pkt_buffer->pkt.pts;
861 for (int i = 0; i < delay && pts_buffer[i] > pts_buffer[i + 1]; i++)
862 FFSWAP(int64_t, pts_buffer[i], pts_buffer[i + 1]);
863
864 pkt_buffer->pkt.dts = select_from_pts_buffer(st, pts_buffer, pkt_buffer->pkt.dts);
865 }
866 }
867}
868
869static void update_initial_timestamps(AVFormatContext *s, int stream_index,
871{
873 FFFormatContext *const si = &fci->fc;
874 AVStream *const st = s->streams[stream_index];
875 FFStream *const sti = ffstream(st);
877
878 uint64_t shift;
879
880 if (sti->first_dts != AV_NOPTS_VALUE ||
881 dts == AV_NOPTS_VALUE ||
882 sti->cur_dts == AV_NOPTS_VALUE ||
883 sti->cur_dts < INT_MIN + RELATIVE_TS_BASE ||
884 dts < INT_MIN + (sti->cur_dts - RELATIVE_TS_BASE) ||
885 is_relative(dts))
886 return;
887
888 sti->first_dts = dts - (sti->cur_dts - RELATIVE_TS_BASE);
889 sti->cur_dts = dts;
890 shift = (uint64_t)sti->first_dts - RELATIVE_TS_BASE;
891
892 if (is_relative(pts))
893 pts += shift;
894
895 for (PacketListEntry *pktl_it = pktl; pktl_it; pktl_it = get_next_pkt(s, st, pktl_it)) {
896 if (pktl_it->pkt.stream_index != stream_index)
897 continue;
898 if (is_relative(pktl_it->pkt.pts))
899 pktl_it->pkt.pts += shift;
900
901 if (is_relative(pktl_it->pkt.dts))
902 pktl_it->pkt.dts += shift;
903
904 if (st->start_time == AV_NOPTS_VALUE && pktl_it->pkt.pts != AV_NOPTS_VALUE) {
905 st->start_time = pktl_it->pkt.pts;
907 st->start_time = av_sat_add64(st->start_time, av_rescale_q(sti->skip_samples, (AVRational){1, st->codecpar->sample_rate}, st->time_base));
908 }
909 }
910
912 update_dts_from_pts(s, stream_index, pktl);
913
914 if (st->start_time == AV_NOPTS_VALUE) {
915 if (st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO || !(pkt->flags & AV_PKT_FLAG_DISCARD)) {
916 st->start_time = pts;
917 }
919 st->start_time = av_sat_add64(st->start_time, av_rescale_q(sti->skip_samples, (AVRational){1, st->codecpar->sample_rate}, st->time_base));
920 }
921}
922
924 int stream_index, int64_t duration)
925{
927 FFFormatContext *const si = &fci->fc;
928 FFStream *const sti = ffstream(st);
930 int64_t cur_dts = RELATIVE_TS_BASE;
931
932 if (sti->first_dts != AV_NOPTS_VALUE) {
934 return;
936 cur_dts = sti->first_dts;
937 for (; pktl; pktl = get_next_pkt(s, st, pktl)) {
938 if (pktl->pkt.stream_index == stream_index) {
939 if (pktl->pkt.pts != pktl->pkt.dts ||
940 pktl->pkt.dts != AV_NOPTS_VALUE ||
941 pktl->pkt.duration)
942 break;
943 cur_dts -= duration;
944 }
945 }
946 if (pktl && pktl->pkt.dts != sti->first_dts) {
947 av_log(s, AV_LOG_DEBUG, "first_dts %s not matching first dts %s (pts %s, duration %"PRId64") in the queue\n",
948 av_ts2str(sti->first_dts), av_ts2str(pktl->pkt.dts), av_ts2str(pktl->pkt.pts), pktl->pkt.duration);
949 return;
950 }
951 if (!pktl) {
952 av_log(s, AV_LOG_DEBUG, "first_dts %s but no packet with dts in the queue\n", av_ts2str(sti->first_dts));
953 return;
954 }
955 pktl = si->packet_buffer.head ? si->packet_buffer.head : fci->parse_queue.head;
956 sti->first_dts = cur_dts;
957 } else if (sti->cur_dts != RELATIVE_TS_BASE)
958 return;
959
960 for (; pktl; pktl = get_next_pkt(s, st, pktl)) {
961 if (pktl->pkt.stream_index != stream_index)
962 continue;
963 if ((pktl->pkt.pts == pktl->pkt.dts ||
964 pktl->pkt.pts == AV_NOPTS_VALUE) &&
965 (pktl->pkt.dts == AV_NOPTS_VALUE ||
966 pktl->pkt.dts == sti->first_dts ||
967 pktl->pkt.dts == RELATIVE_TS_BASE) &&
968 !pktl->pkt.duration &&
969 av_sat_add64(cur_dts, duration) == cur_dts + (uint64_t)duration
970 ) {
971 pktl->pkt.dts = cur_dts;
972 if (!sti->avctx->has_b_frames)
973 pktl->pkt.pts = cur_dts;
974 pktl->pkt.duration = duration;
975 } else
976 break;
977 cur_dts = pktl->pkt.dts + pktl->pkt.duration;
978 }
979 if (!pktl)
980 sti->cur_dts = cur_dts;
981}
982
985 int64_t next_dts, int64_t next_pts)
986{
988 FFFormatContext *const si = &fci->fc;
989 FFStream *const sti = ffstream(st);
990 int num, den, presentation_delayed, delay;
993 int onein_oneout = st->codecpar->codec_id != AV_CODEC_ID_H264 &&
996
997 if (s->flags & AVFMT_FLAG_NOFILLIN)
998 return;
999
1000 if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO && pkt->dts != AV_NOPTS_VALUE) {
1001 if (pkt->dts == pkt->pts && sti->last_dts_for_order_check != AV_NOPTS_VALUE) {
1002 if (sti->last_dts_for_order_check <= pkt->dts) {
1003 sti->dts_ordered++;
1004 } else {
1006 "DTS %"PRIi64" < %"PRIi64" out of order\n",
1007 pkt->dts,
1009 sti->dts_misordered++;
1010 }
1011 if (sti->dts_ordered + sti->dts_misordered > 250) {
1012 sti->dts_ordered >>= 1;
1013 sti->dts_misordered >>= 1;
1014 }
1015 }
1016
1017 sti->last_dts_for_order_check = pkt->dts;
1018 if (sti->dts_ordered < 8 * sti->dts_misordered && pkt->dts == pkt->pts)
1019 pkt->dts = AV_NOPTS_VALUE;
1020 }
1021
1022 if ((s->flags & AVFMT_FLAG_IGNDTS) && pkt->pts != AV_NOPTS_VALUE)
1023 pkt->dts = AV_NOPTS_VALUE;
1024
1025 if (pc && pc->pict_type == AV_PICTURE_TYPE_B
1026 && !sti->avctx->has_b_frames)
1027 //FIXME Set low_delay = 0 when has_b_frames = 1
1028 sti->avctx->has_b_frames = 1;
1029
1030 /* do we have a video B-frame ? */
1031 delay = sti->avctx->has_b_frames;
1032 presentation_delayed = 0;
1033
1034 /* XXX: need has_b_frame, but cannot get it if the codec is
1035 * not initialized */
1036 if (delay &&
1037 pc && pc->pict_type != AV_PICTURE_TYPE_B)
1038 presentation_delayed = 1;
1039
1040 if (pkt->pts != AV_NOPTS_VALUE && pkt->dts != AV_NOPTS_VALUE &&
1041 st->pts_wrap_bits < 63 && pkt->dts > INT64_MIN + (1LL << st->pts_wrap_bits) &&
1042 pkt->dts - (1LL << (st->pts_wrap_bits - 1)) > pkt->pts) {
1043 if (is_relative(sti->cur_dts) || pkt->dts - (1LL<<(st->pts_wrap_bits - 1)) > sti->cur_dts) {
1044 pkt->dts -= 1LL << st->pts_wrap_bits;
1045 } else
1046 pkt->pts += 1LL << st->pts_wrap_bits;
1047 }
1048
1049 /* Some MPEG-2 in MPEG-PS lack dts (issue #171 / input_file.mpg).
1050 * We take the conservative approach and discard both.
1051 * Note: If this is misbehaving for an H.264 file, then possibly
1052 * presentation_delayed is not set correctly. */
1053 if (delay == 1 && pkt->dts == pkt->pts &&
1054 pkt->dts != AV_NOPTS_VALUE && presentation_delayed) {
1055 av_log(s, AV_LOG_DEBUG, "invalid dts/pts combination %"PRIi64"\n", pkt->dts);
1056 if ( strcmp(s->iformat->name, "mov,mp4,m4a,3gp,3g2,mj2")
1057 && strcmp(s->iformat->name, "flv")) // otherwise we discard correct timestamps for vc1-wmapro.ism
1058 pkt->dts = AV_NOPTS_VALUE;
1059 }
1060
1061 duration = av_mul_q((AVRational) {pkt->duration, 1}, st->time_base);
1062 if (pkt->duration <= 0) {
1063 compute_frame_duration(s, &num, &den, st, pc, pkt);
1064 if (den && num) {
1065 duration = (AVRational) {num, den};
1066 pkt->duration = av_rescale_rnd(1,
1067 num * (int64_t) st->time_base.den,
1068 den * (int64_t) st->time_base.num,
1070 }
1071 }
1072
1073 if (pkt->duration > 0 && (si->packet_buffer.head || fci->parse_queue.head))
1074 update_initial_durations(s, st, pkt->stream_index, pkt->duration);
1075
1076 /* Correct timestamps with byte offset if demuxers only have timestamps
1077 * on packet boundaries */
1078 if (pc && sti->need_parsing == AVSTREAM_PARSE_TIMESTAMPS && pkt->size) {
1079 /* this will estimate bitrate based on this frame's duration and size */
1080 offset = av_rescale(pc->offset, pkt->duration, pkt->size);
1081 if (pkt->pts != AV_NOPTS_VALUE)
1082 pkt->pts += offset;
1083 if (pkt->dts != AV_NOPTS_VALUE)
1084 pkt->dts += offset;
1085 }
1086
1087 /* This may be redundant, but it should not hurt. */
1088 if (pkt->dts != AV_NOPTS_VALUE &&
1089 pkt->pts != AV_NOPTS_VALUE &&
1090 pkt->pts > pkt->dts)
1091 presentation_delayed = 1;
1092
1093 if (s->debug & AV_FDEBUG_TS)
1095 "IN delayed:%d pts:%s, dts:%s cur_dts:%s st:%d pc:%p duration:%"PRId64" delay:%d onein_oneout:%d\n",
1096 presentation_delayed, av_ts2str(pkt->pts), av_ts2str(pkt->dts), av_ts2str(sti->cur_dts),
1097 pkt->stream_index, pc, pkt->duration, delay, onein_oneout);
1098
1099 /* Interpolate PTS and DTS if they are not present. We skip H264
1100 * currently because delay and has_b_frames are not reliably set. */
1101 if ((delay == 0 || (delay == 1 && pc)) &&
1102 onein_oneout) {
1103 if (presentation_delayed) {
1104 /* DTS = decompression timestamp */
1105 /* PTS = presentation timestamp */
1106 if (pkt->dts == AV_NOPTS_VALUE)
1107 pkt->dts = sti->last_IP_pts;
1108 update_initial_timestamps(s, pkt->stream_index, pkt->dts, pkt->pts, pkt);
1109 if (pkt->dts == AV_NOPTS_VALUE)
1110 pkt->dts = sti->cur_dts;
1111
1112 /* This is tricky: the dts must be incremented by the duration
1113 * of the frame we are displaying, i.e. the last I- or P-frame. */
1114 if (sti->last_IP_duration == 0 && (uint64_t)pkt->duration <= INT32_MAX)
1115 sti->last_IP_duration = pkt->duration;
1116 if (pkt->dts != AV_NOPTS_VALUE)
1117 sti->cur_dts = av_sat_add64(pkt->dts, sti->last_IP_duration);
1118 if (pkt->dts != AV_NOPTS_VALUE &&
1119 pkt->pts == AV_NOPTS_VALUE &&
1120 sti->last_IP_duration > 0 &&
1121 ((uint64_t)sti->cur_dts - (uint64_t)next_dts + 1) <= 2 &&
1122 next_dts != next_pts &&
1123 next_pts != AV_NOPTS_VALUE)
1124 pkt->pts = next_dts;
1125
1126 if ((uint64_t)pkt->duration <= INT32_MAX)
1127 sti->last_IP_duration = pkt->duration;
1128 sti->last_IP_pts = pkt->pts;
1129 /* Cannot compute PTS if not present (we can compute it only
1130 * by knowing the future. */
1131 } else if (pkt->pts != AV_NOPTS_VALUE ||
1132 pkt->dts != AV_NOPTS_VALUE ||
1133 pkt->duration > 0 ) {
1134
1135 /* presentation is not delayed : PTS and DTS are the same */
1136 if (pkt->pts == AV_NOPTS_VALUE)
1137 pkt->pts = pkt->dts;
1138 update_initial_timestamps(s, pkt->stream_index, pkt->pts,
1139 pkt->pts, pkt);
1140 if (pkt->pts == AV_NOPTS_VALUE)
1141 pkt->pts = sti->cur_dts;
1142 pkt->dts = pkt->pts;
1143 if (pkt->pts != AV_NOPTS_VALUE && duration.num >= 0)
1144 sti->cur_dts = av_add_stable(st->time_base, pkt->pts, duration, 1);
1145 }
1146 }
1147
1148 if (pkt->pts != AV_NOPTS_VALUE && delay <= MAX_REORDER_DELAY) {
1149 sti->pts_buffer[0] = pkt->pts;
1150 for (int i = 0; i < delay && sti->pts_buffer[i] > sti->pts_buffer[i + 1]; i++)
1151 FFSWAP(int64_t, sti->pts_buffer[i], sti->pts_buffer[i + 1]);
1152
1154 pkt->dts = select_from_pts_buffer(st, sti->pts_buffer, pkt->dts);
1155 }
1156 // We skipped it above so we try here.
1157 if (!onein_oneout)
1158 // This should happen on the first packet
1159 update_initial_timestamps(s, pkt->stream_index, pkt->dts, pkt->pts, pkt);
1160 if (pkt->dts > sti->cur_dts)
1161 sti->cur_dts = pkt->dts;
1162
1163 if (s->debug & AV_FDEBUG_TS)
1164 av_log(s, AV_LOG_DEBUG, "OUTdelayed:%d/%d pts:%s, dts:%s cur_dts:%s st:%d (%d)\n",
1165 presentation_delayed, delay, av_ts2str(pkt->pts), av_ts2str(pkt->dts), av_ts2str(sti->cur_dts), st->index, st->id);
1166
1167 /* update flags */
1169 pkt->flags |= AV_PKT_FLAG_KEY;
1170}
1171
1172/**
1173 * Parse a packet, add all split parts to parse_queue.
1174 *
1175 * @param pkt Packet to parse; must not be NULL.
1176 * @param flush Indicates whether to flush. If set, pkt must be blank.
1177 */
1179 int stream_index, int flush)
1180{
1182 AVStream *st = s->streams[stream_index];
1183 FFStream *const sti = ffstream(st);
1184 AVPacket *out_pkt = sti->parse_pkt;
1185 const AVPacketSideData *sd = NULL;
1186 const uint8_t *data = pkt->data;
1187 uint8_t *extradata = sti->avctx->extradata;
1188 int extradata_size = sti->avctx->extradata_size;
1189 int size = pkt->size;
1190 int ret = 0, got_output = flush, pkt_side_data_consumed = 0;
1191
1192 if (!size && !flush && sti->parser->flags & PARSER_FLAG_COMPLETE_FRAMES) {
1193 // preserve 0-size sync packets
1194 compute_pkt_fields(s, st, sti->parser, pkt, pkt->dts, pkt->pts);
1195
1196 // Theora has valid 0-sized packets that need to be output
1197 if (st->codecpar->codec_id == AV_CODEC_ID_THEORA) {
1198 ret = ff_packet_list_put(&fci->parse_queue,
1199 pkt, NULL, 0);
1200 if (ret < 0)
1201 goto fail;
1202 }
1203 }
1204
1205 if (pkt->side_data_elems)
1206 sd = av_packet_side_data_get(pkt->side_data, pkt->side_data_elems,
1208 if (sd) {
1209 av_assert1(size && !flush);
1210
1211 sti->avctx->extradata = sd->data;
1212 sti->avctx->extradata_size = sd->size;
1213 }
1214
1215 while (size > 0 || (flush && got_output)) {
1216 int64_t next_pts = pkt->pts;
1217 int64_t next_dts = pkt->dts;
1218 int len;
1219
1220 len = av_parser_parse2(sti->parser, sti->avctx,
1221 &out_pkt->data, &out_pkt->size, data, size,
1222 pkt->pts, pkt->dts, pkt->pos);
1223
1224 pkt->pts = pkt->dts = AV_NOPTS_VALUE;
1225 pkt->pos = -1;
1226 /* increment read pointer */
1227 av_assert1(data || !len);
1228 data = len ? data + len : data;
1229 size -= len;
1230
1231 got_output = !!out_pkt->size;
1232
1233 if (pkt->side_data && !out_pkt->side_data) {
1234 /* for the first iteration, side_data are simply moved to output.
1235 * in case of additional iterations, they are duplicated each time. */
1236 if (!pkt_side_data_consumed) {
1237 pkt_side_data_consumed = 1;
1238 out_pkt->side_data = pkt->side_data;
1239 out_pkt->side_data_elems = pkt->side_data_elems;
1240 } else for (int i = 0; i < pkt->side_data_elems; i++) {
1241 const AVPacketSideData *const src_sd = &pkt->side_data[i];
1242 uint8_t *dst_data = av_packet_new_side_data(out_pkt, src_sd->type, src_sd->size);
1243 if (!dst_data) {
1244 ret = AVERROR(ENOMEM);
1245 goto fail;
1246 }
1247 memcpy(dst_data, src_sd->data, src_sd->size);
1248 }
1249 }
1250
1251 if (!out_pkt->size)
1252 continue;
1253
1254 if (pkt->buf && out_pkt->data == pkt->data) {
1255 /* reference pkt->buf only when out_pkt->data is guaranteed to point
1256 * to data in it and not in the parser's internal buffer. */
1257 /* XXX: Ensure this is the case with all parsers when sti->parser->flags
1258 * is PARSER_FLAG_COMPLETE_FRAMES and check for that instead? */
1259 out_pkt->buf = av_buffer_ref(pkt->buf);
1260 if (!out_pkt->buf) {
1261 ret = AVERROR(ENOMEM);
1262 goto fail;
1263 }
1264 } else {
1265 ret = av_packet_make_refcounted(out_pkt);
1266 if (ret < 0)
1267 goto fail;
1268 }
1269
1270 /* set the duration */
1271 out_pkt->duration = (sti->parser->flags & PARSER_FLAG_COMPLETE_FRAMES) ? pkt->duration : 0;
1273 if (sti->avctx->sample_rate > 0 && !out_pkt->duration && sti->parser->duration > 0) {
1274 out_pkt->duration =
1276 (AVRational) { 1, sti->avctx->sample_rate },
1277 st->time_base,
1279 }
1280 } else if (st->codecpar->codec_id == AV_CODEC_ID_GIF) {
1281 if (st->time_base.num > 0 && st->time_base.den > 0 &&
1282 sti->parser->duration) {
1283 out_pkt->duration = sti->parser->duration;
1284 }
1285 }
1286
1287 out_pkt->stream_index = st->index;
1288 out_pkt->pts = sti->parser->pts;
1289 out_pkt->dts = sti->parser->dts;
1290 out_pkt->pos = sti->parser->pos;
1291 out_pkt->flags |= pkt->flags & (AV_PKT_FLAG_DISCARD | AV_PKT_FLAG_CORRUPT);
1292
1294 out_pkt->pos = sti->parser->frame_offset;
1295
1296 if (sti->parser->key_frame == 1 ||
1297 (sti->parser->key_frame == -1 &&
1299 out_pkt->flags |= AV_PKT_FLAG_KEY;
1300
1301 if (sti->parser->key_frame == -1 && sti->parser->pict_type ==AV_PICTURE_TYPE_NONE && (pkt->flags&AV_PKT_FLAG_KEY))
1302 out_pkt->flags |= AV_PKT_FLAG_KEY;
1303
1304 compute_pkt_fields(s, st, sti->parser, out_pkt, next_dts, next_pts);
1305
1306 ret = ff_packet_list_put(&fci->parse_queue,
1307 out_pkt, NULL, 0);
1308 if (ret < 0)
1309 goto fail;
1310 }
1311
1312 /* end of the stream => close and free the parser */
1313 if (flush) {
1314 av_parser_close(sti->parser);
1315 sti->parser = NULL;
1316 }
1317
1318fail:
1319 if (sd) {
1320 sti->avctx->extradata = extradata;
1321 sti->avctx->extradata_size = extradata_size;
1322 }
1323 if (pkt_side_data_consumed) {
1324 pkt->side_data = NULL;
1325 pkt->side_data_elems = 0;
1326 }
1327
1328 if (ret < 0)
1329 av_packet_unref(out_pkt);
1331 return ret;
1332}
1333
1335{
1336 return av_rescale(ts, st->time_base.num * st->codecpar->sample_rate, st->time_base.den);
1337}
1338
1339static int codec_close(FFStream *sti)
1340{
1341 AVCodecContext *avctx_new = NULL;
1342 AVCodecParameters *par_tmp = NULL;
1343 const AVCodec *new_codec = NULL;
1344 int ret;
1345
1346 new_codec =
1347 (sti->avctx->codec_id != sti->pub.codecpar->codec_id) ?
1349 sti->avctx->codec;
1350
1351 avctx_new = avcodec_alloc_context3(new_codec);
1352 if (!avctx_new) {
1353 ret = AVERROR(ENOMEM);
1354 goto fail;
1355 }
1356
1357 par_tmp = avcodec_parameters_alloc();
1358 if (!par_tmp) {
1359 ret = AVERROR(ENOMEM);
1360 goto fail;
1361 }
1362
1363 ret = avcodec_parameters_from_context(par_tmp, sti->avctx);
1364 if (ret < 0)
1365 goto fail;
1366
1367 ret = avcodec_parameters_to_context(avctx_new, par_tmp);
1368 if (ret < 0)
1369 goto fail;
1370
1371 avctx_new->pkt_timebase = sti->avctx->pkt_timebase;
1372
1374 sti->avctx = avctx_new;
1375
1376 avctx_new = NULL;
1377 ret = 0;
1378
1379fail:
1380 avcodec_free_context(&avctx_new);
1381 avcodec_parameters_free(&par_tmp);
1382
1383 return ret;
1384}
1385
1386static int extract_extradata(FFFormatContext *si, AVStream *st, const AVPacket *pkt);
1387
1389{
1391 FFFormatContext *const si = &fci->fc;
1392 int ret, got_packet = 0;
1394
1395 while (!got_packet && !fci->parse_queue.head) {
1396 AVStream *st;
1397 FFStream *sti;
1398
1399 /* read next packet */
1400 ret = ff_read_packet(s, pkt);
1401 if (ret < 0) {
1402 if (ret == AVERROR(EAGAIN))
1403 return ret;
1404 /* flush the parsers */
1405 for (unsigned i = 0; i < s->nb_streams; i++) {
1406 AVStream *const st = s->streams[i];
1407 FFStream *const sti = ffstream(st);
1408 if (sti->parser && sti->need_parsing)
1409 parse_packet(s, pkt, st->index, 1);
1410 }
1411 /* all remaining packets are now in parse_queue =>
1412 * really terminate parsing */
1413 break;
1414 }
1415 ret = 0;
1416 st = s->streams[pkt->stream_index];
1417 sti = ffstream(st);
1418
1420
1421 int new_extradata = !!av_packet_side_data_get(pkt->side_data, pkt->side_data_elems,
1423 if (new_extradata)
1424 sti->need_context_update = 1;
1425
1426 /* update context if required */
1427 if (sti->need_context_update) {
1428 if (avcodec_is_open(sti->avctx)) {
1429 av_log(s, AV_LOG_DEBUG, "Demuxer context update while decoder is open, closing and trying to re-open\n");
1430 ret = codec_close(sti);
1431 sti->info->found_decoder = 0;
1432 if (ret < 0)
1433 return ret;
1434 }
1435
1436 /* close parser, because it depends on the codec and extradata */
1437 if (sti->parser &&
1438 (sti->avctx->codec_id != st->codecpar->codec_id || new_extradata)) {
1439 av_parser_close(sti->parser);
1440 sti->parser = NULL;
1441 }
1442
1444 if (ret < 0) {
1446 return ret;
1447 }
1448
1449 if (!sti->avctx->extradata) {
1450 sti->extract_extradata.inited = 0;
1451
1452 ret = extract_extradata(si, st, pkt);
1453 if (ret < 0) {
1455 return ret;
1456 }
1457 }
1458
1460
1461 sti->need_context_update = 0;
1462 }
1463
1464 if (pkt->pts != AV_NOPTS_VALUE &&
1465 pkt->dts != AV_NOPTS_VALUE &&
1466 pkt->pts < pkt->dts) {
1468 "Invalid timestamps stream=%d, pts=%s, dts=%s, size=%d\n",
1469 pkt->stream_index,
1470 av_ts2str(pkt->pts),
1471 av_ts2str(pkt->dts),
1472 pkt->size);
1473 }
1474 if (s->debug & AV_FDEBUG_TS)
1476 "ff_read_packet stream=%d, pts=%s, dts=%s, size=%d, duration=%"PRId64", flags=%d\n",
1477 pkt->stream_index,
1478 av_ts2str(pkt->pts),
1479 av_ts2str(pkt->dts),
1480 pkt->size, pkt->duration, pkt->flags);
1481
1482 if (sti->need_parsing && !sti->parser && !(s->flags & AVFMT_FLAG_NOPARSE)) {
1484 if (!sti->parser) {
1485 av_log(s, AV_LOG_VERBOSE, "parser not found for codec "
1486 "%s, packets or times may be invalid.\n",
1488 /* no parser available: just output the raw packets */
1490 } else if (sti->need_parsing == AVSTREAM_PARSE_HEADERS)
1492 else if (sti->need_parsing == AVSTREAM_PARSE_FULL_ONCE)
1493 sti->parser->flags |= PARSER_FLAG_ONCE;
1494 else if (sti->need_parsing == AVSTREAM_PARSE_FULL_RAW)
1496 }
1497
1498 if (!sti->need_parsing || !sti->parser) {
1499 /* no parsing needed: we just output the packet as is */
1501 if ((s->iformat->flags & AVFMT_GENERIC_INDEX) &&
1502 (pkt->flags & AV_PKT_FLAG_KEY) && pkt->dts != AV_NOPTS_VALUE) {
1503 ff_reduce_index(s, st->index);
1504 av_add_index_entry(st, pkt->pos, pkt->dts,
1505 0, 0, AVINDEX_KEYFRAME);
1506 }
1507 got_packet = 1;
1508 } else if (st->discard < AVDISCARD_ALL) {
1509 if ((ret = parse_packet(s, pkt, pkt->stream_index, 0)) < 0)
1510 return ret;
1512 st->codecpar->bit_rate = sti->avctx->bit_rate;
1514 if (ret < 0)
1515 return ret;
1516 st->codecpar->codec_id = sti->avctx->codec_id;
1517 } else {
1518 /* free packet */
1520 }
1521 if (pkt->flags & AV_PKT_FLAG_KEY)
1522 sti->skip_to_keyframe = 0;
1523 if (sti->skip_to_keyframe) {
1525 got_packet = 0;
1526 }
1527 }
1528
1529 if (!got_packet && fci->parse_queue.head)
1530 ret = ff_packet_list_get(&fci->parse_queue, pkt);
1531
1532 if (ret >= 0) {
1533 AVStream *const st = s->streams[pkt->stream_index];
1534 FFStream *const sti = ffstream(st);
1535 int discard_padding = 0;
1536 if (sti->first_discard_sample && pkt->pts != AV_NOPTS_VALUE) {
1537 int64_t pts = pkt->pts - (is_relative(pkt->pts) ? RELATIVE_TS_BASE : 0);
1539 int64_t duration = FFMAX(st->codecpar->frame_size, ts_to_samples(st, pkt->duration));
1540 int64_t end_sample = sample + duration;
1541 if (duration > 0 && end_sample >= sti->first_discard_sample &&
1542 sample < sti->last_discard_sample)
1543 discard_padding = FFMIN(end_sample - sti->first_discard_sample, duration);
1544 }
1545 if (sti->start_skip_samples && (pkt->pts == 0 || pkt->pts == RELATIVE_TS_BASE))
1546 sti->skip_samples = sti->start_skip_samples;
1547 sti->skip_samples = FFMAX(0, sti->skip_samples);
1548 if (sti->skip_samples || discard_padding) {
1550 if (p) {
1551 AV_WL32(p, sti->skip_samples);
1552 AV_WL32(p + 4, discard_padding);
1553 av_log(s, AV_LOG_DEBUG, "demuxer injecting skip %u / discard %u\n",
1554 (unsigned)sti->skip_samples, (unsigned)discard_padding);
1555 }
1556 sti->skip_samples = 0;
1557 }
1558 }
1559
1560 if (!fci->metafree) {
1561 int metaret = av_opt_get_dict_val(s, "metadata", AV_OPT_SEARCH_CHILDREN, &metadata);
1562 if (metadata) {
1563 s->event_flags |= AVFMT_EVENT_FLAG_METADATA_UPDATED;
1564 av_dict_copy(&s->metadata, metadata, 0);
1567 }
1568 fci->metafree = metaret == AVERROR_OPTION_NOT_FOUND;
1569 }
1570
1571 if (s->debug & AV_FDEBUG_TS)
1573 "read_frame_internal stream=%d, pts=%s, dts=%s, "
1574 "size=%d, duration=%"PRId64", flags=%d\n",
1575 pkt->stream_index,
1576 av_ts2str(pkt->pts),
1577 av_ts2str(pkt->dts),
1578 pkt->size, pkt->duration, pkt->flags);
1579
1580 /* A demuxer might have returned EOF because of an IO error, let's
1581 * propagate this back to the user. */
1582 if (ret == AVERROR_EOF && s->pb && s->pb->error < 0 && s->pb->error != AVERROR(EAGAIN))
1583 ret = s->pb->error;
1584
1585 return ret;
1586}
1587
1589{
1590 FFFormatContext *const si = ffformatcontext(s);
1591 const int genpts = s->flags & AVFMT_FLAG_GENPTS;
1592 int eof = 0;
1593 int ret;
1594 AVStream *st;
1595
1596 if (!genpts) {
1597 ret = si->packet_buffer.head
1600 if (ret < 0)
1601 return ret;
1602 goto return_packet;
1603 }
1604
1605 for (;;) {
1607
1608 if (pktl) {
1609 AVPacket *next_pkt = &pktl->pkt;
1610
1611 if (next_pkt->dts != AV_NOPTS_VALUE) {
1612 int wrap_bits = s->streams[next_pkt->stream_index]->pts_wrap_bits;
1613 // last dts seen for this stream. if any of packets following
1614 // current one had no dts, we will set this to AV_NOPTS_VALUE.
1615 int64_t last_dts = next_pkt->dts;
1616 av_assert2(wrap_bits <= 64);
1617 while (pktl && next_pkt->pts == AV_NOPTS_VALUE) {
1618 if (pktl->pkt.stream_index == next_pkt->stream_index &&
1619 av_compare_mod(next_pkt->dts, pktl->pkt.dts, 2ULL << (wrap_bits - 1)) < 0) {
1620 if (av_compare_mod(pktl->pkt.pts, pktl->pkt.dts, 2ULL << (wrap_bits - 1))) {
1621 // not B-frame
1622 next_pkt->pts = pktl->pkt.dts;
1623 }
1624 if (last_dts != AV_NOPTS_VALUE) {
1625 // Once last dts was set to AV_NOPTS_VALUE, we don't change it.
1626 last_dts = pktl->pkt.dts;
1627 }
1628 }
1629 pktl = pktl->next;
1630 }
1631 if (eof && next_pkt->pts == AV_NOPTS_VALUE && last_dts != AV_NOPTS_VALUE) {
1632 // Fixing the last reference frame had none pts issue (For MXF etc).
1633 // We only do this when
1634 // 1. eof.
1635 // 2. we are not able to resolve a pts value for current packet.
1636 // 3. the packets for this stream at the end of the files had valid dts.
1637 next_pkt->pts = last_dts + next_pkt->duration;
1638 }
1639 pktl = si->packet_buffer.head;
1640 }
1641
1642 /* read packet from packet buffer, if there is data */
1643 st = s->streams[next_pkt->stream_index];
1644 if (!(next_pkt->pts == AV_NOPTS_VALUE && st->discard < AVDISCARD_ALL &&
1645 next_pkt->dts != AV_NOPTS_VALUE && !eof)) {
1647 goto return_packet;
1648 }
1649 }
1650
1651 ret = read_frame_internal(s, pkt);
1652 if (ret < 0) {
1653 if (pktl && ret != AVERROR(EAGAIN)) {
1654 eof = 1;
1655 continue;
1656 } else
1657 return ret;
1658 }
1659
1661 pkt, NULL, 0);
1662 if (ret < 0) {
1664 return ret;
1665 }
1666 }
1667
1668return_packet:
1669 st = s->streams[pkt->stream_index];
1670 if ((s->iformat->flags & AVFMT_GENERIC_INDEX) && pkt->flags & AV_PKT_FLAG_KEY) {
1671 ff_reduce_index(s, st->index);
1672 av_add_index_entry(st, pkt->pos, pkt->dts, 0, 0, AVINDEX_KEYFRAME);
1673 }
1674
1675 if (is_relative(pkt->dts))
1676 pkt->dts -= RELATIVE_TS_BASE;
1677 if (is_relative(pkt->pts))
1678 pkt->pts -= RELATIVE_TS_BASE;
1679
1680 return ret;
1681}
1682
1683/**
1684 * Return TRUE if the stream has accurate duration in any stream.
1685 *
1686 * @return TRUE if the stream has accurate duration for at least one component.
1687 */
1689{
1690 for (unsigned i = 0; i < ic->nb_streams; i++) {
1691 const AVStream *const st = ic->streams[i];
1692 if (st->duration != AV_NOPTS_VALUE)
1693 return 1;
1694 }
1695 if (ic->duration != AV_NOPTS_VALUE)
1696 return 1;
1697 return 0;
1698}
1699
1700/**
1701 * Estimate the stream timings from the one of each components.
1702 *
1703 * Also computes the global bitrate if possible.
1704 */
1706{
1707 int64_t start_time, start_time1, start_time_text, end_time, end_time1, end_time_text;
1708 int64_t duration, duration1, duration_text, filesize;
1709
1710 start_time = INT64_MAX;
1711 start_time_text = INT64_MAX;
1712 end_time = INT64_MIN;
1713 end_time_text = INT64_MIN;
1714 duration = INT64_MIN;
1715 duration_text = INT64_MIN;
1716
1717 for (unsigned i = 0; i < ic->nb_streams; i++) {
1718 AVStream *const st = ic->streams[i];
1719 int is_text = st->codecpar->codec_type == AVMEDIA_TYPE_SUBTITLE ||
1721
1722 if (st->start_time != AV_NOPTS_VALUE && st->time_base.den) {
1723 start_time1 = av_rescale_q(st->start_time, st->time_base,
1725 if (is_text)
1726 start_time_text = FFMIN(start_time_text, start_time1);
1727 else
1728 start_time = FFMIN(start_time, start_time1);
1729 end_time1 = av_rescale_q_rnd(st->duration, st->time_base,
1732 if (end_time1 != AV_NOPTS_VALUE && (end_time1 > 0 ? start_time1 <= INT64_MAX - end_time1 : start_time1 >= INT64_MIN - end_time1)) {
1733 end_time1 += start_time1;
1734 if (is_text)
1735 end_time_text = FFMAX(end_time_text, end_time1);
1736 else
1737 end_time = FFMAX(end_time, end_time1);
1738 }
1739 for (AVProgram *p = NULL; (p = av_find_program_from_stream(ic, p, i)); ) {
1740 if (p->start_time == AV_NOPTS_VALUE || p->start_time > start_time1)
1741 p->start_time = start_time1;
1742 if (p->end_time < end_time1)
1743 p->end_time = end_time1;
1744 }
1745 }
1746 if (st->duration != AV_NOPTS_VALUE) {
1747 duration1 = av_rescale_q(st->duration, st->time_base,
1749 if (is_text)
1750 duration_text = FFMAX(duration_text, duration1);
1751 else
1752 duration = FFMAX(duration, duration1);
1753 }
1754 }
1755 if (start_time == INT64_MAX || (start_time > start_time_text && start_time - (uint64_t)start_time_text < AV_TIME_BASE))
1756 start_time = start_time_text;
1757 else if (start_time > start_time_text)
1758 av_log(ic, AV_LOG_VERBOSE, "Ignoring outlier non primary stream starttime %f\n", start_time_text / (float)AV_TIME_BASE);
1759
1760 if (end_time == INT64_MIN || (end_time < end_time_text && end_time_text - (uint64_t)end_time < AV_TIME_BASE))
1761 end_time = end_time_text;
1762 else if (end_time < end_time_text)
1763 av_log(ic, AV_LOG_VERBOSE, "Ignoring outlier non primary stream endtime %f\n", end_time_text / (float)AV_TIME_BASE);
1764
1765 if (duration == INT64_MIN || (duration < duration_text && (uint64_t)duration_text - duration < AV_TIME_BASE))
1766 duration = duration_text;
1767 else if (duration < duration_text)
1768 av_log(ic, AV_LOG_VERBOSE, "Ignoring outlier non primary stream duration %f\n", duration_text / (float)AV_TIME_BASE);
1769
1770 if (start_time != INT64_MAX) {
1771 ic->start_time = start_time;
1772 if (end_time != INT64_MIN) {
1773 if (ic->nb_programs > 1) {
1774 for (unsigned i = 0; i < ic->nb_programs; i++) {
1775 AVProgram *const p = ic->programs[i];
1776
1777 if (p->start_time != AV_NOPTS_VALUE &&
1778 p->end_time > p->start_time &&
1779 p->end_time - (uint64_t)p->start_time <= INT64_MAX)
1780 duration = FFMAX(duration, p->end_time - p->start_time);
1781 }
1782 } else if (end_time >= start_time && end_time - (uint64_t)start_time <= INT64_MAX) {
1783 duration = FFMAX(duration, end_time - start_time);
1784 }
1785 }
1786 }
1787 if (duration != INT64_MIN && duration > 0 && ic->duration == AV_NOPTS_VALUE) {
1788 ic->duration = duration;
1789 }
1790 if (ic->pb && (filesize = avio_size(ic->pb)) > 0 && ic->duration > 0) {
1791 /* compute the bitrate */
1792 double bitrate = (double) filesize * 8.0 * AV_TIME_BASE /
1793 (double) ic->duration;
1794 if (bitrate >= 0 && bitrate <= INT64_MAX)
1795 ic->bit_rate = bitrate;
1796 }
1797}
1798
1800{
1802 for (unsigned i = 0; i < ic->nb_streams; i++) {
1803 AVStream *const st = ic->streams[i];
1804
1805 if (st->start_time == AV_NOPTS_VALUE) {
1806 if (ic->start_time != AV_NOPTS_VALUE)
1808 st->time_base);
1809 if (ic->duration != AV_NOPTS_VALUE)
1811 st->time_base);
1812 }
1813 }
1814}
1815
1817{
1818 FFFormatContext *const si = ffformatcontext(ic);
1819 int show_warning = 0;
1820
1821 /* if bit_rate is already set, we believe it */
1822 if (ic->bit_rate <= 0) {
1823 int64_t bit_rate = 0;
1824 for (unsigned i = 0; i < ic->nb_streams; i++) {
1825 const AVStream *const st = ic->streams[i];
1826 const FFStream *const sti = cffstream(st);
1827 if (st->codecpar->bit_rate <= 0 && sti->avctx->bit_rate > 0)
1828 st->codecpar->bit_rate = sti->avctx->bit_rate;
1829 if (st->codecpar->bit_rate > 0) {
1830 if (INT64_MAX - st->codecpar->bit_rate < bit_rate) {
1831 bit_rate = 0;
1832 break;
1833 }
1834 bit_rate += st->codecpar->bit_rate;
1835 } else if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO && sti->codec_info_nb_frames > 1) {
1836 // If we have a videostream with packets but without a bitrate
1837 // then consider the sum not known
1838 bit_rate = 0;
1839 break;
1840 }
1841 }
1842 ic->bit_rate = bit_rate;
1843 }
1844
1845 /* if duration is already set, we believe it */
1846 if (ic->duration == AV_NOPTS_VALUE &&
1847 ic->bit_rate != 0) {
1848 int64_t filesize = ic->pb ? avio_size(ic->pb) : 0;
1849 if (filesize > si->data_offset) {
1850 filesize -= si->data_offset;
1851 for (unsigned i = 0; i < ic->nb_streams; i++) {
1852 AVStream *const st = ic->streams[i];
1853
1854 if ( st->time_base.num <= INT64_MAX / ic->bit_rate
1855 && st->duration == AV_NOPTS_VALUE) {
1856 st->duration = av_rescale(filesize, 8LL * st->time_base.den,
1857 ic->bit_rate *
1858 (int64_t) st->time_base.num);
1859 show_warning = 1;
1860 }
1861 }
1862 }
1863 }
1864 if (show_warning)
1866 "Estimating duration from bitrate, this may be inaccurate\n");
1867}
1868
1869#define DURATION_DEFAULT_MAX_READ_SIZE 250000LL
1870#define DURATION_DEFAULT_MAX_RETRY 6
1871#define DURATION_MAX_RETRY 1
1872
1873/* only usable for MPEG-PS streams */
1875{
1876 FFFormatContext *const si = ffformatcontext(ic);
1877 AVPacket *const pkt = si->pkt;
1878 int num, den, read_size, ret;
1880 int duration_max_retry = ic->duration_probesize ? DURATION_MAX_RETRY : DURATION_DEFAULT_MAX_RETRY;
1881 int found_duration = 0;
1882 int is_end;
1884 int retry = 0;
1885
1886 /* flush packet queue */
1888
1889 for (unsigned i = 0; i < ic->nb_streams; i++) {
1890 AVStream *const st = ic->streams[i];
1891 FFStream *const sti = ffstream(st);
1892
1893 if (st->start_time == AV_NOPTS_VALUE &&
1894 sti->first_dts == AV_NOPTS_VALUE &&
1897 "start time for stream %d is not set in estimate_timings_from_pts\n", i);
1898
1899 if (sti->parser) {
1900 av_parser_close(sti->parser);
1901 sti->parser = NULL;
1902 }
1903 }
1904
1906 av_log(ic, AV_LOG_INFO, "Skipping duration calculation in estimate_timings_from_pts\n");
1907 goto skip_duration_calc;
1908 }
1909
1910 av_opt_set_int(ic, "skip_changes", 1, AV_OPT_SEARCH_CHILDREN);
1911 /* estimate the end time (duration) */
1912 /* XXX: may need to support wrapping */
1913 filesize = ic->pb ? avio_size(ic->pb) : 0;
1914 do {
1915 is_end = found_duration;
1916 offset = filesize - (duration_max_read_size << retry);
1917 if (offset < 0)
1918 offset = 0;
1919
1920 avio_seek(ic->pb, offset, SEEK_SET);
1921 read_size = 0;
1922 for (;;) {
1923 AVStream *st;
1924 FFStream *sti;
1925 if (read_size >= duration_max_read_size << (FFMAX(retry - 1, 0)))
1926 break;
1927
1928 do {
1929 ret = ff_read_packet(ic, pkt);
1930 } while (ret == AVERROR(EAGAIN));
1931 if (ret != 0)
1932 break;
1933 read_size += pkt->size;
1934 st = ic->streams[pkt->stream_index];
1935 sti = ffstream(st);
1936 if (pkt->pts != AV_NOPTS_VALUE &&
1937 (st->start_time != AV_NOPTS_VALUE ||
1938 sti->first_dts != AV_NOPTS_VALUE)) {
1939 if (pkt->duration == 0) {
1940 compute_frame_duration(ic, &num, &den, st, sti->parser, pkt);
1941 if (den && num) {
1942 pkt->duration = av_rescale_rnd(1,
1943 num * (int64_t) st->time_base.den,
1944 den * (int64_t) st->time_base.num,
1946 }
1947 }
1948 duration = pkt->pts + pkt->duration;
1949 found_duration = 1;
1950 if (st->start_time != AV_NOPTS_VALUE)
1951 duration -= st->start_time;
1952 else
1953 duration -= sti->first_dts;
1954 if (duration > 0) {
1955 if (st->duration == AV_NOPTS_VALUE || sti->info->last_duration<= 0 ||
1956 (st->duration < duration && FFABS(duration - sti->info->last_duration) < 60LL*st->time_base.den / st->time_base.num))
1957 st->duration = duration;
1958 sti->info->last_duration = duration;
1959 }
1960 }
1962 }
1963
1964 /* check if all audio/video streams have valid duration */
1965 if (!is_end) {
1966 is_end = 1;
1967 for (unsigned i = 0; i < ic->nb_streams; i++) {
1968 const AVStream *const st = ic->streams[i];
1969 switch (st->codecpar->codec_type) {
1970 case AVMEDIA_TYPE_VIDEO:
1971 case AVMEDIA_TYPE_AUDIO:
1972 if (st->duration == AV_NOPTS_VALUE)
1973 is_end = 0;
1974 }
1975 }
1976 }
1977 } while (!is_end &&
1978 offset &&
1979 ++retry <= duration_max_retry);
1980
1981 av_opt_set_int(ic, "skip_changes", 0, AV_OPT_SEARCH_CHILDREN);
1982
1983 /* warn about audio/video streams which duration could not be estimated */
1984 for (unsigned i = 0; i < ic->nb_streams; i++) {
1985 const AVStream *const st = ic->streams[i];
1986 const FFStream *const sti = cffstream(st);
1987
1988 if (st->duration == AV_NOPTS_VALUE) {
1989 switch (st->codecpar->codec_type) {
1990 case AVMEDIA_TYPE_VIDEO:
1991 case AVMEDIA_TYPE_AUDIO:
1992 if (st->start_time != AV_NOPTS_VALUE || sti->first_dts != AV_NOPTS_VALUE) {
1993 av_log(ic, AV_LOG_WARNING, "stream %d : no PTS found at end of file, duration not set\n", i);
1994 } else
1995 av_log(ic, AV_LOG_WARNING, "stream %d : no TS found at start of file, duration not set\n", i);
1996 }
1997 }
1998 }
1999skip_duration_calc:
2001
2002 avio_seek(ic->pb, old_offset, SEEK_SET);
2003 for (unsigned i = 0; i < ic->nb_streams; i++) {
2004 AVStream *const st = ic->streams[i];
2005 FFStream *const sti = ffstream(st);
2006
2007 sti->cur_dts = sti->first_dts;
2010 for (int j = 0; j < MAX_REORDER_DELAY + 1; j++)
2011 sti->pts_buffer[j] = AV_NOPTS_VALUE;
2012 }
2013}
2014
2015/* 1:1 map to AVDurationEstimationMethod */
2016static const char *const duration_name[] = {
2017 [AVFMT_DURATION_FROM_PTS] = "pts",
2018 [AVFMT_DURATION_FROM_STREAM] = "stream",
2019 [AVFMT_DURATION_FROM_BITRATE] = "bit rate",
2020};
2021
2023{
2024 return duration_name[method];
2025}
2026
2027static void estimate_timings(AVFormatContext *ic, int64_t old_offset)
2028{
2029 int64_t file_size;
2030
2031 /* get the file size, if possible */
2032 if (ic->iformat->flags & AVFMT_NOFILE) {
2033 file_size = 0;
2034 } else {
2035 file_size = avio_size(ic->pb);
2036 file_size = FFMAX(0, file_size);
2037 }
2038
2039 if ((!strcmp(ic->iformat->name, "mpeg") ||
2040 !strcmp(ic->iformat->name, "mpegts")) &&
2041 file_size && (ic->pb->seekable & AVIO_SEEKABLE_NORMAL)) {
2042 /* get accurate estimate from the PTSes */
2043 estimate_timings_from_pts(ic, old_offset);
2045 } else if (has_duration(ic)) {
2046 /* at least one component has timings - we use them for all
2047 * the components */
2049 /* nut demuxer estimate the duration from PTS */
2050 if (!strcmp(ic->iformat->name, "nut"))
2052 else
2054 } else {
2055 /* less precise: use bitrate info */
2058 }
2060
2061 for (unsigned i = 0; i < ic->nb_streams; i++) {
2062 AVStream *const st = ic->streams[i];
2063 if (st->time_base.den)
2064 av_log(ic, AV_LOG_TRACE, "stream %u: start_time: %s duration: %s\n", i,
2066 av_ts2timestr(st->duration, &st->time_base));
2067 }
2068 av_log(ic, AV_LOG_TRACE,
2069 "format: start_time: %s duration: %s (estimate from %s) bitrate=%"PRId64" kb/s\n",
2073 (int64_t)ic->bit_rate / 1000);
2074}
2075
2077{
2078 switch(avctx->codec_id) {
2079 case AV_CODEC_ID_MP1:
2080 case AV_CODEC_ID_MP2:
2081 case AV_CODEC_ID_MP3:
2082 case AV_CODEC_ID_CODEC2:
2083 return 1;
2084 }
2085
2086 return 0;
2087}
2088
2089static int has_codec_parameters(const AVStream *st, const char **errmsg_ptr)
2090{
2091 const FFStream *const sti = cffstream(st);
2092 const AVCodecContext *const avctx = sti->avctx;
2093
2094#define FAIL(errmsg) do { \
2095 if (errmsg_ptr) \
2096 *errmsg_ptr = errmsg; \
2097 return 0; \
2098 } while (0)
2099
2100 if ( avctx->codec_id == AV_CODEC_ID_NONE
2101 && avctx->codec_type != AVMEDIA_TYPE_DATA)
2102 FAIL("unknown codec");
2103 switch (avctx->codec_type) {
2104 case AVMEDIA_TYPE_AUDIO:
2105 if (!avctx->frame_size && determinable_frame_size(avctx))
2106 FAIL("unspecified frame size");
2107 if (sti->info->found_decoder >= 0 &&
2109 FAIL("unspecified sample format");
2110 if (!avctx->sample_rate)
2111 FAIL("unspecified sample rate");
2112 if (!avctx->ch_layout.nb_channels)
2113 FAIL("unspecified number of channels");
2114 if (sti->info->found_decoder >= 0 && !sti->nb_decoded_frames && avctx->codec_id == AV_CODEC_ID_DTS)
2115 FAIL("no decodable DTS frames");
2116 break;
2117 case AVMEDIA_TYPE_VIDEO:
2118 if (!avctx->width)
2119 FAIL("unspecified size");
2120 if (sti->info->found_decoder >= 0 && avctx->pix_fmt == AV_PIX_FMT_NONE)
2121 FAIL("unspecified pixel format");
2124 FAIL("no frame in rv30/40 and no sar");
2125 break;
2127 if (avctx->codec_id == AV_CODEC_ID_HDMV_PGS_SUBTITLE && !avctx->width)
2128 FAIL("unspecified size");
2129 break;
2130 case AVMEDIA_TYPE_DATA:
2131 if (avctx->codec_id == AV_CODEC_ID_NONE) return 1;
2132 }
2133
2134 return 1;
2135}
2136
2137/* returns 1 or 0 if or if not decoded data was returned, or a negative error */
2139 const AVPacket *pkt, AVDictionary **options)
2140{
2141 FFStream *const sti = ffstream(st);
2142 AVCodecContext *const avctx = sti->avctx;
2143 const AVCodec *codec;
2144 int got_picture = 1, ret = 0;
2146 AVSubtitle subtitle;
2147 int do_skip_frame = 0;
2148 enum AVDiscard skip_frame;
2149 int pkt_to_send = pkt->size > 0;
2150
2151 if (!frame)
2152 return AVERROR(ENOMEM);
2153
2154 if (!avcodec_is_open(avctx) &&
2155 sti->info->found_decoder <= 0 &&
2156 (st->codecpar->codec_id != -sti->info->found_decoder || !st->codecpar->codec_id)) {
2157 AVDictionary *thread_opt = NULL;
2158
2159 codec = find_probe_decoder(s, st, st->codecpar->codec_id);
2160
2161 if (!codec) {
2162 sti->info->found_decoder = -st->codecpar->codec_id;
2163 ret = -1;
2164 goto fail;
2165 }
2166
2167 /* Force thread count to 1 since the H.264 decoder will not extract
2168 * SPS and PPS to extradata during multi-threaded decoding. */
2169 av_dict_set(options ? options : &thread_opt, "threads", "1", 0);
2170 /* Force lowres to 0. The decoder might reduce the video size by the
2171 * lowres factor, and we don't want that propagated to the stream's
2172 * codecpar */
2173 av_dict_set(options ? options : &thread_opt, "lowres", "0", 0);
2174 if (s->codec_whitelist)
2175 av_dict_set(options ? options : &thread_opt, "codec_whitelist", s->codec_whitelist, 0);
2176 ret = avcodec_open2(avctx, codec, options ? options : &thread_opt);
2177 if (!options)
2178 av_dict_free(&thread_opt);
2179 if (ret < 0) {
2180 sti->info->found_decoder = -avctx->codec_id;
2181 goto fail;
2182 }
2183 sti->info->found_decoder = 1;
2184 } else if (!sti->info->found_decoder)
2185 sti->info->found_decoder = 1;
2186
2187 if (sti->info->found_decoder < 0) {
2188 ret = -1;
2189 goto fail;
2190 }
2191
2193 do_skip_frame = 1;
2194 skip_frame = avctx->skip_frame;
2195 avctx->skip_frame = AVDISCARD_ALL;
2196 }
2197
2198 while ((pkt_to_send || (!pkt->data && got_picture)) &&
2199 ret >= 0 &&
2201 (!sti->codec_info_nb_frames &&
2203 got_picture = 0;
2204 if (avctx->codec_type == AVMEDIA_TYPE_VIDEO ||
2205 avctx->codec_type == AVMEDIA_TYPE_AUDIO) {
2206 ret = avcodec_send_packet(avctx, pkt);
2207 if (ret < 0 && ret != AVERROR(EAGAIN) && ret != AVERROR_EOF)
2208 break;
2209 if (ret >= 0)
2210 pkt_to_send = 0;
2211 ret = avcodec_receive_frame(avctx, frame);
2212 if (ret >= 0)
2213 got_picture = 1;
2214 if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF)
2215 ret = 0;
2216 } else if (avctx->codec_type == AVMEDIA_TYPE_SUBTITLE) {
2217 ret = avcodec_decode_subtitle2(avctx, &subtitle,
2218 &got_picture, pkt);
2219 if (got_picture)
2220 avsubtitle_free(&subtitle);
2221 if (ret >= 0)
2222 pkt_to_send = 0;
2223 }
2224 if (ret >= 0) {
2225 if (got_picture)
2226 sti->nb_decoded_frames++;
2227 ret = got_picture;
2228 }
2229 }
2230
2231fail:
2232 if (do_skip_frame) {
2233 avctx->skip_frame = skip_frame;
2234 }
2235
2237 return ret;
2238}
2239
2240static int chapter_start_cmp(const void *p1, const void *p2)
2241{
2242 const AVChapter *const ch1 = *(AVChapter**)p1;
2243 const AVChapter *const ch2 = *(AVChapter**)p2;
2244 int delta = av_compare_ts(ch1->start, ch1->time_base, ch2->start, ch2->time_base);
2245 if (delta)
2246 return delta;
2247 return FFDIFFSIGN(ch1->id, ch2->id);
2248}
2249
2251{
2252 int64_t max_time = 0;
2253 AVChapter **timetable;
2254
2255 if (!s->nb_chapters)
2256 return 0;
2257
2258 if (s->duration > 0 && s->start_time < INT64_MAX - s->duration)
2259 max_time = s->duration +
2260 ((s->start_time == AV_NOPTS_VALUE) ? 0 : s->start_time);
2261
2262 timetable = av_memdup(s->chapters, s->nb_chapters * sizeof(*timetable));
2263 if (!timetable)
2264 return AVERROR(ENOMEM);
2265 qsort(timetable, s->nb_chapters, sizeof(*timetable), chapter_start_cmp);
2266
2267 for (unsigned i = 0; i < s->nb_chapters; i++)
2268 if (timetable[i]->end == AV_NOPTS_VALUE) {
2269 AVChapter *const ch = timetable[i];
2270 int64_t end = max_time ? av_rescale_q(max_time, AV_TIME_BASE_Q,
2271 ch->time_base)
2272 : INT64_MAX;
2273
2274 if (i + 1 < s->nb_chapters) {
2275 const AVChapter *const ch1 = timetable[i + 1];
2276 int64_t next_start = av_rescale_q(ch1->start, ch1->time_base,
2277 ch->time_base);
2278 if (next_start > ch->start && next_start < end)
2279 end = next_start;
2280 }
2281 ch->end = (end == INT64_MAX || end < ch->start) ? ch->start : end;
2282 }
2283 av_free(timetable);
2284 return 0;
2285}
2286
2287static int get_std_framerate(int i)
2288{
2289 if (i < 30*12)
2290 return (i + 1) * 1001;
2291 i -= 30*12;
2292
2293 if (i < 30)
2294 return (i + 31) * 1001 * 12;
2295 i -= 30;
2296
2297 if (i < 3)
2298 return ((const int[]) { 80, 120, 240})[i] * 1001 * 12;
2299
2300 i -= 3;
2301
2302 return ((const int[]) { 24, 30, 60, 12, 15, 48 })[i] * 1000 * 12;
2303}
2304
2305/* Is the time base unreliable?
2306 * This is a heuristic to balance between quick acceptance of the values in
2307 * the headers vs. some extra checks.
2308 * Old DivX and Xvid often have nonsense timebases like 1fps or 2fps.
2309 * MPEG-2 commonly misuses field repeat flags to store different framerates.
2310 * And there are "variable" fps files this needs to detect as well. */
2312{
2313 FFStream *const sti = ffstream(st);
2314 const AVCodecDescriptor *desc = sti->codec_desc;
2315 AVCodecContext *c = sti->avctx;
2316 AVRational mul = (AVRational){ desc && (desc->props & AV_CODEC_PROP_FIELDS) ? 2 : 1, 1 };
2317 AVRational time_base = c->framerate.num ? av_inv_q(av_mul_q(c->framerate, mul))
2318 /* NOHEADER check added to not break existing behavior */
2319 : (((ic->ctx_flags & AVFMTCTX_NOHEADER) ||
2321 : st->time_base);
2322
2323 if (time_base.den >= 101LL * time_base.num ||
2324 time_base.den < 5LL * time_base.num ||
2325 // c->codec_tag == AV_RL32("DIVX") ||
2326 // c->codec_tag == AV_RL32("XVID") ||
2327 c->codec_tag == AV_RL32("mp4v") ||
2328 c->codec_id == AV_CODEC_ID_MPEG2VIDEO ||
2329 c->codec_id == AV_CODEC_ID_GIF ||
2330 c->codec_id == AV_CODEC_ID_HEVC ||
2331 c->codec_id == AV_CODEC_ID_H264)
2332 return 1;
2333 return 0;
2334}
2335
2337{
2338 FFStream *const sti = ffstream(st);
2339 FFStreamInfo *info = sti->info;
2340 int64_t last = info->last_dts;
2341
2342 if ( ts != AV_NOPTS_VALUE && last != AV_NOPTS_VALUE && ts > last
2343 && ts - (uint64_t)last < INT64_MAX) {
2344 double dts = (is_relative(ts) ? ts - RELATIVE_TS_BASE : ts) * av_q2d(st->time_base);
2345 int64_t duration = ts - last;
2346
2347 if (!info->duration_error)
2348 info->duration_error = av_mallocz(sizeof(info->duration_error[0])*2);
2349 if (!info->duration_error)
2350 return AVERROR(ENOMEM);
2351
2352// if (st->codec->codec_type == AVMEDIA_TYPE_VIDEO)
2353// av_log(NULL, AV_LOG_ERROR, "%f\n", dts);
2354 for (int i = 0; i < MAX_STD_TIMEBASES; i++) {
2355 if (info->duration_error[0][1][i] < 1e10) {
2357 double sdts = dts*framerate/(1001*12);
2358 for (int j = 0; j < 2; j++) {
2359 int64_t ticks = llrint(sdts+j*0.5);
2360 double error = sdts - ticks + j*0.5;
2361 info->duration_error[j][0][i] += error;
2362 info->duration_error[j][1][i] += error*error;
2363 }
2364 }
2365 }
2366 if (info->rfps_duration_sum <= INT64_MAX - duration) {
2367 info->duration_count++;
2368 info->rfps_duration_sum += duration;
2369 }
2370
2371 if (info->duration_count % 10 == 0) {
2372 int n = info->duration_count;
2373 for (int i = 0; i < MAX_STD_TIMEBASES; i++) {
2374 if (info->duration_error[0][1][i] < 1e10) {
2375 double a0 = info->duration_error[0][0][i] / n;
2376 double error0 = info->duration_error[0][1][i] / n - a0*a0;
2377 double a1 = info->duration_error[1][0][i] / n;
2378 double error1 = info->duration_error[1][1][i] / n - a1*a1;
2379 if (error0 > 0.04 && error1 > 0.04) {
2380 info->duration_error[0][1][i] = 2e10;
2381 info->duration_error[1][1][i] = 2e10;
2382 }
2383 }
2384 }
2385 }
2386
2387 // ignore the first 4 values, they might have some random jitter
2388 if (info->duration_count > 3 && is_relative(ts) == is_relative(last))
2389 info->duration_gcd = av_gcd(info->duration_gcd, duration);
2390 }
2391 if (ts != AV_NOPTS_VALUE)
2392 info->last_dts = ts;
2393
2394 return 0;
2395}
2396
2398{
2399 for (unsigned i = 0; i < ic->nb_streams; i++) {
2400 AVStream *const st = ic->streams[i];
2401 FFStream *const sti = ffstream(st);
2402
2404 continue;
2405 // the check for tb_unreliable() is not completely correct, since this is not about handling
2406 // an unreliable/inexact time base, but a time base that is finer than necessary, as e.g.
2407 // ipmovie.c produces.
2408 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 &&
2409 sti->info->duration_gcd < INT64_MAX / st->time_base.num)
2410 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);
2411 if (sti->info->duration_count > 1 && !st->r_frame_rate.num
2412 && tb_unreliable(ic, st)) {
2413 int num = 0;
2414 double best_error = 0.01;
2415 AVRational ref_rate = st->r_frame_rate.num ? st->r_frame_rate : av_inv_q(st->time_base);
2416
2417 for (int j = 0; j < MAX_STD_TIMEBASES; j++) {
2418 if (sti->info->codec_info_duration &&
2419 sti->info->codec_info_duration*av_q2d(st->time_base) < (1001*11.5)/get_std_framerate(j))
2420 continue;
2421 if (!sti->info->codec_info_duration && get_std_framerate(j) < 1001*12)
2422 continue;
2423
2424 if (av_q2d(st->time_base) * sti->info->rfps_duration_sum / sti->info->duration_count < (1001*12.0 * 0.8)/get_std_framerate(j))
2425 continue;
2426
2427 for (int k = 0; k < 2; k++) {
2428 int n = sti->info->duration_count;
2429 double a = sti->info->duration_error[k][0][j] / n;
2430 double error = sti->info->duration_error[k][1][j]/n - a*a;
2431
2432 if (error < best_error && best_error> 0.000000001) {
2433 best_error= error;
2434 num = get_std_framerate(j);
2435 }
2436 if (error < 0.02)
2437 av_log(ic, AV_LOG_DEBUG, "rfps: %f %f\n", get_std_framerate(j) / 12.0/1001, error);
2438 }
2439 }
2440 // do not increase frame rate by more than 1 % in order to match a standard rate.
2441 if (num && (!ref_rate.num || (double)num/(12*1001) < 1.01 * av_q2d(ref_rate)))
2442 av_reduce(&st->r_frame_rate.num, &st->r_frame_rate.den, num, 12*1001, INT_MAX);
2443 }
2444 if ( !st->avg_frame_rate.num
2445 && st->r_frame_rate.num && sti->info->rfps_duration_sum
2446 && sti->info->codec_info_duration <= 0
2447 && sti->info->duration_count > 2
2448 && 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
2449 ) {
2450 av_log(ic, AV_LOG_DEBUG, "Setting avg frame rate based on r frame rate\n");
2451 st->avg_frame_rate = st->r_frame_rate;
2452 }
2453
2456 sti->info->duration_count = 0;
2457 sti->info->rfps_duration_sum = 0;
2458 }
2459}
2460
2462{
2463 const AVBitStreamFilter *const f = av_bsf_get_by_name("extract_extradata");
2464 if (!f)
2465 return 0;
2466
2467 if (f->codec_ids) {
2468 const enum AVCodecID *ids;
2469 for (ids = f->codec_ids; *ids != AV_CODEC_ID_NONE; ids++)
2470 if (*ids == st->codecpar->codec_id)
2471 return 1;
2472 }
2473
2474 return 0;
2475}
2476
2478{
2479 FFStream *const sti = ffstream(st);
2480 const AVBitStreamFilter *f;
2481 int ret;
2482
2483 f = av_bsf_get_by_name("extract_extradata");
2484 if (!f)
2485 goto finish;
2486
2487 /* check that the codec id is supported */
2488 ret = extract_extradata_check(st);
2489 if (!ret)
2490 goto finish;
2491
2493 ret = av_bsf_alloc(f, &sti->extract_extradata.bsf);
2494 if (ret < 0)
2495 return ret;
2496
2498 st->codecpar);
2499 if (ret < 0)
2500 goto fail;
2501
2503
2504 ret = av_bsf_init(sti->extract_extradata.bsf);
2505 if (ret < 0)
2506 goto fail;
2507
2508finish:
2509 sti->extract_extradata.inited = 1;
2510
2511 return 0;
2512fail:
2514 return ret;
2515}
2516
2518{
2519 FFStream *const sti = ffstream(st);
2520 AVPacket *const pkt_ref = si->parse_pkt;
2521 int ret;
2522
2523 if (!sti->extract_extradata.inited) {
2524 ret = extract_extradata_init(st);
2525 if (ret < 0)
2526 return ret;
2527 }
2528
2530 return 0;
2531
2532 ret = av_packet_ref(pkt_ref, pkt);
2533 if (ret < 0)
2534 return ret;
2535
2536 ret = av_bsf_send_packet(sti->extract_extradata.bsf, pkt_ref);
2537 if (ret < 0) {
2538 av_packet_unref(pkt_ref);
2539 return ret;
2540 }
2541
2542 while (ret >= 0 && !sti->avctx->extradata) {
2543 ret = av_bsf_receive_packet(sti->extract_extradata.bsf, pkt_ref);
2544 if (ret < 0) {
2545 if (ret != AVERROR(EAGAIN) && ret != AVERROR_EOF)
2546 return ret;
2547 continue;
2548 }
2549
2550 for (int i = 0; i < pkt_ref->side_data_elems; i++) {
2551 AVPacketSideData *const side_data = &pkt_ref->side_data[i];
2552 if (side_data->type == AV_PKT_DATA_NEW_EXTRADATA) {
2553 sti->avctx->extradata = side_data->data;
2554 sti->avctx->extradata_size = side_data->size;
2555 side_data->data = NULL;
2556 side_data->size = 0;
2557 break;
2558 }
2559 }
2560 av_packet_unref(pkt_ref);
2561 }
2562
2563 return 0;
2564}
2565
2567 const AVCodecContext *avctx)
2568{
2569 AVCodecParameters *par_tmp;
2570 int ret;
2571
2572 par_tmp = avcodec_parameters_alloc();
2573 if (!par_tmp)
2574 return AVERROR(ENOMEM);
2575
2576 ret = avcodec_parameters_copy(par_tmp, par);
2577 if (ret < 0)
2578 goto fail;
2579
2580 ret = avcodec_parameters_from_context(par, avctx);
2581 if (ret < 0)
2582 goto fail;
2583
2584 /* Restore some values if they are signaled at the container level
2585 * given they may have been replaced by codec level values as read
2586 * internally by avformat_find_stream_info().
2587 */
2588 if (par_tmp->color_range != AVCOL_RANGE_UNSPECIFIED)
2589 par->color_range = par_tmp->color_range;
2590 if (par_tmp->color_primaries != AVCOL_PRI_UNSPECIFIED)
2591 par->color_primaries = par_tmp->color_primaries;
2592 if (par_tmp->color_trc != AVCOL_TRC_UNSPECIFIED)
2593 par->color_trc = par_tmp->color_trc;
2594 if (par_tmp->color_space != AVCOL_SPC_UNSPECIFIED)
2595 par->color_space = par_tmp->color_space;
2597 par->chroma_location = par_tmp->chroma_location;
2598
2599 ret = 0;
2600fail:
2601 avcodec_parameters_free(&par_tmp);
2602
2603 return ret;
2604}
2605
2607{
2608 FFFormatContext *const si = ffformatcontext(ic);
2609 int count = 0, ret = 0, err;
2610 int64_t read_size;
2611 AVPacket *pkt1 = si->pkt;
2612 int64_t old_offset = avio_tell(ic->pb);
2613 // new streams might appear, no options for those
2614 int orig_nb_streams = ic->nb_streams;
2615 int flush_codecs;
2616 int64_t max_analyze_duration = ic->max_analyze_duration;
2617 int64_t max_stream_analyze_duration;
2618 int64_t max_subtitle_analyze_duration;
2619 int64_t probesize = ic->probesize;
2620 int eof_reached = 0;
2621
2622 flush_codecs = probesize > 0;
2623
2624 av_opt_set_int(ic, "skip_clear", 1, AV_OPT_SEARCH_CHILDREN);
2625
2626 max_stream_analyze_duration = max_analyze_duration;
2627 max_subtitle_analyze_duration = max_analyze_duration;
2628 if (!max_analyze_duration) {
2629 max_stream_analyze_duration =
2630 max_analyze_duration = 5*AV_TIME_BASE;
2631 max_subtitle_analyze_duration = 30*AV_TIME_BASE;
2632 if (!strcmp(ic->iformat->name, "flv"))
2633 max_stream_analyze_duration = 90*AV_TIME_BASE;
2634 if (!strcmp(ic->iformat->name, "mpeg") || !strcmp(ic->iformat->name, "mpegts"))
2635 max_stream_analyze_duration = 7*AV_TIME_BASE;
2636 }
2637
2638 if (ic->pb) {
2639 FFIOContext *const ctx = ffiocontext(ic->pb);
2640 av_log(ic, AV_LOG_DEBUG, "Before avformat_find_stream_info() pos: %"PRId64" bytes read:%"PRId64" seeks:%d nb_streams:%d\n",
2641 avio_tell(ic->pb), ctx->bytes_read, ctx->seek_count, ic->nb_streams);
2642 }
2643
2644 for (unsigned i = 0; i < ic->nb_streams; i++) {
2645 const AVCodec *codec;
2646 AVDictionary *thread_opt = NULL;
2647 AVStream *const st = ic->streams[i];
2648 FFStream *const sti = ffstream(st);
2649 AVCodecContext *const avctx = sti->avctx;
2650
2651 /* check if the caller has overridden the codec id */
2652 // only for the split stuff
2653 if (!sti->parser && !(ic->flags & AVFMT_FLAG_NOPARSE) && sti->request_probe <= 0) {
2655 if (sti->parser) {
2658 } else if (sti->need_parsing == AVSTREAM_PARSE_FULL_RAW) {
2660 }
2661 } else if (sti->need_parsing) {
2662 av_log(ic, AV_LOG_VERBOSE, "parser not found for codec "
2663 "%s, packets or times may be invalid.\n",
2665 }
2666 }
2667
2668 ret = avcodec_parameters_to_context(avctx, st->codecpar);
2669 if (ret < 0)
2670 goto find_stream_info_err;
2671 if (sti->request_probe <= 0)
2672 sti->avctx_inited = 1;
2673
2674 codec = find_probe_decoder(ic, st, st->codecpar->codec_id);
2675
2676 /* Force thread count to 1 since the H.264 decoder will not extract
2677 * SPS and PPS to extradata during multi-threaded decoding. */
2678 av_dict_set(options ? &options[i] : &thread_opt, "threads", "1", 0);
2679 /* Force lowres to 0. The decoder might reduce the video size by the
2680 * lowres factor, and we don't want that propagated to the stream's
2681 * codecpar */
2682 av_dict_set(options ? &options[i] : &thread_opt, "lowres", "0", 0);
2683
2684 if (ic->codec_whitelist)
2685 av_dict_set(options ? &options[i] : &thread_opt, "codec_whitelist", ic->codec_whitelist, 0);
2686
2687 // Try to just open decoders, in case this is enough to get parameters.
2688 // Also ensure that subtitle_header is properly set.
2689 if (!has_codec_parameters(st, NULL) && sti->request_probe <= 0 ||
2691 if (codec && !avctx->codec)
2692 if (avcodec_open2(avctx, codec, options ? &options[i] : &thread_opt) < 0)
2694 "Failed to open codec in %s\n", __func__);
2695 }
2696 if (!options)
2697 av_dict_free(&thread_opt);
2698 }
2699
2700 read_size = 0;
2701 for (;;) {
2702 const AVPacket *pkt;
2703 AVStream *st;
2704 FFStream *sti;
2705 AVCodecContext *avctx;
2706 int analyzed_all_streams;
2707 unsigned i;
2709 ret = AVERROR_EXIT;
2710 av_log(ic, AV_LOG_DEBUG, "interrupted\n");
2711 break;
2712 }
2713
2714 /* read_frame_internal() in a previous iteration of this loop may
2715 * have made changes to streams without returning a packet for them.
2716 * Handle that here. */
2717 ret = update_stream_avctx(ic);
2718 if (ret < 0)
2719 goto unref_then_goto_end;
2720
2721 /* check if one codec still needs to be handled */
2722 for (i = 0; i < ic->nb_streams; i++) {
2723 AVStream *const st = ic->streams[i];
2724 FFStream *const sti = ffstream(st);
2725 int fps_analyze_framecount = 20;
2726 int count;
2727
2728 if (!has_codec_parameters(st, NULL))
2729 break;
2730 /* If the timebase is coarse (like the usual millisecond precision
2731 * of mkv), we need to analyze more frames to reliably arrive at
2732 * the correct fps. */
2733 if (av_q2d(st->time_base) > 0.0005)
2734 fps_analyze_framecount *= 2;
2735 if (!tb_unreliable(ic, st))
2736 fps_analyze_framecount = 0;
2737 if (ic->fps_probe_size >= 0)
2738 fps_analyze_framecount = ic->fps_probe_size;
2740 fps_analyze_framecount = 0;
2741 /* variable fps and no guess at the real fps */
2742 count = (ic->iformat->flags & AVFMT_NOTIMESTAMPS) ?
2744 sti->info->duration_count;
2745 if (!(st->r_frame_rate.num && st->avg_frame_rate.num) &&
2747 if (count < fps_analyze_framecount)
2748 break;
2749 }
2750 // Look at the first 3 frames if there is evidence of frame delay
2751 // but the decoder delay is not set.
2752 if (sti->info->frame_delay_evidence && count < 2 && sti->avctx->has_b_frames == 0)
2753 break;
2754 if (!sti->avctx->extradata &&
2757 break;
2758 if (sti->first_dts == AV_NOPTS_VALUE &&
2763 break;
2764 }
2765 analyzed_all_streams = 0;
2766 if (i == ic->nb_streams && !si->missing_streams) {
2767 analyzed_all_streams = 1;
2768 /* NOTE: If the format has no header, then we need to read some
2769 * packets to get most of the streams, so we cannot stop here. */
2770 if (!(ic->ctx_flags & AVFMTCTX_NOHEADER)) {
2771 /* If we found the info for all the codecs, we can stop. */
2772 ret = count;
2773 av_log(ic, AV_LOG_DEBUG, "All info found\n");
2774 flush_codecs = 0;
2775 break;
2776 }
2777 }
2778 /* We did not get all the codec info, but we read too much data. */
2779 if (read_size >= probesize) {
2780 ret = count;
2781 av_log(ic, AV_LOG_DEBUG,
2782 "Probe buffer size limit of %"PRId64" bytes reached\n", probesize);
2783 for (unsigned i = 0; i < ic->nb_streams; i++) {
2784 AVStream *const st = ic->streams[i];
2785 FFStream *const sti = ffstream(st);
2786 if (!st->r_frame_rate.num &&
2787 sti->info->duration_count <= 1 &&
2789 strcmp(ic->iformat->name, "image2"))
2791 "Stream #%d: not enough frames to estimate rate; "
2792 "consider increasing probesize\n", i);
2793 }
2794 break;
2795 }
2796
2797 /* NOTE: A new stream can be added there if no header in file
2798 * (AVFMTCTX_NOHEADER). */
2799 ret = read_frame_internal(ic, pkt1);
2800 if (ret == AVERROR(EAGAIN))
2801 continue;
2802
2803 if (ret < 0) {
2804 /* EOF or error*/
2805 eof_reached = 1;
2806 break;
2807 }
2808
2809 if (!(ic->flags & AVFMT_FLAG_NOBUFFER)) {
2811 pkt1, NULL, 0);
2812 if (ret < 0)
2813 goto unref_then_goto_end;
2814
2815 pkt = &si->packet_buffer.tail->pkt;
2816 } else {
2817 pkt = pkt1;
2818 }
2819
2820 st = ic->streams[pkt->stream_index];
2821 sti = ffstream(st);
2823 read_size += pkt->size;
2824
2825 avctx = sti->avctx;
2826 if (!sti->avctx_inited) {
2827 ret = avcodec_parameters_to_context(avctx, st->codecpar);
2828 if (ret < 0)
2829 goto unref_then_goto_end;
2830 sti->avctx_inited = 1;
2831 }
2832
2833 if (pkt->dts != AV_NOPTS_VALUE && sti->codec_info_nb_frames > 1) {
2834 /* check for non-increasing dts */
2835 if (sti->info->fps_last_dts != AV_NOPTS_VALUE &&
2836 sti->info->fps_last_dts >= pkt->dts) {
2837 av_log(ic, AV_LOG_DEBUG,
2838 "Non-increasing DTS in stream %d: packet %d with DTS "
2839 "%"PRId64", packet %d with DTS %"PRId64"\n",
2840 st->index, sti->info->fps_last_dts_idx,
2842 pkt->dts);
2843 sti->info->fps_first_dts =
2845 }
2846 /* Check for a discontinuity in dts. If the difference in dts
2847 * is more than 1000 times the average packet duration in the
2848 * sequence, we treat it as a discontinuity. */
2849 if (sti->info->fps_last_dts != AV_NOPTS_VALUE &&
2851 (pkt->dts - (uint64_t)sti->info->fps_last_dts) / 1000 >
2852 (sti->info->fps_last_dts - (uint64_t)sti->info->fps_first_dts) /
2853 (sti->info->fps_last_dts_idx - sti->info->fps_first_dts_idx)) {
2855 "DTS discontinuity in stream %d: packet %d with DTS "
2856 "%"PRId64", packet %d with DTS %"PRId64"\n",
2857 st->index, sti->info->fps_last_dts_idx,
2859 pkt->dts);
2860 sti->info->fps_first_dts =
2862 }
2863
2864 /* update stored dts values */
2865 if (sti->info->fps_first_dts == AV_NOPTS_VALUE) {
2866 sti->info->fps_first_dts = pkt->dts;
2868 }
2869 sti->info->fps_last_dts = pkt->dts;
2871 }
2872 if (sti->codec_info_nb_frames > 1) {
2873 int64_t t = 0;
2874 int64_t limit;
2875
2876 if (st->time_base.den > 0)
2878 if (st->avg_frame_rate.num > 0)
2880
2881 if ( t == 0
2882 && sti->codec_info_nb_frames > 30
2884 && sti->info->fps_last_dts != AV_NOPTS_VALUE) {
2886 t = FFMAX(t, av_rescale_q(dur, st->time_base, AV_TIME_BASE_Q));
2887 }
2888
2889 if (analyzed_all_streams) limit = max_analyze_duration;
2890 else if (avctx->codec_type == AVMEDIA_TYPE_SUBTITLE) limit = max_subtitle_analyze_duration;
2891 else limit = max_stream_analyze_duration;
2892
2893 if (t >= limit) {
2894 av_log(ic, AV_LOG_VERBOSE, "max_analyze_duration %"PRId64" reached at %"PRId64" microseconds st:%d\n",
2895 limit,
2896 t, pkt->stream_index);
2897 if (ic->flags & AVFMT_FLAG_NOBUFFER)
2898 av_packet_unref(pkt1);
2899 break;
2900 }
2901 if (pkt->duration > 0 && pkt->duration < INT64_MAX - sti->info->codec_info_duration) {
2902 const int fields = sti->codec_desc && (sti->codec_desc->props & AV_CODEC_PROP_FIELDS);
2903 if (avctx->codec_type == AVMEDIA_TYPE_SUBTITLE && pkt->pts != AV_NOPTS_VALUE && st->start_time != AV_NOPTS_VALUE && pkt->pts >= st->start_time
2904 && (uint64_t)pkt->pts - st->start_time < INT64_MAX
2905 ) {
2906 sti->info->codec_info_duration = FFMIN(pkt->pts - st->start_time, sti->info->codec_info_duration + pkt->duration);
2907 } else
2908 sti->info->codec_info_duration += pkt->duration;
2909 sti->info->codec_info_duration_fields += sti->parser && sti->need_parsing && fields
2910 ? sti->parser->repeat_pict + 1 : 2;
2911 }
2912 }
2914#if FF_API_R_FRAME_RATE
2915 ff_rfps_add_frame(ic, st, pkt->dts);
2916#endif
2917 if (pkt->dts != pkt->pts && pkt->dts != AV_NOPTS_VALUE && pkt->pts != AV_NOPTS_VALUE)
2918 sti->info->frame_delay_evidence = 1;
2919 }
2920 if (!sti->avctx->extradata) {
2921 ret = extract_extradata(si, st, pkt);
2922 if (ret < 0)
2923 goto unref_then_goto_end;
2924 }
2925
2926 /* If still no information, we try to open the codec and to
2927 * decompress the frame. We try to avoid that in most cases as
2928 * it takes longer and uses more memory. For MPEG-4, we need to
2929 * decompress for QuickTime.
2930 *
2931 * If AV_CODEC_CAP_CHANNEL_CONF is set this will force decoding of at
2932 * least one frame of codec data, this makes sure the codec initializes
2933 * the channel configuration and does not only trust the values from
2934 * the container. */
2935 try_decode_frame(ic, st, pkt,
2936 (options && i < orig_nb_streams) ? &options[i] : NULL);
2937
2938 if (ic->flags & AVFMT_FLAG_NOBUFFER)
2939 av_packet_unref(pkt1);
2940
2941 sti->codec_info_nb_frames++;
2942 count++;
2943 }
2944
2945 if (eof_reached) {
2946 for (unsigned stream_index = 0; stream_index < ic->nb_streams; stream_index++) {
2947 AVStream *const st = ic->streams[stream_index];
2948 AVCodecContext *const avctx = ffstream(st)->avctx;
2949 if (!has_codec_parameters(st, NULL)) {
2950 const AVCodec *codec = find_probe_decoder(ic, st, st->codecpar->codec_id);
2951 if (codec && !avctx->codec) {
2953 if (ic->codec_whitelist)
2954 av_dict_set(&opts, "codec_whitelist", ic->codec_whitelist, 0);
2955 if (avcodec_open2(avctx, codec, (options && stream_index < orig_nb_streams) ? &options[stream_index] : &opts) < 0)
2957 "Failed to open codec in %s\n", __func__);
2959 }
2960 }
2961
2962 // EOF already reached while reading the stream above.
2963 // So continue with reoordering DTS with whatever delay we have.
2965 update_dts_from_pts(ic, stream_index, si->packet_buffer.head);
2966 }
2967 }
2968 }
2969
2970 if (flush_codecs) {
2971 AVPacket *empty_pkt = si->pkt;
2972 int err = 0;
2973 av_packet_unref(empty_pkt);
2974
2975 for (unsigned i = 0; i < ic->nb_streams; i++) {
2976 AVStream *const st = ic->streams[i];
2977 FFStream *const sti = ffstream(st);
2978
2979 /* flush the decoders */
2980 if (sti->info->found_decoder == 1) {
2981 err = try_decode_frame(ic, st, empty_pkt,
2982 (options && i < orig_nb_streams)
2983 ? &options[i] : NULL);
2984
2985 if (err < 0) {
2986 av_log(ic, AV_LOG_INFO,
2987 "decoding for stream %d failed\n", st->index);
2988 }
2989 }
2990 }
2991 }
2992
2994
2995 for (unsigned i = 0; i < ic->nb_streams; i++) {
2996 AVStream *const st = ic->streams[i];
2997 FFStream *const sti = ffstream(st);
2998 AVCodecContext *const avctx = sti->avctx;
2999
3000 if (avctx->codec_type == AVMEDIA_TYPE_VIDEO) {
3001 if (avctx->codec_id == AV_CODEC_ID_RAWVIDEO && !avctx->codec_tag && !avctx->bits_per_coded_sample) {
3002 uint32_t tag= avcodec_pix_fmt_to_codec_tag(avctx->pix_fmt);
3004 avctx->codec_tag= tag;
3005 }
3006
3007 /* estimate average framerate if not set by demuxer */
3008 if (sti->info->codec_info_duration_fields &&
3009 !st->avg_frame_rate.num &&
3010 sti->info->codec_info_duration) {
3011 int best_fps = 0;
3012 double best_error = 0.01;
3013 AVRational codec_frame_rate = avctx->framerate;
3014
3015 if (sti->info->codec_info_duration >= INT64_MAX / st->time_base.num / 2||
3016 sti->info->codec_info_duration_fields >= INT64_MAX / st->time_base.den ||
3017 sti->info->codec_info_duration < 0)
3018 continue;
3021 sti->info->codec_info_duration * 2 * (int64_t) st->time_base.num, 60000);
3022
3023 /* Round guessed framerate to a "standard" framerate if it's
3024 * within 1% of the original estimate. */
3025 for (int j = 0; j < MAX_STD_TIMEBASES; j++) {
3026 AVRational std_fps = { get_std_framerate(j), 12 * 1001 };
3027 double error = fabs(av_q2d(st->avg_frame_rate) /
3028 av_q2d(std_fps) - 1);
3029
3030 if (error < best_error) {
3031 best_error = error;
3032 best_fps = std_fps.num;
3033 }
3034
3036 codec_frame_rate.num > 0 && codec_frame_rate.den > 0) {
3037 error = fabs(av_q2d(codec_frame_rate) /
3038 av_q2d(std_fps) - 1);
3039 if (error < best_error) {
3040 best_error = error;
3041 best_fps = std_fps.num;
3042 }
3043 }
3044 }
3045 if (best_fps)
3047 best_fps, 12 * 1001, INT_MAX);
3048 }
3049 if (!st->r_frame_rate.num) {
3050 const AVCodecDescriptor *desc = sti->codec_desc;
3051 AVRational mul = (AVRational){ desc && (desc->props & AV_CODEC_PROP_FIELDS) ? 2 : 1, 1 };
3052 AVRational fr = av_mul_q(avctx->framerate, mul);
3053
3054 if (fr.num && fr.den && av_cmp_q(st->time_base, av_inv_q(fr)) <= 0) {
3055 st->r_frame_rate = fr;
3056 } else {
3057 st->r_frame_rate.num = st->time_base.den;
3058 st->r_frame_rate.den = st->time_base.num;
3059 }
3060 }
3061 st->codecpar->framerate = avctx->framerate;
3063 AVRational hw_ratio = { avctx->height, avctx->width };
3065 hw_ratio);
3066 }
3067 } else if (avctx->codec_type == AVMEDIA_TYPE_AUDIO) {
3068 if (!avctx->bits_per_coded_sample)
3069 avctx->bits_per_coded_sample =
3071 // set stream disposition based on audio service type
3072 switch (avctx->audio_service_type) {
3075 break;
3078 break;
3081 break;
3084 break;
3087 break;
3088 }
3089 }
3090 }
3091
3092 if (probesize)
3093 estimate_timings(ic, old_offset);
3094
3095 av_opt_set_int(ic, "skip_clear", 0, AV_OPT_SEARCH_CHILDREN);
3096
3097 if (ret >= 0 && ic->nb_streams)
3098 /* We could not have all the codec parameters before EOF. */
3099 ret = -1;
3100 for (unsigned i = 0; i < ic->nb_streams; i++) {
3101 AVStream *const st = ic->streams[i];
3102 FFStream *const sti = ffstream(st);
3103 const char *errmsg;
3104
3105 /* if no packet was ever seen, update context now for has_codec_parameters */
3106 if (!sti->avctx_inited) {
3109 st->codecpar->format = sti->avctx->sample_fmt;
3111 if (ret < 0)
3112 goto find_stream_info_err;
3113 }
3114 if (!has_codec_parameters(st, &errmsg)) {
3115 char buf[256];
3116 avcodec_string(buf, sizeof(buf), sti->avctx, 0);
3118 "Could not find codec parameters for stream %d (%s): %s\n"
3119 "Consider increasing the value for the 'analyzeduration' (%"PRId64") and 'probesize' (%"PRId64") options\n",
3120 i, buf, errmsg, ic->max_analyze_duration, ic->probesize);
3121 } else {
3122 ret = 0;
3123 }
3124 }
3125
3126 err = compute_chapters_end(ic);
3127 if (err < 0) {
3128 ret = err;
3129 goto find_stream_info_err;
3130 }
3131
3132 /* update the stream parameters from the internal codec contexts */
3133 for (unsigned i = 0; i < ic->nb_streams; i++) {
3134 AVStream *const st = ic->streams[i];
3135 FFStream *const sti = ffstream(st);
3136
3137 if (sti->avctx_inited) {
3138 ret = parameters_from_context(ic, st->codecpar, sti->avctx);
3139 if (ret < 0)
3140 goto find_stream_info_err;
3141
3142 if (sti->avctx->rc_buffer_size > 0 || sti->avctx->rc_max_rate > 0 ||
3143 sti->avctx->rc_min_rate) {
3144 size_t cpb_size;
3145 AVCPBProperties *props = av_cpb_properties_alloc(&cpb_size);
3146 if (props) {
3147 if (sti->avctx->rc_buffer_size > 0)
3148 props->buffer_size = sti->avctx->rc_buffer_size;
3149 if (sti->avctx->rc_min_rate > 0)
3150 props->min_bitrate = sti->avctx->rc_min_rate;
3151 if (sti->avctx->rc_max_rate > 0)
3152 props->max_bitrate = sti->avctx->rc_max_rate;
3156 (uint8_t *)props, cpb_size, 0))
3157 av_free(props);
3158 }
3159 }
3160 }
3161
3162 sti->avctx_inited = 0;
3163 }
3164
3165 /* update the stream group parameters from the stream contexts if needed */
3166 for (unsigned i = 0; i < ic->nb_stream_groups; i++) {
3167 AVStreamGroup *const stg = ic->stream_groups[i];
3169 const AVStream *st;
3170
3172 continue;
3173
3174 /* For LCEVC in mpegts, the parser is needed to get the enhancement layer
3175 * dimensions */
3176 lcevc = stg->params.layered_video;
3177 if (lcevc->width && lcevc->height)
3178 continue;
3179 st = stg->streams[lcevc->el_index];
3180 lcevc->width = st->codecpar->width;
3181 lcevc->height = st->codecpar->height;
3182 }
3183
3184find_stream_info_err:
3185 for (unsigned i = 0; i < ic->nb_streams; i++) {
3186 AVStream *const st = ic->streams[i];
3187 FFStream *const sti = ffstream(st);
3188 int err;
3189
3190 if (sti->info) {
3192 av_freep(&sti->info);
3193 }
3194
3195 if (avcodec_is_open(sti->avctx)) {
3196 err = codec_close(sti);
3197 if (err < 0 && ret >= 0)
3198 ret = err;
3199 }
3200
3202 }
3203 if (ic->pb) {
3204 FFIOContext *const ctx = ffiocontext(ic->pb);
3205 av_log(ic, AV_LOG_DEBUG, "After avformat_find_stream_info() pos: %"PRId64" bytes read:%"PRId64" seeks:%d frames:%d\n",
3206 avio_tell(ic->pb), ctx->bytes_read, ctx->seek_count, count);
3207 }
3208 return ret;
3209
3210unref_then_goto_end:
3211 av_packet_unref(pkt1);
3212 goto find_stream_info_err;
3213}
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:2655
#define PARSER_FLAG_ONCE
Definition avcodec.h:2652
#define PARSER_FLAG_COMPLETE_FRAMES
Definition avcodec.h:2651
void ff_flush_packet_queue(AVFormatContext *s)
Definition avformat.c:139
int ff_format_io_close(AVFormatContext *s, AVIOContext **pb)
Definition avformat.c:961
int ff_is_intra_only(enum AVCodecID id)
Definition avformat.c:912
const AVCodec * ff_find_decoder(AVFormatContext *s, const AVStream *st, enum AVCodecID codec_id)
Definition avformat.c:861
Main libavformat public API header.
#define AVFMT_EVENT_FLAG_METADATA_UPDATED
Definition avformat.h:1727
#define AV_PTS_WRAP_SUB_OFFSET
subtract the format specific offset on wrap detection
Definition avformat.h:757
#define AVPROBE_SCORE_STREAM_RETRY
Definition avformat.h:479
#define AV_PTS_WRAP_IGNORE
Options for behavior on timestamp wrap detection.
Definition avformat.h:755
#define AVINDEX_KEYFRAME
Definition avformat.h:628
#define AVPROBE_PADDING_SIZE
extra allocated bytes at the end of the probe buffer
Definition avformat.h:485
#define AV_DISPOSITION_HEARING_IMPAIRED
The stream is intended for hearing impaired audiences.
Definition avformat.h:676
#define AV_DISPOSITION_COMMENT
The stream is a commentary track.
Definition avformat.h:657
@ AV_STREAM_GROUP_PARAMS_LCEVC
Definition avformat.h:1151
#define AVFMTCTX_NOHEADER
signal that no header is present (streams are added dynamically)
Definition avformat.h:1284
#define AVFMT_FLAG_IGNDTS
Ignore DTS on frames that contain both DTS & PTS.
Definition avformat.h:1488
#define AV_FDEBUG_TS
Definition avformat.h:1624
#define AV_DISPOSITION_KARAOKE
The stream contains karaoke audio.
Definition avformat.h:665
#define AVFMT_FLAG_GENPTS
Generate missing pts even if it requires parsing future frames.
Definition avformat.h:1485
#define AVFMT_NOFILE
Demuxer will use avio_open, no opened file should be provided by the caller.
Definition avformat.h:488
AVDurationEstimationMethod
The duration of a video can be estimated through various ways, and this enum can be used to know how ...
Definition avformat.h:1313
@ AVFMT_DURATION_FROM_BITRATE
Duration estimated from bitrate (less accurate)
Definition avformat.h:1316
@ AVFMT_DURATION_FROM_PTS
Duration accurately estimated from PTSes.
Definition avformat.h:1314
@ AVFMT_DURATION_FROM_STREAM
Duration estimated from a stream with a known duration.
Definition avformat.h:1315
#define AVSTREAM_EVENT_FLAG_NEW_PACKETS
Definition avformat.h:890
#define AVFMT_FLAG_DISCARD_CORRUPT
Discard frames marked corrupted.
Definition avformat.h:1493
#define AV_DISPOSITION_CLEAN_EFFECTS
The audio stream contains music and sound effects without voice.
Definition avformat.h:684
#define AV_DISPOSITION_VISUAL_IMPAIRED
The stream is intended for visually impaired audiences.
Definition avformat.h:680
#define AV_DISPOSITION_ATTACHED_PIC
The stream is stored in the file as an attached picture/"cover art" (e.g.
Definition avformat.h:692
#define AVFMT_FLAG_CUSTOM_IO
The caller has supplied a custom AVIOContext, don't avio_close() it.
Definition avformat.h:1492
#define AVFMT_FLAG_NOFILLIN
Do not infer any values from other values, just return what is stored in the container.
Definition avformat.h:1489
#define AVFMT_GENERIC_INDEX
Use generic index building code.
Definition avformat.h:499
#define AV_PTS_WRAP_ADD_OFFSET
add the format specific offset on wrap detection
Definition avformat.h:756
#define AVPROBE_SCORE_RETRY
Definition avformat.h:478
#define AVFMT_NOTIMESTAMPS
Format does not need / have any timestamps.
Definition avformat.h:498
#define AVFMT_FLAG_NOBUFFER
Do not buffer frames when possible.
Definition avformat.h:1491
#define AVFMT_NEEDNUMBER
Needs 'd' in filename.
Definition avformat.h:489
#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:1490
@ AVSTREAM_PARSE_TIMESTAMPS
full parsing and interpolation of timestamps for frames not starting on a packet boundary
Definition avformat.h:613
@ AVSTREAM_PARSE_FULL_ONCE
full parsing and repack of the first frame only, only implemented for H.264 currently
Definition avformat.h:614
@ AVSTREAM_PARSE_FULL_RAW
full parsing and repack with timestamp and position generation by parser for raw this assumes that ea...
Definition avformat.h:615
@ AVSTREAM_PARSE_HEADERS
Only parse headers, do not repack.
Definition avformat.h:612
@ AVSTREAM_PARSE_NONE
Definition avformat.h:610
#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:922
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:975
@ AV_AUDIO_SERVICE_TYPE_EFFECTS
Definition defs.h:237
@ AV_AUDIO_SERVICE_TYPE_KARAOKE
Definition defs.h:244
@ AV_AUDIO_SERVICE_TYPE_HEARING_IMPAIRED
Definition defs.h:239
@ AV_AUDIO_SERVICE_TYPE_COMMENTARY
Definition defs.h:241
@ AV_AUDIO_SERVICE_TYPE_VISUALLY_IMPAIRED
Definition defs.h:238
int ff_buffer_packet(AVFormatContext *s, AVPacket *pkt)
Definition demux.c:622
static int determinable_frame_size(const AVCodecContext *avctx)
Definition demux.c:2076
static void update_initial_timestamps(AVFormatContext *s, int stream_index, int64_t dts, int64_t pts, AVPacket *pkt)
Definition demux.c:869
static int update_wrap_reference(AVFormatContext *s, AVStream *st, int stream_index, AVPacket *pkt)
Definition demux.c:477
static int has_decode_delay_been_guessed(AVStream *st)
Definition demux.c:759
static void fill_all_stream_timings(AVFormatContext *ic)
Definition demux.c:1799
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:2089
static void force_codec_ids(AVFormatContext *s, AVStream *st)
Definition demux.c:402
#define DURATION_DEFAULT_MAX_READ_SIZE
Definition demux.c:1869
static int64_t select_from_pts_buffer(AVStream *st, int64_t *pts_buffer, int64_t dts)
Definition demux.c:791
static int try_decode_frame(AVFormatContext *s, AVStream *st, const AVPacket *pkt, AVDictionary **options)
Definition demux.c:2138
static void compute_pkt_fields(AVFormatContext *s, AVStream *st, AVCodecParserContext *pc, AVPacket *pkt, int64_t next_dts, int64_t next_pts)
Definition demux.c:983
#define ABSDIFF(a, b)
#define FAIL(errmsg)
static const char * duration_estimate_name(enum AVDurationEstimationMethod method)
Definition demux.c:2022
static void update_initial_durations(AVFormatContext *s, AVStream *st, int stream_index, int64_t duration)
Definition demux.c:923
void ff_rfps_calculate(AVFormatContext *ic)
Definition demux.c:2397
static int probe_codec(AVFormatContext *s, AVStream *st, const AVPacket *pkt)
Definition demux.c:424
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:844
static int compute_chapters_end(AVFormatContext *s)
Definition demux.c:2250
static void estimate_timings(AVFormatContext *ic, int64_t old_offset)
Definition demux.c:2027
#define DURATION_DEFAULT_MAX_RETRY
Definition demux.c:1870
int ff_rfps_add_frame(AVFormatContext *ic, AVStream *st, int64_t ts)
add frame for rfps calculation.
Definition demux.c:2336
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:2016
static int64_t ts_to_samples(AVStream *st, int64_t ts)
Definition demux.c:1334
static int chapter_start_cmp(const void *p1, const void *p2)
Definition demux.c:2240
static void estimate_timings_from_bit_rate(AVFormatContext *ic)
Definition demux.c:1816
static void estimate_timings_from_pts(AVFormatContext *ic, int64_t old_offset)
Definition demux.c:1874
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:2477
static void update_timestamps(AVFormatContext *s, AVStream *st, AVPacket *pkt)
Definition demux.c:545
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:696
static int parameters_from_context(AVFormatContext *ic, AVCodecParameters *par, const AVCodecContext *avctx)
Definition demux.c:2566
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:577
static int get_std_framerate(int i)
Definition demux.c:2287
static int has_duration(AVFormatContext *ic)
Return TRUE if the stream has accurate duration in any stream.
Definition demux.c:1688
static int update_stream_avctx(AVFormatContext *s)
Definition demux.c:191
static int tb_unreliable(AVFormatContext *ic, AVStream *st)
Definition demux.c:2311
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:1871
static PacketListEntry * get_next_pkt(AVFormatContext *s, AVStream *st, PacketListEntry *pktl)
Definition demux.c:779
static void update_stream_timings(AVFormatContext *ic)
Estimate the stream timings from the one of each components.
Definition demux.c:1705
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:1178
static int extract_extradata_check(AVStream *st)
Definition demux.c:2461
static int read_frame_internal(AVFormatContext *s, AVPacket *pkt)
Definition demux.c:1388
static int extract_extradata(FFFormatContext *si, AVStream *st, const AVPacket *pkt)
Definition demux.c:2517
int ff_read_packet(AVFormatContext *s, AVPacket *pkt)
Read a transport packet from a media file.
Definition demux.c:629
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:1339
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:51
static int64_t duration
Definition ffplay.c:330
static int genpts
Definition ffplay.c:332
static int64_t start_time
Definition ffplay.c:329
#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:556
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:144
#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:990
const AVCodec * avcodec_find_decoder_by_name(const char *name)
Find a registered decoder with the specified name.
Definition allcodecs.c:1018
void avsubtitle_free(AVSubtitle *sub)
Free all allocated data in the given subtitle struct.
Definition avcodec.c:421
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:943
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:164
#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:572
@ AV_CODEC_ID_EAC3
Definition codec_id.h:493
@ AV_CODEC_ID_DVB_SUBTITLE
Definition codec_id.h:567
@ 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:538
@ 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:495
@ 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:520
@ AV_CODEC_ID_MP2
Definition codec_id.h:453
@ AV_CODEC_ID_RV40
Definition codec_id.h:119
@ AV_CODEC_ID_DTS
Definition codec_id.h:457
@ 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:455
@ AV_CODEC_ID_TRUEHD
Definition codec_id.h:497
@ AV_CODEC_ID_AC3
Definition codec_id.h:456
@ AV_CODEC_ID_DVB_TELETEXT
Definition codec_id.h:573
@ 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:454
@ AV_CODEC_ID_AAC_LATM
Definition codec_id.h:502
@ 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:720
AVDiscard
Definition defs.h:223
int avcodec_send_packet(AVCodecContext *avctx, const AVPacket *avpkt)
Supply raw packet data as input to a decoder.
Definition decode.c:730
int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub, int *got_sub_ptr, const AVPacket *avpkt)
Decode a subtitle message.
Definition decode.c:935
@ AVDISCARD_ALL
discard all
Definition defs.h:232
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:810
void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode)
Definition avcodec.c:514
int avcodec_is_open(AVCodecContext *s)
Definition avcodec.c:702
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:613
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:570
@ 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:657
#define AV_PKT_FLAG_CORRUPT
The packet content is corrupted.
Definition packet.h:651
void av_packet_unref(AVPacket *pkt)
Wipe the packet.
Definition packet.c:434
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:650
int av_packet_make_refcounted(AVPacket *pkt)
Ensure the data described by a given packet is reference counted.
Definition packet.c:497
int av_packet_ref(AVPacket *dst, const AVPacket *src)
Setup a new reference to the data described by a given packet.
Definition packet.c:442
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:150
AVProgram * av_find_program_from_stream(AVFormatContext *ic, AVProgram *last, int s)
Find the programs which belong to a given stream.
Definition avformat.c:454
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:1588
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:2606
void avformat_close_input(AVFormatContext **ps)
Close an opened input AVFormatContext.
Definition demux.c:377
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:84
int av_find_default_stream_index(AVFormatContext *s)
Definition avformat.c:469
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:103
void av_dict_free(AVDictionary **pm)
Free all the memory allocated for an AVDictionary struct and all keys and values.
Definition dict.c:233
int av_dict_copy(AVDictionary **dst, const AVDictionary *src, int flags)
Copy entries from one AVDictionary struct into another.
Definition dict.c:247
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:86
#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:302
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:440
#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:1459
#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:1754
int av_opt_set_int(void *obj, const char *name, int64_t val, int search_flags)
Definition opt.c:934
int av_opt_set_dict_val(void *obj, const char *name, const AVDictionary *val, int search_flags)
Definition opt.c:1049
int av_opt_set_dict(void *obj, AVDictionary **options)
Set all the options from a given dictionary on an object.
Definition opt.c:2062
int a
#define MAX_REORDER_DELAY
cl_device_type type
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)
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:62
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:823
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:66
#define FF_ENABLE_DEPRECATION_WARNINGS
Definition internal.h:67
#define llrint(x)
Definition libm.h:396
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:2073
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:803
@ AVCOL_RANGE_UNSPECIFIED
Definition pixfmt.h:749
@ AV_PIX_FMT_NONE
Definition pixfmt.h:72
@ AVCOL_PRI_UNSPECIFIED
Definition pixfmt.h:645
@ AVCOL_TRC_UNSPECIFIED
Definition pixfmt.h:675
@ AVCOL_SPC_UNSPECIFIED
Definition pixfmt.h:709
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:282
int64_t max_bitrate
Maximum bitrate of the stream, in bits per second.
Definition defs.h:287
int64_t buffer_size
The size of the buffer to which the ratecontrol is applied, in bits.
Definition defs.h:303
int64_t min_bitrate
Minimum bitrate of the stream, in bits per second.
Definition defs.h:292
int nb_channels
Number of channels in this layout.
int64_t id
unique ID to identify the chapter
Definition avformat.h:1293
int64_t start
Definition avformat.h:1295
int64_t end
chapter start/end time in time_base units
Definition avformat.h:1295
AVRational time_base
time base in which the start/end timestamps are specified
Definition avformat.h:1294
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:1564
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:1667
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:2731
int64_t pos
Byte position of currently parsed frame in stream.
Definition avcodec.h:2719
int repeat_pict
This field is used for proper frame duration computation in lavf.
Definition avcodec.h:2635
int key_frame
Set by parser to 1 for key frames and 0 for non-key frames.
Definition avcodec.h:2666
int64_t offset
byte offset from starting packet start
Definition avcodec.h:2657
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:1333
unsigned int nb_streams
Number of elements in AVFormatContext.streams.
Definition avformat.h:1389
AVStreamGroup ** stream_groups
A list of all stream groups in the file.
Definition avformat.h:1420
AVIOContext * pb
I/O context.
Definition avformat.h:1375
int64_t start_time
Position of the first frame of the component, in AV_TIME_BASE fractional seconds.
Definition avformat.h:1458
int flags
Flags modifying the (de)muxer behaviour.
Definition avformat.h:1484
AVProgram ** programs
Definition avformat.h:1546
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:1540
int ctx_flags
Flags signalling stream properties.
Definition avformat.h:1382
int fps_probe_size
The number of frames used for determining the framerate in avformat_find_stream_info().
Definition avformat.h:1600
unsigned int nb_programs
Definition avformat.h:1545
AVIOInterruptCB interrupt_callback
Custom interrupt callbacks for the I/O layer.
Definition avformat.h:1618
const struct AVInputFormat * iformat
The input container format.
Definition avformat.h:1345
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:1781
int64_t bit_rate
Total stream bitrate in bit/s, 0 if not available.
Definition avformat.h:1475
int64_t duration_probesize
Maximum number of bytes read from input in order to determine stream durations when using estimate_ti...
Definition avformat.h:1973
char * codec_whitelist
',' separated list of allowed decoders.
Definition avformat.h:1837
unsigned int nb_stream_groups
Number of elements in AVFormatContext.stream_groups.
Definition avformat.h:1408
int64_t probesize
Maximum number of bytes read from input in order to determine stream properties.
Definition avformat.h:1532
AVStream ** streams
A list of all streams in the file.
Definition avformat.h:1401
int64_t duration
Duration of the stream, in AV_TIME_BASE fractional seconds.
Definition avformat.h:1468
int max_ts_probe
Maximum number of packets to read while waiting for the first timestamp.
Definition avformat.h:1678
int skip_estimate_duration_from_pts
Skip duration calculation in estimate_timings_from_pts.
Definition avformat.h:1766
This structure describes decoded (raw) audio or video data.
Definition frame.h:472
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:585
const char * name
A comma separated list of short names for the format.
Definition avformat.h:570
This structure stores auxiliary information for decoding, presenting, or otherwise processing the cod...
Definition packet.h:424
uint8_t * data
Definition packet.h:425
enum AVPacketSideDataType type
Definition packet.h:427
This structure stores compressed data.
Definition packet.h:580
int stream_index
Definition packet.h:605
AVBufferRef * buf
A reference to the reference-counted buffer where the packet data is stored.
Definition packet.h:586
int flags
A combination of AV_PKT_FLAG values.
Definition packet.h:609
int size
Definition packet.h:604
int64_t duration
Duration of this packet in AVStream->time_base units, 0 if unknown.
Definition packet.h:621
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...
Definition packet.h:596
int64_t dts
Decompression timestamp in AVStream->time_base units; the time at which the packet is decompressed.
Definition packet.h:602
uint8_t * data
Definition packet.h:603
int64_t pos
byte position in stream, -1 if unknown
Definition packet.h:623
AVPacketSideData * side_data
Additional packet data that can be provided by the container.
Definition packet.h:614
int side_data_elems
Definition packet.h:615
This structure contains the data a format has to probe a file.
Definition avformat.h:471
int buf_size
Size of buf except extra allocated bytes.
Definition avformat.h:474
unsigned char * buf
Buffer must have AVPROBE_PADDING_SIZE of extra allocated bytes filled with zero.
Definition avformat.h:473
New fields can be added to the end with minor version bumps.
Definition avformat.h:1257
unsigned int nb_stream_indexes
Definition avformat.h:1262
unsigned int * stream_index
Definition avformat.h:1261
int64_t pts_wrap_reference
reference dts for wrap detection
Definition avformat.h:1280
int pts_wrap_behavior
behavior on wrap detection
Definition avformat.h:1281
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
AVStreamGroupLayeredVideo is meant to define the relation between a base layer video stream and a sep...
Definition avformat.h:1093
int height
Height of the final image for presentation.
Definition avformat.h:1118
unsigned int el_index
Index of the enhancement layer stream in AVStreamGroup.
Definition avformat.h:1102
int width
Width of the final stream for presentation.
Definition avformat.h:1114
union AVStreamGroup::@166361102046003066253145020066347265153020354020 params
Group type-specific parameters.
enum AVStreamGroupParamsType type
Group type.
Definition avformat.h:1186
AVStream ** streams
A list of streams in the group.
Definition avformat.h:1234
struct AVStreamGroupLayeredVideo * layered_video
Definition avformat.h:1195
Stream structure.
Definition avformat.h:766
AVCodecParameters * codecpar
Codec parameters associated with this stream.
Definition avformat.h:789
AVRational sample_aspect_ratio
sample aspect ratio (0 if unknown)
Definition avformat.h:844
enum AVDiscard discard
Selects which packets can be discarded at will and do not need to be demuxed.
Definition avformat.h:837
int64_t duration
Decoding: duration of the stream, in stream time base.
Definition avformat.h:825
int id
Format-specific stream ID.
Definition avformat.h:778
int index
stream index in AVFormatContext
Definition avformat.h:772
int pts_wrap_bits
Number of bits in timestamps.
Definition avformat.h:909
int64_t start_time
Decoding: pts of the first frame of the stream in presentation order, in stream time base.
Definition avformat.h:815
AVRational avg_frame_rate
Average framerate.
Definition avformat.h:855
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented.
Definition avformat.h:805
int event_flags
Flags indicating events happening on the stream, a combination of AVSTREAM_EVENT_FLAG_*.
Definition avformat.h:877
AVRational r_frame_rate
Real base framerate of the stream.
Definition avformat.h:900
int disposition
Stream disposition - a combination of AV_DISPOSITION_* flags.
Definition avformat.h:835
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 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
static int ref[MAX_W *MAX_W]
static AVFormatContext * ctx
Definition movenc.c:49
static void finish(void)
Definition movenc.c:374
static AVDictionary * opts
Definition movenc.c:51
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:2028
static double a1(void *priv, double x, double y)
Definition vf_xfade.c:2029
float delta
int len
static double c[64]