[552/906] GstGLFilterApp: update for GstGLMeta
authorMatthew Waters <ystreet00@gmail.com>
Mon, 16 Jul 2012 13:22:58 +0000 (23:22 +1000)
committerMatthew Waters <ystreet00@gmail.com>
Sat, 15 Mar 2014 17:36:47 +0000 (18:36 +0100)
gst/gl/gstglfilterapp.c

index 9a28599..53612a0 100644 (file)
@@ -67,7 +67,7 @@ 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,
-    GstGLBuffer * inbuf, GstGLBuffer * outbuf);
+    GstBuffer * inbuf, GstBuffer * outbuf);
 static void gst_gl_filter_app_callback (gint width, gint height, guint texture,
     gpointer stuff);
 
@@ -168,17 +168,29 @@ gst_gl_filter_app_set_caps (GstGLFilter * filter, GstCaps * incaps,
 }
 
 static gboolean
-gst_gl_filter_app_filter (GstGLFilter * filter, GstGLBuffer * inbuf,
-    GstGLBuffer * outbuf)
+gst_gl_filter_app_filter (GstGLFilter * filter, GstBuffer * inbuf,
+    GstBuffer * outbuf)
 {
   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, outbuf->texture,
-        app_filter->clientDrawCallback, inbuf->width, inbuf->height,
-        inbuf->texture, 45, (gfloat) filter->width / (gfloat) 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,
         0.1, 100, GST_GL_DISPLAY_PROJECTION_PERSPECTIVE,
         app_filter->client_data);
   }
@@ -186,10 +198,10 @@ gst_gl_filter_app_filter (GstGLFilter * filter, GstGLBuffer * inbuf,
   else {
     //blocking call, use a FBO
     gst_gl_display_use_fbo (filter->display, filter->width, filter->height,
-        filter->fbo, filter->depthbuffer, outbuf->texture,
-        gst_gl_filter_app_callback, inbuf->width, inbuf->height, inbuf->texture,
-        0, filter->width, 0, filter->height, GST_GL_DISPLAY_PROJECTION_ORTHO2D,
-        NULL);
+        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);
   }
 
   return TRUE;