validate:scenario: Update Action.repeat field when needed
authorThibault Saunier <tsaunier@gnome.org>
Tue, 3 Mar 2015 14:42:06 +0000 (15:42 +0100)
committerThibault Saunier <tsaunier@gnome.org>
Fri, 10 Apr 2015 14:53:41 +0000 (16:53 +0200)
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

validate/gst/validate/gst-validate-internal.h
validate/gst/validate/gst-validate-report.c
validate/gst/validate/gst-validate-scenario.c

index 5cac150..57f73b9 100644 (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
index 8862292..c1888df 100644 (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,
index d781242..896c886 100644 (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) {
-    act->priv->state = _execute_sub_action_action (act);
   }
 
-  if (act->repeat > 0 && gst_structure_is_equal (act->structure,
-          act->priv->main_structure)) {
+  if (act->repeat > 0 && !gst_validate_action_is_subaction (act)) {
     act->repeat--;
-  } else if (act->priv->state != GST_VALIDATE_EXECUTE_ACTION_ASYNC) {
+  }
+
+  if (act->priv->state == GST_VALIDATE_EXECUTE_ACTION_OK) {
+    act->priv->state = _execute_sub_action_action (act);
+  }
+
+  if (act->priv->state != GST_VALIDATE_EXECUTE_ACTION_ASYNC) {
     tmp = priv->actions;
     priv->actions = g_list_remove_link (priv->actions, tmp);