From 72fca8a828b05b9dbf2b02b7754006755954fc47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Mon, 29 Jun 2009 11:59:13 +0200 Subject: frei0r: In the filter plugins create the frei0r instances in create() before playback starts --- gst/frei0r/gstfrei0rfilter.c | 23 ++++++++++------------- gst/frei0r/gstfrei0rfilter.h | 2 ++ 2 files changed, 12 insertions(+), 13 deletions(-) (limited to 'gst') diff --git a/gst/frei0r/gstfrei0rfilter.c b/gst/frei0r/gstfrei0rfilter.c index 174d8c51..834e1899 100644 --- a/gst/frei0r/gstfrei0rfilter.c +++ b/gst/frei0r/gstfrei0rfilter.c @@ -40,22 +40,11 @@ gst_frei0r_filter_set_caps (GstBaseTransform * trans, GstCaps * incaps, GstCaps * outcaps) { GstFrei0rFilter *self = GST_FREI0R_FILTER (trans); - GstFrei0rFilterClass *klass = GST_FREI0R_FILTER_GET_CLASS (trans); GstVideoFormat fmt; - gint width, height; - if (!gst_video_format_parse_caps (incaps, &fmt, &width, &height)) + if (!gst_video_format_parse_caps (incaps, &fmt, &self->width, &self->height)) return FALSE; - if (self->f0r_instance) { - klass->ftable->destruct (self->f0r_instance); - self->f0r_instance = NULL; - } - - self->f0r_instance = - gst_frei0r_instance_construct (klass->ftable, klass->properties, - klass->n_properties, self->property_cache, width, height); - return TRUE; } @@ -81,9 +70,17 @@ gst_frei0r_filter_transform (GstBaseTransform * trans, GstBuffer * inbuf, GstFrei0rFilterClass *klass = GST_FREI0R_FILTER_GET_CLASS (trans); gdouble time; - if (!self->f0r_instance) + if (G_UNLIKELY (self->width <= 0 || self->height <= 0)) return GST_FLOW_NOT_NEGOTIATED; + if (G_UNLIKELY (!self->f0r_instance)) { + self->f0r_instance = + gst_frei0r_instance_construct (klass->ftable, klass->properties, + klass->n_properties, self->property_cache, self->width, self->height); + if (G_UNLIKELY (!self->f0r_instance)) + return GST_FLOW_ERROR; + } + time = ((gdouble) GST_BUFFER_TIMESTAMP (inbuf)) / GST_SECOND; if (klass->ftable->update2) diff --git a/gst/frei0r/gstfrei0rfilter.h b/gst/frei0r/gstfrei0rfilter.h index ded2172b..b85c3f6e 100644 --- a/gst/frei0r/gstfrei0rfilter.h +++ b/gst/frei0r/gstfrei0rfilter.h @@ -42,6 +42,8 @@ typedef struct _GstFrei0rFilterClass GstFrei0rFilterClass; struct _GstFrei0rFilter { GstVideoFilter parent; + gint width, height; + f0r_instance_t *f0r_instance; GstFrei0rPropertyValue *property_cache; }; -- cgit v1.2.1