static GObject * gst_validate_monitor_constructor (GType type, guint n_construct_params, GObjectConstructParam * construct_params) { GstObject *target; GstValidateMonitor *monitor = GST_VALIDATE_MONITOR_CAST (G_OBJECT_CLASS (parent_class)->constructor (type, n_construct_params, construct_params)); if (monitor->parent) { GstPipeline *parent_pipeline = gst_validate_monitor_get_pipeline (monitor->parent); gst_validate_monitor_set_media_descriptor (monitor, monitor->parent->media_descriptor); if (parent_pipeline) { g_weak_ref_init (&monitor->pipeline, parent_pipeline); gst_object_unref (parent_pipeline); } } gst_validate_override_registry_attach_overrides (monitor); gst_validate_monitor_setup (monitor); target = gst_validate_monitor_get_target (monitor); g_object_set_data ((GObject *) target, "validate-monitor", monitor); gst_object_unref (target); return (GObject *) monitor; }
/** * gst_validate_monitor_factory_create: * @target: The #GstObject to create a #GstValidateMonitor for * @runner: The #GstValidateRunner to use for the new monitor * @parent: (nullable): The parent of the new monitor * * Create a new monitor for @target and starts monitoring it. * * Returns: (transfer full): The newly created #GstValidateMonitor */ GstValidateMonitor * gst_validate_monitor_factory_create (GstObject * target, GstValidateRunner * runner, GstValidateMonitor * parent) { GstValidateMonitor *monitor = NULL; g_return_val_if_fail (target != NULL, NULL); monitor = g_object_get_data ((GObject *) target, "validate-monitor"); if (monitor) { GST_INFO_OBJECT (target, "Is already monitored by %" GST_PTR_FORMAT, monitor); return g_object_ref (monitor); } if (GST_IS_PAD (target)) { monitor = GST_VALIDATE_MONITOR_CAST (gst_validate_pad_monitor_new (GST_PAD_CAST (target), runner, GST_VALIDATE_ELEMENT_MONITOR_CAST (parent))); } else if (GST_IS_PIPELINE (target)) { monitor = GST_VALIDATE_MONITOR_CAST (gst_validate_pipeline_monitor_new (GST_PIPELINE_CAST (target), runner, parent)); } else if (GST_IS_BIN (target)) { monitor = GST_VALIDATE_MONITOR_CAST (gst_validate_bin_monitor_new (GST_BIN_CAST (target), runner, parent)); } else if (GST_IS_ELEMENT (target)) { monitor = GST_VALIDATE_MONITOR_CAST (gst_validate_element_monitor_new (GST_ELEMENT_CAST (target), runner, parent)); } else { g_assert_not_reached (); } return monitor; }
/* Check if any of our overrides wants to change the report severity */ static GstValidateInterceptionReturn gst_validate_monitor_intercept_report (GstValidateReporter * reporter, GstValidateReport * report) { GList *iter; GstValidateMonitor *monitor = GST_VALIDATE_MONITOR_CAST (reporter); GST_VALIDATE_MONITOR_OVERRIDES_LOCK (monitor); for (iter = monitor->overrides.head; iter; iter = g_list_next (iter)) { report->level = gst_validate_override_get_severity (iter->data, gst_validate_issue_get_id (report->issue), report->level); } GST_VALIDATE_MONITOR_OVERRIDES_UNLOCK (monitor); return GST_VALIDATE_REPORTER_REPORT; }
static void gst_validate_monitor_dispose (GObject * object) { GstValidateMonitor *monitor = GST_VALIDATE_MONITOR_CAST (object); g_mutex_clear (&monitor->mutex); g_mutex_clear (&monitor->overrides_mutex); g_queue_clear (&monitor->overrides); g_weak_ref_clear (&monitor->pipeline); g_weak_ref_clear (&monitor->target); if (monitor->media_descriptor) gst_object_unref (monitor->media_descriptor); G_OBJECT_CLASS (parent_class)->dispose (object); }
static void gst_validate_bin_monitor_wrap_element (GstValidateBinMonitor * monitor, GstElement * element) { GstValidateElementMonitor *element_monitor; GST_DEBUG_OBJECT (monitor, "Wrapping element %s", GST_ELEMENT_NAME (element)); element_monitor = GST_VALIDATE_ELEMENT_MONITOR_CAST (gst_validate_monitor_factory_create (GST_OBJECT_CAST (element), GST_VALIDATE_MONITOR_GET_RUNNER (monitor), GST_VALIDATE_MONITOR_CAST (monitor))); g_return_if_fail (element_monitor != NULL); GST_VALIDATE_MONITOR_LOCK (monitor); monitor->element_monitors = g_list_prepend (monitor->element_monitors, element_monitor); GST_VALIDATE_MONITOR_UNLOCK (monitor); }
static GObject * gst_validate_monitor_constructor (GType type, guint n_construct_params, GObjectConstructParam * construct_params) { GstValidateMonitor *monitor = GST_VALIDATE_MONITOR_CAST (G_OBJECT_CLASS (parent_class)->constructor (type, n_construct_params, construct_params)); if (monitor->parent) { gst_validate_monitor_set_media_descriptor (monitor, monitor->parent->media_descriptor); } gst_validate_monitor_setup (monitor); return (GObject *) monitor; }