summaryrefslogtreecommitdiff
path: root/ext/hls/m3u8.c
diff options
context:
space:
mode:
authorThiago Santos <thiagoss@osg.samsung.com>2015-01-08 15:46:49 -0300
committerThiago Santos <thiagoss@osg.samsung.com>2015-01-08 17:55:33 -0300
commit308b2e5aaf60d65823cada3cfbc117f0b6e5fea4 (patch)
tree38f3046054ff7732cf925b92f9ea4074ef542567 /ext/hls/m3u8.c
parente21abb62e0eb4f293984f6dc61c464eecb69fbcc (diff)
downloadgstreamer-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-xext/hls/m3u8.c52
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