[FFmpeg-cvslog] lavf/srtdec: simplify start/end computation.

Clément Bœsch git at videolan.org
Thu Oct 25 00:04:13 CEST 2012


ffmpeg | branch: master | Clément Bœsch <ubitux at gmail.com> | Sat Oct 20 21:21:34 2012 +0200| [a96b39de622592cb595bf20ae009ed415b98cde9] | committer: Clément Bœsch

lavf/srtdec: simplify start/end computation.

Also fix potential overflow (CID733778)

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

 libavformat/srtdec.c |   17 +++++++----------
 1 file changed, 7 insertions(+), 10 deletions(-)

diff --git a/libavformat/srtdec.c b/libavformat/srtdec.c
index a66ced3..056165e 100644
--- a/libavformat/srtdec.c
+++ b/libavformat/srtdec.c
@@ -53,19 +53,16 @@ static int srt_read_header(AVFormatContext *s)
 
 static int64_t get_pts(const char *buf, int *duration)
 {
-    int i, hour, min, sec, hsec;
-    int he, me, se, mse;
+    int i;
 
     for (i=0; i<2; i++) {
-        int64_t start, end;
+        int hh1, mm1, ss1, ms1;
+        int hh2, mm2, ss2, ms2;
         if (sscanf(buf, "%d:%2d:%2d%*1[,.]%3d --> %d:%2d:%2d%*1[,.]%3d",
-                   &hour, &min, &sec, &hsec, &he, &me, &se, &mse) == 8) {
-            min += 60*hour;
-            sec += 60*min;
-            start = sec*1000+hsec;
-            me += 60*he;
-            se += 60*me;
-            end = se*1000+mse;
+                   &hh1, &mm1, &ss1, &ms1,
+                   &hh2, &mm2, &ss2, &ms2) == 8) {
+            int64_t start = (hh1*3600LL + mm1*60LL + ss1) * 1000LL + ms1;
+            int64_t end   = (hh2*3600LL + mm2*60LL + ss2) * 1000LL + ms2;
             *duration = end - start;
             return start;
         }



More information about the ffmpeg-cvslog mailing list