mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-01-02 13:38:48 +00:00
[219/906] Use a gst debug category for GstGLDisplay instead of g_print, gst-launch-0.10 --gst-debug=gldisplay:3 videotestsrc ! glimagesink
This commit is contained in:
parent
a38424f3be
commit
597fe26a1e
5 changed files with 64 additions and 41 deletions
|
@ -24,9 +24,23 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "gstgldisplay.h"
|
#include "gstgldisplay.h"
|
||||||
#include <gst/gst.h>
|
|
||||||
|
|
||||||
GST_BOILERPLATE (GstGLDisplay, gst_gl_display, GObject, G_TYPE_OBJECT);
|
/*
|
||||||
|
* gst-launch-0.10 --gst-debug=gldisplay:N pipeline
|
||||||
|
* N=1: errors
|
||||||
|
* N=2: errors warnings
|
||||||
|
* N=3: errors warnings infos
|
||||||
|
* N=4: errors warnings infos logs
|
||||||
|
* N=5: errors warnings infos logs .?.
|
||||||
|
*/
|
||||||
|
|
||||||
|
GST_DEBUG_CATEGORY_STATIC (gst_gl_display_debug);
|
||||||
|
#define GST_CAT_DEFAULT gst_gl_display_debug
|
||||||
|
|
||||||
|
#define DEBUG_INIT(bla) \
|
||||||
|
GST_DEBUG_CATEGORY_INIT (gst_gl_display_debug, "gldisplay", 0, "opengl display");
|
||||||
|
|
||||||
|
GST_BOILERPLATE_FULL (GstGLDisplay, gst_gl_display, GObject, G_TYPE_OBJECT, DEBUG_INIT);
|
||||||
static void gst_gl_display_finalize (GObject* object);
|
static void gst_gl_display_finalize (GObject* object);
|
||||||
|
|
||||||
/* GL thread loop */
|
/* GL thread loop */
|
||||||
|
@ -462,7 +476,7 @@ gst_gl_display_finalize (GObject* object)
|
||||||
if (g_hash_table_size (gst_gl_display_map) == 0)
|
if (g_hash_table_size (gst_gl_display_map) == 0)
|
||||||
{
|
{
|
||||||
g_thread_join (gst_gl_display_gl_thread);
|
g_thread_join (gst_gl_display_gl_thread);
|
||||||
g_print ("gl thread joined\n");
|
GST_CAT_INFO (GST_CAT_DEFAULT, "gl thread joined");
|
||||||
gst_gl_display_gl_thread = NULL;
|
gst_gl_display_gl_thread = NULL;
|
||||||
g_async_queue_unref (gst_gl_display_messageQueue);
|
g_async_queue_unref (gst_gl_display_messageQueue);
|
||||||
g_hash_table_unref (gst_gl_display_map);
|
g_hash_table_unref (gst_gl_display_map);
|
||||||
|
@ -497,9 +511,9 @@ gst_gl_display_thread_func (GstGLDisplay *display)
|
||||||
gst_gl_display_thread_create_context (display);
|
gst_gl_display_thread_create_context (display);
|
||||||
gst_gl_display_unlock (display);
|
gst_gl_display_unlock (display);
|
||||||
|
|
||||||
g_print ("gl mainLoop started\n");
|
GST_CAT_INFO (GST_CAT_DEFAULT, "gl mainLoop started");
|
||||||
glutMainLoop ();
|
glutMainLoop ();
|
||||||
g_print ("gl mainLoop exited\n");
|
GST_CAT_INFO (GST_CAT_DEFAULT, "gl mainLoop exited");
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -527,7 +541,7 @@ gst_gl_display_thread_loop (void)
|
||||||
gst_gl_display_thread_dispatch_action (msg);
|
gst_gl_display_thread_dispatch_action (msg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else g_print ("timeout reached in idle func\n");
|
else GST_CAT_INFO (GST_CAT_DEFAULT, "timeout reached in idle func");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -674,7 +688,7 @@ gst_gl_display_thread_create_context (GstGLDisplay *display)
|
||||||
display->title = g_string_append (display->title, buffer);
|
display->title = g_string_append (display->title, buffer);
|
||||||
glutWinId = glutCreateWindow (display->title->str, display->winId);
|
glutWinId = glutCreateWindow (display->title->str, display->winId);
|
||||||
|
|
||||||
g_print ("Context %d created\n", glutWinId);
|
GST_CAT_INFO (GST_CAT_DEFAULT, "Context %d created", glutWinId);
|
||||||
|
|
||||||
if (display->visible)
|
if (display->visible)
|
||||||
glutShowWindow ();
|
glutShowWindow ();
|
||||||
|
@ -685,7 +699,8 @@ gst_gl_display_thread_create_context (GstGLDisplay *display)
|
||||||
err = glewInit();
|
err = glewInit();
|
||||||
if (err != GLEW_OK)
|
if (err != GLEW_OK)
|
||||||
{
|
{
|
||||||
g_print ("Error: %s\n", glewGetErrorString(err));
|
GST_CAT_ERROR_OBJECT (GST_CAT_DEFAULT, display, "Failed to init GLEW: %s",
|
||||||
|
glewGetErrorString (err));
|
||||||
display->isAlive = FALSE;
|
display->isAlive = FALSE;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -697,23 +712,23 @@ gst_gl_display_thread_create_context (GstGLDisplay *display)
|
||||||
|
|
||||||
sscanf(opengl_version->str, "%d.%d", &opengl_version_major, &opengl_version_minor);
|
sscanf(opengl_version->str, "%d.%d", &opengl_version_major, &opengl_version_minor);
|
||||||
|
|
||||||
g_print ("GL_VERSION: %s\n", glGetString (GL_VERSION));
|
GST_CAT_INFO (GST_CAT_DEFAULT, "GL_VERSION: %s", glGetString (GL_VERSION));
|
||||||
g_print ("GLEW_VERSION: %s\n", glewGetString (GLEW_VERSION));
|
GST_CAT_INFO (GST_CAT_DEFAULT, "GLEW_VERSION: %s", glewGetString (GLEW_VERSION));
|
||||||
if (glGetString (GL_SHADING_LANGUAGE_VERSION))
|
if (glGetString (GL_SHADING_LANGUAGE_VERSION))
|
||||||
g_print ("GL_SHADING_LANGUAGE_VERSION: %s\n", glGetString (GL_SHADING_LANGUAGE_VERSION));
|
GST_CAT_INFO (GST_CAT_DEFAULT, "GL_SHADING_LANGUAGE_VERSION: %s", glGetString (GL_SHADING_LANGUAGE_VERSION));
|
||||||
|
|
||||||
g_print ("GL_VENDOR: %s\n", glGetString (GL_VENDOR));
|
GST_CAT_INFO (GST_CAT_DEFAULT, "GL_VENDOR: %s", glGetString (GL_VENDOR));
|
||||||
g_print ("GL_RENDERER: %s\n", glGetString (GL_RENDERER));
|
GST_CAT_INFO (GST_CAT_DEFAULT, "GL_RENDERER: %s", glGetString (GL_RENDERER));
|
||||||
|
|
||||||
g_string_free (opengl_version, TRUE);
|
g_string_free (opengl_version, TRUE);
|
||||||
|
|
||||||
if ((opengl_version_major < 1) ||
|
if ((opengl_version_major < 1) ||
|
||||||
(GLEW_VERSION_MAJOR < 1) ||
|
(GLEW_VERSION_MAJOR < 1) ||
|
||||||
(opengl_version_major < 2 && opengl_version_major >= 1 && opengl_version_minor < 2) ||
|
(opengl_version_major < 2 && opengl_version_major >= 1 && opengl_version_minor < 2) ||
|
||||||
(GLEW_VERSION_MAJOR < 2 && GLEW_VERSION_MAJOR >= 1 && GLEW_VERSION_MINOR < 4) )
|
(GLEW_VERSION_MAJOR < 2 && GLEW_VERSION_MAJOR >= 1 && GLEW_VERSION_MINOR < 4) )
|
||||||
{
|
{
|
||||||
//turn off the pipeline, the old drivers are not yet supported
|
//turn off the pipeline, the old drivers are not yet supported
|
||||||
g_warning ("Required OpenGL >= 1.2.0 and Glew >= 1.4.0\n");
|
GST_CAT_WARNING (GST_CAT_DEFAULT, "Required OpenGL >= 1.2.0 and Glew >= 1.4.0");
|
||||||
display->isAlive = FALSE;
|
display->isAlive = FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -729,7 +744,7 @@ gst_gl_display_thread_create_context (GstGLDisplay *display)
|
||||||
|
|
||||||
//check glut id validity
|
//check glut id validity
|
||||||
g_assert (glutGetWindow() == glutWinId);
|
g_assert (glutGetWindow() == glutWinId);
|
||||||
g_print ("Context %d initialized\n", display->glutWinId);
|
GST_CAT_INFO (GST_CAT_DEFAULT, "Context %d initialized", display->glutWinId);
|
||||||
|
|
||||||
//release display constructor
|
//release display constructor
|
||||||
g_cond_signal (display->cond_create_context);
|
g_cond_signal (display->cond_create_context);
|
||||||
|
@ -855,7 +870,7 @@ gst_gl_display_thread_destroy_context (GstGLDisplay *display)
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
g_hash_table_remove (gst_gl_display_map, GINT_TO_POINTER (display->glutWinId));
|
g_hash_table_remove (gst_gl_display_map, GINT_TO_POINTER (display->glutWinId));
|
||||||
g_print ("Context %d destroyed\n", display->glutWinId);
|
GST_CAT_INFO (GST_CAT_DEFAULT, "Context %d destroyed", display->glutWinId);
|
||||||
|
|
||||||
//if the map is empty, leaveMainloop and join the thread
|
//if the map is empty, leaveMainloop and join the thread
|
||||||
if (g_hash_table_size (gst_gl_display_map) == 0)
|
if (g_hash_table_size (gst_gl_display_map) == 0)
|
||||||
|
@ -967,7 +982,7 @@ gst_gl_display_thread_init_upload (GstGLDisplay *display)
|
||||||
/* shouldn't we require ARB_shading_language_100? --Filippo */
|
/* shouldn't we require ARB_shading_language_100? --Filippo */
|
||||||
if (GLEW_ARB_fragment_shader)
|
if (GLEW_ARB_fragment_shader)
|
||||||
{
|
{
|
||||||
g_print ("Context %d, ARB_fragment_shader supported: yes\n", display->glutWinId);
|
GST_CAT_INFO (GST_CAT_DEFAULT, "Context %d, ARB_fragment_shader supported: yes", display->glutWinId);
|
||||||
|
|
||||||
//Frame buffer object is a requirement for every cases
|
//Frame buffer object is a requirement for every cases
|
||||||
if (GLEW_EXT_framebuffer_object)
|
if (GLEW_EXT_framebuffer_object)
|
||||||
|
@ -975,7 +990,7 @@ gst_gl_display_thread_init_upload (GstGLDisplay *display)
|
||||||
//a texture must be attached to the FBO
|
//a texture must be attached to the FBO
|
||||||
GLuint fake_texture = 0;
|
GLuint fake_texture = 0;
|
||||||
|
|
||||||
g_print ("Context %d, EXT_framebuffer_object supported: yes\n", display->glutWinId);
|
GST_CAT_INFO (GST_CAT_DEFAULT, "Context %d, EXT_framebuffer_object supported: yes", display->glutWinId);
|
||||||
|
|
||||||
//-- init intput frame buffer object (video -> GL)
|
//-- init intput frame buffer object (video -> GL)
|
||||||
|
|
||||||
|
@ -1016,7 +1031,7 @@ gst_gl_display_thread_init_upload (GstGLDisplay *display)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//turn off the pipeline because Frame buffer object is a not present
|
//turn off the pipeline because Frame buffer object is a not present
|
||||||
g_print ("Context %d, EXT_framebuffer_object supported: no\n", display->glutWinId);
|
GST_CAT_WARNING (GST_CAT_DEFAULT, "Context %d, EXT_framebuffer_object supported: no", display->glutWinId);
|
||||||
display->isAlive = FALSE;
|
display->isAlive = FALSE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1095,9 +1110,9 @@ gst_gl_display_thread_init_upload (GstGLDisplay *display)
|
||||||
else if (GLEW_MESA_ycbcr_texture)
|
else if (GLEW_MESA_ycbcr_texture)
|
||||||
{
|
{
|
||||||
//GLSL and Color Matrix are not available on your drivers, switch to YCBCR MESA
|
//GLSL and Color Matrix are not available on your drivers, switch to YCBCR MESA
|
||||||
g_print ("Context %d, ARB_fragment_shader supported: no\n", display->glutWinId);
|
GST_CAT_INFO (GST_CAT_DEFAULT, "Context %d, ARB_fragment_shader supported: no", display->glutWinId);
|
||||||
g_print ("Context %d, GLEW_ARB_imaging supported: no\n", display->glutWinId);
|
GST_CAT_INFO (GST_CAT_DEFAULT, "Context %d, GLEW_ARB_imaging supported: no", display->glutWinId);
|
||||||
g_print ("Context %d, GLEW_MESA_ycbcr_texture supported: yes\n", display->glutWinId);
|
GST_CAT_INFO (GST_CAT_DEFAULT, "Context %d, GLEW_MESA_ycbcr_texture supported: yes", display->glutWinId);
|
||||||
|
|
||||||
display->upload_colorspace_conversion = GST_GL_DISPLAY_CONVERSION_MESA;
|
display->upload_colorspace_conversion = GST_GL_DISPLAY_CONVERSION_MESA;
|
||||||
|
|
||||||
|
@ -1121,20 +1136,21 @@ gst_gl_display_thread_init_upload (GstGLDisplay *display)
|
||||||
else if (GLEW_ARB_imaging)
|
else if (GLEW_ARB_imaging)
|
||||||
{
|
{
|
||||||
//GLSL is not available on your drivers, switch to Color Matrix
|
//GLSL is not available on your drivers, switch to Color Matrix
|
||||||
g_print ("Context %d, ARB_fragment_shader supported: no\n", display->glutWinId);
|
GST_CAT_INFO (GST_CAT_DEFAULT, "Context %d, ARB_fragment_shader supported: no", display->glutWinId);
|
||||||
g_print ("Context %d, GLEW_MESA_ycbcr_texture supported: no\n", display->glutWinId);
|
GST_CAT_INFO (GST_CAT_DEFAULT, "Context %d, GLEW_MESA_ycbcr_texture supported: no", display->glutWinId);
|
||||||
g_print ("Context %d, GLEW_ARB_imaging supported: yes\n", display->glutWinId);
|
GST_CAT_INFO (GST_CAT_DEFAULT, "Context %d, GLEW_ARB_imaging supported: yes", display->glutWinId);
|
||||||
|
|
||||||
display->upload_colorspace_conversion = GST_GL_DISPLAY_CONVERSION_MATRIX;
|
display->upload_colorspace_conversion = GST_GL_DISPLAY_CONVERSION_MATRIX;
|
||||||
|
|
||||||
//turn off the pipeline because we do not support it yet
|
//turn off the pipeline because we do not support it yet
|
||||||
|
GST_CAT_WARNING (GST_CAT_DEFAULT, "Colorspace conversion using Color Matrix is not yet supported");
|
||||||
display->isAlive = FALSE;
|
display->isAlive = FALSE;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
g_print ("Context %d, ARB_fragment_shader supported: no\n", display->glutWinId);
|
GST_CAT_WARNING (GST_CAT_DEFAULT, "Context %d, ARB_fragment_shader supported: no", display->glutWinId);
|
||||||
g_print ("Context %d, GLEW_ARB_imaging supported: no\n", display->glutWinId);
|
GST_CAT_WARNING (GST_CAT_DEFAULT, "Context %d, GLEW_ARB_imaging supported: no", display->glutWinId);
|
||||||
g_print ("Context %d, GLEW_MESA_ycbcr_texture supported: no\n", display->glutWinId);
|
GST_CAT_WARNING (GST_CAT_DEFAULT, "Context %d, GLEW_MESA_ycbcr_texture supported: no", display->glutWinId);
|
||||||
|
|
||||||
//turn off the pipeline because colorspace conversion is not possible
|
//turn off the pipeline because colorspace conversion is not possible
|
||||||
display->isAlive = FALSE;
|
display->isAlive = FALSE;
|
||||||
|
@ -1321,8 +1337,9 @@ gst_gl_display_thread_init_download (GstGLDisplay *display)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//turn off the pipeline because Frame buffer object is a requirement
|
//turn off the pipeline because Frame buffer object is a requirement when using filters
|
||||||
g_print ("Context %d, EXT_framebuffer_object supported: no\n", display->glutWinId);
|
//or when using GLSL colorspace conversion
|
||||||
|
GST_CAT_WARNING (GST_CAT_DEFAULT, "Context %d, EXT_framebuffer_object supported: no", display->glutWinId);
|
||||||
display->isAlive = FALSE;
|
display->isAlive = FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1823,7 +1840,7 @@ void gst_gl_display_on_close (void)
|
||||||
//glutGetWindow return 0 if no windows exists, then g_hash_table_lookup return NULL
|
//glutGetWindow return 0 if no windows exists, then g_hash_table_lookup return NULL
|
||||||
if (display == NULL) return;
|
if (display == NULL) return;
|
||||||
|
|
||||||
g_print ("on close\n");
|
GST_CAT_INFO (GST_CAT_DEFAULT, "on close");
|
||||||
|
|
||||||
gst_gl_display_lock (display);
|
gst_gl_display_lock (display);
|
||||||
display->isAlive = FALSE;
|
display->isAlive = FALSE;
|
||||||
|
@ -1909,8 +1926,8 @@ gst_gl_display_gldel_texture (GstGLDisplay* display, GLuint* pTexture, GLint wid
|
||||||
sub_texture_pool = g_queue_new ();
|
sub_texture_pool = g_queue_new ();
|
||||||
g_hash_table_insert (display->texture_pool, string_size, sub_texture_pool);
|
g_hash_table_insert (display->texture_pool, string_size, sub_texture_pool);
|
||||||
|
|
||||||
g_print ("texture pool insert: %s\n", string_size);
|
GST_CAT_INFO (GST_CAT_DEFAULT, "texture pool insert: %s", string_size);
|
||||||
g_print ("texture pool size: %d\n", g_hash_table_size (display->texture_pool));
|
GST_CAT_INFO (GST_CAT_DEFAULT, "texture pool size: %d", g_hash_table_size (display->texture_pool));
|
||||||
}
|
}
|
||||||
|
|
||||||
//contruct a sub texture pool element
|
//contruct a sub texture pool element
|
||||||
|
@ -1953,11 +1970,11 @@ gst_gl_display_check_framebuffer_status(void)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GL_FRAMEBUFFER_UNSUPPORTED_EXT:
|
case GL_FRAMEBUFFER_UNSUPPORTED_EXT:
|
||||||
g_print ("GL_FRAMEBUFFER_UNSUPPORTED_EXT\n");
|
GST_CAT_ERROR (GST_CAT_DEFAULT, "GL_FRAMEBUFFER_UNSUPPORTED_EXT");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
g_print ("General FBO error\n");
|
GST_CAT_ERROR (GST_CAT_DEFAULT, "General FBO error\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -109,6 +109,8 @@ gst_glimage_sink_init_interfaces (GType type)
|
||||||
|
|
||||||
g_type_add_interface_static (type, GST_TYPE_X_OVERLAY, &xoverlay_info);
|
g_type_add_interface_static (type, GST_TYPE_X_OVERLAY, &xoverlay_info);
|
||||||
|
|
||||||
|
GST_DEBUG_CATEGORY_INIT (gst_debug_glimage_sink, "glimagesink", 0,
|
||||||
|
"OpenGL Video Sink");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
/*
|
/*
|
||||||
* GStreamer
|
* GStreamer
|
||||||
|
* Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
|
||||||
|
* Copyright (C) 2002,2007 David A. Schleef <ds@schleef.org>
|
||||||
* Copyright (C) 2008 Julien Isorce <julien.isorce@gmail.com>
|
* Copyright (C) 2008 Julien Isorce <julien.isorce@gmail.com>
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
|
@ -54,7 +56,7 @@ static const GstElementDetails gl_test_src_details =
|
||||||
GST_ELEMENT_DETAILS ("Video test source",
|
GST_ELEMENT_DETAILS ("Video test source",
|
||||||
"Source/Video",
|
"Source/Video",
|
||||||
"Creates a test video stream",
|
"Creates a test video stream",
|
||||||
"Julien Isorce <julien.isorce@gmail.com>");
|
"David A. Schleef <ds@schleef.org>");
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
/*
|
/*
|
||||||
* GStreamer
|
* GStreamer
|
||||||
|
* Copyright (C) 2002,2007 David A. Schleef <ds@schleef.org>
|
||||||
|
* Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
|
||||||
* Copyright (C) 2008 Julien Isorce <julien.isorce@gmail.com>
|
* Copyright (C) 2008 Julien Isorce <julien.isorce@gmail.com>
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
|
|
||||||
|
|
||||||
#define GST_CAT_DEFAULT gst_gl_upload_debug
|
#define GST_CAT_DEFAULT gst_gl_upload_debug
|
||||||
GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT);
|
GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT);
|
||||||
|
|
||||||
static const GstElementDetails element_details =
|
static const GstElementDetails element_details =
|
||||||
GST_ELEMENT_DETAILS ("OpenGL upload",
|
GST_ELEMENT_DETAILS ("OpenGL upload",
|
||||||
|
|
Loading…
Reference in a new issue