[FFmpeg-devel] [PATCH] lavf/utils: update stream duration only if it is not set or 0

Matthieu Bouron matthieu.bouron at gmail.com
Mon Jul 3 15:02:24 EEST 2017


The following patch makes lavf/utils only update stream duration only if it is
not set or 0 in fill_all_stream_timings (which is called by

In the context of mov demuxing, the patch makes the last packet duration the
same as the one declared in the stts table for example (ie: we trust what the
demuxer reports).

The patch passes fate, however it might not be valid but I would like to
understand what is the purpose / use-case of the update_stream_timing /
fill_all_stream_timings functions which are not too well documented.


 libavformat/utils.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/libavformat/utils.c b/libavformat/utils.c
index 38d247c6cd..00adf026e6 100644
--- a/libavformat/utils.c
+++ b/libavformat/utils.c
@@ -2654,7 +2654,8 @@ static void fill_all_stream_timings(AVFormatContext *ic)
             if (ic->start_time != AV_NOPTS_VALUE)
                 st->start_time = av_rescale_q(ic->start_time, AV_TIME_BASE_Q,
-            if (ic->duration != AV_NOPTS_VALUE)
+            if (ic->duration != AV_NOPTS_VALUE &&
+                (st->duration == 0 || st->duration == AV_NOPTS_VALUE))
                 st->duration = av_rescale_q(ic->duration, AV_TIME_BASE_Q,

More information about the ffmpeg-devel mailing list