From 1824703c81f9207e2478d54a455717c11e2af85d Mon Sep 17 00:00:00 2001 From: "Reynaldo H. Verdejo Pinochet" Date: Tue, 14 Jun 2016 15:29:08 -0700 Subject: [PATCH] dvbsrc: rework set_pids() - Reflow to avoid unneeded nesting - Free aux pids array earlier - Adjust debug output to deliver more meaningful information --- sys/dvb/gstdvbsrc.c | 59 +++++++++++++++++++++++++++-------------------------- 1 file changed, 30 insertions(+), 29 deletions(-) diff --git a/sys/dvb/gstdvbsrc.c b/sys/dvb/gstdvbsrc.c index 82b4c8f..adc2cf9 100644 --- a/sys/dvb/gstdvbsrc.c +++ b/sys/dvb/gstdvbsrc.c @@ -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 -- 2.7.4