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);
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)) {
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);
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);
}
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);
}
}
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