diff options
Diffstat (limited to 'gst/effectv/gstquark.c')
-rw-r--r-- | gst/effectv/gstquark.c | 57 |
1 files changed, 21 insertions, 36 deletions
diff --git a/gst/effectv/gstquark.c b/gst/effectv/gstquark.c index 76d53a09..fa15e8ad 100644 --- a/gst/effectv/gstquark.c +++ b/gst/effectv/gstquark.c @@ -94,9 +94,8 @@ static void gst_quarktv_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec); static void gst_quarktv_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec); -static void gst_quarktv_dispose (GObject * object); -static void gst_quarktv_chain (GstPad * pad, GstData * _data); +static GstFlowReturn gst_quarktv_chain (GstPad * pad, GstBuffer * buffer); static GstElementClass *parent_class = NULL; @@ -159,31 +158,32 @@ gst_quarktv_class_init (GstQuarkTVClass * klass) parent_class = g_type_class_ref (GST_TYPE_ELEMENT); + gobject_class->set_property = gst_quarktv_set_property; + gobject_class->get_property = gst_quarktv_get_property; + g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_PLANES, g_param_spec_int ("planes", "Planes", "Number of frames in the buffer", 1, 32, PLANES, G_PARAM_READWRITE)); - gobject_class->set_property = gst_quarktv_set_property; - gobject_class->get_property = gst_quarktv_get_property; - gobject_class->dispose = gst_quarktv_dispose; - gstelement_class->change_state = gst_quarktv_change_state; } static GstPadLinkReturn -gst_quarktv_link (GstPad * pad, const GstCaps * caps) +gst_quarktv_link (GstPad * pad, GstPad * peer) { GstQuarkTV *filter; GstPad *otherpad; - gint i; - GstStructure *structure; - GstPadLinkReturn res; + + //gint i; + //GstStructure *structure; + //GstPadLinkReturn res; filter = GST_QUARKTV (gst_pad_get_parent (pad)); g_return_val_if_fail (GST_IS_QUARKTV (filter), GST_PAD_LINK_REFUSED); otherpad = (pad == filter->srcpad ? filter->sinkpad : filter->srcpad); +#if 0 res = gst_pad_try_set_caps (otherpad, caps); if (GST_PAD_LINK_FAILED (res)) return res; @@ -200,6 +200,7 @@ gst_quarktv_link (GstPad * pad, const GstCaps * caps) gst_buffer_unref (filter->planetable[i]); filter->planetable[i] = NULL; } +#endif return GST_PAD_LINK_OK; } @@ -210,7 +211,7 @@ gst_quarktv_init (GstQuarkTV * filter) filter->sinkpad = gst_pad_new_from_template (gst_static_pad_template_get (&gst_effectv_sink_template), "sink"); - gst_pad_set_getcaps_function (filter->sinkpad, gst_pad_proxy_getcaps); + //gst_pad_set_getcaps_function (filter->sinkpad, gst_pad_proxy_getcaps); gst_pad_set_chain_function (filter->sinkpad, gst_quarktv_chain); gst_pad_set_link_function (filter->sinkpad, gst_quarktv_link); gst_element_add_pad (GST_ELEMENT (filter), filter->sinkpad); @@ -218,7 +219,7 @@ gst_quarktv_init (GstQuarkTV * filter) filter->srcpad = gst_pad_new_from_template (gst_static_pad_template_get (&gst_effectv_src_template), "src"); - gst_pad_set_getcaps_function (filter->srcpad, gst_pad_proxy_getcaps); + //gst_pad_set_getcaps_function (filter->srcpad, gst_pad_proxy_getcaps); gst_pad_set_link_function (filter->srcpad, gst_quarktv_link); gst_element_add_pad (GST_ELEMENT (filter), filter->srcpad); @@ -229,10 +230,9 @@ gst_quarktv_init (GstQuarkTV * filter) memset (filter->planetable, 0, filter->planes * sizeof (GstBuffer *)); } -static void -gst_quarktv_chain (GstPad * pad, GstData * _data) +static GstFlowReturn +gst_quarktv_chain (GstPad * pad, GstBuffer * buf) { - GstBuffer *buf = GST_BUFFER (_data); GstQuarkTV *filter; guint32 *src, *dest; GstBuffer *outbuf; @@ -244,9 +244,7 @@ gst_quarktv_chain (GstPad * pad, GstData * _data) area = filter->area; - outbuf = gst_buffer_new (); - GST_BUFFER_SIZE (outbuf) = area * sizeof (guint32); - GST_BUFFER_DATA (outbuf) = g_malloc (GST_BUFFER_SIZE (outbuf)); + outbuf = gst_pad_alloc_buffer (filter->srcpad, 0, area, GST_PAD_CAPS (pad)); dest = (guint32 *) GST_BUFFER_DATA (outbuf); GST_BUFFER_TIMESTAMP (outbuf) = GST_BUFFER_TIMESTAMP (buf); @@ -266,12 +264,14 @@ gst_quarktv_chain (GstPad * pad, GstData * _data) dest[area] = (rand ? ((guint32 *) GST_BUFFER_DATA (rand))[area] : 0); } - gst_pad_push (filter->srcpad, GST_DATA (outbuf)); + gst_pad_push (filter->srcpad, outbuf); filter->current_plane--; if (filter->current_plane < 0) filter->current_plane = filter->planes - 1; + + return GST_FLOW_OK; } static GstElementStateReturn @@ -289,6 +289,8 @@ gst_quarktv_change_state (GstElement * element) gst_buffer_unref (filter->planetable[i]); filter->planetable[i] = NULL; } + g_free (filter->planetable); + filter->planetable = NULL; break; } default: @@ -362,20 +364,3 @@ gst_quarktv_get_property (GObject * object, guint prop_id, GValue * value, break; } } - -static void -gst_quarktv_dispose (GObject * object) -{ - GstQuarkTV *filter = GST_QUARKTV (object); - gint i; - - for (i = 0; i < filter->planes; i++) { - if (filter->planetable[i]) - gst_buffer_unref (filter->planetable[i]); - filter->planetable[i] = NULL; - } - g_free (filter->planetable); - filter->planetable = NULL; - - G_OBJECT_CLASS (parent_class)->dispose (object); -} |