From d24e68719bc13dfb900f8e71ccca0893c04d11db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Wed, 27 Apr 2016 18:27:17 +0300 Subject: [PATCH] rtspsrc: Don't propagate spurious state change returns from internal elements further We handle them inside rtspsrc and override them in all other cases anyway, so do the same for "internal" state changes like PAUSED->PAUSED and PLAYING->PLAYING. This keeps unexpected NO_PREROLL to confuse state changes in GstBin. See also https://bugzilla.gnome.org/show_bug.cgi?id=760532 https://bugzilla.gnome.org/show_bug.cgi?id=765689 --- gst/rtsp/gstrtspsrc.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/gst/rtsp/gstrtspsrc.c b/gst/rtsp/gstrtspsrc.c index 9b54dbc0d1..1c218e77e6 100644 --- a/gst/rtsp/gstrtspsrc.c +++ b/gst/rtsp/gstrtspsrc.c @@ -7790,6 +7790,16 @@ gst_rtspsrc_change_state (GstElement * element, GstStateChange transition) ret = GST_STATE_CHANGE_SUCCESS; break; default: + /* Otherwise it's success, we don't want to return spurious + * NO_PREROLL or ASYNC from internal elements as we care for + * state changes ourselves here + * + * This is to catch PAUSED->PAUSED and PLAYING->PLAYING transitions. + */ + if (GST_STATE_TRANSITION_NEXT (transition) == GST_STATE_PAUSED) + ret = GST_STATE_CHANGE_NO_PREROLL; + else + ret = GST_STATE_CHANGE_SUCCESS; break; }