static void gst_gl_filterblur_init (GstGLFilterBlur * filterblur, GstGLFilterBlurClass * klass) { filterblur->shader0 = NULL; filterblur->shader1 = NULL; filterblur->midtexture = 0; /* gaussian kernel (well, actually vector), size 9, standard * deviation 3.0 */ /* FIXME: eventually make this a runtime property */ fill_gaussian_kernel (filterblur->gauss_kernel, 7, 3.0); }
static void gst_gl_differencematte_init (GstGLDifferenceMatte * differencematte) { differencematte->shader[0] = NULL; differencematte->shader[1] = NULL; differencematte->shader[2] = NULL; differencematte->shader[3] = NULL; differencematte->location = NULL; differencematte->pixbuf = NULL; differencematte->savedbgtexture = 0; differencematte->newbgtexture = 0; differencematte->bg_has_changed = FALSE; fill_gaussian_kernel (differencematte->kernel, 7, 30.0); }
static void gst_gl_effects_xray_step_two (gint width, gint height, guint texture, gpointer data) { GstGLShader *shader; GstGLEffects *effects = GST_GL_EFFECTS (data); GstGLFilter *filter = GST_GL_FILTER (effects); GstGLContext *context = filter->context; GstGLFuncs *gl = context->gl_vtable; shader = g_hash_table_lookup (effects->shaderstable, "xray1"); if (!shader) { shader = gst_gl_shader_new (context); g_hash_table_insert (effects->shaderstable, "xray1", shader); } if (!kernel_ready) { fill_gaussian_kernel (gauss_kernel, 7, 1.5); kernel_ready = TRUE; } if (!gst_gl_shader_compile_and_check (shader, hconv7_fragment_source, GST_GL_SHADER_FRAGMENT_SOURCE)) { gst_gl_context_set_error (context, "Failed to initialize hconv7 shader"); GST_ELEMENT_ERROR (effects, RESOURCE, NOT_FOUND, ("%s", gst_gl_context_get_error ()), (NULL)); return; } gl->MatrixMode (GL_PROJECTION); gl->LoadIdentity (); gst_gl_shader_use (shader); gl->ActiveTexture (GL_TEXTURE1); gl->Enable (GL_TEXTURE_2D); gl->BindTexture (GL_TEXTURE_2D, texture); gl->Disable (GL_TEXTURE_2D); gst_gl_shader_set_uniform_1i (shader, "tex", 1); gst_gl_shader_set_uniform_1fv (shader, "kernel", 9, gauss_kernel); gst_gl_shader_set_uniform_1f (shader, "width", width); gst_gl_filter_draw_texture (filter, texture, width, height); }
static void gst_gl_effects_xray_step_two (gint width, gint height, guint texture, gpointer data) { GstGLEffects *effects = GST_GL_EFFECTS (data); GstGLShader *shader; shader = g_hash_table_lookup (effects->shaderstable, "xray1"); if (!shader) { shader = gst_gl_shader_new (); g_hash_table_insert (effects->shaderstable, "xray1", shader); } if (!kernel_ready) { fill_gaussian_kernel (gauss_kernel, 7, 1.5); kernel_ready = TRUE; } if (!gst_gl_shader_compile_and_check (shader, hconv7_fragment_source, GST_GL_SHADER_FRAGMENT_SOURCE)) { gst_gl_display_set_error (GST_GL_FILTER (effects)->display, "Failed to initialize hconv7 shader"); GST_ELEMENT_ERROR (effects, RESOURCE, NOT_FOUND, GST_GL_DISPLAY_ERR_MSG (GST_GL_FILTER (effects)->display), (NULL)); return; } glMatrixMode (GL_PROJECTION); glLoadIdentity (); gst_gl_shader_use (shader); glActiveTexture (GL_TEXTURE1); glEnable (GL_TEXTURE_RECTANGLE_ARB); glBindTexture (GL_TEXTURE_RECTANGLE_ARB, texture); glDisable (GL_TEXTURE_RECTANGLE_ARB); gst_gl_shader_set_uniform_1i (shader, "tex", 1); gst_gl_shader_set_uniform_1fv (shader, "kernel", 9, gauss_kernel); gst_gl_effects_draw_texture (effects, texture); }
float local_gaussian_blur_at(float s, float *x, int w, int h, int i, int j) { if (s < 0.1) return x[j*w+i]; int kw = gaussian_kernel_width(s); float k[kw*kw], c[kw*kw]; fill_gaussian_kernel(k, kw, s); fill_square(c, kw, x, w, h, i, j); float m = 0; for (int l = 0; l < kw*kw; l++) if (isfinite(c[l])) m += k[l]; for (int l = 0; l < kw*kw; l++) k[l] /= m; float r = 0; for (int l = 0; l < kw*kw; l++) if (isfinite(c[l])) r += k[l]*c[l]; return r; }
static void gst_gl_effects_xray_step_two (gint width, gint height, guint texture, gpointer data) { GstGLEffects *effects = GST_GL_EFFECTS (data); GstGLShader *shader; shader = g_hash_table_lookup (effects->shaderstable, "xray1"); if (!shader) { shader = gst_gl_shader_new (); g_hash_table_insert (effects->shaderstable, "xray1", shader); } if (!kernel_ready) { fill_gaussian_kernel (gauss_kernel, 7, 1.5); kernel_ready = TRUE; } g_return_if_fail (gst_gl_shader_compile_and_check (shader, hconv7_fragment_source, GST_GL_SHADER_FRAGMENT_SOURCE)); glMatrixMode (GL_PROJECTION); glLoadIdentity (); gst_gl_shader_use (shader); glActiveTexture (GL_TEXTURE1); glEnable (GL_TEXTURE_RECTANGLE_ARB); glBindTexture (GL_TEXTURE_RECTANGLE_ARB, texture); glDisable (GL_TEXTURE_RECTANGLE_ARB); gst_gl_shader_set_uniform_1i (shader, "tex", 1); gst_gl_shader_set_uniform_1fv (shader, "kernel", 9, gauss_kernel); gst_gl_effects_draw_texture (effects, texture); }