From: Sebastian Dröge Date: Thu, 26 May 2011 10:33:08 +0000 (+0200) Subject: xvimagesink: Fallback to non-XShm mode if allocating the XShm image failed X-Git-Tag: 1.19.3~511^2~6555^2~837 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=7716358d045d90f43aecd7136a29c31f6ce75bdf;p=platform%2Fupstream%2Fgstreamer.git xvimagesink: Fallback to non-XShm mode if allocating the XShm image failed Fixes bug #630442. --- diff --git a/sys/xvimage/xvimagesink.c b/sys/xvimage/xvimagesink.c index b645b35392..ba10ef0717 100644 --- a/sys/xvimage/xvimagesink.c +++ b/sys/xvimage/xvimagesink.c @@ -562,16 +562,23 @@ gst_xvimagesink_xvimage_new (GstXvImageSink * xvimagesink, GstCaps * caps) xvimage->width, xvimage->height, &xvimage->SHMInfo); if (!xvimage->xvimage || error_caught) { g_mutex_unlock (xvimagesink->x_lock); - /* Reset error handler */ + + /* Reset error flag */ error_caught = FALSE; - XSetErrorHandler (handler); - /* Push an error */ - GST_ELEMENT_ERROR (xvimagesink, RESOURCE, WRITE, + + /* Push a warning */ + GST_ELEMENT_WARNING (xvimagesink, RESOURCE, WRITE, ("Failed to create output image buffer of %dx%d pixels", xvimage->width, xvimage->height), ("could not XvShmCreateImage a %dx%d image", xvimage->width, xvimage->height)); - goto beach_unlocked; + + /* Retry without XShm */ + xvimagesink->xcontext->use_xshm = FALSE; + + /* Hold X mutex again to try without XShm */ + g_mutex_lock (xvimagesink->x_lock); + goto no_xshm; } /* we have to use the returned data_size for our shm size */ @@ -680,6 +687,7 @@ gst_xvimagesink_xvimage_new (GstXvImageSink * xvimagesink, GstCaps * caps) GST_DEBUG_OBJECT (xvimagesink, "XServer ShmAttached to 0x%x, id 0x%lx", xvimage->SHMInfo.shmid, xvimage->SHMInfo.shmseg); } else + no_xshm: #endif /* HAVE_XSHM */ { xvimage->xvimage = XvCreateImage (xvimagesink->xcontext->disp,