summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2010-04-19 18:42:34 +0200
committerBenjamin Otte <otte@redhat.com>2010-04-19 18:42:34 +0200
commit364453498f69e4afbe7f688769b0aa7456303716 (patch)
tree50ac9c7038edfa2e747f2a0178da29391bb19e88
parentd301d3dc6e256d889beb7cb7551959fc05ad690b (diff)
projectM: acquire gl context before calling into projectm
Fixes random crashes
-rw-r--r--ext/projectM/gstprojectm.cpp18
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);