summaryrefslogtreecommitdiff
path: root/gst-libs
diff options
context:
space:
mode:
authorNicolas Dufresne <nicolas.dufresne@collabora.co.uk>2011-11-04 19:47:09 -0400
committerGwenole Beauchesne <gwenole.beauchesne@intel.com>2011-12-08 15:13:35 +0100
commitc5b18c27d53f3adaf5c81d829a180ef2a9451a0b (patch)
tree88f9d42403ec4c3554b17cd5870d2fe4085a3b7c /gst-libs
parenta6717334f9a3030ddde8f890726a4b2926c20878 (diff)
videobuffer: add GLX buffer support.
Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
Diffstat (limited to 'gst-libs')
-rw-r--r--gst-libs/gst/vaapi/Makefile.am5
-rw-r--r--gst-libs/gst/vaapi/gstvaapivideobuffer.c34
-rw-r--r--gst-libs/gst/vaapi/gstvaapivideobuffer_glx.c170
-rw-r--r--gst-libs/gst/vaapi/gstvaapivideobuffer_glx.h88
-rw-r--r--gst-libs/gst/vaapi/gstvaapivideobuffer_priv.h45
-rw-r--r--gst-libs/gst/vaapi/gstvaapivideoconverter_glx.c139
-rw-r--r--gst-libs/gst/vaapi/gstvaapivideoconverter_glx.h75
7 files changed, 556 insertions, 0 deletions
diff --git a/gst-libs/gst/vaapi/Makefile.am b/gst-libs/gst/vaapi/Makefile.am
index 957e3abb..94995ec8 100644
--- a/gst-libs/gst/vaapi/Makefile.am
+++ b/gst-libs/gst/vaapi/Makefile.am
@@ -76,6 +76,7 @@ libgstvaapi_source_priv_h = \
gstvaapidisplay_priv.h \
gstvaapiobject_priv.h \
gstvaapiutils.h \
+ gstvaapivideobuffer_priv.h \
$(libgst_vaapi_ffmpeg_source_priv_h) \
$(NULL)
@@ -104,12 +105,16 @@ libgstvaapi_glx_source_c = \
gstvaapiutils.c \
gstvaapiutils_glx.c \
gstvaapiutils_x11.c \
+ gstvaapivideobuffer_glx.c \
+ gstvaapivideoconverter_glx.c \
gstvaapiwindow_glx.c \
$(NULL)
libgstvaapi_glx_source_h = \
gstvaapidisplay_glx.h \
gstvaapitexture.h \
+ gstvaapivideobuffer_glx.h \
+ gstvaapivideoconverter_glx.h \
gstvaapiwindow_glx.h \
$(NULL)
diff --git a/gst-libs/gst/vaapi/gstvaapivideobuffer.c b/gst-libs/gst/vaapi/gstvaapivideobuffer.c
index 40b7b5eb..6814663e 100644
--- a/gst-libs/gst/vaapi/gstvaapivideobuffer.c
+++ b/gst-libs/gst/vaapi/gstvaapivideobuffer.c
@@ -26,6 +26,7 @@
#include "config.h"
#include "gstvaapivideobuffer.h"
+#include "gstvaapivideobuffer_priv.h"
#include "gstvaapiimagepool.h"
#include "gstvaapisurfacepool.h"
#include "gstvaapiobject_priv.h"
@@ -562,3 +563,36 @@ gst_vaapi_video_buffer_set_surface_proxy(
buffer->priv->proxy = g_object_ref(proxy);
}
}
+
+/**
+ * gst_vaapi_video_buffer_set_display:
+ * @buffer: a #GstVaapiVideoBuffer
+ * @display a #GstVaapiDisplay
+ *
+ * For subclass only, don't use.
+ */
+void
+gst_vaapi_video_buffer_set_display(
+ GstVaapiVideoBuffer *buffer,
+ GstVaapiDisplay *display
+)
+{
+ set_display(buffer, display);
+}
+
+/**
+ * gst_vaapi_video_buffer_set_display:
+ * @buffer: a #GstVaapiVideoBuffer
+ * @other_buffer: a #GstBuffer
+ *
+ * For subclass only, don't use.
+ */
+void
+gst_vaapi_video_buffer_set_buffer(
+ GstVaapiVideoBuffer *buffer,
+ GstBuffer *other_buffer
+)
+{
+ g_return_if_fail (buffer->priv->buffer == NULL);
+ buffer->priv->buffer = gst_buffer_ref (other_buffer);
+}
diff --git a/gst-libs/gst/vaapi/gstvaapivideobuffer_glx.c b/gst-libs/gst/vaapi/gstvaapivideobuffer_glx.c
new file mode 100644
index 00000000..e71da181
--- /dev/null
+++ b/gst-libs/gst/vaapi/gstvaapivideobuffer_glx.c
@@ -0,0 +1,170 @@
+/*
+ * gstvaapivideobuffer_glx.c - Gst VA video buffer
+ *
+ * Copyright (C) 2011 Intel Corporation
+ * Copyright (C) 2011 Collabora Ltd.
+ * Author: Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA
+ */
+
+/**
+ * SECTION:gstvaapivideobufferglx
+ * @short_description: VA video buffer for GStreamer with GLX support
+ */
+
+#include "config.h"
+#include "gstvaapivideobuffer_glx.h"
+#include "gstvaapivideobuffer_priv.h"
+#include "gstvaapivideoconverter_glx.h"
+#include "gstvaapiobject_priv.h"
+#include "gstvaapiimagepool.h"
+#include "gstvaapisurfacepool.h"
+
+#define DEBUG 1
+#include "gstvaapidebug.h"
+
+G_DEFINE_TYPE (GstVaapiVideoBufferGLX, gst_vaapi_video_buffer_glx,
+ GST_VAAPI_TYPE_VIDEO_BUFFER);
+
+static void
+gst_vaapi_video_buffer_glx_class_init(GstVaapiVideoBufferGLXClass * klass)
+{
+ GstSurfaceBufferClass * const surface_class = GST_SURFACE_BUFFER_CLASS (klass);
+ surface_class->create_converter = gst_vaapi_video_converter_glx_new;
+}
+
+static void
+gst_vaapi_video_buffer_glx_init (GstVaapiVideoBufferGLX * buffer)
+{
+}
+
+static inline gpointer
+_gst_vaapi_video_buffer_glx_new (void)
+{
+ return gst_mini_object_new (GST_VAAPI_TYPE_VIDEO_BUFFER_GLX);
+}
+
+/**
+ * gst_vaapi_video_buffer_glx_new:
+ * @display: a #GstVaapiDisplayGLX
+ *
+ * Creates an empty #GstBuffer. The caller is responsible for completing
+ * the initialization of the buffer with the gst_vaapi_video_buffer_set_*()
+ * functions.
+ *
+ * Return value: the newly allocated #GstBuffer, or %NULL or error
+ */
+GstBuffer *
+gst_vaapi_video_buffer_glx_new(GstVaapiDisplayGLX * display)
+{
+ GstBuffer *buffer;
+
+ g_return_val_if_fail (GST_VAAPI_IS_DISPLAY_GLX (display), NULL);
+
+ buffer = _gst_vaapi_video_buffer_glx_new ();
+ if (!buffer)
+ return NULL;
+
+ gst_vaapi_video_buffer_set_display (GST_VAAPI_VIDEO_BUFFER (buffer),
+ GST_VAAPI_DISPLAY (display));
+ return buffer;
+}
+
+/**
+ * gst_vaapi_video_buffer_glx_new_from_pool:
+ * @pool: a #GstVaapiVideoPool
+ *
+ * Creates a #GstBuffer with a video object allocated from a @pool.
+ * Only #GstVaapiSurfacePool and #GstVaapiImagePool pools are supported.
+ *
+ * The buffer is destroyed through the last call to gst_buffer_unref()
+ * and the video objects are pushed back to their respective pools.
+ *
+ * Return value: the newly allocated #GstBuffer, or %NULL on error
+ */
+GstBuffer *
+gst_vaapi_video_buffer_glx_new_from_pool (GstVaapiVideoPool * pool)
+{
+ GstVaapiVideoBuffer *buffer;
+ gboolean is_image_pool, is_surface_pool;
+
+ g_return_val_if_fail (GST_VAAPI_IS_VIDEO_POOL (pool), NULL);
+
+ is_image_pool = GST_VAAPI_IS_IMAGE_POOL (pool);
+ is_surface_pool = GST_VAAPI_IS_SURFACE_POOL (pool);
+
+ if (!is_image_pool && !is_surface_pool)
+ return NULL;
+
+ buffer = _gst_vaapi_video_buffer_glx_new ();
+ if (buffer &&
+ ((is_image_pool &&
+ gst_vaapi_video_buffer_set_image_from_pool (buffer, pool)) ||
+ (is_surface_pool &&
+ gst_vaapi_video_buffer_set_surface_from_pool (buffer, pool)))) {
+ gst_vaapi_video_buffer_set_display (buffer,
+ gst_vaapi_video_pool_get_display (pool));
+ return GST_BUFFER (buffer);
+ }
+
+ gst_mini_object_unref (GST_MINI_OBJECT(buffer));
+ return NULL;
+}
+
+/**
+ * gst_vaapi_video_buffer_glx_new_from_buffer:
+ * @buffer: a #GstBuffer
+ *
+ * Creates a #GstBuffer with video objects bound to @buffer video
+ * objects, if any.
+ *
+ * Return value: the newly allocated #GstBuffer, or %NULL on error
+ */
+GstBuffer *
+gst_vaapi_video_buffer_glx_new_from_buffer (GstBuffer * buffer)
+{
+ GstVaapiVideoBuffer *inbuf, *outbuf;
+ GstVaapiImage *image;
+ GstVaapiSurface *surface;
+ GstVaapiSurfaceProxy *proxy;
+
+ if (!GST_VAAPI_IS_VIDEO_BUFFER_GLX (buffer)) {
+ if (!buffer->parent || !GST_VAAPI_IS_VIDEO_BUFFER_GLX (buffer->parent))
+ return NULL;
+ buffer = buffer->parent;
+ }
+ inbuf = GST_VAAPI_VIDEO_BUFFER (buffer);
+
+ outbuf = _gst_vaapi_video_buffer_glx_new ();
+ if (!outbuf)
+ return NULL;
+
+ image = gst_vaapi_video_buffer_get_image (inbuf);
+ surface = gst_vaapi_video_buffer_get_surface (inbuf);
+ proxy =
+ gst_vaapi_video_buffer_get_surface_proxy (inbuf);
+
+ if (image)
+ gst_vaapi_video_buffer_set_image (outbuf, image);
+ if (surface)
+ gst_vaapi_video_buffer_set_surface (outbuf, surface);
+ if (proxy)
+ gst_vaapi_video_buffer_set_surface_proxy (outbuf, proxy);
+
+ gst_vaapi_video_buffer_set_buffer (outbuf, buffer);
+ return GST_BUFFER (outbuf);
+}
diff --git a/gst-libs/gst/vaapi/gstvaapivideobuffer_glx.h b/gst-libs/gst/vaapi/gstvaapivideobuffer_glx.h
new file mode 100644
index 00000000..48bf0841
--- /dev/null
+++ b/gst-libs/gst/vaapi/gstvaapivideobuffer_glx.h
@@ -0,0 +1,88 @@
+/*
+ * gstvaapivideobuffer_glx.h - Gstreamer/VA video buffer
+ *
+ * Copyright (C) 2011 Intel Corporation
+ * Copyright (C) 2011 Collabora Ltd.
+ * Author: Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA
+ */
+
+#ifndef GST_VAAPI_VIDEO_BUFFER_GLX_H
+#define GST_VAAPI_VIDEO_BUFFER_GLX_H
+
+#include <gst/vaapi/gstvaapidisplay_glx.h>
+#include <gst/vaapi/gstvaapivideobuffer.h>
+#include <gst/vaapi/gstvaapivideopool.h>
+#include <gst/video/gstsurfacebuffer.h>
+
+G_BEGIN_DECLS
+
+#define GST_VAAPI_TYPE_VIDEO_BUFFER_GLX \
+ (gst_vaapi_video_buffer_glx_get_type())
+
+#define GST_VAAPI_VIDEO_BUFFER_GLX(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST((obj), \
+ GST_VAAPI_TYPE_VIDEO_BUFFER_GLX, \
+ GstVaapiVideoBufferGLX))
+
+#define GST_VAAPI_VIDEO_BUFFER_GLX_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST((klass), \
+ GST_VAAPI_TYPE_VIDEO_BUFFER_GLX, \
+ GstVaapiVideoBufferGLXClass))
+
+#define GST_VAAPI_IS_VIDEO_BUFFER_GLX(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_VAAPI_TYPE_VIDEO_BUFFER_GLX))
+
+#define GST_VAAPI_IS_VIDEO_BUFFER_GLX_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE((klass), GST_VAAPI_TYPE_VIDEO_BUFFER_GLX))
+
+#define GST_VAAPI_VIDEO_BUFFER_GLX_GET_CLASS(obj) \
+ (G_TYPE_INSTANCE_GET_CLASS((obj), \
+ GST_VAAPI_TYPE_VIDEO_BUFFER_GLX, \
+ GstVaapiVideoBufferGLXClass))
+
+typedef struct _GstVaapiVideoBufferGLX GstVaapiVideoBufferGLX;
+typedef struct _GstVaapiVideoBufferGLXClass GstVaapiVideoBufferGLXClass;
+
+/**
+ * GstVaapiVideoBufferGLX:
+ *
+ * A #GstBuffer holding video objects (#GstVaapiSurface and #GstVaapiImage).
+ */
+struct _GstVaapiVideoBufferGLX {
+ /*< private >*/
+ GstVaapiVideoBuffer parent_instance;
+};
+
+/**
+ * GstVaapiVideoBufferGLXClass:
+ *
+ * A #GstBuffer holding video objects
+ */
+struct _GstVaapiVideoBufferGLXClass {
+ /*< private >*/
+ GstVaapiVideoBufferClass parent_class;
+};
+
+GType gst_vaapi_video_buffer_glx_get_type (void);
+GstBuffer *gst_vaapi_video_buffer_glx_new (GstVaapiDisplayGLX * display);
+GstBuffer *gst_vaapi_video_buffer_glx_new_from_pool (GstVaapiVideoPool * pool);
+GstBuffer *gst_vaapi_video_buffer_glx_new_from_buffer (GstBuffer * buffer);
+
+G_END_DECLS
+
+#endif /* GST_VAAPI_VIDEO_BUFFER_GLX_H */
diff --git a/gst-libs/gst/vaapi/gstvaapivideobuffer_priv.h b/gst-libs/gst/vaapi/gstvaapivideobuffer_priv.h
new file mode 100644
index 00000000..d72ab63f
--- /dev/null
+++ b/gst-libs/gst/vaapi/gstvaapivideobuffer_priv.h
@@ -0,0 +1,45 @@
+/*
+ * gstvaapivideobuffer_priv.h - Gstreamer/VA video buffer (private interface)
+ *
+ * Copyright (C) 2011 Intel Corporation
+ * Copyright (C) 2011 Collabora Ltd.
+ * Author: Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA
+ */
+
+#ifndef GST_VAAPI_VIDEO_BUFFER_PRIV_H
+#define GST_VAAPI_VIDEO_BUFFER_PRIV_H
+
+#include <gst/vaapi/gstvaapivideobuffer.h>
+
+G_BEGIN_DECLS
+
+void
+gst_vaapi_video_buffer_set_display(
+ GstVaapiVideoBuffer *buffer,
+ GstVaapiDisplay *display
+);
+
+void
+gst_vaapi_video_buffer_set_buffer(
+ GstVaapiVideoBuffer *buffer,
+ GstBuffer *other_buffer
+);
+
+G_END_DECLS
+
+#endif /* GST_VAAPI_VIDEO_BUFFER_PRIV_H */
diff --git a/gst-libs/gst/vaapi/gstvaapivideoconverter_glx.c b/gst-libs/gst/vaapi/gstvaapivideoconverter_glx.c
new file mode 100644
index 00000000..515d57ea
--- /dev/null
+++ b/gst-libs/gst/vaapi/gstvaapivideoconverter_glx.c
@@ -0,0 +1,139 @@
+/*
+ * gstvaapivideoconverter_glx.c - Gst VA video converter
+ *
+ * Copyright (C) 2011 Intel Corporation
+ * Copyright (C) 2011 Collabora Ltd.
+ * Author: Nicolas Dufresne <nicolas.dufresne@collabora.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA
+ */
+
+#include "config.h"
+#include <string.h>
+#include "gstvaapivideoconverter_glx.h"
+#include "gstvaapivideobuffer.h"
+#include "gstvaapitexture.h"
+
+static void gst_vaapi_video_converter_glx_iface_init (GstSurfaceConverterInterface *iface);
+
+G_DEFINE_TYPE_WITH_CODE (GstVaapiVideoConverterGLX, gst_vaapi_video_converter_glx,
+ G_TYPE_OBJECT,
+ G_IMPLEMENT_INTERFACE (GST_TYPE_SURFACE_CONVERTER,
+ gst_vaapi_video_converter_glx_iface_init));
+
+struct _GstVaapiVideoConverterGLXPrivate {
+ GstVaapiTexture *texture;
+};
+
+static void
+gst_vaapi_video_converter_glx_dispose(GObject *object)
+{
+ GstVaapiVideoConverterGLXPrivate *priv =
+ GST_VAAPI_VIDEO_CONVERTER_GLX (object)->priv;
+
+ if (priv->texture)
+ g_object_unref (priv->texture);
+
+ priv->texture = NULL;
+
+ G_OBJECT_CLASS (gst_vaapi_video_converter_glx_parent_class)->dispose (object);
+}
+
+static void
+gst_vaapi_video_converter_glx_class_init(GstVaapiVideoConverterGLXClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GParamSpec *pspec;
+
+ g_type_class_add_private (klass, sizeof (GstVaapiVideoConverterGLXPrivate));
+ object_class->dispose = gst_vaapi_video_converter_glx_dispose;
+}
+
+static void
+gst_vaapi_video_converter_glx_init(GstVaapiVideoConverterGLX *buffer)
+{
+ buffer->priv = G_TYPE_INSTANCE_GET_PRIVATE(buffer,
+ GST_VAAPI_TYPE_VIDEO_CONVERTER,
+ GstVaapiVideoConverterGLXPrivate);
+}
+
+static void
+gst_vaapi_video_converter_glx_iface_init (GstSurfaceConverterInterface *iface) {
+ iface->upload = gst_vaapi_video_converter_glx_upload;
+}
+
+/**
+ * gst_vaapi_video_converter_glx_new:
+ * @
+ *
+ * Creates an empty #GstBuffer. The caller is responsible for completing
+ * the initialization of the buffer with the gst_vaapi_video_converter_glx_set_*()
+ * functions.
+ *
+ * Return value: the newly allocated #GstBuffer, or %NULL or error
+ */
+GstSurfaceConverter *
+gst_vaapi_video_converter_glx_new(GstSurfaceBuffer *surface, const gchar *type,
+ GValue *dest)
+{
+ GstVaapiVideoBuffer *buffer = GST_VAAPI_VIDEO_BUFFER (surface);
+ GstVaapiDisplay *display = gst_vaapi_video_buffer_get_display (buffer);
+ GstVaapiTexture *texture;
+ GstVaapiVideoConverterGLX *converter = NULL;
+
+ /* We only support Open GL texture conversion */
+ if (strcmp(type, "opengl") || !G_VALUE_HOLDS_UINT (dest))
+ return NULL;
+
+ /* FIXME Should we assume target and format ? */
+ texture = gst_vaapi_texture_new_with_texture (display,
+ g_value_get_uint (dest),
+ GL_TEXTURE_2D,
+ GL_BGRA);
+
+ if (texture) {
+ converter = g_object_new (GST_VAAPI_TYPE_VIDEO_CONVERTER, NULL);
+ converter->priv->texture = texture;
+ }
+
+ return GST_SURFACE_CONVERTER (converter);
+}
+
+gboolean
+gst_vaapi_video_converter_glx_upload (GstSurfaceConverter *converter,
+ GstSurfaceBuffer *buffer)
+{
+ GstVaapiVideoConverterGLXPrivate *priv =
+ GST_VAAPI_VIDEO_CONVERTER_GLX (converter)->priv;
+ GstVaapiSurface *surface = gst_vaapi_video_buffer_get_surface (
+ GST_VAAPI_VIDEO_BUFFER (buffer));
+ GstVaapiDisplay *new_dpy, *old_dpy;
+
+ new_dpy = gst_vaapi_object_get_display (GST_VAAPI_OBJECT (surface));
+ old_dpy = gst_vaapi_object_get_display (GST_VAAPI_OBJECT (priv->texture));
+
+ if (old_dpy != new_dpy) {
+ guint texture = gst_vaapi_texture_get_id (priv->texture);
+ g_object_unref (priv->texture);
+ priv->texture = gst_vaapi_texture_new_with_texture (new_dpy,
+ texture,
+ GL_TEXTURE_2D,
+ GL_BGRA);
+ }
+
+ return gst_vaapi_texture_put_surface (priv->texture, surface,
+ GST_VAAPI_PICTURE_STRUCTURE_FRAME);
+}
diff --git a/gst-libs/gst/vaapi/gstvaapivideoconverter_glx.h b/gst-libs/gst/vaapi/gstvaapivideoconverter_glx.h
new file mode 100644
index 00000000..012bb137
--- /dev/null
+++ b/gst-libs/gst/vaapi/gstvaapivideoconverter_glx.h
@@ -0,0 +1,75 @@
+/*
+ * gstvaapivideoconverter_glx.h - Gstreamer/VA video converter
+ *
+ * Copyright (C) 2011 Intel Corporation
+ * Copyright (C) 2011 Collabora Ltd.
+ * Author: Nicolas Dufresne <nicolas.dufresne@collabora.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA
+ */
+
+#ifndef GST_VAAPI_VIDEO_CONVERTER_GLX_H
+#define GST_VAAPI_VIDEO_CONVERTER_GLX_H
+
+#include <gst/video/gstsurfaceconverter.h>
+
+G_BEGIN_DECLS
+
+#define GST_VAAPI_TYPE_VIDEO_CONVERTER (gst_vaapi_video_converter_glx_get_type ())
+#define GST_VAAPI_VIDEO_CONVERTER_GLX(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_VAAPI_TYPE_VIDEO_CONVERTER, GstVaapiVideoConverterGLX))
+#define GST_VAAPI_VIDEO_CONVERTER_GLX_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_VAAPI_TYPE_VIDEO_CONVERTER, GstVaapiVideoConverterGLXClass))
+#define GST_VAAPI_IS_VIDEO_CONVERTER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_VAAPI_TYPE_VIDEO_CONVERTER))
+#define GST_VAAPI_IS_VIDEO_CONVERTER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_VAAPI_TYPE_VIDEO_CONVERTER))
+#define GST_VAAPI_VIDEO_CONVERTER_GLX_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_VAAPI_TYPE_VIDEO_CONVERTER, GstVaapiVideoConverterGLXClass))
+
+typedef struct _GstVaapiVideoConverterGLX GstVaapiVideoConverterGLX;
+typedef struct _GstVaapiVideoConverterGLXPrivate GstVaapiVideoConverterGLXPrivate;
+typedef struct _GstVaapiVideoConverterGLXClass GstVaapiVideoConverterGLXClass;
+
+/**
+ * GstVaapiVideoConverterGLX:
+ *
+ * Converter to transform VA buffers into GL textures.
+ */
+struct _GstVaapiVideoConverterGLX {
+ /*< private >*/
+ GObject parent_instance;
+
+ GstVaapiVideoConverterGLXPrivate *priv;
+};
+
+/**
+ * GstVaapiVideoConverterGLXClass:
+ *
+ * Converter to transform VA buffers into GL textures.
+ */
+struct _GstVaapiVideoConverterGLXClass {
+ /*< private >*/
+ GObjectClass parent_class;
+};
+
+GType gst_vaapi_video_converter_glx_get_type (void);
+
+GstSurfaceConverter *gst_vaapi_video_converter_glx_new (GstSurfaceBuffer *buffer,
+ const gchar *type,
+ GValue *dest);
+
+gboolean gst_vaapi_video_converter_glx_upload (GstSurfaceConverter *self,
+ GstSurfaceBuffer *buffer);
+
+G_END_DECLS
+
+#endif /* GST_VAAPI_VIDEO_CONVERTER_GLX_H */