mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-26 07:56:38 +00:00
scenario: Check that all action were properly executed
This commit is contained in:
parent
c9ee576e8e
commit
e24645b133
3 changed files with 45 additions and 9 deletions
|
@ -207,6 +207,9 @@ gst_validate_report_load_issues (void)
|
||||||
REGISTER_VALIDATE_ISSUE (WARNING, QUERY_POSITION_OUT_OF_SEGMENT,
|
REGISTER_VALIDATE_ISSUE (WARNING, QUERY_POSITION_OUT_OF_SEGMENT,
|
||||||
_("Query position reported a value outside of the current expected "
|
_("Query position reported a value outside of the current expected "
|
||||||
"segment"), NULL);
|
"segment"), NULL);
|
||||||
|
REGISTER_VALIDATE_ISSUE (CRITICAL, SCENARIO_NOT_ENDED,
|
||||||
|
_("All the actions were not executed before the program stoped"),
|
||||||
|
NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -278,6 +281,8 @@ gst_validate_report_area_get_name (GstValidateReportArea area)
|
||||||
return "run-error";
|
return "run-error";
|
||||||
case GST_VALIDATE_AREA_OTHER:
|
case GST_VALIDATE_AREA_OTHER:
|
||||||
return "other";
|
return "other";
|
||||||
|
case GST_VALIDATE_AREA_SCENARIO:
|
||||||
|
return "scenario";
|
||||||
default:
|
default:
|
||||||
g_assert_not_reached ();
|
g_assert_not_reached ();
|
||||||
return "unknown";
|
return "unknown";
|
||||||
|
|
|
@ -58,6 +58,7 @@ typedef enum {
|
||||||
GST_VALIDATE_AREA_SEEK,
|
GST_VALIDATE_AREA_SEEK,
|
||||||
GST_VALIDATE_AREA_STATE,
|
GST_VALIDATE_AREA_STATE,
|
||||||
GST_VALIDATE_AREA_FILE_CHECK,
|
GST_VALIDATE_AREA_FILE_CHECK,
|
||||||
|
GST_VALIDATE_AREA_SCENARIO,
|
||||||
GST_VALIDATE_AREA_RUN_ERROR,
|
GST_VALIDATE_AREA_RUN_ERROR,
|
||||||
GST_VALIDATE_AREA_OTHER=100,
|
GST_VALIDATE_AREA_OTHER=100,
|
||||||
} GstValidateReportArea;
|
} GstValidateReportArea;
|
||||||
|
@ -109,6 +110,8 @@ typedef enum {
|
||||||
#define GST_VALIDATE_ISSUE_ID_QUERY_POSITION_SUPERIOR_DURATION (((GstValidateIssueId) GST_VALIDATE_AREA_QUERY) << GST_VALIDATE_ISSUE_ID_SHIFT | 1)
|
#define GST_VALIDATE_ISSUE_ID_QUERY_POSITION_SUPERIOR_DURATION (((GstValidateIssueId) GST_VALIDATE_AREA_QUERY) << GST_VALIDATE_ISSUE_ID_SHIFT | 1)
|
||||||
#define GST_VALIDATE_ISSUE_ID_QUERY_POSITION_OUT_OF_SEGMENT (((GstValidateIssueId) GST_VALIDATE_AREA_QUERY) << GST_VALIDATE_ISSUE_ID_SHIFT | 2)
|
#define GST_VALIDATE_ISSUE_ID_QUERY_POSITION_OUT_OF_SEGMENT (((GstValidateIssueId) GST_VALIDATE_AREA_QUERY) << GST_VALIDATE_ISSUE_ID_SHIFT | 2)
|
||||||
|
|
||||||
|
#define GST_VALIDATE_ISSUE_ID_SCENARIO_NOT_ENDED (((GstValidateIssueId) GST_VALIDATE_AREA_SCENARIO) << GST_VALIDATE_ISSUE_ID_SHIFT | 1)
|
||||||
|
|
||||||
#define GST_VALIDATE_ISSUE_ID_AREA(id) ((guintptr)(id >> GST_VALIDATE_ISSUE_ID_SHIFT))
|
#define GST_VALIDATE_ISSUE_ID_AREA(id) ((guintptr)(id >> GST_VALIDATE_ISSUE_ID_SHIFT))
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|
|
@ -597,19 +597,47 @@ gst_validate_scenario_update_segment_from_seek (GstValidateScenario * scenario,
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
async_done_cb (GstBus * bus, GstMessage * message,
|
message_cb (GstBus * bus, GstMessage * message,
|
||||||
GstValidateScenario * scenario)
|
GstValidateScenario * scenario)
|
||||||
{
|
{
|
||||||
GstValidateScenarioPrivate *priv = scenario->priv;
|
GstValidateScenarioPrivate *priv = scenario->priv;
|
||||||
|
|
||||||
if (priv->last_seek) {
|
switch (GST_MESSAGE_TYPE (message))
|
||||||
gst_validate_scenario_update_segment_from_seek (scenario, priv->last_seek);
|
{
|
||||||
gst_event_replace (&priv->last_seek, NULL);
|
case GST_MESSAGE_ASYNC_DONE:
|
||||||
}
|
if (priv->last_seek) {
|
||||||
|
gst_validate_scenario_update_segment_from_seek (scenario, priv->last_seek);
|
||||||
|
gst_event_replace (&priv->last_seek, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
if (priv->get_pos_id == 0) {
|
if (priv->get_pos_id == 0) {
|
||||||
get_position (scenario);
|
get_position (scenario);
|
||||||
priv->get_pos_id = g_timeout_add (50, (GSourceFunc) get_position, scenario);
|
priv->get_pos_id = g_timeout_add (50, (GSourceFunc) get_position, scenario);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case GST_MESSAGE_ERROR:
|
||||||
|
case GST_MESSAGE_EOS:
|
||||||
|
{
|
||||||
|
if (scenario->priv->actions) {
|
||||||
|
GList *tmp;
|
||||||
|
gchar *actions = g_strdup (""), *tmpconcat;
|
||||||
|
|
||||||
|
for (tmp = scenario->priv->actions; tmp; tmp = tmp->next) {
|
||||||
|
GstValidateAction *action = ((GstValidateAction*) tmp->data);
|
||||||
|
tmpconcat = actions;
|
||||||
|
actions = g_strdup_printf ("%s\n%*s%s",
|
||||||
|
actions, 20, "", gst_structure_to_string (action->structure));
|
||||||
|
g_free (tmpconcat);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
GST_VALIDATE_REPORT (scenario, SCENARIO_NOT_ENDED,
|
||||||
|
"The following action were not executed: %s", actions);
|
||||||
|
g_free (actions);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@ -873,7 +901,7 @@ gst_validate_scenario_factory_create (GstValidateRunner * runner,
|
||||||
|
|
||||||
bus = gst_element_get_bus (pipeline);
|
bus = gst_element_get_bus (pipeline);
|
||||||
gst_bus_add_signal_watch (bus);
|
gst_bus_add_signal_watch (bus);
|
||||||
g_signal_connect (bus, "message::async-done", (GCallback) async_done_cb,
|
g_signal_connect (bus, "message", (GCallback) message_cb,
|
||||||
scenario);
|
scenario);
|
||||||
gst_object_unref (bus);
|
gst_object_unref (bus);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue