frei0r: In the src plugins create the frei0r instances in create() before playback starts

This commit is contained in:
Sebastian Dröge 2009-06-29 11:54:26 +02:00
parent 867d51fb31
commit 166ee21b5b

View file

@ -39,22 +39,12 @@ static gboolean
gst_frei0r_src_set_caps (GstBaseSrc * src, GstCaps * caps) gst_frei0r_src_set_caps (GstBaseSrc * src, GstCaps * caps)
{ {
GstFrei0rSrc *self = GST_FREI0R_SRC (src); GstFrei0rSrc *self = GST_FREI0R_SRC (src);
GstFrei0rSrcClass *klass = GST_FREI0R_SRC_GET_CLASS (src);
if (!gst_video_format_parse_caps (caps, &self->fmt, &self->width, if (!gst_video_format_parse_caps (caps, &self->fmt, &self->width,
&self->height) &self->height)
|| !gst_video_parse_caps_framerate (caps, &self->fps_n, &self->fps_d)) || !gst_video_parse_caps_framerate (caps, &self->fps_n, &self->fps_d))
return FALSE; 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, self->width, self->height);
return TRUE; return TRUE;
} }
@ -80,9 +70,18 @@ gst_frei0r_src_create (GstPushSrc * src, GstBuffer ** buf)
*buf = NULL; *buf = NULL;
if (G_UNLIKELY (!self->f0r_instance)) if (G_UNLIKELY (self->width <= 0 || self->height <= 0))
return GST_FLOW_NOT_NEGOTIATED; 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;
}
newsize = gst_video_format_get_size (self->fmt, self->width, self->height); newsize = gst_video_format_get_size (self->fmt, self->width, self->height);
ret = ret =