diff options
author | Zaheer Abbas Merali <zaheerabbas@merali.org> | 2008-02-08 18:22:08 +0000 |
---|---|---|
committer | Zaheer Abbas Merali <zaheerabbas@merali.org> | 2008-02-08 18:22:08 +0000 |
commit | 1316ad4d71faff4f878c304b06c80a3bccbf47e9 (patch) | |
tree | 10c60c69fefc8502719bf7267ec9739cba4ad294 /sys/dvb/dvbbasebin.c | |
parent | 4ee87c566bac4431897b58534822b1b60c5d4cde (diff) | |
download | gst-plugins-bad-1316ad4d71faff4f878c304b06c80a3bccbf47e9.tar.gz gst-plugins-bad-1316ad4d71faff4f878c304b06c80a3bccbf47e9.tar.bz2 gst-plugins-bad-1316ad4d71faff4f878c304b06c80a3bccbf47e9.zip |
sys/dvb/: Add URI Handler for dvb.
Original commit message from CVS:
* sys/dvb/Makefile.am:
* sys/dvb/dvbbasebin.c:
Add URI Handler for dvb.
Re-order pad templates to workaround a bug in playbasebin.
* sys/dvb/parsechannels.c:
* sys/dvb/parsechannels.h:
Add code to parse channels from zap-style channels.conf files.
Diffstat (limited to 'sys/dvb/dvbbasebin.c')
-rw-r--r-- | sys/dvb/dvbbasebin.c | 77 |
1 files changed, 73 insertions, 4 deletions
diff --git a/sys/dvb/dvbbasebin.c b/sys/dvb/dvbbasebin.c index 8f633e66..bc13eddb 100644 --- a/sys/dvb/dvbbasebin.c +++ b/sys/dvb/dvbbasebin.c @@ -28,6 +28,7 @@ #include <stdlib.h> #include <string.h> #include "dvbbasebin.h" +#include "parsechannels.h" GST_DEBUG_CATEGORY_STATIC (dvb_base_bin_debug); #define GST_CAT_DEFAULT dvb_base_bin_debug @@ -121,6 +122,21 @@ static GstPad *dvb_base_bin_request_new_pad (GstElement * element, static void dvb_base_bin_release_pad (GstElement * element, GstPad * pad); static void dvb_base_bin_rebuild_filter (DvbBaseBin * dvbbasebin); +static void dvb_base_bin_uri_handler_init (gpointer g_iface, + gpointer iface_data); + +static void +dvb_base_bin_setup_interfaces (GType type) +{ + static const GInterfaceInfo urihandler_info = { + dvb_base_bin_uri_handler_init, + NULL, + NULL, + }; + + g_type_add_interface_static (type, GST_TYPE_URI_HANDLER, &urihandler_info); +} + static DvbBaseBinStream * dvb_base_bin_add_stream (DvbBaseBin * dvbbasebin, guint16 pid) { @@ -174,7 +190,8 @@ dvb_base_bin_get_program (DvbBaseBin * dvbbasebin, gint program_number) static guint signals [LAST_SIGNAL] = { 0 }; */ -GST_BOILERPLATE (DvbBaseBin, dvb_base_bin, GstBin, GST_TYPE_BIN); +GST_BOILERPLATE_FULL (DvbBaseBin, dvb_base_bin, GstBin, GST_TYPE_BIN, + dvb_base_bin_setup_interfaces); static void dvb_base_bin_base_init (gpointer klass) @@ -185,9 +202,9 @@ dvb_base_bin_base_init (gpointer klass) element_class->release_pad = dvb_base_bin_release_pad; gst_element_class_add_pad_template (element_class, - gst_static_pad_template_get (&src_template)); - gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&program_template)); + gst_element_class_add_pad_template (element_class, + gst_static_pad_template_get (&src_template)); gst_element_class_set_details (element_class, &dvb_base_bin_details); } @@ -919,7 +936,6 @@ dvb_base_bin_pad_added_cb (GstElement * mpegtsparse, program->ghost = gst_ghost_pad_new (gst_pad_get_name (pad), pad); gst_pad_set_active (program->ghost, TRUE); gst_element_add_pad (GST_ELEMENT (dvbbasebin), program->ghost); - /* if the program has a pmt, activate it now, otherwise it will get activated * when there's a PMT */ if (!program->active && program->pmt_pid != G_MAXUINT16) @@ -944,6 +960,59 @@ dvb_base_bin_pad_removed_cb (GstElement * mpegtsparse, program->ghost = NULL; } +static guint +dvb_base_bin_uri_get_type (void) +{ + return GST_URI_SRC; +} + +static gchar ** +dvb_base_bin_uri_get_protocols (void) +{ + static gchar *protocols[] = { "dvb", NULL }; + + return protocols; +} + +static const gchar * +dvb_base_bin_uri_get_uri (GstURIHandler * handler) +{ + return "dvb://"; +} + +static gboolean +dvb_base_bin_uri_set_uri (GstURIHandler * handler, const gchar * uri) +{ + gboolean ret; + gchar *protocol; + DvbBaseBin *dvbbasebin = GST_DVB_BASE_BIN (handler); + + protocol = gst_uri_get_protocol (uri); + + if (strcmp (protocol, "dvb") != 0) { + ret = FALSE; + } else { + ret = set_properties_for_channel (G_OBJECT (dvbbasebin), + gst_uri_get_location (uri)); + } + + /* here is where we parse channels.conf */ + g_free (protocol); + + return ret; +} + +static void +dvb_base_bin_uri_handler_init (gpointer g_iface, gpointer iface_data) +{ + GstURIHandlerInterface *iface = (GstURIHandlerInterface *) g_iface; + + iface->get_type = dvb_base_bin_uri_get_type; + iface->get_protocols = dvb_base_bin_uri_get_protocols; + iface->get_uri = dvb_base_bin_uri_get_uri; + iface->set_uri = dvb_base_bin_uri_set_uri; +} + gboolean gst_dvb_base_bin_plugin_init (GstPlugin * plugin) { |