From a3d21f7147757dcc47a623768c2fa7cec56a9692 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Olivier=20Cr=C3=AAte?= Date: Wed, 10 Dec 2008 17:00:33 -0500 Subject: [PATCH] fsvalve: Add getcaps proxying to the valve --- plugins/elements/gstvalve.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/plugins/elements/gstvalve.c b/plugins/elements/gstvalve.c index 88a4edb..ecd0f7d 100644 --- a/plugins/elements/gstvalve.c +++ b/plugins/elements/gstvalve.c @@ -77,6 +77,7 @@ static gboolean gst_valve_event (GstPad *pad, GstEvent *event); static GstFlowReturn gst_valve_buffer_alloc (GstPad * pad, guint64 offset, guint size, GstCaps * caps, GstBuffer ** buf); static GstFlowReturn gst_valve_chain (GstPad *pad, GstBuffer *buffer); +static GstCaps *gst_valve_getcaps (GstPad *pad); static void _do_init (GType type) @@ -127,6 +128,8 @@ gst_valve_init (GstValve *valve, GstValveClass *klass) valve->discont = FALSE; valve->srcpad = gst_pad_new_from_static_template (&srctemplate, "src"); + gst_pad_set_getcaps_function (valve->srcpad, + GST_DEBUG_FUNCPTR (gst_valve_getcaps)); gst_element_add_pad (GST_ELEMENT (valve), valve->srcpad); valve->sinkpad = gst_pad_new_from_static_template (&sinktemplate, "sink"); @@ -136,6 +139,8 @@ gst_valve_init (GstValve *valve, GstValveClass *klass) GST_DEBUG_FUNCPTR (gst_valve_event)); gst_pad_set_bufferalloc_function (valve->sinkpad, GST_DEBUG_FUNCPTR (gst_valve_buffer_alloc)); + gst_pad_set_getcaps_function (valve->sinkpad, + GST_DEBUG_FUNCPTR (gst_valve_getcaps)); gst_element_add_pad (GST_ELEMENT (valve), valve->sinkpad); } @@ -260,3 +265,22 @@ GST_PLUGIN_DEFINE (GST_VERSION_MAJOR, "fsvalve", "Valve", gst_valve_plugin_init, VERSION, "LGPL", "Farsight", "http://farsight.sf.net") + +static GstCaps * +gst_valve_getcaps (GstPad *pad) +{ + GstValve *valve = GST_VALVE (gst_pad_get_parent (pad)); + GstCaps *caps; + + if (pad == valve->sinkpad) + caps = gst_pad_peer_get_caps (valve->srcpad); + else + caps = gst_pad_peer_get_caps (valve->sinkpad); + + if (caps == NULL) + caps = gst_caps_copy (gst_pad_get_pad_template_caps (pad)); + + gst_object_unref (valve); + + return caps; +} -- 2.7.4