static void gst_gl_deinterlace_class_init (GstGLDeinterlaceClass * klass) { GObjectClass *gobject_class; GstElementClass *element_class; gobject_class = (GObjectClass *) klass; element_class = GST_ELEMENT_CLASS (klass); gobject_class->set_property = gst_gl_deinterlace_set_property; gobject_class->get_property = gst_gl_deinterlace_get_property; gst_element_class_set_metadata (element_class, "OpenGL deinterlacing filter", "Deinterlace", "Deinterlacing based on fragment shaders", "Julien Isorce <*****@*****.**>"); GST_BASE_TRANSFORM_CLASS (klass)->stop = gst_gl_deinterlace_reset; GST_GL_FILTER_CLASS (klass)->filter = gst_gl_deinterlace_filter; GST_GL_FILTER_CLASS (klass)->filter_texture = gst_gl_deinterlace_filter_texture; GST_GL_FILTER_CLASS (klass)->init_fbo = gst_gl_deinterlace_init_shader; GST_GL_BASE_FILTER_CLASS (klass)->supported_gl_api = GST_GL_API_OPENGL; }
static void gst_gl_overlay_class_init (GstGLOverlayClass * klass) { GObjectClass *gobject_class; gobject_class = (GObjectClass *) klass; gobject_class->set_property = gst_gl_overlay_set_property; gobject_class->get_property = gst_gl_overlay_get_property; GST_GL_FILTER_CLASS (klass)->filter = gst_gl_overlay_filter; GST_GL_FILTER_CLASS (klass)->display_init_cb = gst_gl_overlay_init_gl_resources; GST_GL_FILTER_CLASS (klass)->display_reset_cb = gst_gl_overlay_reset_gl_resources; GST_GL_FILTER_CLASS (klass)->onStart = gst_gl_overlay_init_resources; GST_GL_FILTER_CLASS (klass)->onStop = gst_gl_overlay_reset_resources; g_object_class_install_property (gobject_class, PROP_LOCATION, g_param_spec_string ("location", "Location of the image", "Location of the image", NULL, G_PARAM_READWRITE)); /* g_object_class_install_property (gobject_class, PROP_STRETCH, g_param_spec_boolean ("stretch", "Stretch the image to texture size", "Stretch the image to fit video texture size", TRUE, G_PARAM_READWRITE)); */ }
static void gst_gl_differencematte_class_init (GstGLDifferenceMatteClass * klass) { GObjectClass *gobject_class; GstElementClass *element_class; gobject_class = (GObjectClass *) klass; element_class = GST_ELEMENT_CLASS (klass); gobject_class->set_property = gst_gl_differencematte_set_property; gobject_class->get_property = gst_gl_differencematte_get_property; GST_GL_FILTER_CLASS (klass)->filter_texture = gst_gl_differencematte_filter_texture; GST_GL_FILTER_CLASS (klass)->display_init_cb = gst_gl_differencematte_init_gl_resources; GST_GL_FILTER_CLASS (klass)->display_reset_cb = gst_gl_differencematte_reset_gl_resources; g_object_class_install_property (gobject_class, PROP_LOCATION, g_param_spec_string ("location", "Background image location", "Background image location", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); gst_element_class_set_metadata (element_class, "Gstreamer OpenGL DifferenceMatte", "Filter/Effect/Video", "Saves a background frame and replace it with a pixbuf", "Filippo Argiolas <*****@*****.**>"); GST_GL_BASE_FILTER_CLASS (klass)->supported_gl_api = GST_GL_API_OPENGL | GST_GL_API_OPENGL3 | GST_GL_API_GLES2; }
static void gst_vr_compositor_class_init (GstVRCompositorClass * klass) { GObjectClass *gobject_class; GstElementClass *element_class; GstBaseTransformClass *base_transform_class; gobject_class = (GObjectClass *) klass; element_class = GST_ELEMENT_CLASS (klass); base_transform_class = GST_BASE_TRANSFORM_CLASS (klass); gobject_class->set_property = gst_vr_compositor_set_property; gobject_class->get_property = gst_vr_compositor_get_property; base_transform_class->src_event = gst_vr_compositor_src_event; gst_gl_filter_add_rgba_pad_templates (GST_GL_FILTER_CLASS (klass)); GST_GL_FILTER_CLASS (klass)->init_fbo = gst_vr_compositor_init_scene; // GST_GL_FILTER_CLASS (klass)->display_reset_cb = gst_vr_compositor_reset_gl; GST_GL_FILTER_CLASS (klass)->set_caps = gst_vr_compositor_set_caps; GST_GL_FILTER_CLASS (klass)->filter_texture = gst_vr_compositor_filter_texture; GST_BASE_TRANSFORM_CLASS (klass)->stop = gst_vr_compositor_stop; gst_element_class_set_metadata (element_class, "VR compositor", "Filter/Effect/Video", "Transform video for VR", "Lubosz Sarnecki <*****@*****.**>\n"); GST_GL_BASE_FILTER_CLASS (klass)->supported_gl_api = GST_GL_API_OPENGL3; }
static void gst_gl_bumper_class_init (GstGLBumperClass * klass) { GObjectClass *gobject_class; GstElementClass *element_class; gobject_class = (GObjectClass *) klass; element_class = GST_ELEMENT_CLASS (klass); gobject_class->set_property = gst_gl_bumper_set_property; gobject_class->get_property = gst_gl_bumper_get_property; GST_GL_FILTER_CLASS (klass)->filter_texture = gst_gl_bumper_filter_texture; GST_GL_FILTER_CLASS (klass)->display_init_cb = gst_gl_bumper_init_resources; GST_GL_FILTER_CLASS (klass)->display_reset_cb = gst_gl_bumper_reset_resources; GST_GL_FILTER_CLASS (klass)->onInitFBO = gst_gl_bumper_init_shader; GST_GL_FILTER_CLASS (klass)->onReset = gst_gl_bumper_reset; g_object_class_install_property (gobject_class, PROP_LOCATION, g_param_spec_string ("location", "Normal map location", "Normal map location", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); gst_element_class_set_metadata (element_class, "OpenGL bumper filter", "Filter/Effect/Video", "Bump mapping filter", "Cyril Comparon <*****@*****.**>, " "Julien Isorce <*****@*****.**>"); }
static void gst_gl_filter_cube_class_init (GstGLFilterCubeClass * klass) { GObjectClass *gobject_class; GstElementClass *element_class; gobject_class = (GObjectClass *) klass; element_class = GST_ELEMENT_CLASS (klass); gobject_class->set_property = gst_gl_filter_cube_set_property; gobject_class->get_property = gst_gl_filter_cube_get_property; GST_GL_BASE_FILTER_CLASS (klass)->gl_start = gst_gl_filter_cube_gl_start; GST_GL_BASE_FILTER_CLASS (klass)->gl_stop = gst_gl_filter_cube_gl_stop; GST_GL_FILTER_CLASS (klass)->set_caps = gst_gl_filter_cube_set_caps; GST_GL_FILTER_CLASS (klass)->filter_texture = gst_gl_filter_cube_filter_texture; g_object_class_install_property (gobject_class, PROP_RED, g_param_spec_float ("red", "Red", "Background red color", 0.0f, 1.0f, 0.0f, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_GREEN, g_param_spec_float ("green", "Green", "Background green color", 0.0f, 1.0f, 0.0f, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_BLUE, g_param_spec_float ("blue", "Blue", "Background blue color", 0.0f, 1.0f, 0.0f, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_FOVY, g_param_spec_double ("fovy", "Fovy", "Field of view angle in degrees", 0.0, 180.0, 45.0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_ASPECT, g_param_spec_double ("aspect", "Aspect", "Field of view in the x direction", 0.0, 100, 0.0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_ZNEAR, g_param_spec_double ("znear", "Znear", "Specifies the distance from the viewer to the near clipping plane", 0.0, 100.0, 0.1, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_ZFAR, g_param_spec_double ("zfar", "Zfar", "Specifies the distance from the viewer to the far clipping plane", 0.0, 1000.0, 100.0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); gst_element_class_set_metadata (element_class, "OpenGL cube filter", "Filter/Effect/Video", "Map input texture on the 6 cube faces", "Julien Isorce <*****@*****.**>"); GST_GL_BASE_FILTER_CLASS (klass)->supported_gl_api = GST_GL_API_OPENGL | GST_GL_API_GLES2 | GST_GL_API_OPENGL3; }
static void gst_gl_filter_glass_class_init (GstGLFilterGlassClass * klass) { GObjectClass *gobject_class; gobject_class = (GObjectClass *) klass; gobject_class->set_property = gst_gl_filter_glass_set_property; gobject_class->get_property = gst_gl_filter_glass_get_property; GST_GL_FILTER_CLASS (klass)->filter = gst_gl_filter_glass_filter; GST_GL_FILTER_CLASS (klass)->onInitFBO = gst_gl_filter_glass_init_shader; GST_GL_FILTER_CLASS (klass)->onReset = gst_gl_filter_glass_reset; }
static void gst_gl_deinterlace_class_init (GstGLDeinterlaceClass * klass) { GObjectClass *gobject_class; gobject_class = (GObjectClass *) klass; gobject_class->set_property = gst_gl_deinterlace_set_property; gobject_class->get_property = gst_gl_deinterlace_get_property; GST_GL_FILTER_CLASS (klass)->filter = gst_gl_deinterlace_filter; GST_GL_FILTER_CLASS (klass)->onInitFBO = gst_gl_deinterlace_init_shader; GST_GL_FILTER_CLASS (klass)->onReset = gst_gl_deinterlace_reset; }
static void gst_gl_colorscale_class_init (GstGLColorscaleClass * klass) { GObjectClass *gobject_class; GstElementClass *element_class; GstGLFilterClass *filter_class; GstBaseTransformClass *basetransform_class = GST_BASE_TRANSFORM_CLASS (klass); gobject_class = (GObjectClass *) klass; element_class = GST_ELEMENT_CLASS (klass); filter_class = GST_GL_FILTER_CLASS (klass); gobject_class->set_property = gst_gl_colorscale_set_property; gobject_class->get_property = gst_gl_colorscale_get_property; gst_element_class_set_metadata (element_class, "OpenGL color scale", "Filter/Effect/Video", "Colorspace converter and video scaler", "Julien Isorce <*****@*****.**>"); filter_class->init_fbo = GST_DEBUG_FUNCPTR (gst_gl_colorscale_gen_gl_resources); filter_class->filter_texture = gst_gl_colorscale_filter_texture; basetransform_class->stop = GST_DEBUG_FUNCPTR (gst_gl_colorscale_del_gl_resources); basetransform_class->passthrough_on_same_caps = TRUE; GST_GL_BASE_FILTER_CLASS (klass)->supported_gl_api = GST_GL_API_OPENGL | GST_GL_API_OPENGL3 | GST_GL_API_GLES2; }
static void gst_gl_colorscale_class_init (GstGLColorscaleClass * klass) { GObjectClass *gobject_class; GstElementClass *element_class; GstGLFilterClass *filter_class; gobject_class = (GObjectClass *) klass; element_class = GST_ELEMENT_CLASS (klass); filter_class = GST_GL_FILTER_CLASS (klass); gobject_class->set_property = gst_gl_colorscale_set_property; gobject_class->get_property = gst_gl_colorscale_get_property; gst_element_class_set_metadata (element_class, "OpenGL color scale", "Filter/Effect/Video", "Colorspace converter and video scaler", "Julien Isorce <*****@*****.**>"); #if GST_GL_HAVE_GLES2 filter_class->onInitFBO = GST_DEBUG_FUNCPTR (gst_gl_colorscale_gen_gl_resources); filter_class->onStop = GST_DEBUG_FUNCPTR (gst_gl_colorscale_del_gl_resources); #endif filter_class->filter_texture = gst_gl_colorscale_filter_texture; }
static void gst_gl_filterblur_class_init (GstGLFilterBlurClass * klass) { GObjectClass *gobject_class; gobject_class = (GObjectClass *) klass; gobject_class->set_property = gst_gl_filterblur_set_property; gobject_class->get_property = gst_gl_filterblur_get_property; GST_GL_FILTER_CLASS (klass)->filter = gst_gl_filterblur_filter; GST_GL_FILTER_CLASS (klass)->display_init_cb = gst_gl_filterblur_init_resources; GST_GL_FILTER_CLASS (klass)->display_reset_cb = gst_gl_filterblur_reset_resources; GST_GL_FILTER_CLASS (klass)->onInitFBO = gst_gl_filterblur_init_shader; GST_GL_FILTER_CLASS (klass)->onReset = gst_gl_filter_filterblur_reset; }
static void gst_gl_filter_cube_class_init (GstGLFilterCubeClass * klass) { GObjectClass *gobject_class; gobject_class = (GObjectClass *) klass; gobject_class->set_property = gst_gl_filter_cube_set_property; gobject_class->get_property = gst_gl_filter_cube_get_property; #ifdef OPENGL_ES2 GST_GL_FILTER_CLASS (klass)->onInitFBO = gst_gl_filter_cube_init_shader; GST_GL_FILTER_CLASS (klass)->onReset = gst_gl_filter_cube_reset; #endif GST_GL_FILTER_CLASS (klass)->set_caps = gst_gl_filter_cube_set_caps; GST_GL_FILTER_CLASS (klass)->filter = gst_gl_filter_cube_filter; g_object_class_install_property (gobject_class, PROP_RED, g_param_spec_float ("red", "Red", "Background red color", 0.0f, 1.0f, 0.0f, G_PARAM_WRITABLE)); g_object_class_install_property (gobject_class, PROP_GREEN, g_param_spec_float ("green", "Green", "Background reen color", 0.0f, 1.0f, 0.0f, G_PARAM_WRITABLE)); g_object_class_install_property (gobject_class, PROP_BLUE, g_param_spec_float ("blue", "Blue", "Background blue color", 0.0f, 1.0f, 0.0f, G_PARAM_WRITABLE)); g_object_class_install_property (gobject_class, PROP_FOVY, g_param_spec_double ("fovy", "Fovy", "Field of view angle in degrees", 0.0, 180.0, 45.0, G_PARAM_WRITABLE)); g_object_class_install_property (gobject_class, PROP_ASPECT, g_param_spec_double ("aspect", "Aspect", "Field of view in the x direction", 0.0, 100, 0.0, G_PARAM_WRITABLE)); g_object_class_install_property (gobject_class, PROP_ZNEAR, g_param_spec_double ("znear", "Znear", "Specifies the distance from the viewer to the near clipping plane", 0.0, 100.0, 0.1, G_PARAM_WRITABLE)); g_object_class_install_property (gobject_class, PROP_ZFAR, g_param_spec_double ("zfar", "Zfar", "Specifies the distance from the viewer to the far clipping plane", 0.0, 1000.0, 100.0, G_PARAM_WRITABLE)); }
static void gst_gl_filter_reflected_screen_class_init (GstGLFilterReflectedScreenClass * klass) { GObjectClass *gobject_class; GstElementClass *element_class; gobject_class = (GObjectClass *) klass; element_class = GST_ELEMENT_CLASS (klass); gobject_class->set_property = gst_gl_filter_reflected_screen_set_property; gobject_class->get_property = gst_gl_filter_reflected_screen_get_property; GST_GL_FILTER_CLASS (klass)->filter_texture = gst_gl_filter_reflected_screen_filter_texture; g_object_class_install_property (gobject_class, PROP_ACTIVE_GRAPHIC_MODE, g_param_spec_boolean ("active-graphic-mode", "Activate graphic mode", "Allow user to activate stencil buffer and blending.", TRUE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_SEPARATED_SCREEN, g_param_spec_boolean ("separated-screen", "Create a separation space", "Allow to insert a space between the two screen. Will cancel 'show floor' if active. Value are TRUE or FALSE(default)", FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_SHOW_FLOOR, g_param_spec_boolean ("show-floor", "Show the support", "Allow the user to show the supportive floor. Will cancel 'separated screen' if active. Value are TRUE(default) or FALSE", TRUE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_FOVY, g_param_spec_double ("fovy", "Fovy", "Field of view angle in degrees", 0.0, 180.0, 60, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_ASPECT, g_param_spec_double ("aspect", "Aspect", "Field of view in the x direction", 1.0, 100, 1.0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_ZNEAR, g_param_spec_double ("znear", "Znear", "Specifies the distance from the viewer to the near clipping plane", 0.0000000001, 100.0, 0.1, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_ZFAR, g_param_spec_double ("zfar", "Zfar", "Specifies the distance from the viewer to the far clipping plane", 0.0, 1000.0, 100.0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); gst_element_class_set_metadata (element_class, "OpenGL Reflected Screen filter", "Filter/Effect/Video", "Reflected Screen Filter", "Pierre POUZOL <*****@*****.**>"); }
static void gst_gl_bumper_class_init (GstGLBumperClass * klass) { GObjectClass *gobject_class; gobject_class = (GObjectClass *) klass; gobject_class->set_property = gst_gl_bumper_set_property; gobject_class->get_property = gst_gl_bumper_get_property; GST_GL_FILTER_CLASS (klass)->filter = gst_gl_bumper_filter; GST_GL_FILTER_CLASS (klass)->display_init_cb = gst_gl_bumper_init_resources; GST_GL_FILTER_CLASS (klass)->display_reset_cb = gst_gl_bumper_reset_resources; GST_GL_FILTER_CLASS (klass)->onInitFBO = gst_gl_bumper_init_shader; GST_GL_FILTER_CLASS (klass)->onReset = gst_gl_bumper_reset; g_object_class_install_property (gobject_class, PROP_LOCATION, g_param_spec_string ("location", "Normal map location", "Normal map location", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); }
static void gst_gl_effects_class_init (GstGLEffectsClass * klass) { GObjectClass *gobject_class; gobject_class = (GObjectClass *) klass; gobject_class->set_property = gst_gl_effects_set_property; gobject_class->get_property = gst_gl_effects_get_property; GST_GL_FILTER_CLASS (klass)->filter = gst_gl_effects_filter; GST_GL_FILTER_CLASS (klass)->display_init_cb = gst_gl_effects_init_gl_resources; GST_GL_FILTER_CLASS (klass)->display_reset_cb = gst_gl_effects_reset_gl_resources; GST_GL_FILTER_CLASS (klass)->onStart = gst_gl_effects_init_resources; GST_GL_FILTER_CLASS (klass)->onStop = gst_gl_effects_reset_resources; GST_GL_FILTER_CLASS (klass)->onInitFBO = gst_gl_effects_on_init_gl_context; g_object_class_install_property (gobject_class, PROP_EFFECT, g_param_spec_enum ("effect", "Effect", "Select which effect apply to GL video texture", GST_TYPE_GL_EFFECTS_EFFECT, GST_GL_EFFECT_IDENTITY, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_HSWAP, g_param_spec_boolean ("hswap", "Horizontal Swap", "Switch video texture left to right, useful with webcams", FALSE, G_PARAM_READWRITE)); }
static void gst_gl_deinterlace_class_init (GstGLDeinterlaceClass * klass) { GObjectClass *gobject_class; GstElementClass *element_class; gobject_class = (GObjectClass *) klass; element_class = GST_ELEMENT_CLASS (klass); gst_gl_filter_add_rgba_pad_templates (GST_GL_FILTER_CLASS (klass)); gobject_class->set_property = gst_gl_deinterlace_set_property; gobject_class->get_property = gst_gl_deinterlace_get_property; gst_element_class_set_metadata (element_class, "OpenGL deinterlacing filter", "Deinterlace", "Deinterlacing based on fragment shaders", "Julien Isorce <*****@*****.**>"); g_object_class_install_property (gobject_class, PROP_METHOD, g_param_spec_enum ("method", "Deinterlace Method", "Select which deinterlace method apply to GL video texture", GST_TYPE_GL_DEINTERLACE_METHODS, GST_GL_DEINTERLACE_VFIR, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); GST_BASE_TRANSFORM_CLASS (klass)->start = gst_gl_deinterlace_start; GST_BASE_TRANSFORM_CLASS (klass)->stop = gst_gl_deinterlace_reset; GST_GL_FILTER_CLASS (klass)->filter = gst_gl_deinterlace_filter; GST_GL_FILTER_CLASS (klass)->filter_texture = gst_gl_deinterlace_filter_texture; GST_GL_FILTER_CLASS (klass)->init_fbo = gst_gl_deinterlace_init_fbo; GST_GL_BASE_FILTER_CLASS (klass)->supported_gl_api = GST_GL_API_OPENGL | GST_GL_API_GLES2 | GST_GL_API_OPENGL3; }
static void gst_gl_differencematte_class_init (GstGLDifferenceMatteClass * klass) { GObjectClass *gobject_class; gobject_class = (GObjectClass *) klass; gobject_class->set_property = gst_gl_differencematte_set_property; gobject_class->get_property = gst_gl_differencematte_get_property; GST_GL_FILTER_CLASS (klass)->filter = gst_gl_differencematte_filter; GST_GL_FILTER_CLASS (klass)->display_init_cb = gst_gl_differencematte_init_gl_resources; GST_GL_FILTER_CLASS (klass)->display_reset_cb = gst_gl_differencematte_reset_gl_resources; GST_GL_FILTER_CLASS (klass)->onStart = gst_gl_differencematte_init_resources; GST_GL_FILTER_CLASS (klass)->onStop = gst_gl_differencematte_reset_resources; g_object_class_install_property (gobject_class, PROP_LOCATION, g_param_spec_string ("location", "Background image location", "Background image location", NULL, G_PARAM_READWRITE)); }
static void gst_gl_filter_glass_class_init (GstGLFilterGlassClass * klass) { GObjectClass *gobject_class; GstElementClass *element_class; gobject_class = (GObjectClass *) klass; element_class = GST_ELEMENT_CLASS (klass); gobject_class->set_property = gst_gl_filter_glass_set_property; gobject_class->get_property = gst_gl_filter_glass_get_property; gst_element_class_set_metadata (element_class, "OpenGL glass filter", "Filter/Effect/Video", "Glass Filter", "Julien Isorce <*****@*****.**>"); GST_GL_FILTER_CLASS (klass)->filter_texture = gst_gl_filter_glass_filter_texture; GST_GL_FILTER_CLASS (klass)->init_fbo = gst_gl_filter_glass_init_shader; GST_BASE_TRANSFORM_CLASS (klass)->stop = gst_gl_filter_glass_reset; GST_GL_BASE_FILTER_CLASS (klass)->supported_gl_api = GST_GL_API_OPENGL; }
static void gst_gl_filtersobel_class_init (GstGLFilterSobelClass * klass) { GObjectClass *gobject_class; gobject_class = (GObjectClass *) klass; gobject_class->set_property = gst_gl_filtersobel_set_property; gobject_class->get_property = gst_gl_filtersobel_get_property; GST_GL_FILTER_CLASS (klass)->filter = gst_gl_filtersobel_filter; GST_GL_FILTER_CLASS (klass)->display_init_cb = gst_gl_filtersobel_init_resources; GST_GL_FILTER_CLASS (klass)->display_reset_cb = gst_gl_filtersobel_reset_resources; GST_GL_FILTER_CLASS (klass)->onInitFBO = gst_gl_filtersobel_init_shader; GST_GL_FILTER_CLASS (klass)->onReset = gst_gl_filter_filtersobel_reset; g_object_class_install_property (gobject_class, PROP_INVERT, g_param_spec_boolean ("invert", "Invert the colors", "Invert colors to get dark edges on bright background", FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); }
static void gst_gl_effects_class_init (GstGLEffectsClass * klass) { GObjectClass *gobject_class; GstElementClass *element_class; gobject_class = (GObjectClass *) klass; element_class = GST_ELEMENT_CLASS (klass); gobject_class->set_property = gst_gl_effects_set_property; gobject_class->get_property = gst_gl_effects_get_property; GST_GL_FILTER_CLASS (klass)->filter_texture = gst_gl_effects_filter_texture; GST_GL_FILTER_CLASS (klass)->display_init_cb = gst_gl_effects_init_gl_resources; GST_GL_FILTER_CLASS (klass)->display_reset_cb = gst_gl_effects_reset_gl_resources; GST_GL_FILTER_CLASS (klass)->onStart = gst_gl_effects_init_resources; GST_GL_FILTER_CLASS (klass)->onStop = gst_gl_effects_reset_resources; GST_GL_FILTER_CLASS (klass)->onInitFBO = gst_gl_effects_on_init_gl_context; g_object_class_install_property (gobject_class, PROP_EFFECT, g_param_spec_enum ("effect", "Effect", "Select which effect apply to GL video texture", GST_TYPE_GL_EFFECTS_EFFECT, GST_GL_EFFECT_IDENTITY, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_HSWAP, g_param_spec_boolean ("hswap", "Horizontal Swap", "Switch video texture left to right, useful with webcams", FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); gst_element_class_set_metadata (element_class, "Gstreamer OpenGL Effects", "Filter/Effect/Video", "GL Shading Language effects", "Filippo Argiolas <*****@*****.**>"); }
static void gst_gl_transformation_class_init (GstGLTransformationClass * klass) { GObjectClass *gobject_class; GstElementClass *element_class; gobject_class = (GObjectClass *) klass; element_class = GST_ELEMENT_CLASS (klass); gobject_class->set_property = gst_gl_transformation_set_property; gobject_class->get_property = gst_gl_transformation_get_property; GST_GL_FILTER_CLASS (klass)->onInitFBO = gst_gl_transformation_init_shader; GST_GL_FILTER_CLASS (klass)->onReset = gst_gl_transformation_reset; GST_GL_FILTER_CLASS (klass)->set_caps = gst_gl_transformation_set_caps; GST_GL_FILTER_CLASS (klass)->filter_texture = gst_gl_transformation_filter_texture; g_object_class_install_property (gobject_class, PROP_FOVY, g_param_spec_float ("fovy", "Fovy", "Field of view angle in degrees", 0.0, G_MAXFLOAT, 90.0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_ORTHO, g_param_spec_boolean ("ortho", "Orthographic", "Use orthographic projection", FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); /* Rotation */ g_object_class_install_property (gobject_class, PROP_ROTATION_X, g_param_spec_float ("rotation-x", "X Rotation", "Rotates the video around the X-Axis in degrees.", -G_MAXFLOAT, G_MAXFLOAT, 0.0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_ROTATION_Y, g_param_spec_float ("rotation-y", "Y Rotation", "Rotates the video around the Y-Axis in degrees.", -G_MAXFLOAT, G_MAXFLOAT, 0.0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_ROTATION_Z, g_param_spec_float ("rotation-z", "Z Rotation", "Rotates the video around the Z-Axis in degrees.", -G_MAXFLOAT, G_MAXFLOAT, 0.0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); /* Translation */ g_object_class_install_property (gobject_class, PROP_TRANSLATION_X, g_param_spec_float ("translation-x", "X Translation", "Translates the video at the X-Axis.", -G_MAXFLOAT, G_MAXFLOAT, 0.0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_TRANSLATION_Y, g_param_spec_float ("translation-y", "Y Translation", "Translates the video at the Y-Axis.", -G_MAXFLOAT, G_MAXFLOAT, 0.0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_TRANSLATION_Z, g_param_spec_float ("translation-z", "Z Translation", "Translates the video at the Z-Axis.", -G_MAXFLOAT, G_MAXFLOAT, 0.0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); /* Scale */ g_object_class_install_property (gobject_class, PROP_SCALE_X, g_param_spec_float ("scale-x", "X Scale", "Scale multiplierer for the X-Axis.", 0.0, G_MAXFLOAT, 1.0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_SCALE_Y, g_param_spec_float ("scale-y", "Y Scale", "Scale multiplierer for the Y-Axis.", 0.0, G_MAXFLOAT, 1.0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); gst_element_class_set_metadata (element_class, "OpenGL transformation filter", "Filter/Effect/Video", "Transform video on the GPU", "Lubosz Sarnecki <*****@*****.**>"); }
static void gst_gl_view_convert_element_class_init (GstGLViewConvertElementClass * klass) { GObjectClass *gobject_class; GstElementClass *element_class; gobject_class = (GObjectClass *) klass; element_class = GST_ELEMENT_CLASS (klass); gst_gl_filter_add_rgba_pad_templates (GST_GL_FILTER_CLASS (klass)); gobject_class->set_property = gst_gl_view_convert_element_set_property; gobject_class->get_property = gst_gl_view_convert_element_get_property; gobject_class->dispose = gst_gl_view_convert_dispose; gst_element_class_set_metadata (element_class, "OpenGL Multiview/3D conversion filter", "Filter", "Convert stereoscopic/multiview video formats", "Jan Schmidt <*****@*****.**>\n" "Matthew Waters <*****@*****.**>"); GST_GL_FILTER_CLASS (klass)->set_caps = gst_gl_view_convert_element_set_caps; GST_GL_FILTER_CLASS (klass)->transform_internal_caps = gst_gl_view_convert_element_transform_internal_caps; GST_BASE_TRANSFORM_CLASS (klass)->stop = gst_gl_view_convert_element_stop; GST_BASE_TRANSFORM_CLASS (klass)->fixate_caps = gst_gl_view_convert_element_fixate_caps; GST_BASE_TRANSFORM_CLASS (klass)->submit_input_buffer = gst_gl_view_convert_element_submit_input_buffer; GST_BASE_TRANSFORM_CLASS (klass)->generate_output = gst_gl_view_convert_element_generate_output_buffer; g_object_class_install_property (gobject_class, PROP_INPUT_LAYOUT, g_param_spec_enum ("input-mode-override", "Input Multiview Mode Override", "Override any input information about multiview layout", GST_TYPE_VIDEO_MULTIVIEW_FRAME_PACKING, GST_VIDEO_MULTIVIEW_MODE_NONE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_INPUT_FLAGS, g_param_spec_flags ("input-flags-override", "Input Multiview Flags Override", "Override any input information about multiview layout flags", GST_TYPE_VIDEO_MULTIVIEW_FLAGS, GST_VIDEO_MULTIVIEW_FLAGS_NONE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_OUTPUT_LAYOUT, g_param_spec_enum ("output-mode-override", "Output Multiview Mode Override", "Override automatic output mode selection for multiview layout", GST_TYPE_VIDEO_MULTIVIEW_MODE, GST_VIDEO_MULTIVIEW_MODE_NONE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_OUTPUT_FLAGS, g_param_spec_flags ("output-flags-override", "Output Multiview Flags Override", "Override automatic negotiation for output multiview layout flags", GST_TYPE_VIDEO_MULTIVIEW_FLAGS, GST_VIDEO_MULTIVIEW_FLAGS_NONE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_OUTPUT_DOWNMIX_MODE, g_param_spec_enum ("downmix-mode", "Mode for mono downmixed output", "Output anaglyph type to generate when downmixing to mono", GST_TYPE_GL_STEREO_DOWNMIX_MODE_TYPE, DEFAULT_DOWNMIX, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); }
static void gst_gl_transformation_class_init (GstGLTransformationClass * klass) { GObjectClass *gobject_class; GstElementClass *element_class; gobject_class = (GObjectClass *) klass; element_class = GST_ELEMENT_CLASS (klass); gobject_class->set_property = gst_gl_transformation_set_property; gobject_class->get_property = gst_gl_transformation_get_property; GST_GL_FILTER_CLASS (klass)->init_fbo = gst_gl_transformation_init_shader; GST_GL_FILTER_CLASS (klass)->display_reset_cb = gst_gl_transformation_reset_gl; GST_GL_FILTER_CLASS (klass)->set_caps = gst_gl_transformation_set_caps; GST_GL_FILTER_CLASS (klass)->filter_texture = gst_gl_transformation_filter_texture; GST_BASE_TRANSFORM_CLASS (klass)->stop = gst_gl_transformation_stop; g_object_class_install_property (gobject_class, PROP_FOV, g_param_spec_float ("fov", "Fov", "Field of view angle in degrees", 0.0, G_MAXFLOAT, 90.0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_ORTHO, g_param_spec_boolean ("ortho", "Orthographic", "Use orthographic projection", FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); /* Rotation */ g_object_class_install_property (gobject_class, PROP_ROTATION_X, g_param_spec_float ("rotation-x", "X Rotation", "Rotates the video around the X-Axis in degrees.", -G_MAXFLOAT, G_MAXFLOAT, 0.0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_ROTATION_Y, g_param_spec_float ("rotation-y", "Y Rotation", "Rotates the video around the Y-Axis in degrees.", -G_MAXFLOAT, G_MAXFLOAT, 0.0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_ROTATION_Z, g_param_spec_float ("rotation-z", "Z Rotation", "Rotates the video around the Z-Axis in degrees.", -G_MAXFLOAT, G_MAXFLOAT, 0.0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); /* Translation */ g_object_class_install_property (gobject_class, PROP_TRANSLATION_X, g_param_spec_float ("translation-x", "X Translation", "Translates the video at the X-Axis, in universal [0-1] coordinate.", -G_MAXFLOAT, G_MAXFLOAT, 0.0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_TRANSLATION_Y, g_param_spec_float ("translation-y", "Y Translation", "Translates the video at the Y-Axis, in universal [0-1] coordinate.", -G_MAXFLOAT, G_MAXFLOAT, 0.0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_TRANSLATION_Z, g_param_spec_float ("translation-z", "Z Translation", "Translates the video at the Z-Axis, in universal [0-1] coordinate.", -G_MAXFLOAT, G_MAXFLOAT, 0.0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); /* Scale */ g_object_class_install_property (gobject_class, PROP_SCALE_X, g_param_spec_float ("scale-x", "X Scale", "Scale multiplier for the X-Axis.", 0.0, G_MAXFLOAT, 1.0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_SCALE_Y, g_param_spec_float ("scale-y", "Y Scale", "Scale multiplier for the Y-Axis.", 0.0, G_MAXFLOAT, 1.0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); /* MVP */ g_object_class_install_property (gobject_class, PROP_MVP, g_param_spec_boxed ("mvp-matrix", "Modelview Projection Matrix", "The final Graphene 4x4 Matrix for transformation", GRAPHENE_TYPE_MATRIX, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); gst_element_class_set_metadata (element_class, "OpenGL transformation filter", "Filter/Effect/Video", "Transform video on the GPU", "Lubosz Sarnecki <*****@*****.**>"); GST_GL_BASE_FILTER_CLASS (klass)->supported_gl_api = GST_GL_API_OPENGL | GST_GL_API_OPENGL3 | GST_GL_API_GLES2; }
static void gst_gl_alpha_class_init (GstGLAlphaClass * klass) { GObjectClass *gobject_class = (GObjectClass *) klass; GstElementClass *gstelement_class = (GstElementClass *) klass; GstBaseTransformClass *trans_class = (GstBaseTransformClass *) klass; GstGLBaseFilterClass *base_filter_class = (GstGLBaseFilterClass *) klass; GstGLFilterClass *filter_class = (GstGLFilterClass *) klass; GST_DEBUG_CATEGORY_INIT (glalpha_debug, "glalpha", 0, "glalpha"); gst_gl_filter_add_rgba_pad_templates (GST_GL_FILTER_CLASS (klass)); gobject_class->set_property = gst_gl_alpha_set_property; gobject_class->get_property = gst_gl_alpha_get_property; g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_METHOD, g_param_spec_enum ("method", "Method", "How the alpha channels should be created", GST_TYPE_GL_ALPHA_METHOD, DEFAULT_METHOD, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_ALPHA, g_param_spec_double ("alpha", "Alpha", "The value for the alpha channel", 0.0, 1.0, DEFAULT_ALPHA, G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_TARGET_R, g_param_spec_uint ("target-r", "Target Red", "The red color value for custom RGB chroma keying", 0, 255, DEFAULT_TARGET_R, G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_TARGET_G, g_param_spec_uint ("target-g", "Target Green", "The green color value for custom RGB chroma keying", 0, 255, DEFAULT_TARGET_G, G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_TARGET_B, g_param_spec_uint ("target-b", "Target Blue", "The blue color value for custom RGB chroma keying", 0, 255, DEFAULT_TARGET_B, G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_ANGLE, g_param_spec_float ("angle", "Angle", "Size of the colorcube to change", 0.0, 90.0, DEFAULT_ANGLE, G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_NOISE_LEVEL, g_param_spec_float ("noise-level", "Noise Level", "Size of noise radius", 0.0, 64.0, DEFAULT_NOISE_LEVEL, G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_BLACK_SENSITIVITY, g_param_spec_uint ("black-sensitivity", "Black Sensitivity", "Sensitivity to dark colors", 0, 128, DEFAULT_BLACK_SENSITIVITY, G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_WHITE_SENSITIVITY, g_param_spec_uint ("white-sensitivity", "White Sensitivity", "Sensitivity to bright colors", 0, 128, DEFAULT_WHITE_SENSITIVITY, G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS)); gst_element_class_set_static_metadata (gstelement_class, "OpenGL Alpha Filter", "Filter/Effect/Video", "Adds an alpha channel to video using OpenGL - uniform or chroma-keying", "Matthew Waters <*****@*****.**>"); trans_class->before_transform = GST_DEBUG_FUNCPTR (gst_gl_alpha_before_transform); trans_class->transform_ip_on_passthrough = FALSE; base_filter_class->gl_start = GST_DEBUG_FUNCPTR (gst_gl_alpha_gl_start); base_filter_class->gl_stop = GST_DEBUG_FUNCPTR (gst_gl_alpha_gl_stop); filter_class->filter_texture = GST_DEBUG_FUNCPTR (gst_gl_alpha_filter_texture); }
static void gst_gl_overlay_class_init (GstGLOverlayClass * klass) { GObjectClass *gobject_class; GstElementClass *element_class; gobject_class = (GObjectClass *) klass; element_class = GST_ELEMENT_CLASS (klass); gobject_class->set_property = gst_gl_overlay_set_property; gobject_class->get_property = gst_gl_overlay_get_property; GST_GL_FILTER_CLASS (klass)->set_caps = gst_gl_overlay_set_caps; GST_GL_FILTER_CLASS (klass)->filter_texture = gst_gl_overlay_filter_texture; GST_GL_FILTER_CLASS (klass)->display_init_cb = gst_gl_overlay_init_gl_resources; GST_GL_FILTER_CLASS (klass)->display_reset_cb = gst_gl_overlay_reset_gl_resources; GST_GL_FILTER_CLASS (klass)->onStart = gst_gl_overlay_init_resources; GST_GL_FILTER_CLASS (klass)->onStop = gst_gl_overlay_reset_resources; g_object_class_install_property (gobject_class, PROP_LOCATION, g_param_spec_string ("location", "Location of the image", "Location of the image", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_XPOS_PNG, g_param_spec_int ("xpos-png", "X position of overlay image in percents", "X position of overlay image in percents", 0, 100, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_YPOS_PNG, g_param_spec_int ("ypos-png", "Y position of overlay image in percents", "Y position of overlay image in percents", 0, 100, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_SIZE_PNG, g_param_spec_int ("proportion-png", "Relative size of overlay image, in percents", "Relative size of iverlay image, in percents", 0, 100, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_XPOS_VIDEO, g_param_spec_int ("xpos-video", "X position of overlay video in percents", "X position of overlay video in percents", 0, 100, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_YPOS_VIDEO, g_param_spec_int ("ypos-video", "Y position of overlay video in percents", "Y position of overlay video in percents", 0, 100, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_SIZE_VIDEO, g_param_spec_int ("proportion-video", "Relative size of overlay video, in percents", "Relative size of iverlay video, in percents", 0, 100, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_VIDEOTOP, g_param_spec_boolean ("video-top", "Video-top", "Video is over png image", FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_ROTATE_PNG, g_param_spec_int ("rotate-png", "choose rotation axis for the moment only Y axis is implemented", "choose rotation axis for the moment only Y axis is implemented", 0, 3, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_ROTATE_VIDEO, g_param_spec_int ("rotate-video", "choose rotation axis for the moment only Y axis is implemented", "choose rotation axis for the moment only Y axis is implemented", 0, 3, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_ANGLE_PNG, g_param_spec_int ("angle-png", "choose angle in axis to choosen between -90 and 90", "choose angle in axis to choosen between -90 and 90", -90, 90, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_ANGLE_VIDEO, g_param_spec_int ("angle-video", "choose angle in axis to choosen between -90 and 90", "choose angle in axis to choosen between -90 and 90", -90, 90, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_RATIO_VIDEO, g_param_spec_int ("ratio-video", "choose ratio video between 0 and 3\n \t\t\t0 : Default ratio\n\t\t\t1 : 4 / 3\n\t\t\t2 : 16 / 9\n\t\t\t3 : 16 / 10", "choose ratio video between 0 and 3\n \t\t\t0 : Default ratio\n\t\t\t1 : 4 / 3\n\t\t\t2 : 16 / 9\n\t\t\t3 : 16 / 10", 0, 3, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); gst_element_class_set_metadata (element_class, "Gstreamer OpenGL Overlay", "Filter/Effect/Video", "Overlay GL video texture with a PNG image", "Filippo Argiolas <*****@*****.**>"); /* g_object_class_install_property (gobject_class, PROP_STRETCH, g_param_spec_boolean ("stretch", "Stretch the image to texture size", "Stretch the image to fit video texture size", TRUE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); */ }
static void gst_gl_filtershader_class_init (GstGLFilterShaderClass * klass) { GObjectClass *gobject_class; GstElementClass *element_class; gobject_class = (GObjectClass *) klass; element_class = GST_ELEMENT_CLASS (klass); gst_gl_filter_add_rgba_pad_templates (GST_GL_FILTER_CLASS (klass)); gobject_class->finalize = gst_gl_filtershader_finalize; gobject_class->set_property = gst_gl_filtershader_set_property; gobject_class->get_property = gst_gl_filtershader_get_property; g_object_class_install_property (gobject_class, PROP_SHADER, g_param_spec_object ("shader", "Shader object", "GstGLShader to use", GST_TYPE_GL_SHADER, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_VERTEX, g_param_spec_string ("vertex", "Vertex Source", "GLSL vertex source", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_FRAGMENT, g_param_spec_string ("fragment", "Fragment Source", "GLSL fragment source", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); /* FIXME: add other stages */ g_object_class_install_property (gobject_class, PROP_UNIFORMS, g_param_spec_boxed ("uniforms", "GLSL Uniforms", "GLSL Uniforms", GST_TYPE_STRUCTURE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_UPDATE_SHADER, g_param_spec_boolean ("update-shader", "Update Shader", "Emit the \'create-shader\' signal for the next frame", FALSE, G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS)); /* * GstGLFilterShader::create-shader: * @object: the #GstGLFilterShader * * Ask's the application for a shader to render with as a result of * inititialization or setting the 'update-shader' property. * * Returns: a new #GstGLShader for use in the rendering pipeline */ gst_gl_shader_signals[SIGNAL_CREATE_SHADER] = g_signal_new ("create-shader", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_generic, GST_TYPE_GL_SHADER, 0); gst_element_class_set_metadata (element_class, "OpenGL fragment shader filter", "Filter/Effect", "Perform operations with a GLSL shader", "<*****@*****.**>"); GST_GL_FILTER_CLASS (klass)->filter = gst_gl_filtershader_filter; GST_GL_FILTER_CLASS (klass)->filter_texture = gst_gl_filtershader_filter_texture; GST_GL_BASE_FILTER_CLASS (klass)->gl_start = gst_gl_filtershader_gl_start; GST_GL_BASE_FILTER_CLASS (klass)->gl_stop = gst_gl_filtershader_gl_stop; GST_GL_BASE_FILTER_CLASS (klass)->supported_gl_api = GST_GL_API_OPENGL | GST_GL_API_GLES2 | GST_GL_API_OPENGL3; }