diff --git a/gst-libs/gst/interfaces/videooverlay.c b/gst-libs/gst/interfaces/videooverlay.c index a41f3402f3..8901ccbe51 100644 --- a/gst-libs/gst/interfaces/videooverlay.c +++ b/gst-libs/gst/interfaces/videooverlay.c @@ -64,10 +64,7 @@ * create_window (GstBus * bus, GstMessage * message, GstPipeline * pipeline) * { * // ignore anything but 'prepare-window-handle' element messages - * if (GST_MESSAGE_TYPE (message) != GST_MESSAGE_ELEMENT) - * return GST_BUS_PASS; - * - * if (!gst_structure_has_name (message->structure, "prepare-window-handle")) + * if (!gst_is_video_overlay_prepare_window_handle_message (message)) * return GST_BUS_PASS; * * win = XCreateSimpleWindow (disp, root, 0, 0, 320, 240, 0, 0, 0); @@ -154,9 +151,7 @@ * bus_sync_handler (GstBus * bus, GstMessage * message, gpointer user_data) * { * // ignore anything but 'prepare-window-handle' element messages - * if (GST_MESSAGE_TYPE (message) != GST_MESSAGE_ELEMENT) - * return GST_BUS_PASS; - * if (!gst_structure_has_name (message->structure, "prepare-window-handle")) + * if (!gst_is_video_overlay_prepare_window_handle_message (message)) * return GST_BUS_PASS; * * if (video_window_xid != 0) { @@ -493,3 +488,25 @@ gst_video_overlay_set_render_rectangle (GstVideoOverlay * overlay, } return FALSE; } + +/** + * gst_is_video_overlay_prepare_window_handle_message: + * @msg: a #GstMessage + * + * Convenience function to check if the given message is a + * "prepare-window-handle" message from a #GstVideoOverlay. + * + * Since: 0.11.2 + * + * Returns: whether @msg is a "prepare-window-handle" message + */ +gboolean +gst_is_video_overlay_prepare_window_handle_message (GstMessage * msg) +{ + g_return_val_if_fail (msg != NULL, FALSE); + + if (GST_MESSAGE_TYPE (msg) != GST_MESSAGE_ELEMENT) + return FALSE; + + return gst_message_has_name (msg, "prepare-window-handle"); +} diff --git a/gst-libs/gst/interfaces/videooverlay.h b/gst-libs/gst/interfaces/videooverlay.h index cfdff449aa..91806ecbc3 100644 --- a/gst-libs/gst/interfaces/videooverlay.h +++ b/gst-libs/gst/interfaces/videooverlay.h @@ -92,6 +92,8 @@ void gst_video_overlay_got_window_handle (GstVideoOverlay * overlay, void gst_video_overlay_prepare_window_handle (GstVideoOverlay * overlay); +gboolean gst_is_video_overlay_prepare_window_handle_message (GstMessage * msg); + G_END_DECLS #endif /* __GST_VIDEO_OVERLAY_H__ */ diff --git a/tests/examples/seek/jsseek.c b/tests/examples/seek/jsseek.c index 82b0b8b8be..3329d5650a 100644 --- a/tests/examples/seek/jsseek.c +++ b/tests/examples/seek/jsseek.c @@ -2446,27 +2446,28 @@ static gulong embed_xid = 0; static GstBusSyncReply bus_sync_handler (GstBus * bus, GstMessage * message, GstPipeline * data) { - if ((GST_MESSAGE_TYPE (message) == GST_MESSAGE_ELEMENT) && - gst_message_has_name (message, "prepare-window-handle")) { - GstElement *element = GST_ELEMENT (GST_MESSAGE_SRC (message)); + GstElement *element; - g_print ("got prepare-window-handle, setting XID %lu\n", embed_xid); + if (!gst_is_video_overlay_prepare_window_handle_message (message)) + return GST_BUS_PASS; - if (g_object_class_find_property (G_OBJECT_GET_CLASS (element), - "force-aspect-ratio")) { - g_object_set (element, "force-aspect-ratio", TRUE, NULL); - } + element = GST_ELEMENT (GST_MESSAGE_SRC (message)); - /* Should have been initialised from main thread before (can't use - * GDK_WINDOW_XID here with Gtk+ >= 2.18, because the sync handler will - * be called from a streaming thread and GDK_WINDOW_XID maps to more than - * a simple structure lookup with Gtk+ >= 2.18, where 'more' is stuff that - * shouldn't be done from a non-GUI thread without explicit locking). */ - g_assert (embed_xid != 0); + g_print ("got prepare-window-handle, setting XID %lu\n", embed_xid); - gst_video_overlay_set_window_handle (GST_VIDEO_OVERLAY (element), - embed_xid); + if (g_object_class_find_property (G_OBJECT_GET_CLASS (element), + "force-aspect-ratio")) { + g_object_set (element, "force-aspect-ratio", TRUE, NULL); } + + /* Should have been initialised from main thread before (can't use + * GDK_WINDOW_XID here with Gtk+ >= 2.18, because the sync handler will + * be called from a streaming thread and GDK_WINDOW_XID maps to more than + * a simple structure lookup with Gtk+ >= 2.18, where 'more' is stuff that + * shouldn't be done from a non-GUI thread without explicit locking). */ + g_assert (embed_xid != 0); + + gst_video_overlay_set_window_handle (GST_VIDEO_OVERLAY (element), embed_xid); return GST_BUS_PASS; } #endif diff --git a/tests/examples/seek/seek.c b/tests/examples/seek/seek.c index 71c382af39..19b291b477 100644 --- a/tests/examples/seek/seek.c +++ b/tests/examples/seek/seek.c @@ -1583,27 +1583,28 @@ static gulong embed_xid = 0; static GstBusSyncReply bus_sync_handler (GstBus * bus, GstMessage * message, GstPipeline * data) { - if ((GST_MESSAGE_TYPE (message) == GST_MESSAGE_ELEMENT) && - gst_message_has_name (message, "prepare-window-handle")) { - GstElement *element = GST_ELEMENT (GST_MESSAGE_SRC (message)); + GstElement *element; - g_print ("got prepare-window-handle, setting XID %lu\n", embed_xid); + if (!gst_is_video_overlay_prepare_window_handle_message (message)) + return GST_BUS_PASS; - if (g_object_class_find_property (G_OBJECT_GET_CLASS (element), - "force-aspect-ratio")) { - g_object_set (element, "force-aspect-ratio", TRUE, NULL); - } + element = GST_ELEMENT (GST_MESSAGE_SRC (message)); - /* Should have been initialised from main thread before (can't use - * GDK_WINDOW_XID here with Gtk+ >= 2.18, because the sync handler will - * be called from a streaming thread and GDK_WINDOW_XID maps to more than - * a simple structure lookup with Gtk+ >= 2.18, where 'more' is stuff that - * shouldn't be done from a non-GUI thread without explicit locking). */ - g_assert (embed_xid != 0); + g_print ("got prepare-window-handle, setting XID %lu\n", embed_xid); - gst_video_overlay_set_window_handle (GST_VIDEO_OVERLAY (element), - embed_xid); + if (g_object_class_find_property (G_OBJECT_GET_CLASS (element), + "force-aspect-ratio")) { + g_object_set (element, "force-aspect-ratio", TRUE, NULL); } + + /* Should have been initialised from main thread before (can't use + * GDK_WINDOW_XID here with Gtk+ >= 2.18, because the sync handler will + * be called from a streaming thread and GDK_WINDOW_XID maps to more than + * a simple structure lookup with Gtk+ >= 2.18, where 'more' is stuff that + * shouldn't be done from a non-GUI thread without explicit locking). */ + g_assert (embed_xid != 0); + + gst_video_overlay_set_window_handle (GST_VIDEO_OVERLAY (element), embed_xid); return GST_BUS_PASS; } #endif diff --git a/tests/icles/stress-videooverlay.c b/tests/icles/stress-videooverlay.c index c6b5ebf646..eadb7c5c2b 100644 --- a/tests/icles/stress-videooverlay.c +++ b/tests/icles/stress-videooverlay.c @@ -145,10 +145,8 @@ create_window (GstBus * bus, GstMessage * message, GstPipeline * pipeline) const GstStructure *s; GstVideoOverlay *ov = NULL; - s = gst_message_get_structure (message); - if (s == NULL || !gst_structure_has_name (s, "prepare-window-handle")) { + if (!gst_is_video_overlay_prepare_window_handle_message (message)) return GST_BUS_PASS; - } ov = GST_VIDEO_OVERLAY (GST_MESSAGE_SRC (message));