[582/906] filters: changes for new API
authorMatthew Waters <ystreet00@gmail.com>
Thu, 20 Sep 2012 13:03:55 +0000 (23:03 +1000)
committerMatthew Waters <ystreet00@gmail.com>
Sat, 15 Mar 2014 17:36:48 +0000 (18:36 +0100)
12 files changed:
gst/gl/gstglbumper.c
gst/gl/gstgldifferencematte.c
gst/gl/gstgleffects.c
gst/gl/gstglfilterapp.c
gst/gl/gstglfilterblur.c
gst/gl/gstglfiltercube.c
gst/gl/gstglfilterglass.c
gst/gl/gstglfilterlaplacian.c
gst/gl/gstglfilterreflectedscreen.c
gst/gl/gstglfiltershader.c
gst/gl/gstglfiltersobel.c
gst/gl/gstgloverlay.c

index 193b0bf..e88b981 100644 (file)
@@ -68,8 +68,8 @@ static void gst_gl_bumper_get_property (GObject * object, guint prop_id,
 
 static void gst_gl_bumper_reset (GstGLFilter * filter);
 static gboolean gst_gl_bumper_init_shader (GstGLFilter * filter);
-static gboolean gst_gl_bumper_filter (GstGLFilter * filter,
-    GstBuffer * inbuf, GstBuffer * outbuf);
+static gboolean gst_gl_bumper_filter_texture (GstGLFilter * filter,
+    guint in_tex, guint out_tex);
 static void gst_gl_bumper_callback (gint width, gint height, guint texture,
     gpointer stuff);
 
@@ -273,7 +273,7 @@ gst_gl_bumper_class_init (GstGLBumperClass * klass)
   gobject_class->set_property = gst_gl_bumper_set_property;
   gobject_class->get_property = gst_gl_bumper_get_property;
 
-  GST_GL_FILTER_CLASS (klass)->filter = gst_gl_bumper_filter;
+  GST_GL_FILTER_CLASS (klass)->filter_texture = gst_gl_bumper_filter_texture;
   GST_GL_FILTER_CLASS (klass)->display_init_cb = gst_gl_bumper_init_resources;
   GST_GL_FILTER_CLASS (klass)->display_reset_cb = gst_gl_bumper_reset_resources;
   GST_GL_FILTER_CLASS (klass)->onInitFBO = gst_gl_bumper_init_shader;
@@ -355,23 +355,20 @@ gst_gl_bumper_init_shader (GstGLFilter * filter)
 }
 
 static gboolean
-gst_gl_bumper_filter (GstGLFilter * filter, GstBuffer * inbuf,
-    GstBuffer * outbuf)
+gst_gl_bumper_filter_texture (GstGLFilter * filter, guint in_tex, guint out_tex)
 {
-  GstGLMeta *in_gl_meta, *out_gl_meta;
-  GstVideoMeta *in_v_meta;
   gpointer bumper_filter = GST_GL_BUMPER (filter);
 
-  in_gl_meta = gst_buffer_get_gl_meta (inbuf);
-  out_gl_meta = gst_buffer_get_gl_meta (outbuf);
-  in_v_meta = gst_buffer_get_video_meta (inbuf);
-
   //blocking call, use a FBO
-  gst_gl_display_use_fbo (filter->display, filter->width, filter->height,
-      filter->fbo, filter->depthbuffer, out_gl_meta->memory->tex_id,
-      gst_gl_bumper_callback, in_v_meta->width, in_v_meta->height,
-      in_gl_meta->memory->tex_id, 45,
-      (gdouble) filter->width / (gdouble) filter->height, 0.1, 50,
+  gst_gl_display_use_fbo (filter->display,
+      GST_VIDEO_INFO_WIDTH (&filter->out_info),
+      GST_VIDEO_INFO_HEIGHT (&filter->out_info),
+      filter->fbo, filter->depthbuffer, out_tex, gst_gl_bumper_callback,
+      GST_VIDEO_INFO_WIDTH (&filter->in_info),
+      GST_VIDEO_INFO_HEIGHT (&filter->in_info),
+      in_tex, 45,
+      (gdouble) GST_VIDEO_INFO_WIDTH (&filter->out_info) /
+      (gdouble) GST_VIDEO_INFO_HEIGHT (&filter->out_info), 0.1, 50,
       GST_GL_DISPLAY_PROJECTION_PERSPECTIVE, bumper_filter);
 
   return TRUE;
index 2e23144..c59efb1 100644 (file)
@@ -63,8 +63,8 @@ static void gst_gl_differencematte_get_property (GObject * object,
 static void gst_gl_differencematte_init_resources (GstGLFilter * filter);
 static void gst_gl_differencematte_reset_resources (GstGLFilter * filter);
 
-static gboolean gst_gl_differencematte_filter (GstGLFilter * filter,
-    GstBuffer * inbuf, GstBuffer * outbuf);
+static gboolean gst_gl_differencematte_filter_texture (GstGLFilter * filter,
+    guint in_tex, guint out_tex);
 
 static gboolean gst_gl_differencematte_loader (GstGLFilter * filter);
 
@@ -86,7 +86,9 @@ gst_gl_differencematte_init_gl_resources (GstGLFilter * filter)
     glGenTextures (1, &differencematte->midtexture[i]);
     glBindTexture (GL_TEXTURE_RECTANGLE_ARB, differencematte->midtexture[i]);
     glTexImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGBA8,
-        filter->width, filter->height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
+        GST_VIDEO_INFO_WIDTH (&filter->out_info),
+        GST_VIDEO_INFO_HEIGHT (&filter->out_info),
+        0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
     glTexParameteri (GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MAG_FILTER,
         GL_LINEAR);
     glTexParameteri (GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER,
@@ -176,7 +178,8 @@ gst_gl_differencematte_class_init (GstGLDifferenceMatteClass * klass)
   gobject_class->set_property = gst_gl_differencematte_set_property;
   gobject_class->get_property = gst_gl_differencematte_get_property;
 
-  GST_GL_FILTER_CLASS (klass)->filter = gst_gl_differencematte_filter;
+  GST_GL_FILTER_CLASS (klass)->filter_texture =
+      gst_gl_differencematte_filter_texture;
   GST_GL_FILTER_CLASS (klass)->display_init_cb =
       gst_gl_differencematte_init_gl_resources;
   GST_GL_FILTER_CLASS (klass)->display_reset_cb =
@@ -211,11 +214,12 @@ gst_gl_differencematte_draw_texture (GstGLDifferenceMatte * differencematte,
 
   glTexCoord2f (0.0, 0.0);
   glVertex2f (-1.0, -1.0);
-  glTexCoord2f ((gfloat) filter->width, 0.0);
+  glTexCoord2f ((gfloat) GST_VIDEO_INFO_WIDTH (&filter->out_info), 0.0);
   glVertex2f (1.0, -1.0);
-  glTexCoord2f ((gfloat) filter->width, (gfloat) filter->height);
+  glTexCoord2f ((gfloat) GST_VIDEO_INFO_WIDTH (&filter->out_info),
+      (gfloat) GST_VIDEO_INFO_HEIGHT (&filter->out_info));
   glVertex2f (1.0, 1.0);
-  glTexCoord2f (0.0, (gfloat) filter->height);
+  glTexCoord2f (0.0, (gfloat) GST_VIDEO_INFO_HEIGHT (&filter->out_info));
   glVertex2f (-1.0, 1.0);
 
   glEnd ();
@@ -313,7 +317,9 @@ init_pixbuf_texture (GstGLDisplay * display, gpointer data)
     glGenTextures (1, &differencematte->savedbgtexture);
     glBindTexture (GL_TEXTURE_RECTANGLE_ARB, differencematte->savedbgtexture);
     glTexImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGBA8,
-        filter->width, filter->height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
+        GST_VIDEO_INFO_WIDTH (&filter->out_info),
+        GST_VIDEO_INFO_HEIGHT (&filter->out_info),
+        0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
     glTexParameteri (GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MAG_FILTER,
         GL_LINEAR);
     glTexParameteri (GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER,
@@ -432,9 +438,9 @@ gst_gl_differencematte_interp (gint width, gint height, guint texture,
       "base_height", (gfloat) differencematte->pbuf_height);
 
   gst_gl_shader_set_uniform_1f (differencematte->shader[3],
-      "final_width", (gfloat) filter->width);
+      "final_width", (gfloat) GST_VIDEO_INFO_WIDTH (&filter->out_info));
   gst_gl_shader_set_uniform_1f (differencematte->shader[3],
-      "final_height", (gfloat) filter->height);
+      "final_height", (gfloat) GST_VIDEO_INFO_HEIGHT (&filter->out_info));
 
   glActiveTexture (GL_TEXTURE2);
   glEnable (GL_TEXTURE_RECTANGLE_ARB);
@@ -459,21 +465,12 @@ gst_gl_differencematte_identity (gint width, gint height, guint texture,
 }
 
 static gboolean
-gst_gl_differencematte_filter (GstGLFilter * filter, GstBuffer * inbuf,
-    GstBuffer * outbuf)
+gst_gl_differencematte_filter_texture (GstGLFilter * filter, guint in_tex,
+    guint out_tex)
 {
   GstGLDifferenceMatte *differencematte = GST_GL_DIFFERENCEMATTE (filter);
-  GstGLMeta *in_meta, *out_meta;
 
-  in_meta = gst_buffer_get_gl_meta (inbuf);
-  out_meta = gst_buffer_get_gl_meta (outbuf);
-
-  if (!in_meta || !out_meta) {
-    GST_ERROR ("A Buffer does not contain required GstGLMeta");
-    return FALSE;
-  }
-
-  differencematte->intexture = in_meta->memory->tex_id;
+  differencematte->intexture = in_tex;
 
   if (differencematte->bg_has_changed && (differencematte->location != NULL)) {
 
@@ -486,7 +483,7 @@ gst_gl_differencematte_filter (GstGLFilter * filter, GstBuffer * inbuf,
 
     /* save current frame, needed to calculate difference between
      * this frame and next ones */
-    gst_gl_filter_render_to_target (filter, in_meta->memory->tex_id,
+    gst_gl_filter_render_to_target (filter, in_tex,
         differencematte->savedbgtexture,
         gst_gl_differencematte_save_texture, differencematte);
 
@@ -499,27 +496,20 @@ gst_gl_differencematte_filter (GstGLFilter * filter, GstBuffer * inbuf,
   }
 
   if (differencematte->savedbgtexture != 0) {
-    gst_gl_filter_render_to_target (filter,
-        in_meta->memory->tex_id,
-        differencematte->midtexture[0],
-        gst_gl_differencematte_diff, differencematte);
-    gst_gl_filter_render_to_target (filter,
-        differencematte->midtexture[0],
-        differencematte->midtexture[1],
-        gst_gl_differencematte_hblur, differencematte);
-    gst_gl_filter_render_to_target (filter,
-        differencematte->midtexture[1],
-        differencematte->midtexture[2],
-        gst_gl_differencematte_vblur, differencematte);
-    gst_gl_filter_render_to_target (filter,
-        in_meta->memory->tex_id,
-        out_meta->memory->tex_id, gst_gl_differencematte_interp,
+    gst_gl_filter_render_to_target (filter, in_tex,
+        differencematte->midtexture[0], gst_gl_differencematte_diff,
         differencematte);
-  } else {
-    gst_gl_filter_render_to_target (filter,
-        in_meta->memory->tex_id,
-        out_meta->memory->tex_id, gst_gl_differencematte_identity,
+    gst_gl_filter_render_to_target (filter, differencematte->midtexture[0],
+        differencematte->midtexture[1], gst_gl_differencematte_hblur,
+        differencematte);
+    gst_gl_filter_render_to_target (filter, differencematte->midtexture[1],
+        differencematte->midtexture[2], gst_gl_differencematte_vblur,
         differencematte);
+    gst_gl_filter_render_to_target (filter, in_tex, out_tex,
+        gst_gl_differencematte_interp, differencematte);
+  } else {
+    gst_gl_filter_render_to_target (filter, in_tex, out_tex,
+        gst_gl_differencematte_identity, differencematte);
   }
 
   return TRUE;
index f434d07..ab7df36 100644 (file)
@@ -63,8 +63,8 @@ static gboolean gst_gl_effects_on_init_gl_context (GstGLFilter * filter);
 static void gst_gl_effects_ghash_func_clean (gpointer key, gpointer value,
     gpointer data);
 
-static gboolean gst_gl_effects_filter (GstGLFilter * filter,
-    GstBuffer * inbuf, GstBuffer * outbuf);
+static gboolean gst_gl_effects_filter_texture (GstGLFilter * filter,
+    guint in_tex, guint out_tex);
 
 /* dont' forget to edit the following when a new effect is added */
 typedef enum
@@ -194,7 +194,9 @@ gst_gl_effects_init_gl_resources (GstGLFilter * filter)
     glGenTextures (1, &effects->midtexture[i]);
     glBindTexture (GL_TEXTURE_RECTANGLE_ARB, effects->midtexture[i]);
     glTexImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGBA8,
-        filter->width, filter->height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
+        GST_VIDEO_INFO_WIDTH (&filter->out_info),
+        GST_VIDEO_INFO_HEIGHT (&filter->out_info),
+        0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
     glTexParameteri (GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MAG_FILTER,
         GL_LINEAR);
     glTexParameteri (GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER,
@@ -235,7 +237,7 @@ gst_gl_effects_class_init (GstGLEffectsClass * klass)
   gobject_class->set_property = gst_gl_effects_set_property;
   gobject_class->get_property = gst_gl_effects_get_property;
 
-  GST_GL_FILTER_CLASS (klass)->filter = gst_gl_effects_filter;
+  GST_GL_FILTER_CLASS (klass)->filter_texture = gst_gl_effects_filter_texture;
   GST_GL_FILTER_CLASS (klass)->display_init_cb =
       gst_gl_effects_init_gl_resources;
   GST_GL_FILTER_CLASS (klass)->display_reset_cb =
@@ -278,11 +280,12 @@ gst_gl_effects_draw_texture (GstGLEffects * effects, GLuint tex)
 
   glTexCoord2f (0.0, 0.0);
   glVertex2f (-1.0, -1.0);
-  glTexCoord2f ((gfloat) filter->width, 0.0);
+  glTexCoord2f ((gfloat) GST_VIDEO_INFO_WIDTH (&filter->out_info), 0.0);
   glVertex2f (1.0, -1.0);
-  glTexCoord2f ((gfloat) filter->width, (gfloat) filter->height);
+  glTexCoord2f ((gfloat) GST_VIDEO_INFO_WIDTH (&filter->out_info),
+      (gfloat) GST_VIDEO_INFO_HEIGHT (&filter->out_info));
   glVertex2f (1.0, 1.0);
-  glTexCoord2f (0.0, (gfloat) filter->height);
+  glTexCoord2f (0.0, (gfloat) GST_VIDEO_INFO_HEIGHT (&filter->out_info));
   glVertex2f (-1.0, 1.0);
 
   glEnd ();
@@ -438,22 +441,13 @@ gst_gl_effects_on_init_gl_context (GstGLFilter * filter)
 }
 
 static gboolean
-gst_gl_effects_filter (GstGLFilter * filter, GstBuffer * inbuf,
-    GstBuffer * outbuf)
+gst_gl_effects_filter_texture (GstGLFilter * filter, guint in_tex,
+    guint out_tex)
 {
   GstGLEffects *effects = GST_GL_EFFECTS (filter);
-  GstGLMeta *in_gl_meta, *out_gl_meta;
 
-  in_gl_meta = gst_buffer_get_gl_meta (inbuf);
-  out_gl_meta = gst_buffer_get_gl_meta (outbuf);
-
-  if (!in_gl_meta || !out_gl_meta) {
-    GST_ERROR ("buffers do not contain required GstGLMeta");
-    return FALSE;
-  }
-
-  effects->intexture = in_gl_meta->memory->tex_id;
-  effects->outtexture = out_gl_meta->memory->tex_id;
+  effects->intexture = in_tex;
+  effects->outtexture = out_tex;
 
   if (effects->horizontal_swap == TRUE)
     gst_gl_display_thread_add (filter->display, set_horizontal_swap, effects);
index 53612a0..7f2e84d 100644 (file)
@@ -66,8 +66,8 @@ static void gst_gl_filter_app_get_property (GObject * object, guint prop_id,
 
 static gboolean gst_gl_filter_app_set_caps (GstGLFilter * filter,
     GstCaps * incaps, GstCaps * outcaps);
-static gboolean gst_gl_filter_app_filter (GstGLFilter * filter,
-    GstBuffer * inbuf, GstBuffer * outbuf);
+static gboolean gst_gl_filter_app_filter_texture (GstGLFilter * filter,
+    guint in_tex, guint out_tex);
 static void gst_gl_filter_app_callback (gint width, gint height, guint texture,
     gpointer stuff);
 
@@ -85,7 +85,8 @@ gst_gl_filter_app_class_init (GstGLFilterAppClass * klass)
   gobject_class->get_property = gst_gl_filter_app_get_property;
 
   GST_GL_FILTER_CLASS (klass)->set_caps = gst_gl_filter_app_set_caps;
-  GST_GL_FILTER_CLASS (klass)->filter = gst_gl_filter_app_filter;
+  GST_GL_FILTER_CLASS (klass)->filter_texture =
+      gst_gl_filter_app_filter_texture;
 
   g_object_class_install_property (gobject_class, PROP_CLIENT_RESHAPE_CALLBACK,
       g_param_spec_pointer ("client-reshape-callback",
@@ -168,40 +169,31 @@ gst_gl_filter_app_set_caps (GstGLFilter * filter, GstCaps * incaps,
 }
 
 static gboolean
-gst_gl_filter_app_filter (GstGLFilter * filter, GstBuffer * inbuf,
-    GstBuffer * outbuf)
+gst_gl_filter_app_filter_texture (GstGLFilter * filter, guint in_tex,
+    guint out_tex)
 {
   GstGLFilterApp *app_filter = GST_GL_FILTER_APP (filter);
-  GstGLMeta *in_meta, *out_meta;
-  GstVideoMeta *in_v_meta;
-
-  in_meta = gst_buffer_get_gl_meta (inbuf);
-  out_meta = gst_buffer_get_gl_meta (outbuf);
-  in_v_meta = gst_buffer_get_video_meta (inbuf);
-
-  if (!in_meta || !out_meta || !in_v_meta) {
-    GST_ERROR ("A Buffer does not contain required GstGLMeta or GstVideoMeta");
-    return FALSE;
-  }
 
   if (app_filter->clientDrawCallback) {
     //blocking call, use a FBO
-    gst_gl_display_use_fbo (filter->display, filter->width, filter->height,
-        filter->fbo, filter->depthbuffer, out_meta->memory->tex_id,
-        app_filter->clientDrawCallback, in_v_meta->width, in_v_meta->height,
-        in_meta->memory->tex_id, 45,
-        (gfloat) filter->width / (gfloat) filter->height,
+    gst_gl_display_use_fbo (filter->display,
+        GST_VIDEO_INFO_WIDTH (&filter->out_info),
+        GST_VIDEO_INFO_HEIGHT (&filter->out_info),
+        filter->fbo, filter->depthbuffer, out_tex,
+        app_filter->clientDrawCallback,
+        GST_VIDEO_INFO_WIDTH (&filter->in_info),
+        GST_VIDEO_INFO_HEIGHT (&filter->in_info),
+        in_tex, 45,
+        (gfloat) GST_VIDEO_INFO_WIDTH (&filter->out_info) /
+        (gfloat) GST_VIDEO_INFO_HEIGHT (&filter->out_info),
         0.1, 100, GST_GL_DISPLAY_PROJECTION_PERSPECTIVE,
         app_filter->client_data);
   }
   //default
   else {
     //blocking call, use a FBO
-    gst_gl_display_use_fbo (filter->display, filter->width, filter->height,
-        filter->fbo, filter->depthbuffer, out_meta->memory->tex_id,
-        gst_gl_filter_app_callback, in_v_meta->width, in_v_meta->height,
-        in_meta->memory->tex_id, 0, filter->width, 0, filter->height,
-        GST_GL_DISPLAY_PROJECTION_ORTHO2D, NULL);
+    gst_gl_filter_render_to_target (filter, in_tex, out_tex,
+        gst_gl_filter_app_callback, NULL);
   }
 
   return TRUE;
index 7515ebe..7243439 100644 (file)
@@ -55,8 +55,8 @@ static void gst_gl_filterblur_get_property (GObject * object, guint prop_id,
 static void gst_gl_filter_filterblur_reset (GstGLFilter * filter);
 
 static gboolean gst_gl_filterblur_init_shader (GstGLFilter * filter);
-static gboolean gst_gl_filterblur_filter (GstGLFilter * filter,
-    GstBuffer * inbuf, GstBuffer * outbuf);
+static gboolean gst_gl_filterblur_filter_texture (GstGLFilter * filter,
+    guint in_tex, guint out_tex);
 static void gst_gl_filterblur_hcallback (gint width, gint height, guint texture,
     gpointer stuff);
 static void gst_gl_filterblur_vcallback (gint width, gint height, guint texture,
@@ -71,7 +71,9 @@ gst_gl_filterblur_init_resources (GstGLFilter * filter)
   glGenTextures (1, &filterblur->midtexture);
   glBindTexture (GL_TEXTURE_RECTANGLE_ARB, filterblur->midtexture);
   glTexImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGBA8,
-      filter->width, filter->height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
+      GST_VIDEO_INFO_WIDTH (&filter->out_info),
+      GST_VIDEO_INFO_HEIGHT (&filter->out_info),
+      0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
   glTexParameteri (GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
   glTexParameteri (GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
   glTexParameteri (GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_WRAP_S,
@@ -104,7 +106,8 @@ gst_gl_filterblur_class_init (GstGLFilterBlurClass * klass)
       "Filter/Effect", "Blur with 9x9 separable convolution",
       "Filippo Argiolas <filippo.argiolas@gmail.com>");
 
-  GST_GL_FILTER_CLASS (klass)->filter = gst_gl_filterblur_filter;
+  GST_GL_FILTER_CLASS (klass)->filter_texture =
+      gst_gl_filterblur_filter_texture;
   GST_GL_FILTER_CLASS (klass)->display_init_cb =
       gst_gl_filterblur_init_resources;
   GST_GL_FILTER_CLASS (klass)->display_reset_cb =
@@ -182,25 +185,16 @@ gst_gl_filterblur_init_shader (GstGLFilter * filter)
 }
 
 static gboolean
-gst_gl_filterblur_filter (GstGLFilter * filter, GstBuffer * inbuf,
-    GstBuffer * outbuf)
+gst_gl_filterblur_filter_texture (GstGLFilter * filter, guint in_tex,
+    guint out_tex)
 {
   GstGLFilterBlur *filterblur = GST_GL_FILTERBLUR (filter);
-  GstGLMeta *in_meta, *out_meta;
 
-  in_meta = gst_buffer_get_gl_meta (inbuf);
-  out_meta = gst_buffer_get_gl_meta (outbuf);
-
-  if (!in_meta || !out_meta) {
-    GST_WARNING ("A buffer did not contain required GstGLMeta");
-    return FALSE;
-  }
-
-  gst_gl_filter_render_to_target (filter, in_meta->memory->tex_id,
+  gst_gl_filter_render_to_target (filter, in_tex,
       filterblur->midtexture, gst_gl_filterblur_hcallback, filterblur);
 
   gst_gl_filter_render_to_target (filter, filterblur->midtexture,
-      out_meta->memory->tex_id, gst_gl_filterblur_vcallback, filterblur);
+      out_tex, gst_gl_filterblur_vcallback, filterblur);
 
   return TRUE;
 }
index d2a6470..3ed9e88 100644 (file)
@@ -78,8 +78,8 @@ static gboolean gst_gl_filter_cube_set_caps (GstGLFilter * filter,
 static void gst_gl_filter_cube_reset (GstGLFilter * filter);
 static gboolean gst_gl_filter_cube_init_shader (GstGLFilter * filter);
 #endif
-static gboolean gst_gl_filter_cube_filter (GstGLFilter * filter,
-    GstBuffer * inbuf, GstBuffer * outbuf);
+static gboolean gst_gl_filter_cube_filter_texture (GstGLFilter * filter,
+    guint in_tex, guint out_tex);
 static void gst_gl_filter_cube_callback (gint width, gint height, guint texture,
     gpointer stuff);
 
@@ -144,7 +144,8 @@ gst_gl_filter_cube_class_init (GstGLFilterCubeClass * klass)
   GST_GL_FILTER_CLASS (klass)->onReset = gst_gl_filter_cube_reset;
 #endif
   GST_GL_FILTER_CLASS (klass)->set_caps = gst_gl_filter_cube_set_caps;
-  GST_GL_FILTER_CLASS (klass)->filter = gst_gl_filter_cube_filter;
+  GST_GL_FILTER_CLASS (klass)->filter_texture =
+      gst_gl_filter_cube_filter_texture;
 
   g_object_class_install_property (gobject_class, PROP_RED,
       g_param_spec_float ("red", "Red", "Background red color",
@@ -248,7 +249,8 @@ gst_gl_filter_cube_set_caps (GstGLFilter * filter, GstCaps * incaps,
   GstGLFilterCube *cube_filter = GST_GL_FILTER_CUBE (filter);
 
   if (cube_filter->aspect == 0)
-    cube_filter->aspect = (gdouble) filter->width / (gdouble) filter->height;
+    cube_filter->aspect = (gdouble) GST_VIDEO_INFO_WIDTH (&filter->out_info) /
+        (gdouble) GST_VIDEO_INFO_HEIGHT (&filter->out_info);
 
   return TRUE;
 }
@@ -275,27 +277,20 @@ gst_gl_filter_cube_init_shader (GstGLFilter * filter)
 #endif
 
 static gboolean
-gst_gl_filter_cube_filter (GstGLFilter * filter, GstBuffer * inbuf,
-    GstBuffer * outbuf)
+gst_gl_filter_cube_filter_texture (GstGLFilter * filter, guint in_tex,
+    guint out_tex)
 {
   GstGLFilterCube *cube_filter = GST_GL_FILTER_CUBE (filter);
-  GstGLMeta *in_meta, *out_meta;
-  GstVideoMeta *in_v_meta;
 
-  in_meta = gst_buffer_get_gl_meta (inbuf);
-  out_meta = gst_buffer_get_gl_meta (outbuf);
-  in_v_meta = gst_buffer_get_video_meta (inbuf);
-
-  if (!in_meta || !in_v_meta || !out_meta) {
-    GST_WARNING ("A buffer does not contain required GstGLMeta"
-        " or GstVideoMeta");
-    return FALSE;
-  }
   //blocking call, use a FBO
-  gst_gl_display_use_fbo (filter->display, filter->width, filter->height,
-      filter->fbo, filter->depthbuffer, out_meta->memory->tex_id,
-      gst_gl_filter_cube_callback, in_v_meta->width, in_v_meta->height,
-      in_meta->memory->tex_id, cube_filter->fovy, cube_filter->aspect,
+  gst_gl_display_use_fbo (filter->display,
+      GST_VIDEO_INFO_WIDTH (&filter->out_info),
+      GST_VIDEO_INFO_HEIGHT (&filter->out_info),
+      filter->fbo, filter->depthbuffer, out_tex,
+      gst_gl_filter_cube_callback,
+      GST_VIDEO_INFO_WIDTH (&filter->in_info),
+      GST_VIDEO_INFO_HEIGHT (&filter->in_info),
+      in_tex, cube_filter->fovy, cube_filter->aspect,
       cube_filter->znear, cube_filter->zfar,
       GST_GL_DISPLAY_PROJECTION_PERSPECTIVE, (gpointer) cube_filter);
 
index f51384d..a617b5b 100644 (file)
@@ -64,8 +64,8 @@ static void gst_gl_filter_glass_get_property (GObject * object, guint prop_id,
 
 static void gst_gl_filter_glass_reset (GstGLFilter * filter);
 static gboolean gst_gl_filter_glass_init_shader (GstGLFilter * filter);
-static gboolean gst_gl_filter_glass_filter (GstGLFilter * filter,
-    GstBuffer * inbuf, GstBuffer * outbuf);
+static gboolean gst_gl_filter_glass_filter_texture (GstGLFilter * filter,
+    guint in_tex, guint out_tex);
 
 static void gst_gl_filter_glass_draw_background_gradient ();
 static void gst_gl_filter_glass_draw_video_plane (GstGLFilter * filter,
@@ -115,7 +115,8 @@ gst_gl_filter_glass_class_init (GstGLFilterGlassClass * klass)
       "Filter/Effect", "Glass Filter",
       "Julien Isorce <julien.isorce@gmail.com>");
 
-  GST_GL_FILTER_CLASS (klass)->filter = gst_gl_filter_glass_filter;
+  GST_GL_FILTER_CLASS (klass)->filter_texture =
+      gst_gl_filter_glass_filter_texture;
   GST_GL_FILTER_CLASS (klass)->onInitFBO = gst_gl_filter_glass_init_shader;
   GST_GL_FILTER_CLASS (klass)->onReset = gst_gl_filter_glass_reset;
 }
@@ -173,30 +174,21 @@ gst_gl_filter_glass_init_shader (GstGLFilter * filter)
 }
 
 static gboolean
-gst_gl_filter_glass_filter (GstGLFilter * filter, GstBuffer * inbuf,
-    GstBuffer * outbuf)
+gst_gl_filter_glass_filter_texture (GstGLFilter * filter, guint in_tex,
+    guint out_tex)
 {
   gpointer glass_filter = GST_GL_FILTER_GLASS (filter);
-  GstGLMeta *in_meta, *out_meta;
-  GstVideoMeta *in_v_meta;
 
-  GST_GL_FILTER_GLASS (glass_filter)->timestamp = GST_BUFFER_TIMESTAMP (inbuf);
-
-  in_meta = gst_buffer_get_gl_meta (inbuf);
-  out_meta = gst_buffer_get_gl_meta (outbuf);
-  in_v_meta = gst_buffer_get_video_meta (inbuf);
-
-  if (!in_meta || !out_meta || !in_v_meta) {
-    GST_WARNING ("A buffer does not contain required GstGLMeta "
-        "or GstVideoMeta");
-    return FALSE;
-  }
   //blocking call, use a FBO
-  gst_gl_display_use_fbo (filter->display, filter->width, filter->height,
-      filter->fbo, filter->depthbuffer, out_meta->memory->tex_id,
-      gst_gl_filter_glass_callback, in_v_meta->width, in_v_meta->height,
-      in_meta->memory->tex_id, 80,
-      (gdouble) filter->width / (gdouble) filter->height, 1.0, 5000.0,
+  gst_gl_display_use_fbo (filter->display,
+      GST_VIDEO_INFO_WIDTH (&filter->out_info),
+      GST_VIDEO_INFO_HEIGHT (&filter->out_info),
+      filter->fbo, filter->depthbuffer, out_tex,
+      gst_gl_filter_glass_callback,
+      GST_VIDEO_INFO_WIDTH (&filter->in_info),
+      GST_VIDEO_INFO_HEIGHT (&filter->in_info),
+      in_tex, 80, (gdouble) GST_VIDEO_INFO_WIDTH (&filter->out_info) /
+      (gdouble) GST_VIDEO_INFO_HEIGHT (&filter->out_info), 1.0, 5000.0,
       GST_GL_DISPLAY_PROJECTION_PERSPECTIVE, (gpointer) glass_filter);
 
   return TRUE;
index 9940226..ec1d9d7 100644 (file)
@@ -59,8 +59,8 @@ static void gst_gl_filter_laplacian_get_property (GObject * object,
 
 static void gst_gl_filter_laplacian_reset (GstGLFilter * filter);
 static gboolean gst_gl_filter_laplacian_init_shader (GstGLFilter * filter);
-static gboolean gst_gl_filter_laplacian_filter (GstGLFilter * filter,
-    GstBuffer * inbuf, GstBuffer * outbuf);
+static gboolean gst_gl_filter_laplacian_filter_texture (GstGLFilter * filter,
+    guint in_tex, guint out_tex);
 static void gst_gl_filter_laplacian_callback (gint width, gint height,
     guint texture, gpointer stuff);
 
@@ -113,7 +113,8 @@ gst_gl_filter_laplacian_class_init (GstGLFilterLaplacianClass * klass)
       "Laplacian Convolution Demo Filter",
       "Filippo Argiolas <filippo.argiolas@gmail.com>");
 
-  GST_GL_FILTER_CLASS (klass)->filter = gst_gl_filter_laplacian_filter;
+  GST_GL_FILTER_CLASS (klass)->filter_texture =
+      gst_gl_filter_laplacian_filter_texture;
   GST_GL_FILTER_CLASS (klass)->onInitFBO = gst_gl_filter_laplacian_init_shader;
   GST_GL_FILTER_CLASS (klass)->onReset = gst_gl_filter_laplacian_reset;
 }
@@ -170,28 +171,15 @@ gst_gl_filter_laplacian_init_shader (GstGLFilter * filter)
 }
 
 static gboolean
-gst_gl_filter_laplacian_filter (GstGLFilter * filter, GstBuffer * inbuf,
-    GstBuffer * outbuf)
+gst_gl_filter_laplacian_filter_texture (GstGLFilter * filter, guint in_tex,
+    guint out_tex)
 {
   gpointer laplacian_filter = GST_GL_FILTER_LAPLACIAN (filter);
-  GstGLMeta *in_meta, *out_meta;
-  GstVideoMeta *in_v_meta;
 
-  in_meta = gst_buffer_get_gl_meta (inbuf);
-  out_meta = gst_buffer_get_gl_meta (outbuf);
-  in_v_meta = gst_buffer_get_video_meta (inbuf);
 
-  if (!in_meta || !out_meta || !in_v_meta) {
-    GST_WARNING ("A buffer does not contain required GstGLMeta"
-        " or GstVideoMeta");
-    return FALSE;
-  }
   //blocking call, use a FBO
-  gst_gl_display_use_fbo (filter->display, filter->width, filter->height,
-      filter->fbo, filter->depthbuffer, out_meta->memory->tex_id,
-      gst_gl_filter_laplacian_callback, in_v_meta->width, in_v_meta->height,
-      in_meta->memory->tex_id, 0, filter->width, 0, filter->height,
-      GST_GL_DISPLAY_PROJECTION_ORTHO2D, laplacian_filter);
+  gst_gl_filter_render_to_target (filter, in_tex, out_tex,
+      gst_gl_filter_laplacian_callback, laplacian_filter);
 
   return TRUE;
 }
index 087504e..7539198 100644 (file)
@@ -64,8 +64,8 @@ static void gst_gl_filter_reflected_screen_set_property (GObject * object,
 static void gst_gl_filter_reflected_screen_get_property (GObject * object,
     guint prop_id, GValue * value, GParamSpec * pspec);
 
-static gboolean gst_gl_filter_reflected_screen_filter (GstGLFilter * filter,
-    GstBuffer * inbuf, GstBuffer * outbuf);
+static gboolean gst_gl_filter_reflected_screen_filter_texture (GstGLFilter *
+    filter, guint in_tex, guint out_tex);
 
 static void gst_gl_filter_reflected_screen_draw_background ();
 static void gst_gl_filter_reflected_screen_draw_floor ();
@@ -94,7 +94,8 @@ gst_gl_filter_reflected_screen_class_init (GstGLFilterReflectedScreenClass *
   gobject_class->set_property = gst_gl_filter_reflected_screen_set_property;
   gobject_class->get_property = gst_gl_filter_reflected_screen_get_property;
 
-  GST_GL_FILTER_CLASS (klass)->filter = gst_gl_filter_reflected_screen_filter;
+  GST_GL_FILTER_CLASS (klass)->filter_texture =
+      gst_gl_filter_reflected_screen_filter_texture;
 
   g_object_class_install_property (gobject_class, PROP_ACTIVE_GRAPHIC_MODE,
       g_param_spec_boolean ("active-graphic-mode",
@@ -207,32 +208,20 @@ gst_gl_filter_reflected_screen_get_property (GObject * object, guint prop_id,
 }
 
 static gboolean
-gst_gl_filter_reflected_screen_filter (GstGLFilter * filter,
-    GstBuffer * inbuf, GstBuffer * outbuf)
+gst_gl_filter_reflected_screen_filter_texture (GstGLFilter * filter,
+    guint in_tex, guint out_tex)
 {
   GstGLFilterReflectedScreen *reflected_screen_filter =
       GST_GL_FILTER_REFLECTED_SCREEN (filter);
-  GstGLMeta *in_meta, *out_meta;
-  GstVideoMeta *in_v_meta;
 
-  if (reflected_screen_filter->aspect == 0.0)
-    reflected_screen_filter->aspect =
-        (gfloat) (filter->width) / (gfloat) (filter->height);
-
-  in_meta = gst_buffer_get_gl_meta (inbuf);
-  out_meta = gst_buffer_get_gl_meta (outbuf);
-  in_v_meta = gst_buffer_get_video_meta (inbuf);
-
-  if (!in_meta || !out_meta || !in_v_meta) {
-    GST_WARNING ("A buffer does not contain required GstGLMeta or"
-        " GstVideoMeta");
-    return FALSE;
-  }
   //blocking call, use a FBO
-  gst_gl_display_use_fbo (filter->display, filter->width, filter->height,
-      filter->fbo, filter->depthbuffer, out_meta->memory->tex_id,
-      gst_gl_filter_reflected_screen_callback, in_v_meta->width,
-      in_v_meta->height, in_meta->memory->tex_id,
+  gst_gl_display_use_fbo (filter->display,
+      GST_VIDEO_INFO_WIDTH (&filter->out_info),
+      GST_VIDEO_INFO_HEIGHT (&filter->out_info),
+      filter->fbo, filter->depthbuffer, out_tex,
+      gst_gl_filter_reflected_screen_callback,
+      GST_VIDEO_INFO_WIDTH (&filter->in_info),
+      GST_VIDEO_INFO_HEIGHT (&filter->in_info), in_tex,
       reflected_screen_filter->fovy, reflected_screen_filter->aspect,
       reflected_screen_filter->znear, reflected_screen_filter->zfar,
       GST_GL_DISPLAY_PROJECTION_PERSPECTIVE,
index 9bccdc2..d5d1e69 100644 (file)
@@ -78,8 +78,8 @@ static void gst_gl_filter_filtershader_reset (GstGLFilter * filter);
 static void gst_gl_filtershader_load_shader (char *filename, char **storage);
 static void gst_gl_filtershader_load_variables (char *filename, char **storage);
 static gboolean gst_gl_filtershader_init_shader (GstGLFilter * filter);
-static gboolean gst_gl_filtershader_filter (GstGLFilter * filter,
-    GstBuffer * inbuf, GstBuffer * outbuf);
+static gboolean gst_gl_filtershader_filter_texture (GstGLFilter * filter,
+    guint in_tex, guint out_tex);
 static void gst_gl_filtershader_hcallback (gint width, gint height,
     guint texture, gpointer stuff);
 
@@ -88,7 +88,9 @@ static void
 gst_gl_filtershader_init_resources (GstGLFilter * filter)
 {
   glTexImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGBA8,
-      filter->width, filter->height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
+      GST_VIDEO_INFO_WIDTH (&filter->out_info),
+      GST_VIDEO_INFO_HEIGHT (&filter->out_info),
+      0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
   glTexParameteri (GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
   glTexParameteri (GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
   glTexParameteri (GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_WRAP_S,
@@ -134,7 +136,8 @@ gst_gl_filtershader_class_init (GstGLFilterShaderClass * klass)
       "OpenGL fragment shader filter", "Filter/Effect",
       "Load GLSL fragment shader from file", "<luc.deschenaux@freesurf.ch>");
 
-  GST_GL_FILTER_CLASS (klass)->filter = gst_gl_filtershader_filter;
+  GST_GL_FILTER_CLASS (klass)->filter_texture =
+      gst_gl_filtershader_filter_texture;
   GST_GL_FILTER_CLASS (klass)->display_init_cb =
       gst_gl_filtershader_init_resources;
   GST_GL_FILTER_CLASS (klass)->display_reset_cb =
@@ -294,7 +297,6 @@ gst_gl_filtershader_variables_parse (GstGLShader * shader, gchar * variables)
   gst_gl_shadervariables_parse (shader, variables, 0);
 }
 
-
 static gboolean
 gst_gl_filtershader_init_shader (GstGLFilter * filter)
 {
@@ -318,26 +320,13 @@ gst_gl_filtershader_init_shader (GstGLFilter * filter)
 }
 
 static gboolean
-gst_gl_filtershader_filter (GstGLFilter * filter, GstBuffer * inbuf,
-    GstBuffer * outbuf)
+gst_gl_filtershader_filter_texture (GstGLFilter * filter, guint in_tex,
+    guint out_tex)
 {
   GstGLFilterShader *filtershader = GST_GL_FILTERSHADER (filter);
-  GstGLMeta *in_meta, *out_meta;
-
-  in_meta = gst_buffer_get_gl_meta (inbuf);
-  out_meta = gst_buffer_get_gl_meta (outbuf);
-
-  if (!in_meta || !out_meta) {
-    GST_ERROR ("A buffer does not contain required GstGLMeta");
-    return FALSE;
-  }
-
-  if (!filtershader->compiled) {
-    gst_gl_filtershader_init_shader (filter);
-  }
 
-  gst_gl_filter_render_to_target (filter, in_meta->memory->tex_id,
-      out_meta->memory->tex_id, gst_gl_filtershader_hcallback, filtershader);
+  gst_gl_filter_render_to_target (filter, in_tex, out_tex,
+      gst_gl_filtershader_hcallback, filtershader);
 
   return TRUE;
 }
index 501841b..4ee65b5 100644 (file)
@@ -61,8 +61,8 @@ static void gst_gl_filtersobel_get_property (GObject * object, guint prop_id,
 static void gst_gl_filter_filtersobel_reset (GstGLFilter * filter);
 
 static gboolean gst_gl_filtersobel_init_shader (GstGLFilter * filter);
-static gboolean gst_gl_filtersobel_filter (GstGLFilter * filter,
-    GstBuffer * inbuf, GstBuffer * outbuf);
+static gboolean gst_gl_filtersobel_filter_texture (GstGLFilter * filter,
+    guint in_tex, guint out_tex);
 
 static void gst_gl_filtersobel_length (gint width, gint height, guint texture,
     gpointer stuff);
@@ -77,7 +77,9 @@ gst_gl_filtersobel_init_resources (GstGLFilter * filter)
     glGenTextures (1, &filtersobel->midtexture[i]);
     glBindTexture (GL_TEXTURE_RECTANGLE_ARB, filtersobel->midtexture[i]);
     glTexImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGBA8,
-        filter->width, filter->height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
+        GST_VIDEO_INFO_WIDTH (&filter->out_info),
+        GST_VIDEO_INFO_HEIGHT (&filter->out_info),
+        0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
     glTexParameteri (GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MAG_FILTER,
         GL_LINEAR);
     glTexParameteri (GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER,
@@ -112,7 +114,8 @@ gst_gl_filtersobel_class_init (GstGLFilterSobelClass * klass)
   gobject_class->set_property = gst_gl_filtersobel_set_property;
   gobject_class->get_property = gst_gl_filtersobel_get_property;
 
-  GST_GL_FILTER_CLASS (klass)->filter = gst_gl_filtersobel_filter;
+  GST_GL_FILTER_CLASS (klass)->filter_texture =
+      gst_gl_filtersobel_filter_texture;
   GST_GL_FILTER_CLASS (klass)->display_init_cb =
       gst_gl_filtersobel_init_resources;
   GST_GL_FILTER_CLASS (klass)->display_reset_cb =
@@ -212,20 +215,12 @@ gst_gl_filtersobel_init_shader (GstGLFilter * filter)
 }
 
 static gboolean
-gst_gl_filtersobel_filter (GstGLFilter * filter, GstBuffer * inbuf,
-    GstBuffer * outbuf)
+gst_gl_filtersobel_filter_texture (GstGLFilter * filter, guint in_tex,
+    guint out_tex)
 {
   GstGLFilterSobel *filtersobel = GST_GL_FILTERSOBEL (filter);
-  GstGLMeta *in_meta, *out_meta;
 
-  in_meta = gst_buffer_get_gl_meta (inbuf);
-  out_meta = gst_buffer_get_gl_meta (outbuf);
-  if (!in_meta || !out_meta) {
-    GST_WARNING ("A buffer does not contain required GstGLMeta");
-    return FALSE;
-  }
-
-  gst_gl_filter_render_to_target_with_shader (filter, in_meta->memory->tex_id,
+  gst_gl_filter_render_to_target_with_shader (filter, in_tex,
       filtersobel->midtexture[0], filtersobel->desat);
   gst_gl_filter_render_to_target_with_shader (filter,
       filtersobel->midtexture[0], filtersobel->midtexture[1],
@@ -234,7 +229,7 @@ gst_gl_filtersobel_filter (GstGLFilter * filter, GstBuffer * inbuf,
       filtersobel->midtexture[1], filtersobel->midtexture[0],
       filtersobel->vconv);
   gst_gl_filter_render_to_target (filter, filtersobel->midtexture[0],
-      out_meta->memory->tex_id, gst_gl_filtersobel_length, filtersobel);
+      out_tex, gst_gl_filtersobel_length, filtersobel);
 
   return TRUE;
 }
index 7a70b37..8481ab6 100644 (file)
@@ -68,8 +68,8 @@ static void gst_gl_overlay_get_property (GObject * object, guint prop_id,
 static void gst_gl_overlay_init_resources (GstGLFilter * filter);
 static void gst_gl_overlay_reset_resources (GstGLFilter * filter);
 
-static gboolean gst_gl_overlay_filter (GstGLFilter * filter,
-    GstBuffer * inbuf, GstBuffer * outbuf);
+static gboolean gst_gl_overlay_filter_texture (GstGLFilter * filter,
+    guint in_tex, guint out_tex);
 
 static gint gst_gl_overlay_load_png (GstGLFilter * filter);
 static gint gst_gl_overlay_load_jpeg (GstGLFilter * filter);
@@ -122,7 +122,7 @@ gst_gl_overlay_class_init (GstGLOverlayClass * klass)
   gobject_class->get_property = gst_gl_overlay_get_property;
 
   GST_GL_FILTER_CLASS (klass)->set_caps = gst_gl_overlay_set_caps;
-  GST_GL_FILTER_CLASS (klass)->filter = gst_gl_overlay_filter;
+  GST_GL_FILTER_CLASS (klass)->filter_texture = gst_gl_overlay_filter_texture;
   GST_GL_FILTER_CLASS (klass)->display_init_cb =
       gst_gl_overlay_init_gl_resources;
   GST_GL_FILTER_CLASS (klass)->display_reset_cb =
@@ -588,19 +588,10 @@ init_pixbuf_texture (GstGLDisplay * display, gpointer data)
 }
 
 static gboolean
-gst_gl_overlay_filter (GstGLFilter * filter, GstBuffer * inbuf,
-    GstBuffer * outbuf)
+gst_gl_overlay_filter_texture (GstGLFilter * filter, guint in_tex,
+    guint out_tex)
 {
   GstGLOverlay *overlay = GST_GL_OVERLAY (filter);
-  GstGLMeta *in_meta, *out_meta;
-
-  in_meta = gst_buffer_get_gl_meta (inbuf);
-  out_meta = gst_buffer_get_gl_meta (outbuf);
-
-  if (!in_meta || !out_meta) {
-    GST_ERROR ("A Buffer does not contain required GstGLMeta");
-    return FALSE;
-  }
 
   if (overlay->pbuf_has_changed && (overlay->location != NULL)) {
     if ((overlay->type_file = gst_gl_overlay_load_png (filter)) == 0)
@@ -616,8 +607,8 @@ gst_gl_overlay_filter (GstGLFilter * filter, GstBuffer * inbuf,
     overlay->pbuf_has_changed = FALSE;
   }
 
-  gst_gl_filter_render_to_target (filter, in_meta->memory->tex_id,
-      out_meta->memory->tex_id, gst_gl_overlay_callback, overlay);
+  gst_gl_filter_render_to_target (filter, in_tex, out_tex,
+      gst_gl_overlay_callback, overlay);
 
   return TRUE;
 }