/* vim: set filetype=c: */ % ClassName GstVideoFilter % TYPE_CLASS_NAME GST_TYPE_VIDEO_FILTER % pads sinkpad-template-video srcpad-template-video % pkg-config gstreamer-video-0.10 % includes #include #include % prototypes static gboolean gst_replace_start (GstBaseTransform * trans); static gboolean gst_replace_stop (GstBaseTransform * trans); static GstFlowReturn gst_replace_transform_ip (GstBaseTransform * trans, GstBuffer * buf); static gboolean gst_replace_set_caps (GstBaseTransform * trans, GstCaps * incaps, GstCaps * outcaps); % declare-class GstBaseTransformClass *base_transform_class = GST_BASE_TRANSFORM_CLASS (klass); % set-methods base_transform_class->start = GST_DEBUG_FUNCPTR (gst_replace_start); base_transform_class->stop = GST_DEBUG_FUNCPTR (gst_replace_stop); base_transform_class->set_caps = GST_DEBUG_FUNCPTR (gst_replace_set_caps); base_transform_class->transform_ip = GST_DEBUG_FUNCPTR (gst_replace_transform_ip); % methods static gboolean gst_replace_start (GstBaseTransform * trans) { /* GstReplace *replace = GST_REPLACE (trans); */ /* initialize processing */ return TRUE; } static gboolean gst_replace_stop (GstBaseTransform * trans) { /* GstReplace *replace = GST_REPLACE (trans); */ /* finalize processing */ return TRUE; } static gboolean gst_replace_set_caps (GstBaseTransform * trans, GstCaps * incaps, GstCaps * outcaps) { /* GstReplace *replace = GST_REPLACE (trans); */ GstVideoFormat video_format; int w, h; /* parse input caps, output caps are the same so we ignore them */ if (!gst_video_format_parse_caps (incaps, &video_format, &w, &h)) return FALSE; /* You'll need to add those fields to the instance struct first */ /* replace->video_format = video_format; */ /* replace->width = w; */ /* replace->height = h; */ return TRUE; } static GstFlowReturn gst_replace_transform_ip (GstBaseTransform * trans, GstBuffer * buf) { /* GstReplace *replace = GST_REPLACE (trans); */ /* process the video data in the buffer in-place */ return GST_FLOW_OK; } % end