gst-libs/gst/interfaces/xoverlay.*: Remove everything having to do with the desired...
authorTim-Philipp Müller <tim@centricular.net>
Mon, 21 Nov 2005 20:28:23 +0000 (20:28 +0000)
committerTim-Philipp Müller <tim@centricular.net>
Mon, 21 Nov 2005 20:28:23 +0000 (20:28 +0000)
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).

ChangeLog
gst-libs/gst/interfaces/xoverlay.c
gst-libs/gst/interfaces/xoverlay.h
sys/ximage/ximagesink.c
sys/xvimage/xvimagesink.c

index a11f2121da2712ed52c4561a06995d82534e5076..b6429843b636eee9c7dc8be0fe177a3d9ae4b708 100644 (file)
--- a/ChangeLog
+++ b/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>
 
        * gst/typefind/gsttypefindfunctions.c: (mp3_type_find),
index f4d1e1cf1d68738e9675bf69b448b586fb8ab2cf..ef919b3b1494f52a0df9b5f09ae458c5c17d01f5 100644 (file)
@@ -1,7 +1,7 @@
 /* GStreamer X-based Overlay
  * 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
  * modify it under the terms of the GNU Library General Public
 
 #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);
 
 GType
@@ -63,32 +54,10 @@ gst_x_overlay_get_type (void)
   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
 gst_x_overlay_base_init (gpointer 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;
 }
@@ -118,70 +87,50 @@ gst_x_overlay_set_xwindow_id (GstXOverlay * overlay, gulong 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 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
 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 (GST_IS_X_OVERLAY (overlay));
 
-  g_signal_emit (G_OBJECT (overlay),
-      gst_x_overlay_signals[HAVE_XWINDOW_ID], 0, (gint) xwindow_id);
+  GST_LOG_OBJECT (GST_OBJECT (overlay), "xwindow_id = %lu", 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:
- * @overlay: a #GstXOverlay which got a XWindow.
- * @width: pointer to a gint taking the width or NULL.
- * @height: pointer to a gint taking the height or NULL.
+ * gst_x_overlay_prepare_xwindow_id:
+ * @overlay: a #GstXOverlay which does not yet have an XWindow.
  *
- * Gets the desired size of the overlay. If the overlay doesn't know its desired
- * size, width and height are set to 0.
- */
-void
-gst_x_overlay_get_desired_size (GstXOverlay * overlay, guint * width,
-    guint * height)
-{
-  guint width_tmp, height_tmp;
-  GstXOverlayClass *klass;
-
-  g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE ((overlay), GST_TYPE_X_OVERLAY));
-
-  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 will post a "prepare-xwindow-id" element message on the bus
+ * to give applications an opportunity to call 
+ * gst_x_overlay_set_xwindow_id() before a plugin creates its own
+ * window.
  *
- * This function should be used by video overlay developpers.
+ * This function should only be used by video overlay plugin developers.
  */
 void
-gst_x_overlay_got_desired_size (GstXOverlay * overlay, guint width,
-    guint height)
+gst_x_overlay_prepare_xwindow_id (GstXOverlay * overlay)
 {
+  GstStructure *s;
+  GstMessage *msg;
+
+  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[DESIRED_SIZE], 0, width, height);
+  GST_LOG_OBJECT (GST_OBJECT (overlay), "prepare xwindow_id");
+  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);
 }
 
 /**
index 5318fef3103bcc9cc4456bc6040a46fcc7d23d74..062f95edc3d9b03c8d54c9546e574606e993e3f6 100644 (file)
@@ -48,33 +48,25 @@ typedef struct _GstXOverlayClass {
 
   /* virtual functions */
   void (* set_xwindow_id) (GstXOverlay *overlay,
-                          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];
+                           gulong       xwindow_id);
+
+  void (* expose)         (GstXOverlay *overlay);
+
+  /*< private >*/
+  gpointer                 _gst_reserved[GST_PADDING];
 } GstXOverlayClass;
 
 GType  gst_x_overlay_get_type          (void);
 
 /* virtual class function wrappers */
-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);
+void gst_x_overlay_set_xwindow_id     (GstXOverlay *overlay, gulong xwindow_id);
+
+void gst_x_overlay_expose             (GstXOverlay *overlay);
+
+/* public methods to dispatch bus messages */
+void gst_x_overlay_got_xwindow_id     (GstXOverlay *overlay, gulong xwindow_id);
 
-/* public methods to fire signals */
-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);
+void gst_x_overlay_prepare_xwindow_id (GstXOverlay *overlay);
 
 G_END_DECLS
 
index a14103cb0a7378a89d5e2dc8e3501a496d991e25..d59d934c3d1a89a5516ddb8761f3e623607b87d2 100644 (file)
@@ -1582,16 +1582,6 @@ gst_ximagesink_set_xwindow_id (GstXOverlay * overlay, XID xwindow_id)
   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
 gst_ximagesink_expose (GstXOverlay * overlay)
 {
@@ -1607,7 +1597,6 @@ static void
 gst_ximagesink_xoverlay_init (GstXOverlayClass * iface)
 {
   iface->set_xwindow_id = gst_ximagesink_set_xwindow_id;
-  iface->get_desired_size = gst_ximagesink_get_desired_size;
   iface->expose = gst_ximagesink_expose;
 }
 
index 553ac399af9c4f5d9fef3177909d3f3f4ac85929..2597f1042dedfb086f173c0827e589f7a2a4817f 100644 (file)
@@ -1434,9 +1434,6 @@ gst_xvimagesink_setcaps (GstBaseSink * bsink, GstCaps * caps)
 
   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;
 }
 
@@ -1832,16 +1829,6 @@ gst_xvimagesink_set_xwindow_id (GstXOverlay * overlay, XID xwindow_id)
     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
 gst_xvimagesink_expose (GstXOverlay * overlay)
 {
@@ -1869,7 +1856,6 @@ static void
 gst_xvimagesink_xoverlay_init (GstXOverlayClass * iface)
 {
   iface->set_xwindow_id = gst_xvimagesink_set_xwindow_id;
-  iface->get_desired_size = gst_xvimagesink_get_desired_size;
   iface->expose = gst_xvimagesink_expose;
 }