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
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;
}