diff --git a/gst/gl/gstglfilterreflectedscreen.c b/gst/gl/gstglfilterreflectedscreen.c index 1daa30e43b..087504e367 100644 --- a/gst/gl/gstglfilterreflectedscreen.c +++ b/gst/gl/gstglfilterreflectedscreen.c @@ -65,7 +65,7 @@ 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, - GstGLBuffer * inbuf, GstGLBuffer * outbuf); + GstBuffer * inbuf, GstBuffer * outbuf); static void gst_gl_filter_reflected_screen_draw_background (); static void gst_gl_filter_reflected_screen_draw_floor (); @@ -208,22 +208,34 @@ gst_gl_filter_reflected_screen_get_property (GObject * object, guint prop_id, static gboolean gst_gl_filter_reflected_screen_filter (GstGLFilter * filter, - GstGLBuffer * inbuf, GstGLBuffer * outbuf) + GstBuffer * inbuf, GstBuffer * outbuf) { 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, outbuf->texture, - gst_gl_filter_reflected_screen_callback, inbuf->width, inbuf->height, - inbuf->texture, reflected_screen_filter->fovy, - reflected_screen_filter->aspect, reflected_screen_filter->znear, - reflected_screen_filter->zfar, GST_GL_DISPLAY_PROJECTION_PERSPECTIVE, + 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, + reflected_screen_filter->fovy, reflected_screen_filter->aspect, + reflected_screen_filter->znear, reflected_screen_filter->zfar, + GST_GL_DISPLAY_PROJECTION_PERSPECTIVE, (gpointer) reflected_screen_filter); return TRUE;