summaryrefslogtreecommitdiff
path: root/libavformat
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2023-04-05 14:01:10 +0200
committerAnton Khirnov <anton@khirnov.net>2023-05-05 14:49:40 +0200
commite38e9f3d54f1bf7402748fba19edcaea19afd060 (patch)
treee0a5fea5e669991aee506d4aab86f7f1b26d1c1d /libavformat
parenta59b4ac71342e5644d38e8a812df67d87fddeaa7 (diff)
downloadffmpeg-e38e9f3d54f1bf7402748fba19edcaea19afd060.tar.gz
lavf/demux: use avg_frame_rate for packet durations for notimestamps formats
avg_frame_rate, if set, should be more reliable than stream timebase in this case.
Diffstat (limited to 'libavformat')
-rw-r--r--libavformat/demux.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/libavformat/demux.c b/libavformat/demux.c
index 06de71cd6e..45e5f5c4c2 100644
--- a/libavformat/demux.c
+++ b/libavformat/demux.c
@@ -668,6 +668,11 @@ static void compute_frame_duration(AVFormatContext *s, int *pnum, int *pden,
if (st->r_frame_rate.num && (!pc || !codec_framerate.num)) {
*pnum = st->r_frame_rate.den;
*pden = st->r_frame_rate.num;
+ } else if ((s->iformat->flags & AVFMT_NOTIMESTAMPS) &&
+ !codec_framerate.num &&
+ st->avg_frame_rate.num && st->avg_frame_rate.den) {
+ *pnum = st->avg_frame_rate.den;
+ *pden = st->avg_frame_rate.num;
} else if (st->time_base.num * 1000LL > st->time_base.den) {
*pnum = st->time_base.num;
*pden = st->time_base.den;