sys/glsink/glimagesink.c: Fix problems when the element cannot open the display. (fixes #357212)

Original commit message from CVS:
* sys/glsink/glimagesink.c:
Fix problems when the element cannot open the display.
(fixes #357212)
This commit is contained in:
David Schleef 2006-09-23 00:28:35 +00:00
parent 0a1f778b36
commit 33ae52e8a3
2 changed files with 22 additions and 9 deletions

View file

@ -1,3 +1,9 @@
2006-09-22 David Schleef <ds@schleef.org>
* sys/glsink/glimagesink.c:
Fix problems when the element cannot open the display.
(fixes #357212)
2006-09-22 Tim-Philipp Müller <tim at centricular dot net>
* configure.ac:

View file

@ -180,10 +180,11 @@ gst_glimage_sink_init (GstGLImageSink * glimage_sink,
int screen;
glimage_sink->display = XOpenDisplay (NULL);
if (glimage_sink->display) {
screen = DefaultScreen (glimage_sink->display);
screen = DefaultScreen (glimage_sink->display);
XSynchronize (glimage_sink->display, True);
XSynchronize (glimage_sink->display, True);
}
/* XSetErrorHandler (error_handler); */
glimage_sink->width = 400;
glimage_sink->height = 400;
@ -204,6 +205,7 @@ gst_glimage_sink_set_property (GObject * object, guint prop_id,
switch (prop_id) {
case ARG_DISPLAY:
/* FIXME this should close/reopen display */
if (glimage_sink->display_name) {
g_free (glimage_sink->display_name);
}
@ -224,9 +226,14 @@ gst_glimage_sink_finalize (GObject * object)
glimage_sink = GST_GLIMAGE_SINK (object);
gst_caps_unref (glimage_sink->caps);
if (glimage_sink->caps) {
gst_caps_unref (glimage_sink->caps);
}
g_free (glimage_sink->display_name);
if (glimage_sink->display) {
XCloseDisplay (glimage_sink->display);
}
}
static void
@ -453,8 +460,11 @@ gst_glimage_sink_update_caps (GstGLImageSink * glimage_sink)
GstCaps *caps;
int max_size;
if (glimage_sink->display == NULL) {
if (glimage_sink->caps) {
gst_caps_unref (glimage_sink->caps);
}
if (glimage_sink->display == NULL) {
glimage_sink->caps =
gst_caps_copy (gst_pad_get_pad_template_caps (GST_BASE_SINK_PAD
(glimage_sink)));
@ -480,9 +490,6 @@ gst_glimage_sink_update_caps (GstGLImageSink * glimage_sink)
"width", GST_TYPE_INT_RANGE, 16, max_size,
"height", GST_TYPE_INT_RANGE, 16, max_size, NULL);
if (glimage_sink->caps) {
gst_caps_unref (glimage_sink->caps);
}
glimage_sink->caps = caps;
}
@ -571,7 +578,7 @@ gst_glimage_sink_init_display (GstGLImageSink * glimage_sink)
glimage_sink->display = XOpenDisplay (NULL);
if (glimage_sink->display == NULL) {
GST_ERROR_OBJECT (glimage_sink, "Could not open display");
GST_DEBUG_OBJECT (glimage_sink, "Could not open display");
return FALSE;
}