[gst-cvs] gst-plugins-bad: frei0r: In the mixer plugins create the frei0r instances in create() before playback starts

Sebastian Dröge slomo at kemper.freedesktop.org
Mon Jun 29 03:02:41 PDT 2009


Module: gst-plugins-bad
Branch: master
Commit: 0de4e9df00e2dfe2671631e696731d84d51d5829
URL:    http://cgit.freedesktop.org/gstreamer/gst-plugins-bad/commit/?id=0de4e9df00e2dfe2671631e696731d84d51d5829

Author: Sebastian Dröge <sebastian.droege at collabora.co.uk>
Date:   Mon Jun 29 11:56:59 2009 +0200

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

---

 gst/frei0r/gstfrei0rmixer.c |   21 +++++++++------------
 1 files changed, 9 insertions(+), 12 deletions(-)

diff --git a/gst/frei0r/gstfrei0rmixer.c b/gst/frei0r/gstfrei0rmixer.c
index 745c330..684519d 100644
--- a/gst/frei0r/gstfrei0rmixer.c
+++ b/gst/frei0r/gstfrei0rmixer.c
@@ -195,7 +195,6 @@ static gboolean
 gst_frei0r_mixer_set_caps (GstPad * pad, GstCaps * caps)
 {
   GstFrei0rMixer *self = GST_FREI0R_MIXER (gst_pad_get_parent (pad));
-  GstFrei0rMixerClass *klass = GST_FREI0R_MIXER_GET_CLASS (self);
   gboolean ret = TRUE;
 
   gst_caps_replace (&self->caps, caps);
@@ -215,16 +214,6 @@ gst_frei0r_mixer_set_caps (GstPad * pad, GstCaps * caps)
       ret = FALSE;
       goto out;
     }
-
-    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);
-
   }
 out:
 
@@ -543,9 +532,17 @@ gst_frei0r_mixer_collected (GstCollectPads * pads, GstFrei0rMixer * self)
   GstFrei0rMixerClass *klass = GST_FREI0R_MIXER_GET_CLASS (self);
   gdouble time;
 
-  if (G_UNLIKELY (!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;
+  }
+
   if (self->newseg_event) {
     gst_pad_push_event (self->src, self->newseg_event);
     self->newseg_event = NULL;





More information about the Gstreamer-commits mailing list