[FFmpeg-cvslog] lavf/demux: use avg_frame_rate for packet durations for notimestamps formats

Anton Khirnov git at videolan.org
Fri May 5 15:52:14 EEST 2023


ffmpeg | branch: master | Anton Khirnov <anton at khirnov.net> | Wed Apr  5 14:01:10 2023 +0200| [e38e9f3d54f1bf7402748fba19edcaea19afd060] | committer: Anton Khirnov

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.

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=e38e9f3d54f1bf7402748fba19edcaea19afd060
---

 libavformat/demux.c | 5 +++++
 1 file changed, 5 insertions(+)

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;



More information about the ffmpeg-cvslog mailing list