dshowvideosink: Return ASYNC appropriately from change_state.

Make sure we don't do the wrong thing when our base class is returning
ASYNC in state changes.
This commit is contained in:
Michael Smith 2009-02-12 17:31:50 -08:00
parent 24e1e95547
commit 9eaccf6550

View file

@ -869,7 +869,7 @@ static GstStateChangeReturn
gst_dshowvideosink_change_state (GstElement * element, GstStateChange transition)
{
GstDshowVideoSink *sink = GST_DSHOWVIDEOSINK (element);
GstStateChangeReturn ret;
GstStateChangeReturn ret, rettmp;
switch (transition) {
case GST_STATE_CHANGE_NULL_TO_READY:
@ -878,7 +878,7 @@ gst_dshowvideosink_change_state (GstElement * element, GstStateChange transition
break;
case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
ret = gst_dshowvideosink_start_graph (sink);
if (ret != GST_STATE_CHANGE_SUCCESS)
if (ret == GST_STATE_CHANGE_FAILURE)
return ret;
break;
}
@ -887,10 +887,14 @@ gst_dshowvideosink_change_state (GstElement * element, GstStateChange transition
switch (transition) {
case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
ret = gst_dshowvideosink_pause_graph (sink);
rettmp = gst_dshowvideosink_pause_graph (sink);
if (rettmp == GST_STATE_CHANGE_FAILURE)
ret = rettmp;
break;
case GST_STATE_CHANGE_PAUSED_TO_READY:
ret = gst_dshowvideosink_stop_graph (sink);
rettmp = gst_dshowvideosink_stop_graph (sink);
if (rettmp == GST_STATE_CHANGE_FAILURE)
ret = rettmp;
break;
case GST_STATE_CHANGE_READY_TO_NULL:
gst_dshowvideosink_clear (sink);