summaryrefslogtreecommitdiffstats
path: root/gst/valve
diff options
context:
space:
mode:
authorOlivier CrĂȘte <olivier.crete@collabora.co.uk>2008-12-10 17:00:33 -0500
committerEdward Hervey <bilboed@bilboed.com>2009-02-17 19:29:59 +0100
commit1367a3a3bc96a040da5dcfac9534108e4956d275 (patch)
tree8055cd769d8b0cf3a566363352e768b42222840f /gst/valve
parent907a660cdc31a3e3bb4ad6d9af2179fa305c6028 (diff)
downloadgst-plugins-bad-1367a3a3bc96a040da5dcfac9534108e4956d275.tar.gz
gst-plugins-bad-1367a3a3bc96a040da5dcfac9534108e4956d275.tar.bz2
gst-plugins-bad-1367a3a3bc96a040da5dcfac9534108e4956d275.zip
[MOVED FROM GST-P-FARSIGHT] Add getcaps proxying to the valve
Diffstat (limited to 'gst/valve')
-rw-r--r--gst/valve/gstvalve.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/gst/valve/gstvalve.c b/gst/valve/gstvalve.c
index 88a4edb1..ecd0f7dc 100644
--- a/gst/valve/gstvalve.c
+++ b/gst/valve/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;
+}