diff --git a/validate/gst/validate/gst-validate-internal.h b/validate/gst/validate/gst-validate-internal.h index 5cac1504ea..57f73b92e0 100644 --- a/validate/gst/validate/gst-validate-internal.h +++ b/validate/gst/validate/gst-validate-internal.h @@ -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 diff --git a/validate/gst/validate/gst-validate-report.c b/validate/gst/validate/gst-validate-report.c index 886229268a..c1888df377 100644 --- a/validate/gst/validate/gst-validate-report.c +++ b/validate/gst/validate/gst-validate-report.c @@ -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, diff --git a/validate/gst/validate/gst-validate-scenario.c b/validate/gst/validate/gst-validate-scenario.c index d781242fd4..896c886c9f 100644 --- a/validate/gst/validate/gst-validate-scenario.c +++ b/validate/gst/validate/gst-validate-scenario.c @@ -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);