summaryrefslogtreecommitdiffstats
path: root/gst/median
diff options
context:
space:
mode:
authorRonald S. Bultje <rbultje@ronald.bitfreak.net>2004-01-08 12:42:40 +0000
committerRonald S. Bultje <rbultje@ronald.bitfreak.net>2004-01-08 12:42:40 +0000
commitc247ad4c07186309069e572e73bae74421f5c253 (patch)
tree016e963efed63443a4acb1b324a738d83a48650e /gst/median
parent365079c2a47a8d54c00617a0f1efb4f439505a8a (diff)
gst/median/gstmedian.c: Fix capsnego.
Original commit message from CVS: 2004-01-08 Ronald Bultje <rbultje@ronald.bitfreak.net> * gst/median/gstmedian.c: (gst_median_link), (gst_median_init): Fix capsnego.
Diffstat (limited to 'gst/median')
-rw-r--r--gst/median/gstmedian.c33
1 files changed, 20 insertions, 13 deletions
diff --git a/gst/median/gstmedian.c b/gst/median/gstmedian.c
index 719ed8d8..62e4c069 100644
--- a/gst/median/gstmedian.c
+++ b/gst/median/gstmedian.c
@@ -137,32 +137,39 @@ gst_median_class_init (GstMedianClass *klass)
}
static gboolean
-gst_median_sinkconnect (GstPad *pad, const GstCaps *caps)
+gst_median_link (GstPad *pad, const GstCaps *caps)
{
- GstMedian *filter;
- GstStructure *structure;
-
- filter = GST_MEDIAN (gst_pad_get_parent (pad));
-
- structure = gst_caps_get_structure (caps, 0);
-
- gst_structure_get_int (structure, "width", &filter->width);
- gst_structure_get_int (structure, "height", &filter->height);
+ GstMedian *filter = GST_MEDIAN (gst_pad_get_parent (pad));
+ GstPad *otherpad = (pad == filter->srcpad) ? filter->sinkpad : filter->srcpad;
+ GstStructure *structure = gst_caps_get_structure (caps, 0);
+ gint w, h;
+ GstPadLinkReturn ret;
+
+ gst_structure_get_int (structure, "width", &w);
+ gst_structure_get_int (structure, "height", &h);
+
+ ret = gst_pad_try_set_caps (otherpad, caps);
+ if (GST_PAD_LINK_SUCCESSFUL (ret)) {
+ filter->width = w;
+ filter->height = h;
+ }
- /* forward to the next plugin */
- return gst_pad_try_set_caps(filter->srcpad, caps);
+ return ret;
}
void gst_median_init (GstMedian *median)
{
median->sinkpad = gst_pad_new_from_template (
gst_static_pad_template_get (&median_sink_factory), "sink");
- gst_pad_set_link_function (median->sinkpad, gst_median_sinkconnect);
+ gst_pad_set_getcaps_function (median->sinkpad, gst_pad_proxy_getcaps);
+ gst_pad_set_link_function (median->sinkpad, gst_median_link);
gst_pad_set_chain_function (median->sinkpad, gst_median_chain);
gst_element_add_pad (GST_ELEMENT (median), median->sinkpad);
median->srcpad = gst_pad_new_from_template (
gst_static_pad_template_get (&median_src_factory), "src");
+ gst_pad_set_getcaps_function (median->srcpad, gst_pad_proxy_getcaps);
+ gst_pad_set_link_function (median->sinkpad, gst_median_link);
gst_element_add_pad (GST_ELEMENT (median), median->srcpad);
median->filtersize = 5;