validate:scenario: Update Action.repeat field when needed

Summary: And print the current repeat value of the action that have such a field

Reviewers: Mathieu_Du

Differential Revision: http://phabricator.freedesktop.org/D73
This commit is contained in:
Thibault Saunier 2015-03-03 15:42:06 +01:00
parent 1e6b188d78
commit 0159c96ab0
3 changed files with 29 additions and 7 deletions

View file

@ -41,6 +41,7 @@ void init_scenarios (void);
/* FIXME 2.0 Remove that as this is only for backward compatibility
* as we used to have to print actions in the action execution function
* and this is done by the scenario itself now */
gboolean _action_check_and_set_printed (GstValidateAction *action);
GST_EXPORT gboolean _action_check_and_set_printed (GstValidateAction *action);
GST_EXPORT gboolean gst_validate_action_is_subaction (GstValidateAction *action);
#endif

View file

@ -579,7 +579,18 @@ gst_validate_print_action (GstValidateAction * action, const gchar * message)
GString *string = NULL;
if (message == NULL) {
string = g_string_new (gst_structure_get_name (action->structure));
gint nrepeats;
string = g_string_new (NULL);
if (gst_validate_action_is_subaction (action))
g_string_append_printf (string, "(subaction)");
if (gst_structure_get_int (action->structure, "repeat", &nrepeats))
g_string_append_printf (string, "(%d/%d)", action->repeat, nrepeats);
g_string_append_printf (string, " %s",
gst_structure_get_name (action->structure));
g_string_append_len (string, ": ", 2);
gst_structure_foreach (action->structure,

View file

@ -268,6 +268,13 @@ _action_check_and_set_printed (GstValidateAction * action)
return TRUE;
}
gboolean
gst_validate_action_is_subaction (GstValidateAction * action)
{
return !gst_structure_is_equal (action->structure,
action->priv->main_structure);
}
/* GstValidateActionType implementation */
GType _gst_validate_action_type_type;
GST_DEFINE_MINI_OBJECT_TYPE (GstValidateActionType, gst_validate_action_type);
@ -1316,14 +1323,17 @@ execute_next_action (GstValidateScenario * scenario)
SCENARIO_ACTION_EXECUTION_ERROR, "Could not execute %s", str);
g_free (str);
} else if (act->priv->state == GST_VALIDATE_EXECUTE_ACTION_OK) {
}
if (act->repeat > 0 && !gst_validate_action_is_subaction (act)) {
act->repeat--;
}
if (act->priv->state == GST_VALIDATE_EXECUTE_ACTION_OK) {
act->priv->state = _execute_sub_action_action (act);
}
if (act->repeat > 0 && gst_structure_is_equal (act->structure,
act->priv->main_structure)) {
act->repeat--;
} else if (act->priv->state != GST_VALIDATE_EXECUTE_ACTION_ASYNC) {
if (act->priv->state != GST_VALIDATE_EXECUTE_ACTION_ASYNC) {
tmp = priv->actions;
priv->actions = g_list_remove_link (priv->actions, tmp);