]> git.sesse.net Git - vlc/blobdiff - modules/access/http.c
Fix live detection on win32
[vlc] / modules / access / http.c
index 87bd3a183544f14fd425e67c91df29195fec6bbd..4d2fd32122aeeefe4f100bffa19dac28ee382999 100644 (file)
@@ -184,6 +184,7 @@ struct access_sys_t
     int64_t    i_chunk;
 
     int        i_icy_meta;
+    int64_t    i_icy_offset;
     char       *psz_icy_name;
     char       *psz_icy_genre;
     char       *psz_icy_title;
@@ -276,6 +277,7 @@ static int OpenWithCookies( vlc_object_t *p_this, vlc_array_t *cookies )
     p_sys->p_tls = NULL;
     p_sys->p_vs = NULL;
     p_sys->i_icy_meta = 0;
+    p_sys->i_icy_offset = 0;
     p_sys->psz_icy_name = NULL;
     p_sys->psz_icy_genre = NULL;
     p_sys->psz_icy_title = NULL;
@@ -415,7 +417,7 @@ connect:
             p_sys->i_version = 0;
             p_sys->b_seekable = false;
 
-            if( p_access->b_die || Connect( p_access, 0 ) )
+            if( !vlc_object_alive (p_access) || Connect( p_access, 0 ) )
                 goto error;
 
 #ifndef NDEBUG
@@ -697,10 +699,10 @@ static ssize_t Read( access_t *p_access, uint8_t *p_buffer, size_t i_len )
     }
 
 
-    if( p_sys->i_icy_meta > 0 && p_access->info.i_pos > 0 )
+    if( p_sys->i_icy_meta > 0 && p_access->info.i_pos-p_sys->i_icy_offset > 0 )
     {
         int64_t i_next = p_sys->i_icy_meta -
-                                    p_access->info.i_pos % p_sys->i_icy_meta;
+                                    (p_access->info.i_pos - p_sys->i_icy_offset ) % p_sys->i_icy_meta;
 
         if( i_next == p_sys->i_icy_meta )
         {
@@ -1005,6 +1007,7 @@ static int Connect( access_t *p_access, int64_t i_tell )
     p_sys->b_chunked = false;
     p_sys->i_chunk = 0;
     p_sys->i_icy_meta = 0;
+    p_sys->i_icy_offset = i_tell;
     p_sys->psz_icy_name = NULL;
     p_sys->psz_icy_genre = NULL;
     p_sys->psz_icy_title = NULL;
@@ -1079,7 +1082,7 @@ static int Connect( access_t *p_access, int64_t i_tell )
 
                 free( psz );
 
-                if( p_access->b_die || p_access->b_error )
+                if( !vlc_object_alive (p_access) || p_access->b_error )
                 {
                     Disconnect( p_access );
                     return -1;
@@ -1109,7 +1112,6 @@ static int Request( access_t *p_access, int64_t i_tell )
     access_sys_t   *p_sys = p_access->p_sys;
     char           *psz ;
     v_socket_t     *pvs = p_sys->p_vs;
-    bool b_connection_close = false;
     p_sys->b_persist = false;
 
     p_sys->i_remaining = 0;
@@ -1265,7 +1267,7 @@ static int Request( access_t *p_access, int64_t i_tell )
             goto error;
         }
 
-        if( p_access->b_die || p_access->b_error )
+        if( !vlc_object_alive (p_access) || p_access->b_error )
         {
             free( psz );
             goto error;