gl: get the context from basemixer/basefilter

This commit is contained in:
Matthew Waters 2015-03-13 10:25:35 +00:00 committed by Tim-Philipp Müller
parent 51620950e4
commit 92f0aa9bd8
35 changed files with 218 additions and 224 deletions

View file

@ -30,7 +30,7 @@ gst_gl_effects_bulge_callback (gint width, gint height, guint texture,
GstGLShader *shader;
GstGLEffects *effects = GST_GL_EFFECTS (data);
GstGLFilter *filter = GST_GL_FILTER (effects);
GstGLContext *context = filter->context;
GstGLContext *context = GST_GL_BASE_FILTER (filter)->context;
GstGLFuncs *gl = context->gl_vtable;
shader = g_hash_table_lookup (effects->shaderstable, "bulge0");

View file

@ -30,7 +30,7 @@ gst_gl_effects_fisheye_callback (gint width, gint height, guint texture,
GstGLShader *shader;
GstGLEffects *effects = GST_GL_EFFECTS (data);
GstGLFilter *filter = GST_GL_FILTER (effects);
GstGLContext *context = filter->context;
GstGLContext *context = GST_GL_BASE_FILTER (filter)->context;
GstGLFuncs *gl = context->gl_vtable;
shader = g_hash_table_lookup (effects->shaderstable, "fisheye0");

View file

@ -33,7 +33,7 @@ gst_gl_effects_glow_step_one (gint width, gint height, guint texture,
GstGLShader *shader;
GstGLEffects *effects = GST_GL_EFFECTS (data);
GstGLFilter *filter = GST_GL_FILTER (effects);
GstGLContext *context = filter->context;
GstGLContext *context = GST_GL_BASE_FILTER (filter)->context;
GstGLFuncs *gl = context->gl_vtable;
shader = g_hash_table_lookup (effects->shaderstable, "glow0");
@ -73,7 +73,7 @@ gst_gl_effects_glow_step_two (gint width, gint height, guint texture,
GstGLShader *shader;
GstGLEffects *effects = GST_GL_EFFECTS (data);
GstGLFilter *filter = GST_GL_FILTER (effects);
GstGLContext *context = filter->context;
GstGLContext *context = GST_GL_BASE_FILTER (filter)->context;
GstGLFuncs *gl = context->gl_vtable;
shader = g_hash_table_lookup (effects->shaderstable, "glow1");
@ -120,7 +120,7 @@ gst_gl_effects_glow_step_three (gint width, gint height, guint texture,
GstGLShader *shader;
GstGLEffects *effects = GST_GL_EFFECTS (data);
GstGLFilter *filter = GST_GL_FILTER (effects);
GstGLContext *context = filter->context;
GstGLContext *context = GST_GL_BASE_FILTER (filter)->context;
GstGLFuncs *gl = context->gl_vtable;
shader = g_hash_table_lookup (effects->shaderstable, "glow2");
@ -162,7 +162,7 @@ gst_gl_effects_glow_step_four (gint width, gint height, guint texture,
GstGLShader *shader;
GstGLEffects *effects = GST_GL_EFFECTS (data);
GstGLFilter *filter = GST_GL_FILTER (effects);
GstGLContext *context = filter->context;
GstGLContext *context = GST_GL_BASE_FILTER (filter)->context;
GstGLFuncs *gl = context->gl_vtable;
shader = g_hash_table_lookup (effects->shaderstable, "glow3");

View file

@ -35,7 +35,7 @@ gst_gl_effects_identity_callback (gint width, gint height, guint texture,
{
GstGLEffects *effects = GST_GL_EFFECTS (data);
GstGLFilter *filter = GST_GL_FILTER (effects);
GstGLContext *context = filter->context;
GstGLContext *context = GST_GL_BASE_FILTER (filter)->context;
GstGLFuncs *gl = context->gl_vtable;
#if GST_GL_HAVE_OPENGL

View file

@ -31,7 +31,7 @@ gst_gl_effects_luma_to_curve (GstGLEffects * effects,
{
GstGLShader *shader;
GstGLFilter *filter = GST_GL_FILTER (effects);
GstGLContext *context = filter->context;
GstGLContext *context = GST_GL_BASE_FILTER (filter)->context;
GstGLFuncs *gl = context->gl_vtable;
shader = g_hash_table_lookup (effects->shaderstable, "lumamap0");

View file

@ -36,7 +36,7 @@ gst_gl_effects_mirror_callback (gint width, gint height, guint texture,
GstGLShader *shader;
GstGLFilter *filter = GST_GL_FILTER (data);
GstGLEffects *effects = GST_GL_EFFECTS (filter);
GstGLContext *context = filter->context;
GstGLContext *context = GST_GL_BASE_FILTER (filter)->context;
GstGLFuncs *gl = context->gl_vtable;
shader = g_hash_table_lookup (effects->shaderstable, "mirror0");

View file

@ -31,7 +31,7 @@ gst_gl_effects_rgb_to_curve (GstGLEffects * effects,
{
GstGLShader *shader;
GstGLFilter *filter = GST_GL_FILTER (effects);
GstGLContext *context = filter->context;
GstGLContext *context = GST_GL_BASE_FILTER (filter)->context;
GstGLFuncs *gl = context->gl_vtable;
shader = g_hash_table_lookup (effects->shaderstable, "rgbmap0");

View file

@ -30,7 +30,7 @@ gst_gl_effects_sin_callback (gint width, gint height, guint texture,
GstGLShader *shader;
GstGLEffects *effects = GST_GL_EFFECTS (data);
GstGLFilter *filter = GST_GL_FILTER (effects);
GstGLContext *context = filter->context;
GstGLContext *context = GST_GL_BASE_FILTER (filter)->context;
GstGLFuncs *gl = context->gl_vtable;
shader = g_hash_table_lookup (effects->shaderstable, "sin0");

View file

@ -30,7 +30,7 @@ gst_gl_effects_square_callback (gint width, gint height, guint texture,
GstGLShader *shader;
GstGLEffects *effects = GST_GL_EFFECTS (data);
GstGLFilter *filter = GST_GL_FILTER (effects);
GstGLContext *context = filter->context;
GstGLContext *context = GST_GL_BASE_FILTER (filter)->context;
GstGLFuncs *gl = context->gl_vtable;
shader = g_hash_table_lookup (effects->shaderstable, "square0");

View file

@ -36,7 +36,7 @@ gst_gl_effects_squeeze_callback (gint width, gint height, guint texture,
GstGLShader *shader;
GstGLFilter *filter = GST_GL_FILTER (data);
GstGLEffects *effects = GST_GL_EFFECTS (data);
GstGLContext *context = filter->context;
GstGLContext *context = GST_GL_BASE_FILTER (filter)->context;
GstGLFuncs *gl = context->gl_vtable;
shader = g_hash_table_lookup (effects->shaderstable, "squeeze0");

View file

@ -30,7 +30,7 @@ gst_gl_effects_stretch_callback (gint width, gint height, guint texture,
GstGLShader *shader;
GstGLEffects *effects = GST_GL_EFFECTS (data);
GstGLFilter *filter = GST_GL_FILTER (effects);
GstGLContext *context = filter->context;
GstGLContext *context = GST_GL_BASE_FILTER (filter)->context;
GstGLFuncs *gl = context->gl_vtable;
shader = g_hash_table_lookup (effects->shaderstable, "stretch0");

View file

@ -30,7 +30,7 @@ gst_gl_effects_tunnel_callback (gint width, gint height, guint texture,
GstGLShader *shader;
GstGLEffects *effects = GST_GL_EFFECTS (data);
GstGLFilter *filter = GST_GL_FILTER (effects);
GstGLContext *context = filter->context;
GstGLContext *context = GST_GL_BASE_FILTER (filter)->context;
GstGLFuncs *gl = context->gl_vtable;
shader = g_hash_table_lookup (effects->shaderstable, "tunnel0");

View file

@ -30,13 +30,13 @@ gst_gl_effects_twirl_callback (gint width, gint height, guint texture,
GstGLShader *shader;
GstGLEffects *effects = GST_GL_EFFECTS (data);
GstGLFilter *filter = GST_GL_FILTER (effects);
GstGLContext *context = filter->context;
GstGLContext *context = GST_GL_BASE_FILTER (filter)->context;
GstGLFuncs *gl = context->gl_vtable;
shader = g_hash_table_lookup (effects->shaderstable, "twirl0");
if (!shader) {
shader = gst_gl_shader_new (GST_GL_FILTER (effects)->context);
shader = gst_gl_shader_new (context);
g_hash_table_insert (effects->shaderstable, (gchar *) "twirl0", shader);
}

View file

@ -45,7 +45,7 @@ gst_gl_effects_xray_step_two (gint width, gint height, guint texture,
GstGLShader *shader;
GstGLEffects *effects = GST_GL_EFFECTS (data);
GstGLFilter *filter = GST_GL_FILTER (effects);
GstGLContext *context = filter->context;
GstGLContext *context = GST_GL_BASE_FILTER (filter)->context;
GstGLFuncs *gl = context->gl_vtable;
shader = g_hash_table_lookup (effects->shaderstable, "xray1");
@ -92,7 +92,7 @@ gst_gl_effects_xray_step_three (gint width, gint height, guint texture,
GstGLShader *shader;
GstGLEffects *effects = GST_GL_EFFECTS (data);
GstGLFilter *filter = GST_GL_FILTER (effects);
GstGLContext *context = filter->context;
GstGLContext *context = GST_GL_BASE_FILTER (filter)->context;
GstGLFuncs *gl = context->gl_vtable;
shader = g_hash_table_lookup (effects->shaderstable, "xray2");
@ -135,7 +135,7 @@ gst_gl_effects_xray_desaturate (gint width, gint height, guint texture,
GstGLShader *shader;
GstGLEffects *effects = GST_GL_EFFECTS (data);
GstGLFilter *filter = GST_GL_FILTER (effects);
GstGLContext *context = filter->context;
GstGLContext *context = GST_GL_BASE_FILTER (filter)->context;
GstGLFuncs *gl = context->gl_vtable;
shader = g_hash_table_lookup (effects->shaderstable, "xray_desat");
@ -175,7 +175,7 @@ gst_gl_effects_xray_sobel_hconv (gint width, gint height, guint texture,
GstGLShader *shader;
GstGLEffects *effects = GST_GL_EFFECTS (data);
GstGLFilter *filter = GST_GL_FILTER (effects);
GstGLContext *context = filter->context;
GstGLContext *context = GST_GL_BASE_FILTER (filter)->context;
GstGLFuncs *gl = context->gl_vtable;
shader = g_hash_table_lookup (effects->shaderstable, "xray_sob_hconv");
@ -218,7 +218,7 @@ gst_gl_effects_xray_sobel_vconv (gint width, gint height, guint texture,
GstGLShader *shader;
GstGLEffects *effects = GST_GL_EFFECTS (data);
GstGLFilter *filter = GST_GL_FILTER (effects);
GstGLContext *context = filter->context;
GstGLContext *context = GST_GL_BASE_FILTER (filter)->context;
GstGLFuncs *gl = context->gl_vtable;
shader = g_hash_table_lookup (effects->shaderstable, "xray_sob_vconv");
@ -261,7 +261,7 @@ gst_gl_effects_xray_sobel_length (gint width, gint height, guint texture,
GstGLShader *shader;
GstGLEffects *effects = GST_GL_EFFECTS (data);
GstGLFilter *filter = GST_GL_FILTER (effects);
GstGLContext *context = filter->context;
GstGLContext *context = GST_GL_BASE_FILTER (filter)->context;
GstGLFuncs *gl = context->gl_vtable;
shader = g_hash_table_lookup (effects->shaderstable, "xray_sob_len");
@ -305,7 +305,7 @@ gst_gl_effects_xray_step_five (gint width, gint height, guint texture,
GstGLShader *shader;
GstGLEffects *effects = GST_GL_EFFECTS (data);
GstGLFilter *filter = GST_GL_FILTER (effects);
GstGLContext *context = filter->context;
GstGLContext *context = GST_GL_BASE_FILTER (filter)->context;
GstGLFuncs *gl = context->gl_vtable;
shader = g_hash_table_lookup (effects->shaderstable, "xray4");

View file

@ -297,7 +297,7 @@ gst_gl_bumper_class_init (GstGLBumperClass * klass)
"Cyril Comparon <cyril.comparon@gmail.com>, "
"Julien Isorce <julien.isorce@gmail.com>");
GST_GL_FILTER_CLASS (klass)->supported_gl_api = GST_GL_API_OPENGL;
GST_GL_BASE_FILTER_CLASS (klass)->supported_gl_api = GST_GL_API_OPENGL;
}
static void

View file

@ -104,7 +104,7 @@ gst_gl_colorscale_class_init (GstGLColorscaleClass * klass)
filter_class->filter_texture = gst_gl_colorscale_filter_texture;
basetransform_class->passthrough_on_same_caps = TRUE;
filter_class->supported_gl_api =
GST_GL_BASE_FILTER_CLASS (klass)->supported_gl_api =
GST_GL_API_OPENGL | GST_GL_API_OPENGL3 | GST_GL_API_GLES2;
}
@ -156,13 +156,13 @@ gst_gl_colorscale_gen_gl_resources (GstGLFilter * filter)
{
GstGLColorscale *colorscale = GST_GL_COLORSCALE (filter);
if (gst_gl_context_get_gl_api (filter->context) & (GST_GL_API_GLES2 |
GST_GL_API_OPENGL3)) {
gst_gl_context_thread_add (filter->context,
if (gst_gl_context_get_gl_api (GST_GL_BASE_FILTER (filter)->context) &
(GST_GL_API_GLES2 | GST_GL_API_OPENGL3)) {
gst_gl_context_thread_add (GST_GL_BASE_FILTER (filter)->context,
(GstGLContextThreadFunc) _compile_identity_shader, colorscale);
if (!colorscale->shader) {
gst_gl_context_set_error (filter->context,
gst_gl_context_set_error (GST_GL_BASE_FILTER (filter)->context,
"Failed to initialize identity shader");
GST_ELEMENT_ERROR (colorscale, RESOURCE, NOT_FOUND, ("%s",
gst_gl_context_get_error ()), (NULL));
@ -179,7 +179,8 @@ 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);
gst_gl_context_del_shader (GST_GL_BASE_FILTER (filter)->context,
colorscale->shader);
colorscale->shader = NULL;
}
}
@ -192,12 +193,13 @@ gst_gl_colorscale_filter_texture (GstGLFilter * filter, guint in_tex,
colorscale = GST_GL_COLORSCALE (filter);
if (gst_gl_context_get_gl_api (filter->context) & (GST_GL_API_GLES2 |
GST_GL_API_OPENGL3))
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 (filter->context) & GST_GL_API_OPENGL)
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);
@ -211,8 +213,9 @@ gst_gl_colorscale_callback (gint width, gint height, guint texture,
GstGLFilter *filter = GST_GL_FILTER (stuff);
#if GST_GL_HAVE_OPENGL
if (gst_gl_context_get_gl_api (filter->context) & GST_GL_API_OPENGL) {
const GstGLFuncs *gl = filter->context->gl_vtable;
if (gst_gl_context_get_gl_api (GST_GL_BASE_FILTER (filter)->context) &
GST_GL_API_OPENGL) {
const GstGLFuncs *gl = GST_GL_BASE_FILTER (filter)->context->gl_vtable;
gl->MatrixMode (GL_PROJECTION);
gl->LoadIdentity ();

View file

@ -169,7 +169,7 @@ gst_gl_deinterlace_class_init (GstGLDeinterlaceClass * klass)
GST_GL_FILTER_CLASS (klass)->onInitFBO = gst_gl_deinterlace_init_shader;
GST_GL_FILTER_CLASS (klass)->onReset = gst_gl_deinterlace_reset;
GST_GL_FILTER_CLASS (klass)->supported_gl_api = GST_GL_API_OPENGL;
GST_GL_BASE_FILTER_CLASS (klass)->supported_gl_api = GST_GL_API_OPENGL;
}
static void
@ -185,13 +185,12 @@ gst_gl_deinterlace_reset (GstGLFilter * filter)
{
GstGLDeinterlace *deinterlace_filter = GST_GL_DEINTERLACE (filter);
if (deinterlace_filter->prev_buffer) {
gst_buffer_unref (deinterlace_filter->prev_buffer);
deinterlace_filter->prev_buffer = NULL;
}
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 (filter->context, deinterlace_filter->shader);
gst_gl_context_del_shader (GST_GL_BASE_FILTER (filter)->context,
deinterlace_filter->shader);
deinterlace_filter->shader = NULL;
}
@ -227,8 +226,8 @@ gst_gl_deinterlace_init_shader (GstGLFilter * filter)
GstGLDeinterlace *deinterlace_filter = GST_GL_DEINTERLACE (filter);
//blocking call, wait the opengl thread has compiled the shader
return gst_gl_context_gen_shader (filter->context, 0, greedyh_fragment_source,
&deinterlace_filter->shader);
return gst_gl_context_gen_shader (GST_GL_BASE_FILTER (filter)->context, 0,
greedyh_fragment_source, &deinterlace_filter->shader);
}
static gboolean
@ -252,10 +251,7 @@ gst_gl_deinterlace_filter (GstGLFilter * filter, GstBuffer * inbuf,
gst_gl_filter_filter_texture (filter, inbuf, outbuf);
if (deinterlace_filter->prev_buffer) {
gst_buffer_unref (deinterlace_filter->prev_buffer);
}
deinterlace_filter->prev_buffer = gst_buffer_ref (filter->uploaded_buffer);
gst_buffer_replace (&deinterlace_filter->prev_buffer, inbuf);
return TRUE;
}
@ -267,7 +263,7 @@ gst_gl_deinterlace_callback (gint width, gint height, guint texture,
{
GstGLDeinterlace *deinterlace_filter = GST_GL_DEINTERLACE (stuff);
GstGLFilter *filter = GST_GL_FILTER (stuff);
GstGLFuncs *gl = filter->context->gl_vtable;
GstGLFuncs *gl = GST_GL_BASE_FILTER (filter)->context->gl_vtable;
guint temp;
GLfloat verts[] = { -1.0, -1.0,
@ -294,7 +290,7 @@ gst_gl_deinterlace_callback (gint width, gint height, guint texture,
gl->Enable (GL_TEXTURE_2D);
if (G_UNLIKELY (deinterlace_filter->prev_tex == 0)) {
gst_gl_context_gen_texture (filter->context,
gst_gl_context_gen_texture (GST_GL_BASE_FILTER (filter)->context,
&deinterlace_filter->prev_tex,
GST_VIDEO_INFO_FORMAT (&filter->out_info),
GST_VIDEO_INFO_WIDTH (&filter->out_info),

View file

@ -81,7 +81,7 @@ static void
gst_gl_differencematte_init_gl_resources (GstGLFilter * filter)
{
GstGLDifferenceMatte *differencematte = GST_GL_DIFFERENCEMATTE (filter);
GstGLFuncs *gl = filter->context->gl_vtable;
GstGLFuncs *gl = GST_GL_BASE_FILTER (filter)->context->gl_vtable;
gint i;
for (i = 0; i < 4; i++) {
@ -95,12 +95,13 @@ gst_gl_differencematte_init_gl_resources (GstGLFilter * filter)
gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
differencematte->shader[i] = gst_gl_shader_new (filter->context);
differencematte->shader[i] =
gst_gl_shader_new (GST_GL_BASE_FILTER (filter)->context);
}
if (!gst_gl_shader_compile_and_check (differencematte->shader[0],
difference_fragment_source, GST_GL_SHADER_FRAGMENT_SOURCE)) {
gst_gl_context_set_error (GST_GL_FILTER (differencematte)->context,
gst_gl_context_set_error (GST_GL_BASE_FILTER (differencematte)->context,
"Failed to initialize difference shader");
GST_ELEMENT_ERROR (differencematte, RESOURCE, NOT_FOUND,
("%s", gst_gl_context_get_error ()), (NULL));
@ -109,7 +110,7 @@ gst_gl_differencematte_init_gl_resources (GstGLFilter * filter)
if (!gst_gl_shader_compile_and_check (differencematte->shader[1],
hconv7_fragment_source, GST_GL_SHADER_FRAGMENT_SOURCE)) {
gst_gl_context_set_error (GST_GL_FILTER (differencematte)->context,
gst_gl_context_set_error (GST_GL_BASE_FILTER (differencematte)->context,
"Failed to initialize hconv7 shader");
GST_ELEMENT_ERROR (differencematte, RESOURCE, NOT_FOUND,
("%s", gst_gl_context_get_error ()), (NULL));
@ -118,7 +119,7 @@ gst_gl_differencematte_init_gl_resources (GstGLFilter * filter)
if (!gst_gl_shader_compile_and_check (differencematte->shader[2],
vconv7_fragment_source, GST_GL_SHADER_FRAGMENT_SOURCE)) {
gst_gl_context_set_error (GST_GL_FILTER (differencematte)->context,
gst_gl_context_set_error (GST_GL_BASE_FILTER (differencematte)->context,
"Failed to initialize vconv7 shader");
GST_ELEMENT_ERROR (differencematte, RESOURCE, NOT_FOUND,
("%s", gst_gl_context_get_error ()), (NULL));
@ -127,7 +128,7 @@ gst_gl_differencematte_init_gl_resources (GstGLFilter * filter)
if (!gst_gl_shader_compile_and_check (differencematte->shader[3],
texture_interp_fragment_source, GST_GL_SHADER_FRAGMENT_SOURCE)) {
gst_gl_context_set_error (GST_GL_FILTER (differencematte)->context,
gst_gl_context_set_error (GST_GL_BASE_FILTER (differencematte)->context,
"Failed to initialize interp shader");
GST_ELEMENT_ERROR (differencematte, RESOURCE, NOT_FOUND,
("%s", gst_gl_context_get_error ()), (NULL));
@ -140,7 +141,7 @@ static void
gst_gl_differencematte_reset_gl_resources (GstGLFilter * filter)
{
GstGLDifferenceMatte *differencematte = GST_GL_DIFFERENCEMATTE (filter);
GstGLFuncs *gl = filter->context->gl_vtable;
GstGLFuncs *gl = GST_GL_BASE_FILTER (filter)->context->gl_vtable;
gint i;
gl->DeleteTextures (1, &differencematte->savedbgtexture);
@ -194,7 +195,7 @@ gst_gl_differencematte_class_init (GstGLDifferenceMatteClass * klass)
"Saves a background frame and replace it with a pixbuf",
"Filippo Argiolas <filippo.argiolas@gmail.com>");
GST_GL_FILTER_CLASS (klass)->supported_gl_api = GST_GL_API_OPENGL;
GST_GL_BASE_FILTER_CLASS (klass)->supported_gl_api = GST_GL_API_OPENGL;
}
static void
@ -265,7 +266,7 @@ gst_gl_differencematte_save_texture (gint width, gint height, guint texture,
gpointer stuff)
{
GstGLFilter *filter = GST_GL_FILTER (stuff);
GstGLFuncs *gl = filter->context->gl_vtable;
GstGLFuncs *gl = GST_GL_BASE_FILTER (filter)->context->gl_vtable;
gl->MatrixMode (GL_PROJECTION);
gl->LoadIdentity ();
@ -278,7 +279,7 @@ init_pixbuf_texture (GstGLContext * context, gpointer data)
{
GstGLDifferenceMatte *differencematte = GST_GL_DIFFERENCEMATTE (data);
GstGLFilter *filter = GST_GL_FILTER (data);
GstGLFuncs *gl = filter->context->gl_vtable;
GstGLFuncs *gl = GST_GL_BASE_FILTER (filter)->context->gl_vtable;
gl->DeleteTextures (1, &differencematte->newbgtexture);
gl->GenTextures (1, &differencematte->newbgtexture);
@ -311,7 +312,7 @@ gst_gl_differencematte_diff (gint width, gint height, guint texture,
{
GstGLDifferenceMatte *differencematte = GST_GL_DIFFERENCEMATTE (stuff);
GstGLFilter *filter = GST_GL_FILTER (stuff);
GstGLFuncs *gl = filter->context->gl_vtable;
GstGLFuncs *gl = GST_GL_BASE_FILTER (filter)->context->gl_vtable;
gl->MatrixMode (GL_PROJECTION);
gl->LoadIdentity ();
@ -341,7 +342,7 @@ gst_gl_differencematte_hblur (gint width, gint height, guint texture,
{
GstGLDifferenceMatte *differencematte = GST_GL_DIFFERENCEMATTE (stuff);
GstGLFilter *filter = GST_GL_FILTER (stuff);
GstGLFuncs *gl = filter->context->gl_vtable;
GstGLFuncs *gl = GST_GL_BASE_FILTER (filter)->context->gl_vtable;
gl->MatrixMode (GL_PROJECTION);
gl->LoadIdentity ();
@ -368,7 +369,7 @@ gst_gl_differencematte_vblur (gint width, gint height, guint texture,
{
GstGLDifferenceMatte *differencematte = GST_GL_DIFFERENCEMATTE (stuff);
GstGLFilter *filter = GST_GL_FILTER (stuff);
GstGLFuncs *gl = filter->context->gl_vtable;
GstGLFuncs *gl = GST_GL_BASE_FILTER (filter)->context->gl_vtable;
gl->MatrixMode (GL_PROJECTION);
gl->LoadIdentity ();
@ -395,7 +396,7 @@ gst_gl_differencematte_interp (gint width, gint height, guint texture,
{
GstGLDifferenceMatte *differencematte = GST_GL_DIFFERENCEMATTE (stuff);
GstGLFilter *filter = GST_GL_FILTER (stuff);
GstGLFuncs *gl = filter->context->gl_vtable;
GstGLFuncs *gl = GST_GL_BASE_FILTER (filter)->context->gl_vtable;
gl->MatrixMode (GL_PROJECTION);
glLoadIdentity ();
@ -432,7 +433,7 @@ gst_gl_differencematte_identity (gint width, gint height, guint texture,
{
GstGLDifferenceMatte *differencematte = GST_GL_DIFFERENCEMATTE (stuff);
GstGLFilter *filter = GST_GL_FILTER (differencematte);
GstGLFuncs *gl = filter->context->gl_vtable;
GstGLFuncs *gl = GST_GL_BASE_FILTER (filter)->context->gl_vtable;
gl->MatrixMode (GL_PROJECTION);
gl->LoadIdentity ();
@ -454,8 +455,8 @@ gst_gl_differencematte_filter_texture (GstGLFilter * filter, guint in_tex,
differencematte->pixbuf = NULL;
/* if loader failed then context is turned off */
gst_gl_context_thread_add (filter->context, init_pixbuf_texture,
differencematte);
gst_gl_context_thread_add (GST_GL_BASE_FILTER (filter)->context,
init_pixbuf_texture, differencematte);
/* save current frame, needed to calculate difference between
* this frame and next ones */
@ -517,7 +518,7 @@ gst_gl_differencematte_loader (GstGLFilter * filter)
guchar **rows = NULL;
gint filler;
if (!filter->context)
if (!GST_GL_BASE_FILTER (filter)->context)
return TRUE;
if ((fp = fopen (differencematte->location, "rb")) == NULL)

View file

@ -130,8 +130,8 @@ gst_gl_effects_effect_get_type (void)
static void
gst_gl_effects_set_effect (GstGLEffects * effects, gint effect_type)
{
GstGLFilterClass *filter_class = GST_GL_FILTER_GET_CLASS (effects);
GstGLContext *context = GST_GL_FILTER (effects)->context;
GstGLBaseFilterClass *filter_class = GST_GL_BASE_FILTER_GET_CLASS (effects);
GstGLContext *context = GST_GL_BASE_FILTER (effects)->context;
switch (effect_type) {
case GST_GL_EFFECT_IDENTITY:
@ -232,7 +232,7 @@ static void
gst_gl_effects_init_gl_resources (GstGLFilter * filter)
{
GstGLEffects *effects = GST_GL_EFFECTS (filter);
GstGLFuncs *gl = filter->context->gl_vtable;
GstGLFuncs *gl = GST_GL_BASE_FILTER (filter)->context->gl_vtable;
gint i = 0;
for (i = 0; i < NEEDED_TEXTURES; i++) {
@ -260,7 +260,7 @@ static void
gst_gl_effects_reset_gl_resources (GstGLFilter * filter)
{
GstGLEffects *effects = GST_GL_EFFECTS (filter);
GstGLFuncs *gl = filter->context->gl_vtable;
GstGLFuncs *gl = GST_GL_BASE_FILTER (filter)->context->gl_vtable;
gint i = 0;
for (i = 0; i < NEEDED_TEXTURES; i++) {
@ -313,7 +313,7 @@ gst_gl_effects_class_init (GstGLEffectsClass * klass)
"GL Shading Language effects",
"Filippo Argiolas <filippo.argiolas@gmail.com>");
GST_GL_FILTER_CLASS (klass)->supported_gl_api =
GST_GL_BASE_FILTER_CLASS (klass)->supported_gl_api =
GST_GL_API_OPENGL | GST_GL_API_GLES2 | GST_GL_API_OPENGL3;
}
@ -349,7 +349,7 @@ gst_gl_effects_ghash_func_clean (gpointer key, gpointer value, gpointer data)
GstGLFilter *filter = (GstGLFilter *) data;
//blocking call, wait the opengl thread has destroyed the shader
gst_gl_context_del_shader (filter->context, shader);
gst_gl_context_del_shader (GST_GL_BASE_FILTER (filter)->context, shader);
value = NULL;
}
@ -440,7 +440,8 @@ gst_gl_effects_filter_texture (GstGLFilter * filter, guint in_tex,
effects->outtexture = out_tex;
if (effects->horizontal_swap == TRUE)
gst_gl_context_thread_add (filter->context, set_horizontal_swap, effects);
gst_gl_context_thread_add (GST_GL_BASE_FILTER (filter)->context,
set_horizontal_swap, effects);
effects->effect (effects);

View file

@ -112,7 +112,7 @@ gst_gl_filter_app_class_init (GstGLFilterAppClass * klass)
"Use client callbacks to define the scene",
"Julien Isorce <julien.isorce@gmail.com>");
GST_GL_FILTER_CLASS (klass)->supported_gl_api =
GST_GL_BASE_FILTER_CLASS (klass)->supported_gl_api =
GST_GL_API_OPENGL | GST_GL_API_GLES2 | GST_GL_API_OPENGL3;
}
@ -196,7 +196,7 @@ gst_gl_filter_app_filter_texture (GstGLFilter * filter, guint in_tex,
cb.height = GST_VIDEO_INFO_HEIGHT (&filter->in_info);
//blocking call, use a FBO
gst_gl_context_use_fbo_v2 (filter->context,
gst_gl_context_use_fbo_v2 (GST_GL_BASE_FILTER (filter)->context,
GST_VIDEO_INFO_WIDTH (&filter->out_info),
GST_VIDEO_INFO_HEIGHT (&filter->out_info),
filter->fbo, filter->depthbuffer, out_tex, _glcb2, &cb);
@ -217,8 +217,9 @@ gst_gl_filter_app_callback (gint width, gint height, guint texture,
GstGLFilter *filter = GST_GL_FILTER (stuff);
#if GST_GL_HAVE_OPENGL
if (gst_gl_context_get_gl_api (filter->context) & GST_GL_API_OPENGL) {
GstGLFuncs *gl = filter->context->gl_vtable;
if (gst_gl_context_get_gl_api (GST_GL_BASE_FILTER (filter)->context) &
GST_GL_API_OPENGL) {
GstGLFuncs *gl = GST_GL_BASE_FILTER (filter)->context->gl_vtable;
gl->MatrixMode (GL_PROJECTION);
gl->LoadIdentity ();

View file

@ -67,7 +67,7 @@ static void
gst_gl_filterblur_init_resources (GstGLFilter * filter)
{
GstGLFilterBlur *filterblur = GST_GL_FILTERBLUR (filter);
GstGLFuncs *gl = filter->context->gl_vtable;
GstGLFuncs *gl = GST_GL_BASE_FILTER (filter)->context->gl_vtable;
gl->GenTextures (1, &filterblur->midtexture);
gl->BindTexture (GL_TEXTURE_2D, filterblur->midtexture);
@ -85,7 +85,7 @@ static void
gst_gl_filterblur_reset_resources (GstGLFilter * filter)
{
GstGLFilterBlur *filterblur = GST_GL_FILTERBLUR (filter);
GstGLFuncs *gl = filter->context->gl_vtable;
GstGLFuncs *gl = GST_GL_BASE_FILTER (filter)->context->gl_vtable;
gl->DeleteTextures (1, &filterblur->midtexture);
}
@ -115,7 +115,7 @@ gst_gl_filterblur_class_init (GstGLFilterBlurClass * klass)
GST_GL_FILTER_CLASS (klass)->onInitFBO = gst_gl_filterblur_init_shader;
GST_GL_FILTER_CLASS (klass)->onReset = gst_gl_filter_filterblur_reset;
GST_GL_FILTER_CLASS (klass)->supported_gl_api = GST_GL_API_OPENGL;
GST_GL_BASE_FILTER_CLASS (klass)->supported_gl_api = GST_GL_API_OPENGL;
}
static void
@ -137,12 +137,14 @@ gst_gl_filter_filterblur_reset (GstGLFilter * filter)
//blocking call, wait the opengl thread has destroyed the shader
if (filterblur->shader0)
gst_gl_context_del_shader (filter->context, filterblur->shader0);
gst_gl_context_del_shader (GST_GL_BASE_FILTER (filter)->context,
filterblur->shader0);
filterblur->shader0 = NULL;
//blocking call, wait the opengl thread has destroyed the shader
if (filterblur->shader1)
gst_gl_context_del_shader (filter->context, filterblur->shader1);
gst_gl_context_del_shader (GST_GL_BASE_FILTER (filter)->context,
filterblur->shader1);
filterblur->shader1 = NULL;
}
@ -178,13 +180,13 @@ gst_gl_filterblur_init_shader (GstGLFilter * filter)
GstGLFilterBlur *blur_filter = GST_GL_FILTERBLUR (filter);
//blocking call, wait the opengl thread has compiled the shader
if (!gst_gl_context_gen_shader (filter->context, 0, hconv7_fragment_source,
&blur_filter->shader0))
if (!gst_gl_context_gen_shader (GST_GL_BASE_FILTER (filter)->context, 0,
hconv7_fragment_source, &blur_filter->shader0))
return FALSE;
//blocking call, wait the opengl thread has compiled the shader
if (!gst_gl_context_gen_shader (filter->context, 0, vconv7_fragment_source,
&blur_filter->shader1))
if (!gst_gl_context_gen_shader (GST_GL_BASE_FILTER (filter)->context, 0,
vconv7_fragment_source, &blur_filter->shader1))
return FALSE;
return TRUE;
@ -211,7 +213,7 @@ gst_gl_filterblur_hcallback (gint width, gint height, guint texture,
{
GstGLFilter *filter = GST_GL_FILTER (stuff);
GstGLFilterBlur *filterblur = GST_GL_FILTERBLUR (filter);
GstGLFuncs *gl = filter->context->gl_vtable;
GstGLFuncs *gl = GST_GL_BASE_FILTER (filter)->context->gl_vtable;
gl->MatrixMode (GL_PROJECTION);
gl->LoadIdentity ();
@ -238,7 +240,7 @@ gst_gl_filterblur_vcallback (gint width, gint height, guint texture,
{
GstGLFilter *filter = GST_GL_FILTER (stuff);
GstGLFilterBlur *filterblur = GST_GL_FILTERBLUR (filter);
GstGLFuncs *gl = filter->context->gl_vtable;
GstGLFuncs *gl = GST_GL_BASE_FILTER (filter)->context->gl_vtable;
gl->MatrixMode (GL_PROJECTION);
gl->LoadIdentity ();

View file

@ -180,7 +180,7 @@ gst_gl_filter_cube_class_init (GstGLFilterCubeClass * klass)
"Filter/Effect/Video", "Map input texture on the 6 cube faces",
"Julien Isorce <julien.isorce@gmail.com>");
GST_GL_FILTER_CLASS (klass)->supported_gl_api =
GST_GL_BASE_FILTER_CLASS (klass)->supported_gl_api =
GST_GL_API_OPENGL | GST_GL_API_GLES2 | GST_GL_API_OPENGL3;
}
@ -279,7 +279,7 @@ static void
gst_gl_filter_cube_reset_gl (GstGLFilter * filter)
{
GstGLFilterCube *cube_filter = GST_GL_FILTER_CUBE (filter);
const GstGLFuncs *gl = filter->context->gl_vtable;
const GstGLFuncs *gl = GST_GL_BASE_FILTER (filter)->context->gl_vtable;
if (cube_filter->vao) {
gl->DeleteVertexArrays (1, &cube_filter->vao);
@ -299,7 +299,8 @@ gst_gl_filter_cube_reset (GstGLFilter * 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);
gst_gl_context_del_shader (GST_GL_BASE_FILTER (filter)->context,
cube_filter->shader);
cube_filter->shader = NULL;
}
@ -309,8 +310,8 @@ gst_gl_filter_cube_init_shader (GstGLFilter * filter)
GstGLFilterCube *cube_filter = GST_GL_FILTER_CUBE (filter);
/* blocking call, wait the opengl thread has compiled the shader */
return gst_gl_context_gen_shader (filter->context, cube_v_src, cube_f_src,
&cube_filter->shader);
return gst_gl_context_gen_shader (GST_GL_BASE_FILTER (filter)->context,
cube_v_src, cube_f_src, &cube_filter->shader);
}
static gboolean
@ -322,7 +323,7 @@ gst_gl_filter_cube_filter_texture (GstGLFilter * filter, guint in_tex,
cube_filter->in_tex = in_tex;
/* blocking call, use a FBO */
gst_gl_context_use_fbo_v2 (filter->context,
gst_gl_context_use_fbo_v2 (GST_GL_BASE_FILTER (filter)->context,
GST_VIDEO_INFO_WIDTH (&filter->out_info),
GST_VIDEO_INFO_HEIGHT (&filter->out_info), filter->fbo,
filter->depthbuffer, out_tex, _callback, (gpointer) cube_filter);
@ -369,7 +370,7 @@ static const GLfloat vertices[] = {
static void
_bind_buffer (GstGLFilterCube * cube_filter)
{
const GstGLFuncs *gl = GST_GL_FILTER (cube_filter)->context->gl_vtable;
const GstGLFuncs *gl = GST_GL_BASE_FILTER (cube_filter)->context->gl_vtable;
gl->BindBuffer (GL_ARRAY_BUFFER, cube_filter->vertex_buffer);
@ -394,7 +395,7 @@ _bind_buffer (GstGLFilterCube * cube_filter)
static void
_unbind_buffer (GstGLFilterCube * cube_filter)
{
const GstGLFuncs *gl = GST_GL_FILTER (cube_filter)->context->gl_vtable;
const GstGLFuncs *gl = GST_GL_BASE_FILTER (cube_filter)->context->gl_vtable;
gl->BindBuffer (GL_ARRAY_BUFFER, 0);
@ -407,7 +408,7 @@ _callback (gpointer stuff)
{
GstGLFilter *filter = GST_GL_FILTER (stuff);
GstGLFilterCube *cube_filter = GST_GL_FILTER_CUBE (filter);
GstGLFuncs *gl = filter->context->gl_vtable;
GstGLFuncs *gl = GST_GL_BASE_FILTER (filter)->context->gl_vtable;
static GLfloat xrot = 0;
static GLfloat yrot = 0;

View file

@ -163,7 +163,7 @@ gst_gl_filter_glass_class_init (GstGLFilterGlassClass * klass)
GST_GL_FILTER_CLASS (klass)->onInitFBO = gst_gl_filter_glass_init_shader;
GST_GL_FILTER_CLASS (klass)->onReset = gst_gl_filter_glass_reset;
GST_GL_FILTER_CLASS (klass)->supported_gl_api = GST_GL_API_OPENGL;
GST_GL_BASE_FILTER_CLASS (klass)->supported_gl_api = GST_GL_API_OPENGL;
}
static void
@ -180,10 +180,11 @@ gst_gl_filter_glass_reset (GstGLFilter * filter)
//blocking call, wait the opengl thread has destroyed the shader
if (glass_filter->shader)
gst_gl_context_del_shader (filter->context, glass_filter->shader);
gst_gl_context_del_shader (GST_GL_BASE_FILTER (filter)->context,
glass_filter->shader);
glass_filter->shader = NULL;
if (glass_filter->passthrough_shader)
gst_gl_context_del_shader (filter->context,
gst_gl_context_del_shader (GST_GL_BASE_FILTER (filter)->context,
glass_filter->passthrough_shader);
glass_filter->passthrough_shader = NULL;
}
@ -222,12 +223,13 @@ gst_gl_filter_glass_init_shader (GstGLFilter * filter)
//blocking call, wait the opengl thread has compiled the shader
ret =
gst_gl_context_gen_shader (filter->context, glass_vertex_source,
glass_fragment_source, &glass_filter->shader);
gst_gl_context_gen_shader (GST_GL_BASE_FILTER (filter)->context,
glass_vertex_source, glass_fragment_source, &glass_filter->shader);
if (ret)
ret =
gst_gl_context_gen_shader (filter->context, passthrough_vertex,
passthrough_fragment, &glass_filter->passthrough_shader);
gst_gl_context_gen_shader (GST_GL_BASE_FILTER (filter)->context,
passthrough_vertex, passthrough_fragment,
&glass_filter->passthrough_shader);
return ret;
}
@ -240,7 +242,7 @@ gst_gl_filter_glass_filter_texture (GstGLFilter * filter, guint in_tex,
glass_filter->in_tex = in_tex;
//blocking call, use a FBO
gst_gl_context_use_fbo_v2 (filter->context,
gst_gl_context_use_fbo_v2 (GST_GL_BASE_FILTER (filter)->context,
GST_VIDEO_INFO_WIDTH (&filter->out_info),
GST_VIDEO_INFO_HEIGHT (&filter->out_info),
filter->fbo, filter->depthbuffer, out_tex,
@ -262,7 +264,7 @@ static void
gst_gl_filter_glass_draw_background_gradient (GstGLFilterGlass * glass)
{
GstGLFilter *filter = GST_GL_FILTER (glass);
GstGLFuncs *gl = filter->context->gl_vtable;
GstGLFuncs *gl = GST_GL_BASE_FILTER (filter)->context->gl_vtable;
/* *INDENT-OFF* */
gfloat mesh[] = {
@ -303,7 +305,7 @@ gst_gl_filter_glass_draw_video_plane (GstGLFilter * filter,
gfloat start_alpha, gfloat stop_alpha, gboolean reversed, gfloat rotation)
{
GstGLFilterGlass *glass_filter = GST_GL_FILTER_GLASS (filter);
GstGLFuncs *gl = filter->context->gl_vtable;
GstGLFuncs *gl = GST_GL_BASE_FILTER (filter)->context->gl_vtable;
gfloat topy = reversed ? center_y - 1.0f : center_y + 1.0f;
gfloat bottomy = reversed ? center_y + 1.0f : center_y - 1.0f;
@ -358,7 +360,7 @@ gst_gl_filter_glass_callback (gpointer stuff)
GstGLFilter *filter = GST_GL_FILTER (stuff);
GstGLFilterGlass *glass_filter = GST_GL_FILTER_GLASS (stuff);
GstGLFuncs *gl = filter->context->gl_vtable;
GstGLFuncs *gl = GST_GL_BASE_FILTER (filter)->context->gl_vtable;
gint width = GST_VIDEO_INFO_WIDTH (&filter->out_info);
gint height = GST_VIDEO_INFO_HEIGHT (&filter->out_info);
@ -401,7 +403,7 @@ gst_gl_filter_glass_callback (gpointer stuff)
gst_gl_filter_glass_draw_video_plane (filter, width, height, texture,
0.0f, 0.0f, 1.0f, 1.0f, FALSE, rotation);
gst_gl_context_clear_shader (filter->context);
gst_gl_context_clear_shader (GST_GL_BASE_FILTER (filter)->context);
gl->Disable (GL_TEXTURE_2D);
gl->Disable (GL_BLEND);

View file

@ -120,7 +120,7 @@ gst_gl_filter_laplacian_class_init (GstGLFilterLaplacianClass * klass)
GST_GL_FILTER_CLASS (klass)->onInitFBO = gst_gl_filter_laplacian_init_shader;
GST_GL_FILTER_CLASS (klass)->onReset = gst_gl_filter_laplacian_reset;
GST_GL_FILTER_CLASS (klass)->supported_gl_api = GST_GL_API_OPENGL;
GST_GL_BASE_FILTER_CLASS (klass)->supported_gl_api = GST_GL_API_OPENGL;
}
static void
@ -136,7 +136,8 @@ gst_gl_filter_laplacian_reset (GstGLFilter * filter)
//blocking call, wait the opengl thread has destroyed the shader
if (laplacian_filter->shader)
gst_gl_context_del_shader (filter->context, laplacian_filter->shader);
gst_gl_context_del_shader (GST_GL_BASE_FILTER (filter)->context,
laplacian_filter->shader);
laplacian_filter->shader = NULL;
}
@ -172,7 +173,7 @@ gst_gl_filter_laplacian_init_shader (GstGLFilter * filter)
GstGLFilterLaplacian *laplacian_filter = GST_GL_FILTER_LAPLACIAN (filter);
//blocking call, wait the opengl thread has compiled the shader
return gst_gl_context_gen_shader (filter->context, 0,
return gst_gl_context_gen_shader (GST_GL_BASE_FILTER (filter)->context, 0,
convolution_fragment_source, &laplacian_filter->shader);
}
@ -197,7 +198,7 @@ gst_gl_filter_laplacian_callback (gint width, gint height, guint texture,
{
GstGLFilter *filter = GST_GL_FILTER (stuff);
GstGLFilterLaplacian *laplacian_filter = GST_GL_FILTER_LAPLACIAN (filter);
GstGLFuncs *gl = filter->context->gl_vtable;
GstGLFuncs *gl = GST_GL_BASE_FILTER (filter)->context->gl_vtable;
gfloat kernel[9] = { 0.0, -1.0, 0.0,
-1.0, 4.0, -1.0,

View file

@ -139,7 +139,7 @@ gst_gl_filter_reflected_screen_class_init (GstGLFilterReflectedScreenClass *
"OpenGL Reflected Screen filter", "Filter/Effect/Video",
"Reflected Screen Filter", "Pierre POUZOL <pierre.pouzol@hotmail.fr>");
GST_GL_FILTER_CLASS (klass)->supported_gl_api = GST_GL_API_OPENGL;
GST_GL_BASE_FILTER_CLASS (klass)->supported_gl_api = GST_GL_API_OPENGL;
}
static void

View file

@ -150,7 +150,7 @@ gst_gl_filtershader_class_init (GstGLFilterShaderClass * klass)
GST_GL_FILTER_CLASS (klass)->onInitFBO = gst_gl_filtershader_init_shader;
GST_GL_FILTER_CLASS (klass)->onReset = gst_gl_filter_filtershader_reset;
GST_GL_FILTER_CLASS (klass)->supported_gl_api =
GST_GL_BASE_FILTER_CLASS (klass)->supported_gl_api =
GST_GL_API_OPENGL | GST_GL_API_GLES2 | GST_GL_API_OPENGL3;
}
@ -167,7 +167,8 @@ gst_gl_filter_filtershader_reset (GstGLFilter * filter)
//blocking call, wait the opengl thread has destroyed the shader
if (filtershader->shader0)
gst_gl_context_del_shader (filter->context, filtershader->shader0);
gst_gl_context_del_shader (GST_GL_BASE_FILTER (filter)->context,
filtershader->shader0);
filtershader->shader0 = NULL;
}
@ -326,8 +327,8 @@ gst_gl_filtershader_init_shader (GstGLFilter * filter)
return FALSE;
//blocking call, wait the opengl thread has compiled the shader
if (!gst_gl_context_gen_shader (filter->context, text_vertex_shader,
hfilter_fragment_source, &filtershader->shader0))
if (!gst_gl_context_gen_shader (GST_GL_BASE_FILTER (filter)->context,
text_vertex_shader, hfilter_fragment_source, &filtershader->shader0))
return FALSE;
@ -395,7 +396,7 @@ gst_gl_filtershader_hcallback (gint width, gint height, guint texture,
{
GstGLFilter *filter = GST_GL_FILTER (stuff);
GstGLFilterShader *filtershader = GST_GL_FILTERSHADER (filter);
GstGLFuncs *gl = filter->context->gl_vtable;
GstGLFuncs *gl = GST_GL_BASE_FILTER (filter)->context->gl_vtable;
gst_gl_shader_use (filtershader->shader0);

View file

@ -71,7 +71,7 @@ static void
gst_gl_filtersobel_init_resources (GstGLFilter * filter)
{
GstGLFilterSobel *filtersobel = GST_GL_FILTERSOBEL (filter);
GstGLFuncs *gl = filter->context->gl_vtable;
GstGLFuncs *gl = GST_GL_BASE_FILTER (filter)->context->gl_vtable;
int i;
for (i = 0; i < 2; i++) {
@ -92,7 +92,7 @@ static void
gst_gl_filtersobel_reset_resources (GstGLFilter * filter)
{
GstGLFilterSobel *filtersobel = GST_GL_FILTERSOBEL (filter);
GstGLFuncs *gl = filter->context->gl_vtable;
GstGLFuncs *gl = GST_GL_BASE_FILTER (filter)->context->gl_vtable;
int i;
for (i = 0; i < 2; i++) {
@ -132,7 +132,7 @@ gst_gl_filtersobel_class_init (GstGLFilterSobelClass * klass)
"Gstreamer OpenGL Sobel", "Filter/Effect/Video", "Sobel edge detection",
"Filippo Argiolas <filippo.argiolas@gmail.com>");
GST_GL_FILTER_CLASS (klass)->supported_gl_api = GST_GL_API_OPENGL;
GST_GL_BASE_FILTER_CLASS (klass)->supported_gl_api = GST_GL_API_OPENGL;
}
static void
@ -154,19 +154,23 @@ gst_gl_filter_filtersobel_reset (GstGLFilter * filter)
//blocking call, wait the opengl thread has destroyed the shader
if (filtersobel->desat)
gst_gl_context_del_shader (filter->context, filtersobel->desat);
gst_gl_context_del_shader (GST_GL_BASE_FILTER (filter)->context,
filtersobel->desat);
filtersobel->desat = NULL;
if (filtersobel->hconv)
gst_gl_context_del_shader (filter->context, filtersobel->hconv);
gst_gl_context_del_shader (GST_GL_BASE_FILTER (filter)->context,
filtersobel->hconv);
filtersobel->hconv = NULL;
if (filtersobel->vconv)
gst_gl_context_del_shader (filter->context, filtersobel->vconv);
gst_gl_context_del_shader (GST_GL_BASE_FILTER (filter)->context,
filtersobel->vconv);
filtersobel->vconv = NULL;
if (filtersobel->len)
gst_gl_context_del_shader (filter->context, filtersobel->len);
gst_gl_context_del_shader (GST_GL_BASE_FILTER (filter)->context,
filtersobel->len);
filtersobel->len = NULL;
}
@ -210,16 +214,16 @@ gst_gl_filtersobel_init_shader (GstGLFilter * filter)
//blocking call, wait the opengl thread has compiled the shader
ret =
gst_gl_context_gen_shader (filter->context, 0, desaturate_fragment_source,
&filtersobel->desat);
gst_gl_context_gen_shader (GST_GL_BASE_FILTER (filter)->context, 0,
desaturate_fragment_source, &filtersobel->desat);
ret &=
gst_gl_context_gen_shader (filter->context, 0,
gst_gl_context_gen_shader (GST_GL_BASE_FILTER (filter)->context, 0,
sep_sobel_hconv3_fragment_source, &filtersobel->hconv);
ret &=
gst_gl_context_gen_shader (filter->context, 0,
gst_gl_context_gen_shader (GST_GL_BASE_FILTER (filter)->context, 0,
sep_sobel_vconv3_fragment_source, &filtersobel->vconv);
ret &=
gst_gl_context_gen_shader (filter->context, 0,
gst_gl_context_gen_shader (GST_GL_BASE_FILTER (filter)->context, 0,
sep_sobel_length_fragment_source, &filtersobel->len);
return ret;
@ -250,7 +254,7 @@ gst_gl_filtersobel_length (gint width, gint height, guint texture,
gpointer stuff)
{
GstGLFilter *filter = GST_GL_FILTER (stuff);
GstGLFuncs *gl = filter->context->gl_vtable;
GstGLFuncs *gl = GST_GL_BASE_FILTER (filter)->context->gl_vtable;
GstGLFilterSobel *filtersobel = GST_GL_FILTERSOBEL (filter);
glMatrixMode (GL_PROJECTION);

View file

@ -112,19 +112,14 @@ static gboolean
_negotiated_caps (GstVideoAggregator * vagg, GstCaps * caps)
{
GstGLMixer *mix = GST_GL_MIXER (vagg);
GstGLMixerClass *mix_class = GST_GL_MIXER_GET_CLASS (mix);
GstGLBaseMixerClass *base_mix_class = GST_GL_BASE_MIXER_GET_CLASS (mix);
gboolean ret;
mix->priv->negotiated = TRUE;
base_mix_class->supported_gl_api = mix_class->supported_gl_api;
gst_caps_replace (&mix->out_caps, caps);
ret = GST_VIDEO_AGGREGATOR_CLASS (parent_class)->negotiated_caps (vagg, caps);
mix->context = GST_GL_BASE_MIXER (mix)->context;
return ret;
}
@ -389,7 +384,6 @@ gst_gl_mixer_class_init (GstGLMixerClass * klass)
g_type_class_ref (GST_TYPE_GL_MIXER_PAD);
klass->set_caps = NULL;
klass->supported_gl_api = GST_GL_API_ANY;
}
static void
@ -537,7 +531,6 @@ gst_gl_mixer_decide_allocation (GstGLBaseMixer * base_mix, GstQuery * query)
gst_query_parse_allocation (query, &caps, NULL);
mix->context = context;
if (mixer_class->set_caps)
mixer_class->set_caps (mix, caps);

View file

@ -85,8 +85,6 @@ struct _GstGLMixer
{
GstGLBaseMixer vaggregator;
GstGLContext *context;
GPtrArray *array_buffers;
GPtrArray *frames;
@ -101,7 +99,6 @@ struct _GstGLMixer
struct _GstGLMixerClass
{
GstGLBaseMixerClass parent_class;
GstGLAPI supported_gl_api;
GstGLMixerSetCaps set_caps;
GstGLMixerReset reset;

View file

@ -135,7 +135,7 @@ gst_gl_mosaic_class_init (GstGLMosaicClass * klass)
GST_GL_MIXER_CLASS (klass)->reset = gst_gl_mosaic_reset;
GST_GL_MIXER_CLASS (klass)->process_textures = gst_gl_mosaic_process_textures;
GST_GL_MIXER_CLASS (klass)->supported_gl_api = GST_GL_API_OPENGL;
GST_GL_BASE_MIXER_CLASS (klass)->supported_gl_api = GST_GL_API_OPENGL;
}
static void
@ -180,7 +180,8 @@ gst_gl_mosaic_reset (GstGLMixer * mixer)
//blocking call, wait the opengl thread has destroyed the shader
if (mosaic->shader)
gst_gl_context_del_shader (mixer->context, mosaic->shader);
gst_gl_context_del_shader (GST_GL_BASE_MIXER (mixer)->context,
mosaic->shader);
mosaic->shader = NULL;
}
@ -190,8 +191,8 @@ gst_gl_mosaic_init_shader (GstGLMixer * mixer, GstCaps * outcaps)
GstGLMosaic *mosaic = GST_GL_MOSAIC (mixer);
//blocking call, wait the opengl thread has compiled the shader
return gst_gl_context_gen_shader (mixer->context, mosaic_v_src, mosaic_f_src,
&mosaic->shader);
return gst_gl_context_gen_shader (GST_GL_BASE_MIXER (mixer)->context,
mosaic_v_src, mosaic_f_src, &mosaic->shader);
}
static gboolean
@ -203,7 +204,7 @@ gst_gl_mosaic_process_textures (GstGLMixer * mix, GPtrArray * frames,
mosaic->input_frames = frames;
//blocking call, use a FBO
gst_gl_context_use_fbo_v2 (mix->context,
gst_gl_context_use_fbo_v2 (GST_GL_BASE_MIXER (mix)->context,
GST_VIDEO_INFO_WIDTH (&GST_VIDEO_AGGREGATOR (mix)->info),
GST_VIDEO_INFO_HEIGHT (&GST_VIDEO_AGGREGATOR (mix)->info), mix->fbo,
mix->depthbuffer, out_tex, gst_gl_mosaic_callback, (gpointer) mosaic);
@ -217,7 +218,7 @@ gst_gl_mosaic_callback (gpointer stuff)
{
GstGLMosaic *mosaic = GST_GL_MOSAIC (stuff);
GstGLMixer *mixer = GST_GL_MIXER (mosaic);
GstGLFuncs *gl = mixer->context->gl_vtable;
GstGLFuncs *gl = GST_GL_BASE_MIXER (mixer)->context->gl_vtable;
static GLfloat xrot = 0;
static GLfloat yrot = 0;
@ -239,7 +240,7 @@ gst_gl_mosaic_callback (gpointer stuff)
guint count = 0;
gst_gl_context_clear_shader (mixer->context);
gst_gl_context_clear_shader (GST_GL_BASE_MIXER (mixer)->context);
gl->BindTexture (GL_TEXTURE_2D, 0);
gl->Disable (GL_TEXTURE_2D);
@ -344,7 +345,7 @@ gst_gl_mosaic_callback (gpointer stuff)
gl->Disable (GL_DEPTH_TEST);
gst_gl_context_clear_shader (mixer->context);
gst_gl_context_clear_shader (GST_GL_BASE_MIXER (mixer)->context);
xrot += 0.6f;
yrot += 0.4f;

View file

@ -125,10 +125,11 @@ gst_gl_overlay_init_gl_resources (GstGLFilter * filter)
GstGLOverlay *overlay = GST_GL_OVERLAY (filter);
if (overlay->shader)
gst_gl_context_del_shader (filter->context, overlay->shader);
gst_gl_context_del_shader (GST_GL_BASE_FILTER (filter)->context,
overlay->shader);
return gst_gl_context_gen_shader (filter->context, overlay_v_src,
overlay_f_src, &overlay->shader);
return gst_gl_context_gen_shader (GST_GL_BASE_FILTER (filter)->context,
overlay_v_src, overlay_f_src, &overlay->shader);
}
/* free resources that need a gl context */
@ -136,10 +137,11 @@ static void
gst_gl_overlay_reset_gl_resources (GstGLFilter * filter)
{
GstGLOverlay *overlay = GST_GL_OVERLAY (filter);
const GstGLFuncs *gl = filter->context->gl_vtable;
const GstGLFuncs *gl = GST_GL_BASE_FILTER (filter)->context->gl_vtable;
if (overlay->shader) {
gst_gl_context_del_shader (filter->context, overlay->shader);
gst_gl_context_del_shader (GST_GL_BASE_FILTER (filter)->context,
overlay->shader);
overlay->shader = NULL;
}
@ -245,7 +247,7 @@ gst_gl_overlay_class_init (GstGLOverlayClass * klass)
"Filippo Argiolas <filippo.argiolas@gmail.com>, "
"Matthew Waters <matthew@centricular.com>");
GST_GL_FILTER_CLASS (klass)->supported_gl_api =
GST_GL_BASE_FILTER_CLASS (klass)->supported_gl_api =
GST_GL_API_OPENGL | GST_GL_API_GLES2 | GST_GL_API_OPENGL3;
}
@ -373,7 +375,7 @@ gst_gl_overlay_set_caps (GstGLFilter * filter, GstCaps * incaps,
static void
_unbind_buffer (GstGLOverlay * overlay)
{
const GstGLFuncs *gl = GST_GL_FILTER (overlay)->context->gl_vtable;
const GstGLFuncs *gl = GST_GL_BASE_FILTER (overlay)->context->gl_vtable;
gl->BindBuffer (GL_ARRAY_BUFFER, 0);
@ -384,7 +386,7 @@ _unbind_buffer (GstGLOverlay * overlay)
static void
_bind_buffer (GstGLOverlay * overlay, GLuint vbo)
{
const GstGLFuncs *gl = GST_GL_FILTER (overlay)->context->gl_vtable;
const GstGLFuncs *gl = GST_GL_BASE_FILTER (overlay)->context->gl_vtable;
gl->BindBuffer (GL_ARRAY_BUFFER, vbo);
@ -415,7 +417,7 @@ gst_gl_overlay_callback (gint width, gint height, guint texture, gpointer stuff)
GstMapInfo map_info;
guint image_tex;
gboolean memory_mapped = FALSE;
const GstGLFuncs *gl = filter->context->gl_vtable;
const GstGLFuncs *gl = GST_GL_BASE_FILTER (filter)->context->gl_vtable;
GLushort indices[] = {
0, 1, 2,
@ -423,14 +425,16 @@ gst_gl_overlay_callback (gint width, gint height, guint texture, gpointer stuff)
};
#if GST_GL_HAVE_OPENGL
if (gst_gl_context_get_gl_api (filter->context) & GST_GL_API_OPENGL) {
if (gst_gl_context_get_gl_api (GST_GL_BASE_FILTER (filter)->context) &
GST_GL_API_OPENGL) {
gl->MatrixMode (GL_PROJECTION);
gl->LoadIdentity ();
}
#endif
if (gst_gl_context_get_gl_api (filter->context) & GST_GL_API_OPENGL)
if (gst_gl_context_get_gl_api (GST_GL_BASE_FILTER (filter)->context) &
GST_GL_API_OPENGL)
gl->Enable (GL_TEXTURE_2D);
gl->ActiveTexture (GL_TEXTURE0);
@ -549,7 +553,7 @@ out:
_unbind_buffer (overlay);
}
gst_gl_context_clear_shader (filter->context);
gst_gl_context_clear_shader (GST_GL_BASE_FILTER (filter)->context);
if (memory_mapped)
gst_memory_unmap ((GstMemory *) overlay->image_memory, &map_info);
@ -643,8 +647,8 @@ gst_gl_overlay_load_jpeg (GstGLFilter * filter)
gst_video_info_align (&v_info, &v_align);
overlay->image_memory =
(GstGLMemory *) gst_gl_memory_alloc (filter->context, NULL, &v_info, 0,
&v_align);
(GstGLMemory *) gst_gl_memory_alloc (GST_GL_BASE_FILTER (filter)->context,
NULL, &v_info, 0, &v_align);
if (!gst_memory_map ((GstMemory *) overlay->image_memory, &map_info,
GST_MAP_WRITE)) {
@ -683,7 +687,7 @@ gst_gl_overlay_load_png (GstGLFilter * filter)
png_byte magic[8];
gint n_read;
if (!filter->context)
if (!GST_GL_BASE_FILTER (filter)->context)
return 1;
if ((fp = fopen (overlay->location, "rb")) == NULL)
@ -744,8 +748,8 @@ gst_gl_overlay_load_png (GstGLFilter * filter)
gst_video_info_set_format (&v_info, GST_VIDEO_FORMAT_RGBA, width, height);
overlay->image_memory =
(GstGLMemory *) gst_gl_memory_alloc (filter->context, NULL, &v_info, 0,
NULL);
(GstGLMemory *) gst_gl_memory_alloc (GST_GL_BASE_FILTER (filter)->context,
NULL, &v_info, 0, NULL);
if (!gst_memory_map ((GstMemory *) overlay->image_memory, &map_info,
GST_MAP_WRITE)) {

View file

@ -205,7 +205,7 @@ gst_gl_transformation_class_init (GstGLTransformationClass * klass)
"Filter/Effect/Video", "Transform video on the GPU",
"Lubosz Sarnecki <lubosz@gmail.com>");
GST_GL_FILTER_CLASS (klass)->supported_gl_api =
GST_GL_BASE_FILTER_CLASS (klass)->supported_gl_api =
GST_GL_API_OPENGL | GST_GL_API_OPENGL3 | GST_GL_API_GLES2;
}
@ -393,7 +393,7 @@ static void
gst_gl_transformation_reset_gl (GstGLFilter * filter)
{
GstGLTransformation *transformation = GST_GL_TRANSFORMATION (filter);
const GstGLFuncs *gl = filter->context->gl_vtable;
const GstGLFuncs *gl = GST_GL_BASE_FILTER (filter)->context->gl_vtable;
if (transformation->vao) {
gl->DeleteVertexArrays (1, &transformation->vao);
@ -413,7 +413,8 @@ gst_gl_transformation_reset (GstGLFilter * filter)
/* blocking call, wait until the opengl thread has destroyed the shader */
if (transformation->shader)
gst_gl_context_del_shader (filter->context, transformation->shader);
gst_gl_context_del_shader (GST_GL_BASE_FILTER (filter)->context,
transformation->shader);
transformation->shader = NULL;
}
@ -422,10 +423,10 @@ gst_gl_transformation_init_shader (GstGLFilter * filter)
{
GstGLTransformation *transformation = GST_GL_TRANSFORMATION (filter);
if (gst_gl_context_get_gl_api (filter->context)) {
if (gst_gl_context_get_gl_api (GST_GL_BASE_FILTER (filter)->context)) {
/* blocking call, wait until the opengl thread has compiled the shader */
return gst_gl_context_gen_shader (filter->context, cube_v_src, cube_f_src,
&transformation->shader);
return gst_gl_context_gen_shader (GST_GL_BASE_FILTER (filter)->context,
cube_v_src, cube_f_src, &transformation->shader);
}
return TRUE;
}
@ -439,7 +440,7 @@ gst_gl_transformation_filter_texture (GstGLFilter * filter, guint in_tex,
transformation->in_tex = in_tex;
/* blocking call, use a FBO */
gst_gl_context_use_fbo_v2 (filter->context,
gst_gl_context_use_fbo_v2 (GST_GL_BASE_FILTER (filter)->context,
GST_VIDEO_INFO_WIDTH (&filter->out_info),
GST_VIDEO_INFO_HEIGHT (&filter->out_info),
filter->fbo, filter->depthbuffer,
@ -452,7 +453,8 @@ gst_gl_transformation_filter_texture (GstGLFilter * filter, guint in_tex,
static void
_upload_vertices (GstGLTransformation * transformation)
{
const GstGLFuncs *gl = GST_GL_FILTER (transformation)->context->gl_vtable;
const GstGLFuncs *gl =
GST_GL_BASE_FILTER (transformation)->context->gl_vtable;
/* *INDENT-OFF* */
GLfloat vertices[] = {
@ -472,7 +474,8 @@ _upload_vertices (GstGLTransformation * transformation)
static void
_bind_buffer (GstGLTransformation * transformation)
{
const GstGLFuncs *gl = GST_GL_FILTER (transformation)->context->gl_vtable;
const GstGLFuncs *gl =
GST_GL_BASE_FILTER (transformation)->context->gl_vtable;
gl->BindBuffer (GL_ARRAY_BUFFER, transformation->vertex_buffer);
@ -491,7 +494,8 @@ _bind_buffer (GstGLTransformation * transformation)
static void
_unbind_buffer (GstGLTransformation * transformation)
{
const GstGLFuncs *gl = GST_GL_FILTER (transformation)->context->gl_vtable;
const GstGLFuncs *gl =
GST_GL_BASE_FILTER (transformation)->context->gl_vtable;
gl->BindBuffer (GL_ARRAY_BUFFER, 0);
@ -504,13 +508,13 @@ gst_gl_transformation_callback (gpointer stuff)
{
GstGLFilter *filter = GST_GL_FILTER (stuff);
GstGLTransformation *transformation = GST_GL_TRANSFORMATION (filter);
GstGLFuncs *gl = filter->context->gl_vtable;
GstGLFuncs *gl = GST_GL_BASE_FILTER (filter)->context->gl_vtable;
GLushort indices[] = { 0, 1, 2, 3, 0 };
GLfloat temp_matrix[16];
gst_gl_context_clear_shader (filter->context);
gst_gl_context_clear_shader (GST_GL_BASE_FILTER (filter)->context);
gl->BindTexture (GL_TEXTURE_2D, 0);
gl->ClearColor (0.f, 0.f, 0.f, 1.f);
@ -563,6 +567,6 @@ gst_gl_transformation_callback (gpointer stuff)
else
_unbind_buffer (transformation);
gst_gl_context_clear_shader (filter->context);
gst_gl_context_clear_shader (GST_GL_BASE_FILTER (filter)->context);
transformation->caps_change = FALSE;
}

View file

@ -577,7 +577,7 @@ gst_gl_video_mixer_class_init (GstGLVideoMixerClass * klass)
agg_class->sinkpads_type = GST_TYPE_GL_VIDEO_MIXER_PAD;
GST_GL_MIXER_CLASS (klass)->supported_gl_api =
GST_GL_BASE_MIXER_CLASS (klass)->supported_gl_api =
GST_GL_API_OPENGL | GST_GL_API_OPENGL3 | GST_GL_API_GLES2;
}
@ -680,7 +680,7 @@ _update_caps (GstVideoAggregator * vagg, GstCaps * caps)
static gboolean
_reset_pad_gl (GstAggregator * agg, GstAggregatorPad * aggpad, gpointer udata)
{
const GstGLFuncs *gl = GST_GL_MIXER (agg)->context->gl_vtable;
const GstGLFuncs *gl = GST_GL_BASE_MIXER (agg)->context->gl_vtable;
GstGLVideoMixerPad *pad = GST_GL_VIDEO_MIXER_PAD (aggpad);
if (pad->vertex_buffer) {
@ -694,7 +694,7 @@ _reset_pad_gl (GstAggregator * agg, GstAggregatorPad * aggpad, gpointer udata)
static void
_reset_gl (GstGLContext * context, GstGLVideoMixer * video_mixer)
{
const GstGLFuncs *gl = GST_GL_MIXER (video_mixer)->context->gl_vtable;
const GstGLFuncs *gl = GST_GL_BASE_MIXER (video_mixer)->context->gl_vtable;
if (video_mixer->vao) {
gl->DeleteVertexArrays (1, &video_mixer->vao);
@ -713,16 +713,17 @@ gst_gl_video_mixer_reset (GstGLMixer * mixer)
video_mixer->input_frames = NULL;
if (video_mixer->shader)
gst_gl_context_del_shader (mixer->context, video_mixer->shader);
gst_gl_context_del_shader (GST_GL_BASE_MIXER (mixer)->context,
video_mixer->shader);
video_mixer->shader = NULL;
if (video_mixer->checker)
gst_gl_context_del_shader (mixer->context, video_mixer->checker);
gst_gl_context_del_shader (GST_GL_BASE_MIXER (mixer)->context,
video_mixer->checker);
video_mixer->checker = NULL;
if (mixer->context)
gst_gl_context_thread_add (mixer->context,
(GstGLContextThreadFunc) _reset_gl, mixer);
gst_gl_context_thread_add (GST_GL_BASE_MIXER (mixer)->context,
(GstGLContextThreadFunc) _reset_gl, mixer);
}
static gboolean
@ -731,10 +732,11 @@ 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 (mixer->context, video_mixer->shader);
gst_gl_context_del_shader (GST_GL_BASE_MIXER (mixer)->context,
video_mixer->shader);
return gst_gl_context_gen_shader (mixer->context, video_mixer_v_src,
video_mixer_f_src, &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 gboolean
@ -745,7 +747,7 @@ gst_gl_video_mixer_process_textures (GstGLMixer * mix, GPtrArray * frames,
video_mixer->input_frames = frames;
gst_gl_context_use_fbo_v2 (mix->context,
gst_gl_context_use_fbo_v2 (GST_GL_BASE_MIXER (mix)->context,
GST_VIDEO_INFO_WIDTH (&GST_VIDEO_AGGREGATOR (mix)->info),
GST_VIDEO_INFO_HEIGHT (&GST_VIDEO_AGGREGATOR (mix)->info),
mix->fbo, mix->depthbuffer,
@ -758,7 +760,7 @@ static gboolean
_draw_checker_background (GstGLVideoMixer * video_mixer)
{
GstGLMixer *mixer = GST_GL_MIXER (video_mixer);
const GstGLFuncs *gl = mixer->context->gl_vtable;
const GstGLFuncs *gl = GST_GL_BASE_MIXER (mixer)->context->gl_vtable;
gint attr_position_loc = 0;
const GLushort indices[] = {
@ -775,8 +777,8 @@ _draw_checker_background (GstGLVideoMixer * video_mixer)
/* *INDENT-ON* */
if (!video_mixer->checker) {
if (!gst_gl_context_gen_shader (mixer->context, checker_v_src,
checker_f_src, &video_mixer->checker))
if (!gst_gl_context_gen_shader (GST_GL_BASE_MIXER (mixer)->context,
checker_v_src, checker_f_src, &video_mixer->checker))
return FALSE;
}
@ -810,7 +812,7 @@ static gboolean
_draw_background (GstGLVideoMixer * video_mixer)
{
GstGLMixer *mixer = GST_GL_MIXER (video_mixer);
const GstGLFuncs *gl = mixer->context->gl_vtable;
const GstGLFuncs *gl = GST_GL_BASE_MIXER (mixer)->context->gl_vtable;
switch (video_mixer->background) {
case GST_GL_VIDEO_MIXER_BACKGROUND_BLACK:
@ -841,7 +843,7 @@ gst_gl_video_mixer_callback (gpointer stuff)
{
GstGLVideoMixer *video_mixer = GST_GL_VIDEO_MIXER (stuff);
GstGLMixer *mixer = GST_GL_MIXER (video_mixer);
GstGLFuncs *gl = mixer->context->gl_vtable;
GstGLFuncs *gl = GST_GL_BASE_MIXER (mixer)->context->gl_vtable;
GLint attr_position_loc = 0;
GLint attr_texture_loc = 0;
@ -857,9 +859,10 @@ gst_gl_video_mixer_callback (gpointer stuff)
out_width = GST_VIDEO_INFO_WIDTH (&GST_VIDEO_AGGREGATOR (stuff)->info);
out_height = GST_VIDEO_INFO_HEIGHT (&GST_VIDEO_AGGREGATOR (stuff)->info);
gst_gl_context_clear_shader (mixer->context);
gst_gl_context_clear_shader (GST_GL_BASE_MIXER (mixer)->context);
gl->BindTexture (GL_TEXTURE_2D, 0);
if (gst_gl_context_get_gl_api (mixer->context) & GST_GL_API_OPENGL)
if (gst_gl_context_get_gl_api (GST_GL_BASE_MIXER (mixer)->context) &
GST_GL_API_OPENGL)
gl->Disable (GL_TEXTURE_2D);
gl->Disable (GL_DEPTH_TEST);
@ -986,5 +989,5 @@ gst_gl_video_mixer_callback (gpointer stuff)
gl->Disable (GL_BLEND);
gst_gl_context_clear_shader (mixer->context);
gst_gl_context_clear_shader (GST_GL_BASE_MIXER (mixer)->context);
}

View file

@ -199,8 +199,6 @@ gst_gl_filter_gl_start (GstGLBaseFilter * base_filter)
gint out_width, out_height;
GError *error = NULL;
filter->context = base_filter->context;
out_width = GST_VIDEO_INFO_WIDTH (&filter->out_info);
out_height = GST_VIDEO_INFO_HEIGHT (&filter->out_info);
@ -696,13 +694,6 @@ gst_gl_filter_set_caps (GstBaseTransform * bt, GstCaps * incaps,
goto error;
}
if (filter->out_caps && !gst_caps_is_equal (filter->out_caps, outcaps)) {
if (filter->upload) {
gst_object_unref (filter->upload);
filter->upload = NULL;
}
}
gst_caps_replace (&filter->out_caps, outcaps);
GST_DEBUG ("set_caps %dx%d", GST_VIDEO_INFO_WIDTH (&filter->out_info),

View file

@ -58,9 +58,6 @@ struct _GstGLFilter
{
GstGLBaseFilter parent;
/* FIXME remove */
GstGLContext *context;
GstBufferPool *pool;
GstVideoInfo in_info;
@ -68,18 +65,10 @@ struct _GstGLFilter
GstCaps *out_caps;
/* <private> */
GLuint fbo;
GLuint depthbuffer;
GstGLUpload *upload;
GstGLColorConvert *in_convert;
GstCaps *in_converted_caps;
GstGLDownload *download;
GstBuffer *uploaded_buffer;
/* <private> */
GLuint in_tex_id;
GLuint out_tex_id;
@ -111,7 +100,6 @@ struct _GstGLFilter
struct _GstGLFilterClass
{
GstGLBaseFilterClass parent_class;
GstGLAPI supported_gl_api;
gboolean (*set_caps) (GstGLFilter* filter, GstCaps* incaps, GstCaps* outcaps);
gboolean (*filter) (GstGLFilter *filter, GstBuffer *inbuf, GstBuffer *outbuf);