From: Matthew Waters Date: Sat, 14 Mar 2015 16:25:29 +0000 (+0000) Subject: glsyncmeta: make context to wait and set sync explicit X-Git-Tag: 1.19.3~511^2~1989^2~970 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=93968916a46aa5e670cd9706e6d09235d0c81382;p=platform%2Fupstream%2Fgstreamer.git glsyncmeta: make context to wait and set sync explicit otherwise we may wait on a sync object in same context by accident --- diff --git a/ext/gl/gstglimagesink.c b/ext/gl/gstglimagesink.c index 68e1622..52f595a 100644 --- a/ext/gl/gstglimagesink.c +++ b/ext/gl/gstglimagesink.c @@ -1504,7 +1504,7 @@ gst_glimage_sink_on_draw (GstGLImageSink * gl_sink) sync_meta = gst_buffer_get_gl_sync_meta (gl_sink->stored_buffer); if (sync_meta) - gst_gl_sync_meta_wait (sync_meta); + gst_gl_sync_meta_wait (sync_meta, gl_sink->context); /* make sure that the environnement is clean */ gst_gl_context_clear_shader (gl_sink->context); diff --git a/ext/gl/gstglmixer.c b/ext/gl/gstglmixer.c index 20d858a..51bd517 100644 --- a/ext/gl/gstglmixer.c +++ b/ext/gl/gstglmixer.c @@ -631,7 +631,7 @@ gst_gl_mixer_process_textures (GstGLMixer * mix, GstBuffer * outbuf) sync_meta = gst_buffer_get_gl_sync_meta (vaggpad->buffer); if (sync_meta) - gst_gl_sync_meta_wait (sync_meta); + gst_gl_sync_meta_wait (sync_meta, GST_GL_BASE_MIXER (mix)->context); if (gst_video_frame_map (&gl_frame, &gl_info, vaggpad->buffer, GST_MAP_READ | GST_MAP_GL)) { diff --git a/gst-libs/gst/gl/gstglfilter.c b/gst-libs/gst/gl/gstglfilter.c index 886c5e9..cf95d1c 100644 --- a/gst-libs/gst/gl/gstglfilter.c +++ b/gst-libs/gst/gl/gstglfilter.c @@ -922,7 +922,7 @@ gst_gl_filter_transform (GstBaseTransform * bt, GstBuffer * inbuf, in_sync_meta = gst_buffer_get_gl_sync_meta (inbuf); if (in_sync_meta) - gst_gl_sync_meta_wait (in_sync_meta); + gst_gl_sync_meta_wait (in_sync_meta, context); if (filter_class->filter) filter_class->filter (filter, inbuf, outbuf); diff --git a/gst-libs/gst/gl/gstglsyncmeta.c b/gst-libs/gst/gl/gstglsyncmeta.c index 291edc0..1391a6d 100644 --- a/gst-libs/gst/gl/gstglsyncmeta.c +++ b/gst-libs/gst/gl/gstglsyncmeta.c @@ -41,7 +41,11 @@ GST_DEBUG_CATEGORY (GST_CAT_DEFAULT); GstGLSyncMeta * gst_buffer_add_gl_sync_meta (GstGLContext * context, GstBuffer * buffer) { - GstGLSyncMeta *meta = + GstGLSyncMeta *meta; + + g_return_val_if_fail (GST_GL_IS_CONTEXT (context), NULL); + + meta = (GstGLSyncMeta *) gst_buffer_add_meta ((buffer), GST_GL_SYNC_META_INFO, NULL); @@ -94,10 +98,13 @@ _wait (GstGLContext * context, GstGLSyncMeta * sync_meta) } void -gst_gl_sync_meta_wait (GstGLSyncMeta * sync_meta) +gst_gl_sync_meta_wait (GstGLSyncMeta * sync_meta, GstGLContext * context) { + if (sync_meta->context == context) + return; + if (sync_meta->glsync) { - gst_gl_context_thread_add (sync_meta->context, + gst_gl_context_thread_add (context, (GstGLContextThreadFunc) _wait, sync_meta); } } diff --git a/gst-libs/gst/gl/gstglsyncmeta.h b/gst-libs/gst/gl/gstglsyncmeta.h index 1ad1ae1..9d79435 100644 --- a/gst-libs/gst/gl/gstglsyncmeta.h +++ b/gst-libs/gst/gl/gstglsyncmeta.h @@ -47,7 +47,7 @@ const GstMetaInfo * gst_gl_sync_meta_get_info (void); GstGLSyncMeta * gst_buffer_add_gl_sync_meta (GstGLContext * context, GstBuffer *buffer); void gst_gl_sync_meta_set_sync_point (GstGLSyncMeta * sync, GstGLContext * context); -void gst_gl_sync_meta_wait (GstGLSyncMeta * sync); +void gst_gl_sync_meta_wait (GstGLSyncMeta * sync, GstGLContext * context); G_END_DECLS