summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Waters <ystreet00@gmail.com>2014-06-12 12:49:42 +1000
committerMatthew Waters <ystreet00@gmail.com>2014-06-12 12:49:42 +1000
commitd7f8cc9a78eff6e0e2cd6b5f050e4e630b913d5b (patch)
tree271c9b42ed2f9f51b55d957ce84f0c29a60f6c0f
parent9e662b8229ea0ac6ae069ce259d6c603008502f9 (diff)
downloadgstreamer-plugins-bad-d7f8cc9a78eff6e0e2cd6b5f050e4e630b913d5b.tar.gz
glfilterapp: remove the reshape/draw properties
The reshape property was never used. Replace the draw property with a signal. Based on patch by Mathieu Duponchelle <mathieu.duponchelle@epitech.eu> https://bugzilla.gnome.org/show_bug.cgi?id=704507
-rw-r--r--ext/gl/gstglfilterapp.c75
-rw-r--r--ext/gl/gstglfilterapp.h1
-rw-r--r--gst-libs/gst/gl/gstglutils.h9
-rw-r--r--tests/examples/gl/generic/recordgraphic/main.cpp17
4 files changed, 32 insertions, 70 deletions
diff --git a/ext/gl/gstglfilterapp.c b/ext/gl/gstglfilterapp.c
index ba60a46bf..89b88415e 100644
--- a/ext/gl/gstglfilterapp.c
+++ b/ext/gl/gstglfilterapp.c
@@ -47,12 +47,13 @@ GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT);
enum
{
- PROP_0,
- PROP_CLIENT_RESHAPE_CALLBACK,
- PROP_CLIENT_DRAW_CALLBACK,
- PROP_CLIENT_DATA
+ SIGNAL_0,
+ CLIENT_DRAW_SIGNAL,
+ LAST_SIGNAL
};
+static guint gst_gl_filter_app_signals[LAST_SIGNAL] = { 0 };
+
#define DEBUG_INIT \
GST_DEBUG_CATEGORY_INIT (gst_gl_filter_app_debug, "glfilterapp", 0, "glfilterapp element");
@@ -88,21 +89,20 @@ gst_gl_filter_app_class_init (GstGLFilterAppClass * klass)
GST_GL_FILTER_CLASS (klass)->filter_texture =
gst_gl_filter_app_filter_texture;
- g_object_class_install_property (gobject_class, PROP_CLIENT_RESHAPE_CALLBACK,
- g_param_spec_pointer ("client-reshape-callback",
- "Client reshape callback",
- "Define a custom reshape callback in a client code",
- G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS));
-
- g_object_class_install_property (gobject_class, PROP_CLIENT_DRAW_CALLBACK,
- g_param_spec_pointer ("client-draw-callback", "Client draw callback",
- "Define a custom draw callback in a client code",
- G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS));
-
- g_object_class_install_property (gobject_class, PROP_CLIENT_DATA,
- g_param_spec_pointer ("client-data", "Client data",
- "Pass data to the draw and reshape callbacks",
- G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS));
+ /**
+ * GstGLFilterApp::client-draw:
+ * @object: the #GstGLImageSink
+ * @texture: the #guint id of the texture.
+ * @width: the #guint width of the texture.
+ * @height: the #guint height of the texture.
+ *
+ * Will be emitted before to draw the texture. The client should
+ * redraw the surface/contents with the @texture, @width and @height.
+ */
+ gst_gl_filter_app_signals[CLIENT_DRAW_SIGNAL] =
+ g_signal_new ("client-draw", G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_generic,
+ G_TYPE_NONE, 3, G_TYPE_UINT, G_TYPE_UINT, G_TYPE_UINT);
gst_element_class_set_metadata (element_class,
"OpenGL application filter", "Filter/Effect",
@@ -113,33 +113,13 @@ gst_gl_filter_app_class_init (GstGLFilterAppClass * klass)
static void
gst_gl_filter_app_init (GstGLFilterApp * filter)
{
- filter->clientReshapeCallback = NULL;
- filter->clientDrawCallback = NULL;
- filter->client_data = NULL;
}
static void
gst_gl_filter_app_set_property (GObject * object, guint prop_id,
const GValue * value, GParamSpec * pspec)
{
- GstGLFilterApp *filter = GST_GL_FILTER_APP (object);
-
switch (prop_id) {
- case PROP_CLIENT_RESHAPE_CALLBACK:
- {
- filter->clientReshapeCallback = g_value_get_pointer (value);
- break;
- }
- case PROP_CLIENT_DRAW_CALLBACK:
- {
- filter->clientDrawCallback = g_value_get_pointer (value);
- break;
- }
- case PROP_CLIENT_DATA:
- {
- filter->client_data = g_value_get_pointer (value);
- break;
- }
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -150,8 +130,6 @@ static void
gst_gl_filter_app_get_property (GObject * object, guint prop_id,
GValue * value, GParamSpec * pspec)
{
- //GstGLFilterApp* filter = GST_GL_FILTER_APP (object);
-
switch (prop_id) {
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -168,6 +146,15 @@ gst_gl_filter_app_set_caps (GstGLFilter * filter, GstCaps * incaps,
return TRUE;
}
+static void
+_emit_draw_signal (guint tex, gint width, gint height, gpointer data)
+{
+ GstGLFilter *filter = data;
+
+ g_signal_emit (filter, gst_gl_filter_app_signals[CLIENT_DRAW_SIGNAL], 0,
+ tex, width, height);
+}
+
static gboolean
gst_gl_filter_app_filter_texture (GstGLFilter * filter, guint in_tex,
guint out_tex)
@@ -179,15 +166,13 @@ gst_gl_filter_app_filter_texture (GstGLFilter * filter, guint in_tex,
gst_gl_context_use_fbo (filter->context,
GST_VIDEO_INFO_WIDTH (&filter->out_info),
GST_VIDEO_INFO_HEIGHT (&filter->out_info),
- filter->fbo, filter->depthbuffer, out_tex,
- app_filter->clientDrawCallback,
+ filter->fbo, filter->depthbuffer, out_tex, (GLCB) _emit_draw_signal,
GST_VIDEO_INFO_WIDTH (&filter->in_info),
GST_VIDEO_INFO_HEIGHT (&filter->in_info),
in_tex, 45,
(gfloat) GST_VIDEO_INFO_WIDTH (&filter->out_info) /
(gfloat) GST_VIDEO_INFO_HEIGHT (&filter->out_info),
- 0.1, 100, GST_GL_DISPLAY_PROJECTION_PERSPECTIVE,
- app_filter->client_data);
+ 0.1, 100, GST_GL_DISPLAY_PROJECTION_PERSPECTIVE, filter);
}
//default
else {
diff --git a/ext/gl/gstglfilterapp.h b/ext/gl/gstglfilterapp.h
index 9874d9d5b..2d423c58e 100644
--- a/ext/gl/gstglfilterapp.h
+++ b/ext/gl/gstglfilterapp.h
@@ -38,7 +38,6 @@ struct _GstGLFilterApp
{
GstGLFilter filter;
- CRCB clientReshapeCallback;
GLCB clientDrawCallback;
gpointer client_data;
};
diff --git a/gst-libs/gst/gl/gstglutils.h b/gst-libs/gst/gl/gstglutils.h
index 299b53b25..13c39eacf 100644
--- a/gst-libs/gst/gl/gstglutils.h
+++ b/gst-libs/gst/gl/gstglutils.h
@@ -40,15 +40,6 @@ typedef enum
} GstGLDisplayProjection;
/**
- * CRCB:
- * @width: new width
- * @height: new height:
- * @data: user data
- *
- * client reshape callback
- */
-typedef void (*CRCB) (GLuint width, GLuint height, gpointer data);
-/**
* CDCB:
* @texture: texture to draw
* @width: new width
diff --git a/tests/examples/gl/generic/recordgraphic/main.cpp b/tests/examples/gl/generic/recordgraphic/main.cpp
index 7771ac2b4..dbfffc1d8 100644
--- a/tests/examples/gl/generic/recordgraphic/main.cpp
+++ b/tests/examples/gl/generic/recordgraphic/main.cpp
@@ -65,19 +65,8 @@ static gboolean bus_call (GstBus *bus, GstMessage *msg, gpointer data)
return TRUE;
}
-//client reshape callback
-static void reshapeCallback (GLuint width, GLuint height)
-{
- glViewport(0, 0, width, height);
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- gluPerspective(45, (gfloat)width/(gfloat)height, 0.1, 100);
- glMatrixMode(GL_MODELVIEW);
-}
-
-
//client draw callback
-static gboolean drawCallback (GLuint width, GLuint height, GLuint texture, gpointer data)
+static gboolean drawCallback (void *filter, GLuint width, GLuint height, GLuint texture, gpointer data)
{
static GLfloat xrot = 0;
static GLfloat yrot = 0;
@@ -215,9 +204,7 @@ gint main (gint argc, gchar *argv[])
/* configure elements */
g_object_set(G_OBJECT(videosrc), "num-buffers", 400, NULL);
- g_object_set(G_OBJECT(glfilterapp), "client-reshape-callback", reshapeCallback, NULL);
- g_object_set(G_OBJECT(glfilterapp), "client-draw-callback", drawCallback, NULL);
- g_object_set(G_OBJECT(glfilterapp), "client-data", NULL, NULL);
+ g_signal_connect(G_OBJECT(glfilterapp), "client-draw", G_CALLBACK (drawCallback), NULL);
g_object_set(G_OBJECT(filesink), "location", "record.avi", NULL);
/* add elements */