vlc | branch: master | Jean-Paul Saman <jean-paul.sa...@m2x.nl> | Wed May 11 12:14:20 2011 +0200| [0d02e6fb6a826ebd901fae0ac93fb3a0f0225f3f] | committer: Jean-Paul Saman
stream_filter/httplive.c: split up parse_SegmentationInformation() function. Split up parse_SegmentInformation() into two functions: parse_SegmentInformation() - parse #EXTINF to get duration parse_AddSegment() - adds new segment The parse_SegmentInformation() did both functions before and this made some HTTP Live URL not work as expected. The splitting up of these functionalities solves this issue. > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=0d02e6fb6a826ebd901fae0ac93fb3a0f0225f3f --- modules/stream_filter/httplive.c | 33 ++++++++++++++++++++------------- 1 files changed, 20 insertions(+), 13 deletions(-) diff --git a/modules/stream_filter/httplive.c b/modules/stream_filter/httplive.c index ce2cbbf..6346a70 100644 --- a/modules/stream_filter/httplive.c +++ b/modules/stream_filter/httplive.c @@ -499,8 +499,10 @@ static char *ConstructUrl(vlc_url_t *url) return psz_url; } -static int parse_SegmentInformation(stream_t *s, hls_stream_t *hls, char *p_read, const char *uri) +static int parse_SegmentInformation(stream_t *s, hls_stream_t *hls, char *p_read, int *duration) { + VLC_UNUSED(s); + assert(hls); assert(p_read); @@ -514,10 +516,19 @@ static int parse_SegmentInformation(stream_t *s, hls_stream_t *hls, char *p_read token = strtok_r(NULL, ",", &p_next); if (token == NULL) return VLC_EGENERIC; - int duration = atoi(token); + + *duration = atoi(token); /* Ignore the rest of the line */ + return VLC_SUCCESS; +} + +static int parse_AddSegment(stream_t *s, hls_stream_t *hls, const int duration, const char *uri) +{ + assert(hls); + assert(uri); + /* Store segment information */ char *psz_path = NULL; if (hls->url.psz_path != NULL) @@ -878,6 +889,7 @@ static int parse_M3U8(stream_t *s, vlc_array_t *streams, uint8_t *buffer, const assert(hls); /* */ + int segment_duration = -1; do { /* Next line */ @@ -887,17 +899,7 @@ static int parse_M3U8(stream_t *s, vlc_array_t *streams, uint8_t *buffer, const p_begin = p_read; if (strncmp(line, "#EXTINF", 7) == 0) - { - char *uri = ReadLine(p_begin, &p_read, p_end - p_begin); - if (uri == NULL) - err = VLC_EGENERIC; - else - { - err = parse_SegmentInformation(s, hls, line, uri); - free(uri); - } - p_begin = p_read; - } + err = parse_SegmentInformation(s, hls, line, &segment_duration); else if (strncmp(line, "#EXT-X-TARGETDURATION", 21) == 0) err = parse_TargetDuration(s, hls, line); else if (strncmp(line, "#EXT-X-MEDIA-SEQUENCE", 21) == 0) @@ -914,6 +916,11 @@ static int parse_M3U8(stream_t *s, vlc_array_t *streams, uint8_t *buffer, const err = parse_Version(s, hls, line); else if (strncmp(line, "#EXT-X-ENDLIST", 14) == 0) err = parse_EndList(s, hls); + else if (strncmp(line, "#", 1) != 0) + { + err = parse_AddSegment(s, hls, segment_duration, line); + segment_duration = -1; /* reset duration */ + } free(line); line = NULL; _______________________________________________ vlc-commits mailing list vlc-commits@videolan.org http://mailman.videolan.org/listinfo/vlc-commits