summaryrefslogtreecommitdiffstats
path: root/sys/glsink/glimagesink.h
diff options
context:
space:
mode:
authorGernot Ziegler <gz@lysator.liu.se>2004-08-09 20:14:51 +0000
committerDavid Schleef <ds@schleef.org>2004-08-09 20:14:51 +0000
commitfa1b6c756ad85636d2400c34479a7a4ac8f47e8e (patch)
treec0a9174fc025e34f3ac87ce3530ca362db402dae /sys/glsink/glimagesink.h
parentabc2e390832daa94ba20f717495581fb22a1916a (diff)
downloadgst-plugins-bad-fa1b6c756ad85636d2400c34479a7a4ac8f47e8e.tar.gz
gst-plugins-bad-fa1b6c756ad85636d2400c34479a7a4ac8f47e8e.tar.bz2
gst-plugins-bad-fa1b6c756ad85636d2400c34479a7a4ac8f47e8e.zip
GL sink plugin. (Bug #147302)
Original commit message from CVS: Patch from Gernot Ziegler <gz@lysator.liu.se> rewriting the GL sink plugin. (Bug #147302) * configure.ac: Test for OpenGL * sys/Makefile.am: Use test for OpenGL * sys/glsink/Makefile.am: * sys/glsink/glimagesink.c: rewrite * sys/glsink/glimagesink.h: rewrite
Diffstat (limited to 'sys/glsink/glimagesink.h')
-rw-r--r--sys/glsink/glimagesink.h137
1 files changed, 137 insertions, 0 deletions
diff --git a/sys/glsink/glimagesink.h b/sys/glsink/glimagesink.h
new file mode 100644
index 00000000..15e866de
--- /dev/null
+++ b/sys/glsink/glimagesink.h
@@ -0,0 +1,137 @@
+/* GStreamer
+ * Copyright (C) <2003> Julien Moutte <julien@moutte.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_GLIMAGESINK_H__
+#define __GST_GLIMAGESINK_H__
+
+#include <gst/video/videosink.h>
+
+#include <X11/Xlib.h>
+#include <GL/glx.h>
+#include <GL/gl.h>
+#include <GL/glu.h>
+
+#include <string.h>
+#include <math.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_GLIMAGESINK \
+ (gst_glimagesink_get_type())
+#define GST_GLIMAGESINK(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_GLIMAGESINK, GstGLImageSink))
+#define GST_GLIMAGESINK_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_GLIMAGESINK, GstGLImageSink))
+#define GST_IS_GLIMAGESINK(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_GLIMAGESINK))
+#define GST_IS_GLIMAGESINK_CLASS(obj) \
+ (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_GLIMAGESINK))
+
+typedef struct _GstXContext GstXContext;
+typedef struct _GstGLWindow GstGLWindow;
+typedef struct _GstGLImage GstGLImage;
+
+typedef struct _GstGLImageSink GstGLImageSink;
+typedef struct _GstGLImageSinkClass GstGLImageSinkClass;
+
+/* Global X Context stuff */
+struct _GstXContext {
+ Display *disp;
+
+ Screen *screen;
+ gint screen_num;
+
+ Visual *visual;
+ XVisualInfo *visualinfo;
+
+ Window root;
+ GLXContext glx;
+
+ gulong white, black;
+
+ gint depth;
+ gint bpp;
+ gint endianness;
+
+ gboolean use_xshm;
+
+ GstCaps *caps;
+};
+
+/* XWindow stuff */
+struct _GstGLWindow {
+ XSetWindowAttributes attr;
+ Window win;
+ gint width, height;
+ gboolean internal;
+};
+
+/* XImage stuff */
+struct _GstGLImage {
+ /* Reference to the ximagesink we belong to */
+ GstGLImageSink *glimagesink;
+
+ GLuint texid;
+
+ char *data;
+ gint width, height, size;
+};
+
+struct _GstGLImageSink {
+ /* Our element stuff */
+ GstVideoSink videosink;
+
+ char *display_name;
+
+ GstXContext *xcontext;
+ GstGLWindow *window;
+ GstGLImage *glimage;
+ GstGLImage *cur_image;
+
+ gdouble framerate;
+ GMutex *x_lock;
+
+ gint pixel_width, pixel_height; /* Unused */
+
+ GstClockTime time;
+
+ GMutex *pool_lock;
+ GSList *image_pool;
+
+ guint pointer_x, pointer_y;
+ gboolean pointer_moved;
+ gboolean pointer_button[5];
+
+ gboolean synchronous;
+ gboolean signal_handoffs;
+};
+
+struct _GstGLImageSinkClass {
+ GstVideoSinkClass parent_class;
+
+ /* signals */
+ void (*handoff) (GstElement *element, GstBuffer *buf, GstPad *pad);
+ void (*bufferalloc) (GstElement *element, GstBuffer *buf, GstPad *pad);
+};
+
+GType gst_glimagesink_get_type(void);
+
+G_END_DECLS
+
+#endif /* __GST_GLIMAGESINK_H__ */