| /* vim: set filetype=c: */ | |
| % ClassName | |
| GstBaseTransform | |
| % TYPE_CLASS_NAME | |
| GST_TYPE_BASE_TRANSFORM | |
| % pads | |
| srcpad-simple | |
| sinkpad-simple | |
| % pkg-config | |
| gstreamer-base-1.0 | |
| % includes | |
| #include <gst/base/gstbasetransform.h> | |
| % prototypes | |
| static GstCaps *gst_replace_transform_caps (GstBaseTransform * trans, | |
| GstPadDirection direction, GstCaps * caps, GstCaps * filter); | |
| static GstCaps *gst_replace_fixate_caps (GstBaseTransform * trans, | |
| GstPadDirection direction, GstCaps * caps, GstCaps * othercaps); | |
| static gboolean gst_replace_accept_caps (GstBaseTransform * trans, | |
| GstPadDirection direction, GstCaps * caps); | |
| static gboolean gst_replace_set_caps (GstBaseTransform * trans, | |
| GstCaps * incaps, GstCaps * outcaps); | |
| static gboolean gst_replace_query (GstBaseTransform * trans, | |
| GstPadDirection direction, GstQuery * query); | |
| static gboolean gst_replace_decide_allocation (GstBaseTransform * trans, | |
| GstQuery * query); | |
| static gboolean gst_replace_filter_meta (GstBaseTransform * trans, | |
| GstQuery * query, GType api, const GstStructure * params); | |
| static gboolean gst_replace_propose_allocation (GstBaseTransform * trans, | |
| GstQuery * decide_query, GstQuery * query); | |
| static gboolean gst_replace_transform_size (GstBaseTransform * trans, | |
| GstPadDirection direction, GstCaps * caps, gsize size, GstCaps * othercaps, | |
| gsize * othersize); | |
| static gboolean gst_replace_get_unit_size (GstBaseTransform * trans, | |
| GstCaps * caps, gsize * size); | |
| static gboolean gst_replace_start (GstBaseTransform * trans); | |
| static gboolean gst_replace_stop (GstBaseTransform * trans); | |
| static gboolean gst_replace_sink_event (GstBaseTransform * trans, | |
| GstEvent * event); | |
| static gboolean gst_replace_src_event (GstBaseTransform * trans, | |
| GstEvent * event); | |
| static GstFlowReturn gst_replace_prepare_output_buffer (GstBaseTransform * | |
| trans, GstBuffer * input, GstBuffer ** outbuf); | |
| static gboolean gst_replace_copy_metadata (GstBaseTransform * trans, | |
| GstBuffer * input, GstBuffer * outbuf); | |
| static gboolean gst_replace_transform_meta (GstBaseTransform * trans, | |
| GstBuffer * outbuf, GstMeta * meta, GstBuffer * inbuf); | |
| static void gst_replace_before_transform (GstBaseTransform * trans, | |
| GstBuffer * buffer); | |
| static GstFlowReturn gst_replace_transform (GstBaseTransform * trans, | |
| GstBuffer * inbuf, GstBuffer * outbuf); | |
| static GstFlowReturn gst_replace_transform_ip (GstBaseTransform * trans, | |
| GstBuffer * buf); | |
| % declare-class | |
| GstBaseTransformClass *base_transform_class = GST_BASE_TRANSFORM_CLASS (klass); | |
| % set-methods | |
| base_transform_class->transform_caps = GST_DEBUG_FUNCPTR (gst_replace_transform_caps); | |
| base_transform_class->fixate_caps = GST_DEBUG_FUNCPTR (gst_replace_fixate_caps); | |
| base_transform_class->accept_caps = GST_DEBUG_FUNCPTR (gst_replace_accept_caps); | |
| base_transform_class->set_caps = GST_DEBUG_FUNCPTR (gst_replace_set_caps); | |
| base_transform_class->query = GST_DEBUG_FUNCPTR (gst_replace_query); | |
| base_transform_class->decide_allocation = GST_DEBUG_FUNCPTR (gst_replace_decide_allocation); | |
| base_transform_class->filter_meta = GST_DEBUG_FUNCPTR (gst_replace_filter_meta); | |
| base_transform_class->propose_allocation = GST_DEBUG_FUNCPTR (gst_replace_propose_allocation); | |
| base_transform_class->transform_size = GST_DEBUG_FUNCPTR (gst_replace_transform_size); | |
| base_transform_class->get_unit_size = GST_DEBUG_FUNCPTR (gst_replace_get_unit_size); | |
| base_transform_class->start = GST_DEBUG_FUNCPTR (gst_replace_start); | |
| base_transform_class->stop = GST_DEBUG_FUNCPTR (gst_replace_stop); | |
| base_transform_class->sink_event = GST_DEBUG_FUNCPTR (gst_replace_sink_event); | |
| base_transform_class->src_event = GST_DEBUG_FUNCPTR (gst_replace_src_event); | |
| base_transform_class->prepare_output_buffer = GST_DEBUG_FUNCPTR (gst_replace_prepare_output_buffer); | |
| base_transform_class->copy_metadata = GST_DEBUG_FUNCPTR (gst_replace_copy_metadata); | |
| base_transform_class->transform_meta = GST_DEBUG_FUNCPTR (gst_replace_transform_meta); | |
| base_transform_class->before_transform = GST_DEBUG_FUNCPTR (gst_replace_before_transform); | |
| base_transform_class->transform = GST_DEBUG_FUNCPTR (gst_replace_transform); | |
| base_transform_class->transform_ip = GST_DEBUG_FUNCPTR (gst_replace_transform_ip); | |
| % methods | |
| static GstCaps * | |
| gst_replace_transform_caps (GstBaseTransform * trans, GstPadDirection direction, | |
| GstCaps * caps, GstCaps * filter) | |
| { | |
| GstReplace *replace = GST_REPLACE (trans); | |
| GstCaps *othercaps; | |
| GST_DEBUG_OBJECT (replace, "transform_caps"); | |
| othercaps = gst_caps_copy (caps); | |
| /* Copy other caps and modify as appropriate */ | |
| /* This works for the simplest cases, where the transform modifies one | |
| * or more fields in the caps structure. It does not work correctly | |
| * if passthrough caps are preferred. */ | |
| if (direction == GST_PAD_SRC) { | |
| /* transform caps going upstream */ | |
| } else { | |
| /* transform caps going downstream */ | |
| } | |
| if (filter) { | |
| GstCaps *intersect; | |
| intersect = gst_caps_intersect (othercaps, filter); | |
| gst_caps_unref (othercaps); | |
| return intersect; | |
| } else { | |
| return othercaps; | |
| } | |
| } | |
| static GstCaps * | |
| gst_replace_fixate_caps (GstBaseTransform * trans, GstPadDirection direction, | |
| GstCaps * caps, GstCaps * othercaps) | |
| { | |
| GstReplace *replace = GST_REPLACE (trans); | |
| GST_DEBUG_OBJECT (replace, "fixate_caps"); | |
| return NULL; | |
| } | |
| static gboolean | |
| gst_replace_accept_caps (GstBaseTransform * trans, GstPadDirection direction, | |
| GstCaps * caps) | |
| { | |
| GstReplace *replace = GST_REPLACE (trans); | |
| GST_DEBUG_OBJECT (replace, "accept_caps"); | |
| return TRUE; | |
| } | |
| static gboolean | |
| gst_replace_set_caps (GstBaseTransform * trans, GstCaps * incaps, | |
| GstCaps * outcaps) | |
| { | |
| GstReplace *replace = GST_REPLACE (trans); | |
| GST_DEBUG_OBJECT (replace, "set_caps"); | |
| return TRUE; | |
| } | |
| static gboolean | |
| gst_replace_query (GstBaseTransform * trans, GstPadDirection direction, | |
| GstQuery * query) | |
| { | |
| GstReplace *replace = GST_REPLACE (trans); | |
| GST_DEBUG_OBJECT (replace, "query"); | |
| return TRUE; | |
| } | |
| /* decide allocation query for output buffers */ | |
| static gboolean | |
| gst_replace_decide_allocation (GstBaseTransform * trans, GstQuery * query) | |
| { | |
| GstReplace *replace = GST_REPLACE (trans); | |
| GST_DEBUG_OBJECT (replace, "decide_allocation"); | |
| return TRUE; | |
| } | |
| static gboolean | |
| gst_replace_filter_meta (GstBaseTransform * trans, GstQuery * query, GType api, | |
| const GstStructure * params) | |
| { | |
| GstReplace *replace = GST_REPLACE (trans); | |
| GST_DEBUG_OBJECT (replace, "filter_meta"); | |
| return TRUE; | |
| } | |
| /* propose allocation query parameters for input buffers */ | |
| static gboolean | |
| gst_replace_propose_allocation (GstBaseTransform * trans, | |
| GstQuery * decide_query, GstQuery * query) | |
| { | |
| GstReplace *replace = GST_REPLACE (trans); | |
| GST_DEBUG_OBJECT (replace, "propose_allocation"); | |
| return TRUE; | |
| } | |
| /* transform size */ | |
| static gboolean | |
| gst_replace_transform_size (GstBaseTransform * trans, GstPadDirection direction, | |
| GstCaps * caps, gsize size, GstCaps * othercaps, gsize * othersize) | |
| { | |
| GstReplace *replace = GST_REPLACE (trans); | |
| GST_DEBUG_OBJECT (replace, "transform_size"); | |
| return TRUE; | |
| } | |
| static gboolean | |
| gst_replace_get_unit_size (GstBaseTransform * trans, GstCaps * caps, | |
| gsize * size) | |
| { | |
| GstReplace *replace = GST_REPLACE (trans); | |
| GST_DEBUG_OBJECT (replace, "get_unit_size"); | |
| return TRUE; | |
| } | |
| /* states */ | |
| static gboolean | |
| gst_replace_start (GstBaseTransform * trans) | |
| { | |
| GstReplace *replace = GST_REPLACE (trans); | |
| GST_DEBUG_OBJECT (replace, "start"); | |
| return TRUE; | |
| } | |
| static gboolean | |
| gst_replace_stop (GstBaseTransform * trans) | |
| { | |
| GstReplace *replace = GST_REPLACE (trans); | |
| GST_DEBUG_OBJECT (replace, "stop"); | |
| return TRUE; | |
| } | |
| /* sink and src pad event handlers */ | |
| static gboolean | |
| gst_replace_sink_event (GstBaseTransform * trans, GstEvent * event) | |
| { | |
| GstReplace *replace = GST_REPLACE (trans); | |
| GST_DEBUG_OBJECT (replace, "sink_event"); | |
| return GST_BASE_TRANSFORM_CLASS (gst_replace_parent_class)->sink_event ( | |
| trans, event); | |
| } | |
| static gboolean | |
| gst_replace_src_event (GstBaseTransform * trans, GstEvent * event) | |
| { | |
| GstReplace *replace = GST_REPLACE (trans); | |
| GST_DEBUG_OBJECT (replace, "src_event"); | |
| return GST_BASE_TRANSFORM_CLASS (gst_replace_parent_class)->src_event ( | |
| trans, event); | |
| } | |
| static GstFlowReturn | |
| gst_replace_prepare_output_buffer (GstBaseTransform * trans, GstBuffer * input, | |
| GstBuffer ** outbuf) | |
| { | |
| GstReplace *replace = GST_REPLACE (trans); | |
| GST_DEBUG_OBJECT (replace, "prepare_output_buffer"); | |
| return GST_FLOW_OK; | |
| } | |
| /* metadata */ | |
| static gboolean | |
| gst_replace_copy_metadata (GstBaseTransform * trans, GstBuffer * input, | |
| GstBuffer * outbuf) | |
| { | |
| GstReplace *replace = GST_REPLACE (trans); | |
| GST_DEBUG_OBJECT (replace, "copy_metadata"); | |
| return TRUE; | |
| } | |
| static gboolean | |
| gst_replace_transform_meta (GstBaseTransform * trans, GstBuffer * outbuf, | |
| GstMeta * meta, GstBuffer * inbuf) | |
| { | |
| GstReplace *replace = GST_REPLACE (trans); | |
| GST_DEBUG_OBJECT (replace, "transform_meta"); | |
| return TRUE; | |
| } | |
| static void | |
| gst_replace_before_transform (GstBaseTransform * trans, GstBuffer * buffer) | |
| { | |
| GstReplace *replace = GST_REPLACE (trans); | |
| GST_DEBUG_OBJECT (replace, "before_transform"); | |
| } | |
| /* transform */ | |
| static GstFlowReturn | |
| gst_replace_transform (GstBaseTransform * trans, GstBuffer * inbuf, | |
| GstBuffer * outbuf) | |
| { | |
| GstReplace *replace = GST_REPLACE (trans); | |
| GST_DEBUG_OBJECT (replace, "transform"); | |
| return GST_FLOW_OK; | |
| } | |
| static GstFlowReturn | |
| gst_replace_transform_ip (GstBaseTransform * trans, GstBuffer * buf) | |
| { | |
| GstReplace *replace = GST_REPLACE (trans); | |
| GST_DEBUG_OBJECT (replace, "transform_ip"); | |
| return GST_FLOW_OK; | |
| } | |
| % end |