vaapisink: fix display initialization in GstVideoOverlay implementation.
authorHolger Kaelberer <hk@getslash.de>
Wed, 15 Jan 2014 09:05:45 +0000 (10:05 +0100)
committerGwenole Beauchesne <gwenole.beauchesne@intel.com>
Wed, 15 Jan 2014 10:07:05 +0000 (11:07 +0100)
When gst_vaapisink_video_overlay_set_window_handle() is called early,
before the pipeline has been set to PLAYING, the display has not yet
been initialized and _PLUGIN_BASE_DISPLAY_TYPE() is not yet
up-to-date. For this reason the foreign XID is not attached.

Now _ensure_display() is called earlier.

https://bugzilla.gnome.org/show_bug.cgi?id=722244

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
gst/vaapi/gstvaapisink.c

index 09d6d54..9c5ecd2 100644 (file)
@@ -139,6 +139,9 @@ enum {
 #define DEFAULT_DISPLAY_TYPE            GST_VAAPI_DISPLAY_TYPE_ANY
 #define DEFAULT_ROTATION                GST_VAAPI_ROTATION_0
 
+static inline gboolean
+gst_vaapisink_ensure_display(GstVaapiSink *sink);
+
 /* GstVideoOverlay interface */
 
 #if USE_X11
@@ -154,7 +157,11 @@ gst_vaapisink_video_overlay_set_window_handle(GstVideoOverlay *overlay,
     guintptr window)
 {
     GstVaapiSink * const sink = GST_VAAPISINK(overlay);
-    GstVaapiDisplayType display_type = GST_VAAPI_PLUGIN_BASE_DISPLAY_TYPE(sink);
+    GstVaapiDisplayType display_type;
+
+    if (!gst_vaapisink_ensure_display(sink))
+        return;
+    display_type = GST_VAAPI_PLUGIN_BASE_DISPLAY_TYPE(sink);
 
     /* Disable GLX rendering when vaapisink is using a foreign X
        window. It's pretty much useless */