hlsdemux: simplify next segment checking functions
authorThiago Santos <thiagoss@osg.samsung.com>
Thu, 8 Jan 2015 18:46:49 +0000 (15:46 -0300)
committerThiago Santos <thiagoss@osg.samsung.com>
Thu, 8 Jan 2015 20:55:33 +0000 (17:55 -0300)
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

ext/hls/m3u8.c

index 8305751..22f3451 100755 (executable)
@@ -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