[FFmpeg-cvslog] flvdec: Document how the duration is retrieved at the end of the file

Uwe L. Korn git at videolan.org
Tue Nov 25 02:12:14 CET 2014


ffmpeg | branch: master | Uwe L. Korn <uwelk at xhochy.com> | Sun Nov 23 19:36:14 2014 +0100| [40665d27e38e6a2f65037878202bd1a398c7683e] | committer: Martin Storsjö

flvdec: Document how the duration is retrieved at the end of the file

Signed-off-by: Martin Storsjö <martin at martin.st>

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

 libavformat/flvdec.c |    4 ++++
 1 file changed, 4 insertions(+)

diff --git a/libavformat/flvdec.c b/libavformat/flvdec.c
index 2d5e50e..0167d17 100644
--- a/libavformat/flvdec.c
+++ b/libavformat/flvdec.c
@@ -845,9 +845,13 @@ skip:
     if (s->pb->seekable && (!s->duration || s->duration == AV_NOPTS_VALUE)) {
         int size;
         const int64_t pos   = avio_tell(s->pb);
+        // Read the last 4 bytes of the file, this should be the size of the
+        // previous FLV tag. Use the timestamp of its payload as duration.
         const int64_t fsize = avio_size(s->pb);
         avio_seek(s->pb, fsize - 4, SEEK_SET);
         size = avio_rb32(s->pb);
+        // Seek to the start of the last FLV tag at position (fsize - 4 - size)
+        // but skip the byte indicating the type.
         avio_seek(s->pb, fsize - 3 - size, SEEK_SET);
         if (size == avio_rb24(s->pb) + 11) {
             uint32_t ts = avio_rb24(s->pb);



More information about the ffmpeg-cvslog mailing list