ges-validate: Port to the new GstValidate action registration API

This commit is contained in:
Thibault Saunier 2014-08-22 21:01:07 +02:00
parent 9a07ce7681
commit 9f97c14cea
3 changed files with 219 additions and 64 deletions

View file

@ -740,6 +740,7 @@ main (int argc, gchar ** argv)
gchar *load_path = NULL; gchar *load_path = NULL;
gchar *videosink = NULL, *audiosink = NULL; gchar *videosink = NULL, *audiosink = NULL;
const gchar *scenario = NULL; const gchar *scenario = NULL;
gboolean list_action_types = FALSE;
GOptionEntry options[] = { GOptionEntry options[] = {
{"thumbnail", 'm', 0.0, G_OPTION_ARG_DOUBLE, &thumbinterval, {"thumbnail", 'm', 0.0, G_OPTION_ARG_DOUBLE, &thumbinterval,
@ -787,6 +788,8 @@ main (int argc, gchar ** argv)
{"audiosink", 'a', 0, G_OPTION_ARG_STRING, &audiosink, {"audiosink", 'a', 0, G_OPTION_ARG_STRING, &audiosink,
"The audio sink used for playing back", "<audiosink>"}, "The audio sink used for playing back", "<audiosink>"},
#ifdef HAVE_GST_VALIDATE #ifdef HAVE_GST_VALIDATE
{"list-action-types", 'y', 0, G_OPTION_ARG_NONE, &list_action_types,
"List the avalaible action types with which to write scenarios", NULL},
{"set-scenario", 0, 0, G_OPTION_ARG_STRING, &scenario, {"set-scenario", 0, 0, G_OPTION_ARG_STRING, &scenario,
"Specify a GstValidate scenario to run, 'none' means load gst-validate" "Specify a GstValidate scenario to run, 'none' means load gst-validate"
" but run no scenario on it", "<scenario_name>"}, " but run no scenario on it", "<scenario_name>"},
@ -843,6 +846,9 @@ main (int argc, gchar ** argv)
exit (0); exit (0);
} }
if (list_action_types)
return ges_validate_print_action_types (argv + 1, argc - 1);
tried_uris = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); tried_uris = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
if (((!load_path && !scenario && (argc < 4)))) { if (((!load_path && !scenario && (argc < 4)))) {
g_printf ("%s", g_option_context_get_help (ctx, TRUE, NULL)); g_printf ("%s", g_option_context_get_help (ctx, TRUE, NULL));

View file

@ -443,6 +443,198 @@ beach:
return res; return res;
} }
static void
ges_validate_register_action_types (void)
{
gst_validate_init ();
/* *INDENT-OFF* */
gst_validate_add_action_type ("edit-clip", _edit_clip,
(GstValidateActionParameter []) {
{
.name = "clip-name",
.description = "The name of the clip to edit",
.mandatory = TRUE,
.types = "string",
},
{
.name = "position",
.description = "The new position of the clip",
.mandatory = TRUE,
.types = "double or string",
.possible_variables = "position: The current position in the stream\n"
"duration: The duration of the stream",
NULL
},
{
.name = "edit-mode",
.description = "The GESEditMode to use to edit @clip-name",
.mandatory = FALSE,
.types = "string",
.def = "normal",
},
{
.name = "edge",
.description = "The GESEdge to use to edit @clip-name\n"
"should be in [ edge_start, edge_end, edge_none ] ",
.mandatory = FALSE,
.types = "string",
.def = "edge_none",
},
{
.name = "new-layer-priority",
.description = "The priority of the layer @container should land in.\n"
"If the layer you're trying to move the container to doesn't exist, it will\n"
"be created automatically. -1 means no move.",
.mandatory = FALSE,
.types = "int",
.def = "-1",
},
{NULL}
},
"Allows to edit a clip, for more details, have a look at:\n"
"ges_container_edit documentation, Note that the timeline will\n"
"be commited, and flushed so that the edition is taken into account",
FALSE);
gst_validate_add_action_type ("add-asset", _add_asset,
(GstValidateActionParameter []) {
{
.name = "id",
.description = "",
.mandatory = TRUE,
NULL
},
{
.name = "type",
.description = "The type of asset to add",
.mandatory = TRUE,
NULL
},
{NULL}
},
"Allows to add an asset to the current project", FALSE);
gst_validate_add_action_type ("remove-asset", _remove_asset,
(GstValidateActionParameter []) {
{
.name = "id",
.description = "The ID of the clip to remove",
.mandatory = TRUE,
NULL
},
{
.name = "type",
.description = "The type of asset to remove",
.mandatory = TRUE,
NULL
},
{ NULL }
},
"Allows to remove an asset from the current project", FALSE);
gst_validate_add_action_type ("add-layer", _add_layer,
(GstValidateActionParameter []) {
{
.name = "priority",
.description = "The priority of the new layer to add",
.mandatory = TRUE,
NULL
},
{ NULL }
},
"Allows to add a layer to the current timeline", FALSE);
gst_validate_add_action_type ("remove-layer", _remove_layer,
(GstValidateActionParameter []) {
{
.name = "priority",
.description = "The priority of the layer to remove",
.mandatory = TRUE,
NULL
},
{ NULL }
},
"Allows to remove a layer from the current timeline", FALSE);
gst_validate_add_action_type ("add-clip", _add_clip,
(GstValidateActionParameter []) {
{
.name = "name",
.description = "The name of the clip to add",
.types = "string",
.mandatory = TRUE,
},
{
.name = "layer-priority",
.description = "The priority of the clip to add",
.types = "int",
.mandatory = TRUE,
},
{
.name = "asset-id",
.description = "The id of the asset from which to extract the clip",
.types = "string",
.mandatory = TRUE,
},
{
.name = "type",
.description = "The type of the clip to create",
.types = "string",
.mandatory = TRUE,
},
{NULL}
}, "Allows to add a clip to a given layer", FALSE);
gst_validate_add_action_type ("remove-clip", _remove_clip,
(GstValidateActionParameter []) {
{
.name = "clip-name",
.description = "The name of the clip to remove",
.types = "string",
.mandatory = TRUE,
},
{NULL}
}, "Allows to remove a clip from a given layer", FALSE);
gst_validate_add_action_type ("serialize-project", _serialize_project,
(GstValidateActionParameter []) {
{
.name = "uri",
.description = "The uri where to store the serialized project",
.types = "string",
.mandatory = TRUE,
},
{NULL}
}, "serializes a project", FALSE);
gst_validate_add_action_type ("set-child-property", _set_child_property,
(GstValidateActionParameter []) {
{
.name = "element-name",
.description = "The name of the element on which to modify the property",
.types = "string",
.mandatory = TRUE,
},
{
.name = "property",
.description = "The name of the property to modify",
.types = "string",
.mandatory = TRUE,
},
{
.name = "value",
.description = "The value of the property",
.types = "gvalue",
.mandatory = TRUE,
},
{NULL}
}, "Allows to change child property of an object", FALSE);
/* *INDENT-ON* */
}
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)
@ -451,43 +643,7 @@ ges_validate_activate (GstPipeline * pipeline, const gchar * scenario,
GstValidateRunner *runner = NULL; GstValidateRunner *runner = NULL;
GstValidateMonitor *monitor = NULL; GstValidateMonitor *monitor = NULL;
const gchar *move_clip_mandatory_fields[] = { "clip-name", "position", ges_validate_register_action_types ();
NULL
};
const gchar *set_child_property_mandatory_fields[] =
{ "element-name", "property", "value", NULL };
const gchar *serialize_project_mandatory_fields[] = { "uri",
NULL
};
const gchar *add_asset_mandatory_fields[] = { "id", "type",
NULL
};
const gchar *remove_asset_mandatory_fields[] = { "id", "type",
NULL
};
const gchar *add_layer_mandatory_fields[] = { "priority",
NULL
};
const gchar *remove_layer_mandatory_fields[] = { "priority",
NULL
};
const gchar *add_clip_mandatory_fields[] = { "name", "layer-priority",
"asset-id", "type",
NULL
};
const gchar *remove_clip_mandatory_fields[] = { "name",
NULL
};
gst_validate_init ();
if (scenario) { if (scenario) {
if (g_strcmp0 (scenario, "none")) { if (g_strcmp0 (scenario, "none")) {
@ -497,33 +653,6 @@ ges_validate_activate (GstPipeline * pipeline, const gchar * scenario,
} }
} }
gst_validate_add_action_type ("edit-clip", _edit_clip,
move_clip_mandatory_fields, "Allows to seek into the files", FALSE);
gst_validate_add_action_type ("add-asset", _add_asset,
add_asset_mandatory_fields,
"Allows to add an asset to the current project", FALSE);
gst_validate_add_action_type ("remove-asset", _remove_asset,
remove_asset_mandatory_fields,
"Allows to remove an asset from the current project", FALSE);
gst_validate_add_action_type ("add-layer", _add_layer,
add_layer_mandatory_fields,
"Allows to add a layer to the current timeline", FALSE);
gst_validate_add_action_type ("remove-layer", _remove_layer,
remove_layer_mandatory_fields,
"Allows to remove a layer from the current timeline", FALSE);
gst_validate_add_action_type ("add-clip", _add_clip,
add_clip_mandatory_fields, "Allows to add a clip to a given layer",
FALSE);
gst_validate_add_action_type ("remove-clip", _remove_clip,
remove_clip_mandatory_fields,
"Allows to remove a clip from a given layer", FALSE);
gst_validate_add_action_type ("serialize-project", _serialize_project,
serialize_project_mandatory_fields, "serializes a project", FALSE);
gst_validate_add_action_type ("set-child-property", _set_child_property,
set_child_property_mandatory_fields,
"Allows to change child property of an object", FALSE);
o = gst_validate_override_new (); o = gst_validate_override_new ();
gst_validate_override_change_severity (o, gst_validate_override_change_severity (o,
GST_VALIDATE_ISSUE_ID_EVENT_SEEK_RESULT_POSITION_WRONG, GST_VALIDATE_ISSUE_ID_EVENT_SEEK_RESULT_POSITION_WRONG,
@ -585,6 +714,19 @@ ges_validate_handle_request_state_change (GstMessage * message,
} }
} }
gint
ges_validate_print_action_types (gchar ** types, gint num_types)
{
ges_validate_register_action_types ();
if (!gst_validate_print_action_types (types, num_types)) {
GST_ERROR ("Could not print all wanted types");
return 1;
}
return 0;
}
#else #else
static gboolean static gboolean
_print_position (GstElement * pipeline) _print_position (GstElement * pipeline)
@ -642,4 +784,10 @@ ges_validate_handle_request_state_change (GstMessage * message,
return; return;
} }
gint
ges_validate_print_action_types (const gchar ** types, gint num_types)
{
return 0;
}
#endif #endif

View file

@ -32,6 +32,7 @@ gint
ges_validate_clean (GstPipeline *pipeline); ges_validate_clean (GstPipeline *pipeline);
void ges_validate_handle_request_state_change (GstMessage *message, GMainLoop *mainloop); void ges_validate_handle_request_state_change (GstMessage *message, GMainLoop *mainloop);
gint ges_validate_print_action_types (gchar **types, gint num_types);
G_END_DECLS G_END_DECLS