[vlc-devel] [PATCH 02/48] hls: Remove url_t from segments

Hugo Beauzée-Luyssen beauze.h at gmail.com
Mon Jan 9 16:16:11 CET 2012


From: Luc Saillard <luc.saillard at sfr.com>

---
 modules/stream_filter/httplive.c |   40 +++++++++++++++++++++++++------------
 1 files changed, 27 insertions(+), 13 deletions(-)

diff --git a/modules/stream_filter/httplive.c b/modules/stream_filter/httplive.c
index a698c05..20e2821 100644
--- a/modules/stream_filter/httplive.c
+++ b/modules/stream_filter/httplive.c
@@ -66,7 +66,7 @@ typedef struct segment_s
     uint64_t    size;       /* segment size in bytes */
     uint64_t    bandwidth;  /* bandwidth usage of segments (bits per second)*/
 
-    vlc_url_t   url;
+    char       *uri;
     vlc_mutex_t lock;
     block_t     *data;      /* data */
 } segment_t;
@@ -337,7 +337,7 @@ static segment_t *segment_New(hls_stream_t* hls, const int duration, const char
     segment->size = 0; /* bytes */
     segment->sequence = 0;
     segment->bandwidth = 0;
-    vlc_UrlParse(&segment->url, uri, 0);
+    segment->uri = uri?strdup(uri):NULL;
     segment->data = NULL;
     vlc_array_append(hls->segments, segment);
     vlc_mutex_init(&segment->lock);
@@ -348,7 +348,8 @@ static void segment_Free(segment_t *segment)
 {
     vlc_mutex_destroy(&segment->lock);
 
-    vlc_UrlClean(&segment->url);
+    if (segment->uri)
+        free(segment->uri);
     if (segment->data)
         block_Release(segment->data);
     free(segment);
@@ -600,6 +601,7 @@ static int parse_AddSegment(stream_t *s, hls_stream_t *hls, const int duration,
 
     vlc_mutex_lock(&hls->lock);
     segment_t *segment = segment_New(hls, duration, psz_uri ? psz_uri : uri);
+    msg_Dbg(s, "AddSegment() segment=%p uri=%s ", segment, psz_uri ? psz_uri : uri);
     if (segment)
         segment->sequence = hls->sequence + vlc_array_count(hls->segments) - 1;
     vlc_mutex_unlock(&hls->lock);
@@ -1068,7 +1070,7 @@ static int hls_UpdatePlaylist(stream_t *s, hls_stream_t *hls_new, hls_stream_t *
             /* they should be the same */
             if ((p->sequence != segment->sequence) ||
                 (p->duration != segment->duration) ||
-                (strcmp(p->url.psz_path, segment->url.psz_path) != 0))
+                (strcmp(p->uri, segment->uri) != 0))
             {
                 msg_Warn(s, "existing segment found with different content - resetting");
                 msg_Warn(s, "- sequence: new=%d, old=%d", p->sequence, segment->sequence);
@@ -1086,8 +1088,18 @@ static int hls_UpdatePlaylist(stream_t *s, hls_stream_t *hls_new, hls_stream_t *
                 }
                 segment->sequence = p->sequence;
                 segment->duration = p->duration;
-                vlc_UrlClean(&segment->url);
-                vlc_UrlParse(&segment->url, psz_url, 0);
+                free(segment->uri);
+                segment->uri = strdup(p->uri);
+                /* We must free the content, because if the key was not downloaded, content can't be decrypted */
+                if (segment->data)
+                {
+                        block_Release(segment->data);
+                        segment->data = NULL;
+                }
+                if (segment->psz_key_path)
+                        free(segment->psz_key_path);
+                segment->psz_key_path = p->psz_key_path?strdup(p->psz_key_path):NULL;
+                vlc_mutex_unlock(&segment->lock);
                 segment_Free(p);
                 free(psz_url);
             }
@@ -1316,6 +1328,14 @@ static void* hls_Thread(void *p_this)
         segment_t *segment = segment_GetSegment(hls, p_sys->download.segment);
         vlc_mutex_unlock(&hls->lock);
 
+        if (segment == NULL)
+        {
+            msg_Dbg(s, "segment %d from stream %d is null !!!", p_sys->download.segment, p_sys->download.stream);
+            continue;
+        }
+
+        msg_Dbg(s, "Downloading segment %d from stream %d (aka %s)", p_sys->download.segment, p_sys->download.stream, segment->uri);
+
         if ((segment != NULL) &&
             (Download(s, hls, segment, &p_sys->download.stream) != VLC_SUCCESS))
         {
@@ -1463,13 +1483,7 @@ static int hls_Download(stream_t *s, segment_t *segment)
 {
     assert(segment);
 
-    /* Construct URL */
-    char *psz_url = ConstructUrl(&segment->url);
-    if (psz_url == NULL)
-           return VLC_ENOMEM;
-
-    stream_t *p_ts = stream_UrlNew(s, psz_url);
-    free(psz_url);
+    stream_t *p_ts = stream_UrlNew(s, segment->uri);
     if (p_ts == NULL)
         return VLC_EGENERIC;
 
-- 
1.7.8.3




More information about the vlc-devel mailing list