mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-02 14:36:41 +00:00
validate: Add a GstValidatePipelineMonitor subclass
We had quite a bit of code dedicated to handled GstPipeline monitoring inside GstValidateBinMonitor, cleanly split that code into a new object type https://bugzilla.gnome.org/show_bug.cgi?id=740704
This commit is contained in:
parent
36a2d61068
commit
fcb0f20828
6 changed files with 322 additions and 147 deletions
|
@ -4,6 +4,7 @@ libgstvalidate_@GST_API_VERSION@_la_SOURCES = \
|
||||||
gst-validate-monitor.c \
|
gst-validate-monitor.c \
|
||||||
gst-validate-element-monitor.c \
|
gst-validate-element-monitor.c \
|
||||||
gst-validate-bin-monitor.c \
|
gst-validate-bin-monitor.c \
|
||||||
|
gst-validate-pipeline-monitor.c \
|
||||||
gst-validate-pad-monitor.c \
|
gst-validate-pad-monitor.c \
|
||||||
gst-validate-monitor-factory.c \
|
gst-validate-monitor-factory.c \
|
||||||
gst-validate-report.c \
|
gst-validate-report.c \
|
||||||
|
@ -20,6 +21,7 @@ libgstvalidate_@GST_API_VERSION@_la_SOURCES = \
|
||||||
libgstvalidate_@GST_API_VERSION@include_HEADERS = \
|
libgstvalidate_@GST_API_VERSION@include_HEADERS = \
|
||||||
validate.h \
|
validate.h \
|
||||||
gst-validate-bin-monitor.h \
|
gst-validate-bin-monitor.h \
|
||||||
|
gst-validate-pipeline-monitor.h \
|
||||||
gst-validate-element-monitor.h \
|
gst-validate-element-monitor.h \
|
||||||
gst-validate-enums.h \
|
gst-validate-enums.h \
|
||||||
media-descriptor.h \
|
media-descriptor.h \
|
||||||
|
|
|
@ -128,11 +128,6 @@ gst_validate_bin_monitor_dispose (GObject * object)
|
||||||
if (monitor->scenario)
|
if (monitor->scenario)
|
||||||
g_object_unref (monitor->scenario);
|
g_object_unref (monitor->scenario);
|
||||||
|
|
||||||
if (monitor->print_pos_srcid) {
|
|
||||||
if (g_source_remove (monitor->print_pos_srcid))
|
|
||||||
monitor->print_pos_srcid = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
g_list_free_full (monitor->element_monitors, g_object_unref);
|
g_list_free_full (monitor->element_monitors, g_object_unref);
|
||||||
|
|
||||||
G_OBJECT_CLASS (parent_class)->dispose (object);
|
G_OBJECT_CLASS (parent_class)->dispose (object);
|
||||||
|
@ -168,130 +163,6 @@ gst_validate_bin_monitor_init (GstValidateBinMonitor * bin_monitor)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
|
||||||
print_position (GstValidateMonitor * monitor)
|
|
||||||
{
|
|
||||||
GstQuery *query;
|
|
||||||
gint64 position, duration;
|
|
||||||
GstElement *pipeline =
|
|
||||||
GST_ELEMENT (GST_VALIDATE_MONITOR_GET_OBJECT (monitor));
|
|
||||||
|
|
||||||
gdouble rate = 1.0;
|
|
||||||
GstFormat format = GST_FORMAT_TIME;
|
|
||||||
|
|
||||||
if (!gst_element_query_position (pipeline, format, &position)) {
|
|
||||||
GST_DEBUG_OBJECT (monitor, "Could not query position");
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
format = GST_FORMAT_TIME;
|
|
||||||
if (!gst_element_query_duration (pipeline, format, &duration)) {
|
|
||||||
GST_DEBUG_OBJECT (monitor, "Could not query duration");
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
query = gst_query_new_segment (GST_FORMAT_DEFAULT);
|
|
||||||
if (gst_element_query (pipeline, query))
|
|
||||||
gst_query_parse_segment (query, &rate, NULL, NULL, NULL);
|
|
||||||
gst_query_unref (query);
|
|
||||||
|
|
||||||
gst_validate_printf (NULL,
|
|
||||||
"<position: %" GST_TIME_FORMAT " duration: %" GST_TIME_FORMAT
|
|
||||||
" speed: %f />\r", GST_TIME_ARGS (position), GST_TIME_ARGS (duration),
|
|
||||||
rate);
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
_bus_handler (GstBus * bus, GstMessage * message,
|
|
||||||
GstValidateBinMonitor * monitor)
|
|
||||||
{
|
|
||||||
GError *err = NULL;
|
|
||||||
gchar *debug = NULL;
|
|
||||||
|
|
||||||
switch (GST_MESSAGE_TYPE (message)) {
|
|
||||||
case GST_MESSAGE_ERROR:
|
|
||||||
gst_message_parse_error (message, &err, &debug);
|
|
||||||
GST_VALIDATE_REPORT (monitor, ERROR_ON_BUS,
|
|
||||||
"Got error: %s -- Debug message: %s", err->message, debug);
|
|
||||||
g_error_free (err);
|
|
||||||
g_free (debug);
|
|
||||||
break;
|
|
||||||
case GST_MESSAGE_WARNING:
|
|
||||||
gst_message_parse_warning (message, &err, &debug);
|
|
||||||
GST_VALIDATE_REPORT (monitor, WARNING_ON_BUS,
|
|
||||||
"Got warning: %s -- Debug message: %s", err->message, debug);
|
|
||||||
g_error_free (err);
|
|
||||||
g_free (debug);
|
|
||||||
break;
|
|
||||||
case GST_MESSAGE_BUFFERING:
|
|
||||||
{
|
|
||||||
GstBufferingMode mode;
|
|
||||||
gint percent;
|
|
||||||
|
|
||||||
gst_message_parse_buffering (message, &percent);
|
|
||||||
gst_message_parse_buffering_stats (message, &mode, NULL, NULL, NULL);
|
|
||||||
|
|
||||||
if (percent == 100) {
|
|
||||||
/* a 100% message means buffering is done */
|
|
||||||
if (monitor->buffering) {
|
|
||||||
monitor->print_pos_srcid =
|
|
||||||
g_timeout_add (PRINT_POSITION_TIMEOUT,
|
|
||||||
(GSourceFunc) print_position, monitor);
|
|
||||||
monitor->buffering = FALSE;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
/* buffering... */
|
|
||||||
if (!monitor->buffering) {
|
|
||||||
monitor->buffering = TRUE;
|
|
||||||
if (monitor->print_pos_srcid
|
|
||||||
&& g_source_remove (monitor->print_pos_srcid))
|
|
||||||
monitor->print_pos_srcid = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
gst_validate_bin_monitor_create_scenarios (GstValidateBinMonitor * monitor)
|
|
||||||
{
|
|
||||||
GstElement *bin = GST_ELEMENT (GST_VALIDATE_MONITOR_GET_OBJECT (monitor));
|
|
||||||
|
|
||||||
/* scenarios currently only make sense for pipelines */
|
|
||||||
if (GST_IS_PIPELINE (bin)) {
|
|
||||||
const gchar *scenario_name;
|
|
||||||
|
|
||||||
if ((scenario_name = g_getenv ("GST_VALIDATE_SCENARIO"))) {
|
|
||||||
gchar **scenario_v = g_strsplit (scenario_name, "->", 2);
|
|
||||||
|
|
||||||
if (scenario_v[1] && GST_VALIDATE_MONITOR_GET_OBJECT (monitor)) {
|
|
||||||
if (!g_pattern_match_simple (scenario_v[1],
|
|
||||||
GST_OBJECT_NAME (GST_VALIDATE_MONITOR_GET_OBJECT (monitor)))) {
|
|
||||||
GST_INFO_OBJECT (monitor, "Not attaching to bin %" GST_PTR_FORMAT
|
|
||||||
" as not matching pattern %s",
|
|
||||||
GST_VALIDATE_MONITOR_GET_OBJECT (monitor), scenario_v[1]);
|
|
||||||
|
|
||||||
g_strfreev (scenario_v);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
monitor->scenario =
|
|
||||||
gst_validate_scenario_factory_create (GST_VALIDATE_MONITOR_GET_RUNNER
|
|
||||||
(monitor),
|
|
||||||
GST_ELEMENT_CAST (GST_VALIDATE_MONITOR_GET_OBJECT (monitor)),
|
|
||||||
scenario_v[0]);
|
|
||||||
g_strfreev (scenario_v);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gst_validate_bin_monitor_new:
|
* gst_validate_bin_monitor_new:
|
||||||
* @bin: (transfer-none): a #GstBin to run Validate on
|
* @bin: (transfer-none): a #GstBin to run Validate on
|
||||||
|
@ -309,22 +180,6 @@ gst_validate_bin_monitor_new (GstBin * bin, GstValidateRunner * runner,
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
gst_validate_bin_monitor_create_scenarios (monitor);
|
|
||||||
|
|
||||||
if (GST_IS_PIPELINE (bin)) {
|
|
||||||
GstBus *bus;
|
|
||||||
|
|
||||||
monitor->print_pos_srcid =
|
|
||||||
g_timeout_add (PRINT_POSITION_TIMEOUT, (GSourceFunc) print_position,
|
|
||||||
monitor);
|
|
||||||
|
|
||||||
bus = gst_element_get_bus (GST_ELEMENT (bin));
|
|
||||||
gst_bus_enable_sync_message_emission (bus);
|
|
||||||
g_signal_connect (bus, "sync-message", (GCallback) _bus_handler, monitor);
|
|
||||||
|
|
||||||
gst_object_unref (bus);
|
|
||||||
}
|
|
||||||
|
|
||||||
return monitor;
|
return monitor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -60,9 +60,7 @@ struct _GstValidateBinMonitor {
|
||||||
|
|
||||||
/*< private >*/
|
/*< private >*/
|
||||||
gulong element_added_id;
|
gulong element_added_id;
|
||||||
guint print_pos_srcid;
|
|
||||||
gboolean stateless;
|
gboolean stateless;
|
||||||
gboolean buffering;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -36,6 +36,7 @@
|
||||||
|
|
||||||
#include "gst-validate-monitor-factory.h"
|
#include "gst-validate-monitor-factory.h"
|
||||||
#include "gst-validate-bin-monitor.h"
|
#include "gst-validate-bin-monitor.h"
|
||||||
|
#include "gst-validate-pipeline-monitor.h"
|
||||||
#include "gst-validate-pad-monitor.h"
|
#include "gst-validate-pad-monitor.h"
|
||||||
#include "gst-validate-override-registry.h"
|
#include "gst-validate-override-registry.h"
|
||||||
|
|
||||||
|
@ -60,6 +61,10 @@ gst_validate_monitor_factory_create (GstObject * target,
|
||||||
monitor =
|
monitor =
|
||||||
GST_VALIDATE_MONITOR_CAST (gst_validate_pad_monitor_new (GST_PAD_CAST
|
GST_VALIDATE_MONITOR_CAST (gst_validate_pad_monitor_new (GST_PAD_CAST
|
||||||
(target), runner, GST_VALIDATE_ELEMENT_MONITOR_CAST (parent)));
|
(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)) {
|
} else if (GST_IS_BIN (target)) {
|
||||||
monitor =
|
monitor =
|
||||||
GST_VALIDATE_MONITOR_CAST (gst_validate_bin_monitor_new (GST_BIN_CAST
|
GST_VALIDATE_MONITOR_CAST (gst_validate_bin_monitor_new (GST_BIN_CAST
|
||||||
|
|
234
validate/gst/validate/gst-validate-pipeline-monitor.c
Normal file
234
validate/gst/validate/gst-validate-pipeline-monitor.c
Normal file
|
@ -0,0 +1,234 @@
|
||||||
|
/* GStreamer
|
||||||
|
*
|
||||||
|
* Copyright (C) 2014 Thibault Saunier <tsaunier@gnome.org>
|
||||||
|
*
|
||||||
|
* gst-validate-pipeline-monitor.c - Validate PipelineMonitor class
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Library General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Library General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Library General Public
|
||||||
|
* License along with this library; if not, write to the
|
||||||
|
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
* Boston, MA 02111-1307, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
# include "config.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "gst-validate-internal.h"
|
||||||
|
#include "gst-validate-pipeline-monitor.h"
|
||||||
|
#include "gst-validate-monitor-factory.h"
|
||||||
|
|
||||||
|
#define PRINT_POSITION_TIMEOUT 250
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SECTION:gst-validate-pipeline-monitor
|
||||||
|
* @short_description: Class that wraps a #GstPipeline for Validate checks
|
||||||
|
*
|
||||||
|
* TODO
|
||||||
|
*/
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
PROP_LAST
|
||||||
|
};
|
||||||
|
|
||||||
|
#define gst_validate_pipeline_monitor_parent_class parent_class
|
||||||
|
G_DEFINE_TYPE (GstValidatePipelineMonitor, gst_validate_pipeline_monitor,
|
||||||
|
GST_TYPE_VALIDATE_BIN_MONITOR);
|
||||||
|
|
||||||
|
static void
|
||||||
|
gst_validate_pipeline_monitor_dispose (GObject * object)
|
||||||
|
{
|
||||||
|
GstValidatePipelineMonitor *monitor =
|
||||||
|
GST_VALIDATE_PIPELINE_MONITOR_CAST (object);
|
||||||
|
|
||||||
|
if (monitor->print_pos_srcid) {
|
||||||
|
if (g_source_remove (monitor->print_pos_srcid))
|
||||||
|
monitor->print_pos_srcid = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
G_OBJECT_CLASS (parent_class)->dispose (object);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
gst_validate_pipeline_monitor_class_init (GstValidatePipelineMonitorClass *
|
||||||
|
klass)
|
||||||
|
{
|
||||||
|
GObjectClass *gobject_class;
|
||||||
|
|
||||||
|
gobject_class = G_OBJECT_CLASS (klass);
|
||||||
|
|
||||||
|
gobject_class->dispose = gst_validate_pipeline_monitor_dispose;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gst_validate_pipeline_monitor_init (GstValidatePipelineMonitor *
|
||||||
|
pipeline_monitor)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
print_position (GstValidateMonitor * monitor)
|
||||||
|
{
|
||||||
|
GstQuery *query;
|
||||||
|
gint64 position, duration;
|
||||||
|
GstElement *pipeline =
|
||||||
|
GST_ELEMENT (GST_VALIDATE_MONITOR_GET_OBJECT (monitor));
|
||||||
|
|
||||||
|
gdouble rate = 1.0;
|
||||||
|
GstFormat format = GST_FORMAT_TIME;
|
||||||
|
|
||||||
|
if (!gst_element_query_position (pipeline, format, &position)) {
|
||||||
|
GST_DEBUG_OBJECT (monitor, "Could not query position");
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
format = GST_FORMAT_TIME;
|
||||||
|
if (!gst_element_query_duration (pipeline, format, &duration)) {
|
||||||
|
GST_DEBUG_OBJECT (monitor, "Could not query duration");
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
query = gst_query_new_segment (GST_FORMAT_DEFAULT);
|
||||||
|
if (gst_element_query (pipeline, query))
|
||||||
|
gst_query_parse_segment (query, &rate, NULL, NULL, NULL);
|
||||||
|
gst_query_unref (query);
|
||||||
|
|
||||||
|
gst_validate_printf (NULL,
|
||||||
|
"<position: %" GST_TIME_FORMAT " duration: %" GST_TIME_FORMAT
|
||||||
|
" speed: %f />\r", GST_TIME_ARGS (position), GST_TIME_ARGS (duration),
|
||||||
|
rate);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_bus_handler (GstBus * bus, GstMessage * message,
|
||||||
|
GstValidatePipelineMonitor * monitor)
|
||||||
|
{
|
||||||
|
GError *err = NULL;
|
||||||
|
gchar *debug = NULL;
|
||||||
|
|
||||||
|
switch (GST_MESSAGE_TYPE (message)) {
|
||||||
|
case GST_MESSAGE_ERROR:
|
||||||
|
gst_message_parse_error (message, &err, &debug);
|
||||||
|
GST_VALIDATE_REPORT (monitor, ERROR_ON_BUS,
|
||||||
|
"Got error: %s -- Debug message: %s", err->message, debug);
|
||||||
|
g_error_free (err);
|
||||||
|
g_free (debug);
|
||||||
|
break;
|
||||||
|
case GST_MESSAGE_WARNING:
|
||||||
|
gst_message_parse_warning (message, &err, &debug);
|
||||||
|
GST_VALIDATE_REPORT (monitor, WARNING_ON_BUS,
|
||||||
|
"Got warning: %s -- Debug message: %s", err->message, debug);
|
||||||
|
g_error_free (err);
|
||||||
|
g_free (debug);
|
||||||
|
break;
|
||||||
|
case GST_MESSAGE_BUFFERING:
|
||||||
|
{
|
||||||
|
GstBufferingMode mode;
|
||||||
|
gint percent;
|
||||||
|
|
||||||
|
gst_message_parse_buffering (message, &percent);
|
||||||
|
gst_message_parse_buffering_stats (message, &mode, NULL, NULL, NULL);
|
||||||
|
|
||||||
|
if (percent == 100) {
|
||||||
|
/* a 100% message means buffering is done */
|
||||||
|
if (monitor->buffering) {
|
||||||
|
monitor->print_pos_srcid =
|
||||||
|
g_timeout_add (PRINT_POSITION_TIMEOUT,
|
||||||
|
(GSourceFunc) print_position, monitor);
|
||||||
|
monitor->buffering = FALSE;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
/* buffering... */
|
||||||
|
if (!monitor->buffering) {
|
||||||
|
monitor->buffering = TRUE;
|
||||||
|
if (monitor->print_pos_srcid
|
||||||
|
&& g_source_remove (monitor->print_pos_srcid))
|
||||||
|
monitor->print_pos_srcid = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gst_validate_pipeline_monitor_create_scenarios (GstValidateBinMonitor * monitor)
|
||||||
|
{
|
||||||
|
/* scenarios currently only make sense for pipelines */
|
||||||
|
const gchar *scenario_name;
|
||||||
|
|
||||||
|
if ((scenario_name = g_getenv ("GST_VALIDATE_SCENARIO"))) {
|
||||||
|
gchar **scenario_v = g_strsplit (scenario_name, "->", 2);
|
||||||
|
|
||||||
|
if (scenario_v[1] && GST_VALIDATE_MONITOR_GET_OBJECT (monitor)) {
|
||||||
|
if (!g_pattern_match_simple (scenario_v[1],
|
||||||
|
GST_OBJECT_NAME (GST_VALIDATE_MONITOR_GET_OBJECT (monitor)))) {
|
||||||
|
GST_INFO_OBJECT (monitor, "Not attaching to pipeline %" GST_PTR_FORMAT
|
||||||
|
" as not matching pattern %s",
|
||||||
|
GST_VALIDATE_MONITOR_GET_OBJECT (monitor), scenario_v[1]);
|
||||||
|
|
||||||
|
g_strfreev (scenario_v);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
monitor->scenario =
|
||||||
|
gst_validate_scenario_factory_create (GST_VALIDATE_MONITOR_GET_RUNNER
|
||||||
|
(monitor),
|
||||||
|
GST_ELEMENT_CAST (GST_VALIDATE_MONITOR_GET_OBJECT (monitor)),
|
||||||
|
scenario_v[0]);
|
||||||
|
g_strfreev (scenario_v);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gst_validate_pipeline_monitor_new:
|
||||||
|
* @pipeline: (transfer-none): a #GstPipeline to run Validate on
|
||||||
|
*/
|
||||||
|
GstValidatePipelineMonitor *
|
||||||
|
gst_validate_pipeline_monitor_new (GstPipeline * pipeline,
|
||||||
|
GstValidateRunner * runner, GstValidateMonitor * parent)
|
||||||
|
{
|
||||||
|
GstBus *bus;
|
||||||
|
GstValidatePipelineMonitor *monitor =
|
||||||
|
g_object_new (GST_TYPE_VALIDATE_PIPELINE_MONITOR, "object",
|
||||||
|
pipeline, "validate-runner", runner, "validate-parent", parent, NULL);
|
||||||
|
|
||||||
|
if (GST_VALIDATE_MONITOR_GET_OBJECT (monitor) == NULL) {
|
||||||
|
g_object_unref (monitor);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
gst_validate_pipeline_monitor_create_scenarios (GST_VALIDATE_BIN_MONITOR
|
||||||
|
(monitor));
|
||||||
|
|
||||||
|
|
||||||
|
monitor->print_pos_srcid =
|
||||||
|
g_timeout_add (PRINT_POSITION_TIMEOUT, (GSourceFunc) print_position,
|
||||||
|
monitor);
|
||||||
|
|
||||||
|
bus = gst_element_get_bus (GST_ELEMENT (pipeline));
|
||||||
|
gst_bus_enable_sync_message_emission (bus);
|
||||||
|
g_signal_connect (bus, "sync-message", (GCallback) _bus_handler, monitor);
|
||||||
|
|
||||||
|
gst_object_unref (bus);
|
||||||
|
|
||||||
|
return monitor;
|
||||||
|
}
|
81
validate/gst/validate/gst-validate-pipeline-monitor.h
Normal file
81
validate/gst/validate/gst-validate-pipeline-monitor.h
Normal file
|
@ -0,0 +1,81 @@
|
||||||
|
/* GStreamer
|
||||||
|
* Copyright (C) 2014 Thibault Saunier <tsaunier@gnome.org>
|
||||||
|
*
|
||||||
|
* gst-validate-pipeline-monitor.h - Validate PipelineMonitor class
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Library General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Library General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Library General Public
|
||||||
|
* License along with this library; if not, write to the
|
||||||
|
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
* Boston, MA 02111-1307, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __GST_VALIDATE_PIPELINE_MONITOR_H__
|
||||||
|
#define __GST_VALIDATE_PIPELINE_MONITOR_H__
|
||||||
|
|
||||||
|
#include <glib-object.h>
|
||||||
|
#include <gst/gst.h>
|
||||||
|
#include <gst/validate/gst-validate-bin-monitor.h>
|
||||||
|
#include <gst/validate/gst-validate-runner.h>
|
||||||
|
|
||||||
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
|
#define GST_TYPE_VALIDATE_PIPELINE_MONITOR (gst_validate_pipeline_monitor_get_type ())
|
||||||
|
#define GST_IS_VALIDATE_PIPELINE_MONITOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_VALIDATE_PIPELINE_MONITOR))
|
||||||
|
#define GST_IS_VALIDATE_PIPELINE_MONITOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_VALIDATE_PIPELINE_MONITOR))
|
||||||
|
#define GST_VALIDATE_PIPELINE_MONITOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_VALIDATE_PIPELINE_MONITOR, GstValidatePipelineMonitorClass))
|
||||||
|
#define GST_VALIDATE_PIPELINE_MONITOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_VALIDATE_PIPELINE_MONITOR, GstValidatePipelineMonitor))
|
||||||
|
#define GST_VALIDATE_PIPELINE_MONITOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_VALIDATE_PIPELINE_MONITOR, GstValidatePipelineMonitorClass))
|
||||||
|
#define GST_VALIDATE_PIPELINE_MONITOR_CAST(obj) ((GstValidatePipelineMonitor*)(obj))
|
||||||
|
#define GST_VALIDATE_PIPELINE_MONITOR_CLASS_CAST(klass) ((GstValidatePipelineMonitorClass*)(klass))
|
||||||
|
|
||||||
|
#define GST_VALIDATE_PIPELINE_MONITOR_GET_PIPELINE(m) (GST_PIPELINE_CAST (GST_VALIDATE_ELEMENT_MONITOR_GET_ELEMENT (m)))
|
||||||
|
|
||||||
|
typedef struct _GstValidatePipelineMonitor GstValidatePipelineMonitor;
|
||||||
|
typedef struct _GstValidatePipelineMonitorClass GstValidatePipelineMonitorClass;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GstValidatePipelineMonitor:
|
||||||
|
*
|
||||||
|
* GStreamer Validate PipelineMonitor class.
|
||||||
|
*
|
||||||
|
* Class that wraps a #GstPipeline for Validate checks
|
||||||
|
*/
|
||||||
|
struct _GstValidatePipelineMonitor {
|
||||||
|
GstValidateBinMonitor parent;
|
||||||
|
|
||||||
|
/*< private >*/
|
||||||
|
gulong element_added_id;
|
||||||
|
guint print_pos_srcid;
|
||||||
|
gboolean buffering;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GstValidatePipelineMonitorClass:
|
||||||
|
* @parent_class: parent
|
||||||
|
*
|
||||||
|
* GStreamer Validate PipelineMonitor object class.
|
||||||
|
*/
|
||||||
|
struct _GstValidatePipelineMonitorClass {
|
||||||
|
GstValidateBinMonitorClass parent_class;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* normal GObject stuff */
|
||||||
|
GType gst_validate_pipeline_monitor_get_type (void);
|
||||||
|
|
||||||
|
GstValidatePipelineMonitor * gst_validate_pipeline_monitor_new (GstPipeline * pipeline,
|
||||||
|
GstValidateRunner * runner, GstValidateMonitor * parent);
|
||||||
|
|
||||||
|
G_END_DECLS
|
||||||
|
|
||||||
|
#endif /* __GST_VALIDATE_PIPELINE_MONITOR_H__ */
|
||||||
|
|
Loading…
Reference in a new issue