+ if (forward) {
+ gboolean delay, caps_set = (GST_PAD_CAPS (trans->srcpad) != NULL);
+
+ /* src caps may not yet be set, so we delay any serialized events
+ that we receive before (in particular newsegment events), except
+ EOS and flush stops, since those'll obsolete previous events */
+ if (GST_EVENT_TYPE (event) == GST_EVENT_FLUSH_STOP) {
+ gst_base_transform_drop_delayed_events (trans);
+ delay = FALSE;
+ } else {
+ delay = GST_EVENT_IS_SERIALIZED (event) && !caps_set
+ && GST_EVENT_TYPE (event) != GST_EVENT_EOS;
+ }
+
+ if (delay) {
+ GST_OBJECT_LOCK (trans);
+ trans->priv->delayed_events =
+ g_list_append (trans->priv->delayed_events, event);
+ GST_OBJECT_UNLOCK (trans);
+ } else {
+ if (caps_set && GST_EVENT_IS_SERIALIZED (event))
+ gst_base_transform_send_delayed_events (trans);
+ ret = gst_pad_push_event (trans->srcpad, event);
+ }
+ } else