gst/median/gstmedian.c: Fix capsnego.
authorRonald S. Bultje <rbultje@ronald.bitfreak.net>
Thu, 8 Jan 2004 12:42:40 +0000 (12:42 +0000)
committerRonald S. Bultje <rbultje@ronald.bitfreak.net>
Thu, 8 Jan 2004 12:42:40 +0000 (12:42 +0000)
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.

ChangeLog
gst/median/gstmedian.c

index 7a13ccb541f4fc83bf7b01bc402e521db76145bf..c8645bc32455898b394ad82e8a6a9931a153692f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2004-01-08  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/median/gstmedian.c: (gst_median_link), (gst_median_init):
+         Fix capsnego.
+
 2004-01-08  Julien MOUTTE  <julien@moutte.net>
 
        * ext/sdl/sdlvideosink.c: (gst_sdlvideosink_create): Using XOverlay
index 719ed8d83e8265f4cf7ad2548d0f594c4ac2ee0a..62e4c06918394bb12e044232d6f1c2c615bcc402 100644 (file)
@@ -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;