summaryrefslogtreecommitdiffstats
path: root/sys/dvb/dvbbasebin.c
diff options
context:
space:
mode:
authorAlessandro Decina <alessandro@nnva.org>2007-11-23 17:53:37 +0000
committerZaheer Abbas Merali <zaheerabbas@merali.org>2007-11-23 17:53:37 +0000
commit50841996be64a7b4697d3e30a45ca68db459762e (patch)
tree6a3b09a46b1cbe30ac009743bb50799077502871 /sys/dvb/dvbbasebin.c
parent1cb35c75741314f40f098250108b1b0e7db643cc (diff)
downloadgst-plugins-bad-50841996be64a7b4697d3e30a45ca68db459762e.tar.gz
gst-plugins-bad-50841996be64a7b4697d3e30a45ca68db459762e.tar.bz2
gst-plugins-bad-50841996be64a7b4697d3e30a45ca68db459762e.zip
gst/mpegtsparse/: pat-info is now a signal not a GObject property that gets notified.
Original commit message from CVS: patch by: Alessandro Decina * gst/mpegtsparse/mpegtspacketizer.c: * gst/mpegtsparse/mpegtspacketizer.h: * gst/mpegtsparse/mpegtsparse.c: * gst/mpegtsparse/mpegtsparse.h: pat-info is now a signal not a GObject property that gets notified. pat-info, pmt-info now instead of passing a GObject as a parameter, pass a GstStructure. New signals: nit-info, sdt-info, eit-info for DVB SI information * sys/dvb/camconditionalaccess.c: * sys/dvb/camconditionalaccess.h: * sys/dvb/camdevice.c: * sys/dvb/camdevice.h: * sys/dvb/camswclient.c: * sys/dvb/camswclient.h: * sys/dvb/camutils.c: * sys/dvb/camutils.h: Cam code now uses the pmt GstStructure passed from mpegtsparse signals rather than the GObject. * sys/dvb/dvbbasebin.c: Use new signals in mpegtsparse and use GstStructures as per mpegtsparse's modified API.
Diffstat (limited to 'sys/dvb/dvbbasebin.c')
-rw-r--r--sys/dvb/dvbbasebin.c102
1 files changed, 52 insertions, 50 deletions
diff --git a/sys/dvb/dvbbasebin.c b/sys/dvb/dvbbasebin.c
index c812064a..7851e49e 100644
--- a/sys/dvb/dvbbasebin.c
+++ b/sys/dvb/dvbbasebin.c
@@ -88,8 +88,8 @@ typedef struct
gint program_number;
guint16 pmt_pid;
guint16 pcr_pid;
- GObject *pmt;
- GObject *old_pmt;
+ GstStructure *pmt;
+ GstStructure *old_pmt;
gboolean selected;
gboolean pmt_active;
gboolean active;
@@ -107,10 +107,10 @@ static gboolean dvb_base_bin_ts_pad_probe_cb (GstPad * pad,
GstBuffer * buf, gpointer user_data);
static GstStateChangeReturn dvb_base_bin_change_state (GstElement * element,
GstStateChange transition);
-static void dvb_base_bin_pat_info_changed_cb (GstElement * mpegtsparse,
- GParamSpec * pspec, DvbBaseBin * dvbbasebin);
+static void dvb_base_bin_pat_info_cb (GstElement * mpegtsparse,
+ GstStructure * pat, DvbBaseBin * dvbbasebin);
static void dvb_base_bin_pmt_info_cb (GstElement * mpegtsparse,
- guint program_number, GObject * pmt, DvbBaseBin * dvbbasebin);
+ GstStructure * pmt, DvbBaseBin * dvbbasebin);
static void dvb_base_bin_pad_added_cb (GstElement * mpegtsparse,
GstPad * pad, DvbBaseBin * dvbbasebin);
static void dvb_base_bin_pad_removed_cb (GstElement * mpegtsparse,
@@ -310,7 +310,7 @@ dvb_base_bin_init (DvbBaseBin * dvbbasebin, DvbBaseBinClass * klass)
dvbbasebin->buffer_queue = gst_element_factory_make ("queue", NULL);
dvbbasebin->mpegtsparse = gst_element_factory_make ("mpegtsparse", NULL);
g_object_connect (dvbbasebin->mpegtsparse,
- "signal::notify::pat-info", dvb_base_bin_pat_info_changed_cb, dvbbasebin,
+ "signal::pat-info", dvb_base_bin_pat_info_cb, dvbbasebin,
"signal::pmt-info", dvb_base_bin_pmt_info_cb, dvbbasebin,
"signal::pad-added", dvb_base_bin_pad_added_cb, dvbbasebin,
"signal::pad-removed", dvb_base_bin_pad_removed_cb, dvbbasebin, NULL);
@@ -478,7 +478,7 @@ dvb_base_bin_reset_pmtlist (DvbBaseBin * dvbbasebin)
{
CamConditionalAccessPmtFlag flag;
GList *walk;
- GObject *pmt;
+ GstStructure *pmt;
walk = dvbbasebin->pmtlist;
while (walk) {
@@ -494,7 +494,7 @@ dvb_base_bin_reset_pmtlist (DvbBaseBin * dvbbasebin)
flag = CAM_CONDITIONAL_ACCESS_PMT_FLAG_MORE;
}
- pmt = G_OBJECT (walk->data);
+ pmt = GST_STRUCTURE (walk->data);
cam_device_set_pmt (dvbbasebin->hwcam, pmt, flag);
walk = walk->next;
@@ -615,25 +615,26 @@ dvb_base_bin_rebuild_filter (DvbBaseBin * dvbbasebin)
}
static void
-dvb_base_bin_remove_pmt_streams (DvbBaseBin * dvbbasebin, GObject * pmt)
+dvb_base_bin_remove_pmt_streams (DvbBaseBin * dvbbasebin, GstStructure * pmt)
{
- GValueArray *streams;
- gint program_number;
+ const GValue *streams;
+ guint program_number;
gint i;
- GValue *value;
- GObject *streamobj;
+ const GValue *value;
+ GstStructure *stream_info;
DvbBaseBinStream *stream;
guint pid;
guint stream_type;
- g_object_get (pmt, "program-number", &program_number,
- "stream-info", &streams, NULL);
+ gst_structure_get_uint (pmt, "program-number", &program_number);
+ streams = gst_structure_get_value (pmt, "streams");
- for (i = 0; i < streams->n_values; ++i) {
- value = g_value_array_get_nth (streams, i);
- streamobj = g_value_get_object (value);
+ for (i = 0; i < gst_value_list_get_size (streams); ++i) {
+ value = gst_value_list_get_value (streams, i);
+ stream_info = g_value_get_boxed (value);
- g_object_get (streamobj, "pid", &pid, "stream-type", &stream_type, NULL);
+ gst_structure_get_uint (stream_info, "pid", &pid);
+ gst_structure_get_uint (stream_info, "stream-type", &stream_type);
stream = dvb_base_bin_get_stream (dvbbasebin, (guint16) pid);
if (stream == NULL) {
@@ -646,25 +647,26 @@ dvb_base_bin_remove_pmt_streams (DvbBaseBin * dvbbasebin, GObject * pmt)
}
static void
-dvb_base_bin_add_pmt_streams (DvbBaseBin * dvbbasebin, GObject * pmt)
+dvb_base_bin_add_pmt_streams (DvbBaseBin * dvbbasebin, GstStructure * pmt)
{
DvbBaseBinStream *stream;
- GValueArray *streams;
- gint program_number;
+ const GValue *streams;
+ guint program_number;
gint i;
- GValue *value;
- GObject *streamobj;
+ const GValue *value;
+ GstStructure *stream_info;
guint pid;
guint stream_type;
- g_object_get (pmt, "program-number", &program_number,
- "stream-info", &streams, NULL);
+ gst_structure_get_uint (pmt, "program-number", &program_number);
+ streams = gst_structure_get_value (pmt, "streams");
- for (i = 0; i < streams->n_values; ++i) {
- value = g_value_array_get_nth (streams, i);
- streamobj = g_value_get_object (value);
+ for (i = 0; i < gst_value_list_get_size (streams); ++i) {
+ value = gst_value_list_get_value (streams, i);
+ stream_info = g_value_get_boxed (value);
- g_object_get (streamobj, "pid", &pid, "stream-type", &stream_type, NULL);
+ gst_structure_get_uint (stream_info, "pid", &pid);
+ gst_structure_get_uint (stream_info, "stream-type", &stream_type);
GST_DEBUG ("filtering stream %d stream_type %d", pid, stream_type);
stream = dvb_base_bin_get_stream (dvbbasebin, (guint16) pid);
@@ -702,7 +704,7 @@ dvb_base_bin_activate_program (DvbBaseBin * dvbbasebin,
guint16 old_pcr_pid;
old_pcr_pid = program->pcr_pid;
- g_object_get (program->pmt, "pcr-pid", &pid, NULL);
+ gst_structure_get_uint (program->pmt, "pcr-pid", &pid);
program->pcr_pid = pid;
if (old_pcr_pid != G_MAXUINT16 && old_pcr_pid != program->pcr_pid)
dvb_base_bin_get_stream (dvbbasebin, old_pcr_pid)->usecount--;
@@ -747,28 +749,27 @@ dvb_base_bin_deactivate_program (DvbBaseBin * dvbbasebin,
}
static void
-dvb_base_bin_pat_info_changed_cb (GstElement * mpegtsparse,
- GParamSpec * pspec, DvbBaseBin * dvbbasebin)
+dvb_base_bin_pat_info_cb (GstElement * mpegtsparse,
+ GstStructure * pat_info, DvbBaseBin * dvbbasebin)
{
DvbBaseBinProgram *program;
DvbBaseBinStream *stream;
- GValueArray *pat_info;
- GValue *value;
- GObject *program_info;
- gint program_number;
+ const GValue *value;
+ GstStructure *program_info;
+ guint program_number;
guint pid;
- guint16 old_pmt_pid;
+ guint old_pmt_pid;
gint i;
gboolean rebuild_filter = FALSE;
+ const GValue *programs;
- g_object_get (mpegtsparse, "pat-info", &pat_info, NULL);
+ programs = gst_structure_get_value (pat_info, "programs");
+ for (i = 0; i < gst_value_list_get_size (programs); ++i) {
+ value = gst_value_list_get_value (programs, i);
+ program_info = g_value_get_boxed (value);
- for (i = 0; i < pat_info->n_values; ++i) {
- value = g_value_array_get_nth (pat_info, i);
- program_info = g_value_get_object (value);
-
- g_object_get (program_info, "program-number", &program_number,
- "pid", &pid, NULL);
+ gst_structure_get_uint (program_info, "program-number", &program_number);
+ gst_structure_get_uint (program_info, "pid", &pid);
program = dvb_base_bin_get_program (dvbbasebin, program_number);
if (program == NULL)
@@ -792,17 +793,18 @@ dvb_base_bin_pat_info_changed_cb (GstElement * mpegtsparse,
}
}
- g_value_array_free (pat_info);
-
if (rebuild_filter)
dvb_base_bin_rebuild_filter (dvbbasebin);
}
static void
dvb_base_bin_pmt_info_cb (GstElement * mpegtsparse,
- guint program_number, GObject * pmt, DvbBaseBin * dvbbasebin)
+ GstStructure * pmt, DvbBaseBin * dvbbasebin)
{
DvbBaseBinProgram *program;
+ guint program_number;
+
+ gst_structure_get_uint (pmt, "program-number", &program_number);
program = dvb_base_bin_get_program (dvbbasebin, program_number);
if (program == NULL) {
@@ -812,7 +814,7 @@ dvb_base_bin_pmt_info_cb (GstElement * mpegtsparse,
}
program->old_pmt = program->pmt;
- program->pmt = g_object_ref (pmt);
+ program->pmt = gst_structure_copy (pmt);
/* activate the program if it's selected and either it's not active or its pmt
* changed */
@@ -820,7 +822,7 @@ dvb_base_bin_pmt_info_cb (GstElement * mpegtsparse,
dvb_base_bin_activate_program (dvbbasebin, program);
if (program->old_pmt) {
- g_object_unref (program->old_pmt);
+ gst_structure_free (program->old_pmt);
program->old_pmt = NULL;
}
}