diff --git a/gst-libs/gst/gl/gstgldisplay.c b/gst-libs/gst/gl/gstgldisplay.c index 2158e2c7c6..1442853e31 100644 --- a/gst-libs/gst/gl/gstgldisplay.c +++ b/gst-libs/gst/gl/gstgldisplay.c @@ -101,11 +101,6 @@ gst_gl_display_finalize (GObject * object) g_mutex_clear (&display->mutex); - if (display->error_message) { - g_free (display->error_message); - display->error_message = NULL; - } - if (display->gl_vtable) { g_slice_free (GstGLFuncs, display->gl_vtable); display->gl_vtable = NULL; @@ -125,21 +120,6 @@ gst_gl_display_finalize (GObject * object) /* Called in the gl thread */ -void -gst_gl_display_set_error (GstGLDisplay * display, const char *format, ...) -{ - va_list args; - - if (display->error_message) - g_free (display->error_message); - - va_start (args, format); - display->error_message = g_strdup_vprintf (format, args); - va_end (args); - - GST_WARNING ("%s", display->error_message); -} - void gst_gl_display_thread_run_generic (GstGLDisplay * display) { diff --git a/gst-libs/gst/gl/gstgldisplay.h b/gst-libs/gst/gl/gstgldisplay.h index 1a1f184701..dc513db6bc 100644 --- a/gst-libs/gst/gl/gstgldisplay.h +++ b/gst-libs/gst/gl/gstgldisplay.h @@ -75,8 +75,6 @@ typedef enum */ typedef void (*GstGLDisplayThreadFunc) (GstGLDisplay * display, gpointer data); -#define GST_GL_DISPLAY_ERR_MSG(obj) ("%s", GST_GL_DISPLAY_CAST(obj)->error_message) - /** * GstGLDisplay: * @@ -95,8 +93,6 @@ struct _GstGLDisplay /* foreign gl context */ gulong external_gl_context; - gchar *error_message; - GstGLFuncs *gl_vtable; GstGLDisplayPrivate *priv; @@ -115,9 +111,6 @@ void gst_gl_display_thread_add (GstGLDisplay * display, gulong gst_gl_display_get_internal_gl_context (GstGLDisplay * display); -/* Must be called inside a lock/unlock on display, or within the glthread */ -void gst_gl_display_set_error (GstGLDisplay * display, const char * format, ...); - void gst_gl_display_lock (GstGLDisplay * display); void gst_gl_display_unlock (GstGLDisplay * display); GstGLAPI gst_gl_display_get_gl_api (GstGLDisplay * display); diff --git a/gst-libs/gst/gl/gstglfilter.c b/gst-libs/gst/gl/gstglfilter.c index 102795fa03..0d2070c5ba 100644 --- a/gst-libs/gst/gl/gstglfilter.c +++ b/gst-libs/gst/gl/gstglfilter.c @@ -764,7 +764,7 @@ wrong_caps: display_error: { GST_ELEMENT_ERROR (filter, RESOURCE, NOT_FOUND, - GST_GL_DISPLAY_ERR_MSG (filter->display), (NULL)); + ("%s", gst_gl_display_get_error ()), (NULL)); return FALSE; } diff --git a/gst-libs/gst/gl/gstglmixer.c b/gst-libs/gst/gl/gstglmixer.c index bebb941154..512ba1ef78 100644 --- a/gst-libs/gst/gl/gstglmixer.c +++ b/gst-libs/gst/gl/gstglmixer.c @@ -1154,7 +1154,7 @@ done: display_error: { GST_ELEMENT_ERROR (mix, RESOURCE, NOT_FOUND, - GST_GL_DISPLAY_ERR_MSG (mix->display), (NULL)); + ("%s", gst_gl_display_get_error ()), (NULL)); return FALSE; } } diff --git a/gst-libs/gst/gl/gstglutils.c b/gst-libs/gst/gl/gstglutils.c index 4ec717a95e..4e8cc4203f 100644 --- a/gst-libs/gst/gl/gstglutils.c +++ b/gst-libs/gst/gl/gstglutils.c @@ -95,6 +95,8 @@ static void _del_fbo (GstGLDisplay * display); static void _gen_shader (GstGLDisplay * display); static void _del_shader (GstGLDisplay * display); +static gchar *error_message; + static void gst_gl_display_gen_texture_window_cb (GstGLDisplay * display) { @@ -452,6 +454,26 @@ gst_gl_display_gen_shader (GstGLDisplay * display, return alive; } +void +gst_gl_display_set_error (GstGLDisplay * display, const char *format, ...) +{ + va_list args; + + if (error_message) + g_free (error_message); + + va_start (args, format); + error_message = g_strdup_vprintf (format, args); + va_end (args); + + GST_WARNING ("%s", error_message); +} + +gchar * +gst_gl_display_get_error (void) +{ + return error_message; +} /* Called by glfilter */ void diff --git a/gst-libs/gst/gl/gstglutils.h b/gst-libs/gst/gl/gstglutils.h index 6a735bafa0..aba5001426 100644 --- a/gst-libs/gst/gl/gstglutils.h +++ b/gst-libs/gst/gl/gstglutils.h @@ -102,4 +102,7 @@ void gst_gl_display_del_shader (GstGLDisplay * display, GstGLShader * shader); gboolean gst_gl_display_check_framebuffer_status (GstGLDisplay * display); void gst_gl_display_activate_gl_context (GstGLDisplay * display, gboolean activate); +void gst_gl_display_set_error (GstGLDisplay * display, const char * format, ...); +gchar *gst_gl_display_get_error (void); + #endif /* __GST_GL_UTILS_H__ */ diff --git a/gst/gl/effects/gstgleffectbulge.c b/gst/gl/effects/gstgleffectbulge.c index e124db6be8..74b9571262 100644 --- a/gst/gl/effects/gstgleffectbulge.c +++ b/gst/gl/effects/gstgleffectbulge.c @@ -40,7 +40,7 @@ gst_gl_effects_bulge_callback (gint width, gint height, guint texture, bulge_fragment_source, GST_GL_SHADER_FRAGMENT_SOURCE)) { gst_gl_display_set_error (display, "Failed to initialize bulge shader"); GST_ELEMENT_ERROR (effects, RESOURCE, NOT_FOUND, - GST_GL_DISPLAY_ERR_MSG (display), (NULL)); + ("%s", gst_gl_display_get_error ()), (NULL)); return; } diff --git a/gst/gl/effects/gstgleffectfisheye.c b/gst/gl/effects/gstgleffectfisheye.c index a64fd7015f..d818dcc454 100644 --- a/gst/gl/effects/gstgleffectfisheye.c +++ b/gst/gl/effects/gstgleffectfisheye.c @@ -40,7 +40,7 @@ gst_gl_effects_fisheye_callback (gint width, gint height, guint texture, fisheye_fragment_source, GST_GL_SHADER_FRAGMENT_SOURCE)) { gst_gl_display_set_error (display, "Failed to initialize fisheye shader"); GST_ELEMENT_ERROR (effects, RESOURCE, NOT_FOUND, - GST_GL_DISPLAY_ERR_MSG (display), (NULL)); + ("%s", gst_gl_display_get_error ()), (NULL)); return; } diff --git a/gst/gl/effects/gstgleffectglow.c b/gst/gl/effects/gstgleffectglow.c index 1b41259288..5c7b148623 100644 --- a/gst/gl/effects/gstgleffectglow.c +++ b/gst/gl/effects/gstgleffectglow.c @@ -44,7 +44,7 @@ gst_gl_effects_glow_step_one (gint width, gint height, guint texture, gst_gl_display_set_error (display, "Failed to initialize luma threshold shader"); GST_ELEMENT_ERROR (effects, RESOURCE, NOT_FOUND, - GST_GL_DISPLAY_ERR_MSG (display), (NULL)); + ("%s", gst_gl_display_get_error ()), (NULL)); return; } @@ -87,7 +87,7 @@ gst_gl_effects_glow_step_two (gint width, gint height, guint texture, hconv7_fragment_source, GST_GL_SHADER_FRAGMENT_SOURCE)) { gst_gl_display_set_error (display, "Failed to initialize hconv7 shader"); GST_ELEMENT_ERROR (effects, RESOURCE, NOT_FOUND, - GST_GL_DISPLAY_ERR_MSG (display), (NULL)); + ("%s", gst_gl_display_get_error ()), (NULL)); return; } @@ -127,7 +127,7 @@ gst_gl_effects_glow_step_three (gint width, gint height, guint texture, vconv7_fragment_source, GST_GL_SHADER_FRAGMENT_SOURCE)) { gst_gl_display_set_error (display, "Failed to initialize vcon7 shader"); GST_ELEMENT_ERROR (effects, RESOURCE, NOT_FOUND, - GST_GL_DISPLAY_ERR_MSG (display), (NULL)); + ("%s", gst_gl_display_get_error ()), (NULL)); return; } @@ -167,7 +167,7 @@ gst_gl_effects_glow_step_four (gint width, gint height, guint texture, sum_fragment_source, GST_GL_SHADER_FRAGMENT_SOURCE)) { gst_gl_display_set_error (display, "Failed to initialize sum shader"); GST_ELEMENT_ERROR (effects, RESOURCE, NOT_FOUND, - GST_GL_DISPLAY_ERR_MSG (display), (NULL)); + ("%s", gst_gl_display_get_error ()), (NULL)); return; } diff --git a/gst/gl/effects/gstgleffectlumatocurve.c b/gst/gl/effects/gstgleffectlumatocurve.c index 24a5b8acdd..21de8058ec 100644 --- a/gst/gl/effects/gstgleffectlumatocurve.c +++ b/gst/gl/effects/gstgleffectlumatocurve.c @@ -42,7 +42,7 @@ gst_gl_effects_luma_to_curve (GstGLEffects * effects, gst_gl_display_set_error (display, "Failed to initialize luma to curve shader"); GST_ELEMENT_ERROR (effects, RESOURCE, NOT_FOUND, - GST_GL_DISPLAY_ERR_MSG (display), (NULL)); + ("%s", gst_gl_display_get_error ()), (NULL)); return; } diff --git a/gst/gl/effects/gstgleffectmirror.c b/gst/gl/effects/gstgleffectmirror.c index 7fd2473374..29d01f034f 100644 --- a/gst/gl/effects/gstgleffectmirror.c +++ b/gst/gl/effects/gstgleffectmirror.c @@ -58,7 +58,7 @@ gst_gl_effects_mirror_callback (gint width, gint height, guint texture, error = NULL; gst_gl_shader_use (NULL); GST_ELEMENT_ERROR (effects, RESOURCE, NOT_FOUND, - GST_GL_DISPLAY_ERR_MSG (display), (NULL)); + ("%s", gst_gl_display_get_error ()), (NULL)); } else { effects->draw_attr_position_loc = gst_gl_shader_get_attribute_location (shader, "a_position"); @@ -75,7 +75,7 @@ gst_gl_effects_mirror_callback (gint width, gint height, guint texture, gst_gl_display_set_error (display, "Failed to initialize mirror shader"); GST_ELEMENT_ERROR (effects, RESOURCE, NOT_FOUND, - GST_GL_DISPLAY_ERR_MSG (display), (NULL)); + ("%s", gst_gl_display_get_error ()), (NULL)); return; } diff --git a/gst/gl/effects/gstgleffectrgbtocurve.c b/gst/gl/effects/gstgleffectrgbtocurve.c index 192d01d6f6..0c4d55e735 100644 --- a/gst/gl/effects/gstgleffectrgbtocurve.c +++ b/gst/gl/effects/gstgleffectrgbtocurve.c @@ -42,7 +42,7 @@ gst_gl_effects_rgb_to_curve (GstGLEffects * effects, gst_gl_display_set_error (display, "Failed to initialize rgb to curve shader"); GST_ELEMENT_ERROR (effects, RESOURCE, NOT_FOUND, - GST_GL_DISPLAY_ERR_MSG (display), (NULL)); + ("%s", gst_gl_display_get_error ()), (NULL)); return; } diff --git a/gst/gl/effects/gstgleffectsin.c b/gst/gl/effects/gstgleffectsin.c index 2926fdfcb0..73240ac8d4 100644 --- a/gst/gl/effects/gstgleffectsin.c +++ b/gst/gl/effects/gstgleffectsin.c @@ -40,7 +40,7 @@ gst_gl_effects_sin_callback (gint width, gint height, guint texture, sin_fragment_source, GST_GL_SHADER_FRAGMENT_SOURCE)) { gst_gl_display_set_error (display, "Failed to initialize sin shader"); GST_ELEMENT_ERROR (effects, RESOURCE, NOT_FOUND, - GST_GL_DISPLAY_ERR_MSG (display), (NULL)); + ("%s", gst_gl_display_get_error ()), (NULL)); return; } diff --git a/gst/gl/effects/gstgleffectsquare.c b/gst/gl/effects/gstgleffectsquare.c index a54104bd22..9057e3b5bf 100644 --- a/gst/gl/effects/gstgleffectsquare.c +++ b/gst/gl/effects/gstgleffectsquare.c @@ -40,7 +40,7 @@ gst_gl_effects_square_callback (gint width, gint height, guint texture, square_fragment_source, GST_GL_SHADER_FRAGMENT_SOURCE)) { gst_gl_display_set_error (display, "Failed to initialize square shader"); GST_ELEMENT_ERROR (effects, RESOURCE, NOT_FOUND, - GST_GL_DISPLAY_ERR_MSG (display), (NULL)); + ("%s", gst_gl_display_get_error ()), (NULL)); return; } diff --git a/gst/gl/effects/gstgleffectsqueeze.c b/gst/gl/effects/gstgleffectsqueeze.c index 0cdadfc86b..0a8d61ab0f 100644 --- a/gst/gl/effects/gstgleffectsqueeze.c +++ b/gst/gl/effects/gstgleffectsqueeze.c @@ -58,7 +58,7 @@ gst_gl_effects_squeeze_callback (gint width, gint height, guint texture, error = NULL; gst_gl_shader_use (NULL); GST_ELEMENT_ERROR (effects, RESOURCE, NOT_FOUND, - GST_GL_DISPLAY_ERR_MSG (display), (NULL)); + ("%s", gst_gl_display_get_error ()), (NULL)); } else { effects->draw_attr_position_loc = gst_gl_shader_get_attribute_location (shader, "a_position"); @@ -75,7 +75,7 @@ gst_gl_effects_squeeze_callback (gint width, gint height, guint texture, gst_gl_display_set_error (display, "Failed to initialize squeeze shader"); GST_ELEMENT_ERROR (effects, RESOURCE, NOT_FOUND, - GST_GL_DISPLAY_ERR_MSG (display), (NULL)); + ("%s", gst_gl_display_get_error ()), (NULL)); return; } } diff --git a/gst/gl/effects/gstgleffectstretch.c b/gst/gl/effects/gstgleffectstretch.c index 6d217bcda0..f9535f8e74 100644 --- a/gst/gl/effects/gstgleffectstretch.c +++ b/gst/gl/effects/gstgleffectstretch.c @@ -40,7 +40,7 @@ gst_gl_effects_stretch_callback (gint width, gint height, guint texture, stretch_fragment_source, GST_GL_SHADER_FRAGMENT_SOURCE)) { gst_gl_display_set_error (display, "Failed to initialize stretch shader"); GST_ELEMENT_ERROR (effects, RESOURCE, NOT_FOUND, - GST_GL_DISPLAY_ERR_MSG (display), (NULL)); + ("%s", gst_gl_display_get_error ()), (NULL)); return; } diff --git a/gst/gl/effects/gstgleffecttunnel.c b/gst/gl/effects/gstgleffecttunnel.c index 0d37aacd18..983d07f1ab 100644 --- a/gst/gl/effects/gstgleffecttunnel.c +++ b/gst/gl/effects/gstgleffecttunnel.c @@ -40,7 +40,7 @@ gst_gl_effects_tunnel_callback (gint width, gint height, guint texture, tunnel_fragment_source, GST_GL_SHADER_FRAGMENT_SOURCE)) { gst_gl_display_set_error (display, "Failed to initialize tunnel shader"); GST_ELEMENT_ERROR (effects, RESOURCE, NOT_FOUND, - GST_GL_DISPLAY_ERR_MSG (display), (NULL)); + ("%s", gst_gl_display_get_error ()), (NULL)); return; } diff --git a/gst/gl/effects/gstgleffecttwirl.c b/gst/gl/effects/gstgleffecttwirl.c index 494c9fbaec..8e3b2b31cf 100644 --- a/gst/gl/effects/gstgleffecttwirl.c +++ b/gst/gl/effects/gstgleffecttwirl.c @@ -40,7 +40,7 @@ gst_gl_effects_twirl_callback (gint width, gint height, guint texture, twirl_fragment_source, GST_GL_SHADER_FRAGMENT_SOURCE)) { gst_gl_display_set_error (display, "Failed to initialize twirl shader"); GST_ELEMENT_ERROR (effects, RESOURCE, NOT_FOUND, - GST_GL_DISPLAY_ERR_MSG (display), (NULL)); + ("%s", gst_gl_display_get_error ()), (NULL)); return; } diff --git a/gst/gl/effects/gstgleffectxray.c b/gst/gl/effects/gstgleffectxray.c index eef63d8355..e759d6cbc3 100644 --- a/gst/gl/effects/gstgleffectxray.c +++ b/gst/gl/effects/gstgleffectxray.c @@ -60,7 +60,7 @@ gst_gl_effects_xray_step_two (gint width, gint height, guint texture, hconv7_fragment_source, GST_GL_SHADER_FRAGMENT_SOURCE)) { gst_gl_display_set_error (display, "Failed to initialize hconv7 shader"); GST_ELEMENT_ERROR (effects, RESOURCE, NOT_FOUND, - GST_GL_DISPLAY_ERR_MSG (display), (NULL)); + ("%s", gst_gl_display_get_error ()), (NULL)); return; } @@ -100,7 +100,7 @@ gst_gl_effects_xray_step_three (gint width, gint height, guint texture, vconv7_fragment_source, GST_GL_SHADER_FRAGMENT_SOURCE)) { gst_gl_display_set_error (display, "Failed to initialize vconv7 shader"); GST_ELEMENT_ERROR (effects, RESOURCE, NOT_FOUND, - GST_GL_DISPLAY_ERR_MSG (display), (NULL)); + ("%s", gst_gl_display_get_error ()), (NULL)); return; } @@ -142,7 +142,7 @@ gst_gl_effects_xray_desaturate (gint width, gint height, guint texture, gst_gl_display_set_error (display, "Failed to initialize desaturate shader"); GST_ELEMENT_ERROR (effects, RESOURCE, NOT_FOUND, - GST_GL_DISPLAY_ERR_MSG (display), (NULL)); + ("%s", gst_gl_display_get_error ()), (NULL)); return; } @@ -181,7 +181,7 @@ gst_gl_effects_xray_sobel_hconv (gint width, gint height, guint texture, gst_gl_display_set_error (display, "Failed to initialize sobel hvonc3 shader"); GST_ELEMENT_ERROR (effects, RESOURCE, NOT_FOUND, - GST_GL_DISPLAY_ERR_MSG (display), (NULL)); + ("%s", gst_gl_display_get_error ()), (NULL)); return; } @@ -220,7 +220,7 @@ gst_gl_effects_xray_sobel_vconv (gint width, gint height, guint texture, gst_gl_display_set_error (display, "Failed to initialize sobel vconv3 shader"); GST_ELEMENT_ERROR (effects, RESOURCE, NOT_FOUND, - GST_GL_DISPLAY_ERR_MSG (display), (NULL)); + ("%s", gst_gl_display_get_error ()), (NULL)); return; } @@ -259,7 +259,7 @@ gst_gl_effects_xray_sobel_length (gint width, gint height, guint texture, gst_gl_display_set_error (display, "Failed to initialize seobel length shader"); GST_ELEMENT_ERROR (effects, RESOURCE, NOT_FOUND, - GST_GL_DISPLAY_ERR_MSG (display), (NULL)); + ("%s", gst_gl_display_get_error ()), (NULL)); return; } @@ -300,7 +300,7 @@ gst_gl_effects_xray_step_five (gint width, gint height, guint texture, multiply_fragment_source, GST_GL_SHADER_FRAGMENT_SOURCE)) { gst_gl_display_set_error (display, "Failed to initialize multiply shader"); GST_ELEMENT_ERROR (effects, RESOURCE, NOT_FOUND, - GST_GL_DISPLAY_ERR_MSG (display), (NULL)); + ("%s", gst_gl_display_get_error ()), (NULL)); return; } diff --git a/gst/gl/gstgldifferencematte.c b/gst/gl/gstgldifferencematte.c index e7a5444ba2..ac41ff32ac 100644 --- a/gst/gl/gstgldifferencematte.c +++ b/gst/gl/gstgldifferencematte.c @@ -106,8 +106,7 @@ gst_gl_differencematte_init_gl_resources (GstGLFilter * filter) gst_gl_display_set_error (GST_GL_FILTER (differencematte)->display, "Failed to initialize difference shader"); GST_ELEMENT_ERROR (differencematte, RESOURCE, NOT_FOUND, - GST_GL_DISPLAY_ERR_MSG (GST_GL_FILTER (differencematte)->display), - (NULL)); + ("%s", gst_gl_display_get_error ()), (NULL)); return; } @@ -116,8 +115,7 @@ gst_gl_differencematte_init_gl_resources (GstGLFilter * filter) gst_gl_display_set_error (GST_GL_FILTER (differencematte)->display, "Failed to initialize hconv7 shader"); GST_ELEMENT_ERROR (differencematte, RESOURCE, NOT_FOUND, - GST_GL_DISPLAY_ERR_MSG (GST_GL_FILTER (differencematte)->display), - (NULL)); + ("%s", gst_gl_display_get_error ()), (NULL)); return; } @@ -126,8 +124,7 @@ gst_gl_differencematte_init_gl_resources (GstGLFilter * filter) gst_gl_display_set_error (GST_GL_FILTER (differencematte)->display, "Failed to initialize vconv7 shader"); GST_ELEMENT_ERROR (differencematte, RESOURCE, NOT_FOUND, - GST_GL_DISPLAY_ERR_MSG (GST_GL_FILTER (differencematte)->display), - (NULL)); + ("%s", gst_gl_display_get_error ()), (NULL)); return; } @@ -136,8 +133,7 @@ gst_gl_differencematte_init_gl_resources (GstGLFilter * filter) gst_gl_display_set_error (GST_GL_FILTER (differencematte)->display, "Failed to initialize interp shader"); GST_ELEMENT_ERROR (differencematte, RESOURCE, NOT_FOUND, - GST_GL_DISPLAY_ERR_MSG (GST_GL_FILTER (differencematte)->display), - (NULL)); + ("%s", gst_gl_display_get_error ()), (NULL)); return; } } diff --git a/gst/gl/gstglimagesink.c b/gst/gl/gstglimagesink.c index 22f72ff14d..cacc13cd03 100644 --- a/gst/gl/gstglimagesink.c +++ b/gst/gl/gstglimagesink.c @@ -677,7 +677,7 @@ gst_glimage_sink_render (GstBaseSink * bsink, GstBuffer * buf) if (g_atomic_int_get (&glimage_sink->to_quit) != 0) { GST_ELEMENT_ERROR (glimage_sink, RESOURCE, NOT_FOUND, - GST_GL_DISPLAY_ERR_MSG (glimage_sink->display), (NULL)); + ("%s", gst_gl_display_get_error ()), (NULL)); return GST_FLOW_ERROR; } @@ -688,7 +688,7 @@ redisplay_failed: { gst_video_frame_unmap (&frame); GST_ELEMENT_ERROR (glimage_sink, RESOURCE, NOT_FOUND, - GST_GL_DISPLAY_ERR_MSG (glimage_sink->display), (NULL)); + ("%s", gst_gl_display_get_error ()), (NULL)); return GST_FLOW_ERROR; } } diff --git a/gst/gl/gstgltestsrc.c b/gst/gl/gstgltestsrc.c index ee93a4934b..39deca4c20 100644 --- a/gst/gl/gstgltestsrc.c +++ b/gst/gl/gstgltestsrc.c @@ -332,7 +332,7 @@ wrong_caps: display_error: { GST_ELEMENT_ERROR (gltestsrc, RESOURCE, NOT_FOUND, - GST_GL_DISPLAY_ERR_MSG (gltestsrc->display), (NULL)); + ("%s", gst_gl_display_get_error ()), (NULL)); return FALSE; } }