static gboolean gst_gl_deinterlace_filter (GstGLFilter * filter, GstBuffer * inbuf, GstBuffer * outbuf) { GstGLDeinterlace *deinterlace_filter = GST_GL_DEINTERLACE (filter); gst_gl_filter_filter_texture (filter, inbuf, outbuf); gst_buffer_replace (&deinterlace_filter->prev_buffer, inbuf); return TRUE; }
static gboolean gst_gl_filtershader_filter (GstGLFilter * filter, GstBuffer * inbuf, GstBuffer * outbuf) { GstGLFilterShader *filtershader = GST_GL_FILTERSHADER (filter); if (!_gst_clock_time_to_double (GST_BUFFER_PTS (inbuf), &filtershader->time)) { if (!_gst_clock_time_to_double (GST_BUFFER_DTS (inbuf), &filtershader->time)) _gint64_time_val_to_double (g_get_monotonic_time (), &filtershader->time); } return gst_gl_filter_filter_texture (filter, inbuf, outbuf); }
static GstFlowReturn gst_gl_filter_transform (GstBaseTransform * bt, GstBuffer * inbuf, GstBuffer * outbuf) { GstGLFilter *filter; GstGLFilterClass *filter_class; filter = GST_GL_FILTER (bt); filter_class = GST_GL_FILTER_GET_CLASS (bt); if (!gst_gl_ensure_display (filter, &filter->display)) return GST_FLOW_NOT_NEGOTIATED; g_assert (filter_class->filter || filter_class->filter_texture); if (filter_class->filter) filter_class->filter (filter, inbuf, outbuf); else if (filter_class->filter_texture) gst_gl_filter_filter_texture (filter, inbuf, outbuf); return GST_FLOW_OK; }