summaryrefslogtreecommitdiff
path: root/tests/examples
diff options
context:
space:
mode:
authorJulien Isorce <julien.isorce@gmail.com>2009-04-18 16:08:23 +0200
committerMatthew Waters <ystreet00@gmail.com>2014-03-15 18:36:34 +0100
commit80e114860eefec85007fb0662d161cb7dc4a96b8 (patch)
tree852748748adc8a4d98ad7f5faad99bad5dd994fd /tests/examples
parentf735c06c4a18bdd05dcda8512ca10ad57a40c770 (diff)
downloadgstreamer-plugins-bad-80e114860eefec85007fb0662d161cb7dc4a96b8.tar.gz
[332/906] just gst-indent and C90 on cluttershare example
Diffstat (limited to 'tests/examples')
-rw-r--r--tests/examples/clutter/cluttershare.c224
1 files changed, 128 insertions, 96 deletions
diff --git a/tests/examples/clutter/cluttershare.c b/tests/examples/clutter/cluttershare.c
index 8862d7729..3c33ffb4b 100644
--- a/tests/examples/clutter/cluttershare.c
+++ b/tests/examples/clutter/cluttershare.c
@@ -27,6 +27,9 @@
#include <GL/gl.h>
#include <clutter/clutter.h>
+#ifndef WIN32
+#include <clutter/x11/clutter-x11.h>
+#endif
#include <gst/gst.h>
/* This example shows how to use textures that come from a
@@ -35,41 +38,46 @@
/* hack */
typedef struct _GstGLBuffer GstGLBuffer;
-struct _GstGLBuffer {
- GstBuffer buffer;
+struct _GstGLBuffer
+{
+ GstBuffer buffer;
- GObject *obj;
+ GObject *obj;
- gint width;
- gint height;
- GLuint texture;
+ gint width;
+ gint height;
+ GLuint texture;
};
/* clutter scene */
-ClutterActor*
+ClutterActor *
setup_stage (ClutterStage * stage)
{
+ ClutterTimeline *timeline = NULL;
+ ClutterEffectTemplate *effect_template = NULL;
+ ClutterActor *texture_actor = NULL;
+ ClutterColor rect_color = { 125, 50, 200, 255 };
+ ClutterActor *actorRect = NULL;
+
/* timeline */
- ClutterTimeline *timeline = clutter_timeline_new (120, 50);
+ timeline = clutter_timeline_new (120, 50);
clutter_timeline_set_loop (timeline, TRUE);
clutter_timeline_start (timeline);
/* effect template */
- ClutterEffectTemplate *effect_template = clutter_effect_template_new (timeline, CLUTTER_ALPHA_SINE_INC);
+ effect_template =
+ clutter_effect_template_new (timeline, CLUTTER_ALPHA_SINE_INC);
/* texture actor */
- ClutterActor *texture_actor = clutter_texture_new ();
+ texture_actor = clutter_texture_new ();
clutter_container_add_actor (CLUTTER_CONTAINER (stage), texture_actor);
clutter_actor_set_position (texture_actor, 300, 170);
clutter_actor_set_scale (texture_actor, 0.8, 0.8);
clutter_effect_rotate (effect_template, texture_actor,
- CLUTTER_Z_AXIS, 180.0,
- 50, 50, 0,
- CLUTTER_ROTATE_CW,
- NULL, NULL);
+ CLUTTER_Z_AXIS, 180.0, 50, 50, 0, CLUTTER_ROTATE_CW, NULL, NULL);
clutter_actor_show (texture_actor);
g_object_set_data (G_OBJECT (texture_actor), "stage", stage);
@@ -78,16 +86,12 @@ setup_stage (ClutterStage * stage)
/* rectangle actor */
- ClutterColor rect_color = { 125, 50, 200, 255 };
- ClutterActor* actorRect = clutter_rectangle_new_with_color (&rect_color);
+ actorRect = clutter_rectangle_new_with_color (&rect_color);
clutter_container_add_actor (CLUTTER_CONTAINER (stage), actorRect);
clutter_actor_set_size (actorRect, 50, 50);
clutter_actor_set_position (actorRect, 300, 300);
clutter_effect_rotate (effect_template, actorRect,
- CLUTTER_Z_AXIS, 180.0,
- 25, 25, 0,
- CLUTTER_ROTATE_CW,
- NULL, NULL);
+ CLUTTER_Z_AXIS, 180.0, 25, 25, 0, CLUTTER_ROTATE_CW, NULL, NULL);
clutter_actor_show (actorRect);
return texture_actor;
@@ -97,58 +101,82 @@ setup_stage (ClutterStage * stage)
gboolean
update_texture_actor (gpointer data)
{
- GstGLBuffer *gst_gl_buf = (GstGLBuffer *) data;
-
- /* Create a cogl texture from the gst gl texture */
- glEnable (GL_TEXTURE_2D);
- glBindTexture (GL_TEXTURE_2D, gst_gl_buf->texture);
- CoglHandle cogl_texture = cogl_texture_new_from_foreign (gst_gl_buf->texture,
- GL_TEXTURE_2D, gst_gl_buf->width, gst_gl_buf->height, 0, 0, COGL_PIXEL_FORMAT_RGBA_8888);
- cogl_texture_set_filters (cogl_texture, GL_LINEAR, GL_LINEAR);
- glDisable (GL_TEXTURE_2D);
+ GstGLBuffer *gst_gl_buf = (GstGLBuffer *) data;
+ CoglHandle cogl_texture = 0;
+ ClutterTexture *texture_actor = NULL;
+ ClutterActor *stage = NULL;
+
+ /* Create a cogl texture from the gst gl texture */
+ glEnable (GL_TEXTURE_2D);
+ glBindTexture (GL_TEXTURE_2D, gst_gl_buf->texture);
+ cogl_texture = cogl_texture_new_from_foreign (gst_gl_buf->texture,
+ GL_TEXTURE_2D, gst_gl_buf->width, gst_gl_buf->height, 0, 0,
+ COGL_PIXEL_FORMAT_RGBA_8888);
+ cogl_texture_set_filters (cogl_texture, GL_LINEAR, GL_LINEAR);
+ glDisable (GL_TEXTURE_2D);
/* Previous cogl texture is replaced and so its ref counter discreases to 0.
* According to the source code, glDeleteTexture is not called when the previous
* ref counter of the previous cogl texture is reaching 0 because is_foreign is TRUE */
- ClutterTexture *texture_actor = g_type_get_qdata (G_TYPE_FROM_INSTANCE (gst_gl_buf), g_quark_from_string ("texture_actor"));
- clutter_texture_set_cogl_texture (CLUTTER_TEXTURE (texture_actor), cogl_texture);
- cogl_texture_unref (cogl_texture);
-
- /* Keep a ref on the current gst_gl_buffer associated to the texture_actor.
- * The old gst_gl_buffer is unref */
- g_object_set_data_full (G_OBJECT (texture_actor), "gst_gl_buffer",
- gst_gl_buf, (GDestroyNotify) gst_mini_object_unref);
-
- /* we can now show the clutter scene if not yet visible */
- ClutterActor *stage = g_object_get_data (G_OBJECT (texture_actor), "stage");
- if (!CLUTTER_ACTOR_IS_VISIBLE (stage))
- clutter_actor_show_all (stage);
-
- return FALSE;
+ texture_actor =
+ g_type_get_qdata (G_TYPE_FROM_INSTANCE (gst_gl_buf),
+ g_quark_from_string ("texture_actor"));
+ clutter_texture_set_cogl_texture (CLUTTER_TEXTURE (texture_actor),
+ cogl_texture);
+ cogl_texture_unref (cogl_texture);
+
+ /* Keep a ref on the current gst_gl_buffer associated to the texture_actor.
+ * The old gst_gl_buffer is unref */
+ g_object_set_data_full (G_OBJECT (texture_actor), "gst_gl_buffer",
+ gst_gl_buf, (GDestroyNotify) gst_mini_object_unref);
+
+ /* we can now show the clutter scene if not yet visible */
+ stage = g_object_get_data (G_OBJECT (texture_actor), "stage");
+ if (!CLUTTER_ACTOR_IS_VISIBLE (stage))
+ clutter_actor_show_all (stage);
+
+ return FALSE;
}
/* fakesink handoff callback */
void
-on_gst_buffer (GstElement* element, GstBuffer* buf, GstPad* pad, ClutterActor* texture_actor)
+on_gst_buffer (GstElement * element, GstBuffer * buf, GstPad * pad,
+ ClutterActor * texture_actor)
{
- /* increase ref because our pipeline and clutter scene have not a same framerate */
- gst_buffer_ref (buf);
-
- /* Just to avoid a global variable of texture_actor
- * Texture_actor is not null because callback connection is set after the
- * texture_actor was being setted up */
- g_assert (texture_actor);
- g_type_set_qdata (G_TYPE_FROM_INSTANCE (buf), g_quark_from_string ("texture_actor"), texture_actor);
-
- /* Here we are in the pipeline thread. It means that this thread may be
- * not the same as the clutter thread
- * make sure that the texture actor is updated in the clutter thread */
- clutter_threads_add_idle (update_texture_actor, buf);
+ /* increase ref because our pipeline and clutter scene have not a same framerate */
+ gst_buffer_ref (buf);
+
+ /* Just to avoid a global variable of texture_actor
+ * Texture_actor is not null because callback connection is set after the
+ * texture_actor was being setted up */
+ g_assert (texture_actor);
+ g_type_set_qdata (G_TYPE_FROM_INSTANCE (buf),
+ g_quark_from_string ("texture_actor"), texture_actor);
+
+ /* Here we are in the pipeline thread. It means that this thread may be
+ * not the same as the clutter thread
+ * make sure that the texture actor is updated in the clutter thread */
+ clutter_threads_add_idle (update_texture_actor, buf);
}
int
main (int argc, char *argv[])
{
+ GLenum err = 0;
+#ifdef WIN32
+ HGLRC clutter_gl_context = 0;
+ HDC clutter_dc = 0;
+#else
+ Display *clutter_display = NULL;
+ Window clutter_win = 0;
+ GLXContext clutter_gl_context = NULL;
+#endif
+ GstPipeline *pipeline = NULL;
+ GstElement *glupload = NULL;
+ GstState state = 0;
+ ClutterActor *stage = NULL;
+ ClutterActor *clutter_texture = NULL;
+ GstElement *fakesink = NULL;
/* init clutter then gstreamer */
@@ -157,69 +185,73 @@ main (int argc, char *argv[])
/* init glew */
- GLenum err = glewInit ();
+ err = glewInit ();
if (err != GLEW_OK)
g_debug ("failed to init GLEW: %s", glewGetErrorString (err));
- /* retrieve and turn off clutter opengl context */
+ /* retrieve and turn off clutter opengl context */
+
+ stage = clutter_stage_get_default ();
#ifdef WIN32
- HGLRC clutter_gl_context = wglGetCurrentContext ();
- HDC clutter_dc = wglGetCurrentDC ();
- wglMakeCurrent (0, 0);
+ clutter_gl_context = wglGetCurrentContext ();
+ clutter_dc = wglGetCurrentDC ();
+ wglMakeCurrent (0, 0);
#else
- Display *clutter_display = clutter_x11_get_default_display ();
- Window clutter_win = clutter_x11_get_stage_window (CLUTTER_STAGE (stage));
- GLXContext clutter_gl_context = glXGetCurrentContext ();
- glXMakeCurrent (clutter_display, None, 0);
+ clutter_display = clutter_x11_get_default_display ();
+ clutter_win = clutter_x11_get_stage_window (CLUTTER_STAGE (stage));
+ clutter_gl_context = glXGetCurrentContext ();
+ glXMakeCurrent (clutter_display, None, 0);
#endif
- /* setup gstreamer pipeline */
+ /* setup gstreamer pipeline */
- GstPipeline *pipeline =
+ pipeline =
GST_PIPELINE (gst_parse_launch
("videotestsrc ! video/x-raw-rgb, bpp=32, depth=32, width=320, height=240, framerate=(fraction)30/1 ! "
- "glupload ! fakesink sync=1", NULL));
+ "glupload ! fakesink sync=1", NULL));
+
+ /* clutter_gl_context is an external OpenGL context with which gst-plugins-gl want to share textures */
- /* clutter_gl_context is an external OpenGL context with which gst-plugins-gl want to share textures */
- GstElement *glupload = gst_bin_get_by_name (GST_BIN (pipeline), "glupload0");
- g_object_set (G_OBJECT (glupload), "external-opengl-context", (guint64) GPOINTER_TO_UINT (clutter_gl_context), NULL);
- g_object_unref (glupload);
+ glupload = gst_bin_get_by_name (GST_BIN (pipeline), "glupload0");
+ g_object_set (G_OBJECT (glupload), "external-opengl-context",
+ (guint64) GPOINTER_TO_UINT (clutter_gl_context), NULL);
+ g_object_unref (glupload);
/* play pipeline */
- gst_element_set_state (GST_ELEMENT (pipeline), GST_STATE_PLAYING);
- GstState state = GST_STATE_PLAYING;
- if (gst_element_get_state (GST_ELEMENT (pipeline), &state, NULL, GST_CLOCK_TIME_NONE) != GST_STATE_CHANGE_SUCCESS)
- {
- g_debug ("failed to play pipeline\n");
- return -1;
- }
+ gst_element_set_state (GST_ELEMENT (pipeline), GST_STATE_PLAYING);
+ state = GST_STATE_PLAYING;
+ if (gst_element_get_state (GST_ELEMENT (pipeline), &state, NULL,
+ GST_CLOCK_TIME_NONE) != GST_STATE_CHANGE_SUCCESS) {
+ g_debug ("failed to play pipeline\n");
+ return -1;
+ }
- /* turn on back clutter opengl context */
+ /* turn on back clutter opengl context */
#ifdef WIN32
- wglMakeCurrent (clutter_dc, clutter_gl_context);
+ wglMakeCurrent (clutter_dc, clutter_gl_context);
#else
- glXMakeCurrent (clutter_display, clutter_win, clutter_gl_context);
+ glXMakeCurrent (clutter_display, clutter_win, clutter_gl_context);
#endif
- /* clutter stage */
+ /* clutter stage */
- ClutterActor* stage = clutter_stage_get_default ();
- clutter_actor_set_size (stage, 640, 480);
- clutter_actor_set_position (stage, 0, 0);
- clutter_stage_set_title (CLUTTER_STAGE (stage), "clutter and gst-plugins-gl");
- ClutterActor *clutter_texture = setup_stage (CLUTTER_STAGE (stage));
+ clutter_actor_set_size (stage, 640, 480);
+ clutter_actor_set_position (stage, 0, 0);
+ clutter_stage_set_title (CLUTTER_STAGE (stage), "clutter and gst-plugins-gl");
+ clutter_texture = setup_stage (CLUTTER_STAGE (stage));
- /* set a callback to retrieve the gst gl textures */
+ /* set a callback to retrieve the gst gl textures */
- GstElement *fakesink = gst_bin_get_by_name (GST_BIN (pipeline), "fakesink0");
- g_object_set (G_OBJECT (fakesink), "signal-handoffs", TRUE, NULL);
- g_signal_connect (fakesink, "handoff", G_CALLBACK (on_gst_buffer), clutter_texture);
- g_object_unref (fakesink);
+ fakesink = gst_bin_get_by_name (GST_BIN (pipeline), "fakesink0");
+ g_object_set (G_OBJECT (fakesink), "signal-handoffs", TRUE, NULL);
+ g_signal_connect (fakesink, "handoff", G_CALLBACK (on_gst_buffer),
+ clutter_texture);
+ g_object_unref (fakesink);
- /* main loop */
+ /* main loop */
clutter_main ();