mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-23 16:50:47 +00:00
ximage: port to 0.11
This commit is contained in:
parent
bee50961e4
commit
9e276e4f81
2 changed files with 35 additions and 35 deletions
|
@ -73,7 +73,8 @@ enum
|
||||||
PROP_REMOTE,
|
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_fixate (GstPad * pad, GstCaps * caps);
|
||||||
static void gst_ximage_src_clear_bufpool (GstXImageSrc * ximagesrc);
|
static void gst_ximage_src_clear_bufpool (GstXImageSrc * ximagesrc);
|
||||||
|
@ -355,6 +356,17 @@ composite_pixel (GstXContext * xcontext, guchar * dest, guchar * src)
|
||||||
}
|
}
|
||||||
#endif
|
#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
|
/* Retrieve an XImageSrcBuffer, preferably from our
|
||||||
* pool of existing images and populate it from the window */
|
* pool of existing images and populate it from the window */
|
||||||
static GstBuffer *
|
static GstBuffer *
|
||||||
|
@ -400,7 +412,6 @@ gst_ximage_src_ximage_get (GstXImageSrc * ximagesrc)
|
||||||
|
|
||||||
xcontext = ximagesrc->xcontext;
|
xcontext = ximagesrc->xcontext;
|
||||||
|
|
||||||
|
|
||||||
caps = gst_caps_new_simple ("video/x-raw-rgb",
|
caps = gst_caps_new_simple ("video/x-raw-rgb",
|
||||||
"bpp", G_TYPE_INT, xcontext->bpp,
|
"bpp", G_TYPE_INT, xcontext->bpp,
|
||||||
"depth", G_TYPE_INT, xcontext->depth,
|
"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_numerator (xcontext->par),
|
||||||
gst_value_get_fraction_denominator (xcontext->par), NULL);
|
gst_value_get_fraction_denominator (xcontext->par), NULL);
|
||||||
|
|
||||||
gst_buffer_set_caps (ximage, caps);
|
|
||||||
g_mutex_unlock (ximagesrc->x_lock);
|
g_mutex_unlock (ximagesrc->x_lock);
|
||||||
|
|
||||||
gst_caps_unref (caps);
|
gst_caps_unref (caps);
|
||||||
|
@ -455,10 +465,8 @@ gst_ximage_src_ximage_get (GstXImageSrc * ximagesrc)
|
||||||
if (!have_frame) {
|
if (!have_frame) {
|
||||||
GST_LOG_OBJECT (ximagesrc,
|
GST_LOG_OBJECT (ximagesrc,
|
||||||
"Copying from last frame ximage->size: %d",
|
"Copying from last frame ximage->size: %d",
|
||||||
GST_BUFFER_SIZE (GST_BUFFER (ximage)));
|
gst_buffer_get_size (ximage));
|
||||||
memcpy (GST_BUFFER_DATA (GST_BUFFER (ximage)),
|
copy_buffer (ximage, ximagesrc->last_ximage);
|
||||||
GST_BUFFER_DATA (GST_BUFFER (ximagesrc->last_ximage)),
|
|
||||||
GST_BUFFER_SIZE (GST_BUFFER (ximage)));
|
|
||||||
have_frame = TRUE;
|
have_frame = TRUE;
|
||||||
}
|
}
|
||||||
for (i = 0; i < nrects; i++) {
|
for (i = 0; i < nrects; i++) {
|
||||||
|
@ -519,10 +527,8 @@ gst_ximage_src_ximage_get (GstXImageSrc * ximagesrc)
|
||||||
if (!have_frame) {
|
if (!have_frame) {
|
||||||
GST_LOG_OBJECT (ximagesrc,
|
GST_LOG_OBJECT (ximagesrc,
|
||||||
"Copying from last frame ximage->size: %d",
|
"Copying from last frame ximage->size: %d",
|
||||||
GST_BUFFER_SIZE (GST_BUFFER (ximage)));
|
gst_buffer_get_size (ximage));
|
||||||
memcpy (GST_BUFFER_DATA (GST_BUFFER (ximage)),
|
copy_buffer (ximage, ximagesrc->last_ximage);
|
||||||
GST_BUFFER_DATA (GST_BUFFER (ximagesrc->last_ximage)),
|
|
||||||
GST_BUFFER_SIZE (GST_BUFFER (ximage)));
|
|
||||||
}
|
}
|
||||||
#ifdef HAVE_XFIXES
|
#ifdef HAVE_XFIXES
|
||||||
/* re-get area where last mouse pointer was but only if in our clipping
|
/* 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
|
#ifdef HAVE_XDAMAGE
|
||||||
if (ximagesrc->have_xdamage && ximagesrc->use_damage) {
|
if (ximagesrc->have_xdamage && ximagesrc->use_damage) {
|
||||||
/* need to ref ximage to put in last_ximage */
|
/* need to ref ximage to put in last_ximage */
|
||||||
gst_buffer_ref (GST_BUFFER (ximage));
|
gst_buffer_ref (ximage);
|
||||||
if (ximagesrc->last_ximage) {
|
if (ximagesrc->last_ximage) {
|
||||||
gst_buffer_unref (GST_BUFFER (ximagesrc->last_ximage));
|
gst_buffer_unref (ximagesrc->last_ximage);
|
||||||
}
|
}
|
||||||
ximagesrc->last_ximage = ximage;
|
ximagesrc->last_ximage = ximage;
|
||||||
GST_LOG_OBJECT (ximagesrc, "reffing current buffer for last_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)
|
if (!image)
|
||||||
return GST_FLOW_ERROR;
|
return GST_FLOW_ERROR;
|
||||||
|
|
||||||
*buf = GST_BUFFER (image);
|
*buf = image;
|
||||||
GST_BUFFER_TIMESTAMP (*buf) = next_capture_ts;
|
GST_BUFFER_TIMESTAMP (*buf) = next_capture_ts;
|
||||||
GST_BUFFER_DURATION (*buf) = dur;
|
GST_BUFFER_DURATION (*buf) = dur;
|
||||||
|
|
||||||
|
@ -904,20 +910,6 @@ gst_ximage_src_clear_bufpool (GstXImageSrc * ximagesrc)
|
||||||
g_mutex_unlock (ximagesrc->pool_lock);
|
g_mutex_unlock (ximagesrc->pool_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
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 <lutz@users.sourceforge.net>, "
|
|
||||||
"Jan Schmidt <thaytan@mad.scientist.com>, "
|
|
||||||
"Zaheer Merali <zaheerabbas at merali dot org>");
|
|
||||||
gst_element_class_add_pad_template (ec, gst_static_pad_template_get (&t));
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gst_ximage_src_dispose (GObject * object)
|
gst_ximage_src_dispose (GObject * object)
|
||||||
{
|
{
|
||||||
|
@ -942,7 +934,7 @@ gst_ximage_src_finalize (GObject * object)
|
||||||
}
|
}
|
||||||
|
|
||||||
static GstCaps *
|
static GstCaps *
|
||||||
gst_ximage_src_get_caps (GstBaseSrc * bs)
|
gst_ximage_src_get_caps (GstBaseSrc * bs, GstCaps * filter)
|
||||||
{
|
{
|
||||||
GstXImageSrc *s = GST_XIMAGE_SRC (bs);
|
GstXImageSrc *s = GST_XIMAGE_SRC (bs);
|
||||||
GstXContext *xcontext;
|
GstXContext *xcontext;
|
||||||
|
@ -1051,6 +1043,7 @@ static void
|
||||||
gst_ximage_src_class_init (GstXImageSrcClass * klass)
|
gst_ximage_src_class_init (GstXImageSrcClass * klass)
|
||||||
{
|
{
|
||||||
GObjectClass *gc = G_OBJECT_CLASS (klass);
|
GObjectClass *gc = G_OBJECT_CLASS (klass);
|
||||||
|
GstElementClass *ec = GST_ELEMENT_CLASS (klass);
|
||||||
GstBaseSrcClass *bc = GST_BASE_SRC_CLASS (klass);
|
GstBaseSrcClass *bc = GST_BASE_SRC_CLASS (klass);
|
||||||
GstPushSrcClass *push_class = GST_PUSH_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,
|
"Whether the display is remote", FALSE,
|
||||||
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
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 <lutz@users.sourceforge.net>, "
|
||||||
|
"Jan Schmidt <thaytan@mad.scientist.com>, "
|
||||||
|
"Zaheer Merali <zaheerabbas at merali dot org>");
|
||||||
|
gst_element_class_add_pad_template (ec, gst_static_pad_template_get (&t));
|
||||||
|
|
||||||
push_class->create = gst_ximage_src_create;
|
push_class->create = gst_ximage_src_create;
|
||||||
bc->get_caps = gst_ximage_src_get_caps;
|
bc->get_caps = gst_ximage_src_get_caps;
|
||||||
|
@ -1153,7 +1152,7 @@ gst_ximage_src_class_init (GstXImageSrcClass * klass)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
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_format (GST_BASE_SRC (ximagesrc), GST_FORMAT_TIME);
|
||||||
gst_base_src_set_live (GST_BASE_SRC (ximagesrc), TRUE);
|
gst_base_src_set_live (GST_BASE_SRC (ximagesrc), TRUE);
|
||||||
|
|
|
@ -32,8 +32,8 @@ gst_meta_ximage_get_info (void)
|
||||||
meta_ximage_info =
|
meta_ximage_info =
|
||||||
gst_meta_register ("GstMetaXImageSrc", "GstMetaXImageSrc",
|
gst_meta_register ("GstMetaXImageSrc", "GstMetaXImageSrc",
|
||||||
sizeof (GstMetaXImage), (GstMetaInitFunction) NULL,
|
sizeof (GstMetaXImage), (GstMetaInitFunction) NULL,
|
||||||
(GstMetaFreeFunction) NULL, (GstMetaTransformFunction) NULL,
|
(GstMetaFreeFunction) NULL, (GstMetaCopyFunction) NULL,
|
||||||
(GstMetaSerializeFunction) NULL, (GstMetaDeserializeFunction) NULL);
|
(GstMetaTransformFunction) NULL);
|
||||||
}
|
}
|
||||||
return meta_ximage_info;
|
return meta_ximage_info;
|
||||||
}
|
}
|
||||||
|
@ -421,8 +421,9 @@ gst_ximageutil_ximage_new (GstXContext * xcontext,
|
||||||
}
|
}
|
||||||
succeeded = TRUE;
|
succeeded = TRUE;
|
||||||
|
|
||||||
GST_BUFFER_DATA (ximage) = (guchar *) meta->ximage->data;
|
gst_buffer_take_memory (ximage, -1,
|
||||||
GST_BUFFER_SIZE (ximage) = meta->size;
|
gst_memory_new_wrapped (GST_MEMORY_FLAG_NO_SHARE, meta->ximage->data,
|
||||||
|
NULL, meta->size, 0, meta->size));
|
||||||
|
|
||||||
/* Keep a ref to our src */
|
/* Keep a ref to our src */
|
||||||
meta->parent = gst_object_ref (parent);
|
meta->parent = gst_object_ref (parent);
|
||||||
|
|
Loading…
Reference in a new issue