mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-01-27 09:38:17 +00:00
gst-libs/gst/interfaces/xoverlay.*: Remove everything having to do with the desired size; add gst_x_overlay_prepare_x...
Original commit message from CVS: * gst-libs/gst/interfaces/xoverlay.c: (gst_x_overlay_base_init), (gst_x_overlay_got_xwindow_id), (gst_x_overlay_prepare_xwindow_id): * gst-libs/gst/interfaces/xoverlay.h: Remove everything having to do with the desired size; add gst_x_overlay_prepare_xwindow_id() function; remove the 'have-xwindow-id' signal and make gst_x_overlay_got_xwindow_id() post a message on the bus instead (#321816). * sys/ximage/ximagesink.c: (gst_ximagesink_xoverlay_init): * sys/xvimage/xvimagesink.c: (gst_xvimagesink_setcaps), (gst_xvimagesink_xoverlay_init): Remove desired size stuff (#321816).
This commit is contained in:
parent
ece86d538f
commit
aaf1e55bd2
5 changed files with 54 additions and 123 deletions
15
ChangeLog
15
ChangeLog
|
@ -1,3 +1,18 @@
|
||||||
|
2005-11-21 Tim-Philipp Müller <tim at centricular dot net>
|
||||||
|
|
||||||
|
* gst-libs/gst/interfaces/xoverlay.c: (gst_x_overlay_base_init),
|
||||||
|
(gst_x_overlay_got_xwindow_id), (gst_x_overlay_prepare_xwindow_id):
|
||||||
|
* gst-libs/gst/interfaces/xoverlay.h:
|
||||||
|
Remove everything having to do with the desired size; add
|
||||||
|
gst_x_overlay_prepare_xwindow_id() function; remove the
|
||||||
|
'have-xwindow-id' signal and make gst_x_overlay_got_xwindow_id()
|
||||||
|
post a message on the bus instead (#321816).
|
||||||
|
|
||||||
|
* sys/ximage/ximagesink.c: (gst_ximagesink_xoverlay_init):
|
||||||
|
* sys/xvimage/xvimagesink.c: (gst_xvimagesink_setcaps),
|
||||||
|
(gst_xvimagesink_xoverlay_init):
|
||||||
|
Remove desired size stuff (#321816).
|
||||||
|
|
||||||
2005-11-21 Tim-Philipp Müller <tim at centricular dot net>
|
2005-11-21 Tim-Philipp Müller <tim at centricular dot net>
|
||||||
|
|
||||||
* gst/typefind/gsttypefindfunctions.c: (mp3_type_find),
|
* gst/typefind/gsttypefindfunctions.c: (mp3_type_find),
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* GStreamer X-based Overlay
|
/* GStreamer X-based Overlay
|
||||||
* Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
|
* Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
|
||||||
*
|
*
|
||||||
* tv-mixer.c: tv-mixer design virtual class function wrappers
|
* x-overlay.c: X-based overlay interface design
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Library General Public
|
* modify it under the terms of the GNU Library General Public
|
||||||
|
@ -25,15 +25,6 @@
|
||||||
|
|
||||||
#include "xoverlay.h"
|
#include "xoverlay.h"
|
||||||
|
|
||||||
enum
|
|
||||||
{
|
|
||||||
HAVE_XWINDOW_ID,
|
|
||||||
DESIRED_SIZE,
|
|
||||||
LAST_SIGNAL
|
|
||||||
};
|
|
||||||
|
|
||||||
static guint gst_x_overlay_signals[LAST_SIGNAL] = { 0 };
|
|
||||||
|
|
||||||
static void gst_x_overlay_base_init (gpointer g_class);
|
static void gst_x_overlay_base_init (gpointer g_class);
|
||||||
|
|
||||||
GType
|
GType
|
||||||
|
@ -63,32 +54,10 @@ gst_x_overlay_get_type (void)
|
||||||
return gst_x_overlay_type;
|
return gst_x_overlay_type;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* FIXME: evil hack, we should figure out our marshal handling in this interfaces some day */
|
|
||||||
extern void gst_marshal_VOID__INT_INT (GClosure * closure,
|
|
||||||
GValue * return_value, guint n_param_values, const GValue * param_values,
|
|
||||||
gpointer invocation_hint, gpointer marshal_data);
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gst_x_overlay_base_init (gpointer g_class)
|
gst_x_overlay_base_init (gpointer g_class)
|
||||||
{
|
{
|
||||||
GstXOverlayClass *overlay_class = (GstXOverlayClass *) g_class;
|
GstXOverlayClass *overlay_class = (GstXOverlayClass *) g_class;
|
||||||
static gboolean initialized = FALSE;
|
|
||||||
|
|
||||||
if (!initialized) {
|
|
||||||
gst_x_overlay_signals[HAVE_XWINDOW_ID] =
|
|
||||||
g_signal_new ("have-xwindow-id",
|
|
||||||
GST_TYPE_X_OVERLAY, G_SIGNAL_RUN_LAST,
|
|
||||||
G_STRUCT_OFFSET (GstXOverlayClass, have_xwindow_id),
|
|
||||||
NULL, NULL, g_cclosure_marshal_VOID__INT, G_TYPE_NONE, 1, G_TYPE_INT);
|
|
||||||
gst_x_overlay_signals[DESIRED_SIZE] =
|
|
||||||
g_signal_new ("desired-size-changed",
|
|
||||||
GST_TYPE_X_OVERLAY, G_SIGNAL_RUN_LAST,
|
|
||||||
G_STRUCT_OFFSET (GstXOverlayClass, desired_size),
|
|
||||||
NULL, NULL,
|
|
||||||
gst_marshal_VOID__INT_INT, G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_INT);
|
|
||||||
|
|
||||||
initialized = TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
overlay_class->set_xwindow_id = NULL;
|
overlay_class->set_xwindow_id = NULL;
|
||||||
}
|
}
|
||||||
|
@ -118,70 +87,50 @@ gst_x_overlay_set_xwindow_id (GstXOverlay * overlay, gulong xwindow_id)
|
||||||
* @overlay: a #GstXOverlay which got a XWindow.
|
* @overlay: a #GstXOverlay which got a XWindow.
|
||||||
* @xwindow_id: a #XID referencing the XWindow.
|
* @xwindow_id: a #XID referencing the XWindow.
|
||||||
*
|
*
|
||||||
* This will fire an have_xwindow_id signal.
|
* This will post a "have-xwindow-id" element message on the bus.
|
||||||
*
|
*
|
||||||
* This function should be used by video overlay developpers.
|
* This function should only be used by video overlay plugin developers.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
gst_x_overlay_got_xwindow_id (GstXOverlay * overlay, gulong xwindow_id)
|
gst_x_overlay_got_xwindow_id (GstXOverlay * overlay, gulong xwindow_id)
|
||||||
{
|
{
|
||||||
|
GstStructure *s;
|
||||||
|
GstMessage *msg;
|
||||||
|
|
||||||
g_return_if_fail (overlay != NULL);
|
g_return_if_fail (overlay != NULL);
|
||||||
g_return_if_fail (GST_IS_X_OVERLAY (overlay));
|
g_return_if_fail (GST_IS_X_OVERLAY (overlay));
|
||||||
|
|
||||||
g_signal_emit (G_OBJECT (overlay),
|
GST_LOG_OBJECT (GST_OBJECT (overlay), "xwindow_id = %lu", xwindow_id);
|
||||||
gst_x_overlay_signals[HAVE_XWINDOW_ID], 0, (gint) xwindow_id);
|
s = gst_structure_new ("have-xwindow-id", "xwindow-id", G_TYPE_ULONG,
|
||||||
|
xwindow_id, NULL);
|
||||||
|
msg = gst_message_new_element (GST_OBJECT (overlay), s);
|
||||||
|
gst_element_post_message (GST_ELEMENT (overlay), msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gst_x_overlay_get_desired_size:
|
* gst_x_overlay_prepare_xwindow_id:
|
||||||
* @overlay: a #GstXOverlay which got a XWindow.
|
* @overlay: a #GstXOverlay which does not yet have an XWindow.
|
||||||
* @width: pointer to a gint taking the width or NULL.
|
|
||||||
* @height: pointer to a gint taking the height or NULL.
|
|
||||||
*
|
*
|
||||||
* Gets the desired size of the overlay. If the overlay doesn't know its desired
|
* This will post a "prepare-xwindow-id" element message on the bus
|
||||||
* size, width and height are set to 0.
|
* to give applications an opportunity to call
|
||||||
|
* gst_x_overlay_set_xwindow_id() before a plugin creates its own
|
||||||
|
* window.
|
||||||
|
*
|
||||||
|
* This function should only be used by video overlay plugin developers.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
gst_x_overlay_get_desired_size (GstXOverlay * overlay, guint * width,
|
gst_x_overlay_prepare_xwindow_id (GstXOverlay * overlay)
|
||||||
guint * height)
|
|
||||||
{
|
{
|
||||||
guint width_tmp, height_tmp;
|
GstStructure *s;
|
||||||
GstXOverlayClass *klass;
|
GstMessage *msg;
|
||||||
|
|
||||||
g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE ((overlay), GST_TYPE_X_OVERLAY));
|
g_return_if_fail (overlay != NULL);
|
||||||
|
|
||||||
klass = GST_X_OVERLAY_GET_CLASS (overlay);
|
|
||||||
if (klass->get_desired_size && GST_IS_X_OVERLAY (overlay)) {
|
|
||||||
/* this ensures that elements don't need to check width and height for NULL
|
|
||||||
but apps may use NULL */
|
|
||||||
klass->get_desired_size (overlay, width ? width : &width_tmp,
|
|
||||||
height ? height : &height_tmp);
|
|
||||||
} else {
|
|
||||||
if (width)
|
|
||||||
*width = 0;
|
|
||||||
if (height)
|
|
||||||
*height = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* gst_x_overlay_got_desired_size:
|
|
||||||
* @overlay: a #GstXOverlay which changed its desired size.
|
|
||||||
* @width: The new desired width
|
|
||||||
* @height: The new desired height
|
|
||||||
*
|
|
||||||
* This will fire a "desired_size_changed" signal.
|
|
||||||
*
|
|
||||||
* This function should be used by video overlay developpers.
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
gst_x_overlay_got_desired_size (GstXOverlay * overlay, guint width,
|
|
||||||
guint height)
|
|
||||||
{
|
|
||||||
g_return_if_fail (GST_IS_X_OVERLAY (overlay));
|
g_return_if_fail (GST_IS_X_OVERLAY (overlay));
|
||||||
|
|
||||||
g_signal_emit (G_OBJECT (overlay),
|
GST_LOG_OBJECT (GST_OBJECT (overlay), "prepare xwindow_id");
|
||||||
gst_x_overlay_signals[DESIRED_SIZE], 0, width, height);
|
s = gst_structure_new ("prepare-xwindow-id", NULL);
|
||||||
|
msg = gst_message_new_element (GST_OBJECT (overlay), s);
|
||||||
|
gst_element_post_message (GST_ELEMENT (overlay), msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -48,33 +48,25 @@ typedef struct _GstXOverlayClass {
|
||||||
|
|
||||||
/* virtual functions */
|
/* virtual functions */
|
||||||
void (* set_xwindow_id) (GstXOverlay *overlay,
|
void (* set_xwindow_id) (GstXOverlay *overlay,
|
||||||
gulong xwindow_id);
|
gulong xwindow_id);
|
||||||
/* optional virtual functions */
|
|
||||||
void (* get_desired_size) (GstXOverlay *overlay,
|
|
||||||
guint *width,
|
|
||||||
guint *height);
|
|
||||||
void (* expose) (GstXOverlay *overlay);
|
|
||||||
|
|
||||||
/* signals */
|
|
||||||
void (*have_xwindow_id) (GstXOverlay *overlay,
|
|
||||||
gulong xwindow_id);
|
|
||||||
void (* desired_size) (GstXOverlay *overlay,
|
|
||||||
guint width,
|
|
||||||
guint height);
|
|
||||||
|
|
||||||
gpointer _gst_reserved[GST_PADDING];
|
void (* expose) (GstXOverlay *overlay);
|
||||||
|
|
||||||
|
/*< private >*/
|
||||||
|
gpointer _gst_reserved[GST_PADDING];
|
||||||
} GstXOverlayClass;
|
} GstXOverlayClass;
|
||||||
|
|
||||||
GType gst_x_overlay_get_type (void);
|
GType gst_x_overlay_get_type (void);
|
||||||
|
|
||||||
/* virtual class function wrappers */
|
/* virtual class function wrappers */
|
||||||
void gst_x_overlay_set_xwindow_id (GstXOverlay *overlay, gulong xwindow_id);
|
void gst_x_overlay_set_xwindow_id (GstXOverlay *overlay, gulong xwindow_id);
|
||||||
void gst_x_overlay_get_desired_size (GstXOverlay *overlay, guint *width, guint *height);
|
|
||||||
void gst_x_overlay_expose (GstXOverlay *overlay);
|
|
||||||
|
|
||||||
/* public methods to fire signals */
|
void gst_x_overlay_expose (GstXOverlay *overlay);
|
||||||
void gst_x_overlay_got_xwindow_id (GstXOverlay *overlay, gulong xwindow_id);
|
|
||||||
void gst_x_overlay_got_desired_size (GstXOverlay *overlay, guint width, guint height);
|
/* public methods to dispatch bus messages */
|
||||||
|
void gst_x_overlay_got_xwindow_id (GstXOverlay *overlay, gulong xwindow_id);
|
||||||
|
|
||||||
|
void gst_x_overlay_prepare_xwindow_id (GstXOverlay *overlay);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
|
|
@ -1582,16 +1582,6 @@ gst_ximagesink_set_xwindow_id (GstXOverlay * overlay, XID xwindow_id)
|
||||||
g_mutex_unlock (ximagesink->flow_lock);
|
g_mutex_unlock (ximagesink->flow_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
gst_ximagesink_get_desired_size (GstXOverlay * overlay,
|
|
||||||
guint * width, guint * height)
|
|
||||||
{
|
|
||||||
GstXImageSink *ximagesink = GST_XIMAGESINK (overlay);
|
|
||||||
|
|
||||||
*width = GST_VIDEO_SINK_WIDTH (ximagesink);
|
|
||||||
*height = GST_VIDEO_SINK_HEIGHT (ximagesink);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gst_ximagesink_expose (GstXOverlay * overlay)
|
gst_ximagesink_expose (GstXOverlay * overlay)
|
||||||
{
|
{
|
||||||
|
@ -1607,7 +1597,6 @@ static void
|
||||||
gst_ximagesink_xoverlay_init (GstXOverlayClass * iface)
|
gst_ximagesink_xoverlay_init (GstXOverlayClass * iface)
|
||||||
{
|
{
|
||||||
iface->set_xwindow_id = gst_ximagesink_set_xwindow_id;
|
iface->set_xwindow_id = gst_ximagesink_set_xwindow_id;
|
||||||
iface->get_desired_size = gst_ximagesink_get_desired_size;
|
|
||||||
iface->expose = gst_ximagesink_expose;
|
iface->expose = gst_ximagesink_expose;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1434,9 +1434,6 @@ gst_xvimagesink_setcaps (GstBaseSink * bsink, GstCaps * caps)
|
||||||
|
|
||||||
xvimagesink->xcontext->im_format = im_format;
|
xvimagesink->xcontext->im_format = im_format;
|
||||||
|
|
||||||
gst_x_overlay_got_desired_size (GST_X_OVERLAY (xvimagesink),
|
|
||||||
GST_VIDEO_SINK_WIDTH (xvimagesink), GST_VIDEO_SINK_HEIGHT (xvimagesink));
|
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1832,16 +1829,6 @@ gst_xvimagesink_set_xwindow_id (GstXOverlay * overlay, XID xwindow_id)
|
||||||
xvimagesink->xwindow = xwindow;
|
xvimagesink->xwindow = xwindow;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
gst_xvimagesink_get_desired_size (GstXOverlay * overlay,
|
|
||||||
guint * width, guint * height)
|
|
||||||
{
|
|
||||||
GstXvImageSink *xvimagesink = GST_XVIMAGESINK (overlay);
|
|
||||||
|
|
||||||
*width = GST_VIDEO_SINK_WIDTH (xvimagesink);
|
|
||||||
*height = GST_VIDEO_SINK_HEIGHT (xvimagesink);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gst_xvimagesink_expose (GstXOverlay * overlay)
|
gst_xvimagesink_expose (GstXOverlay * overlay)
|
||||||
{
|
{
|
||||||
|
@ -1869,7 +1856,6 @@ static void
|
||||||
gst_xvimagesink_xoverlay_init (GstXOverlayClass * iface)
|
gst_xvimagesink_xoverlay_init (GstXOverlayClass * iface)
|
||||||
{
|
{
|
||||||
iface->set_xwindow_id = gst_xvimagesink_set_xwindow_id;
|
iface->set_xwindow_id = gst_xvimagesink_set_xwindow_id;
|
||||||
iface->get_desired_size = gst_xvimagesink_get_desired_size;
|
|
||||||
iface->expose = gst_xvimagesink_expose;
|
iface->expose = gst_xvimagesink_expose;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue