"height", GST_PROPS_INT_RANGE (0, G_MAXINT))
)
-static GstElementClass *parent_class = NULL;
+static GstVideoSinkClass *parent_class = NULL;
/* ============================================================= */
/* */
KeyReleaseMask | ButtonPressMask |
ButtonReleaseMask, &e))
{
- GstEvent *event = NULL;
KeySym keysym;
/* We lock only for the X function call */
ximagesink->xwindow->width = e.xconfigure.width;
ximagesink->xwindow->height = e.xconfigure.height;
- r = gst_pad_try_set_caps (ximagesink->sinkpad,
+ r = gst_pad_try_set_caps (GST_VIDEOSINK_PAD (ximagesink),
GST_CAPS_NEW ("ximagesink_ximage_caps", "video/x-raw-rgb",
"bpp", GST_PROPS_INT (ximagesink->xcontext->bpp),
"depth", GST_PROPS_INT (ximagesink->xcontext->depth),
if ( (r == GST_PAD_LINK_OK) || (r == GST_PAD_LINK_DONE) )
{
- ximagesink->width = e.xconfigure.width;
- ximagesink->height = e.xconfigure.height;
+ GST_VIDEOSINK_WIDTH (ximagesink) = e.xconfigure.width;
+ GST_VIDEOSINK_HEIGHT (ximagesink) = e.xconfigure.height;
if ( (ximagesink->ximage) &&
- ( (ximagesink->width != ximagesink->ximage->width) ||
- (ximagesink->height != ximagesink->ximage->height) ) )
+ ( (GST_VIDEOSINK_WIDTH (ximagesink) != ximagesink->ximage->width) ||
+ (GST_VIDEOSINK_HEIGHT (ximagesink) != ximagesink->ximage->height) ) )
{
/* We renew our ximage only if size changed */
gst_ximagesink_ximage_destroy (ximagesink,
ximagesink->ximage = gst_ximagesink_ximage_new (
ximagesink,
- ximagesink->width,
- ximagesink->height);
+ GST_VIDEOSINK_WIDTH (ximagesink),
+ GST_VIDEOSINK_HEIGHT (ximagesink));
}
- gst_x_overlay_got_video_size (
- GST_X_OVERLAY (ximagesink),
- ximagesink->width, ximagesink->height);
+ gst_video_sink_got_video_size (GST_VIDEOSINK (ximagesink),
+ GST_VIDEOSINK_WIDTH (ximagesink),
+ GST_VIDEOSINK_HEIGHT (ximagesink));
}
}
break;
default:
GST_DEBUG ("ximagesink unhandled X event (%d)", e.type);
}
-
- if (event)
- gst_pad_send_event (gst_pad_get_peer (pad), event);
g_mutex_lock (ximagesink->x_lock);
}
GST_DEBUG ("sinkconnect %s with %s", gst_caps_to_string(caps),
gst_caps_to_string(ximagesink->xcontext->caps));
- if (!gst_caps_get_int (caps, "width", &ximagesink->width))
+ if (!gst_caps_get_int (caps, "width", &(GST_VIDEOSINK_WIDTH (ximagesink))))
return GST_PAD_LINK_REFUSED;
- if (!gst_caps_get_int (caps, "height", &ximagesink->height))
+ if (!gst_caps_get_int (caps, "height", &(GST_VIDEOSINK_HEIGHT (ximagesink))))
return GST_PAD_LINK_REFUSED;
if (!gst_caps_get_float (caps, "framerate", &ximagesink->framerate))
return GST_PAD_LINK_REFUSED;
/* Creating our window and our image */
if (!ximagesink->xwindow)
ximagesink->xwindow = gst_ximagesink_xwindow_new (ximagesink,
- ximagesink->width,
- ximagesink->height);
+ GST_VIDEOSINK_WIDTH (ximagesink),
+ GST_VIDEOSINK_HEIGHT (ximagesink));
if ( (ximagesink->ximage) &&
- ( (ximagesink->width != ximagesink->ximage->width) ||
- (ximagesink->height != ximagesink->ximage->height) ) )
+ ( (GST_VIDEOSINK_WIDTH (ximagesink) != ximagesink->ximage->width) ||
+ (GST_VIDEOSINK_HEIGHT (ximagesink) != ximagesink->ximage->height) ) )
{ /* We renew our ximage only if size changed */
gst_ximagesink_ximage_destroy (ximagesink, ximagesink->ximage);
ximagesink->ximage = gst_ximagesink_ximage_new (ximagesink,
- ximagesink->width,
- ximagesink->height);
+ GST_VIDEOSINK_WIDTH (ximagesink),
+ GST_VIDEOSINK_HEIGHT (ximagesink));
}
else if (!ximagesink->ximage) /* If no ximage, creating one */
ximagesink->ximage = gst_ximagesink_ximage_new (ximagesink,
- ximagesink->width,
- ximagesink->height);
+ GST_VIDEOSINK_WIDTH (ximagesink),
+ GST_VIDEOSINK_HEIGHT (ximagesink));
- gst_x_overlay_got_video_size (GST_X_OVERLAY (ximagesink),
- ximagesink->width, ximagesink->height);
+ gst_video_sink_got_video_size (GST_VIDEOSINK (ximagesink),
+ GST_VIDEOSINK_WIDTH (ximagesink),
+ GST_VIDEOSINK_HEIGHT (ximagesink));
return GST_PAD_LINK_OK;
}
GST_DEBUG ("videosink: clock wait: %" G_GUINT64_FORMAT, time);
- if (ximagesink->clock) {
- GstClockID id = gst_clock_new_single_shot_id (ximagesink->clock, time);
+ if (GST_VIDEOSINK_CLOCK (ximagesink)) {
+ GstClockID id;
+ id = gst_clock_new_single_shot_id (GST_VIDEOSINK_CLOCK (ximagesink), time);
gst_element_clock_wait (GST_ELEMENT (ximagesink), id, NULL);
gst_clock_id_free (id);
}
gst_ximagesink_handle_xevents (ximagesink, pad);
}
-static void
-gst_ximagesink_set_clock (GstElement *element, GstClock *clock)
-{
- GstXImageSink *ximagesink;
-
- ximagesink = GST_XIMAGESINK (element);
-
- ximagesink->clock = clock;
-}
-
static GstBuffer*
gst_ximagesink_buffer_new (GstBufferPool *pool,
gint64 location, guint size, gpointer user_data)
ximagesink->image_pool = g_slist_delete_link (ximagesink->image_pool,
ximagesink->image_pool);
- if ( (ximage->width != ximagesink->width) ||
- (ximage->height != ximagesink->height) )
+ if ( (ximage->width != GST_VIDEOSINK_WIDTH (ximagesink)) ||
+ (ximage->height != GST_VIDEOSINK_HEIGHT (ximagesink)) )
{ /* This image is unusable. Destroying... */
gst_ximagesink_ximage_destroy (ximagesink, ximage);
ximage = NULL;
if (!ximage) /* We found no suitable image in the pool. Creating... */
ximage = gst_ximagesink_ximage_new (ximagesink,
- ximagesink->width,
- ximagesink->height);
+ GST_VIDEOSINK_WIDTH (ximagesink),
+ GST_VIDEOSINK_HEIGHT (ximagesink));
if (ximage)
{
ximage = GST_BUFFER_POOL_PRIVATE (buffer);
/* If our geometry changed we can't reuse that image. */
- if ( (ximage->width != ximagesink->width) ||
- (ximage->height != ximagesink->height) )
+ if ( (ximage->width != GST_VIDEOSINK_WIDTH (ximagesink)) ||
+ (ximage->height != GST_VIDEOSINK_HEIGHT (ximagesink)) )
gst_ximagesink_ximage_destroy (ximagesink, ximage);
else /* In that case we can reuse the image and add it to our image pool. */
{
}
static void
-gst_ximagesink_navigation_send_event (GstNavigation *navigation, GstStructure *structure)
+gst_ximagesink_navigation_send_event (GstNavigation *navigation,
+ GstStructure *structure)
{
GstXImageSink *ximagesink = GST_XIMAGESINK (navigation);
GstEvent *event;
to match the applied scaling. So here we just add the offset if the image
is centered in the window. */
- x_offset = ximagesink->xwindow->width - ximagesink->width;
- y_offset = ximagesink->xwindow->height - ximagesink->height;
+ x_offset = ximagesink->xwindow->width - GST_VIDEOSINK_WIDTH (ximagesink);
+ y_offset = ximagesink->xwindow->height - GST_VIDEOSINK_HEIGHT (ximagesink);
if (gst_structure_get_double (structure, "pointer_x", &x))
{
gst_structure_set (structure, "pointer_y", G_TYPE_DOUBLE, y, NULL);
}
- gst_pad_send_event (gst_pad_get_peer (ximagesink->sinkpad), event);
+ gst_pad_send_event (gst_pad_get_peer (GST_VIDEOSINK_PAD (ximagesink)), event);
}
static void
xwindow->internal = FALSE;
XSelectInput (ximagesink->xcontext->disp, xwindow->win, ExposureMask |
StructureNotifyMask | PointerMotionMask | KeyPressMask |
- KeyReleaseMask /*| ButtonPressMask | ButtonReleaseMask*/);
+ KeyReleaseMask);
xwindow->gc = XCreateGC (ximagesink->xcontext->disp,
xwindow->win, 0, NULL);
static void
gst_ximagesink_init (GstXImageSink *ximagesink)
{
- ximagesink->sinkpad = gst_pad_new_from_template (GST_PAD_TEMPLATE_GET (
- gst_ximagesink_sink_template_factory),
- "sink");
- gst_element_add_pad (GST_ELEMENT (ximagesink), ximagesink->sinkpad);
-
- gst_pad_set_chain_function (ximagesink->sinkpad, gst_ximagesink_chain);
- gst_pad_set_link_function (ximagesink->sinkpad, gst_ximagesink_sinkconnect);
- gst_pad_set_getcaps_function (ximagesink->sinkpad, gst_ximagesink_getcaps);
- gst_pad_set_bufferpool_function (ximagesink->sinkpad,
+ GST_VIDEOSINK_PAD (ximagesink) = gst_pad_new_from_template (
+ GST_PAD_TEMPLATE_GET (
+ gst_ximagesink_sink_template_factory),
+ "sink");
+
+ gst_element_add_pad (GST_ELEMENT (ximagesink),
+ GST_VIDEOSINK_PAD (ximagesink));
+
+ gst_pad_set_chain_function (GST_VIDEOSINK_PAD (ximagesink),
+ gst_ximagesink_chain);
+ gst_pad_set_link_function (GST_VIDEOSINK_PAD (ximagesink),
+ gst_ximagesink_sinkconnect);
+ gst_pad_set_getcaps_function (GST_VIDEOSINK_PAD (ximagesink),
+ gst_ximagesink_getcaps);
+ gst_pad_set_bufferpool_function (GST_VIDEOSINK_PAD (ximagesink),
gst_ximagesink_get_bufferpool);
ximagesink->xcontext = NULL;
ximagesink->xwindow = NULL;
ximagesink->ximage = NULL;
- ximagesink->clock = NULL;
-
- ximagesink->width = ximagesink->height = 0;
ximagesink->framerate = 0;
gobject_class = (GObjectClass *) klass;
gstelement_class = (GstElementClass *) klass;
- parent_class = g_type_class_ref (GST_TYPE_ELEMENT);
+ parent_class = g_type_class_ref (GST_TYPE_VIDEOSINK);
gobject_class->dispose = gst_ximagesink_dispose;
gstelement_class->change_state = gst_ximagesink_change_state;
- gstelement_class->set_clock = gst_ximagesink_set_clock;
}
/* ============================================================= */
NULL,
};
- ximagesink_type = g_type_register_static (GST_TYPE_ELEMENT,
+ ximagesink_type = g_type_register_static (GST_TYPE_VIDEOSINK,
"GstXImageSink",
&ximagesink_info, 0);
static gboolean
plugin_init (GstPlugin *plugin)
{
+ /* Loading the library containing GstVideoSink, our parent object */
+ if (!gst_library_load ("gstvideo"))
+ return FALSE;
+
if (!gst_element_register (plugin, "ximagesink",
GST_RANK_SECONDARY, GST_TYPE_XIMAGESINK))
return FALSE;
#ifndef __GST_XIMAGESINK_H__
#define __GST_XIMAGESINK_H__
-#include <gst/gst.h>
+#include <gst/video/gstvideosink.h>
/* FIXME : We should have a configure test for shm support */
#define HAVE_XSHM
struct _GstXImageSink {
/* Our element stuff */
- GstElement element;
+ GstVideoSink videosink;
- GstPad *sinkpad;
-
- GstClock *clock;
-
GstXContext *xcontext;
GstXWindow *xwindow;
GstXImage *ximage;
- gint width, height;
gfloat framerate;
GMutex *x_lock;
};
struct _GstXImageSinkClass {
- GstElementClass parent_class;
+ GstVideoSinkClass parent_class;
};
GType gst_ximagesink_get_type(void);
"height", GST_PROPS_INT_RANGE(0, G_MAXINT))
)
-static GstElementClass *parent_class = NULL;
+static GstVideoSinkClass *parent_class = NULL;
/* ============================================================= */
/* */
KeyReleaseMask | ButtonPressMask |
ButtonReleaseMask, &e))
{
- GstEvent *event = NULL;
KeySym keysym;
/* We lock only for the X function call */
GST_DEBUG ("xvimagesink unhandled X event (%d)", e.type);
}
- if (event)
- gst_pad_send_event (gst_pad_get_peer (pad), event);
-
g_mutex_lock (xvimagesink->x_lock);
}
g_mutex_unlock (xvimagesink->x_lock);
GST_DEBUG ("sinkconnect %s with %s", gst_caps_to_string(caps),
gst_caps_to_string(xvimagesink->xcontext->caps));
- if (!gst_caps_get_int (caps, "width", &xvimagesink->width))
+ if (!gst_caps_get_int (caps, "width", &(GST_VIDEOSINK_WIDTH (xvimagesink))))
return GST_PAD_LINK_REFUSED;
- if (!gst_caps_get_int (caps, "height", &xvimagesink->height))
+ if (!gst_caps_get_int (caps, "height", &(GST_VIDEOSINK_HEIGHT (xvimagesink))))
return GST_PAD_LINK_REFUSED;
if (!gst_caps_get_float (caps, "framerate", &xvimagesink->framerate))
return GST_PAD_LINK_REFUSED;
/* Creating our window and our image */
if (!xvimagesink->xwindow)
xvimagesink->xwindow = gst_xvimagesink_xwindow_new (xvimagesink,
- xvimagesink->width,
- xvimagesink->height);
+ GST_VIDEOSINK_WIDTH (xvimagesink),
+ GST_VIDEOSINK_HEIGHT (xvimagesink));
if ( (xvimagesink->xvimage) &&
- ( (xvimagesink->width != xvimagesink->xvimage->width) ||
- (xvimagesink->height != xvimagesink->xvimage->height) ) )
+ ( (GST_VIDEOSINK_WIDTH (xvimagesink) != xvimagesink->xvimage->width) ||
+ (GST_VIDEOSINK_HEIGHT (xvimagesink) != xvimagesink->xvimage->height) ) )
{ /* We renew our xvimage only if size changed */
gst_xvimagesink_xvimage_destroy (xvimagesink, xvimagesink->xvimage);
xvimagesink->xvimage = gst_xvimagesink_xvimage_new (xvimagesink,
- xvimagesink->width,
- xvimagesink->height);
+ GST_VIDEOSINK_WIDTH (xvimagesink),
+ GST_VIDEOSINK_HEIGHT (xvimagesink));
}
else if (!xvimagesink->xvimage) /* If no xvimage, creating one */
xvimagesink->xvimage = gst_xvimagesink_xvimage_new (xvimagesink,
- xvimagesink->width,
- xvimagesink->height);
+ GST_VIDEOSINK_WIDTH (xvimagesink),
+ GST_VIDEOSINK_HEIGHT (xvimagesink));
- gst_x_overlay_got_video_size (GST_X_OVERLAY (xvimagesink),
- xvimagesink->width, xvimagesink->height);
+ gst_video_sink_got_video_size (GST_VIDEOSINK (xvimagesink),
+ GST_VIDEOSINK_WIDTH (xvimagesink),
+ GST_VIDEOSINK_HEIGHT (xvimagesink));
return GST_PAD_LINK_OK;
}
break;
}
- if (parent_class->change_state)
- return parent_class->change_state (element);
+ if (GST_ELEMENT_CLASS (parent_class)->change_state)
+ return GST_ELEMENT_CLASS (parent_class)->change_state (element);
return GST_STATE_SUCCESS;
}
GST_DEBUG ("videosink: clock wait: %" G_GUINT64_FORMAT, time);
- if (xvimagesink->clock) {
- GstClockID id = gst_clock_new_single_shot_id (xvimagesink->clock, time);
+ if (GST_VIDEOSINK_CLOCK (xvimagesink)) {
+ GstClockID id;
+ id = gst_clock_new_single_shot_id (GST_VIDEOSINK_CLOCK (xvimagesink), time);
gst_element_clock_wait (GST_ELEMENT (xvimagesink), id, NULL);
gst_clock_id_free (id);
}
gst_xvimagesink_handle_xevents (xvimagesink, pad);
}
-static void
-gst_xvimagesink_set_clock (GstElement *element, GstClock *clock)
-{
- GstXvImageSink *xvimagesink;
-
- xvimagesink = GST_XVIMAGESINK (element);
-
- xvimagesink->clock = clock;
-}
-
static GstBuffer*
gst_xvimagesink_buffer_new (GstBufferPool *pool,
gint64 location, guint size, gpointer user_data)
xvimagesink->image_pool = g_slist_delete_link (xvimagesink->image_pool,
xvimagesink->image_pool);
- if ( (xvimage->width != xvimagesink->width) ||
- (xvimage->height != xvimagesink->height) )
+ if ( (xvimage->width != GST_VIDEOSINK_WIDTH (xvimagesink)) ||
+ (xvimage->height != GST_VIDEOSINK_HEIGHT (xvimagesink)) )
{ /* This image is unusable. Destroying... */
gst_xvimagesink_xvimage_destroy (xvimagesink, xvimage);
xvimage = NULL;
if (!xvimage) /* We found no suitable image in the pool. Creating... */
xvimage = gst_xvimagesink_xvimage_new (xvimagesink,
- xvimagesink->width,
- xvimagesink->height);
+ GST_VIDEOSINK_WIDTH (xvimagesink),
+ GST_VIDEOSINK_HEIGHT (xvimagesink));
if (xvimage)
{
xvimage = GST_BUFFER_POOL_PRIVATE (buffer);
/* If our geometry changed we can't reuse that image. */
- if ( (xvimage->width != xvimagesink->width) ||
- (xvimage->height != xvimagesink->height) )
+ if ( (xvimage->width != GST_VIDEOSINK_WIDTH (xvimagesink)) ||
+ (xvimage->height != GST_VIDEOSINK_HEIGHT (xvimagesink)) )
gst_xvimagesink_xvimage_destroy (xvimagesink, xvimage);
else /* In that case we can reuse the image and add it to our image pool. */
{
g_mutex_lock (xvimagesink->pool_lock);
- xvimagesink->image_pool = g_slist_prepend (xvimagesink->image_pool, xvimage);
+ xvimagesink->image_pool = g_slist_prepend (xvimagesink->image_pool,
+ xvimage);
g_mutex_unlock (xvimagesink->pool_lock);
}
{
GstXvImage *xvimage = xvimagesink->image_pool->data;
xvimagesink->image_pool = g_slist_delete_link (xvimagesink->image_pool,
- xvimagesink->image_pool);
+ xvimagesink->image_pool);
gst_xvimagesink_xvimage_destroy (xvimagesink, xvimage);
}
}
static void
-gst_xvimagesink_navigation_send_event (GstNavigation *navigation, GstStructure *structure)
+gst_xvimagesink_navigation_send_event (GstNavigation *navigation,
+ GstStructure *structure)
{
GstXvImageSink *xvimagesink = GST_XVIMAGESINK (navigation);
GstEvent *event;
/* Converting pointer coordinates to the non scaled geometry */
if (gst_structure_get_double (structure, "pointer_x", &x))
{
- x *= xvimagesink->width;
+ x *= GST_VIDEOSINK_WIDTH (xvimagesink);
x /= xvimagesink->xwindow->width;
gst_structure_set (structure, "pointer_x", G_TYPE_DOUBLE, x, NULL);
}
if (gst_structure_get_double (structure, "pointer_y", &y))
{
- y *= xvimagesink->height;
+ y *= GST_VIDEOSINK_HEIGHT (xvimagesink);
y /= xvimagesink->xwindow->height;
gst_structure_set (structure, "pointer_y", G_TYPE_DOUBLE, y, NULL);
}
- gst_pad_send_event (gst_pad_get_peer (xvimagesink->sinkpad), event);
+ gst_pad_send_event (gst_pad_get_peer (GST_VIDEOSINK_PAD (xvimagesink)), event);
}
static void
xwindow->internal = FALSE;
XSelectInput (xvimagesink->xcontext->disp, xwindow->win, ExposureMask |
StructureNotifyMask | PointerMotionMask | KeyPressMask |
- KeyReleaseMask /*| ButtonPressMask | ButtonReleaseMask*/);
+ KeyReleaseMask);
xwindow->gc = XCreateGC (xvimagesink->xcontext->disp,
xwindow->win, 0, NULL);
static void
gst_xvimagesink_init (GstXvImageSink *xvimagesink)
{
- xvimagesink->sinkpad = gst_pad_new_from_template (GST_PAD_TEMPLATE_GET (
- gst_xvimagesink_sink_template_factory),
- "sink");
- gst_element_add_pad (GST_ELEMENT (xvimagesink), xvimagesink->sinkpad);
-
- gst_pad_set_chain_function (xvimagesink->sinkpad, gst_xvimagesink_chain);
- gst_pad_set_link_function (xvimagesink->sinkpad, gst_xvimagesink_sinkconnect);
- gst_pad_set_getcaps_function (xvimagesink->sinkpad, gst_xvimagesink_getcaps);
- gst_pad_set_bufferpool_function (xvimagesink->sinkpad,
+ GST_VIDEOSINK_PAD (xvimagesink) = gst_pad_new_from_template (
+ GST_PAD_TEMPLATE_GET (
+ gst_xvimagesink_sink_template_factory),
+ "sink");
+
+ gst_element_add_pad (GST_ELEMENT (xvimagesink),
+ GST_VIDEOSINK_PAD (xvimagesink));
+
+ gst_pad_set_chain_function (GST_VIDEOSINK_PAD (xvimagesink),
+ gst_xvimagesink_chain);
+ gst_pad_set_link_function (GST_VIDEOSINK_PAD (xvimagesink),
+ gst_xvimagesink_sinkconnect);
+ gst_pad_set_getcaps_function (GST_VIDEOSINK_PAD (xvimagesink),
+ gst_xvimagesink_getcaps);
+ gst_pad_set_bufferpool_function (GST_VIDEOSINK_PAD (xvimagesink),
gst_xvimagesink_get_bufferpool);
xvimagesink->xcontext = NULL;
xvimagesink->xwindow = NULL;
xvimagesink->xvimage = NULL;
- xvimagesink->clock = NULL;
-
- xvimagesink->width = xvimagesink->height = 0;
xvimagesink->framerate = 0;
gobject_class = (GObjectClass *) klass;
gstelement_class = (GstElementClass *) klass;
- parent_class = g_type_class_ref (GST_TYPE_ELEMENT);
+ parent_class = g_type_class_ref (GST_TYPE_VIDEOSINK);
gobject_class->dispose = gst_xvimagesink_dispose;
gstelement_class->change_state = gst_xvimagesink_change_state;
- gstelement_class->set_clock = gst_xvimagesink_set_clock;
}
/* ============================================================= */
NULL,
};
- xvimagesink_type = g_type_register_static (GST_TYPE_ELEMENT,
+ xvimagesink_type = g_type_register_static (GST_TYPE_VIDEOSINK,
"GstXvImageSink",
&xvimagesink_info, 0);
static gboolean
plugin_init (GstPlugin *plugin)
{
+ /* Loading the library containing GstVideoSink, our parent object */
+ if (!gst_library_load ("gstvideo"))
+ return FALSE;
+
if (!gst_element_register (plugin, "xvimagesink",
GST_RANK_PRIMARY, GST_TYPE_XVIMAGESINK))
return FALSE;
#ifndef __GST_XVIMAGESINK_H__
#define __GST_XVIMAGESINK_H__
-#include <gst/gst.h>
+#include <gst/video/gstvideosink.h>
/* FIXME : We should have a configure test for shm support */
#define HAVE_XSHM
struct _GstXvImageSink {
/* Our element stuff */
- GstElement element;
+ GstVideoSink videosink;
- GstPad *sinkpad;
-
- GstClock *clock;
-
GstXContext *xcontext;
GstXWindow *xwindow;
GstXvImage *xvimage;
- gint width, height;
gfloat framerate;
GMutex *x_lock;
};
struct _GstXvImageSinkClass {
- GstElementClass parent_class;
+ GstVideoSinkClass parent_class;
};
GType gst_xvimagesink_get_type(void);