[vlc-commits] HLS: Housekeeping
Chris Smowton
git at videolan.org
Mon Jul 23 01:15:02 CEST 2012
vlc | branch: master | Chris Smowton <cs448 at cam.ac.uk> | Sun Jul 22 22:13:03 2012 +0200| [d781f87d00784b8b887c6ea4c6c98fbf38a22ec9] | committer: Jean-Baptiste Kempf
HLS: Housekeeping
Signed-off-by: Jean-Baptiste Kempf <jb at videolan.org>
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=d781f87d00784b8b887c6ea4c6c98fbf38a22ec9
---
modules/stream_filter/httplive.c | 40 +++++++++++++++-----------------------
1 file changed, 16 insertions(+), 24 deletions(-)
diff --git a/modules/stream_filter/httplive.c b/modules/stream_filter/httplive.c
index 77ae5f2..df185ae 100644
--- a/modules/stream_filter/httplive.c
+++ b/modules/stream_filter/httplive.c
@@ -1271,8 +1271,9 @@ static int get_HTTPLiveMetaPlaylist(stream_t *s, vlc_array_t **streams)
return err;
}
-/* Reload playlist */
-static int hls_UpdatePlaylist(stream_t *s, hls_stream_t *hls_new, hls_stream_t **hls)
+/* Update hls_old (an existing member of p_sys->hls_stream) to match hls_new
+ (which represents a downloaded, perhaps newer version of the same playlist) */
+static int hls_UpdatePlaylist(stream_t *s, hls_stream_t *hls_new, hls_stream_t *hls_old)
{
int count = vlc_array_count(hls_new->segments);
@@ -1284,8 +1285,7 @@ static int hls_UpdatePlaylist(stream_t *s, hls_stream_t *hls_new, hls_stream_t *
segment_t *p = segment_GetSegment(hls_new, n);
if (p == NULL) return VLC_EGENERIC;
- vlc_mutex_lock(&(*hls)->lock);
- segment_t *segment = segment_Find(*hls, p->sequence);
+ segment_t *segment = segment_Find(hls_old, p->sequence);
if (segment)
{
vlc_mutex_lock(&segment->lock);
@@ -1331,32 +1331,29 @@ static int hls_UpdatePlaylist(stream_t *s, hls_stream_t *hls_new, hls_stream_t *
}
else
{
- int last = vlc_array_count((*hls)->segments) - 1;
- segment_t *l = segment_GetSegment(*hls, last);
- if (l == NULL) goto fail_and_unlock;
+ int last = vlc_array_count(hls_old->segments) - 1;
+ segment_t *l = segment_GetSegment(hls_old, last);
+ if (l == NULL) assert(0);
if ((l->sequence + 1) != p->sequence)
{
msg_Err(s, "gap in sequence numbers found: new=%d expected %d",
p->sequence, l->sequence+1);
}
- vlc_array_append((*hls)->segments, p);
+ vlc_array_append(hls_old->segments, p);
msg_Info(s, "- segment %d appended", p->sequence);
}
- vlc_mutex_unlock(&(*hls)->lock);
}
/* update meta information */
- vlc_mutex_lock(&(*hls)->lock);
- (*hls)->sequence = hls_new->sequence;
- (*hls)->duration = (hls_new->duration == -1) ? (*hls)->duration : hls_new->duration;
- (*hls)->b_cache = hls_new->b_cache;
- vlc_mutex_unlock(&(*hls)->lock);
+ hls_old->sequence = hls_new->sequence;
+ hls_old->duration = (hls_new->duration == -1) ? hls_old->duration : hls_new->duration;
+ hls_old->b_cache = hls_new->b_cache;
+ vlc_mutex_unlock(&hls_old->lock);
return VLC_SUCCESS;
fail_and_unlock:
- assert(0);
- vlc_mutex_unlock(&(*hls)->lock);
+ vlc_mutex_unlock(&hls_old->lock);
return VLC_EGENERIC;
}
@@ -1400,7 +1397,7 @@ static int hls_ReloadPlaylist(stream_t *s)
msg_Info(s, "new HLS stream appended (id=%d, bandwidth=%"PRIu64")",
hls_new->id, hls_new->bandwidth);
}
- else if (hls_UpdatePlaylist(s, hls_new, &hls_old) != VLC_SUCCESS)
+ else if (hls_UpdatePlaylist(s, hls_new, hls_old) != VLC_SUCCESS)
msg_Info(s, "failed updating HLS stream (id=%d, bandwidth=%"PRIu64")",
hls_new->id, hls_new->bandwidth);
}
@@ -1463,7 +1460,7 @@ static int hls_DownloadSegmentData(stream_t *s, hls_stream_t *hls, segment_t *se
int estimated = (int)(size / p_sys->bandwidth);
if (estimated > segment->duration)
{
- msg_Warn(s,"downloading of segment %d takes %ds, which is longer than its playback (%ds)",
+ msg_Warn(s,"downloading segment %d predicted to take %ds, which exceeds its length (%ds)",
segment->sequence, estimated, segment->duration);
}
}
@@ -1471,7 +1468,7 @@ static int hls_DownloadSegmentData(stream_t *s, hls_stream_t *hls, segment_t *se
mtime_t start = mdate();
if (hls_Download(s, segment) != VLC_SUCCESS)
{
- msg_Err(s, "downloaded segment %d from stream %d failed",
+ msg_Err(s, "downloading segment %d from stream %d failed",
segment->sequence, *cur_stream);
vlc_mutex_unlock(&segment->lock);
return VLC_EGENERIC;
@@ -1924,11 +1921,6 @@ static int Open(vlc_object_t *p_this)
/* manage encryption key if needed */
hls_ManageSegmentKeys(s, hls_Get(p_sys->hls_stream, current));
- if (p_sys->b_live && (p_sys->playback.segment < 0))
- {
- msg_Warn(s, "less data than 3 times 'target duration' available for live playback, playback may stall");
- }
-
if (Prefetch(s, ¤t) != VLC_SUCCESS)
{
msg_Err(s, "fetching first segment failed.");
More information about the vlc-commits
mailing list