mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-23 00:36:51 +00:00
ges:validate: Check that no extra decoding happens
This commit is contained in:
parent
577938c9be
commit
b612d015ca
1 changed files with 61 additions and 0 deletions
|
@ -23,15 +23,19 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "ges-validate.h"
|
#include "ges-validate.h"
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
#include <ges/ges.h>
|
#include <ges/ges.h>
|
||||||
|
|
||||||
#ifdef HAVE_GST_VALIDATE
|
#ifdef HAVE_GST_VALIDATE
|
||||||
#include <gst/validate/gst-validate-scenario.h>
|
#include <gst/validate/gst-validate-scenario.h>
|
||||||
#include <gst/validate/validate.h>
|
#include <gst/validate/validate.h>
|
||||||
#include <gst/validate/gst-validate-utils.h>
|
#include <gst/validate/gst-validate-utils.h>
|
||||||
|
#include <gst/validate/gst-validate-element-monitor.h>
|
||||||
|
|
||||||
#define MONITOR_ON_PIPELINE "validate-monitor"
|
#define MONITOR_ON_PIPELINE "validate-monitor"
|
||||||
#define RUNNER_ON_PIPELINE "runner-monitor"
|
#define RUNNER_ON_PIPELINE "runner-monitor"
|
||||||
|
#define WRONG_DECODER_ADDED g_quark_from_static_string ("ges::wrong-decoder-added")
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_validate_report_added_cb (GstValidateRunner * runner,
|
_validate_report_added_cb (GstValidateRunner * runner,
|
||||||
|
@ -43,6 +47,60 @@ _validate_report_added_cb (GstValidateRunner * runner,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
bin_element_added (GstTracer * runner, GstClockTime ts,
|
||||||
|
GstBin * bin, GstElement * element, gboolean result)
|
||||||
|
{
|
||||||
|
GstObject *parent;
|
||||||
|
GstValidateElementMonitor *monitor =
|
||||||
|
g_object_get_data (G_OBJECT (element), "validate-monitor");
|
||||||
|
|
||||||
|
if (!monitor)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!monitor->is_decoder)
|
||||||
|
return;
|
||||||
|
|
||||||
|
|
||||||
|
parent = gst_object_get_parent (GST_OBJECT (element));
|
||||||
|
do {
|
||||||
|
if (GES_IS_TRACK (parent)) {
|
||||||
|
GstElementClass *klass = GST_ELEMENT_CLASS (G_OBJECT_GET_CLASS (element));
|
||||||
|
const gchar *klassname =
|
||||||
|
gst_element_class_get_metadata (klass, GST_ELEMENT_METADATA_KLASS);
|
||||||
|
|
||||||
|
if (GES_IS_AUDIO_TRACK (parent) && strstr (klassname, "Audio") == NULL) {
|
||||||
|
GST_VALIDATE_REPORT (monitor, WRONG_DECODER_ADDED,
|
||||||
|
"Adding non audio decoder %s in audio track %s.",
|
||||||
|
GST_OBJECT_NAME (element), GST_OBJECT_NAME (parent));
|
||||||
|
} else if (GES_IS_VIDEO_TRACK (parent)
|
||||||
|
&& strstr (klassname, "Video") == NULL
|
||||||
|
&& strstr (klassname, "Image") == NULL) {
|
||||||
|
GST_VALIDATE_REPORT (monitor, WRONG_DECODER_ADDED,
|
||||||
|
"Adding non video decoder %s in video track %s.",
|
||||||
|
GST_OBJECT_NAME (element), GST_OBJECT_NAME (parent));
|
||||||
|
|
||||||
|
}
|
||||||
|
gst_object_unref (parent);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
gst_object_unref (parent);
|
||||||
|
parent = gst_object_get_parent (parent);
|
||||||
|
} while (parent);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
ges_validate_register_issues (void)
|
||||||
|
{
|
||||||
|
gst_validate_issue_register (gst_validate_issue_new (WRONG_DECODER_ADDED,
|
||||||
|
"Wrong decoder type added to track.",
|
||||||
|
"In a specific track type we should never create decoders"
|
||||||
|
" for some other types (No audio decoder should be added"
|
||||||
|
" in a Video track).", GST_VALIDATE_REPORT_LEVEL_CRITICAL));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
ges_validate_activate (GstPipeline * pipeline, const gchar * scenario,
|
ges_validate_activate (GstPipeline * pipeline, const gchar * scenario,
|
||||||
gboolean * needs_setting_state)
|
gboolean * needs_setting_state)
|
||||||
|
@ -51,6 +109,7 @@ ges_validate_activate (GstPipeline * pipeline, const gchar * scenario,
|
||||||
GstValidateMonitor *monitor = NULL;
|
GstValidateMonitor *monitor = NULL;
|
||||||
|
|
||||||
ges_validate_register_action_types ();
|
ges_validate_register_action_types ();
|
||||||
|
ges_validate_register_issues ();
|
||||||
|
|
||||||
if (scenario) {
|
if (scenario) {
|
||||||
if (g_strcmp0 (scenario, "none")) {
|
if (g_strcmp0 (scenario, "none")) {
|
||||||
|
@ -61,6 +120,8 @@ ges_validate_activate (GstPipeline * pipeline, const gchar * scenario,
|
||||||
}
|
}
|
||||||
|
|
||||||
runner = gst_validate_runner_new ();
|
runner = gst_validate_runner_new ();
|
||||||
|
gst_tracing_register_hook (GST_TRACER (runner), "bin-add-post",
|
||||||
|
G_CALLBACK (bin_element_added));
|
||||||
g_signal_connect (runner, "report-added",
|
g_signal_connect (runner, "report-added",
|
||||||
G_CALLBACK (_validate_report_added_cb), pipeline);
|
G_CALLBACK (_validate_report_added_cb), pipeline);
|
||||||
monitor =
|
monitor =
|
||||||
|
|
Loading…
Reference in a new issue