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