gl: get the context from basemixer/basefilter
authorMatthew Waters <matthew@centricular.com>
Fri, 13 Mar 2015 10:25:35 +0000 (10:25 +0000)
committerTim-Philipp Müller <tim@centricular.com>
Sat, 9 Dec 2017 19:31:57 +0000 (19:31 +0000)
35 files changed:
ext/gl/effects/gstgleffectbulge.c
ext/gl/effects/gstgleffectfisheye.c
ext/gl/effects/gstgleffectglow.c
ext/gl/effects/gstgleffectidentity.c
ext/gl/effects/gstgleffectlumatocurve.c
ext/gl/effects/gstgleffectmirror.c
ext/gl/effects/gstgleffectrgbtocurve.c
ext/gl/effects/gstgleffectsin.c
ext/gl/effects/gstgleffectsquare.c
ext/gl/effects/gstgleffectsqueeze.c
ext/gl/effects/gstgleffectstretch.c
ext/gl/effects/gstgleffecttunnel.c
ext/gl/effects/gstgleffecttwirl.c
ext/gl/effects/gstgleffectxray.c
ext/gl/gstglbumper.c
ext/gl/gstglcolorscale.c
ext/gl/gstgldeinterlace.c
ext/gl/gstgldifferencematte.c
ext/gl/gstgleffects.c
ext/gl/gstglfilterapp.c
ext/gl/gstglfilterblur.c
ext/gl/gstglfiltercube.c
ext/gl/gstglfilterglass.c
ext/gl/gstglfilterlaplacian.c
ext/gl/gstglfilterreflectedscreen.c
ext/gl/gstglfiltershader.c
ext/gl/gstglfiltersobel.c
ext/gl/gstglmixer.c
ext/gl/gstglmixer.h
ext/gl/gstglmosaic.c
ext/gl/gstgloverlay.c
ext/gl/gstgltransformation.c
ext/gl/gstglvideomixer.c
gst-libs/gst/gl/gstglfilter.c
gst-libs/gst/gl/gstglfilter.h

index a59f276..75b9e2f 100644 (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");
index 80456ff..524b659 100644 (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");
index c3adeeb..4853fd9 100644 (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");
index 4e1cb04..eec357e 100644 (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
index 643e34b..2ce1de3 100644 (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");
index 06c9473..1713d54 100644 (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");
index 3e4dda6..18b0905 100644 (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");
index 2a6c051..8d6be54 100644 (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");
index 7b4271e..b1619c0 100644 (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");
index 6a723f8..863157a 100644 (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");
index 859f64e..206a097 100644 (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");
index 479434a..b547436 100644 (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");
index 4a6d749..3a9b374 100644 (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);
   }
 
index 6657a9b..79aeca1 100644 (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");
index 7673c9b..a60944d 100644 (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
index d41e320..fa22bf9 100644 (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 ();
index 641759e..bf969f2 100644 (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),
index 31d29e9..ce1b513 100644 (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)
index dab8b32..a85e624 100644 (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);
 
index 78be4f8..e347e28 100644 (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 ();
index ba7f4e4..842a014 100644 (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 ();
index e758241..518b295 100644 (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;
index f65be66..0fe109a 100644 (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);
index 4dbcf7d..da656bc 100644 (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,
index b0d5711..bacb8f3 100644 (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
index 77a597c..91c4cfb 100644 (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);
 
index 55e93b7..f70b6d2 100644 (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);
index a1da5f4..20d858a 100644 (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);
 
index 5b33475..01eed34 100644 (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;
index e8daef9..726674b 100644 (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;
index 1371264..2dd5326 100644 (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)) {
index 689a6cd..f9273c7 100644 (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;
 }
index ad73404..c399e92 100644 (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);
 }
index cc07954..886c5e9 100644 (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),
index e7e5b79..fcca308 100644 (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);