Merged GstVideoOverlay features here.
authorJulien Moutte <julien@moutte.net>
Mon, 17 Nov 2003 16:29:38 +0000 (16:29 +0000)
committerJulien Moutte <julien@moutte.net>
Mon, 17 Nov 2003 16:29:38 +0000 (16:29 +0000)
Original commit message from CVS:
Merged GstVideoOverlay features here.

gst-libs/gst/interfaces/xoverlay.c
gst-libs/gst/interfaces/xoverlay.h
gst-libs/gst/xoverlay/xoverlay.c
gst-libs/gst/xoverlay/xoverlay.h

index f0b4ebb..53b4214 100644 (file)
 
 #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);
+}
index 1525876..1f8c9f3 100644 (file)
@@ -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
 
index f0b4ebb..53b4214 100644 (file)
 
 #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);
+}
index 1525876..1f8c9f3 100644 (file)
@@ -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