rtspsrc: always send teardown request

Allow CMD_CLOSE to cancel all commands not only CMD_PAUSE
and ignore CMD_WAIT while closing.

https://bugzilla.gnome.org/show_bug.cgi?id=748360
This commit is contained in:
Aleix Conchillo Flaque 2016-09-07 16:10:27 +03:00 committed by Sebastian Dröge
parent 757ce9791d
commit bc9f06f37b

View file

@ -5045,8 +5045,14 @@ gst_rtspsrc_loop_send_cmd (GstRTSPSrc * src, gint cmd, gint mask)
if (old == CMD_RECONNECT) { if (old == CMD_RECONNECT) {
GST_DEBUG_OBJECT (src, "ignore, we were reconnecting"); GST_DEBUG_OBJECT (src, "ignore, we were reconnecting");
cmd = CMD_RECONNECT; cmd = CMD_RECONNECT;
} } else if(old == CMD_CLOSE) {
if (old != CMD_WAIT) { /* our CMD_CLOSE might have interrutped CMD_LOOP. gst_rtspsrc_loop
* will send a CMD_WAIT which would cancel our pending CMD_CLOSE (if
* still pending). We just avoid it here by making sure CMD_CLOSE is
* still the pending command. */
GST_DEBUG_OBJECT (src, "ignore, we were closing");
cmd = CMD_CLOSE;
} else if (old != CMD_WAIT) {
src->pending_cmd = CMD_WAIT; src->pending_cmd = CMD_WAIT;
GST_OBJECT_UNLOCK (src); GST_OBJECT_UNLOCK (src);
/* cancel previous request */ /* cancel previous request */
@ -7744,7 +7750,7 @@ gst_rtspsrc_change_state (GstElement * element, GstStateChange transition)
ret = GST_STATE_CHANGE_NO_PREROLL; ret = GST_STATE_CHANGE_NO_PREROLL;
break; break;
case GST_STATE_CHANGE_PAUSED_TO_READY: case GST_STATE_CHANGE_PAUSED_TO_READY:
gst_rtspsrc_loop_send_cmd (rtspsrc, CMD_CLOSE, CMD_PAUSE); gst_rtspsrc_loop_send_cmd (rtspsrc, CMD_CLOSE, CMD_ALL);
ret = GST_STATE_CHANGE_SUCCESS; ret = GST_STATE_CHANGE_SUCCESS;
break; break;
case GST_STATE_CHANGE_READY_TO_NULL: case GST_STATE_CHANGE_READY_TO_NULL: