diff --git a/validate/gst/qa/gst-qa-bin-monitor.c b/validate/gst/qa/gst-qa-bin-monitor.c index 0575e48c0b..f063f81e6d 100644 --- a/validate/gst/qa/gst-qa-bin-monitor.c +++ b/validate/gst/qa/gst-qa-bin-monitor.c @@ -86,10 +86,10 @@ gst_qa_bin_monitor_init (GstQaBinMonitor * bin_monitor) * @bin: (transfer-none): a #GstBin to run QA on */ GstQaBinMonitor * -gst_qa_bin_monitor_new (GstBin * bin) +gst_qa_bin_monitor_new (GstBin * bin, GstQaRunner * runner) { GstQaBinMonitor *monitor = g_object_new (GST_TYPE_QA_BIN_MONITOR, "object", - bin, NULL); + bin, "qa-runner", runner, NULL); if (GST_QA_MONITOR_GET_OBJECT (monitor) == NULL) { g_object_unref (monitor); @@ -152,7 +152,9 @@ gst_qa_bin_monitor_wrap_element (GstQaBinMonitor * monitor, GstQaElementMonitor *element_monitor; GST_DEBUG_OBJECT (monitor, "Wrapping element %s", GST_ELEMENT_NAME (element)); - element_monitor = gst_qa_monitor_factory_create (element); + element_monitor = + gst_qa_monitor_factory_create (element, + GST_QA_MONITOR_GET_RUNNER (monitor)); g_return_if_fail (element_monitor != NULL); GST_QA_MONITOR_LOCK (monitor); diff --git a/validate/gst/qa/gst-qa-bin-monitor.h b/validate/gst/qa/gst-qa-bin-monitor.h index ffff8e9c1c..633f22de46 100644 --- a/validate/gst/qa/gst-qa-bin-monitor.h +++ b/validate/gst/qa/gst-qa-bin-monitor.h @@ -25,6 +25,7 @@ #include #include #include "gst-qa-element-monitor.h" +#include "gst-qa-runner.h" G_BEGIN_DECLS @@ -71,7 +72,7 @@ struct _GstQaBinMonitorClass { /* normal GObject stuff */ GType gst_qa_bin_monitor_get_type (void); -GstQaBinMonitor * gst_qa_bin_monitor_new (GstBin * bin); +GstQaBinMonitor * gst_qa_bin_monitor_new (GstBin * bin, GstQaRunner * runner); G_END_DECLS diff --git a/validate/gst/qa/gst-qa-element-monitor.c b/validate/gst/qa/gst-qa-element-monitor.c index d152184c43..35b0f1f356 100644 --- a/validate/gst/qa/gst-qa-element-monitor.c +++ b/validate/gst/qa/gst-qa-element-monitor.c @@ -85,13 +85,14 @@ gst_qa_element_monitor_init (GstQaElementMonitor * element_monitor) * @element: (transfer-none): a #GstElement to run QA on */ GstQaElementMonitor * -gst_qa_element_monitor_new (GstElement * element) +gst_qa_element_monitor_new (GstElement * element, GstQaRunner * runner) { GstQaElementMonitor *monitor; g_return_val_if_fail (element != NULL, NULL); - monitor = g_object_new (GST_TYPE_QA_ELEMENT_MONITOR, "object", element, NULL); + monitor = g_object_new (GST_TYPE_QA_ELEMENT_MONITOR, "object", element, + "qa-runner", runner, NULL); if (GST_QA_ELEMENT_MONITOR_GET_ELEMENT (monitor) == NULL) { g_object_unref (monitor); @@ -155,7 +156,8 @@ gst_qa_element_monitor_wrap_pad (GstQaElementMonitor * monitor, GstPad * pad) GstQaPadMonitor *pad_monitor; GST_DEBUG_OBJECT (monitor, "Wrapping pad %s:%s", GST_DEBUG_PAD_NAME (pad)); - pad_monitor = gst_qa_pad_monitor_new (pad); + pad_monitor = + gst_qa_pad_monitor_new (pad, GST_QA_MONITOR_GET_RUNNER (monitor)); g_return_if_fail (pad_monitor != NULL); GST_QA_MONITOR_LOCK (monitor); diff --git a/validate/gst/qa/gst-qa-element-monitor.h b/validate/gst/qa/gst-qa-element-monitor.h index 16a727e2c3..4de85a7aed 100644 --- a/validate/gst/qa/gst-qa-element-monitor.h +++ b/validate/gst/qa/gst-qa-element-monitor.h @@ -71,7 +71,7 @@ struct _GstQaElementMonitorClass { /* normal GObject stuff */ GType gst_qa_element_monitor_get_type (void); -GstQaElementMonitor * gst_qa_element_monitor_new (GstElement * element); +GstQaElementMonitor * gst_qa_element_monitor_new (GstElement * element, GstQaRunner * runner); G_END_DECLS diff --git a/validate/gst/qa/gst-qa-monitor-factory.c b/validate/gst/qa/gst-qa-monitor-factory.c index 388e1f4244..eea9ba3d76 100644 --- a/validate/gst/qa/gst-qa-monitor-factory.c +++ b/validate/gst/qa/gst-qa-monitor-factory.c @@ -23,15 +23,15 @@ #include "gst-qa-bin-monitor.h" GstQaElementMonitor * -gst_qa_monitor_factory_create (GstElement * element) +gst_qa_monitor_factory_create (GstElement * element, GstQaRunner * runner) { g_return_val_if_fail (element != NULL, NULL); if (GST_IS_BIN (element)) { return GST_QA_ELEMENT_MONITOR_CAST (gst_qa_bin_monitor_new (GST_BIN_CAST - (element))); + (element), runner)); } - return gst_qa_element_monitor_new (element); + return gst_qa_element_monitor_new (element, runner); } diff --git a/validate/gst/qa/gst-qa-monitor-factory.h b/validate/gst/qa/gst-qa-monitor-factory.h index 121c6fb851..fe7ebcb69e 100644 --- a/validate/gst/qa/gst-qa-monitor-factory.h +++ b/validate/gst/qa/gst-qa-monitor-factory.h @@ -25,10 +25,11 @@ #include #include #include "gst-qa-element-monitor.h" +#include "gst-qa-runner.h" G_BEGIN_DECLS -GstQaElementMonitor * gst_qa_monitor_factory_create (GstElement * element); +GstQaElementMonitor * gst_qa_monitor_factory_create (GstElement * element, GstQaRunner * runner); G_END_DECLS diff --git a/validate/gst/qa/gst-qa-monitor.c b/validate/gst/qa/gst-qa-monitor.c index 94c8658c66..6b6d80ac23 100644 --- a/validate/gst/qa/gst-qa-monitor.c +++ b/validate/gst/qa/gst-qa-monitor.c @@ -32,6 +32,7 @@ enum { PROP_0, PROP_OBJECT, + PROP_RUNNER, PROP_LAST }; @@ -81,6 +82,10 @@ gst_qa_monitor_class_init (GstQaMonitorClass * klass) g_object_class_install_property (gobject_class, PROP_OBJECT, g_param_spec_object ("object", "Object", "The object to be monitored", G_TYPE_OBJECT, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE)); + + g_object_class_install_property (gobject_class, PROP_RUNNER, + g_param_spec_object ("qa-runner", "QA Runner", "The QA runner to " + "report errors to", GST_TYPE_QA_RUNNER, G_PARAM_READWRITE)); } static void @@ -118,6 +123,7 @@ gst_qa_monitor_do_setup (GstQaMonitor * monitor) gboolean gst_qa_monitor_setup (GstQaMonitor * monitor) { + GST_DEBUG_OBJECT (monitor, "Starting monitor setup"); return GST_QA_MONITOR_GET_CLASS (monitor)->setup (monitor); } @@ -135,6 +141,11 @@ gst_qa_monitor_set_property (GObject * object, guint prop_id, monitor->object = g_value_dup_object (value); gst_qa_monitor_setup (monitor); break; + case PROP_RUNNER: + /* we assume the runner is valid as long as this monitor is, + * no ref taken */ + monitor->runner = g_value_get_object (value); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -153,6 +164,12 @@ gst_qa_monitor_get_property (GObject * object, guint prop_id, case PROP_OBJECT: g_value_set_object (value, GST_QA_MONITOR_GET_OBJECT (monitor)); break; + case PROP_RUNNER: + if (GST_QA_MONITOR_GET_RUNNER (monitor)) + g_value_set_object (value, GST_QA_MONITOR_GET_RUNNER (monitor)); + else + g_value_set_object (value, NULL); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; diff --git a/validate/gst/qa/gst-qa-monitor.h b/validate/gst/qa/gst-qa-monitor.h index 4c70e98e9f..4913644eaa 100644 --- a/validate/gst/qa/gst-qa-monitor.h +++ b/validate/gst/qa/gst-qa-monitor.h @@ -24,6 +24,7 @@ #include #include +#include "gst-qa-runner.h" G_BEGIN_DECLS @@ -37,6 +38,7 @@ G_BEGIN_DECLS #define GST_QA_MONITOR_CLASS_CAST(klass) ((GstQaMonitorClass*)(klass)) #define GST_QA_MONITOR_GET_OBJECT(m) (GST_QA_MONITOR_CAST (m)->object) +#define GST_QA_MONITOR_GET_RUNNER(m) (GST_QA_MONITOR_CAST (m)->runner) #define GST_QA_MONITOR_LOCK(m) (g_mutex_lock (&GST_QA_MONITOR_CAST(m)->mutex)) #define GST_QA_MONITOR_UNLOCK(m) (g_mutex_unlock (&GST_QA_MONITOR_CAST(m)->mutex)) @@ -56,6 +58,8 @@ struct _GstQaMonitor { GObject *object; GMutex mutex; + GstQaRunner *runner; + /*< private >*/ }; diff --git a/validate/gst/qa/gst-qa-pad-monitor.c b/validate/gst/qa/gst-qa-pad-monitor.c index 9c9ce01e13..8545d4926a 100644 --- a/validate/gst/qa/gst-qa-pad-monitor.c +++ b/validate/gst/qa/gst-qa-pad-monitor.c @@ -70,10 +70,10 @@ gst_qa_pad_monitor_init (GstQaPadMonitor * pad_monitor) * @pad: (transfer-none): a #GstPad to run QA on */ GstQaPadMonitor * -gst_qa_pad_monitor_new (GstPad * pad) +gst_qa_pad_monitor_new (GstPad * pad, GstQaRunner * runner) { GstQaPadMonitor *monitor = g_object_new (GST_TYPE_QA_PAD_MONITOR, - "object", pad, NULL); + "object", pad, "qa-runner", runner, NULL); if (GST_QA_PAD_MONITOR_GET_PAD (monitor) == NULL) { g_object_unref (monitor); diff --git a/validate/gst/qa/gst-qa-pad-monitor.h b/validate/gst/qa/gst-qa-pad-monitor.h index 2d8b00efe2..7a734cdb16 100644 --- a/validate/gst/qa/gst-qa-pad-monitor.h +++ b/validate/gst/qa/gst-qa-pad-monitor.h @@ -85,7 +85,7 @@ struct _GstQaPadMonitorClass { /* normal GObject stuff */ GType gst_qa_pad_monitor_get_type (void); -GstQaPadMonitor * gst_qa_pad_monitor_new (GstPad * pad); +GstQaPadMonitor * gst_qa_pad_monitor_new (GstPad * pad, GstQaRunner * runner); G_END_DECLS diff --git a/validate/gst/qa/gst-qa-runner.c b/validate/gst/qa/gst-qa-runner.c index 0889429565..b5d6fef540 100644 --- a/validate/gst/qa/gst-qa-runner.c +++ b/validate/gst/qa/gst-qa-runner.c @@ -88,7 +88,7 @@ gst_qa_runner_setup (GstQaRunner * runner) return TRUE; GST_INFO_OBJECT (runner, "Starting QA Runner setup"); - runner->monitor = gst_qa_monitor_factory_create (runner->pipeline); + runner->monitor = gst_qa_monitor_factory_create (runner->pipeline, runner); if (runner->monitor == NULL) { GST_WARNING_OBJECT (runner, "Setup failed"); return FALSE; diff --git a/validate/gst/qa/gst-qa-runner.h b/validate/gst/qa/gst-qa-runner.h index 87b877a678..4ee752b62d 100644 --- a/validate/gst/qa/gst-qa-runner.h +++ b/validate/gst/qa/gst-qa-runner.h @@ -25,10 +25,11 @@ #include #include -#include "gst-qa-element-monitor.h" - G_BEGIN_DECLS +/* forward declaration */ +typedef struct _GstQaElementMonitor GstQaElementMonitor; + #define GST_TYPE_QA_RUNNER (gst_qa_runner_get_type ()) #define GST_IS_QA_RUNNER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_QA_RUNNER)) #define GST_IS_QA_RUNNER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_QA_RUNNER))