* @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);
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);
#include <glib-object.h>
#include <gst/gst.h>
#include "gst-qa-element-monitor.h"
+#include "gst-qa-runner.h"
G_BEGIN_DECLS
/* 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
* @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);
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);
/* 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
#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);
}
#include <glib-object.h>
#include <gst/gst.h>
#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
{
PROP_0,
PROP_OBJECT,
+ PROP_RUNNER,
PROP_LAST
};
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
gboolean
gst_qa_monitor_setup (GstQaMonitor * monitor)
{
+ GST_DEBUG_OBJECT (monitor, "Starting monitor setup");
return GST_QA_MONITOR_GET_CLASS (monitor)->setup (monitor);
}
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;
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;
#include <glib-object.h>
#include <gst/gst.h>
+#include "gst-qa-runner.h"
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))
GObject *object;
GMutex mutex;
+ GstQaRunner *runner;
+
/*< private >*/
};
* @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);
/* 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
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;
#include <glib-object.h>
#include <gst/gst.h>
-#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))