[552/906] GstGLFilterApp: update for GstGLMeta

This commit is contained in:
Matthew Waters 2012-07-16 23:22:58 +10:00
parent 8ae1fd34e0
commit 61e2266d16

View 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, static gboolean gst_gl_filter_app_set_caps (GstGLFilter * filter,
GstCaps * incaps, GstCaps * outcaps); GstCaps * incaps, GstCaps * outcaps);
static gboolean gst_gl_filter_app_filter (GstGLFilter * filter, 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, static void gst_gl_filter_app_callback (gint width, gint height, guint texture,
gpointer stuff); gpointer stuff);
@ -168,17 +168,29 @@ gst_gl_filter_app_set_caps (GstGLFilter * filter, GstCaps * incaps,
} }
static gboolean static gboolean
gst_gl_filter_app_filter (GstGLFilter * filter, GstGLBuffer * inbuf, gst_gl_filter_app_filter (GstGLFilter * filter, GstBuffer * inbuf,
GstGLBuffer * outbuf) GstBuffer * outbuf)
{ {
GstGLFilterApp *app_filter = GST_GL_FILTER_APP (filter); 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) { if (app_filter->clientDrawCallback) {
//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,
app_filter->clientDrawCallback, inbuf->width, inbuf->height, app_filter->clientDrawCallback, in_v_meta->width, in_v_meta->height,
inbuf->texture, 45, (gfloat) filter->width / (gfloat) filter->height, in_meta->memory->tex_id, 45,
(gfloat) filter->width / (gfloat) filter->height,
0.1, 100, GST_GL_DISPLAY_PROJECTION_PERSPECTIVE, 0.1, 100, GST_GL_DISPLAY_PROJECTION_PERSPECTIVE,
app_filter->client_data); app_filter->client_data);
} }
@ -186,10 +198,10 @@ gst_gl_filter_app_filter (GstGLFilter * filter, GstGLBuffer * inbuf,
else { else {
//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_app_callback, inbuf->width, inbuf->height, inbuf->texture, gst_gl_filter_app_callback, in_v_meta->width, in_v_meta->height,
0, filter->width, 0, filter->height, GST_GL_DISPLAY_PROJECTION_ORTHO2D, in_meta->memory->tex_id, 0, filter->width, 0, filter->height,
NULL); GST_GL_DISPLAY_PROJECTION_ORTHO2D, NULL);
} }
return TRUE; return TRUE;