[vlc-commits] hls: Ensure streams are sorted by bandwidth.

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> | Fri Feb  3 12:32:24 2012 +0100| [f426cd4b48c2eb2992072327caa51314430f4616] | committer: Jean-Baptiste Kempf

hls: Ensure streams are sorted by bandwidth.

THe standard doesn't guaranty anything, but the code assumes it.
(cherry picked from commit e2942aee746d12ea0bed999e8110bbbead3ca72d)

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

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

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

diff --git a/modules/stream_filter/httplive.c b/modules/stream_filter/httplive.c
index 79abe60..b9a2a7c 100644
--- a/modules/stream_filter/httplive.c
+++ b/modules/stream_filter/httplive.c
@@ -953,6 +953,13 @@ static int parse_Discontinuity(stream_t *s, hls_stream_t *hls, char *p_read)
     return VLC_SUCCESS;
 }
 
+static int hls_CompareStreams( const void* a, const void* b )
+{
+    hls_stream_t*   stream_a = *(hls_stream_t**)a;
+    hls_stream_t*   stream_b = *(hls_stream_t**)b;
+    return stream_a->bandwidth > stream_b->bandwidth;
+}
+
 /* The http://tools.ietf.org/html/draft-pantos-http-live-streaming-04#page-8
  * document defines the following new tags: EXT-X-TARGETDURATION,
  * EXT-X-MEDIA-SEQUENCE, EXT-X-KEY, EXT-X-PROGRAM-DATE-TIME, EXT-X-
@@ -1977,6 +1984,10 @@ static int Open(vlc_object_t *p_this)
         goto fail;
     }
     free(buffer);
+    /* HLS standard doesn't provide any guaranty about streams
+       being sorted by bandwidth, so we sort them */
+    qsort( p_sys->hls_stream->pp_elems, p_sys->hls_stream->i_count,
+           sizeof( hls_stream_t* ), &hls_CompareStreams );
 
     /* Choose first HLS stream to start with */
     int current = p_sys->playback.stream = 0;



More information about the vlc-commits mailing list