mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-04-26 06:54:49 +00:00
validate:scenario: Wait for ASYNC_DONE to set async state change DONE
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=769894
This commit is contained in:
parent
7165e6ad12
commit
6e9c67238d
1 changed files with 13 additions and 4 deletions
|
@ -143,6 +143,7 @@ struct _GstValidateScenarioPrivate
|
||||||
|
|
||||||
gboolean got_eos;
|
gboolean got_eos;
|
||||||
gboolean changing_state;
|
gboolean changing_state;
|
||||||
|
gboolean needs_async_done;
|
||||||
GstState target_state;
|
GstState target_state;
|
||||||
|
|
||||||
GList *overrides;
|
GList *overrides;
|
||||||
|
@ -632,6 +633,7 @@ _execute_set_state (GstValidateScenario * scenario, GstValidateAction * action)
|
||||||
return GST_VALIDATE_EXECUTE_ACTION_ERROR;
|
return GST_VALIDATE_EXECUTE_ACTION_ERROR;
|
||||||
} else if (ret == GST_STATE_CHANGE_ASYNC) {
|
} else if (ret == GST_STATE_CHANGE_ASYNC) {
|
||||||
|
|
||||||
|
scenario->priv->needs_async_done = TRUE;
|
||||||
return GST_VALIDATE_EXECUTE_ACTION_ASYNC;
|
return GST_VALIDATE_EXECUTE_ACTION_ASYNC;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1687,7 +1689,7 @@ execute_next_action (GstValidateScenario * scenario)
|
||||||
return G_SOURCE_CONTINUE;
|
return G_SOURCE_CONTINUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (priv->changing_state) {
|
if (priv->changing_state || priv->needs_async_done) {
|
||||||
GST_DEBUG_OBJECT (scenario, "Changing state, not executing any action");
|
GST_DEBUG_OBJECT (scenario, "Changing state, not executing any action");
|
||||||
return G_SOURCE_CONTINUE;
|
return G_SOURCE_CONTINUE;
|
||||||
}
|
}
|
||||||
|
@ -2367,6 +2369,12 @@ message_cb (GstBus * bus, GstMessage * message, GstValidateScenario * scenario)
|
||||||
|
|
||||||
gst_event_replace (&priv->last_seek, NULL);
|
gst_event_replace (&priv->last_seek, NULL);
|
||||||
gst_validate_action_set_done (priv->actions->data);
|
gst_validate_action_set_done (priv->actions->data);
|
||||||
|
} else if (scenario->priv->needs_async_done) {
|
||||||
|
scenario->priv->needs_async_done = FALSE;
|
||||||
|
if (priv->actions && _action_sets_state (priv->actions->data)
|
||||||
|
&& !priv->changing_state)
|
||||||
|
gst_validate_action_set_done (priv->actions->data);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (priv->needs_parsing) {
|
if (priv->needs_parsing) {
|
||||||
|
@ -2396,10 +2404,11 @@ message_cb (GstBus * bus, GstMessage * message, GstValidateScenario * scenario)
|
||||||
|
|
||||||
if (scenario->priv->changing_state &&
|
if (scenario->priv->changing_state &&
|
||||||
scenario->priv->target_state == nstate) {
|
scenario->priv->target_state == nstate) {
|
||||||
if (scenario->priv->actions &&
|
|
||||||
_action_sets_state (scenario->priv->actions->data))
|
|
||||||
gst_validate_action_set_done (priv->actions->data);
|
|
||||||
scenario->priv->changing_state = FALSE;
|
scenario->priv->changing_state = FALSE;
|
||||||
|
|
||||||
|
if (priv->actions && _action_sets_state (priv->actions->data) &&
|
||||||
|
!priv->needs_async_done)
|
||||||
|
gst_validate_action_set_done (priv->actions->data);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pstate == GST_STATE_READY && nstate == GST_STATE_PAUSED)
|
if (pstate == GST_STATE_READY && nstate == GST_STATE_PAUSED)
|
||||||
|
|
Loading…
Reference in a new issue