diff options
author | Olivier CrĂȘte <olivier.crete@collabora.co.uk> | 2008-12-10 17:00:33 -0500 |
---|---|---|
committer | Edward Hervey <bilboed@bilboed.com> | 2009-02-17 19:29:59 +0100 |
commit | 1367a3a3bc96a040da5dcfac9534108e4956d275 (patch) | |
tree | 8055cd769d8b0cf3a566363352e768b42222840f | |
parent | 907a660cdc31a3e3bb4ad6d9af2179fa305c6028 (diff) | |
download | gst-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
-rw-r--r-- | gst/valve/gstvalve.c | 24 |
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; +} |