diff options
author | Thiago Santos <thiagoss@osg.samsung.com> | 2015-01-08 15:46:49 -0300 |
---|---|---|
committer | Thiago Santos <thiagoss@osg.samsung.com> | 2015-01-08 17:55:33 -0300 |
commit | 308b2e5aaf60d65823cada3cfbc117f0b6e5fea4 (patch) | |
tree | 38f3046054ff7732cf925b92f9ea4074ef542567 /ext/hls/m3u8.c | |
parent | e21abb62e0eb4f293984f6dc61c464eecb69fbcc (diff) | |
download | gstreamer-plugins-bad-308b2e5aaf60d65823cada3cfbc117f0b6e5fea4.tar.gz |
hlsdemux: simplify next segment checking functions
Optimize loop by moving condition outside of it and reuse the
find_next_fragment function to check if there is next instead of
replicating the same loop
Diffstat (limited to 'ext/hls/m3u8.c')
-rwxr-xr-x | ext/hls/m3u8.c | 52 |
1 files changed, 25 insertions, 27 deletions
diff --git a/ext/hls/m3u8.c b/ext/hls/m3u8.c index 83057511d..22f345191 100755 --- a/ext/hls/m3u8.c +++ b/ext/hls/m3u8.c @@ -951,48 +951,46 @@ _find_current (GstM3U8MediaFile * file, GstM3U8Client * client) return file->sequence != client->sequence; } -static gboolean -has_next_fragment (GstM3U8Client * client, GList * l, gboolean forward) +static GList * +find_next_fragment (GstM3U8Client * client, GList * l, gboolean forward) { GstM3U8MediaFile *file; - if (!forward) + if (forward) { + while (l) { + file = l->data; + + if (file->sequence >= client->sequence) + break; + + l = l->next; + } + } else { l = g_list_last (l); - while (l) { - file = l->data; + while (l) { + file = l->data; - if (forward && file->sequence > client->sequence) - break; - else if (!forward && file->sequence < client->sequence) - break; + if (file->sequence <= client->sequence) + break; - l = (forward ? l->next : l->prev); + l = l->prev; + } } - return l != NULL; + return l; } -static GList * -find_next_fragment (GstM3U8Client * client, GList * l, gboolean forward) +static gboolean +has_next_fragment (GstM3U8Client * client, GList * l, gboolean forward) { - GstM3U8MediaFile *file; + l = find_next_fragment (client, l, forward); - if (!forward) - l = g_list_last (l); - - while (l) { - file = l->data; - - if (forward && file->sequence >= client->sequence) - break; - else if (!forward && file->sequence <= client->sequence) - break; - - l = (forward ? l->next : l->prev); + if (l) { + return (forward && l->next) || (!forward && l->prev); } - return l; + return FALSE; } gboolean |