dvbsrc: rework set_pids()
authorReynaldo H. Verdejo Pinochet <reynaldo@osg.samsung.com>
Tue, 14 Jun 2016 22:29:08 +0000 (15:29 -0700)
committerReynaldo H. Verdejo Pinochet <reynaldo@osg.samsung.com>
Fri, 17 Jun 2016 22:58:09 +0000 (15:58 -0700)
- Reflow to avoid unneeded nesting
- Free aux pids array earlier
- Adjust debug output to deliver more meaningful information

sys/dvb/gstdvbsrc.c

index 82b4c8f..adc2cf9 100644 (file)
@@ -1096,45 +1096,46 @@ gst_dvbsrc_init (GstDvbSrc * object)
 static void
 gst_dvbsrc_set_pids (GstDvbSrc * dvbsrc, const gchar * pid_string)
 {
+  int pid = 0;
+  int pid_count;
+  gchar **pids;
+  char **tmp;
+
   if (!strcmp (pid_string, "8192")) {
     /* get the whole TS */
     dvbsrc->pids[0] = 8192;
     dvbsrc->pids[1] = G_MAXUINT16;
-  } else {
-    int pid = 0;
-    int pid_count;
-    gchar **pids;
-    char **tmp;
-
-    tmp = pids = g_strsplit (pid_string, ":", MAX_FILTERS);
-
-    /* always add the PAT and CAT pids */
-    dvbsrc->pids[0] = 0;
-    dvbsrc->pids[1] = 1;
-
-    pid_count = 2;
-    while (*pids != NULL && pid_count < MAX_FILTERS) {
-      pid = strtol (*pids, NULL, 0);
-      if (pid > 1 && pid <= 8192) {
-        GST_INFO_OBJECT (dvbsrc, "Parsed PID: %d", pid);
-        dvbsrc->pids[pid_count] = pid;
-        pid_count++;
-      }
-      pids++;
-    }
+    goto done;
+  }
 
-    if (pid_count < MAX_FILTERS)
-      dvbsrc->pids[pid_count] = G_MAXUINT16;
+  /* always add the PAT and CAT pids */
+  dvbsrc->pids[0] = 0;
+  dvbsrc->pids[1] = 1;
+  pid_count = 2;
 
-    g_strfreev (tmp);
+  tmp = pids = g_strsplit (pid_string, ":", MAX_FILTERS);
+
+  while (*pids != NULL && pid_count < MAX_FILTERS) {
+    pid = strtol (*pids, NULL, 0);
+    if (pid > 1 && pid <= 8192) {
+      GST_INFO_OBJECT (dvbsrc, "Parsed PID: %d", pid);
+      dvbsrc->pids[pid_count] = pid;
+      pid_count++;
+    }
+    pids++;
   }
 
-  GST_INFO_OBJECT (dvbsrc, "checking if playing for setting PES filters");
-  if (GST_ELEMENT (dvbsrc)->current_state == GST_STATE_PLAYING ||
-      GST_ELEMENT (dvbsrc)->current_state == GST_STATE_PAUSED) {
+  g_strfreev (tmp);
+
+  if (pid_count < MAX_FILTERS)
+    dvbsrc->pids[pid_count] = G_MAXUINT16;
+
+done:
+  if (GST_ELEMENT (dvbsrc)->current_state > GST_STATE_READY) {
     GST_INFO_OBJECT (dvbsrc, "Setting PES filters now");
     gst_dvbsrc_set_pes_filters (dvbsrc);
-  }
+  } else
+    GST_INFO_OBJECT (dvbsrc, "Not setting PES filters because state < PAUSED");
 }
 
 static void