mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-06-07 07:58:51 +00:00
ges/ges-timeline-transition.c: initialize vtype enum type from static list of
GEnumValues
This commit is contained in:
parent
b814e287e3
commit
221df1b880
1 changed files with 308 additions and 70 deletions
|
@ -152,91 +152,329 @@ ges_tl_transition_create_track_object (GESTimelineObject * obj,
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
GESTimelineTransition *
|
static GEnumValue transition_types[] = {
|
||||||
ges_timeline_transition_new (gint vtype)
|
{
|
||||||
{
|
1,
|
||||||
GESTimelineTransition *ret = g_object_new
|
"A bar moves from left to right",
|
||||||
(GES_TYPE_TIMELINE_TRANSITION, NULL);
|
"bar-wipe-lr"},
|
||||||
|
{
|
||||||
g_object_set (ret, "vtype", (gint) vtype, NULL);
|
2,
|
||||||
return ret;
|
"A bar moves from top to bottom",
|
||||||
}
|
"bar-wipe-tb"},
|
||||||
|
{
|
||||||
static GEnumClass *smpte_enum_class = NULL;
|
3,
|
||||||
|
"A box expands from the upper-left corner to the lower-right corner",
|
||||||
static void
|
"box-wipe-tl"},
|
||||||
_ensure_smpte_enum_class ()
|
{
|
||||||
{
|
4,
|
||||||
/* is there a better way to do this? */
|
"A box expands from the upper-right corner to the lower-left corner",
|
||||||
|
"box-wipe-tr"},
|
||||||
if (!smpte_enum_class) {
|
{
|
||||||
GstElement *element = gst_element_factory_make ("smpte", NULL);
|
5,
|
||||||
GstElementClass *element_class = GST_ELEMENT_GET_CLASS (element);
|
"A box expands from the lower-right corner to the upper-left corner",
|
||||||
|
"box-wipe-br"},
|
||||||
GParamSpec *pspec =
|
{
|
||||||
g_object_class_find_property (G_OBJECT_CLASS (element_class), "type");
|
6,
|
||||||
|
"A box expands from the lower-left corner to the upper-right corner",
|
||||||
smpte_enum_class = G_ENUM_CLASS (g_type_class_ref (pspec->value_type));
|
"box-wipe-bl"},
|
||||||
}
|
{
|
||||||
|
7,
|
||||||
}
|
"A box shape expands from each of the four corners toward the center",
|
||||||
|
"four-box-wipe-ci"},
|
||||||
|
{
|
||||||
|
8,
|
||||||
|
"A box shape expands from the center of each quadrant toward the corners of each quadrant",
|
||||||
|
"four-box-wipe-co"},
|
||||||
|
{
|
||||||
|
21,
|
||||||
|
"A central, vertical line splits and expands toward the left and right edges",
|
||||||
|
"barndoor-v"},
|
||||||
|
{
|
||||||
|
22,
|
||||||
|
"A central, horizontal line splits and expands toward the top and bottom edges",
|
||||||
|
"barndoor-h"},
|
||||||
|
{
|
||||||
|
23,
|
||||||
|
"A box expands from the top edge's midpoint to the bottom corners",
|
||||||
|
"box-wipe-tc"},
|
||||||
|
{
|
||||||
|
24,
|
||||||
|
"A box expands from the right edge's midpoint to the left corners",
|
||||||
|
"box-wipe-rc"},
|
||||||
|
{
|
||||||
|
25,
|
||||||
|
"A box expands from the bottom edge's midpoint to the top corners",
|
||||||
|
"box-wipe-bc"},
|
||||||
|
{
|
||||||
|
26,
|
||||||
|
"A box expands from the left edge's midpoint to the right corners",
|
||||||
|
"box-wipe-lc"},
|
||||||
|
{
|
||||||
|
41,
|
||||||
|
"A diagonal line moves from the upper-left corner to the lower-right corner",
|
||||||
|
"diagonal-tl"},
|
||||||
|
{
|
||||||
|
42,
|
||||||
|
"A diagonal line moves from the upper right corner to the lower-left corner",
|
||||||
|
"diagonal-tr"},
|
||||||
|
{
|
||||||
|
43,
|
||||||
|
"Two wedge shapes slide in from the top and bottom edges toward the center",
|
||||||
|
"bowtie-v"},
|
||||||
|
{
|
||||||
|
44,
|
||||||
|
"Two wedge shapes slide in from the left and right edges toward the center",
|
||||||
|
"bowtie-h"},
|
||||||
|
{
|
||||||
|
45,
|
||||||
|
"A diagonal line from the lower-left to upper-right corners splits and expands toward the opposite corners",
|
||||||
|
"barndoor-dbl"},
|
||||||
|
{
|
||||||
|
46,
|
||||||
|
"A diagonal line from upper-left to lower-right corners splits and expands toward the opposite corners",
|
||||||
|
"barndoor-dtl"},
|
||||||
|
{
|
||||||
|
47,
|
||||||
|
"Four wedge shapes split from the center and retract toward the four edges",
|
||||||
|
"misc-diagonal-dbd"},
|
||||||
|
{
|
||||||
|
48,
|
||||||
|
"A diamond connecting the four edge midpoints simultaneously contracts toward the center and expands toward the edges",
|
||||||
|
"misc-diagonal-dd"},
|
||||||
|
{
|
||||||
|
61,
|
||||||
|
"A wedge shape moves from top to bottom",
|
||||||
|
"vee-d"},
|
||||||
|
{
|
||||||
|
62,
|
||||||
|
"A wedge shape moves from right to left",
|
||||||
|
"vee-l"},
|
||||||
|
{
|
||||||
|
63,
|
||||||
|
"A wedge shape moves from bottom to top",
|
||||||
|
"vee-u"},
|
||||||
|
{
|
||||||
|
64,
|
||||||
|
"A wedge shape moves from left to right",
|
||||||
|
"vee-r"},
|
||||||
|
{
|
||||||
|
65,
|
||||||
|
"A 'V' shape extending from the bottom edge's midpoint to the opposite corners contracts toward the center and expands toward the edges",
|
||||||
|
"barnvee-d"},
|
||||||
|
{
|
||||||
|
66,
|
||||||
|
"A 'V' shape extending from the left edge's midpoint to the opposite corners contracts toward the center and expands toward the edges",
|
||||||
|
"barnvee-l"},
|
||||||
|
{
|
||||||
|
67,
|
||||||
|
"A 'V' shape extending from the top edge's midpoint to the opposite corners contracts toward the center and expands toward the edges",
|
||||||
|
"barnvee-u"},
|
||||||
|
{
|
||||||
|
68,
|
||||||
|
"A 'V' shape extending from the right edge's midpoint to the opposite corners contracts toward the center and expands toward the edges",
|
||||||
|
"barnvee-r"},
|
||||||
|
{
|
||||||
|
101,
|
||||||
|
"A rectangle expands from the center.",
|
||||||
|
"iris-rect"},
|
||||||
|
{
|
||||||
|
201,
|
||||||
|
"A radial hand sweeps clockwise from the twelve o'clock position",
|
||||||
|
"clock-cw12"},
|
||||||
|
{
|
||||||
|
202,
|
||||||
|
"A radial hand sweeps clockwise from the three o'clock position",
|
||||||
|
"clock-cw3"},
|
||||||
|
{
|
||||||
|
203,
|
||||||
|
"A radial hand sweeps clockwise from the six o'clock position",
|
||||||
|
"clock-cw6"},
|
||||||
|
{
|
||||||
|
204,
|
||||||
|
"A radial hand sweeps clockwise from the nine o'clock position",
|
||||||
|
"clock-cw9"},
|
||||||
|
{
|
||||||
|
205,
|
||||||
|
"Two radial hands sweep clockwise from the twelve and six o'clock positions",
|
||||||
|
"pinwheel-tbv"},
|
||||||
|
{
|
||||||
|
206,
|
||||||
|
"Two radial hands sweep clockwise from the nine and three o'clock positions",
|
||||||
|
"pinwheel-tbh"},
|
||||||
|
{
|
||||||
|
207,
|
||||||
|
"Four radial hands sweep clockwise",
|
||||||
|
"pinwheel-fb"},
|
||||||
|
{
|
||||||
|
211,
|
||||||
|
"A fan unfolds from the top edge, the fan axis at the center",
|
||||||
|
"fan-ct"},
|
||||||
|
{
|
||||||
|
212,
|
||||||
|
"A fan unfolds from the right edge, the fan axis at the center",
|
||||||
|
"fan-cr"},
|
||||||
|
{
|
||||||
|
213,
|
||||||
|
"Two fans, their axes at the center, unfold from the top and bottom",
|
||||||
|
"doublefan-fov"},
|
||||||
|
{
|
||||||
|
214,
|
||||||
|
"Two fans, their axes at the center, unfold from the left and right",
|
||||||
|
"doublefan-foh"},
|
||||||
|
{
|
||||||
|
221,
|
||||||
|
"A radial hand sweeps clockwise from the top edge's midpoint",
|
||||||
|
"singlesweep-cwt"},
|
||||||
|
{
|
||||||
|
222,
|
||||||
|
"A radial hand sweeps clockwise from the right edge's midpoint",
|
||||||
|
"singlesweep-cwr"},
|
||||||
|
{
|
||||||
|
223,
|
||||||
|
"A radial hand sweeps clockwise from the bottom edge's midpoint",
|
||||||
|
"singlesweep-cwb"},
|
||||||
|
{
|
||||||
|
224,
|
||||||
|
"A radial hand sweeps clockwise from the left edge's midpoint",
|
||||||
|
"singlesweep-cwl"},
|
||||||
|
{
|
||||||
|
225,
|
||||||
|
"Two radial hands sweep clockwise and counter-clockwise from the top and bottom edges' midpoints",
|
||||||
|
"doublesweep-pv"},
|
||||||
|
{
|
||||||
|
226,
|
||||||
|
"Two radial hands sweep clockwise and counter-clockwise from the left and right edges' midpoints",
|
||||||
|
"doublesweep-pd"},
|
||||||
|
{
|
||||||
|
227,
|
||||||
|
"Two radial hands attached at the top and bottom edges' midpoints sweep from right to left",
|
||||||
|
"doublesweep-ov"},
|
||||||
|
{
|
||||||
|
228,
|
||||||
|
"Two radial hands attached at the left and right edges' midpoints sweep from top to bottom",
|
||||||
|
"doublesweep-oh"},
|
||||||
|
{
|
||||||
|
231,
|
||||||
|
"A fan unfolds from the bottom, the fan axis at the top edge's midpoint",
|
||||||
|
"fan-t"},
|
||||||
|
{
|
||||||
|
232,
|
||||||
|
"A fan unfolds from the left, the fan axis at the right edge's midpoint",
|
||||||
|
"fan-r"},
|
||||||
|
{
|
||||||
|
233,
|
||||||
|
"A fan unfolds from the top, the fan axis at the bottom edge's midpoint",
|
||||||
|
"fan-b"},
|
||||||
|
{
|
||||||
|
234,
|
||||||
|
"A fan unfolds from the right, the fan axis at the left edge's midpoint",
|
||||||
|
"fan-l"},
|
||||||
|
{
|
||||||
|
235,
|
||||||
|
"Two fans, their axes at the top and bottom, unfold from the center",
|
||||||
|
"doublefan-fiv"},
|
||||||
|
{
|
||||||
|
236,
|
||||||
|
"Two fans, their axes at the left and right, unfold from the center",
|
||||||
|
"doublefan-fih"},
|
||||||
|
{
|
||||||
|
241,
|
||||||
|
"A radial hand sweeps clockwise from the upper-left corner",
|
||||||
|
"singlesweep-cwtl"},
|
||||||
|
{
|
||||||
|
242,
|
||||||
|
"A radial hand sweeps counter-clockwise from the lower-left corner.",
|
||||||
|
"singlesweep-cwbl"},
|
||||||
|
{
|
||||||
|
243,
|
||||||
|
"A radial hand sweeps clockwise from the lower-right corner",
|
||||||
|
"singlesweep-cwbr"},
|
||||||
|
{
|
||||||
|
244,
|
||||||
|
"A radial hand sweeps counter-clockwise from the upper-right corner",
|
||||||
|
"singlesweep-cwtr"},
|
||||||
|
{
|
||||||
|
245,
|
||||||
|
"Two radial hands attached at the upper-left and lower-right corners sweep down and up",
|
||||||
|
"doublesweep-pdtl"},
|
||||||
|
{
|
||||||
|
246,
|
||||||
|
"Two radial hands attached at the lower-left and upper-right corners sweep down and up",
|
||||||
|
"doublesweep-pdbl"},
|
||||||
|
{
|
||||||
|
251,
|
||||||
|
"Two radial hands attached at the upper-left and upper-right corners sweep down",
|
||||||
|
"saloondoor-t"},
|
||||||
|
{
|
||||||
|
252,
|
||||||
|
"Two radial hands attached at the upper-left and lower-left corners sweep to the right",
|
||||||
|
"saloondoor-l"},
|
||||||
|
{
|
||||||
|
253,
|
||||||
|
"Two radial hands attached at the lower-left and lower-right corners sweep up",
|
||||||
|
"saloondoor-b"},
|
||||||
|
{
|
||||||
|
254,
|
||||||
|
"Two radial hands attached at the upper-right and lower-right corners sweep to the left",
|
||||||
|
"saloondoor-r"},
|
||||||
|
{
|
||||||
|
261,
|
||||||
|
"Two radial hands attached at the midpoints of the top and bottom halves sweep from right to left",
|
||||||
|
"windshield-r"},
|
||||||
|
{
|
||||||
|
262,
|
||||||
|
"Two radial hands attached at the midpoints of the left and right halves sweep from top to bottom",
|
||||||
|
"windshield-u"},
|
||||||
|
{
|
||||||
|
263,
|
||||||
|
"Two sets of radial hands attached at the midpoints of the top and bottom halves sweep from top to bottom and bottom to top",
|
||||||
|
"windshield-v"},
|
||||||
|
{
|
||||||
|
264,
|
||||||
|
"Two sets of radial hands attached at the midpoints of the left and right halves sweep from left to right and right to left",
|
||||||
|
"windshield-h"},
|
||||||
|
{
|
||||||
|
VTYPE_CROSSFADE,
|
||||||
|
"Crossfade between two clips",
|
||||||
|
"crossfade"},
|
||||||
|
{0, NULL, NULL}
|
||||||
|
};
|
||||||
|
|
||||||
/* how many types could GType type if GType could type types? */
|
/* how many types could GType type if GType could type types? */
|
||||||
|
|
||||||
static GType
|
static GType
|
||||||
ges_type_timeline_transition_vtype_get_type (void)
|
ges_type_timeline_transition_vtype_get_type (void)
|
||||||
{
|
{
|
||||||
_ensure_smpte_enum_class ();
|
|
||||||
|
|
||||||
static GType the_type = 0;
|
static GType the_type = 0;
|
||||||
|
static gsize once = 0;
|
||||||
|
|
||||||
if (!the_type) {
|
if (g_once_init_enter (&once)) {
|
||||||
GEnumValue *values, *src, *dst;
|
g_assert (!once);
|
||||||
gint i, n;
|
|
||||||
|
|
||||||
n = smpte_enum_class->n_values;
|
the_type = g_enum_register_static ("GESTimelineTransitionVType",
|
||||||
|
transition_types);
|
||||||
/* plus one for sentinel, plus another for the crossfade GEnumValue */
|
g_once_init_leave (&once, 1);
|
||||||
values = g_new0 (GEnumValue, 2 + n);
|
|
||||||
|
|
||||||
for (i = 0, dst = values, src = smpte_enum_class->values; i < n;
|
|
||||||
i++, dst++, src++) {
|
|
||||||
dst->value = src->value;
|
|
||||||
dst->value_nick = src->value_nick;
|
|
||||||
dst->value_name = src->value_name;
|
|
||||||
}
|
|
||||||
|
|
||||||
dst->value = VTYPE_CROSSFADE;
|
|
||||||
dst->value_name = "Cross-fade between two sources";
|
|
||||||
dst->value_nick = "crossfade";
|
|
||||||
|
|
||||||
dst++;
|
|
||||||
|
|
||||||
dst->value = 0;
|
|
||||||
dst->value_nick = NULL;
|
|
||||||
dst->value_name = NULL;
|
|
||||||
|
|
||||||
the_type = g_enum_register_static ("GESTimelineTransitionVType", values);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return the_type;
|
return the_type;
|
||||||
}
|
}
|
||||||
|
|
||||||
GESTimelineTransition *
|
GESTimelineTransition *
|
||||||
ges_timeline_transition_new_for_nick (char *nick)
|
ges_timeline_transition_new (gint vtype)
|
||||||
{
|
{
|
||||||
|
GESTimelineTransition *ret;
|
||||||
|
|
||||||
_ensure_smpte_enum_class ();
|
ret = g_object_new (GES_TYPE_TIMELINE_TRANSITION, "vtype", (gint) vtype,
|
||||||
|
NULL);
|
||||||
if (!strcmp ("crossfade", nick)) {
|
return ret;
|
||||||
return ges_timeline_transition_new (VTYPE_CROSSFADE);
|
}
|
||||||
}
|
|
||||||
|
GESTimelineTransition *
|
||||||
GEnumValue *value = g_enum_get_value_by_nick (smpte_enum_class, nick);
|
ges_timeline_transition_new_for_nick (gchar * nick)
|
||||||
|
{
|
||||||
if (!value) {
|
GESTimelineTransition *ret;
|
||||||
return NULL;
|
ret = g_object_new (GES_TYPE_TIMELINE_TRANSITION, NULL);
|
||||||
}
|
g_object_set (ret, "vtype", (gchar *) nick, NULL);
|
||||||
|
|
||||||
return ges_timeline_transition_new (value->value);
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue