diff --git a/validate/gst/validate/gst-validate-override-registry.c b/validate/gst/validate/gst-validate-override-registry.c index 4552a740b3..bcad81cca8 100644 --- a/validate/gst/validate/gst-validate-override-registry.c +++ b/validate/gst/validate/gst-validate-override-registry.c @@ -247,3 +247,33 @@ gst_validate_override_registry_preload (void) GST_INFO ("%d overrides loaded", nloaded); return nloaded; } + +GList *gst_validate_override_registry_get_override_for_names + (GstValidateOverrideRegistry * reg, const gchar * name, ...) +{ + GList *iter; + GList *ret = NULL; + + if (name) { + va_list varargs; + GstValidateOverrideRegistryNameEntry *entry; + + va_start (varargs, name); + + GST_VALIDATE_OVERRIDE_REGISTRY_LOCK (reg); + while (name) { + for (iter = reg->name_overrides.head; iter; iter = g_list_next (iter)) { + entry = iter->data; + if ((g_strcmp0 (name, entry->name)) == 0) { + ret = g_list_prepend (ret, entry->override); + } + } + name = va_arg (varargs, gchar *); + } + GST_VALIDATE_OVERRIDE_REGISTRY_UNLOCK (reg); + + va_end (varargs); + } + + return ret; +} diff --git a/validate/gst/validate/gst-validate-override-registry.h b/validate/gst/validate/gst-validate-override-registry.h index 4ecefea3c5..1b8543d639 100644 --- a/validate/gst/validate/gst-validate-override-registry.h +++ b/validate/gst/validate/gst-validate-override-registry.h @@ -41,6 +41,9 @@ typedef struct { GstValidateOverrideRegistry * gst_validate_override_registry_get (void); +GList * +gst_validate_override_registry_get_override_for_names (GstValidateOverrideRegistry *reg, + const gchar *name, ...); void gst_validate_override_register_by_name (const gchar * name, GstValidateOverride * override); void gst_validate_override_register_by_type (GType gtype, GstValidateOverride * override); void gst_validate_override_register_by_klass (const gchar * klass, GstValidateOverride * override); diff --git a/validate/gst/validate/gst-validate-override.c b/validate/gst/validate/gst-validate-override.c index d78839e119..5ba2e739a8 100644 --- a/validate/gst/validate/gst-validate-override.c +++ b/validate/gst/validate/gst-validate-override.c @@ -64,10 +64,12 @@ GstValidateReportLevel gst_validate_override_get_severity (GstValidateOverride * override, GstValidateIssueId issue_id, GstValidateReportLevel default_level) { - GstValidateReportLevel level; + GstValidateReportLevel *level = NULL; + if (g_hash_table_lookup_extended (override->level_override, - (gpointer) issue_id, NULL, (gpointer *) & level)) { - return level; + (gpointer) issue_id, NULL, (gpointer) & level)) { + + return GPOINTER_TO_INT (level); } return default_level; } diff --git a/validate/gst/validate/gst-validate-scenario.c b/validate/gst/validate/gst-validate-scenario.c index 88dfa03294..eadad2ffca 100644 --- a/validate/gst/validate/gst-validate-scenario.c +++ b/validate/gst/validate/gst-validate-scenario.c @@ -34,6 +34,8 @@ #include "gst-validate-reporter.h" #include "gst-validate-report.h" #include "gst-validate-utils.h" +#include +#include #define GST_VALIDATE_SCENARIO_GET_PRIVATE(o) \ (G_TYPE_INSTANCE_GET_PRIVATE ((o), GST_TYPE_VALIDATE_SCENARIO, GstValidateScenarioPrivate)) @@ -61,9 +63,6 @@ static void gst_validate_scenario_dispose (GObject * object); static void gst_validate_scenario_finalize (GObject * object); static GRegex *clean_action_str; -G_DEFINE_TYPE_WITH_CODE (GstValidateScenario, gst_validate_scenario, - G_TYPE_OBJECT, G_IMPLEMENT_INTERFACE (GST_TYPE_VALIDATE_REPORTER, NULL)); - typedef struct _GstValidateActionType { GstValidateExecuteAction execute; @@ -102,6 +101,8 @@ struct _GstValidateScenarioPrivate gboolean changing_state; GstState target_state; + + GList *overrides; }; typedef struct KeyFileGroupName @@ -110,6 +111,30 @@ typedef struct KeyFileGroupName gchar *group_name; } KeyFileGroupName; +static void +gst_validate_scenario_intercept_report (GstValidateReporter * reporter, + GstValidateReport * report) +{ + GList *tmp; + + for (tmp = GST_VALIDATE_SCENARIO (reporter)->priv->overrides; tmp; + tmp = tmp->next) { + report->level = + gst_validate_override_get_severity (tmp->data, + gst_validate_issue_get_id (report->issue), report->level); + } +} + +static void +_reporter_iface_init (GstValidateReporterInterface * iface) +{ + iface->intercept_report = gst_validate_scenario_intercept_report; +} + +G_DEFINE_TYPE_WITH_CODE (GstValidateScenario, gst_validate_scenario, + G_TYPE_OBJECT, G_IMPLEMENT_INTERFACE (GST_TYPE_VALIDATE_REPORTER, + _reporter_iface_init)); + GType _gst_validate_action_type; GST_DEFINE_MINI_OBJECT_TYPE (GstValidateAction, gst_validate_action); @@ -1609,6 +1634,10 @@ gst_validate_scenario_factory_create (GstValidateRunner * "\n=========================================\n", scenario_name, GST_OBJECT_NAME (pipeline)); + scenario->priv->overrides = + gst_validate_override_registry_get_override_for_names + (gst_validate_override_registry_get (), "scenarios", NULL); + return scenario; }