static gboolean gst_gl_filter_glass_reset (GstBaseTransform * trans) { GstGLFilterGlass *glass_filter = GST_GL_FILTER_GLASS (trans); //blocking call, wait the opengl thread has destroyed the shader if (glass_filter->shader) gst_gl_context_del_shader (GST_GL_BASE_FILTER (trans)->context, glass_filter->shader); glass_filter->shader = NULL; if (glass_filter->passthrough_shader) gst_gl_context_del_shader (GST_GL_BASE_FILTER (trans)->context, glass_filter->passthrough_shader); glass_filter->passthrough_shader = NULL; return GST_BASE_TRANSFORM_CLASS (parent_class)->stop (trans); }
static void gst_gl_filter_cube_reset (GstGLFilter * filter) { GstGLFilterCube *cube_filter = GST_GL_FILTER_CUBE (filter); /* blocking call, wait the opengl thread has destroyed the shader */ if (cube_filter->shader) gst_gl_context_del_shader (filter->context, cube_filter->shader); cube_filter->shader = NULL; }
static void gst_gl_colorscale_del_gl_resources (GstGLFilter * filter) { GstGLColorscale *colorscale = GST_GL_COLORSCALE (filter); if (colorscale->shader) { gst_gl_context_del_shader (filter->context, colorscale->shader); colorscale->shader = NULL; } }
static void gst_gl_bumper_reset (GstGLFilter * filter) { GstGLBumper *bumper_filter = GST_GL_BUMPER (filter); //blocking call, wait the opengl thread has destroyed the shader if (bumper_filter->shader) gst_gl_context_del_shader (filter->context, bumper_filter->shader); bumper_filter->shader = NULL; }
static void gst_gl_transformation_reset (GstGLFilter * filter) { GstGLTransformation *transformation = GST_GL_TRANSFORMATION (filter); /* blocking call, wait until the opengl thread has destroyed the shader */ if (transformation->shader) gst_gl_context_del_shader (filter->context, transformation->shader); transformation->shader = NULL; }
static void gst_gl_effects_ghash_func_clean (gpointer key, gpointer value, gpointer data) { GstGLShader *shader = (GstGLShader *) value; GstGLFilter *filter = (GstGLFilter *) data; //blocking call, wait the opengl thread has destroyed the shader gst_gl_context_del_shader (filter->context, shader); value = NULL; }
static gboolean gst_gl_video_mixer_init_shader (GstGLMixer * mixer, GstCaps * outcaps) { GstGLVideoMixer *video_mixer = GST_GL_VIDEO_MIXER (mixer); if (video_mixer->shader) gst_gl_context_del_shader (GST_GL_BASE_MIXER (mixer)->context, video_mixer->shader); return gst_gl_context_gen_shader (GST_GL_BASE_MIXER (mixer)->context, video_mixer_v_src, video_mixer_f_src, &video_mixer->shader); }
static void gst_gl_video_mixer_reset (GstGLMixer * mixer) { GstGLVideoMixer *video_mixer = GST_GL_VIDEO_MIXER (mixer); GstGLContext *context = GST_GL_BASE_MIXER (mixer)->context; video_mixer->input_frames = NULL; GST_DEBUG_OBJECT (mixer, "context:%p", context); if (video_mixer->shader) gst_gl_context_del_shader (context, video_mixer->shader); video_mixer->shader = NULL; if (video_mixer->checker) gst_gl_context_del_shader (context, video_mixer->checker); video_mixer->checker = NULL; if (GST_GL_BASE_MIXER (mixer)->context) gst_gl_context_thread_add (context, (GstGLContextThreadFunc) _reset_gl, mixer); }
static gboolean gst_gl_colorscale_del_gl_resources (GstBaseTransform * trans) { GstGLColorscale *colorscale = GST_GL_COLORSCALE (trans); if (colorscale->shader) { gst_gl_context_del_shader (GST_GL_BASE_FILTER (trans)->context, colorscale->shader); colorscale->shader = NULL; } return GST_BASE_TRANSFORM_CLASS (parent_class)->stop (trans); }
static gboolean gst_gl_transformation_stop (GstBaseTransform * trans) { GstGLBaseFilter *basefilter = GST_GL_BASE_FILTER (trans); GstGLTransformation *transformation = GST_GL_TRANSFORMATION (trans); /* blocking call, wait until the opengl thread has destroyed the shader */ if (basefilter->context && transformation->shader) { gst_gl_context_del_shader (basefilter->context, transformation->shader); transformation->shader = NULL; } return GST_BASE_TRANSFORM_CLASS (parent_class)->stop (trans); }
static gboolean gst_gl_deinterlace_reset (GstBaseTransform * trans) { GstGLDeinterlace *deinterlace_filter = GST_GL_DEINTERLACE (trans); gst_buffer_replace (&deinterlace_filter->prev_buffer, NULL); //blocking call, wait the opengl thread has destroyed the shader if (deinterlace_filter->shader) gst_gl_context_del_shader (GST_GL_BASE_FILTER (trans)->context, deinterlace_filter->shader); deinterlace_filter->shader = NULL; return GST_BASE_TRANSFORM_CLASS (parent_class)->stop (trans); }