diff options
author | Benjamin Otte <otte@redhat.com> | 2010-04-19 18:42:34 +0200 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2010-04-19 18:42:34 +0200 |
commit | 364453498f69e4afbe7f688769b0aa7456303716 (patch) | |
tree | 50ac9c7038edfa2e747f2a0178da29391bb19e88 | |
parent | d301d3dc6e256d889beb7cb7551959fc05ad690b (diff) |
projectM: acquire gl context before calling into projectm
Fixes random crashes
-rw-r--r-- | ext/projectM/gstprojectm.cpp | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/ext/projectM/gstprojectm.cpp b/ext/projectM/gstprojectm.cpp index 5c3ccc3..8d9a699 100644 --- a/ext/projectM/gstprojectm.cpp +++ b/ext/projectM/gstprojectm.cpp @@ -145,8 +145,14 @@ gst_projectm_reset (GstProjectm * projectm) gst_cairo_format_free (projectm->srcformat); projectm->srcformat = NULL; if (projectm->pm) { - delete projectm->pm; + cairo_device_t *device = cairo_surface_get_device (projectm->texture); + if (cairo_device_acquire (device) == CAIRO_STATUS_SUCCESS) { + delete projectm->pm; + cairo_device_release (device); + } projectm->pm = NULL; + cairo_surface_destroy (projectm->texture); + projectm->texture = NULL; } GST_OBJECT_LOCK (projectm); @@ -209,9 +215,13 @@ gst_projectm_src_setcaps (GstPad * pad, GstCaps * caps) projectm->srcformat = gst_cairo_format_new (caps); if (projectm->pm) { - projectm->pm->projectM_resetGL (gst_cairo_format_get_width (projectm->srcformat), - gst_cairo_format_get_height (projectm->srcformat)); - print_gl_error (); + cairo_device_t *device = cairo_surface_get_device (projectm->texture); + if (cairo_device_acquire (device) == CAIRO_STATUS_SUCCESS) { + projectm->pm->projectM_resetGL (gst_cairo_format_get_width (projectm->srcformat), + gst_cairo_format_get_height (projectm->srcformat)); + print_gl_error (); + cairo_device_release (device); + } } gst_cairo_format_get_framerate (projectm->srcformat, &fps_n, &fps_d); |