gst_base_src_change_state (GstElement * element, GstStateChange transition)
{
GstBaseSrc *basesrc;
- GstStateChangeReturn result = GST_STATE_CHANGE_SUCCESS;
- GstStateChangeReturn presult;
+ GstStateChangeReturn result;
+ gboolean no_preroll = FALSE;
basesrc = GST_BASE_SRC (element);
case GST_STATE_CHANGE_READY_TO_PAUSED:
GST_LIVE_LOCK (element);
if (basesrc->is_live) {
- result = GST_STATE_CHANGE_NO_PREROLL;
+ no_preroll = TRUE;
basesrc->live_running = FALSE;
}
GST_LIVE_UNLOCK (element);
break;
}
- if ((presult =
+ if ((result =
GST_ELEMENT_CLASS (parent_class)->change_state (element,
transition)) == GST_STATE_CHANGE_FAILURE)
goto failure;
case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
GST_LIVE_LOCK (element);
if (basesrc->is_live) {
- result = GST_STATE_CHANGE_NO_PREROLL;
+ no_preroll = TRUE;
basesrc->live_running = FALSE;
}
GST_LIVE_UNLOCK (element);
break;
}
- return result;
+ if (no_preroll && result == GST_STATE_CHANGE_SUCCESS)
+ return GST_STATE_CHANGE_NO_PREROLL;
+ else
+ return result;
/* ERRORS */
failure:
{
gst_base_src_stop (basesrc);
- return presult;
+ return result;
}
}