+2008-12-08 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * libs/gst/base/gstbasetransform.c:
+ (gst_base_transform_prepare_output_buffer),
+ (gst_base_transform_getrange), (gst_base_transform_chain):
+ * libs/gst/base/gstbasetransform.h:
+ Add vmethod that is called before we start the transform and which can
+ be used to configure the transform, such as dynamic properties.
+
2008-12-05 David Schleef <ds@schleef.org>
* gst/gst.c:
/* only discard it when the input was not writable, otherwise, we reuse
* the input buffer. */
discard = gst_buffer_is_writable (in_buf);
+ GST_DEBUG_OBJECT (trans, "discard: %d", discard);
} else {
GST_DEBUG_OBJECT (trans, "getting output size for copy transform");
/* copy transform, figure out the output size */
guint length, GstBuffer ** buffer)
{
GstBaseTransform *trans;
+ GstBaseTransformClass *klass;
GstFlowReturn ret;
GstBuffer *inbuf;
if (G_UNLIKELY (ret != GST_FLOW_OK))
goto pull_error;
+ klass = GST_BASE_TRANSFORM_GET_CLASS (trans);
+ if (klass->before_transform)
+ klass->before_transform (trans, inbuf);
+
GST_BASE_TRANSFORM_LOCK (trans);
ret = gst_base_transform_handle_buffer (trans, inbuf, buffer);
GST_BASE_TRANSFORM_UNLOCK (trans);
gst_base_transform_chain (GstPad * pad, GstBuffer * buffer)
{
GstBaseTransform *trans;
+ GstBaseTransformClass *klass;
GstFlowReturn ret;
GstClockTime last_stop = GST_CLOCK_TIME_NONE;
GstBuffer *outbuf = NULL;
last_stop = GST_BUFFER_TIMESTAMP (buffer);
}
+ klass = GST_BASE_TRANSFORM_GET_CLASS (trans);
+ if (klass->before_transform)
+ klass->before_transform (trans, buffer);
+
/* protect transform method and concurrent buffer alloc */
GST_BASE_TRANSFORM_LOCK (trans);
ret = gst_base_transform_handle_buffer (trans, buffer, &outbuf);
* analysis can return a subbuffer or even just
* increment the reference to the input buffer (if in
* passthrough mode)
+ * @before_transform: Optional. Since 0.10.22
+ * This method is called right before the base class will
+ * start processing. Dynamic properties or other delayed
+ * configuration could be performed in this method.
*
* Subclasses can override any of the available virtual methods or not, as
* needed. At minimum either @transform or @transform_ip need to be overridden.
/* src event */
gboolean (*src_event) (GstBaseTransform *trans, GstEvent *event);
+ void (*before_transform) (GstBaseTransform *trans, GstBuffer *buffer);
+
/*< private >*/
- gpointer _gst_reserved[GST_PADDING_LARGE - 1];
+ gpointer _gst_reserved[GST_PADDING_LARGE - 2];
};
GType gst_base_transform_get_type (void);