2008-12-08 Wim Taymans <wim.taymans@collabora.co.uk>
+ * plugins/elements/gsttee.c: (gst_tee_handle_buffer):
+ Check for changed pads-list before checking the last returned
+ GstFlowReturn because the pad could have been removed and we
+ need to ignore the value in that case.
+
+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):
GST_LOG_OBJECT (tee, "pad already pushed with %s",
gst_flow_get_name (ret));
}
+
+ /* before we go combining the return value, check if the pad list is still
+ * the same. It could be possible that the pad we just pushed was removed
+ * and the return value it not valid anymore */
+ if (GST_ELEMENT_CAST (tee)->pads_cookie != cookie) {
+ GST_LOG_OBJECT (tee, "pad list changed");
+ /* the list of pads changed, restart iteration. Pads that we already
+ * pushed on and are still in the new list, will not be pushed on
+ * again. */
+ goto restart;
+ }
+
/* stop pushing more buffers when we have a fatal error */
if (ret != GST_FLOW_OK && ret != GST_FLOW_NOT_LINKED)
goto error;
GST_LOG_OBJECT (tee, "Replacing ret val %d with %d", cret, ret);
cret = ret;
}
-
- if (GST_ELEMENT_CAST (tee)->pads_cookie != cookie) {
- GST_LOG_OBJECT (tee, "pad list changed");
- /* the list of pads changed, restart iteration. Pads that we already
- * pushed on and are still in the new list, will not be pushed on
- * again. */
- goto restart;
- }
pads = g_list_next (pads);
}
GST_OBJECT_UNLOCK (tee);