From: <ds...@fr...> - 2005-04-24 21:16:59
|
CVS Root: /cvs/gstreamer Module: gstreamer Changes by: ds Date: Mon Apr 25 2005 07:16:57 EST Log message: * gst/gstpad.c: Remove handling of filtered caps. Fix/merge functions that handle filtered links. * gst/gstpad.h: Remove 'appfilter' field and prototypes of removed functions. * gst/gstutils.c: Fix/remove utility functions that handle filtered caps. * gst/gstutils.h: * gst/gstvalue.c: Add serialization/deserialization of caps * gst/parse/grammar.y: Ignore filtered caps when linking. This requires fixing so that the filter caps notation creates a capsfilter element and sets the filter_caps property. I think everyone probably wants to keep the shorthand notation. * docs/gst/tmpl/gstelement.sgml: updates for API changes. * docs/gst/tmpl/gstpad.sgml: * gst/elements/gstelements.c: Register capsfilter element. * gst/Makefile.am: fix spacing * docs/random/ds/0.9-suggested-changes: random Modified files: . : ChangeLog docs/gst/tmpl : gstelement.sgml gstpad.sgml docs/random/ds : 0.9-suggested-changes gst : Makefile.am gstpad.c gstpad.h gstutils.c gstutils.h gstvalue.c gst/elements : gstelements.c gst/parse : grammar.y Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/ChangeLog.diff?r1=1.1022&r2=1.1023 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/docs/gst/tmpl/gstelement.sgml.diff?r1=1.96&r2=1.97 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/docs/gst/tmpl/gstpad.sgml.diff?r1=1.73&r2=1.74 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/docs/random/ds/0.9-suggested-changes.diff?r1=1.31&r2=1.32 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/Makefile.am.diff?r1=1.169&r2=1.170 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/gstpad.c.diff?r1=1.368&r2=1.369 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/gstpad.h.diff?r1=1.161&r2=1.162 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/gstutils.c.diff?r1=1.50&r2=1.51 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/gstutils.h.diff?r1=1.29&r2=1.30 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/gstvalue.c.diff?r1=1.58&r2=1.59 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/elements/gstelements.c.diff?r1=1.57&r2=1.58 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/parse/grammar.y.diff?r1=1.54&r2=1.55 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gstreamer/ChangeLog,v retrieving revision 1.1022 retrieving revision 1.1023 diff -u -d -r1.1022 -r1.1023 --- ChangeLog 23 Apr 2005 23:29:46 -0000 1.1022 +++ ChangeLog 24 Apr 2005 21:16:43 -0000 1.1023 @@ -1,3 +1,24 @@ +2005-04-24 David Schleef <ds...@sc...> + + * gst/gstpad.c: Remove handling of filtered caps. Fix/merge + functions that handle filtered links. + * gst/gstpad.h: Remove 'appfilter' field and prototypes of + removed functions. + * gst/gstutils.c: Fix/remove utility functions that handle + filtered caps. + * gst/gstutils.h: + * gst/gstvalue.c: Add serialization/deserialization of caps + * gst/parse/grammar.y: Ignore filtered caps when linking. This + requires fixing so that the filter caps notation creates + a capsfilter element and sets the filter_caps property. I + think everyone probably wants to keep the shorthand notation. + * docs/gst/tmpl/gstelement.sgml: updates for API changes. + * docs/gst/tmpl/gstpad.sgml: + * gst/elements/gstelements.c: Register capsfilter element. + * gst/Makefile.am: fix spacing + * docs/random/ds/0.9-suggested-changes: random 2005-04-23 David Schleef <ds...@sc...> * gst/elements/Makefile.am: Index: Makefile.am RCS file: /cvs/gstreamer/gstreamer/gst/Makefile.am,v retrieving revision 1.169 retrieving revision 1.170 diff -u -d -r1.169 -r1.170 --- Makefile.am 23 Apr 2005 23:25:05 -0000 1.169 +++ Makefile.am 24 Apr 2005 21:16:44 -0000 1.170 @@ -183,7 +183,7 @@ gstsystemclock.h \ gsttag.h \ gsttaginterface.h \ - gsttask.h \ + gsttask.h \ gsttrace.h \ gsttrashstack.h \ gsttypefind.h \ Index: gstpad.c RCS file: /cvs/gstreamer/gstreamer/gst/gstpad.c,v retrieving revision 1.368 retrieving revision 1.369 diff -u -d -r1.368 -r1.369 --- gstpad.c 20 Apr 2005 09:10:41 -0000 1.368 +++ gstpad.c 24 Apr 2005 21:16:44 -0000 1.369 @@ -1104,7 +1104,7 @@ * * Sets the given link function for the pad. It will be called when the pad is * linked or relinked with caps. The caps passed to the link function is - * the filtered caps for the connnection. It can contain a non fixed caps. + * the caps for the connnection. It can contain a non fixed caps. * The return value GST_PAD_LINK_OK should be used when the connection can be * made. @@ -1305,10 +1305,6 @@ GST_RPAD_PEER (realsrc) = NULL; GST_RPAD_PEER (realsink) = NULL; - /* clear filter, note that we leave the pad caps as they are */ - gst_caps_replace (&GST_RPAD_APPFILTER (realsrc), NULL); - gst_caps_replace (&GST_RPAD_APPFILTER (realsink), NULL); - GST_UNLOCK (realsink); GST_UNLOCK (realsrc); @@ -1385,11 +1381,45 @@ } } +static gboolean +gst_pad_link_check_templates_compatible_unlocked (GstRealPad * src, + GstRealPad * sink) +{ + GstCaps *srccaps; + GstCaps *sinkcaps; + GstCaps *icaps; + gboolean ret; + if (!GST_PAD_PAD_TEMPLATE (src)) { + g_warning ("pad has no pad template"); + return FALSE; + } + if (!GST_PAD_PAD_TEMPLATE (sink)) { + srccaps = GST_PAD_TEMPLATE_CAPS (GST_PAD_PAD_TEMPLATE (src)); + sinkcaps = GST_PAD_TEMPLATE_CAPS (GST_PAD_PAD_TEMPLATE (sink)); + icaps = gst_caps_intersect (srccaps, sinkcaps); + if (gst_caps_is_empty (icaps)) { + ret = FALSE; + } else { + ret = TRUE; + gst_caps_unref (icaps); + return ret; +} /* FIXME leftover from an attempt at refactoring... */ static GstPadLinkReturn -gst_pad_link_prepare_filtered (GstPad * srcpad, GstPad * sinkpad, - GstRealPad ** outrealsrc, GstRealPad ** outrealsink, - const GstCaps * filtercaps) +gst_pad_link_prepare (GstPad * srcpad, GstPad * sinkpad, + GstRealPad ** outrealsrc, GstRealPad ** outrealsink) { GstRealPad *realsrc, *realsink; @@ -1425,48 +1455,12 @@ *outrealsink = realsink; /* check pad caps for non-empty intersection */ - { - GstCaps *srccaps; - GstCaps *sinkcaps; - srccaps = gst_real_pad_get_caps_unlocked (realsrc); - sinkcaps = gst_real_pad_get_caps_unlocked (realsink); - GST_CAT_DEBUG (GST_CAT_CAPS, "got caps %p and %p", srccaps, sinkcaps); - if (srccaps && sinkcaps) { - GstCaps *caps; - caps = gst_caps_intersect (srccaps, sinkcaps); - GST_CAT_DEBUG (GST_CAT_CAPS, - "intersection caps %p %" GST_PTR_FORMAT, caps, caps); - if (filtercaps) { - GstCaps *tmp; - tmp = gst_caps_intersect (caps, filtercaps); - gst_caps_unref (caps); - caps = tmp; - } - if (!caps || gst_caps_is_empty (caps)) - goto no_format; - } + if (!gst_pad_link_check_templates_compatible_unlocked (realsrc, realsink)) { + goto no_format; /* FIXME check pad scheduling for non-empty intersection */ - /* update filter */ - if (filtercaps) { - GstCaps *filtercopy; - filtercopy = gst_caps_copy (filtercaps); - gst_caps_replace (&GST_PAD_APPFILTER (realsrc), filtercopy); - gst_caps_replace (&GST_PAD_APPFILTER (realsink), filtercopy); - gst_caps_unref (filtercopy); - } else { - gst_caps_replace (&GST_PAD_APPFILTER (realsrc), NULL); - gst_caps_replace (&GST_PAD_APPFILTER (realsink), NULL); - } return GST_PAD_LINK_OK; lost_src_ghostpad: @@ -1521,16 +1515,11 @@ /** - * gst_pad_link_filtered: + * gst_pad_link: * @srcpad: the source #GstPad to link. * @sinkpad: the sink #GstPad to link. - * @filtercaps: the filter #GstCaps. * - * Links the source pad and the sink pad, constrained - * by the given filter caps. - * - * The filtercaps will be copied and refcounted, so you should unref - * it yourself after using this function. + * Links the source pad and the sink pad. * Returns: A result code indicating if the connection worked or * what went wrong. @@ -1538,14 +1527,12 @@ * MT Safe. */ GstPadLinkReturn -gst_pad_link_filtered (GstPad * srcpad, GstPad * sinkpad, +gst_pad_link (GstPad * srcpad, GstPad * sinkpad) GstPadLinkReturn result; - result = gst_pad_link_prepare_filtered (srcpad, sinkpad, &realsrc, &realsink, - filtercaps); + result = gst_pad_link_prepare (srcpad, sinkpad, &realsrc, &realsink); if (result != GST_PAD_LINK_OK) goto prepare_failed; @@ -1590,12 +1577,6 @@ GST_CAT_INFO (GST_CAT_PADS, "link between %s:%s and %s:%s failed", GST_DEBUG_PAD_NAME (realsrc), GST_DEBUG_PAD_NAME (realsink)); - /* remove the filter again */ - if (filtercaps) { - gst_caps_replace (&GST_RPAD_APPFILTER (realsrc), NULL); - gst_caps_replace (&GST_RPAD_APPFILTER (realsink), NULL); GST_UNLOCK (realsink); GST_UNLOCK (realsrc); @@ -1607,22 +1588,6 @@ -/** - * gst_pad_link: - * @srcpad: the source #GstPad to link. - * @sinkpad: the sink #GstPad to link. - * Links the source pad to the sink pad. - * Returns: A result code indicating if the connection worked or - * what went wrong. - */ -GstPadLinkReturn -gst_pad_link (GstPad * srcpad, GstPad * sinkpad) -{ - return gst_pad_link_filtered (srcpad, sinkpad, NULL); -} static void gst_pad_set_pad_template (GstPad * pad, GstPadTemplate * templ) @@ -1723,118 +1688,11 @@ GST_GPAD_REALPAD (ghostpad) = NULL; - * gst_pad_relink_filtered: - * @srcpad: the source #GstPad to relink. - * @sinkpad: the sink #GstPad to relink. - * @filtercaps: the #GstPad to use as a filter in the relink. - * Relinks the given source and sink pad, constrained by the given - * capabilities. If the relink fails, the pads are unlinked - * and an error code is returned. - * Returns: The result code of the operation. - * MT safe -gst_pad_relink_filtered (GstPad * srcpad, GstPad * sinkpad, - GstRealPad *realsrc, *realsink; - /* FIXME refactor and share code with link/unlink */ - /* generic checks */ - g_return_val_if_fail (GST_IS_PAD (srcpad), GST_PAD_LINK_REFUSED); - g_return_val_if_fail (GST_IS_PAD (sinkpad), GST_PAD_LINK_REFUSED); - GST_CAT_INFO (GST_CAT_PADS, "trying to relink %s:%s and %s:%s", - GST_DEBUG_PAD_NAME (srcpad), GST_DEBUG_PAD_NAME (sinkpad)); - /* now we need to deal with the real/ghost stuff */ - GST_PAD_REALIZE_AND_LOCK (srcpad, realsrc, lost_src_ghostpad); - if (G_UNLIKELY (GST_RPAD_DIRECTION (realsrc) != GST_PAD_SRC)) - goto not_srcpad; - GST_PAD_REALIZE_AND_LOCK (sinkpad, realsink, lost_sink_ghostpad); - if (G_UNLIKELY (GST_RPAD_DIRECTION (realsink) != GST_PAD_SINK)) - goto not_sinkpad; - if (G_UNLIKELY (GST_RPAD_PEER (realsink) != realsrc)) - goto not_linked_together; - if ((GST_PAD (realsrc) != srcpad) || (GST_PAD (realsink) != sinkpad)) { - GST_CAT_INFO (GST_CAT_PADS, "*actually* relinking %s:%s and %s:%s", - GST_DEBUG_PAD_NAME (realsrc), GST_DEBUG_PAD_NAME (realsink)); - /* clear caps to force renegotiation */ - gst_caps_replace (&GST_PAD_CAPS (realsrc), NULL); - gst_caps_replace (&GST_PAD_CAPS (realsink), NULL); - GST_UNLOCK (realsink); - GST_UNLOCK (realsrc); - GST_CAT_INFO (GST_CAT_PADS, "relinked %s:%s and %s:%s, successful", - GST_DEBUG_PAD_NAME (realsrc), GST_DEBUG_PAD_NAME (realsink)); - return GST_PAD_LINK_OK; -lost_src_ghostpad: - return GST_PAD_LINK_REFUSED; -not_srcpad: - g_critical ("pad %s is not a source pad", GST_PAD_NAME (realsrc)); - GST_UNLOCK (realsrc); - return GST_PAD_LINK_WRONG_DIRECTION; -lost_sink_ghostpad: - GST_DEBUG ("lost sink ghostpad"); -not_sinkpad: - g_critical ("pad %s is not a sink pad", GST_PAD_NAME (realsink)); - GST_UNLOCK (realsink); -not_linked_together: - GST_CAT_INFO (GST_CAT_PADS, "src %s:%s was not linked with sink %s:%s", - /* we do not emit a warning in this case because unlinking cannot - * be made MT safe.*/ /* should be called with the pad LOCK held */ static GstCaps * gst_real_pad_get_caps_unlocked (GstRealPad * realpad) - GstCaps *result = NULL, *filter; + GstCaps *result = NULL; GST_CAT_DEBUG (GST_CAT_CAPS, "get pad caps of %s:%s (%p)", GST_DEBUG_PAD_NAME (realpad), realpad); @@ -1901,19 +1759,6 @@ result = gst_caps_new_empty (); done: - filter = GST_RPAD_APPFILTER (realpad); - if (filter) { - GstCaps *temp = result; - GST_CAT_DEBUG (GST_CAT_CAPS, - "app filter %p %" GST_PTR_FORMAT, filter, filter); - result = gst_caps_intersect (temp, filter); - gst_caps_unref (temp); - "caps after intersection with app filter %p %" GST_PTR_FORMAT, result, - result); return result; @@ -2459,58 +2304,6 @@ - * gst_pad_get_filter_caps: - * @pad: a real #GstPad. - * Gets the capabilities of filter that currently configured on @pad - * and its peer. - * Returns: the filter #GstCaps of the pad link. Free the caps when - * you no longer need it. This function returns NULL when the @pad has no - * peer or there is no filter configured. - * MT safe. -GstCaps * -gst_pad_get_filter_caps (GstPad * pad) - GstCaps *caps; - GstRealPad *realpad, *peer; - g_return_val_if_fail (GST_IS_PAD (pad), NULL); - GST_PAD_REALIZE_AND_LOCK (pad, realpad, lost_ghostpad); - if (G_UNLIKELY ((peer = GST_RPAD_PEER (realpad)) == NULL)) - goto no_peer; - GST_CAT_DEBUG (GST_CAT_PROPERTIES, "%s:%s: getting filter caps", - GST_DEBUG_PAD_NAME (realpad)); - if ((caps = GST_RPAD_APPFILTER (realpad)) != NULL) - gst_caps_ref (caps); - GST_UNLOCK (pad); - GST_CAT_DEBUG (GST_CAT_CAPS, "filter caps %" GST_PTR_FORMAT, caps); - return caps; -lost_ghostpad: - GST_UNLOCK (pad); - return NULL; -no_peer: - GST_CAT_DEBUG (GST_CAT_PROPERTIES, "%s:%s: no peer", - GST_DEBUG_PAD_NAME (realpad)); - GST_UNLOCK (realpad); * gst_pad_alloc_buffer: * @pad: a source #GstPad * @offset: the offset of the new buffer in the stream @@ -2651,7 +2444,6 @@ /* clear the caps */ gst_caps_replace (&GST_RPAD_CAPS (pad), NULL); - gst_caps_replace (&GST_RPAD_APPFILTER (pad), NULL); if (GST_IS_ELEMENT (GST_OBJECT_PARENT (pad))) { GST_CAT_DEBUG (GST_CAT_REFCOUNTING, "removing pad from element '%s'", Index: gstpad.h RCS file: /cvs/gstreamer/gstreamer/gst/gstpad.h,v retrieving revision 1.161 retrieving revision 1.162 diff -u -d -r1.161 -r1.162 --- gstpad.h 20 Apr 2005 09:10:41 -0000 1.161 +++ gstpad.h 24 Apr 2005 21:16:44 -0000 1.162 @@ -222,7 +222,6 @@ /* the pad capabilities */ GstCaps *caps; - GstCaps *appfilter; GstPadGetCapsFunction getcapsfunc; GstPadSetCapsFunction setcapsfunc; GstPadAcceptCapsFunction acceptcapsfunc; @@ -320,7 +319,6 @@ #define GST_RPAD_UNLINKFUNC(pad) (GST_REAL_PAD_CAST(pad)->unlinkfunc) #define GST_RPAD_CAPS(pad) (GST_REAL_PAD_CAST(pad)->caps) -#define GST_RPAD_APPFILTER(pad) (GST_REAL_PAD_CAST(pad)->appfilter) #define GST_RPAD_GETCAPSFUNC(pad) (GST_REAL_PAD_CAST(pad)->getcapsfunc) #define GST_RPAD_SETCAPSFUNC(pad) (GST_REAL_PAD_CAST(pad)->setcapsfunc) #define GST_RPAD_ACCEPTCAPSFUNC(pad) (GST_REAL_PAD_CAST(pad)->acceptcapsfunc) @@ -366,7 +364,6 @@ #define GST_PAD_REALIZE(pad) (GST_IS_REAL_PAD(pad) ? ((GstRealPad *)(pad)) : GST_GPAD_REALPAD(pad)) #define GST_PAD_DIRECTION(pad) GST_RPAD_DIRECTION(GST_PAD_REALIZE(pad)) #define GST_PAD_CAPS(pad) GST_RPAD_CAPS(GST_PAD_REALIZE (pad)) -#define GST_PAD_APPFILTER(pad) GST_RPAD_APPFILTER(GST_PAD_REALIZE (pad)) #define GST_PAD_PEER(pad) GST_PAD_CAST(GST_RPAD_PEER(GST_PAD_REALIZE(pad))) /* Some check functions (unused?) */ @@ -497,10 +494,6 @@ void gst_pad_set_unlink_function (GstPad *pad, GstPadUnlinkFunction unlink); GstPadLinkReturn gst_pad_link (GstPad *srcpad, GstPad *sinkpad); -GstPadLinkReturn gst_pad_link_filtered (GstPad *srcpad, GstPad *sinkpad, - const GstCaps *filtercaps); -GstPadLinkReturn gst_pad_relink_filtered (GstPad *srcpad, GstPad *sinkpad, gboolean gst_pad_unlink (GstPad *srcpad, GstPad *sinkpad); gboolean gst_pad_is_linked (GstPad *pad); @@ -527,7 +520,6 @@ /* capsnego for connected pads */ GstCaps * gst_pad_get_allowed_caps (GstPad * srcpad); GstCaps * gst_pad_get_negotiated_caps (GstPad * pad); -GstCaps * gst_pad_get_filter_caps (GstPad * pad); /* data passing functions */ GstFlowReturn gst_pad_push (GstPad *pad, GstBuffer *buffer); Index: gstutils.c RCS file: /cvs/gstreamer/gstreamer/gst/gstutils.c,v retrieving revision 1.50 retrieving revision 1.51 diff -u -d -r1.50 -r1.51 --- gstutils.c 23 Apr 2005 23:29:46 -0000 1.50 +++ gstutils.c 24 Apr 2005 21:16:44 -0000 1.51 @@ -399,6 +399,7 @@ gst_element_add_pad (element, pad); } + padlist = padlist->next; @@ -566,7 +567,7 @@ - * gst_element_get_compatible_pad_filtered: + * gst_element_get_compatible_pad: * @element: a #GstElement in which the pad should be found. * @pad: the #GstPad to find a compatible one for. * @filtercaps: the #GstCaps to use as a filter. @@ -579,8 +580,8 @@ * found. GstPad * -gst_element_get_compatible_pad_filtered (GstElement * element, GstPad * pad, +gst_element_get_compatible_pad (GstElement * element, GstPad * pad, + const GstCaps * caps) GstIterator *pads; GstPadTemplate *templ; @@ -588,12 +589,14 @@ GstPad *foundpad = NULL; gboolean done; + /* FIXME check for caps compatibility */ g_return_val_if_fail (GST_IS_ELEMENT (element), NULL); g_return_val_if_fail (GST_IS_PAD (pad), NULL); GST_CAT_DEBUG (GST_CAT_ELEMENT_PADS, - "finding pad in %s compatible with %s:%s and filter %" GST_PTR_FORMAT, - GST_ELEMENT_NAME (element), GST_DEBUG_PAD_NAME (pad), filtercaps); + "finding pad in %s compatible with %s:%s", + GST_ELEMENT_NAME (element), GST_DEBUG_PAD_NAME (pad)); /* let's use the real pad */ pad = (GstPad *) GST_PAD_REALIZE (pad); @@ -619,8 +622,7 @@ peer = gst_pad_get_peer (current); - if (peer == NULL && - gst_pad_can_link_filtered (pad, current, filtercaps)) { + if (peer == NULL && gst_pad_can_link (pad, current)) { GST_CAT_DEBUG (GST_CAT_ELEMENT_PADS, "found existing unlinked pad %s:%s", @@ -654,13 +656,6 @@ /* try to create a new one */ /* requesting is a little crazy, we need a template. Let's create one */ templcaps = gst_pad_get_caps (pad); - if (filtercaps != NULL) { - GstCaps *temp; - temp = gst_caps_intersect (filtercaps, templcaps); - gst_caps_unref (templcaps); - templcaps = temp; templ = gst_pad_template_new ((gchar *) GST_PAD_NAME (pad), GST_PAD_DIRECTION (pad), GST_PAD_ALWAYS, templcaps); @@ -679,26 +674,6 @@ return NULL; - * gst_element_get_compatible_pad: - * @element: a #GstElement in which the pad should be found. - * @pad: the #GstPad to find a compatible one for. - * Looks for an unlinked pad to which the given pad can link to. - * It is not guaranteed that linking the pads will work, though - * it should work in most cases. - * Returns: the #GstPad to which a link can be made, or %NULL if one - * could not be found. -GstPad * -gst_element_get_compatible_pad (GstElement * element, GstPad * pad) - return gst_element_get_compatible_pad_filtered (element, pad, NULL); * gst_element_state_get_name: * @state: a #GstElementState to get the name of. @@ -754,12 +729,11 @@ - * gst_element_link_pads_filtered: + * gst_element_link_pads: * @src: a #GstElement containing the source pad. * @srcpadname: the name of the #GstPad in source element or NULL for any pad. * @dest: the #GstElement containing the destination pad. * @destpadname: the name of the #GstPad in destination element or NULL for any pad. - * @filtercaps: the #GstCaps to use as a filter. * Links the two named pads of the source and destination elements. * Side effect is that if one of the pads has no parent, it becomes a @@ -769,8 +743,8 @@ * Returns: TRUE if the pads could be linked, FALSE otherwise. gboolean -gst_element_link_pads_filtered (GstElement * src, const gchar * srcpadname, - GstElement * dest, const gchar * destpadname, const GstCaps * filtercaps) +gst_element_link_pads (GstElement * src, const gchar * srcpadname, + GstElement * dest, const gchar * destpadname) const GList *srcpads, *destpads, *srctempls, *desttempls, *l; GstPad *srcpad, *destpad; @@ -853,7 +827,7 @@ gboolean result; /* two explicitly specified pads */ - result = gst_pad_link_filtered (srcpad, destpad, filtercaps); + result = gst_pad_link (srcpad, destpad); gst_object_unref (GST_OBJECT (srcpad)); gst_object_unref (GST_OBJECT (destpad)); @@ -871,12 +845,9 @@ if ((GST_PAD_DIRECTION (srcpad) == GST_PAD_SRC) && (GST_PAD_PEER (srcpad) == NULL)) { GstPad *temp = destpadname ? destpad : - gst_element_get_compatible_pad_filtered (dest, srcpad, - filtercaps); + gst_element_get_compatible_pad (dest, srcpad, NULL); - if (temp - && gst_pad_link_filtered (srcpad, temp, - filtercaps) == GST_PAD_LINK_OK) { + if (temp && gst_pad_link (srcpad, temp) == GST_PAD_LINK_OK) { GST_CAT_DEBUG (GST_CAT_ELEMENT_PADS, "linked pad %s:%s to pad %s:%s", GST_DEBUG_PAD_NAME (srcpad), GST_DEBUG_PAD_NAME (temp)); if (destpad) @@ -915,12 +886,9 @@ GST_DEBUG_PAD_NAME (destpad)); if ((GST_PAD_DIRECTION (destpad) == GST_PAD_SINK) && (GST_PAD_PEER (destpad) == NULL)) { - GstPad *temp = gst_element_get_compatible_pad_filtered (src, destpad, + GstPad *temp = gst_element_get_compatible_pad (src, destpad, NULL); - && gst_pad_link_filtered (temp, destpad, + if (temp && gst_pad_link (temp, destpad) == GST_PAD_LINK_OK) { GST_DEBUG_PAD_NAME (temp), GST_DEBUG_PAD_NAME (destpad)); gst_object_unref (GST_OBJECT (temp)); @@ -974,8 +942,7 @@ gst_element_get_request_pad (src, srctempl->name_template); destpad = gst_element_get_request_pad (dest, desttempl->name_template); - if (gst_pad_link_filtered (srcpad, destpad, - filtercaps) == GST_PAD_LINK_OK) { + if (gst_pad_link (srcpad, destpad) == GST_PAD_LINK_OK) { GST_CAT_DEBUG (GST_CAT_ELEMENT_PADS, "linked pad %s:%s to pad %s:%s", GST_DEBUG_PAD_NAME (srcpad), GST_DEBUG_PAD_NAME (destpad)); @@ -1000,12 +967,11 @@ - * gst_element_link_filtered: + * gst_element_link: - * Links @src to @dest, filtered by @filtercaps. The link must be from source to + * Links @src to @dest. The link must be from source to * destination; the other direction will not be tried. The function looks for * existing pads that aren't linked yet. It will request new pads if necessary. * If multiple links are possible, only one is established. @@ -1013,10 +979,9 @@ * Returns: TRUE if the elements could be linked, FALSE otherwise. -gst_element_link_filtered (GstElement * src, GstElement * dest, +gst_element_link (GstElement * src, GstElement * dest) - return gst_element_link_pads_filtered (src, NULL, dest, NULL, filtercaps); + return gst_element_link_pads (src, NULL, dest, NULL); @@ -1053,44 +1018,6 @@ - * gst_element_link: - * @src: a #GstElement containing the source pad. - * @dest: the #GstElement containing the destination pad. - * Links @src to @dest with no filter caps. See gst_element_link_filtered() for - * more information. - * Returns: TRUE if the elements could be linked, FALSE otherwise. -gboolean -gst_element_link (GstElement * src, GstElement * dest) - return gst_element_link_pads_filtered (src, NULL, dest, NULL, NULL); - * gst_element_link_pads: - * @srcpadname: the name of the #GstPad in the source element. - * @destpadname: the name of the #GstPad in destination element. - * Links the two named pads of the source and destination elements. - * Side effect is that if one of the pads has no parent, it becomes a - * child of the parent of the other element. If they have different - * parents, the link fails. - * Returns: TRUE if the pads could be linked, FALSE otherwise. -gst_element_link_pads (GstElement * src, const gchar * srcpadname, - GstElement * dest, const gchar * destpadname) - return gst_element_link_pads_filtered (src, srcpadname, dest, destpadname, - NULL); * gst_element_unlink_pads: * @srcpadname: the name of the #GstPad in source element. @@ -1221,19 +1148,17 @@ - * gst_pad_can_link_filtered: + * gst_pad_can_link: - * Checks if the source pad and the sink pad can be linked when constrained - * by the given filter caps. Both @srcpad and @sinkpad must be unlinked. + * Checks if the source pad and the sink pad can be linked. + * Both @srcpad and @sinkpad must be unlinked. * Returns: TRUE if the pads can be linked, FALSE otherwise. -gst_pad_can_link_filtered (GstPad * srcpad, GstPad * sinkpad, +gst_pad_can_link (GstPad * srcpad, GstPad * sinkpad) @@ -1298,21 +1223,6 @@ - * gst_pad_can_link: - * Checks if the source pad and the sink pad can be linked. - * Returns: TRUE if the pads can be linked, FALSE otherwise. -gst_pad_can_link (GstPad * srcpad, GstPad * sinkpad) - return gst_pad_can_link_filtered (srcpad, sinkpad, NULL); * gst_pad_use_fixed_caps: * @pad: the pad to use Index: gstutils.h RCS file: /cvs/gstreamer/gstreamer/gst/gstutils.h,v retrieving revision 1.29 retrieving revision 1.30 diff -u -d -r1.29 -r1.30 --- gstutils.h 23 Apr 2005 23:29:46 -0000 1.29 +++ gstutils.h 24 Apr 2005 21:16:44 -0000 1.30 @@ -233,9 +233,8 @@ GstFlowReturn gst_element_finish_preroll (GstElement *element, GstPad *pad); void gst_element_create_all_pads (GstElement *element); -GstPad* gst_element_get_compatible_pad (GstElement *element, GstPad *pad); -GstPad* gst_element_get_compatible_pad_filtered (GstElement *element, GstPad *pad, - const GstCaps *filtercaps); +GstPad* gst_element_get_compatible_pad (GstElement *element, GstPad *pad, + const GstCaps *caps); GstPadTemplate* gst_element_get_compatible_pad_template (GstElement *element, GstPadTemplate *compattempl); @@ -244,17 +243,12 @@ gboolean gst_element_link (GstElement *src, GstElement *dest); gboolean gst_element_link_many (GstElement *element_1, GstElement *element_2, ...); -gboolean gst_element_link_filtered (GstElement *src, GstElement *dest, void gst_element_unlink (GstElement *src, GstElement *dest); void gst_element_unlink_many (GstElement *element_1, gboolean gst_element_link_pads (GstElement *src, const gchar *srcpadname, GstElement *dest, const gchar *destpadname); -gboolean gst_element_link_pads_filtered (GstElement *src, const gchar *srcpadname, - GstElement *dest, const gchar *destpadname, - const GstCaps *filtercaps); void gst_element_unlink_pads (GstElement *src, const gchar *srcpadname, @@ -264,7 +258,6 @@ /* pad functions */ gboolean gst_pad_can_link (GstPad *srcpad, GstPad *sinkpad); -gboolean gst_pad_can_link_filtered (GstPad *srcpad, GstPad *sinkpad, const GstCaps *filtercaps); void gst_pad_use_fixed_caps (GstPad *pad); GstCaps* gst_pad_get_fixed_caps_func (GstPad *pad); Index: gstvalue.c RCS file: /cvs/gstreamer/gstreamer/gst/gstvalue.c,v retrieving revision 1.58 retrieving revision 1.59 diff -u -d -r1.58 -r1.59 --- gstvalue.c 7 Mar 2005 18:27:39 -0000 1.58 +++ gstvalue.c 24 Apr 2005 21:16:44 -0000 1.59 @@ -835,6 +835,29 @@ return (GstCaps *) g_value_get_boxed (value); +static char * +gst_value_serialize_caps (const GValue * value) + GstCaps *caps = g_value_get_boxed (value); + return gst_caps_to_string (caps); +gst_value_deserialize_caps (GValue * dest, const char *s) + GstCaps *caps; + caps = gst_caps_from_string (s); + if (caps) { + g_value_set_boxed (dest, caps); + return TRUE; + return FALSE; /************* * GstBuffer * *************/ @@ -3011,6 +3034,17 @@ gst_value.type = gst_type_fraction; gst_value_register (&gst_value); + { + static GstValueTable gst_value = { + 0, + NULL, + gst_value_serialize_caps, + gst_value_deserialize_caps, + }; + gst_value.type = GST_TYPE_CAPS; + gst_value_register (&gst_value); REGISTER_SERIALIZATION (G_TYPE_DOUBLE, double); Index: grammar.y RCS file: /cvs/gstreamer/gstreamer/gst/parse/grammar.y,v retrieving revision 1.54 retrieving revision 1.55 diff -u -d -r1.54 -r1.55 --- grammar.y 7 Mar 2005 18:27:40 -0000 1.54 +++ grammar.y 24 Apr 2005 21:16:44 -0000 1.55 @@ -372,7 +372,7 @@ GST_ELEMENT_NAME (src), link->src_pad, GST_ELEMENT_NAME (link->sink), link->sink_pad); - if (gst_element_link_pads_filtered (src, link->src_pad, link->sink, link->sink_pad, link->caps)) { + if (gst_element_link_pads (src, link->src_pad, link->sink, link->sink_pad)) { /* do this here, we don't want to get any problems later on when unlocking states */ GST_CAT_DEBUG (GST_CAT_PIPELINE, "delayed linking %s:%s to %s:%s worked", GST_ELEMENT_NAME (src), link->src_pad, @@ -442,9 +442,8 @@ link->caps); if (!srcs || !sinks) { - if (gst_element_link_pads_filtered (src, srcs ? (const gchar *) srcs->data : NULL, - sink, sinks ? (const gchar *) sinks->data : NULL, - link->caps)) { + if (gst_element_link_pads (src, srcs ? (const gchar *) srcs->data : NULL, + sink, sinks ? (const gchar *) sinks->data : NULL)) { gst_parse_element_lock (sink, gst_element_is_locked_state (src)); goto success; } else { @@ -466,7 +465,7 @@ const gchar *sink_pad = (const gchar *) sinks->data; srcs = g_slist_next (srcs); sinks = g_slist_next (sinks); - if (gst_element_link_pads_filtered (src, src_pad, sink, sink_pad, link->caps)) { + if (gst_element_link_pads (src, src_pad, sink, sink_pad)) { continue; Index: gstelement.sgml RCS file: /cvs/gstreamer/gstreamer/docs/gst/tmpl/gstelement.sgml,v retrieving revision 1.96 retrieving revision 1.97 diff -u -d -r1.96 -r1.97 --- gstelement.sgml 29 Mar 2005 10:55:38 -0000 1.96 +++ gstelement.sgml 24 Apr 2005 21:16:44 -0000 1.97 @@ -502,17 +502,7 @@ @element: @pad: -@Returns: -<!-- ##### FUNCTION gst_element_get_compatible_pad_filtered ##### --> -<para> -</para> -@element: -@pad: -@filtercaps: +@caps: @Returns: @@ -566,17 +556,6 @@ -<!-- ##### FUNCTION gst_element_link_filtered ##### --> -@src: -@dest: <!-- ##### FUNCTION gst_element_unlink ##### --> <para> @@ -608,19 +587,6 @@ -<!-- ##### FUNCTION gst_element_link_pads_filtered ##### --> -@srcpadname: -@destpadname: <!-- ##### FUNCTION gst_element_unlink_pads ##### --> Index: gstpad.sgml RCS file: /cvs/gstreamer/gstreamer/docs/gst/tmpl/gstpad.sgml,v retrieving revision 1.73 retrieving revision 1.74 diff -u -d -r1.73 -r1.74 --- gstpad.sgml 29 Mar 2005 10:55:38 -0000 1.73 +++ gstpad.sgml 24 Apr 2005 21:16:45 -0000 1.74 @@ -662,17 +662,6 @@ -<!-- ##### FUNCTION gst_pad_can_link_filtered ##### --> -@srcpad: -@sinkpad: <!-- ##### FUNCTION gst_pad_set_unlink_function ##### --> @@ -692,17 +681,6 @@ -<!-- ##### FUNCTION gst_pad_link_filtered ##### --> <!-- ##### FUNCTION gst_pad_unlink ##### --> @@ -776,17 +754,6 @@ -<!-- ##### FUNCTION gst_pad_relink_filtered ##### --> <!-- ##### FUNCTION gst_pad_get_allowed_caps ##### --> Index: gstelements.c RCS file: /cvs/gstreamer/gstreamer/gst/elements/gstelements.c,v retrieving revision 1.57 diff -u -d -r1.57 -r1.58 --- gstelements.c 12 Apr 2005 10:52:55 -0000 1.57 +++ gstelements.c 24 Apr 2005 21:16:45 -0000 1.58 @@ -51,11 +51,13 @@ }; +extern GType gst_capsfilter_get_type (void); extern GType gst_filesrc_get_type (void); extern GstElementDetails gst_filesrc_details; static struct _elements_entry _elements[] = { // {"aggregator", GST_RANK_NONE, gst_aggregator_get_type}, + {"capsfilter", GST_RANK_NONE, gst_capsfilter_get_type}, {"fakesrc", GST_RANK_NONE, gst_fakesrc_get_type}, {"fakesink", GST_RANK_NONE, gst_fakesink_get_type}, {"filesrc", GST_RANK_NONE, gst_filesrc_get_type}, Index: 0.9-suggested-changes RCS file: /cvs/gstreamer/gstreamer/docs/random/ds/0.9-suggested-changes,v retrieving revision 1.31 retrieving revision 1.32 diff -u -d -r1.31 -r1.32 --- 0.9-suggested-changes 15 Dec 2004 20:47:51 -0000 1.31 +++ 0.9-suggested-changes 24 Apr 2005 21:16:45 -0000 1.32 @@ -94,6 +94,8 @@ - remove GST_FORMATS_FUNCTION(). It doesn't work with non-c99 compilers. + - do an audit to remove GtkObject-isms from gtk-1.2 caps: (Company:) |