summaryrefslogtreecommitdiffstats
path: root/gst/shapewipe/gstshapewipe.c
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian.droege@collabora.co.uk>2009-06-09 18:37:43 +0200
committerSebastian Dröge <sebastian.droege@collabora.co.uk>2009-06-19 11:02:00 +0200
commit09094f2f3d1a0991345dd67787c18120da8bd73e (patch)
treead311cff8b945166f43fdba5116d070c0be8245e /gst/shapewipe/gstshapewipe.c
parent80d5bd7168172cc9dc90c1ab1a571126a2186e18 (diff)
downloadgst-plugins-bad-09094f2f3d1a0991345dd67787c18120da8bd73e.tar.gz
gst-plugins-bad-09094f2f3d1a0991345dd67787c18120da8bd73e.tar.bz2
gst-plugins-bad-09094f2f3d1a0991345dd67787c18120da8bd73e.zip
shapewipe: Proxy bufferalloc on the video sinkpad
Diffstat (limited to 'gst/shapewipe/gstshapewipe.c')
-rw-r--r--gst/shapewipe/gstshapewipe.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/gst/shapewipe/gstshapewipe.c b/gst/shapewipe/gstshapewipe.c
index 61aaf476..e8d8207d 100644
--- a/gst/shapewipe/gstshapewipe.c
+++ b/gst/shapewipe/gstshapewipe.c
@@ -67,6 +67,8 @@ static gboolean gst_shape_wipe_video_sink_event (GstPad * pad,
static gboolean gst_shape_wipe_video_sink_setcaps (GstPad * pad,
GstCaps * caps);
static GstCaps *gst_shape_wipe_video_sink_getcaps (GstPad * pad);
+static GstFlowReturn gst_shape_wipe_video_sink_bufferalloc (GstPad * pad,
+ guint64 offset, guint size, GstCaps * caps, GstBuffer ** buf);
static GstFlowReturn gst_shape_wipe_mask_sink_chain (GstPad * pad,
GstBuffer * buffer);
static gboolean gst_shape_wipe_mask_sink_event (GstPad * pad, GstEvent * event);
@@ -165,6 +167,8 @@ gst_shape_wipe_init (GstShapeWipe * self, GstShapeWipeClass * g_class)
GST_DEBUG_FUNCPTR (gst_shape_wipe_video_sink_setcaps));
gst_pad_set_getcaps_function (self->video_sinkpad,
GST_DEBUG_FUNCPTR (gst_shape_wipe_video_sink_getcaps));
+ gst_pad_set_bufferalloc_function (self->video_sinkpad,
+ GST_DEBUG_FUNCPTR (gst_shape_wipe_video_sink_bufferalloc));
gst_element_add_pad (GST_ELEMENT (self), self->video_sinkpad);
self->mask_sinkpad =
@@ -265,6 +269,25 @@ gst_shape_wipe_reset (GstShapeWipe * self)
gst_segment_init (&self->segment, GST_FORMAT_TIME);
}
+static GstFlowReturn
+gst_shape_wipe_video_sink_bufferalloc (GstPad * pad, guint64 offset, guint size,
+ GstCaps * caps, GstBuffer ** buf)
+{
+ GstShapeWipe *self = GST_SHAPE_WIPE (gst_pad_get_parent (pad));
+ GstFlowReturn ret = GST_FLOW_OK;
+
+ GST_DEBUG_OBJECT (pad, "Allocating buffer with offset 0x%" G_GINT64_MODIFIER
+ "x and size %u with caps: %" GST_PTR_FORMAT, offset, size, caps);
+
+ *buf = NULL;
+
+ ret = gst_pad_alloc_buffer (self->srcpad, offset, size, caps, buf);
+
+ gst_object_unref (self);
+
+ return ret;
+}
+
static gboolean
gst_shape_wipe_video_sink_setcaps (GstPad * pad, GstCaps * caps)
{