void gst_gl_effects_sobel (GstGLEffects * effects) { GstGLFilter *filter = GST_GL_FILTER (effects); GstGLShader *shader; shader = gst_gl_effects_get_fragment_shader (effects, "desat0", desaturate_fragment_source_gles2); gst_gl_filter_render_to_target_with_shader (filter, effects->intexture, effects->midtexture[0], shader); shader = gst_gl_effects_get_fragment_shader (effects, "hconv0", sep_sobel_hconv3_fragment_source_gles2); gst_gl_shader_use (shader); gst_gl_shader_set_uniform_1f (shader, "height", GST_VIDEO_INFO_HEIGHT (&filter->out_info)); gst_gl_filter_render_to_target_with_shader (filter, effects->midtexture[0], effects->midtexture[1], shader); shader = gst_gl_effects_get_fragment_shader (effects, "vconv0", sep_sobel_vconv3_fragment_source_gles2); gst_gl_shader_use (shader); gst_gl_shader_set_uniform_1f (shader, "width", GST_VIDEO_INFO_WIDTH (&filter->out_info)); gst_gl_filter_render_to_target_with_shader (filter, effects->midtexture[1], effects->midtexture[0], shader); shader = gst_gl_effects_get_fragment_shader (effects, "len0", sep_sobel_length_fragment_source_gles2); gst_gl_shader_use (shader); gst_gl_shader_set_uniform_1i (shader, "invert", effects->invert); gst_gl_filter_render_to_target_with_shader (filter, effects->midtexture[0], effects->outtexture, shader); }
static gboolean gst_gl_filtersobel_filter (GstGLFilter * filter, GstGLBuffer * inbuf, GstGLBuffer * outbuf) { GstGLFilterSobel *filtersobel = GST_GL_FILTERSOBEL (filter); gst_gl_filter_render_to_target_with_shader (filter, inbuf->texture, filtersobel->midtexture[0], filtersobel->desat); gst_gl_filter_render_to_target_with_shader (filter, filtersobel->midtexture[0], filtersobel->midtexture[1], filtersobel->hconv); gst_gl_filter_render_to_target_with_shader (filter, filtersobel->midtexture[1], filtersobel->midtexture[0], filtersobel->vconv); gst_gl_filter_render_to_target (filter, filtersobel->midtexture[0], outbuf->texture, gst_gl_filtersobel_length, filtersobel); return TRUE; }
void gst_gl_effects_sin (GstGLEffects * effects) { GstGLFilter *filter = GST_GL_FILTER (effects); GstGLShader *shader; shader = gst_gl_effects_get_fragment_shader (effects, "sin", sin_fragment_source_gles2); gst_gl_filter_render_to_target_with_shader (filter, effects->intexture, effects->outtexture, shader); }
static gboolean gst_gl_colorscale_filter_texture (GstGLFilter * filter, GstGLMemory * in_tex, GstGLMemory * out_tex) { GstGLColorscale *colorscale = GST_GL_COLORSCALE (filter); if (gst_gl_context_get_gl_api (GST_GL_BASE_FILTER (filter)->context)) gst_gl_filter_render_to_target_with_shader (filter, in_tex, out_tex, colorscale->shader); return TRUE; }
static gboolean gst_gl_colorscale_filter_texture (GstGLFilter * filter, guint in_tex, guint out_tex) { GstGLColorscale *colorscale; colorscale = GST_GL_COLORSCALE (filter); if (gst_gl_context_get_gl_api (GST_GL_BASE_FILTER (filter)->context) & (GST_GL_API_GLES2 | GST_GL_API_OPENGL3)) gst_gl_filter_render_to_target_with_shader (filter, TRUE, in_tex, out_tex, colorscale->shader); if (gst_gl_context_get_gl_api (GST_GL_BASE_FILTER (filter)->context) & GST_GL_API_OPENGL) gst_gl_filter_render_to_target (filter, TRUE, in_tex, out_tex, gst_gl_colorscale_callback, colorscale); return TRUE; }
static gboolean gst_gl_alpha_filter_texture (GstGLFilter * filter, GstGLMemory * in_tex, GstGLMemory * out_tex) { GstGLAlpha *alpha = GST_GL_ALPHA (filter); GstGLShader *shader; if (!alpha->alpha_shader) _create_shader (alpha); GST_OBJECT_LOCK (alpha); if (alpha->method == ALPHA_METHOD_SET) { shader = alpha->alpha_shader; gst_gl_shader_use (shader); gst_gl_shader_set_uniform_1f (shader, "alpha", alpha->alpha); } else { shader = alpha->chroma_key_shader; gst_gl_shader_use (shader); gst_gl_shader_set_uniform_1f (shader, "cb", alpha->cb); gst_gl_shader_set_uniform_1f (shader, "cr", alpha->cr); gst_gl_shader_set_uniform_1f (shader, "kg", alpha->kg); gst_gl_shader_set_uniform_1f (shader, "accept_angle_tg", alpha->accept_angle_tg); gst_gl_shader_set_uniform_1f (shader, "accept_angle_ctg", alpha->accept_angle_ctg); gst_gl_shader_set_uniform_1f (shader, "one_over_kc", alpha->one_over_kc); gst_gl_shader_set_uniform_1f (shader, "kfgy_scale", alpha->kfgy_scale); gst_gl_shader_set_uniform_1f (shader, "noise_level2", alpha->noise_level2); gst_gl_shader_set_uniform_1f (shader, "smin", 0.5 - alpha->black_sensitivity / 255.0); gst_gl_shader_set_uniform_1f (shader, "smax", 0.5 + alpha->white_sensitivity / 255.0); } GST_OBJECT_UNLOCK (alpha); gst_gl_filter_render_to_target_with_shader (filter, in_tex, out_tex, shader); return TRUE; }
static gboolean gst_gl_colorscale_filter_texture (GstGLFilter * filter, guint in_tex, guint out_tex) { GstGLColorscale *colorscale; colorscale = GST_GL_COLORSCALE (filter); #if GST_GL_HAVE_GLES2 if (gst_gl_context_get_gl_api (filter->context) & GST_GL_API_GLES2) gst_gl_filter_render_to_target_with_shader (filter, TRUE, in_tex, out_tex, colorscale->shader); #endif #if GST_GL_HAVE_OPENGL if (gst_gl_context_get_gl_api (filter->context) & GST_GL_API_OPENGL) gst_gl_filter_render_to_target (filter, TRUE, in_tex, out_tex, gst_gl_colorscale_callback, colorscale); #endif return TRUE; }