[gst-devel] patch integrating request pads in gst_element_connect
Leif Morgan Johnson
lmjohns3 at eos.ncsu.edu
Sun Jan 13 18:10:02 CET 2002
Hi folks -
I've just finished hacking a little patch (against the CVS gstreamer
source as of 2002/01/14 02:02:18) that includes support for request pads
in the normal gst_element_connect function. gst_element_connect now calls
gst_element_request_pad_by_name itself if it can't find the pad
directly. As a result, gst_element_request_pad_by_name is now a static
function, and I went ahead and changed all the references I could find in
the source tree (using grep -r request_pad_by_name *) to use (e.g.)
gst_element_connect(elema, "src%d", elemb, "sink")
instead of
pad = gst_element_request_pad_by_name(elema, "src%d")
gst_pad_connect(pad, gst_element_get_pad(elemb, "sink")
I hope this is agreeable. Wingo and I think it makes the API a little
cleaner. Also included in this patch are two very minor typo fixes that
might have been pretty important : changing "src" to "dest" in the
gst_element_connect and gst_element_disconnect functions ... cheers !
leif
--
! Leif Morgan Johnson
!
! North Carolina State University
! computer science / math / cognitive science
! ACM undergraduate research officer
! IAESTE reception officer
!
! lmjohns3 at eos.ncsu.edu
! http://ambient.2y.net/leif/
-------------- next part --------------
? acinclude.m4
? compile
? depcomp
? gst-getting-pads.patch
? gstelement.patch
? install-sh
? mkinstalldirs
? reg.xml
? stamp-h1
? tests/lat
? tests/bufspeed/test1
? tests/bufspeed/test2
? tests/memchunk/gmemchunktest
? tests/memchunk/gstmemchunktest
? tests/sched/dynamic-pipeline
? tools/gst-complete
? tools/gst-compprep
? tools/gst-inspect
? tools/gst-launch
? tools/gst-register
Index: examples/mixer/mixer.c
===================================================================
RCS file: /cvsroot/gstreamer/gstreamer/examples/mixer/mixer.c,v
retrieving revision 1.15
diff -u -r1.15 mixer.c
--- examples/mixer/mixer.c 2002/01/11 15:49:46 1.15
+++ examples/mixer/mixer.c 2002/01/14 02:02:18
@@ -55,8 +55,7 @@
typefind = gst_elementfactory_make ("typefind", "typefind");
g_return_val_if_fail (typefind != NULL, FALSE);
- gst_pad_connect (gst_element_get_pad (element, "src"),
- gst_element_get_pad (typefind, "sink"));
+ gst_element_connect (element, "src", typefind, "sink");
gst_bin_add (bin, typefind);
gst_bin_add (GST_BIN (pipeline), GST_ELEMENT (bin));
@@ -69,8 +68,7 @@
caps = gst_pad_get_caps (gst_element_get_pad (element, "src"));
- gst_pad_disconnect (gst_element_get_pad (element, "src"),
- gst_element_get_pad (typefind, "sink"));
+ gst_element_disconnect (element, "src", typefind, "sink");
gst_bin_remove (bin, typefind);
gst_bin_remove (GST_BIN (pipeline), GST_ELEMENT (bin));
gst_object_unref (GST_OBJECT (typefind));
@@ -94,8 +92,6 @@
GstElement *adder;
GstElement *audiosink;
- GstPad *pad; /* to request pads for the adder */
-
gst_init(&argc,&argv);
if (argc == 1) {
@@ -122,9 +118,7 @@
gst_bin_add (GST_BIN(main_bin), audiosink);
/* connect adder and audiosink */
-
- gst_pad_connect(gst_element_get_pad(adder,"src"),
- gst_element_get_pad(audiosink,"sink"));
+ gst_element_connect(adder,"src", audiosink,"sink");
/* start looping */
input_channels = NULL;
@@ -138,12 +132,9 @@
if (i > 1) gst_element_set_state (main_bin, GST_STATE_PAUSED);
gst_bin_add (GST_BIN(main_bin), channel_in->pipe);
- /* request pads and connect to adder */
- GST_INFO (0, "requesting pad\n");
- pad = gst_element_request_pad_by_name (adder, "sink%d");
- printf ("\tGot new adder sink pad %s\n", gst_pad_get_name (pad));
+ /* connect to adder */
sprintf (buffer, "channel%d", i);
- gst_pad_connect (gst_element_get_pad (channel_in->pipe, buffer), pad);
+ gst_element_connect (channel_in->pipe, buffer, adder, "sink%d");
/* register a volume envelope */
printf ("\tregistering volume envelope...\n");
Index: gst/gstelement.c
===================================================================
RCS file: /cvsroot/gstreamer/gstreamer/gst/gstelement.c,v
retrieving revision 1.103
diff -u -r1.103 gstelement.c
--- gst/gstelement.c 2002/01/13 22:22:42 1.103
+++ gst/gstelement.c 2002/01/14 02:02:19
@@ -63,6 +63,8 @@
static GstElementStateReturn gst_element_change_state (GstElement *element);
static void gst_element_send_event_func (GstElement *element, GstEvent *event);
+static GstPad* gst_element_request_pad_by_name (GstElement *element, const gchar *name);
+
#ifndef GST_DISABLE_LOADSAVE
static xmlNodePtr gst_element_save_thyself (GstObject *object, xmlNodePtr parent);
static void gst_element_restore_thyself (GstObject *parent, xmlNodePtr self);
@@ -440,8 +442,9 @@
walk = g_list_next (walk);
}
+ /* if we can't find it, look it up by name. */
GST_INFO(GST_CAT_ELEMENT_PADS,"no such pad '%s' in element \"%s\"",name,GST_ELEMENT_NAME(element));
- return NULL;
+ return gst_element_request_pad_by_name(element, name);
}
/**
@@ -650,7 +653,7 @@
*
* Returns: the new pad that was created.
*/
-GstPad*
+static GstPad*
gst_element_request_pad_by_name (GstElement *element, const gchar *name)
{
GstPadTemplate *templ = NULL;
@@ -726,7 +729,7 @@
return FALSE;
}
destpad = gst_element_get_pad (dest, destpadname);
- if (srcpad == NULL) {
+ if (destpad == NULL) {
GST_ERROR (dest, "destination element has no pad \"%s\"", destpadname);
return FALSE;
}
@@ -785,7 +788,7 @@
return;
}
destpad = gst_element_get_pad (dest, destpadname);
- if (srcpad == NULL) {
+ if (destpad == NULL) {
GST_ERROR(dest,"destination element has no pad \"%s\"",destpadname);
return;
}
Index: gst/gstelement.h
===================================================================
RCS file: /cvsroot/gstreamer/gstreamer/gst/gstelement.h,v
retrieving revision 1.76
diff -u -r1.76 gstelement.h
--- gst/gstelement.h 2002/01/13 22:22:42 1.76
+++ gst/gstelement.h 2002/01/14 02:02:20
@@ -198,7 +198,6 @@
void gst_element_remove_ghost_pad (GstElement *element, GstPad *pad);
GstPad* gst_element_request_compatible_pad (GstElement *element, GstPadTemplate *templ);
-GstPad* gst_element_request_pad_by_name (GstElement *element, const gchar *name);
gboolean gst_element_connect (GstElement *src, const gchar *srcpadname,
GstElement *dest, const gchar *destpadname);
Index: gst/gstparse.c
===================================================================
RCS file: /cvsroot/gstreamer/gstreamer/gst/gstparse.c,v
retrieving revision 1.37
diff -u -r1.37 gstparse.c
--- gst/gstparse.c 2002/01/04 19:47:16 1.37
+++ gst/gstparse.c 2002/01/14 02:02:20
@@ -211,11 +211,6 @@
numsrcpads++;
}
- /* try to create a pad using that padtemplate name */
- else if ((temppad = gst_element_request_pad_by_name (previous, tempname))) {
- srcpads = g_slist_append (srcpads, temppad);
- numsrcpads++;
- }
if (!temppad) {
GST_DEBUG (0, "NO SUCH pad %s in element %s\n", tempname, GST_ELEMENT_NAME (previous));
}
@@ -378,11 +373,6 @@
numsinkpads++;
}
- /* try to create a pad using that padtemplate name */
- else if ((temppad = gst_element_request_pad_by_name (element, tempname))) {
- sinkpads = g_slist_append (sinkpads, temppad);
- numsinkpads++;
- }
if (!temppad) {
GST_DEBUG (0, "NO SUCH pad %s in element %s\n", tempname, GST_ELEMENT_NAME (element));
}
Index: tests/muxing/case1.c
===================================================================
RCS file: /cvsroot/gstreamer/gstreamer/tests/muxing/case1.c,v
retrieving revision 1.5
diff -u -r1.5 case1.c
--- tests/muxing/case1.c 2002/01/01 13:57:18 1.5
+++ tests/muxing/case1.c 2002/01/14 02:02:22
@@ -52,14 +52,10 @@
gst_bin_add (pipeline, GST_ELEMENT (sink));
gst_element_connect (src, "src", tee, "sink");
- gst_pad_connect (gst_element_request_pad_by_name (tee, "src%d"),
- gst_element_get_pad (identity1, "sink"));
- gst_pad_connect (gst_element_request_pad_by_name (tee, "src%d"),
- gst_element_get_pad (identity2, "sink"));
- gst_pad_connect (gst_element_get_pad (identity1, "src"),
- gst_element_request_pad_by_name (aggregator, "sink%d"));
- gst_pad_connect (gst_element_get_pad (identity2, "src"),
- gst_element_request_pad_by_name (aggregator, "sink%d"));
+ gst_element_connect (tee, "src%d", identity1, "sink");
+ gst_element_connect (tee, "src%d", identity2, "sink");
+ gst_element_connect (identity1, "src", aggregator, "sink%d");
+ gst_element_connect (identity2, "src", aggregator, "sink%d");
gst_element_connect (aggregator, "src", sink, "sink");
g_signal_connect (G_OBJECT (src), "eos",
More information about the gstreamer-devel
mailing list