[vlc-commits] hls: Don't download the same segment twice when prefetching.

Hugo Beauzée-Luyssen git at videolan.org
Sat Feb 4 15:18:58 CET 2012


vlc/vlc-2.0 | branch: master | Hugo Beauzée-Luyssen <beauze.h at gmail.com> | Thu Feb  2 16:24:59 2012 +0100| [e8ac4adac65da0ddc4eeddac35a66cfe586913c3] | committer: Jean-Baptiste Kempf

hls: Don't download the same segment twice when prefetching.

This makes the playback start faster.
(cherry picked from commit 1555e3ce33ff3a75c19fdae4af08d052aed734c8)

Signed-off-by: Jean-Baptiste Kempf <jb at videolan.org>

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

 modules/stream_filter/httplive.c |   22 ++++------------------
 1 files changed, 4 insertions(+), 18 deletions(-)

diff --git a/modules/stream_filter/httplive.c b/modules/stream_filter/httplive.c
index f573404..79abe60 100644
--- a/modules/stream_filter/httplive.c
+++ b/modules/stream_filter/httplive.c
@@ -1724,35 +1724,21 @@ static void* hls_Reload(void *p_this)
 static int Prefetch(stream_t *s, int *current)
 {
     stream_sys_t *p_sys = s->p_sys;
-    int stream;
+    int stream = *current;
 
-    /* Try to pick best matching stream */;
-again:
-    stream = *current;
-
-    hls_stream_t *hls = hls_Get(p_sys->hls_stream, *current);
+    hls_stream_t *hls = hls_Get(p_sys->hls_stream, stream);
     if (hls == NULL)
         return VLC_EGENERIC;
 
-    segment_t *segment = segment_GetSegment(hls, p_sys->download.segment);
-    if (segment == NULL )
-        return VLC_EGENERIC;
-
-    if (hls_DownloadSegmentData(s, hls, segment, current) != VLC_SUCCESS)
-        return VLC_EGENERIC;
-
-    /* Found better bandwidth match, try again */
-    if (*current != stream)
-        goto again;
-
     /* Download first 2 segments of this HLS stream */
-    stream = *current;
     for (int i = 0; i < 2; i++)
     {
         segment_t *segment = segment_GetSegment(hls, p_sys->download.segment);
         if (segment == NULL )
             return VLC_EGENERIC;
 
+        /* It is useless to lock the segment here, as Prefetch is called before
+           download and playlit thread are started. */
         if (segment->data)
         {
             p_sys->download.segment++;



More information about the vlc-commits mailing list