From 9e276e4f81d3960ef02246453cb2fc766ff64103 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Sun, 10 Jul 2011 14:56:00 +0200 Subject: [PATCH] ximage: port to 0.11 --- sys/ximage/gstximagesrc.c | 61 +++++++++++++++++++++++------------------------ sys/ximage/ximageutil.c | 9 +++---- 2 files changed, 35 insertions(+), 35 deletions(-) diff --git a/sys/ximage/gstximagesrc.c b/sys/ximage/gstximagesrc.c index 2c2106a..dedfc2c 100644 --- a/sys/ximage/gstximagesrc.c +++ b/sys/ximage/gstximagesrc.c @@ -73,7 +73,8 @@ enum PROP_REMOTE, }; -GST_BOILERPLATE (GstXImageSrc, gst_ximage_src, GstPushSrc, GST_TYPE_PUSH_SRC); +#define gst_ximage_src_parent_class parent_class +G_DEFINE_TYPE (GstXImageSrc, gst_ximage_src, GST_TYPE_PUSH_SRC); static void gst_ximage_src_fixate (GstPad * pad, GstCaps * caps); static void gst_ximage_src_clear_bufpool (GstXImageSrc * ximagesrc); @@ -355,6 +356,17 @@ composite_pixel (GstXContext * xcontext, guchar * dest, guchar * src) } #endif +static void +copy_buffer (GstBuffer * dest, GstBuffer * src) +{ + guint8 *data; + gsize size; + + data = gst_buffer_map (src, &size, NULL, GST_MAP_READ); + gst_buffer_fill (dest, 0, data, size); + gst_buffer_unmap (src, data, size); +} + /* Retrieve an XImageSrcBuffer, preferably from our * pool of existing images and populate it from the window */ static GstBuffer * @@ -400,7 +412,6 @@ gst_ximage_src_ximage_get (GstXImageSrc * ximagesrc) xcontext = ximagesrc->xcontext; - caps = gst_caps_new_simple ("video/x-raw-rgb", "bpp", G_TYPE_INT, xcontext->bpp, "depth", G_TYPE_INT, xcontext->depth, @@ -415,7 +426,6 @@ gst_ximage_src_ximage_get (GstXImageSrc * ximagesrc) gst_value_get_fraction_numerator (xcontext->par), gst_value_get_fraction_denominator (xcontext->par), NULL); - gst_buffer_set_caps (ximage, caps); g_mutex_unlock (ximagesrc->x_lock); gst_caps_unref (caps); @@ -455,10 +465,8 @@ gst_ximage_src_ximage_get (GstXImageSrc * ximagesrc) if (!have_frame) { GST_LOG_OBJECT (ximagesrc, "Copying from last frame ximage->size: %d", - GST_BUFFER_SIZE (GST_BUFFER (ximage))); - memcpy (GST_BUFFER_DATA (GST_BUFFER (ximage)), - GST_BUFFER_DATA (GST_BUFFER (ximagesrc->last_ximage)), - GST_BUFFER_SIZE (GST_BUFFER (ximage))); + gst_buffer_get_size (ximage)); + copy_buffer (ximage, ximagesrc->last_ximage); have_frame = TRUE; } for (i = 0; i < nrects; i++) { @@ -519,10 +527,8 @@ gst_ximage_src_ximage_get (GstXImageSrc * ximagesrc) if (!have_frame) { GST_LOG_OBJECT (ximagesrc, "Copying from last frame ximage->size: %d", - GST_BUFFER_SIZE (GST_BUFFER (ximage))); - memcpy (GST_BUFFER_DATA (GST_BUFFER (ximage)), - GST_BUFFER_DATA (GST_BUFFER (ximagesrc->last_ximage)), - GST_BUFFER_SIZE (GST_BUFFER (ximage))); + gst_buffer_get_size (ximage)); + copy_buffer (ximage, ximagesrc->last_ximage); } #ifdef HAVE_XFIXES /* re-get area where last mouse pointer was but only if in our clipping @@ -698,9 +704,9 @@ gst_ximage_src_ximage_get (GstXImageSrc * ximagesrc) #ifdef HAVE_XDAMAGE if (ximagesrc->have_xdamage && ximagesrc->use_damage) { /* need to ref ximage to put in last_ximage */ - gst_buffer_ref (GST_BUFFER (ximage)); + gst_buffer_ref (ximage); if (ximagesrc->last_ximage) { - gst_buffer_unref (GST_BUFFER (ximagesrc->last_ximage)); + gst_buffer_unref (ximagesrc->last_ximage); } ximagesrc->last_ximage = ximage; GST_LOG_OBJECT (ximagesrc, "reffing current buffer for last_ximage"); @@ -797,7 +803,7 @@ gst_ximage_src_create (GstPushSrc * bs, GstBuffer ** buf) if (!image) return GST_FLOW_ERROR; - *buf = GST_BUFFER (image); + *buf = image; GST_BUFFER_TIMESTAMP (*buf) = next_capture_ts; GST_BUFFER_DURATION (*buf) = dur; @@ -905,20 +911,6 @@ gst_ximage_src_clear_bufpool (GstXImageSrc * ximagesrc) } static void -gst_ximage_src_base_init (gpointer g_class) -{ - GstElementClass *ec = GST_ELEMENT_CLASS (g_class); - - gst_element_class_set_details_simple (ec, "Ximage video source", - "Source/Video", - "Creates a screenshot video stream", - "Lutz Mueller , " - "Jan Schmidt , " - "Zaheer Merali "); - gst_element_class_add_pad_template (ec, gst_static_pad_template_get (&t)); -} - -static void gst_ximage_src_dispose (GObject * object) { /* Drop references in the buffer_pool */ @@ -942,7 +934,7 @@ gst_ximage_src_finalize (GObject * object) } static GstCaps * -gst_ximage_src_get_caps (GstBaseSrc * bs) +gst_ximage_src_get_caps (GstBaseSrc * bs, GstCaps * filter) { GstXImageSrc *s = GST_XIMAGE_SRC (bs); GstXContext *xcontext; @@ -1051,6 +1043,7 @@ static void gst_ximage_src_class_init (GstXImageSrcClass * klass) { GObjectClass *gc = G_OBJECT_CLASS (klass); + GstElementClass *ec = GST_ELEMENT_CLASS (klass); GstBaseSrcClass *bc = GST_BASE_SRC_CLASS (klass); GstPushSrcClass *push_class = GST_PUSH_SRC_CLASS (klass); @@ -1142,7 +1135,13 @@ gst_ximage_src_class_init (GstXImageSrcClass * klass) "Whether the display is remote", FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); - parent_class = g_type_class_peek_parent (klass); + gst_element_class_set_details_simple (ec, "Ximage video source", + "Source/Video", + "Creates a screenshot video stream", + "Lutz Mueller , " + "Jan Schmidt , " + "Zaheer Merali "); + gst_element_class_add_pad_template (ec, gst_static_pad_template_get (&t)); push_class->create = gst_ximage_src_create; bc->get_caps = gst_ximage_src_get_caps; @@ -1153,7 +1152,7 @@ gst_ximage_src_class_init (GstXImageSrcClass * klass) } static void -gst_ximage_src_init (GstXImageSrc * ximagesrc, GstXImageSrcClass * klass) +gst_ximage_src_init (GstXImageSrc * ximagesrc) { gst_base_src_set_format (GST_BASE_SRC (ximagesrc), GST_FORMAT_TIME); gst_base_src_set_live (GST_BASE_SRC (ximagesrc), TRUE); diff --git a/sys/ximage/ximageutil.c b/sys/ximage/ximageutil.c index 4e599b3..d3dee2b 100644 --- a/sys/ximage/ximageutil.c +++ b/sys/ximage/ximageutil.c @@ -32,8 +32,8 @@ gst_meta_ximage_get_info (void) meta_ximage_info = gst_meta_register ("GstMetaXImageSrc", "GstMetaXImageSrc", sizeof (GstMetaXImage), (GstMetaInitFunction) NULL, - (GstMetaFreeFunction) NULL, (GstMetaTransformFunction) NULL, - (GstMetaSerializeFunction) NULL, (GstMetaDeserializeFunction) NULL); + (GstMetaFreeFunction) NULL, (GstMetaCopyFunction) NULL, + (GstMetaTransformFunction) NULL); } return meta_ximage_info; } @@ -421,8 +421,9 @@ gst_ximageutil_ximage_new (GstXContext * xcontext, } succeeded = TRUE; - GST_BUFFER_DATA (ximage) = (guchar *) meta->ximage->data; - GST_BUFFER_SIZE (ximage) = meta->size; + gst_buffer_take_memory (ximage, -1, + gst_memory_new_wrapped (GST_MEMORY_FLAG_NO_SHARE, meta->ximage->data, + NULL, meta->size, 0, meta->size)); /* Keep a ref to our src */ meta->parent = gst_object_ref (parent); -- 2.7.4