diff options
author | Sebastian Dröge <sebastian@centricular.com> | 2016-01-26 17:50:30 +0100 |
---|---|---|
committer | Sebastian Dröge <sebastian@centricular.com> | 2016-01-27 16:45:29 +0100 |
commit | 2e8d4e8c7a7c24af7301793d32b77f4ec5d2d75c (patch) | |
tree | 39beb0802b4e05cd950d7975a8b9fad1023feb8c /gst/deinterlace | |
parent | 8c1c091439ee9c732a7c65905926d6b2216a5e5e (diff) | |
download | gstreamer-plugins-good-2e8d4e8c7a7c24af7301793d32b77f4ec5d2d75c.tar.gz |
deinterlace: Implement reconfiguration a bit better
And e.g. consider reconfiguration caused by RECONFIGURE events too.
https://bugzilla.gnome.org/show_bug.cgi?id=720388
Diffstat (limited to 'gst/deinterlace')
-rw-r--r-- | gst/deinterlace/gstdeinterlace.c | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/gst/deinterlace/gstdeinterlace.c b/gst/deinterlace/gstdeinterlace.c index 2aae805da..f01efd9f8 100644 --- a/gst/deinterlace/gstdeinterlace.c +++ b/gst/deinterlace/gstdeinterlace.c @@ -34,10 +34,6 @@ * </refsect2> */ -/* FIXME PORTING 0.11: - * - reconfiguration needs to be done differently - */ - #ifdef HAVE_CONFIG_H #include "config.h" #endif @@ -847,7 +843,6 @@ gst_deinterlace_set_property (GObject * object, guint prop_id, GST_OBJECT_LOCK (self); new_mode = g_value_get_enum (value); - /* FIXME: reconfiguration should probably be done differently */ if (self->mode != new_mode && gst_pad_has_current_caps (self->srcpad)) { self->reconfigure = TRUE; self->new_mode = new_mode; @@ -866,7 +861,6 @@ gst_deinterlace_set_property (GObject * object, guint prop_id, GST_OBJECT_LOCK (self); new_fields = g_value_get_enum (value); - /* FIXME: reconfiguration should probably be done differently */ if (self->fields != new_fields && gst_pad_has_current_caps (self->srcpad)) { self->reconfigure = TRUE; self->new_fields = new_fields; @@ -1550,7 +1544,11 @@ restart: /* setcaps on sink and src pads */ sinkcaps = gst_pad_get_current_caps (self->sinkpad); - gst_deinterlace_setcaps (self, self->sinkpad, sinkcaps); // FIXME + if (!gst_deinterlace_setcaps (self, self->sinkpad, sinkcaps)) { + gst_caps_unref (sinkcaps); + return GST_FLOW_NOT_NEGOTIATED; + } + gst_caps_unref (sinkcaps); if (flush_one && self->drop_orphans) { @@ -2014,7 +2012,7 @@ gst_deinterlace_chain (GstPad * pad, GstObject * parent, GstBuffer * buf) GstFlowReturn ret = GST_FLOW_OK; GST_OBJECT_LOCK (self); - if (self->reconfigure) { /* FIXME: reconfigure should probably work differently */ + if (self->reconfigure || gst_pad_check_reconfigure (self->srcpad)) { GstCaps *caps; if ((gint) self->new_fields != -1) @@ -2028,8 +2026,13 @@ gst_deinterlace_chain (GstPad * pad, GstObject * parent, GstBuffer * buf) GST_OBJECT_UNLOCK (self); caps = gst_pad_get_current_caps (self->sinkpad); if (caps != NULL) { - gst_deinterlace_setcaps (self, self->sinkpad, caps); // FIXME + if (!gst_deinterlace_setcaps (self, self->sinkpad, caps)) { + gst_caps_unref (caps); + return GST_FLOW_NOT_NEGOTIATED; + } gst_caps_unref (caps); + } else { + return GST_FLOW_FLUSHING; } } else { GST_OBJECT_UNLOCK (self); |