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);
}
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);
}
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;