validate:scenario: Add a way to specify action structure size

And return the register GstValidateActionType on registration

https://bugzilla.gnome.org/show_bug.cgi?id=743994
This commit is contained in:
Thibault Saunier 2015-02-02 18:00:14 +01:00
parent fbfcf16b20
commit a9b27057bb
2 changed files with 33 additions and 9 deletions

View file

@ -85,6 +85,7 @@ static guint scenario_signals[LAST_SIGNAL] = { 0 };
static GList *action_types = NULL;
static void gst_validate_scenario_dispose (GObject * object);
static void gst_validate_scenario_finalize (GObject * object);
static GstValidateActionType *_find_action_type (const gchar * type_name);
static GPrivate main_thread_priv;
@ -164,13 +165,14 @@ GType _gst_validate_action_type;
GST_DEFINE_MINI_OBJECT_TYPE (GstValidateAction, gst_validate_action);
static GstValidateAction *gst_validate_action_new (GstValidateScenario *
scenario);
scenario, GstValidateActionType * type);
static gboolean get_position (GstValidateScenario * scenario);
static GstValidateAction *
_action_copy (GstValidateAction * act)
{
GstValidateAction *copy = gst_validate_action_new (act->scenario);
GstValidateAction *copy = gst_validate_action_new (act->scenario,
_find_action_type (act->type));
if (act->structure) {
copy->structure = gst_structure_copy (act->structure);
@ -190,6 +192,8 @@ _action_free (GstValidateAction * action)
{
if (action->structure)
gst_structure_free (action->structure);
g_slice_free1 (_find_action_type (action->type)->action_struct_size, action);
}
static void
@ -207,12 +211,14 @@ gst_validate_action_unref (GstValidateAction * action)
}
static GstValidateAction *
gst_validate_action_new (GstValidateScenario * scenario)
gst_validate_action_new (GstValidateScenario * scenario,
GstValidateActionType * action_type)
{
GstValidateAction *action = g_slice_new0 (GstValidateAction);
GstValidateAction *action = g_slice_alloc0 (action_type->action_struct_size);
gst_validate_action_init (action);
action->playback_time = GST_CLOCK_TIME_NONE;
action->type = action_type->name;
action->scenario = scenario;
if (scenario)
@ -1553,8 +1559,7 @@ _load_scenario_file (GstValidateScenario * scenario,
}
}
action = gst_validate_action_new (scenario);
action->type = type;
action = gst_validate_action_new (scenario, action_type);
action->repeat = -1;
if (gst_structure_get_double (structure, "playback-time", &playback_time) ||
gst_structure_get_double (structure, "playback_time", &playback_time)) {
@ -2166,7 +2171,7 @@ gst_validate_action_set_done (GstValidateAction * action)
* Register a new action type to the action type system. If the action type already
* exists, it will be overriden by that new definition
*/
void
GstValidateActionType *
gst_validate_register_action_type (const gchar * type_name,
const gchar * implementer_namespace,
GstValidateExecuteAction function,
@ -2197,6 +2202,7 @@ gst_validate_register_action_type (const gchar * type_name,
type->implementer_namespace = g_strdup (implementer_namespace);
type->description = g_strdup (description);
type->flags = flags;
type->action_struct_size = sizeof (GstValidateActionType);
if ((tmptype = _find_action_type (type_name))) {
action_types = g_list_remove (action_types, tmptype);
@ -2204,6 +2210,17 @@ gst_validate_register_action_type (const gchar * type_name,
}
action_types = g_list_append (action_types, type);
return type;
}
void
gst_validate_action_type_set_action_struct_size (GstValidateActionType * type,
gsize action_struct_size)
{
g_return_if_fail (action_struct_size >= sizeof (GstValidateAction));
type->action_struct_size = sizeof (GstValidateActionType);
}
GstValidateActionType *

View file

@ -154,8 +154,10 @@ struct _GstValidateActionType
gchar *description;
GstValidateActionTypeFlags flags;
gsize action_struct_size;
/*< private >*/
gpointer _gst_reserved[GST_PADDING_LARGE];
gpointer _gst_reserved[GST_PADDING_LARGE - sizeof(gsize)];
};
#define GST_TYPE_VALIDATE_ACTION_TYPE (gst_validate_action_type_get_type ())
@ -234,13 +236,18 @@ gst_validate_list_scenarios (gchar **scenarios,
GstValidateActionType *
gst_validate_get_action_type (const gchar *type_name);
void gst_validate_register_action_type (const gchar *type_name,
GstValidateActionType *
gst_validate_register_action_type (const gchar *type_name,
const gchar *implementer_namespace,
GstValidateExecuteAction function,
GstValidateActionParameter * parameters,
const gchar *description,
GstValidateActionTypeFlags flags);
void
gst_validate_action_type_set_action_struct_size (GstValidateActionType *type,
gsize action_struct_size);
gboolean gst_validate_action_get_clocktime (GstValidateScenario * scenario,
GstValidateAction *action,