[vlc-commits] stream_filter/httplive.c: #EXTINF: accepts integer (version < 3) or floating points based on protocol version.

Jean-Paul Saman git at videolan.org
Wed May 11 12:49:41 CEST 2011


vlc | branch: master | Jean-Paul Saman <jean-paul.saman at m2x.nl> | Wed May 11 12:45:36 2011 +0200| [cd00c9c5935bed7bfdf0c30104f8b1e945cf6fc2] | committer: Jean-Paul Saman

stream_filter/httplive.c: #EXTINF: accepts integer (version < 3) or floating points based on protocol version.

Update logic in parse_SegmentationInformation() to accept float values
for duration as mentioned in later version of the draft specification.

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

 modules/stream_filter/httplive.c |   26 +++++++++++++++++++++++++-
 1 files changed, 25 insertions(+), 1 deletions(-)

diff --git a/modules/stream_filter/httplive.c b/modules/stream_filter/httplive.c
index 5ce7e78..5f07c0d 100644
--- a/modules/stream_filter/httplive.c
+++ b/modules/stream_filter/httplive.c
@@ -29,6 +29,7 @@
 #endif
 
 #include <limits.h>
+#include <errno.h>
 
 #include <vlc_common.h>
 #include <vlc_plugin.h>
@@ -515,7 +516,30 @@ static int parse_SegmentInformation(hls_stream_t *hls, char *p_read, int *durati
     if (token == NULL)
         return VLC_EGENERIC;
 
-    *duration = atoi(token);
+    int value;
+    if (hls->version < 3)
+    {
+       value = strtol(token, NULL, 10);
+       if (errno == ERANGE)
+       {
+           *duration = -1;
+           return VLC_EGENERIC;
+       }
+       *duration = value;
+    }
+    else
+    {
+        double d = strtod(token, (char **) NULL);
+        if (errno == ERANGE)
+        {
+            *duration = -1;
+            return VLC_EGENERIC;
+        }
+        if ((d) - ((int)d) >= 0.5)
+            value = ((int)d) + 1;
+        else
+            value = ((int)d);
+    }
 
     /* Ignore the rest of the line */
 



More information about the vlc-commits mailing list