mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-24 17:20:36 +00:00
libs: display: GstVaapiDisplay as GstObject descendant
This patch is to change the inheritance of GstVaapiDisplay to GstObject, instead of GstVaapiMiniObject. In this way we can use all the available infrastructure for GObject/GstObject such as GstTracer, GIR, etc. In addition, a new debug category for GstVaapiDisplay is created to make it easier to trace debug messages. It is named "vaapidisplay" and it transverse all the VA display backends (DRM, GLX, EGL, Wayland, ...) This patch is a step forward to expose GstVaapiDisplay for users in a future library. https://bugzilla.gnome.org/show_bug.cgi?id=768266 Signed-off-by: Víctor Manuel Jáquez Leal <victorx.jaquez@intel.com>
This commit is contained in:
parent
67d4c09341
commit
185da3d1a4
23 changed files with 259 additions and 322 deletions
|
@ -30,4 +30,9 @@ GST_DEBUG_CATEGORY_EXTERN(gst_debug_vaapi);
|
||||||
#define GST_CAT_DEFAULT gst_debug_vaapi
|
#define GST_CAT_DEFAULT gst_debug_vaapi
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if DEBUG_VAAPI_DISPLAY
|
||||||
|
GST_DEBUG_CATEGORY_EXTERN(gst_debug_vaapi_display);
|
||||||
|
#define GST_CAT_DEFAULT gst_debug_vaapi_display
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* GST_VAAPI_DEBUG_H */
|
#endif /* GST_VAAPI_DEBUG_H */
|
||||||
|
|
|
@ -37,11 +37,21 @@
|
||||||
#include "gstvaapiworkarounds.h"
|
#include "gstvaapiworkarounds.h"
|
||||||
#include "gstvaapiversion.h"
|
#include "gstvaapiversion.h"
|
||||||
|
|
||||||
#define DEBUG 1
|
/* Debug category for all vaapi libs */
|
||||||
#include "gstvaapidebug.h"
|
|
||||||
|
|
||||||
GST_DEBUG_CATEGORY (gst_debug_vaapi);
|
GST_DEBUG_CATEGORY (gst_debug_vaapi);
|
||||||
|
|
||||||
|
/* Debug category for VaapiDisplay */
|
||||||
|
GST_DEBUG_CATEGORY (gst_debug_vaapi_display);
|
||||||
|
#define GST_CAT_DEFAULT gst_debug_vaapi_display
|
||||||
|
|
||||||
|
#define _do_init \
|
||||||
|
G_ADD_PRIVATE (GstVaapiDisplay); \
|
||||||
|
GST_DEBUG_CATEGORY_INIT (gst_debug_vaapi_display, \
|
||||||
|
"vaapidisplay", 0, "VA-API Display");
|
||||||
|
|
||||||
|
G_DEFINE_TYPE_WITH_CODE (GstVaapiDisplay, gst_vaapi_display, GST_TYPE_OBJECT,
|
||||||
|
_do_init);
|
||||||
|
|
||||||
/* Ensure those symbols are actually defined in the resulting libraries */
|
/* Ensure those symbols are actually defined in the resulting libraries */
|
||||||
#undef gst_vaapi_display_ref
|
#undef gst_vaapi_display_ref
|
||||||
#undef gst_vaapi_display_unref
|
#undef gst_vaapi_display_unref
|
||||||
|
@ -117,7 +127,8 @@ libgstvaapi_init_once (void)
|
||||||
GST_DEBUG_CATEGORY_INIT (gst_debug_vaapi, "vaapi", 0, "VA-API helper");
|
GST_DEBUG_CATEGORY_INIT (gst_debug_vaapi, "vaapi", 0, "VA-API helper");
|
||||||
|
|
||||||
/* Dump gstreamer-vaapi version for debugging purposes */
|
/* Dump gstreamer-vaapi version for debugging purposes */
|
||||||
GST_INFO ("gstreamer-vaapi version %s", GST_VAAPI_VERSION_ID);
|
GST_CAT_INFO (gst_debug_vaapi, "gstreamer-vaapi version %s",
|
||||||
|
GST_VAAPI_VERSION_ID);
|
||||||
|
|
||||||
gst_vaapi_display_properties_init ();
|
gst_vaapi_display_properties_init ();
|
||||||
|
|
||||||
|
@ -947,6 +958,7 @@ gst_vaapi_display_create_unlocked (GstVaapiDisplay * display,
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GST_INFO_OBJECT (display, "new display addr=%p", display);
|
||||||
g_free (priv->display_name);
|
g_free (priv->display_name);
|
||||||
priv->display_name = g_strdup (info.display_name);
|
priv->display_name = g_strdup (info.display_name);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@ -995,42 +1007,39 @@ gst_vaapi_display_unlock_default (GstVaapiDisplay * display)
|
||||||
static void
|
static void
|
||||||
gst_vaapi_display_init (GstVaapiDisplay * display)
|
gst_vaapi_display_init (GstVaapiDisplay * display)
|
||||||
{
|
{
|
||||||
GstVaapiDisplayPrivate *const priv = GST_VAAPI_DISPLAY_GET_PRIVATE (display);
|
GstVaapiDisplayPrivate *const priv =
|
||||||
const GstVaapiDisplayClass *const dpy_class =
|
gst_vaapi_display_get_instance_private (display);
|
||||||
GST_VAAPI_DISPLAY_GET_CLASS (display);
|
|
||||||
|
|
||||||
|
display->priv = priv;
|
||||||
priv->display_type = GST_VAAPI_DISPLAY_TYPE_ANY;
|
priv->display_type = GST_VAAPI_DISPLAY_TYPE_ANY;
|
||||||
priv->par_n = 1;
|
priv->par_n = 1;
|
||||||
priv->par_d = 1;
|
priv->par_d = 1;
|
||||||
|
|
||||||
g_rec_mutex_init (&priv->mutex);
|
g_rec_mutex_init (&priv->mutex);
|
||||||
|
|
||||||
if (dpy_class->init)
|
|
||||||
dpy_class->init (display);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gst_vaapi_display_finalize (GstVaapiDisplay * display)
|
gst_vaapi_display_finalize (GObject * object)
|
||||||
{
|
{
|
||||||
|
GstVaapiDisplay *const display = GST_VAAPI_DISPLAY (object);
|
||||||
GstVaapiDisplayPrivate *const priv = GST_VAAPI_DISPLAY_GET_PRIVATE (display);
|
GstVaapiDisplayPrivate *const priv = GST_VAAPI_DISPLAY_GET_PRIVATE (display);
|
||||||
|
|
||||||
gst_vaapi_display_destroy (display);
|
gst_vaapi_display_destroy (display);
|
||||||
g_rec_mutex_clear (&priv->mutex);
|
g_rec_mutex_clear (&priv->mutex);
|
||||||
|
|
||||||
|
G_OBJECT_CLASS (gst_vaapi_display_parent_class)->finalize (object);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
gst_vaapi_display_class_init (GstVaapiDisplayClass * klass)
|
gst_vaapi_display_class_init (GstVaapiDisplayClass * klass)
|
||||||
{
|
{
|
||||||
GstVaapiMiniObjectClass *const object_class =
|
GObjectClass *const object_class = G_OBJECT_CLASS (klass);
|
||||||
GST_VAAPI_MINI_OBJECT_CLASS (klass);
|
|
||||||
GstVaapiDisplayClass *const dpy_class = GST_VAAPI_DISPLAY_CLASS (klass);
|
|
||||||
|
|
||||||
libgstvaapi_init_once ();
|
libgstvaapi_init_once ();
|
||||||
|
|
||||||
object_class->size = sizeof (GstVaapiDisplay);
|
object_class->finalize = gst_vaapi_display_finalize;
|
||||||
object_class->finalize = (GDestroyNotify) gst_vaapi_display_finalize;
|
klass->lock = gst_vaapi_display_lock_default;
|
||||||
dpy_class->lock = gst_vaapi_display_lock_default;
|
klass->unlock = gst_vaapi_display_unlock_default;
|
||||||
dpy_class->unlock = gst_vaapi_display_unlock_default;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -1102,31 +1111,12 @@ gst_vaapi_display_properties_init (void)
|
||||||
"The display contrast value", 0.0, 2.0, 1.0, G_PARAM_READWRITE);
|
"The display contrast value", 0.0, 2.0, 1.0, G_PARAM_READWRITE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline const GstVaapiDisplayClass *
|
|
||||||
gst_vaapi_display_class (void)
|
|
||||||
{
|
|
||||||
static GstVaapiDisplayClass g_class;
|
|
||||||
static gsize g_class_init = FALSE;
|
|
||||||
|
|
||||||
if (g_once_init_enter (&g_class_init)) {
|
|
||||||
gst_vaapi_display_class_init (&g_class);
|
|
||||||
g_once_init_leave (&g_class_init, TRUE);
|
|
||||||
}
|
|
||||||
return &g_class;
|
|
||||||
}
|
|
||||||
|
|
||||||
GstVaapiDisplay *
|
GstVaapiDisplay *
|
||||||
gst_vaapi_display_new (const GstVaapiDisplayClass * klass,
|
gst_vaapi_display_new (GstVaapiDisplay * display,
|
||||||
GstVaapiDisplayInitType init_type, gpointer init_value)
|
GstVaapiDisplayInitType init_type, gpointer init_value)
|
||||||
{
|
{
|
||||||
GstVaapiDisplay *display;
|
g_return_val_if_fail (display != NULL, NULL);
|
||||||
|
|
||||||
display = (GstVaapiDisplay *)
|
|
||||||
gst_vaapi_mini_object_new0 (GST_VAAPI_MINI_OBJECT_CLASS (klass));
|
|
||||||
if (!display)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
gst_vaapi_display_init (display);
|
|
||||||
if (!gst_vaapi_display_create (display, init_type, init_value))
|
if (!gst_vaapi_display_create (display, init_type, init_value))
|
||||||
goto error;
|
goto error;
|
||||||
return display;
|
return display;
|
||||||
|
@ -1158,7 +1148,7 @@ gst_vaapi_display_new_with_display (VADisplay va_display)
|
||||||
if (info)
|
if (info)
|
||||||
return gst_vaapi_display_ref_internal (info->display);
|
return gst_vaapi_display_ref_internal (info->display);
|
||||||
|
|
||||||
return gst_vaapi_display_new (gst_vaapi_display_class (),
|
return gst_vaapi_display_new (g_object_new (GST_TYPE_VAAPI_DISPLAY, NULL),
|
||||||
GST_VAAPI_DISPLAY_INIT_FROM_VA_DISPLAY, va_display);
|
GST_VAAPI_DISPLAY_INIT_FROM_VA_DISPLAY, va_display);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2124,7 +2114,7 @@ gst_vaapi_display_get_vendor_string (GstVaapiDisplay * display)
|
||||||
|
|
||||||
if (!ensure_vendor_string (display))
|
if (!ensure_vendor_string (display))
|
||||||
return NULL;
|
return NULL;
|
||||||
return display->priv.vendor_string;
|
return GST_VAAPI_DISPLAY_GET_PRIVATE (display)->vendor_string;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -33,8 +33,11 @@
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
|
#define GST_TYPE_VAAPI_DISPLAY (gst_vaapi_display_get_type ())
|
||||||
#define GST_VAAPI_DISPLAY(obj) \
|
#define GST_VAAPI_DISPLAY(obj) \
|
||||||
((GstVaapiDisplay *)(obj))
|
(G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_VAAPI_DISPLAY, GstVaapiDisplay))
|
||||||
|
#define GST_VAAPI_IS_DISPLAY(obj) \
|
||||||
|
(G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_VAAPI_DISPLAY))
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* GST_VAAPI_DISPLAY_GET_CLASS_TYPE:
|
* GST_VAAPI_DISPLAY_GET_CLASS_TYPE:
|
||||||
|
@ -109,6 +112,9 @@ typedef enum
|
||||||
GType
|
GType
|
||||||
gst_vaapi_display_type_get_type (void) G_GNUC_CONST;
|
gst_vaapi_display_type_get_type (void) G_GNUC_CONST;
|
||||||
|
|
||||||
|
GType
|
||||||
|
gst_vaapi_display_get_type (void) G_GNUC_CONST;
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
gst_vaapi_display_type_is_compatible (GstVaapiDisplayType type1,
|
gst_vaapi_display_type_is_compatible (GstVaapiDisplayType type1,
|
||||||
GstVaapiDisplayType type2);
|
GstVaapiDisplayType type2);
|
||||||
|
@ -260,6 +266,10 @@ gst_vaapi_display_has_opengl (GstVaapiDisplay * display);
|
||||||
void
|
void
|
||||||
gst_vaapi_display_reset_texture_map (GstVaapiDisplay * display);
|
gst_vaapi_display_reset_texture_map (GstVaapiDisplay * display);
|
||||||
|
|
||||||
|
#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
|
||||||
|
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstVaapiDisplay, gst_vaapi_display_unref)
|
||||||
|
#endif
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
#endif /* GST_VAAPI_DISPLAY_H */
|
#endif /* GST_VAAPI_DISPLAY_H */
|
||||||
|
|
|
@ -38,9 +38,15 @@
|
||||||
#include "gstvaapidisplay_drm_priv.h"
|
#include "gstvaapidisplay_drm_priv.h"
|
||||||
#include "gstvaapiwindow_drm.h"
|
#include "gstvaapiwindow_drm.h"
|
||||||
|
|
||||||
#define DEBUG 1
|
#define DEBUG_VAAPI_DISPLAY 1
|
||||||
#include "gstvaapidebug.h"
|
#include "gstvaapidebug.h"
|
||||||
|
|
||||||
|
#define _do_init \
|
||||||
|
G_ADD_PRIVATE (GstVaapiDisplayDRM);
|
||||||
|
|
||||||
|
G_DEFINE_TYPE_WITH_CODE (GstVaapiDisplayDRM, gst_vaapi_display_drm,
|
||||||
|
GST_TYPE_VAAPI_DISPLAY, _do_init);
|
||||||
|
|
||||||
static const guint g_display_types = 1U << GST_VAAPI_DISPLAY_TYPE_DRM;
|
static const guint g_display_types = 1U << GST_VAAPI_DISPLAY_TYPE_DRM;
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
|
@ -322,26 +328,21 @@ gst_vaapi_display_drm_create_window (GstVaapiDisplay * display, GstVaapiID id,
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gst_vaapi_display_drm_init (GstVaapiDisplay * display)
|
gst_vaapi_display_drm_init (GstVaapiDisplayDRM * display)
|
||||||
{
|
{
|
||||||
GstVaapiDisplayDRMPrivate *const priv =
|
GstVaapiDisplayDRMPrivate *const priv =
|
||||||
GST_VAAPI_DISPLAY_DRM_PRIVATE (display);
|
gst_vaapi_display_drm_get_instance_private (display);
|
||||||
|
|
||||||
|
display->priv = priv;
|
||||||
priv->drm_device = -1;
|
priv->drm_device = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gst_vaapi_display_drm_class_init (GstVaapiDisplayDRMClass * klass)
|
gst_vaapi_display_drm_class_init (GstVaapiDisplayDRMClass * klass)
|
||||||
{
|
{
|
||||||
GstVaapiMiniObjectClass *const object_class =
|
|
||||||
GST_VAAPI_MINI_OBJECT_CLASS (klass);
|
|
||||||
GstVaapiDisplayClass *const dpy_class = GST_VAAPI_DISPLAY_CLASS (klass);
|
GstVaapiDisplayClass *const dpy_class = GST_VAAPI_DISPLAY_CLASS (klass);
|
||||||
|
|
||||||
gst_vaapi_display_class_init (&klass->parent_class);
|
|
||||||
|
|
||||||
object_class->size = sizeof (GstVaapiDisplayDRM);
|
|
||||||
dpy_class->display_type = GST_VAAPI_DISPLAY_TYPE_DRM;
|
dpy_class->display_type = GST_VAAPI_DISPLAY_TYPE_DRM;
|
||||||
dpy_class->init = gst_vaapi_display_drm_init;
|
|
||||||
dpy_class->bind_display = gst_vaapi_display_drm_bind_display;
|
dpy_class->bind_display = gst_vaapi_display_drm_bind_display;
|
||||||
dpy_class->open_display = gst_vaapi_display_drm_open_display;
|
dpy_class->open_display = gst_vaapi_display_drm_open_display;
|
||||||
dpy_class->close_display = gst_vaapi_display_drm_close_display;
|
dpy_class->close_display = gst_vaapi_display_drm_close_display;
|
||||||
|
@ -349,19 +350,6 @@ gst_vaapi_display_drm_class_init (GstVaapiDisplayDRMClass * klass)
|
||||||
dpy_class->create_window = gst_vaapi_display_drm_create_window;
|
dpy_class->create_window = gst_vaapi_display_drm_create_window;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline const GstVaapiDisplayClass *
|
|
||||||
gst_vaapi_display_drm_class (void)
|
|
||||||
{
|
|
||||||
static GstVaapiDisplayDRMClass g_class;
|
|
||||||
static gsize g_class_init = FALSE;
|
|
||||||
|
|
||||||
if (g_once_init_enter (&g_class_init)) {
|
|
||||||
gst_vaapi_display_drm_class_init (&g_class);
|
|
||||||
g_once_init_leave (&g_class_init, TRUE);
|
|
||||||
}
|
|
||||||
return GST_VAAPI_DISPLAY_CLASS (&g_class);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gst_vaapi_display_drm_new:
|
* gst_vaapi_display_drm_new:
|
||||||
* @device_path: the DRM device path
|
* @device_path: the DRM device path
|
||||||
|
@ -394,7 +382,8 @@ gst_vaapi_display_drm_new (const gchar * device_path)
|
||||||
|
|
||||||
for (i = 0; i < num_types; i++) {
|
for (i = 0; i < num_types; i++) {
|
||||||
g_drm_device_type = types[i];
|
g_drm_device_type = types[i];
|
||||||
display = gst_vaapi_display_new (gst_vaapi_display_drm_class (),
|
display =
|
||||||
|
gst_vaapi_display_new (g_object_new (GST_TYPE_VAAPI_DISPLAY_DRM, NULL),
|
||||||
GST_VAAPI_DISPLAY_INIT_FROM_DISPLAY_NAME, (gpointer) device_path);
|
GST_VAAPI_DISPLAY_INIT_FROM_DISPLAY_NAME, (gpointer) device_path);
|
||||||
if (display || device_path)
|
if (display || device_path)
|
||||||
break;
|
break;
|
||||||
|
@ -419,7 +408,7 @@ gst_vaapi_display_drm_new_with_device (gint device)
|
||||||
{
|
{
|
||||||
g_return_val_if_fail (device >= 0, NULL);
|
g_return_val_if_fail (device >= 0, NULL);
|
||||||
|
|
||||||
return gst_vaapi_display_new (gst_vaapi_display_drm_class (),
|
return gst_vaapi_display_new (g_object_new (GST_TYPE_VAAPI_DISPLAY_DRM, NULL),
|
||||||
GST_VAAPI_DISPLAY_INIT_FROM_NATIVE_DISPLAY, GINT_TO_POINTER (device));
|
GST_VAAPI_DISPLAY_INIT_FROM_NATIVE_DISPLAY, GINT_TO_POINTER (device));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -27,8 +27,9 @@
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
|
#define GST_TYPE_VAAPI_DISPLAY_DRM (gst_vaapi_display_drm_get_type ())
|
||||||
#define GST_VAAPI_DISPLAY_DRM(obj) \
|
#define GST_VAAPI_DISPLAY_DRM(obj) \
|
||||||
((GstVaapiDisplayDRM *)(obj))
|
(G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_VAAPI_DISPLAY_DRM, GstVaapiDisplayDRM))
|
||||||
|
|
||||||
typedef struct _GstVaapiDisplayDRM GstVaapiDisplayDRM;
|
typedef struct _GstVaapiDisplayDRM GstVaapiDisplayDRM;
|
||||||
|
|
||||||
|
@ -45,6 +46,9 @@ const gchar *
|
||||||
gst_vaapi_display_drm_get_device_path (GstVaapiDisplayDRM *
|
gst_vaapi_display_drm_get_device_path (GstVaapiDisplayDRM *
|
||||||
display);
|
display);
|
||||||
|
|
||||||
|
GType
|
||||||
|
gst_vaapi_display_drm_get_type (void) G_GNUC_CONST;
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
#endif /* GST_VAAPI_DISPLAY_DRM_H */
|
#endif /* GST_VAAPI_DISPLAY_DRM_H */
|
||||||
|
|
|
@ -29,14 +29,16 @@
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
#define GST_VAAPI_IS_DISPLAY_DRM(display) \
|
#define GST_VAAPI_IS_DISPLAY_DRM(display) \
|
||||||
((display) != NULL && \
|
(G_TYPE_CHECK_INSTANCE_TYPE ((display), GST_TYPE_VAAPI_DISPLAY_DRM))
|
||||||
GST_VAAPI_DISPLAY_VADISPLAY_TYPE(display) == GST_VAAPI_DISPLAY_TYPE_DRM)
|
|
||||||
|
|
||||||
#define GST_VAAPI_DISPLAY_DRM_CAST(display) \
|
#define GST_VAAPI_DISPLAY_DRM_CAST(display) \
|
||||||
((GstVaapiDisplayDRM *)(display))
|
((GstVaapiDisplayDRM *)(display))
|
||||||
|
|
||||||
|
#define GST_VAAPI_DISPLAY_DRM_GET_CLASS(obj) \
|
||||||
|
(G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_VAAPI_DISPLAY_DRM, GstVaapiDisplayDRMClass))
|
||||||
|
|
||||||
#define GST_VAAPI_DISPLAY_DRM_PRIVATE(display) \
|
#define GST_VAAPI_DISPLAY_DRM_PRIVATE(display) \
|
||||||
(&GST_VAAPI_DISPLAY_DRM_CAST(display)->priv)
|
(GST_VAAPI_DISPLAY_DRM_CAST(display)->priv)
|
||||||
|
|
||||||
typedef struct _GstVaapiDisplayDRMPrivate GstVaapiDisplayDRMPrivate;
|
typedef struct _GstVaapiDisplayDRMPrivate GstVaapiDisplayDRMPrivate;
|
||||||
typedef struct _GstVaapiDisplayDRMClass GstVaapiDisplayDRMClass;
|
typedef struct _GstVaapiDisplayDRMClass GstVaapiDisplayDRMClass;
|
||||||
|
@ -69,7 +71,7 @@ struct _GstVaapiDisplayDRM
|
||||||
/*< private >*/
|
/*< private >*/
|
||||||
GstVaapiDisplay parent_instance;
|
GstVaapiDisplay parent_instance;
|
||||||
|
|
||||||
GstVaapiDisplayDRMPrivate priv;
|
GstVaapiDisplayDRMPrivate *priv;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -35,7 +35,11 @@
|
||||||
#include "gstvaapidisplay_wayland.h"
|
#include "gstvaapidisplay_wayland.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
GST_DEBUG_CATEGORY (gst_debug_vaapidisplay_egl);
|
#define DEBUG_VAAPI_DISPLAY 1
|
||||||
|
#include "gstvaapidebug.h"
|
||||||
|
|
||||||
|
G_DEFINE_TYPE (GstVaapiDisplayEGL, gst_vaapi_display_egl,
|
||||||
|
GST_TYPE_VAAPI_DISPLAY);
|
||||||
|
|
||||||
/* ------------------------------------------------------------------------- */
|
/* ------------------------------------------------------------------------- */
|
||||||
/* --- EGL backend implementation --- */
|
/* --- EGL backend implementation --- */
|
||||||
|
@ -90,11 +94,13 @@ ensure_context_is_wrapped (GstVaapiDisplayEGL * display, EGLContext gl_context)
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
gst_vaapi_display_egl_bind_display (GstVaapiDisplayEGL * display,
|
gst_vaapi_display_egl_bind_display (GstVaapiDisplay * base_display,
|
||||||
const InitParams * params)
|
gpointer native_params)
|
||||||
{
|
{
|
||||||
GstVaapiDisplay *native_display = NULL;
|
GstVaapiDisplay *native_display = NULL;
|
||||||
|
GstVaapiDisplayEGL *display = GST_VAAPI_DISPLAY_EGL (base_display);
|
||||||
EglDisplay *egl_display;
|
EglDisplay *egl_display;
|
||||||
|
const InitParams *params = (InitParams *) native_params;
|
||||||
|
|
||||||
if (params->display) {
|
if (params->display) {
|
||||||
#if USE_X11
|
#if USE_X11
|
||||||
|
@ -132,14 +138,16 @@ gst_vaapi_display_egl_bind_display (GstVaapiDisplayEGL * display,
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gst_vaapi_display_egl_close_display (GstVaapiDisplayEGL * display)
|
gst_vaapi_display_egl_close_display (GstVaapiDisplay * base_display)
|
||||||
{
|
{
|
||||||
|
GstVaapiDisplayEGL *display = GST_VAAPI_DISPLAY_EGL (base_display);
|
||||||
gst_vaapi_display_replace (&display->display, NULL);
|
gst_vaapi_display_replace (&display->display, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gst_vaapi_display_egl_lock (GstVaapiDisplayEGL * display)
|
gst_vaapi_display_egl_lock (GstVaapiDisplay * base_display)
|
||||||
{
|
{
|
||||||
|
GstVaapiDisplayEGL *display = GST_VAAPI_DISPLAY_EGL (base_display);
|
||||||
GstVaapiDisplayClass *const klass =
|
GstVaapiDisplayClass *const klass =
|
||||||
GST_VAAPI_DISPLAY_GET_CLASS (display->display);
|
GST_VAAPI_DISPLAY_GET_CLASS (display->display);
|
||||||
|
|
||||||
|
@ -148,8 +156,9 @@ gst_vaapi_display_egl_lock (GstVaapiDisplayEGL * display)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gst_vaapi_display_egl_unlock (GstVaapiDisplayEGL * display)
|
gst_vaapi_display_egl_unlock (GstVaapiDisplay * base_display)
|
||||||
{
|
{
|
||||||
|
GstVaapiDisplayEGL *display = GST_VAAPI_DISPLAY_EGL (base_display);
|
||||||
GstVaapiDisplayClass *const klass =
|
GstVaapiDisplayClass *const klass =
|
||||||
GST_VAAPI_DISPLAY_GET_CLASS (display->display);
|
GST_VAAPI_DISPLAY_GET_CLASS (display->display);
|
||||||
|
|
||||||
|
@ -158,8 +167,9 @@ gst_vaapi_display_egl_unlock (GstVaapiDisplayEGL * display)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gst_vaapi_display_egl_sync (GstVaapiDisplayEGL * display)
|
gst_vaapi_display_egl_sync (GstVaapiDisplay * base_display)
|
||||||
{
|
{
|
||||||
|
GstVaapiDisplayEGL *display = GST_VAAPI_DISPLAY_EGL (base_display);
|
||||||
GstVaapiDisplayClass *const klass =
|
GstVaapiDisplayClass *const klass =
|
||||||
GST_VAAPI_DISPLAY_GET_CLASS (display->display);
|
GST_VAAPI_DISPLAY_GET_CLASS (display->display);
|
||||||
|
|
||||||
|
@ -170,8 +180,9 @@ gst_vaapi_display_egl_sync (GstVaapiDisplayEGL * display)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gst_vaapi_display_egl_flush (GstVaapiDisplayEGL * display)
|
gst_vaapi_display_egl_flush (GstVaapiDisplay * base_display)
|
||||||
{
|
{
|
||||||
|
GstVaapiDisplayEGL *display = GST_VAAPI_DISPLAY_EGL (base_display);
|
||||||
GstVaapiDisplayClass *const klass =
|
GstVaapiDisplayClass *const klass =
|
||||||
GST_VAAPI_DISPLAY_GET_CLASS (display->display);
|
GST_VAAPI_DISPLAY_GET_CLASS (display->display);
|
||||||
|
|
||||||
|
@ -180,9 +191,10 @@ gst_vaapi_display_egl_flush (GstVaapiDisplayEGL * display)
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
gst_vaapi_display_egl_get_display_info (GstVaapiDisplayEGL * display,
|
gst_vaapi_display_egl_get_display_info (GstVaapiDisplay * base_display,
|
||||||
GstVaapiDisplayInfo * info)
|
GstVaapiDisplayInfo * info)
|
||||||
{
|
{
|
||||||
|
GstVaapiDisplayEGL *display = GST_VAAPI_DISPLAY_EGL (base_display);
|
||||||
GstVaapiDisplayClass *const klass =
|
GstVaapiDisplayClass *const klass =
|
||||||
GST_VAAPI_DISPLAY_GET_CLASS (display->display);
|
GST_VAAPI_DISPLAY_GET_CLASS (display->display);
|
||||||
|
|
||||||
|
@ -192,9 +204,10 @@ gst_vaapi_display_egl_get_display_info (GstVaapiDisplayEGL * display,
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gst_vaapi_display_egl_get_size (GstVaapiDisplayEGL * display,
|
gst_vaapi_display_egl_get_size (GstVaapiDisplay * base_display,
|
||||||
guint * width_ptr, guint * height_ptr)
|
guint * width_ptr, guint * height_ptr)
|
||||||
{
|
{
|
||||||
|
GstVaapiDisplayEGL *display = GST_VAAPI_DISPLAY_EGL (base_display);
|
||||||
GstVaapiDisplayClass *const klass =
|
GstVaapiDisplayClass *const klass =
|
||||||
GST_VAAPI_DISPLAY_GET_CLASS (display->display);
|
GST_VAAPI_DISPLAY_GET_CLASS (display->display);
|
||||||
|
|
||||||
|
@ -203,9 +216,10 @@ gst_vaapi_display_egl_get_size (GstVaapiDisplayEGL * display,
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gst_vaapi_display_egl_get_size_mm (GstVaapiDisplayEGL * display,
|
gst_vaapi_display_egl_get_size_mm (GstVaapiDisplay * base_display,
|
||||||
guint * width_ptr, guint * height_ptr)
|
guint * width_ptr, guint * height_ptr)
|
||||||
{
|
{
|
||||||
|
GstVaapiDisplayEGL *display = GST_VAAPI_DISPLAY_EGL (base_display);
|
||||||
GstVaapiDisplayClass *const klass =
|
GstVaapiDisplayClass *const klass =
|
||||||
GST_VAAPI_DISPLAY_GET_CLASS (display->display);
|
GST_VAAPI_DISPLAY_GET_CLASS (display->display);
|
||||||
|
|
||||||
|
@ -214,9 +228,10 @@ gst_vaapi_display_egl_get_size_mm (GstVaapiDisplayEGL * display,
|
||||||
}
|
}
|
||||||
|
|
||||||
static guintptr
|
static guintptr
|
||||||
gst_vaapi_display_egl_get_visual_id (GstVaapiDisplayEGL * display,
|
gst_vaapi_display_egl_get_visual_id (GstVaapiDisplay * base_display,
|
||||||
GstVaapiWindow * window)
|
GstVaapiWindow * window)
|
||||||
{
|
{
|
||||||
|
GstVaapiDisplayEGL *display = GST_VAAPI_DISPLAY_EGL (base_display);
|
||||||
if (!ensure_context (display))
|
if (!ensure_context (display))
|
||||||
return 0;
|
return 0;
|
||||||
return display->egl_context->config->visual_id;
|
return display->egl_context->config->visual_id;
|
||||||
|
@ -267,73 +282,43 @@ gst_vaapi_display_egl_get_texture_map (GstVaapiDisplay * display)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gst_vaapi_display_egl_finalize (GstVaapiDisplay * display)
|
gst_vaapi_display_egl_finalize (GObject * object)
|
||||||
{
|
{
|
||||||
GstVaapiDisplayEGL *dpy = GST_VAAPI_DISPLAY_EGL (display);
|
GstVaapiDisplayEGL *dpy = GST_VAAPI_DISPLAY_EGL (object);
|
||||||
|
|
||||||
if (dpy->texture_map)
|
if (dpy->texture_map)
|
||||||
gst_object_unref (dpy->texture_map);
|
gst_object_unref (dpy->texture_map);
|
||||||
GST_VAAPI_DISPLAY_EGL_GET_CLASS (display)->parent_finalize (display);
|
G_OBJECT_CLASS (gst_vaapi_display_egl_parent_class)->finalize (object);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gst_vaapi_display_egl_init (GstVaapiDisplayEGL * display)
|
||||||
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gst_vaapi_display_egl_class_init (GstVaapiDisplayEGLClass * klass)
|
gst_vaapi_display_egl_class_init (GstVaapiDisplayEGLClass * klass)
|
||||||
{
|
{
|
||||||
GstVaapiMiniObjectClass *const object_class =
|
GObjectClass *const object_class = G_OBJECT_CLASS (klass);
|
||||||
GST_VAAPI_MINI_OBJECT_CLASS (klass);
|
|
||||||
GstVaapiDisplayClass *const dpy_class = GST_VAAPI_DISPLAY_CLASS (klass);
|
GstVaapiDisplayClass *const dpy_class = GST_VAAPI_DISPLAY_CLASS (klass);
|
||||||
|
|
||||||
GST_DEBUG_CATEGORY_INIT (gst_debug_vaapidisplay_egl, "vaapidisplay_egl", 0,
|
object_class->finalize = gst_vaapi_display_egl_finalize;
|
||||||
"VA/EGL backend");
|
|
||||||
|
|
||||||
gst_vaapi_display_class_init (dpy_class);
|
|
||||||
|
|
||||||
/* chain up destructor */
|
|
||||||
klass->parent_finalize = object_class->finalize;
|
|
||||||
object_class->finalize = (GDestroyNotify) gst_vaapi_display_egl_finalize;
|
|
||||||
|
|
||||||
object_class->size = sizeof (GstVaapiDisplayEGL);
|
|
||||||
dpy_class->display_type = GST_VAAPI_DISPLAY_TYPE_EGL;
|
dpy_class->display_type = GST_VAAPI_DISPLAY_TYPE_EGL;
|
||||||
dpy_class->bind_display = (GstVaapiDisplayBindFunc)
|
dpy_class->bind_display = gst_vaapi_display_egl_bind_display;
|
||||||
gst_vaapi_display_egl_bind_display;
|
dpy_class->close_display = gst_vaapi_display_egl_close_display;
|
||||||
dpy_class->close_display = (GstVaapiDisplayCloseFunc)
|
dpy_class->lock = gst_vaapi_display_egl_lock;
|
||||||
gst_vaapi_display_egl_close_display;
|
dpy_class->unlock = gst_vaapi_display_egl_unlock;
|
||||||
dpy_class->lock = (GstVaapiDisplayLockFunc)
|
dpy_class->sync = gst_vaapi_display_egl_sync;
|
||||||
gst_vaapi_display_egl_lock;
|
dpy_class->flush = gst_vaapi_display_egl_flush;
|
||||||
dpy_class->unlock = (GstVaapiDisplayUnlockFunc)
|
dpy_class->get_display = gst_vaapi_display_egl_get_display_info;
|
||||||
gst_vaapi_display_egl_unlock;
|
dpy_class->get_size = gst_vaapi_display_egl_get_size;
|
||||||
dpy_class->sync = (GstVaapiDisplaySyncFunc)
|
dpy_class->get_size_mm = gst_vaapi_display_egl_get_size_mm;
|
||||||
gst_vaapi_display_egl_sync;
|
dpy_class->get_visual_id = gst_vaapi_display_egl_get_visual_id;
|
||||||
dpy_class->flush = (GstVaapiDisplayFlushFunc)
|
dpy_class->create_window = gst_vaapi_display_egl_create_window;
|
||||||
gst_vaapi_display_egl_flush;
|
dpy_class->create_texture = gst_vaapi_display_egl_create_texture;
|
||||||
dpy_class->get_display = (GstVaapiDisplayGetInfoFunc)
|
|
||||||
gst_vaapi_display_egl_get_display_info;
|
|
||||||
dpy_class->get_size = (GstVaapiDisplayGetSizeFunc)
|
|
||||||
gst_vaapi_display_egl_get_size;
|
|
||||||
dpy_class->get_size_mm = (GstVaapiDisplayGetSizeMFunc)
|
|
||||||
gst_vaapi_display_egl_get_size_mm;
|
|
||||||
dpy_class->get_visual_id = (GstVaapiDisplayGetVisualIdFunc)
|
|
||||||
gst_vaapi_display_egl_get_visual_id;
|
|
||||||
dpy_class->create_window = (GstVaapiDisplayCreateWindowFunc)
|
|
||||||
gst_vaapi_display_egl_create_window;
|
|
||||||
dpy_class->create_texture = (GstVaapiDisplayCreateTextureFunc)
|
|
||||||
gst_vaapi_display_egl_create_texture;
|
|
||||||
dpy_class->get_texture_map = gst_vaapi_display_egl_get_texture_map;
|
dpy_class->get_texture_map = gst_vaapi_display_egl_get_texture_map;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline const GstVaapiDisplayClass *
|
|
||||||
gst_vaapi_display_egl_class (void)
|
|
||||||
{
|
|
||||||
static GstVaapiDisplayEGLClass g_class;
|
|
||||||
static gsize g_class_init = FALSE;
|
|
||||||
|
|
||||||
if (g_once_init_enter (&g_class_init)) {
|
|
||||||
gst_vaapi_display_egl_class_init (&g_class);
|
|
||||||
g_once_init_leave (&g_class_init, TRUE);
|
|
||||||
}
|
|
||||||
return GST_VAAPI_DISPLAY_CLASS (&g_class);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gst_vaapi_display_egl_new:
|
* gst_vaapi_display_egl_new:
|
||||||
* @display: a #GstVaapiDisplay, or %NULL to pick any one
|
* @display: a #GstVaapiDisplay, or %NULL to pick any one
|
||||||
|
@ -360,7 +345,7 @@ gst_vaapi_display_egl_new (GstVaapiDisplay * display, guint gles_version)
|
||||||
params.display_type = GST_VAAPI_DISPLAY_TYPE_ANY;
|
params.display_type = GST_VAAPI_DISPLAY_TYPE_ANY;
|
||||||
}
|
}
|
||||||
params.gles_version = gles_version;
|
params.gles_version = gles_version;
|
||||||
return gst_vaapi_display_new (gst_vaapi_display_egl_class (),
|
return gst_vaapi_display_new (g_object_new (GST_TYPE_VAAPI_DISPLAY_EGL, NULL),
|
||||||
GST_VAAPI_DISPLAY_INIT_FROM_NATIVE_DISPLAY, ¶ms);
|
GST_VAAPI_DISPLAY_INIT_FROM_NATIVE_DISPLAY, ¶ms);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -391,7 +376,7 @@ gst_vaapi_display_egl_new_with_native_display (gpointer native_display,
|
||||||
params.display = native_display;
|
params.display = native_display;
|
||||||
params.display_type = display_type;
|
params.display_type = display_type;
|
||||||
params.gles_version = gles_version;
|
params.gles_version = gles_version;
|
||||||
return gst_vaapi_display_new (gst_vaapi_display_egl_class (),
|
return gst_vaapi_display_new (g_object_new (GST_TYPE_VAAPI_DISPLAY_EGL, NULL),
|
||||||
GST_VAAPI_DISPLAY_INIT_FROM_NATIVE_DISPLAY, ¶ms);
|
GST_VAAPI_DISPLAY_INIT_FROM_NATIVE_DISPLAY, ¶ms);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -30,8 +30,9 @@ G_BEGIN_DECLS
|
||||||
|
|
||||||
typedef struct _GstVaapiDisplayEGL GstVaapiDisplayEGL;
|
typedef struct _GstVaapiDisplayEGL GstVaapiDisplayEGL;
|
||||||
|
|
||||||
|
#define GST_TYPE_VAAPI_DISPLAY_EGL (gst_vaapi_display_egl_get_type ())
|
||||||
#define GST_VAAPI_DISPLAY_EGL(obj) \
|
#define GST_VAAPI_DISPLAY_EGL(obj) \
|
||||||
((GstVaapiDisplayEGL *)(obj))
|
(G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_VAAPI_DISPLAY_EGL, GstVaapiDisplayEGL))
|
||||||
|
|
||||||
GstVaapiDisplay *
|
GstVaapiDisplay *
|
||||||
gst_vaapi_display_egl_new (GstVaapiDisplay * display, guint gles_version);
|
gst_vaapi_display_egl_new (GstVaapiDisplay * display, guint gles_version);
|
||||||
|
@ -50,6 +51,9 @@ gboolean
|
||||||
gst_vaapi_display_egl_set_gl_context (GstVaapiDisplayEGL * display,
|
gst_vaapi_display_egl_set_gl_context (GstVaapiDisplayEGL * display,
|
||||||
EGLContext gl_context);
|
EGLContext gl_context);
|
||||||
|
|
||||||
|
GType
|
||||||
|
gst_vaapi_display_egl_get_type (void) G_GNUC_CONST;
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
#endif /* GST_VAAPI_DISPLAY_EGL_H */
|
#endif /* GST_VAAPI_DISPLAY_EGL_H */
|
||||||
|
|
|
@ -32,14 +32,16 @@
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
#define GST_VAAPI_IS_DISPLAY_EGL(display) \
|
#define GST_VAAPI_IS_DISPLAY_EGL(display) \
|
||||||
((display) != NULL && \
|
(G_TYPE_CHECK_INSTANCE_TYPE ((display), GST_TYPE_VAAPI_DISPLAY_EGL))
|
||||||
GST_VAAPI_DISPLAY_GET_CLASS_TYPE (display) == GST_VAAPI_DISPLAY_TYPE_EGL)
|
|
||||||
|
|
||||||
#define GST_VAAPI_DISPLAY_EGL_CLASS(klass) \
|
#define GST_VAAPI_DISPLAY_EGL_CLASS(klass) \
|
||||||
((GstVaapiDisplayEGLClass *)(klass))
|
(G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_VAAPI_DISPLAY_EGL, GstVaapiDisplayEGLClass))
|
||||||
|
|
||||||
#define GST_VAAPI_DISPLAY_EGL_GET_CLASS(obj) \
|
#define GST_VAAPI_DISPLAY_EGL_GET_CLASS(obj) \
|
||||||
GST_VAAPI_DISPLAY_EGL_CLASS (GST_VAAPI_DISPLAY_GET_CLASS (obj))
|
(G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_VAAPI_DISPLAY_EGL, GstVaapiDisplayEGLClass))
|
||||||
|
|
||||||
|
#define GST_VAAPI_DISPLAY_EGL_CAST(obj) \
|
||||||
|
((GstVaapiDisplayEGL *)(obj))
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* GST_VAAPI_DISPLAY_EGL_DISPLAY:
|
* GST_VAAPI_DISPLAY_EGL_DISPLAY:
|
||||||
|
@ -50,7 +52,7 @@ G_BEGIN_DECLS
|
||||||
*/
|
*/
|
||||||
#undef GST_VAAPI_DISPLAY_EGL_DISPLAY
|
#undef GST_VAAPI_DISPLAY_EGL_DISPLAY
|
||||||
#define GST_VAAPI_DISPLAY_EGL_DISPLAY(display) \
|
#define GST_VAAPI_DISPLAY_EGL_DISPLAY(display) \
|
||||||
(GST_VAAPI_DISPLAY_EGL (display)->egl_display)
|
(GST_VAAPI_DISPLAY_EGL_CAST (display)->egl_display)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* GST_VAAPI_DISPLAY_EGL_CONTEXT:
|
* GST_VAAPI_DISPLAY_EGL_CONTEXT:
|
||||||
|
@ -92,7 +94,6 @@ struct _GstVaapiDisplayEGLClass
|
||||||
{
|
{
|
||||||
/*< private >*/
|
/*< private >*/
|
||||||
GstVaapiDisplayClass parent_class;
|
GstVaapiDisplayClass parent_class;
|
||||||
GDestroyNotify parent_finalize;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
G_GNUC_INTERNAL
|
G_GNUC_INTERNAL
|
||||||
|
|
|
@ -38,9 +38,12 @@
|
||||||
#include "gstvaapiwindow_glx.h"
|
#include "gstvaapiwindow_glx.h"
|
||||||
#include "gstvaapitexture_glx.h"
|
#include "gstvaapitexture_glx.h"
|
||||||
|
|
||||||
#define DEBUG 1
|
#define DEBUG_VAAPI_DISPLAY 1
|
||||||
#include "gstvaapidebug.h"
|
#include "gstvaapidebug.h"
|
||||||
|
|
||||||
|
G_DEFINE_TYPE (GstVaapiDisplayGLX, gst_vaapi_display_glx,
|
||||||
|
GST_TYPE_VAAPI_DISPLAY_X11);
|
||||||
|
|
||||||
static GstVaapiWindow *
|
static GstVaapiWindow *
|
||||||
gst_vaapi_display_glx_create_window (GstVaapiDisplay * display, GstVaapiID id,
|
gst_vaapi_display_glx_create_window (GstVaapiDisplay * display, GstVaapiID id,
|
||||||
guint width, guint height)
|
guint width, guint height)
|
||||||
|
@ -85,48 +88,33 @@ gst_vaapi_display_glx_get_texture_map (GstVaapiDisplay * display)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gst_vaapi_display_glx_finalize (GstVaapiDisplay * display)
|
gst_vaapi_display_glx_finalize (GObject * object)
|
||||||
{
|
{
|
||||||
GstVaapiDisplayGLX *dpy = GST_VAAPI_DISPLAY_GLX (display);
|
GstVaapiDisplayGLX *dpy = GST_VAAPI_DISPLAY_GLX (object);
|
||||||
|
|
||||||
if (dpy->texture_map)
|
if (dpy->texture_map)
|
||||||
gst_object_unref (dpy->texture_map);
|
gst_object_unref (dpy->texture_map);
|
||||||
GST_VAAPI_DISPLAY_GLX_GET_CLASS (display)->parent_finalize (display);
|
G_OBJECT_CLASS (gst_vaapi_display_glx_parent_class)->finalize (object);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gst_vaapi_display_glx_init (GstVaapiDisplayGLX * display)
|
||||||
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gst_vaapi_display_glx_class_init (GstVaapiDisplayGLXClass * klass)
|
gst_vaapi_display_glx_class_init (GstVaapiDisplayGLXClass * klass)
|
||||||
{
|
{
|
||||||
GstVaapiMiniObjectClass *const object_class =
|
GObjectClass *const object_class = G_OBJECT_CLASS (klass);
|
||||||
GST_VAAPI_MINI_OBJECT_CLASS (klass);
|
|
||||||
GstVaapiDisplayClass *const dpy_class = GST_VAAPI_DISPLAY_CLASS (klass);
|
GstVaapiDisplayClass *const dpy_class = GST_VAAPI_DISPLAY_CLASS (klass);
|
||||||
|
|
||||||
gst_vaapi_display_x11_class_init (&klass->parent_class);
|
object_class->finalize = gst_vaapi_display_glx_finalize;
|
||||||
|
|
||||||
/* chain up destructor */
|
|
||||||
klass->parent_finalize = object_class->finalize;
|
|
||||||
object_class->finalize = (GDestroyNotify) gst_vaapi_display_glx_finalize;
|
|
||||||
|
|
||||||
object_class->size = sizeof (GstVaapiDisplayGLX);
|
|
||||||
dpy_class->display_type = GST_VAAPI_DISPLAY_TYPE_GLX;
|
dpy_class->display_type = GST_VAAPI_DISPLAY_TYPE_GLX;
|
||||||
dpy_class->create_window = gst_vaapi_display_glx_create_window;
|
dpy_class->create_window = gst_vaapi_display_glx_create_window;
|
||||||
dpy_class->create_texture = gst_vaapi_display_glx_create_texture;
|
dpy_class->create_texture = gst_vaapi_display_glx_create_texture;
|
||||||
dpy_class->get_texture_map = gst_vaapi_display_glx_get_texture_map;
|
dpy_class->get_texture_map = gst_vaapi_display_glx_get_texture_map;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline const GstVaapiDisplayClass *
|
|
||||||
gst_vaapi_display_glx_class (void)
|
|
||||||
{
|
|
||||||
static GstVaapiDisplayGLXClass g_class;
|
|
||||||
static gsize g_class_init = FALSE;
|
|
||||||
|
|
||||||
if (g_once_init_enter (&g_class_init)) {
|
|
||||||
gst_vaapi_display_glx_class_init (&g_class);
|
|
||||||
g_once_init_leave (&g_class_init, TRUE);
|
|
||||||
}
|
|
||||||
return GST_VAAPI_DISPLAY_CLASS (&g_class);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gst_vaapi_display_glx_new:
|
* gst_vaapi_display_glx_new:
|
||||||
* @display_name: the X11 display name
|
* @display_name: the X11 display name
|
||||||
|
@ -140,7 +128,7 @@ gst_vaapi_display_glx_class (void)
|
||||||
GstVaapiDisplay *
|
GstVaapiDisplay *
|
||||||
gst_vaapi_display_glx_new (const gchar * display_name)
|
gst_vaapi_display_glx_new (const gchar * display_name)
|
||||||
{
|
{
|
||||||
return gst_vaapi_display_new (gst_vaapi_display_glx_class (),
|
return gst_vaapi_display_new (g_object_new (GST_TYPE_VAAPI_DISPLAY_GLX, NULL),
|
||||||
GST_VAAPI_DISPLAY_INIT_FROM_DISPLAY_NAME, (gpointer) display_name);
|
GST_VAAPI_DISPLAY_INIT_FROM_DISPLAY_NAME, (gpointer) display_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -160,6 +148,6 @@ gst_vaapi_display_glx_new_with_display (Display * x11_display)
|
||||||
{
|
{
|
||||||
g_return_val_if_fail (x11_display != NULL, NULL);
|
g_return_val_if_fail (x11_display != NULL, NULL);
|
||||||
|
|
||||||
return gst_vaapi_display_new (gst_vaapi_display_glx_class (),
|
return gst_vaapi_display_new (g_object_new (GST_TYPE_VAAPI_DISPLAY_GLX, NULL),
|
||||||
GST_VAAPI_DISPLAY_INIT_FROM_NATIVE_DISPLAY, x11_display);
|
GST_VAAPI_DISPLAY_INIT_FROM_NATIVE_DISPLAY, x11_display);
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,8 +29,9 @@
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
|
#define GST_TYPE_VAAPI_DISPLAY_GLX (gst_vaapi_display_glx_get_type ())
|
||||||
#define GST_VAAPI_DISPLAY_GLX(obj) \
|
#define GST_VAAPI_DISPLAY_GLX(obj) \
|
||||||
((GstVaapiDisplayGLX *)(obj))
|
(G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_VAAPI_DISPLAY_GLX, GstVaapiDisplayGLX))
|
||||||
|
|
||||||
typedef struct _GstVaapiDisplayGLX GstVaapiDisplayGLX;
|
typedef struct _GstVaapiDisplayGLX GstVaapiDisplayGLX;
|
||||||
|
|
||||||
|
@ -40,6 +41,9 @@ gst_vaapi_display_glx_new (const gchar * display_name);
|
||||||
GstVaapiDisplay *
|
GstVaapiDisplay *
|
||||||
gst_vaapi_display_glx_new_with_display (Display * x11_display);
|
gst_vaapi_display_glx_new_with_display (Display * x11_display);
|
||||||
|
|
||||||
|
GType
|
||||||
|
gst_vaapi_display_glx_get_type (void) G_GNUC_CONST;
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
#endif /* GST_VAAPI_DISPLAY_GLX_H */
|
#endif /* GST_VAAPI_DISPLAY_GLX_H */
|
||||||
|
|
|
@ -31,17 +31,16 @@
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
#define GST_VAAPI_IS_DISPLAY_GLX(display) \
|
#define GST_VAAPI_IS_DISPLAY_GLX(display) \
|
||||||
((display) != NULL && \
|
(G_TYPE_CHECK_INSTANCE_TYPE ((display), GST_TYPE_VAAPI_DISPLAY_GLX))
|
||||||
GST_VAAPI_DISPLAY_GET_CLASS_TYPE (display) == GST_VAAPI_DISPLAY_TYPE_GLX)
|
|
||||||
|
|
||||||
#define GST_VAAPI_DISPLAY_GLX_CAST(display) \
|
#define GST_VAAPI_DISPLAY_GLX_CAST(display) \
|
||||||
((GstVaapiDisplayGLX *)(display))
|
((GstVaapiDisplayGLX *)(display))
|
||||||
|
|
||||||
#define GST_VAAPI_DISPLAY_GLX_CLASS(klass) \
|
#define GST_VAAPI_DISPLAY_GLX_CLASS(klass) \
|
||||||
((GstVaapiDisplayGLXClass *)(klass))
|
(G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_VAAPI_DISPLAY_GLX, GstVaapiDisplayGLXClass))
|
||||||
|
|
||||||
#define GST_VAAPI_DISPLAY_GLX_GET_CLASS(obj) \
|
#define GST_VAAPI_DISPLAY_GLX_GET_CLASS(obj) \
|
||||||
GST_VAAPI_DISPLAY_GLX_CLASS(GST_VAAPI_MINI_OBJECT_GET_CLASS(obj))
|
(G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_VAAPI_DISPLAY_GLX, GstVaapiDisplayGLXClass))
|
||||||
|
|
||||||
typedef struct _GstVaapiDisplayGLXClass GstVaapiDisplayGLXClass;
|
typedef struct _GstVaapiDisplayGLXClass GstVaapiDisplayGLXClass;
|
||||||
|
|
||||||
|
@ -66,7 +65,6 @@ struct _GstVaapiDisplayGLXClass
|
||||||
{
|
{
|
||||||
/*< private >*/
|
/*< private >*/
|
||||||
GstVaapiDisplayX11Class parent_class;
|
GstVaapiDisplayX11Class parent_class;
|
||||||
GDestroyNotify parent_finalize;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
|
@ -35,53 +35,24 @@
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
#define GST_VAAPI_DISPLAY_CAST(display) \
|
#define GST_VAAPI_DISPLAY_CAST(display) \
|
||||||
((GstVaapiDisplay *) (display))
|
((GstVaapiDisplay *)(display))
|
||||||
|
|
||||||
#define GST_VAAPI_DISPLAY_GET_PRIVATE(display) \
|
#define GST_VAAPI_DISPLAY_GET_PRIVATE(display) \
|
||||||
(&GST_VAAPI_DISPLAY_CAST (display)->priv)
|
(GST_VAAPI_DISPLAY_CAST (display)->priv)
|
||||||
|
|
||||||
#define GST_VAAPI_DISPLAY_CLASS(klass) \
|
#define GST_VAAPI_DISPLAY_CLASS(klass) \
|
||||||
((GstVaapiDisplayClass *) (klass))
|
(G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_VAAPI_DISPLAY, GstVaapiDisplayClass))
|
||||||
|
|
||||||
#define GST_VAAPI_IS_DISPLAY_CLASS(klass) \
|
#define GST_VAAPI_IS_DISPLAY_CLASS(klass) \
|
||||||
((klass) != NULL)
|
(G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_VAAPI_DISPLAY))
|
||||||
|
|
||||||
#define GST_VAAPI_DISPLAY_GET_CLASS(obj) \
|
#define GST_VAAPI_DISPLAY_GET_CLASS(obj) \
|
||||||
GST_VAAPI_DISPLAY_CLASS (GST_VAAPI_MINI_OBJECT_GET_CLASS (obj))
|
(G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_VAAPI_DISPLAY, GstVaapiDisplayClass))
|
||||||
|
|
||||||
typedef struct _GstVaapiDisplayPrivate GstVaapiDisplayPrivate;
|
typedef struct _GstVaapiDisplayPrivate GstVaapiDisplayPrivate;
|
||||||
typedef struct _GstVaapiDisplayClass GstVaapiDisplayClass;
|
typedef struct _GstVaapiDisplayClass GstVaapiDisplayClass;
|
||||||
typedef enum _GstVaapiDisplayInitType GstVaapiDisplayInitType;
|
typedef enum _GstVaapiDisplayInitType GstVaapiDisplayInitType;
|
||||||
|
|
||||||
typedef void (*GstVaapiDisplayInitFunc) (GstVaapiDisplay * display);
|
|
||||||
typedef gboolean (*GstVaapiDisplayBindFunc) (GstVaapiDisplay * display,
|
|
||||||
gpointer native_dpy);
|
|
||||||
typedef gboolean (*GstVaapiDisplayOpenFunc) (GstVaapiDisplay * display,
|
|
||||||
const gchar * name);
|
|
||||||
typedef void (*GstVaapiDisplayCloseFunc) (GstVaapiDisplay * display);
|
|
||||||
typedef void (*GstVaapiDisplayLockFunc) (GstVaapiDisplay * display);
|
|
||||||
typedef void (*GstVaapiDisplayUnlockFunc) (GstVaapiDisplay * display);
|
|
||||||
typedef void (*GstVaapiDisplaySyncFunc) (GstVaapiDisplay * display);
|
|
||||||
typedef void (*GstVaapiDisplayFlushFunc) (GstVaapiDisplay * display);
|
|
||||||
typedef gboolean (*GstVaapiDisplayGetInfoFunc) (GstVaapiDisplay * display,
|
|
||||||
GstVaapiDisplayInfo * info);
|
|
||||||
typedef void (*GstVaapiDisplayGetSizeFunc) (GstVaapiDisplay * display,
|
|
||||||
guint * pwidth, guint * pheight);
|
|
||||||
typedef void (*GstVaapiDisplayGetSizeMFunc) (GstVaapiDisplay * display,
|
|
||||||
guint * pwidth, guint * pheight);
|
|
||||||
typedef GstVaapiWindow *(*GstVaapiDisplayCreateWindowFunc) (
|
|
||||||
GstVaapiDisplay * display, GstVaapiID id, guint width, guint height);
|
|
||||||
typedef GstVaapiTexture *(*GstVaapiDisplayCreateTextureFunc) (
|
|
||||||
GstVaapiDisplay * display, GstVaapiID id, guint target, guint format,
|
|
||||||
guint width, guint height);
|
|
||||||
typedef GstVaapiTextureMap *(*GstVaapiDisplayGetTextureMapFunc) (
|
|
||||||
GstVaapiDisplay * display);
|
|
||||||
|
|
||||||
typedef guintptr (*GstVaapiDisplayGetVisualIdFunc) (GstVaapiDisplay * display,
|
|
||||||
GstVaapiWindow * window);
|
|
||||||
typedef guintptr (*GstVaapiDisplayGetColormapFunc) (GstVaapiDisplay * display,
|
|
||||||
GstVaapiWindow * window);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* GST_VAAPI_DISPLAY_GET_CLASS_TYPE:
|
* GST_VAAPI_DISPLAY_GET_CLASS_TYPE:
|
||||||
* @display: a #GstVaapiDisplay
|
* @display: a #GstVaapiDisplay
|
||||||
|
@ -182,9 +153,9 @@ struct _GstVaapiDisplayPrivate
|
||||||
struct _GstVaapiDisplay
|
struct _GstVaapiDisplay
|
||||||
{
|
{
|
||||||
/*< private >*/
|
/*< private >*/
|
||||||
GstVaapiMiniObject parent_instance;
|
GstObject parent_instance;
|
||||||
|
|
||||||
GstVaapiDisplayPrivate priv;
|
GstVaapiDisplayPrivate *priv;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -202,34 +173,36 @@ struct _GstVaapiDisplay
|
||||||
* @get_colormap: (optional) virtual function to retrieve the window colormap
|
* @get_colormap: (optional) virtual function to retrieve the window colormap
|
||||||
* @create_window: (optional) virtual function to create a window
|
* @create_window: (optional) virtual function to create a window
|
||||||
* @create_texture: (optional) virtual function to create a texture
|
* @create_texture: (optional) virtual function to create a texture
|
||||||
|
* @get_texture_map: (optional) virtual function to get texture map
|
||||||
*
|
*
|
||||||
* Base class for VA displays.
|
* Base class for VA displays.
|
||||||
*/
|
*/
|
||||||
struct _GstVaapiDisplayClass
|
struct _GstVaapiDisplayClass
|
||||||
{
|
{
|
||||||
/*< private >*/
|
/*< private >*/
|
||||||
GstVaapiMiniObjectClass parent_class;
|
GstObjectClass parent_class;
|
||||||
|
|
||||||
/*< protected >*/
|
/*< protected >*/
|
||||||
guint display_type;
|
guint display_type;
|
||||||
|
|
||||||
/*< public >*/
|
/*< public >*/
|
||||||
GstVaapiDisplayInitFunc init;
|
void (*init) (GstVaapiDisplay * display);
|
||||||
GstVaapiDisplayBindFunc bind_display;
|
gboolean (*bind_display) (GstVaapiDisplay * display, gpointer native_dpy);
|
||||||
GstVaapiDisplayOpenFunc open_display;
|
gboolean (*open_display) (GstVaapiDisplay * display, const gchar * name);
|
||||||
GstVaapiDisplayCloseFunc close_display;
|
void (*close_display) (GstVaapiDisplay * display);
|
||||||
GstVaapiDisplayLockFunc lock;
|
void (*lock) (GstVaapiDisplay * display);
|
||||||
GstVaapiDisplayUnlockFunc unlock;
|
void (*unlock) (GstVaapiDisplay * display);
|
||||||
GstVaapiDisplaySyncFunc sync;
|
void (*sync) (GstVaapiDisplay * display);
|
||||||
GstVaapiDisplayFlushFunc flush;
|
void (*flush) (GstVaapiDisplay * display);
|
||||||
GstVaapiDisplayGetInfoFunc get_display;
|
gboolean (*get_display) (GstVaapiDisplay * display, GstVaapiDisplayInfo * info);
|
||||||
GstVaapiDisplayGetSizeFunc get_size;
|
void (*get_size) (GstVaapiDisplay * display, guint * pwidth, guint * pheight);
|
||||||
GstVaapiDisplayGetSizeMFunc get_size_mm;
|
void (*get_size_mm) (GstVaapiDisplay * display, guint * pwidth, guint * pheight);
|
||||||
GstVaapiDisplayGetVisualIdFunc get_visual_id;
|
guintptr (*get_visual_id) (GstVaapiDisplay * display, GstVaapiWindow * window);
|
||||||
GstVaapiDisplayGetColormapFunc get_colormap;
|
guintptr (*get_colormap) (GstVaapiDisplay * display, GstVaapiWindow * window);
|
||||||
GstVaapiDisplayCreateWindowFunc create_window;
|
GstVaapiWindow *(*create_window) (GstVaapiDisplay * display, GstVaapiID id, guint width, guint height);
|
||||||
GstVaapiDisplayCreateTextureFunc create_texture;
|
GstVaapiTexture *(*create_texture) (GstVaapiDisplay * display, GstVaapiID id, guint target, guint format,
|
||||||
GstVaapiDisplayGetTextureMapFunc get_texture_map;
|
guint width, guint height);
|
||||||
|
GstVaapiTextureMap *(*get_texture_map) (GstVaapiDisplay * display);
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Initialization types */
|
/* Initialization types */
|
||||||
|
@ -240,36 +213,32 @@ enum _GstVaapiDisplayInitType
|
||||||
GST_VAAPI_DISPLAY_INIT_FROM_VA_DISPLAY
|
GST_VAAPI_DISPLAY_INIT_FROM_VA_DISPLAY
|
||||||
};
|
};
|
||||||
|
|
||||||
void
|
|
||||||
gst_vaapi_display_class_init (GstVaapiDisplayClass * klass);
|
|
||||||
|
|
||||||
GstVaapiDisplay *
|
GstVaapiDisplay *
|
||||||
gst_vaapi_display_new (const GstVaapiDisplayClass * klass,
|
gst_vaapi_display_new (GstVaapiDisplay * display,
|
||||||
GstVaapiDisplayInitType init_type, gpointer init_value);
|
GstVaapiDisplayInitType init_type, gpointer init_value);
|
||||||
|
|
||||||
/* Inline reference counting for core libgstvaapi library */
|
/* Inline reference counting for core libgstvaapi library */
|
||||||
#ifdef IN_LIBGSTVAAPI_CORE
|
#ifdef IN_LIBGSTVAAPI_CORE
|
||||||
#define gst_vaapi_display_ref_internal(display) \
|
#define gst_vaapi_display_ref_internal(display) \
|
||||||
((gpointer)gst_vaapi_mini_object_ref(GST_VAAPI_MINI_OBJECT(display)))
|
((gpointer) gst_object_ref (GST_OBJECT (display)))
|
||||||
|
|
||||||
#define gst_vaapi_display_unref_internal(display) \
|
#define gst_vaapi_display_unref_internal(display) \
|
||||||
gst_vaapi_mini_object_unref(GST_VAAPI_MINI_OBJECT(display))
|
gst_object_unref (GST_OBJECT (display))
|
||||||
|
|
||||||
#define gst_vaapi_display_replace_internal(old_display_ptr, new_display) \
|
#define gst_vaapi_display_replace_internal(old_display_ptr, new_display) \
|
||||||
gst_vaapi_mini_object_replace((GstVaapiMiniObject **)(old_display_ptr), \
|
gst_object_replace ((GstObject **)(old_display_ptr), GST_OBJECT (new_display))
|
||||||
GST_VAAPI_MINI_OBJECT(new_display))
|
|
||||||
|
|
||||||
#undef gst_vaapi_display_ref
|
#undef gst_vaapi_display_ref
|
||||||
#define gst_vaapi_display_ref(display) \
|
#define gst_vaapi_display_ref(display) \
|
||||||
gst_vaapi_display_ref_internal((display))
|
gst_vaapi_display_ref_internal ((display))
|
||||||
|
|
||||||
#undef gst_vaapi_display_unref
|
#undef gst_vaapi_display_unref
|
||||||
#define gst_vaapi_display_unref(display) \
|
#define gst_vaapi_display_unref(display) \
|
||||||
gst_vaapi_display_unref_internal((display))
|
gst_vaapi_display_unref_internal ((display))
|
||||||
|
|
||||||
#undef gst_vaapi_display_replace
|
#undef gst_vaapi_display_replace
|
||||||
#define gst_vaapi_display_replace(old_display_ptr, new_display) \
|
#define gst_vaapi_display_replace(old_display_ptr, new_display) \
|
||||||
gst_vaapi_display_replace_internal((old_display_ptr), (new_display))
|
gst_vaapi_display_replace_internal ((old_display_ptr), (new_display))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
|
@ -33,9 +33,15 @@
|
||||||
#include "gstvaapidisplay_wayland_priv.h"
|
#include "gstvaapidisplay_wayland_priv.h"
|
||||||
#include "gstvaapiwindow_wayland.h"
|
#include "gstvaapiwindow_wayland.h"
|
||||||
|
|
||||||
#define DEBUG 1
|
#define DEBUG_VAAPI_DISPLAY 1
|
||||||
#include "gstvaapidebug.h"
|
#include "gstvaapidebug.h"
|
||||||
|
|
||||||
|
#define _do_init \
|
||||||
|
G_ADD_PRIVATE (GstVaapiDisplayWayland);
|
||||||
|
|
||||||
|
G_DEFINE_TYPE_WITH_CODE (GstVaapiDisplayWayland, gst_vaapi_display_wayland,
|
||||||
|
GST_TYPE_VAAPI_DISPLAY, _do_init);
|
||||||
|
|
||||||
static const guint g_display_types = 1U << GST_VAAPI_DISPLAY_TYPE_WAYLAND;
|
static const guint g_display_types = 1U << GST_VAAPI_DISPLAY_TYPE_WAYLAND;
|
||||||
|
|
||||||
static inline const gchar *
|
static inline const gchar *
|
||||||
|
@ -342,26 +348,22 @@ gst_vaapi_display_wayland_create_window (GstVaapiDisplay * display,
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gst_vaapi_display_wayland_init (GstVaapiDisplay * display)
|
gst_vaapi_display_wayland_init (GstVaapiDisplayWayland * display)
|
||||||
{
|
{
|
||||||
GstVaapiDisplayWaylandPrivate *const priv =
|
GstVaapiDisplayWaylandPrivate *const priv =
|
||||||
GST_VAAPI_DISPLAY_WAYLAND_GET_PRIVATE (display);
|
gst_vaapi_display_wayland_get_instance_private (display);
|
||||||
|
|
||||||
|
display->priv = priv;
|
||||||
priv->event_fd = -1;
|
priv->event_fd = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gst_vaapi_display_wayland_class_init (GstVaapiDisplayWaylandClass * klass)
|
gst_vaapi_display_wayland_class_init (GstVaapiDisplayWaylandClass * klass)
|
||||||
{
|
{
|
||||||
GstVaapiMiniObjectClass *const object_class =
|
|
||||||
GST_VAAPI_MINI_OBJECT_CLASS (klass);
|
|
||||||
GstVaapiDisplayClass *const dpy_class = GST_VAAPI_DISPLAY_CLASS (klass);
|
GstVaapiDisplayClass *const dpy_class = GST_VAAPI_DISPLAY_CLASS (klass);
|
||||||
|
|
||||||
gst_vaapi_display_class_init (&klass->parent_class);
|
|
||||||
|
|
||||||
object_class->size = sizeof (GstVaapiDisplayWayland);
|
|
||||||
dpy_class->display_type = GST_VAAPI_DISPLAY_TYPE_WAYLAND;
|
dpy_class->display_type = GST_VAAPI_DISPLAY_TYPE_WAYLAND;
|
||||||
dpy_class->init = gst_vaapi_display_wayland_init;
|
|
||||||
dpy_class->bind_display = gst_vaapi_display_wayland_bind_display;
|
dpy_class->bind_display = gst_vaapi_display_wayland_bind_display;
|
||||||
dpy_class->open_display = gst_vaapi_display_wayland_open_display;
|
dpy_class->open_display = gst_vaapi_display_wayland_open_display;
|
||||||
dpy_class->close_display = gst_vaapi_display_wayland_close_display;
|
dpy_class->close_display = gst_vaapi_display_wayland_close_display;
|
||||||
|
@ -371,19 +373,6 @@ gst_vaapi_display_wayland_class_init (GstVaapiDisplayWaylandClass * klass)
|
||||||
dpy_class->create_window = gst_vaapi_display_wayland_create_window;
|
dpy_class->create_window = gst_vaapi_display_wayland_create_window;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline const GstVaapiDisplayClass *
|
|
||||||
gst_vaapi_display_wayland_class (void)
|
|
||||||
{
|
|
||||||
static GstVaapiDisplayWaylandClass g_class;
|
|
||||||
static gsize g_class_init = FALSE;
|
|
||||||
|
|
||||||
if (g_once_init_enter (&g_class_init)) {
|
|
||||||
gst_vaapi_display_wayland_class_init (&g_class);
|
|
||||||
g_once_init_leave (&g_class_init, TRUE);
|
|
||||||
}
|
|
||||||
return GST_VAAPI_DISPLAY_CLASS (&g_class);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gst_vaapi_display_wayland_new:
|
* gst_vaapi_display_wayland_new:
|
||||||
* @display_name: the Wayland display name
|
* @display_name: the Wayland display name
|
||||||
|
@ -397,8 +386,9 @@ gst_vaapi_display_wayland_class (void)
|
||||||
GstVaapiDisplay *
|
GstVaapiDisplay *
|
||||||
gst_vaapi_display_wayland_new (const gchar * display_name)
|
gst_vaapi_display_wayland_new (const gchar * display_name)
|
||||||
{
|
{
|
||||||
return gst_vaapi_display_new (gst_vaapi_display_wayland_class (),
|
return gst_vaapi_display_new (g_object_new (GST_TYPE_VAAPI_DISPLAY_WAYLAND,
|
||||||
GST_VAAPI_DISPLAY_INIT_FROM_DISPLAY_NAME, (gpointer) display_name);
|
NULL), GST_VAAPI_DISPLAY_INIT_FROM_DISPLAY_NAME,
|
||||||
|
(gpointer) display_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -417,8 +407,8 @@ gst_vaapi_display_wayland_new_with_display (struct wl_display * wl_display)
|
||||||
{
|
{
|
||||||
g_return_val_if_fail (wl_display, NULL);
|
g_return_val_if_fail (wl_display, NULL);
|
||||||
|
|
||||||
return gst_vaapi_display_new (gst_vaapi_display_wayland_class (),
|
return gst_vaapi_display_new (g_object_new (GST_TYPE_VAAPI_DISPLAY_WAYLAND,
|
||||||
GST_VAAPI_DISPLAY_INIT_FROM_NATIVE_DISPLAY, wl_display);
|
NULL), GST_VAAPI_DISPLAY_INIT_FROM_NATIVE_DISPLAY, wl_display);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -29,8 +29,9 @@
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
|
#define GST_TYPE_VAAPI_DISPLAY_WAYLAND (gst_vaapi_display_wayland_get_type ())
|
||||||
#define GST_VAAPI_DISPLAY_WAYLAND(obj) \
|
#define GST_VAAPI_DISPLAY_WAYLAND(obj) \
|
||||||
((GstVaapiDisplayWayland *)(obj))
|
(G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_VAAPI_DISPLAY_WAYLAND, GstVaapiDisplayWayland))
|
||||||
|
|
||||||
typedef struct _GstVaapiDisplayWayland GstVaapiDisplayWayland;
|
typedef struct _GstVaapiDisplayWayland GstVaapiDisplayWayland;
|
||||||
|
|
||||||
|
@ -43,6 +44,9 @@ gst_vaapi_display_wayland_new_with_display (struct wl_display * wl_display);
|
||||||
struct wl_display *
|
struct wl_display *
|
||||||
gst_vaapi_display_wayland_get_display (GstVaapiDisplayWayland * display);
|
gst_vaapi_display_wayland_get_display (GstVaapiDisplayWayland * display);
|
||||||
|
|
||||||
|
GType
|
||||||
|
gst_vaapi_display_wayland_get_type (void) G_GNUC_CONST;
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
#endif /* GST_VAAPI_DISPLAY_WAYLAND_H */
|
#endif /* GST_VAAPI_DISPLAY_WAYLAND_H */
|
||||||
|
|
|
@ -30,14 +30,16 @@
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
#define GST_VAAPI_IS_DISPLAY_WAYLAND(display) \
|
#define GST_VAAPI_IS_DISPLAY_WAYLAND(display) \
|
||||||
((display) != NULL && \
|
(G_TYPE_CHECK_INSTANCE_TYPE ((display), GST_TYPE_VAAPI_DISPLAY_WAYLAND))
|
||||||
GST_VAAPI_DISPLAY_VADISPLAY_TYPE (display) == GST_VAAPI_DISPLAY_TYPE_WAYLAND)
|
|
||||||
|
|
||||||
#define GST_VAAPI_DISPLAY_WAYLAND_CAST(display) \
|
#define GST_VAAPI_DISPLAY_WAYLAND_CAST(display) \
|
||||||
((GstVaapiDisplayWayland *)(display))
|
((GstVaapiDisplayWayland *)(display))
|
||||||
|
|
||||||
#define GST_VAAPI_DISPLAY_WAYLAND_GET_PRIVATE(display) \
|
#define GST_VAAPI_DISPLAY_WAYLAND_GET_PRIVATE(display) \
|
||||||
(&GST_VAAPI_DISPLAY_WAYLAND_CAST(display)->priv)
|
(GST_VAAPI_DISPLAY_WAYLAND_CAST(display)->priv)
|
||||||
|
|
||||||
|
#define GST_VAAPI_DISPLAY_WAYLAND_GET_CLASS(obj) \
|
||||||
|
(G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_VAAPI_DISPLAY_WAYLAND, GstVaapiDisplayWaylandClass))
|
||||||
|
|
||||||
typedef struct _GstVaapiDisplayWaylandPrivate GstVaapiDisplayWaylandPrivate;
|
typedef struct _GstVaapiDisplayWaylandPrivate GstVaapiDisplayWaylandPrivate;
|
||||||
typedef struct _GstVaapiDisplayWaylandClass GstVaapiDisplayWaylandClass;
|
typedef struct _GstVaapiDisplayWaylandClass GstVaapiDisplayWaylandClass;
|
||||||
|
@ -79,7 +81,7 @@ struct _GstVaapiDisplayWayland
|
||||||
/*< private >*/
|
/*< private >*/
|
||||||
GstVaapiDisplay parent_instance;
|
GstVaapiDisplay parent_instance;
|
||||||
|
|
||||||
GstVaapiDisplayWaylandPrivate priv;
|
GstVaapiDisplayWaylandPrivate *priv;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -43,9 +43,15 @@
|
||||||
# include <X11/extensions/Xrender.h>
|
# include <X11/extensions/Xrender.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define DEBUG 1
|
#define DEBUG_VAAPI_DISPLAY 1
|
||||||
#include "gstvaapidebug.h"
|
#include "gstvaapidebug.h"
|
||||||
|
|
||||||
|
#define _do_init \
|
||||||
|
G_ADD_PRIVATE (GstVaapiDisplayX11);
|
||||||
|
|
||||||
|
G_DEFINE_TYPE_WITH_CODE (GstVaapiDisplayX11, gst_vaapi_display_x11,
|
||||||
|
GST_TYPE_VAAPI_DISPLAY, _do_init);
|
||||||
|
|
||||||
static const guint g_display_types = 1U << GST_VAAPI_DISPLAY_TYPE_X11;
|
static const guint g_display_types = 1U << GST_VAAPI_DISPLAY_TYPE_X11;
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
|
@ -114,7 +120,7 @@ get_default_display_name (void)
|
||||||
static const gchar *
|
static const gchar *
|
||||||
get_display_name (GstVaapiDisplayX11 * display)
|
get_display_name (GstVaapiDisplayX11 * display)
|
||||||
{
|
{
|
||||||
GstVaapiDisplayX11Private *const priv = &display->priv;
|
GstVaapiDisplayX11Private *const priv = display->priv;
|
||||||
const gchar *display_name = priv->display_name;
|
const gchar *display_name = priv->display_name;
|
||||||
|
|
||||||
if (!display_name || *display_name == '\0')
|
if (!display_name || *display_name == '\0')
|
||||||
|
@ -126,7 +132,7 @@ get_display_name (GstVaapiDisplayX11 * display)
|
||||||
static gboolean
|
static gboolean
|
||||||
set_display_name (GstVaapiDisplayX11 * display, const gchar * display_name)
|
set_display_name (GstVaapiDisplayX11 * display, const gchar * display_name)
|
||||||
{
|
{
|
||||||
GstVaapiDisplayX11Private *const priv = &display->priv;
|
GstVaapiDisplayX11Private *const priv = display->priv;
|
||||||
|
|
||||||
g_free (priv->display_name);
|
g_free (priv->display_name);
|
||||||
|
|
||||||
|
@ -143,7 +149,7 @@ set_display_name (GstVaapiDisplayX11 * display, const gchar * display_name)
|
||||||
static void
|
static void
|
||||||
set_synchronous (GstVaapiDisplayX11 * display, gboolean synchronous)
|
set_synchronous (GstVaapiDisplayX11 * display, gboolean synchronous)
|
||||||
{
|
{
|
||||||
GstVaapiDisplayX11Private *const priv = &display->priv;
|
GstVaapiDisplayX11Private *const priv = display->priv;
|
||||||
|
|
||||||
if (priv->synchronous != synchronous) {
|
if (priv->synchronous != synchronous) {
|
||||||
priv->synchronous = synchronous;
|
priv->synchronous = synchronous;
|
||||||
|
@ -159,8 +165,7 @@ set_synchronous (GstVaapiDisplayX11 * display, gboolean synchronous)
|
||||||
static void
|
static void
|
||||||
check_extensions (GstVaapiDisplayX11 * display)
|
check_extensions (GstVaapiDisplayX11 * display)
|
||||||
{
|
{
|
||||||
GstVaapiDisplayX11Private *const priv =
|
GstVaapiDisplayX11Private *const priv = display->priv;
|
||||||
GST_VAAPI_DISPLAY_X11_PRIVATE (display);
|
|
||||||
int evt_base, err_base;
|
int evt_base, err_base;
|
||||||
|
|
||||||
#ifdef HAVE_XRANDR
|
#ifdef HAVE_XRANDR
|
||||||
|
@ -178,7 +183,7 @@ gst_vaapi_display_x11_bind_display (GstVaapiDisplay * base_display,
|
||||||
gpointer native_display)
|
gpointer native_display)
|
||||||
{
|
{
|
||||||
GstVaapiDisplayX11 *const display = GST_VAAPI_DISPLAY_X11_CAST (base_display);
|
GstVaapiDisplayX11 *const display = GST_VAAPI_DISPLAY_X11_CAST (base_display);
|
||||||
GstVaapiDisplayX11Private *const priv = &display->priv;
|
GstVaapiDisplayX11Private *const priv = display->priv;
|
||||||
|
|
||||||
priv->x11_display = native_display;
|
priv->x11_display = native_display;
|
||||||
priv->x11_screen = DefaultScreen (native_display);
|
priv->x11_screen = DefaultScreen (native_display);
|
||||||
|
@ -196,7 +201,8 @@ gst_vaapi_display_x11_open_display (GstVaapiDisplay * base_display,
|
||||||
const gchar * name)
|
const gchar * name)
|
||||||
{
|
{
|
||||||
GstVaapiDisplayX11 *const display = GST_VAAPI_DISPLAY_X11_CAST (base_display);
|
GstVaapiDisplayX11 *const display = GST_VAAPI_DISPLAY_X11_CAST (base_display);
|
||||||
GstVaapiDisplayX11Private *const priv = &display->priv;
|
GstVaapiDisplayX11Private *const priv = display->priv;
|
||||||
|
|
||||||
GstVaapiDisplayCache *const cache = GST_VAAPI_DISPLAY_CACHE (display);
|
GstVaapiDisplayCache *const cache = GST_VAAPI_DISPLAY_CACHE (display);
|
||||||
const GstVaapiDisplayInfo *info;
|
const GstVaapiDisplayInfo *info;
|
||||||
|
|
||||||
|
@ -381,13 +387,8 @@ gst_vaapi_display_x11_create_window (GstVaapiDisplay * display, GstVaapiID id,
|
||||||
void
|
void
|
||||||
gst_vaapi_display_x11_class_init (GstVaapiDisplayX11Class * klass)
|
gst_vaapi_display_x11_class_init (GstVaapiDisplayX11Class * klass)
|
||||||
{
|
{
|
||||||
GstVaapiMiniObjectClass *const object_class =
|
|
||||||
GST_VAAPI_MINI_OBJECT_CLASS (klass);
|
|
||||||
GstVaapiDisplayClass *const dpy_class = GST_VAAPI_DISPLAY_CLASS (klass);
|
GstVaapiDisplayClass *const dpy_class = GST_VAAPI_DISPLAY_CLASS (klass);
|
||||||
|
|
||||||
gst_vaapi_display_class_init (&klass->parent_class);
|
|
||||||
|
|
||||||
object_class->size = sizeof (GstVaapiDisplayX11);
|
|
||||||
dpy_class->display_type = GST_VAAPI_DISPLAY_TYPE_X11;
|
dpy_class->display_type = GST_VAAPI_DISPLAY_TYPE_X11;
|
||||||
dpy_class->bind_display = gst_vaapi_display_x11_bind_display;
|
dpy_class->bind_display = gst_vaapi_display_x11_bind_display;
|
||||||
dpy_class->open_display = gst_vaapi_display_x11_open_display;
|
dpy_class->open_display = gst_vaapi_display_x11_open_display;
|
||||||
|
@ -400,17 +401,13 @@ gst_vaapi_display_x11_class_init (GstVaapiDisplayX11Class * klass)
|
||||||
dpy_class->create_window = gst_vaapi_display_x11_create_window;
|
dpy_class->create_window = gst_vaapi_display_x11_create_window;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline const GstVaapiDisplayClass *
|
static void
|
||||||
gst_vaapi_display_x11_class (void)
|
gst_vaapi_display_x11_init (GstVaapiDisplayX11 * display)
|
||||||
{
|
{
|
||||||
static GstVaapiDisplayX11Class g_class;
|
GstVaapiDisplayX11Private *const priv =
|
||||||
static gsize g_class_init = FALSE;
|
gst_vaapi_display_x11_get_instance_private (display);
|
||||||
|
|
||||||
if (g_once_init_enter (&g_class_init)) {
|
display->priv = priv;
|
||||||
gst_vaapi_display_x11_class_init (&g_class);
|
|
||||||
g_once_init_leave (&g_class_init, TRUE);
|
|
||||||
}
|
|
||||||
return GST_VAAPI_DISPLAY_CLASS (&g_class);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -426,7 +423,7 @@ gst_vaapi_display_x11_class (void)
|
||||||
GstVaapiDisplay *
|
GstVaapiDisplay *
|
||||||
gst_vaapi_display_x11_new (const gchar * display_name)
|
gst_vaapi_display_x11_new (const gchar * display_name)
|
||||||
{
|
{
|
||||||
return gst_vaapi_display_new (gst_vaapi_display_x11_class (),
|
return gst_vaapi_display_new (g_object_new (GST_TYPE_VAAPI_DISPLAY_X11, NULL),
|
||||||
GST_VAAPI_DISPLAY_INIT_FROM_DISPLAY_NAME, (gpointer) display_name);
|
GST_VAAPI_DISPLAY_INIT_FROM_DISPLAY_NAME, (gpointer) display_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -446,7 +443,7 @@ gst_vaapi_display_x11_new_with_display (Display * x11_display)
|
||||||
{
|
{
|
||||||
g_return_val_if_fail (x11_display, NULL);
|
g_return_val_if_fail (x11_display, NULL);
|
||||||
|
|
||||||
return gst_vaapi_display_new (gst_vaapi_display_x11_class (),
|
return gst_vaapi_display_new (g_object_new (GST_TYPE_VAAPI_DISPLAY_X11, NULL),
|
||||||
GST_VAAPI_DISPLAY_INIT_FROM_NATIVE_DISPLAY, x11_display);
|
GST_VAAPI_DISPLAY_INIT_FROM_NATIVE_DISPLAY, x11_display);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -30,8 +30,9 @@
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
|
#define GST_TYPE_VAAPI_DISPLAY_X11 (gst_vaapi_display_x11_get_type ())
|
||||||
#define GST_VAAPI_DISPLAY_X11(obj) \
|
#define GST_VAAPI_DISPLAY_X11(obj) \
|
||||||
((GstVaapiDisplayX11 *)(obj))
|
(G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_VAAPI_DISPLAY_X11, GstVaapiDisplayX11))
|
||||||
|
|
||||||
typedef struct _GstVaapiDisplayX11 GstVaapiDisplayX11;
|
typedef struct _GstVaapiDisplayX11 GstVaapiDisplayX11;
|
||||||
|
|
||||||
|
@ -51,6 +52,9 @@ void
|
||||||
gst_vaapi_display_x11_set_synchronous (GstVaapiDisplayX11 * display,
|
gst_vaapi_display_x11_set_synchronous (GstVaapiDisplayX11 * display,
|
||||||
gboolean synchronous);
|
gboolean synchronous);
|
||||||
|
|
||||||
|
GType
|
||||||
|
gst_vaapi_display_x11_get_type (void) G_GNUC_CONST;
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
#endif /* GST_VAAPI_DISPLAY_X11_H */
|
#endif /* GST_VAAPI_DISPLAY_X11_H */
|
||||||
|
|
|
@ -32,14 +32,16 @@
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
#define GST_VAAPI_IS_DISPLAY_X11(display) \
|
#define GST_VAAPI_IS_DISPLAY_X11(display) \
|
||||||
((display) != NULL && \
|
(G_TYPE_CHECK_INSTANCE_TYPE ((display), GST_TYPE_VAAPI_DISPLAY_X11))
|
||||||
GST_VAAPI_DISPLAY_VADISPLAY_TYPE (display) == GST_VAAPI_DISPLAY_TYPE_X11)
|
|
||||||
|
|
||||||
#define GST_VAAPI_DISPLAY_X11_CAST(display) \
|
#define GST_VAAPI_DISPLAY_X11_CAST(display) \
|
||||||
((GstVaapiDisplayX11 *)(display))
|
((GstVaapiDisplayX11 *)(display))
|
||||||
|
|
||||||
#define GST_VAAPI_DISPLAY_X11_PRIVATE(display) \
|
#define GST_VAAPI_DISPLAY_X11_PRIVATE(display) \
|
||||||
(&GST_VAAPI_DISPLAY_X11_CAST(display)->priv)
|
(GST_VAAPI_DISPLAY_X11_CAST (display)->priv)
|
||||||
|
|
||||||
|
#define GST_VAAPI_DISPLAY_X11_GET_CLASS(obj) \
|
||||||
|
(G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_VAAPI_DISPLAY_X11, GstVaapiDisplayX11Class))
|
||||||
|
|
||||||
typedef struct _GstVaapiDisplayX11Private GstVaapiDisplayX11Private;
|
typedef struct _GstVaapiDisplayX11Private GstVaapiDisplayX11Private;
|
||||||
typedef struct _GstVaapiDisplayX11Class GstVaapiDisplayX11Class;
|
typedef struct _GstVaapiDisplayX11Class GstVaapiDisplayX11Class;
|
||||||
|
@ -97,13 +99,13 @@ struct _GstVaapiDisplayX11
|
||||||
/*< private >*/
|
/*< private >*/
|
||||||
GstVaapiDisplay parent_instance;
|
GstVaapiDisplay parent_instance;
|
||||||
|
|
||||||
GstVaapiDisplayX11Private priv;
|
GstVaapiDisplayX11Private *priv;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* GstVaapiDisplayX11Class:
|
* GstVaapiDisplayX11Class:
|
||||||
*
|
*
|
||||||
* VA/X11 display wrapper clas.
|
* VA/X11 display wrapper class.
|
||||||
*/
|
*/
|
||||||
struct _GstVaapiDisplayX11Class
|
struct _GstVaapiDisplayX11Class
|
||||||
{
|
{
|
||||||
|
@ -111,9 +113,6 @@ struct _GstVaapiDisplayX11Class
|
||||||
GstVaapiDisplayClass parent_class;
|
GstVaapiDisplayClass parent_class;
|
||||||
};
|
};
|
||||||
|
|
||||||
void
|
|
||||||
gst_vaapi_display_x11_class_init (GstVaapiDisplayX11Class * klass);
|
|
||||||
|
|
||||||
G_GNUC_INTERNAL
|
G_GNUC_INTERNAL
|
||||||
GstVideoFormat
|
GstVideoFormat
|
||||||
gst_vaapi_display_x11_get_pixmap_format (GstVaapiDisplayX11 * display,
|
gst_vaapi_display_x11_get_pixmap_format (GstVaapiDisplayX11 * display,
|
||||||
|
|
|
@ -37,6 +37,9 @@
|
||||||
#include "gstvaapisurface_egl.h"
|
#include "gstvaapisurface_egl.h"
|
||||||
#include "gstvaapifilter.h"
|
#include "gstvaapifilter.h"
|
||||||
|
|
||||||
|
#define DEBUG 1
|
||||||
|
#include "gstvaapidebug.h"
|
||||||
|
|
||||||
#define GST_VAAPI_TEXTURE_EGL(texture) \
|
#define GST_VAAPI_TEXTURE_EGL(texture) \
|
||||||
((GstVaapiTextureEGL *) (texture))
|
((GstVaapiTextureEGL *) (texture))
|
||||||
|
|
||||||
|
|
|
@ -23,6 +23,9 @@
|
||||||
#include "sysdeps.h"
|
#include "sysdeps.h"
|
||||||
#include "gstvaapiutils_egl.h"
|
#include "gstvaapiutils_egl.h"
|
||||||
|
|
||||||
|
#define DEBUG 1
|
||||||
|
#include "gstvaapidebug.h"
|
||||||
|
|
||||||
typedef struct egl_message_s EglMessage;
|
typedef struct egl_message_s EglMessage;
|
||||||
struct egl_message_s
|
struct egl_message_s
|
||||||
{
|
{
|
||||||
|
|
|
@ -29,9 +29,6 @@
|
||||||
#include "egl_compat.h"
|
#include "egl_compat.h"
|
||||||
#include "gstvaapiminiobject.h"
|
#include "gstvaapiminiobject.h"
|
||||||
|
|
||||||
GST_DEBUG_CATEGORY_EXTERN (gst_debug_vaapidisplay_egl);
|
|
||||||
#define GST_CAT_DEFAULT gst_debug_vaapidisplay_egl
|
|
||||||
|
|
||||||
typedef union egl_handle_s EglHandle;
|
typedef union egl_handle_s EglHandle;
|
||||||
typedef struct egl_object_s EglObject;
|
typedef struct egl_object_s EglObject;
|
||||||
typedef struct egl_object_class_s EglObjectClass;
|
typedef struct egl_object_class_s EglObjectClass;
|
||||||
|
|
|
@ -31,17 +31,6 @@
|
||||||
|
|
||||||
GST_DEBUG_CATEGORY_STATIC (GST_CAT_CONTEXT);
|
GST_DEBUG_CATEGORY_STATIC (GST_CAT_CONTEXT);
|
||||||
|
|
||||||
#define GST_VAAPI_TYPE_DISPLAY \
|
|
||||||
gst_vaapi_display_get_type ()
|
|
||||||
|
|
||||||
/* *INDENT-OFF* */
|
|
||||||
static GType gst_vaapi_display_get_type (void) G_GNUC_CONST;
|
|
||||||
/* *INDENT-ON* */
|
|
||||||
|
|
||||||
G_DEFINE_BOXED_TYPE (GstVaapiDisplay, gst_vaapi_display,
|
|
||||||
(GBoxedCopyFunc) gst_vaapi_display_ref,
|
|
||||||
(GBoxedFreeFunc) gst_vaapi_display_unref);
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_init_context_debug (void)
|
_init_context_debug (void)
|
||||||
{
|
{
|
||||||
|
@ -65,7 +54,7 @@ gst_vaapi_video_context_set_display (GstContext * context,
|
||||||
|
|
||||||
structure = gst_context_writable_structure (context);
|
structure = gst_context_writable_structure (context);
|
||||||
gst_structure_set (structure, GST_VAAPI_DISPLAY_CONTEXT_TYPE_NAME,
|
gst_structure_set (structure, GST_VAAPI_DISPLAY_CONTEXT_TYPE_NAME,
|
||||||
GST_VAAPI_TYPE_DISPLAY, display, NULL);
|
GST_TYPE_VAAPI_DISPLAY, display, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
GstContext *
|
GstContext *
|
||||||
|
@ -91,7 +80,7 @@ gst_vaapi_video_context_get_display (GstContext * context,
|
||||||
|
|
||||||
structure = gst_context_get_structure (context);
|
structure = gst_context_get_structure (context);
|
||||||
return gst_structure_get (structure, GST_VAAPI_DISPLAY_CONTEXT_TYPE_NAME,
|
return gst_structure_get (structure, GST_VAAPI_DISPLAY_CONTEXT_TYPE_NAME,
|
||||||
GST_VAAPI_TYPE_DISPLAY, display_ptr, NULL);
|
GST_TYPE_VAAPI_DISPLAY, display_ptr, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
|
|
Loading…
Reference in a new issue