summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulien Moutte <julien@moutte.net>2003-11-17 16:29:38 +0000
committerJulien Moutte <julien@moutte.net>2003-11-17 16:29:38 +0000
commit4653e156539b8bac4797c394d763c193bacfb03d (patch)
treef831ae77a6524b7d69e487813608adc6bf514fc8
parent21d8a397eb43aedde43e6a567d3865d174b98e1b (diff)
downloadgstreamer-plugins-bad-4653e156539b8bac4797c394d763c193bacfb03d.tar.gz
Merged GstVideoOverlay features here.
Original commit message from CVS: Merged GstVideoOverlay features here.
-rw-r--r--gst-libs/gst/xoverlay/xoverlay.c90
-rw-r--r--gst-libs/gst/xoverlay/xoverlay.h15
2 files changed, 96 insertions, 9 deletions
diff --git a/gst-libs/gst/xoverlay/xoverlay.c b/gst-libs/gst/xoverlay/xoverlay.c
index f0b4ebb5d..53b4214b5 100644
--- a/gst-libs/gst/xoverlay/xoverlay.c
+++ b/gst-libs/gst/xoverlay/xoverlay.c
@@ -25,7 +25,15 @@
#include "xoverlay.h"
-static void gst_x_overlay_class_init (GstXOverlayClass *klass);
+enum {
+ HAVE_XWINDOW_ID,
+ HAVE_SIZE,
+ LAST_SIGNAL
+};
+
+static guint gst_x_overlay_signals[LAST_SIGNAL] = { 0 };
+
+static void gst_x_overlay_base_init (gpointer g_class);
GType
gst_x_overlay_get_type (void)
@@ -35,7 +43,7 @@ gst_x_overlay_get_type (void)
if (!gst_x_overlay_type) {
static const GTypeInfo gst_x_overlay_info = {
sizeof (GstXOverlayClass),
- (GBaseInitFunc) gst_x_overlay_class_init,
+ gst_x_overlay_base_init,
NULL,
NULL,
NULL,
@@ -56,15 +64,43 @@ gst_x_overlay_get_type (void)
}
static void
-gst_x_overlay_class_init (GstXOverlayClass *klass)
+gst_x_overlay_base_init (gpointer g_class)
{
- /* default virtual functions */
- klass->set_xwindow_id = NULL;
+ static gboolean initialized = FALSE;
+
+ if (! initialized)
+ {
+ gst_x_overlay_signals[HAVE_SIZE] =
+ g_signal_new ("have_size",
+ GST_TYPE_X_OVERLAY, G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GstXOverlayClass, have_size),
+ NULL, NULL,
+ gst_marshal_VOID__INT_INT, G_TYPE_NONE, 2,
+ G_TYPE_UINT, G_TYPE_UINT);
+
+ 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__POINTER, G_TYPE_NONE, 1,
+ G_TYPE_POINTER);
+
+ initialized = TRUE;
+ }
}
+/**
+ * gst_x_overlay_set_xwindow_id:
+ * @overlay: a #GstXOverlay to set the XWindow on.
+ * @xwindow_id: a #XID referencing the XWindow.
+ *
+ * This will call the video overlay's set_xwindow_id method. You should
+ * use this method to tell to a XOverlay to display video output to a
+ * specific XWindow.
+ */
void
-gst_x_overlay_set_xwindow_id (GstXOverlay *overlay,
- XID xwindow_id)
+gst_x_overlay_set_xwindow_id (GstXOverlay *overlay, XID xwindow_id)
{
GstXOverlayClass *klass = GST_X_OVERLAY_GET_CLASS (overlay);
@@ -72,3 +108,43 @@ gst_x_overlay_set_xwindow_id (GstXOverlay *overlay,
klass->set_xwindow_id (overlay, xwindow_id);
}
}
+
+/**
+ * gst_x_overlay_got_xwindow_id:
+ * @overlay: a #GstXOverlay which got a XWindow.
+ * @xwindow_id: a #XID referencing the XWindow.
+ *
+ * This will fire an have_xwindow_id signal.
+ *
+ * This function should be used by video overlay developpers.
+ */
+void
+gst_x_overlay_got_xwindow_id (GstXOverlay *overlay, XID xwindow_id)
+{
+ g_return_if_fail (overlay != NULL);
+ g_return_if_fail (GST_IS_X_OVERLAY (overlay));
+
+ g_signal_emit (G_OBJECT (overlay),
+ gst_x_overlay_signals[HAVE_XWINDOW_ID], 0, xwindow_id);
+}
+
+/**
+ * gst_x_overlay_got_video_size:
+ * @overlay: a #GstXOverlay which received video geometry.
+ * @width: a width as a #gint.
+ * @height: a height as a #gint.
+ *
+ * This will fire an have_size signal.
+ *
+ * This function should be used by video overlay developpers.
+ */
+void
+gst_x_overlay_got_video_size (GstXOverlay *overlay,
+ gint width, gint height)
+{
+ g_return_if_fail (overlay != NULL);
+ g_return_if_fail (GST_IS_X_OVERLAY (overlay));
+
+ g_signal_emit (G_OBJECT (overlay), gst_x_overlay_signals[HAVE_SIZE],
+ 0, width, height);
+}
diff --git a/gst-libs/gst/xoverlay/xoverlay.h b/gst-libs/gst/xoverlay/xoverlay.h
index 15258765b..1f8c9f39c 100644
--- a/gst-libs/gst/xoverlay/xoverlay.h
+++ b/gst-libs/gst/xoverlay/xoverlay.h
@@ -1,5 +1,6 @@
/* GStreamer X-based Overlay
* Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ * Copyright (C) 2003 Julien Moutte <julien@moutte.net>
*
* x-overlay.h: X-based overlay interface design
*
@@ -48,13 +49,23 @@ typedef struct _GstXOverlayClass {
/* virtual functions */
void (* set_xwindow_id) (GstXOverlay *overlay,
XID xwindow_id);
+
+ /* signals */
+ void (*have_xwindow_id) (GstXOverlay *overlay,
+ XID xwindow_id);
+ void (*have_size) (GstXOverlay *overlay, gint width, gint height);
+
} GstXOverlayClass;
GType gst_x_overlay_get_type (void);
/* virtual class function wrappers */
-void gst_x_overlay_set_xwindow_id (GstXOverlay *overlay,
- XID xwindow_id);
+void gst_x_overlay_set_xwindow_id (GstXOverlay *overlay, XID xwindow_id);
+
+/* public methods to fire signals */
+void gst_x_overlay_got_xwindow_id (GstXOverlay *overlay, XID xwindow_id);
+void gst_x_overlay_got_video_size (GstXOverlay *overlay,
+ gint width, gint height);
G_END_DECLS