return g_type;
}
+/**
+ * gst_vaapi_display_type_is_compatible:
+ * @type1: the #GstVaapiDisplayType to test
+ * @type2: the reference #GstVaapiDisplayType
+ *
+ * Compares whether #GstVaapiDisplay @type1 is compatible with @type2.
+ * That is, if @type2 is in "any" category, or derived from @type1.
+ *
+ * Returns: %TRUE if @type1 is compatible with @type2, %FALSE otherwise.
+ */
+gboolean
+gst_vaapi_display_type_is_compatible(GstVaapiDisplayType type1,
+ GstVaapiDisplayType type2)
+{
+ if (type1 == type2)
+ return TRUE;
+
+ switch (type1) {
+ case GST_VAAPI_DISPLAY_TYPE_GLX:
+ if (type2 == GST_VAAPI_DISPLAY_TYPE_X11)
+ return TRUE;
+ break;
+ default:
+ break;
+ }
+ return type2 == GST_VAAPI_DISPLAY_TYPE_ANY;
+}
+
/* Append GstVideoFormat to formats array */
static inline void
append_format(GArray *formats, GstVideoFormat format, guint flags)
GType
gst_vaapi_display_type_get_type(void) G_GNUC_CONST;
+gboolean
+gst_vaapi_display_type_is_compatible(GstVaapiDisplayType type1,
+ GstVaapiDisplayType type2);
+
/**
* GstVaapiDisplayInfo:
*
plugin->display_type_req = display_type;
}
-/* Checks wether display type 1 is compatible with display type 2 */
-static gboolean
-display_type_is_compatible (GstVaapiDisplayType type1,
- GstVaapiDisplayType type2)
-{
- return (type1 == type2 || type2 == GST_VAAPI_DISPLAY_TYPE_ANY);
-}
-
/**
* gst_vaapi_plugin_base_ensure_display:
* @plugin: a #GstVaapiPluginBase
gboolean
gst_vaapi_plugin_base_ensure_display (GstVaapiPluginBase * plugin)
{
- if (plugin->display && display_type_is_compatible (plugin->display_type,
+ if (plugin->display
+ && gst_vaapi_display_type_is_compatible (plugin->display_type,
plugin->display_type_req))
return TRUE;
gst_vaapi_display_replace (&plugin->display, NULL);
gst_vaapi_video_context_prepare(context, display_types);
/* Neighbour found and it updated the display */
- if (plugin->display)
+ if (plugin->display && gst_vaapi_display_type_is_compatible(
+ plugin->display_type, type))
return TRUE;
/* If no neighboor, or application not interested, use system default */