[537/906] GstGLFilterReflectedScreen: update for GstGLMeta

This commit is contained in:
Matthew Waters 2012-07-11 13:55:55 +10:00
parent 5402a43d80
commit d4045e7699

View file

@ -65,7 +65,7 @@ static void gst_gl_filter_reflected_screen_get_property (GObject * object,
guint prop_id, GValue * value, GParamSpec * pspec); guint prop_id, GValue * value, GParamSpec * pspec);
static gboolean gst_gl_filter_reflected_screen_filter (GstGLFilter * filter, 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_background ();
static void gst_gl_filter_reflected_screen_draw_floor (); 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 static gboolean
gst_gl_filter_reflected_screen_filter (GstGLFilter * filter, gst_gl_filter_reflected_screen_filter (GstGLFilter * filter,
GstGLBuffer * inbuf, GstGLBuffer * outbuf) GstBuffer * inbuf, GstBuffer * outbuf)
{ {
GstGLFilterReflectedScreen *reflected_screen_filter = GstGLFilterReflectedScreen *reflected_screen_filter =
GST_GL_FILTER_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) if (reflected_screen_filter->aspect == 0.0)
reflected_screen_filter->aspect = reflected_screen_filter->aspect =
(gfloat) (filter->width) / (gfloat) (filter->height); (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 //blocking call, use a FBO
gst_gl_display_use_fbo (filter->display, filter->width, filter->height, gst_gl_display_use_fbo (filter->display, filter->width, filter->height,
filter->fbo, filter->depthbuffer, outbuf->texture, filter->fbo, filter->depthbuffer, out_meta->memory->tex_id,
gst_gl_filter_reflected_screen_callback, inbuf->width, inbuf->height, gst_gl_filter_reflected_screen_callback, in_v_meta->width,
inbuf->texture, reflected_screen_filter->fovy, in_v_meta->height, in_meta->memory->tex_id,
reflected_screen_filter->aspect, reflected_screen_filter->znear, reflected_screen_filter->fovy, reflected_screen_filter->aspect,
reflected_screen_filter->zfar, GST_GL_DISPLAY_PROJECTION_PERSPECTIVE, reflected_screen_filter->znear, reflected_screen_filter->zfar,
GST_GL_DISPLAY_PROJECTION_PERSPECTIVE,
(gpointer) reflected_screen_filter); (gpointer) reflected_screen_filter);
return TRUE; return TRUE;