767b4a09bf3c1b873724438579903e9f166fabea
[platform/upstream/gst-editing-services.git] / ges / ges-enums.c
1 /* GStreamer Editing Services
2  * Copyright (C) 2010 Brandon Lewis <brandon.lewis@collabora.co.uk>
3  *               2010 Nokia Corporation
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Library General Public
7  * License as published by the Free Software Foundation; either
8  * version 2 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * Library General Public License for more details.
14  *
15  * You should have received a copy of the GNU Library General Public
16  * License along with this library; if not, write to the
17  * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
18  * Boston, MA 02110-1301, USA.
19  */
20
21 /**
22  * SECTION:ges-enums
23  * @title: GES Enumerations
24  * @short_description: Various enums for the Gstreamer Editing Services
25  */
26 #ifdef HAVE_CONFIG_H
27 #include "config.h"
28 #endif
29
30 #include "ges-enums.h"
31 #include "ges-internal.h"
32 #include "ges-asset.h"
33 #include "ges-meta-container.h"
34 #include "ges-transition-clip.h"
35
36 #define C_ENUM(v) ((guint) v)
37
38 static const GFlagsValue track_types_values[] = {
39   {C_ENUM (GES_TRACK_TYPE_UNKNOWN), "GES_TRACK_TYPE_UNKNOWN", "unknown"},
40   {C_ENUM (GES_TRACK_TYPE_AUDIO), "GES_TRACK_TYPE_AUDIO", "audio"},
41   {C_ENUM (GES_TRACK_TYPE_VIDEO), "GES_TRACK_TYPE_VIDEO", "video"},
42   {C_ENUM (GES_TRACK_TYPE_TEXT), "GES_TRACK_TYPE_TEXT", "text"},
43   {C_ENUM (GES_TRACK_TYPE_CUSTOM), "GES_TRACK_TYPE_CUSTOM", "custom"},
44   {0, NULL, NULL}
45 };
46
47 static void
48 register_ges_track_type_select_result (GType * id)
49 {
50   *id = g_flags_register_static ("GESTrackType", track_types_values);
51 }
52
53 const gchar *
54 ges_track_type_name (GESTrackType type)
55 {
56   guint i;
57
58   for (i = 0; i < G_N_ELEMENTS (track_types_values); i++) {
59     if (type == track_types_values[i].value)
60       return track_types_values[i].value_nick;
61   }
62
63   return "Unknown (mixed?) ";
64 }
65
66 GType
67 ges_track_type_get_type (void)
68 {
69   static GType id;
70   static GOnce once = G_ONCE_INIT;
71
72   g_once (&once, (GThreadFunc) register_ges_track_type_select_result, &id);
73   return id;
74 }
75
76 static void
77 register_ges_pipeline_flags (GType * id)
78 {
79   static const GFlagsValue values[] = {
80     {C_ENUM (GES_PIPELINE_MODE_PREVIEW_AUDIO),
81           "GES_PIPELINE_MODE_PREVIEW_AUDIO",
82         "audio_preview"},
83     {C_ENUM (GES_PIPELINE_MODE_PREVIEW_VIDEO),
84           "GES_PIPELINE_MODE_PREVIEW_VIDEO",
85         "video_preview"},
86     {C_ENUM (GES_PIPELINE_MODE_PREVIEW), "GES_PIPELINE_MODE_PREVIEW",
87         "full_preview"},
88     {C_ENUM (GES_PIPELINE_MODE_RENDER), "GES_PIPELINE_MODE_RENDER", "render"},
89     {C_ENUM (GES_PIPELINE_MODE_SMART_RENDER), "GES_PIPELINE_MODE_SMART_RENDER",
90         "smart_render"},
91     {0, NULL, NULL}
92   };
93
94   *id = g_flags_register_static ("GESPipelineFlags", values);
95 }
96
97 GType
98 ges_pipeline_flags_get_type (void)
99 {
100   static GType id;
101   static GOnce once = G_ONCE_INIT;
102
103   g_once (&once, (GThreadFunc) register_ges_pipeline_flags, &id);
104   return id;
105 }
106
107 static void
108 register_ges_edit_mode (GType * id)
109 {
110   static const GEnumValue edit_mode[] = {
111     {C_ENUM (GES_EDIT_MODE_NORMAL), "GES_EDIT_MODE_NORMAL",
112         "edit_normal"},
113
114     {C_ENUM (GES_EDIT_MODE_NORMAL), "GES_EDIT_MODE_NORMAL",
115         "normal"},
116
117     {C_ENUM (GES_EDIT_MODE_RIPPLE), "GES_EDIT_MODE_RIPPLE",
118         "edit_ripple"},
119
120     {C_ENUM (GES_EDIT_MODE_RIPPLE), "GES_EDIT_MODE_RIPPLE",
121         "ripple"},
122
123     {C_ENUM (GES_EDIT_MODE_ROLL), "GES_EDIT_MODE_ROLL",
124         "edit_roll"},
125
126     {C_ENUM (GES_EDIT_MODE_ROLL), "GES_EDIT_MODE_ROLL",
127         "roll"},
128
129     {C_ENUM (GES_EDIT_MODE_TRIM), "GES_EDIT_MODE_TRIM",
130         "edit_trim"},
131
132     {C_ENUM (GES_EDIT_MODE_TRIM), "GES_EDIT_MODE_TRIM",
133         "trim"},
134
135     {C_ENUM (GES_EDIT_MODE_SLIDE), "GES_EDIT_MODE_SLIDE",
136         "edit_slide"},
137
138     {C_ENUM (GES_EDIT_MODE_SLIDE), "GES_EDIT_MODE_SLIDE",
139         "slide"},
140
141     {0, NULL, NULL}
142   };
143
144   *id = g_enum_register_static ("GESEditMode", edit_mode);
145 }
146
147 const gchar *
148 ges_edit_mode_name (GESEditMode mode)
149 {
150   switch (mode) {
151     case GES_EDIT_MODE_NORMAL:
152       return "normal";
153     case GES_EDIT_MODE_RIPPLE:
154       return "ripple";
155     case GES_EDIT_MODE_ROLL:
156       return "roll";
157     case GES_EDIT_MODE_TRIM:
158       return "trim";
159     case GES_EDIT_MODE_SLIDE:
160       return "slide";
161     default:
162       return "unknown";
163   }
164 }
165
166 GType
167 ges_edit_mode_get_type (void)
168 {
169   static GType id;
170   static GOnce once = G_ONCE_INIT;
171
172   g_once (&once, (GThreadFunc) register_ges_edit_mode, &id);
173   return id;
174 }
175
176 static void
177 register_ges_edge (GType * id)
178 {
179   static const GEnumValue edges[] = {
180     {C_ENUM (GES_EDGE_START), "GES_EDGE_START", "edge_start"},
181     {C_ENUM (GES_EDGE_START), "GES_EDGE_START", "start"},
182     {C_ENUM (GES_EDGE_END), "GES_EDGE_END", "edge_end"},
183     {C_ENUM (GES_EDGE_END), "GES_EDGE_END", "end"},
184     {C_ENUM (GES_EDGE_NONE), "GES_EDGE_NONE", "edge_none"},
185     {C_ENUM (GES_EDGE_NONE), "GES_EDGE_NONE", "none"},
186     {0, NULL, NULL}
187   };
188
189   *id = g_enum_register_static ("GESEdge", edges);
190 }
191
192 /**
193  * ges_edge_name:
194  * @edge: The #GESEdge to get the name of
195  *
196  * Returns: A human friendly name for @edge
197  *
198  * Since: 1.16
199  */
200 const gchar *
201 ges_edge_name (GESEdge edge)
202 {
203   switch (edge) {
204     case GES_EDGE_START:
205       return "start";
206     case GES_EDGE_END:
207       return "end";
208     default:
209       return "none";
210   }
211 }
212
213 GType
214 ges_edge_get_type (void)
215 {
216   static GType id;
217   static GOnce once = G_ONCE_INIT;
218
219   g_once (&once, (GThreadFunc) register_ges_edge, &id);
220   return id;
221 }
222
223 static GEnumValue transition_types[] = {
224   {GES_VIDEO_STANDARD_TRANSITION_TYPE_NONE,
225         "GES_VIDEO_STANDARD_TRANSITION_TYPE_NONE",
226       "none"},
227   {GES_VIDEO_STANDARD_TRANSITION_TYPE_BAR_WIPE_LR,
228         "GES_VIDEO_STANDARD_TRANSITION_TYPE_BAR_WIPE_LR",
229       "bar-wipe-lr"},
230   {GES_VIDEO_STANDARD_TRANSITION_TYPE_BAR_WIPE_TB,
231         "GES_VIDEO_STANDARD_TRANSITION_TYPE_BAR_WIPE_TB",
232       "bar-wipe-tb"},
233   {GES_VIDEO_STANDARD_TRANSITION_TYPE_BOX_WIPE_TL,
234         "GES_VIDEO_STANDARD_TRANSITION_TYPE_BOX_WIPE_TL",
235       "box-wipe-tl"},
236   {GES_VIDEO_STANDARD_TRANSITION_TYPE_BOX_WIPE_TR,
237         "GES_VIDEO_STANDARD_TRANSITION_TYPE_BOX_WIPE_TR",
238       "box-wipe-tr"},
239   {GES_VIDEO_STANDARD_TRANSITION_TYPE_BOX_WIPE_BR,
240         "GES_VIDEO_STANDARD_TRANSITION_TYPE_BOX_WIPE_BR",
241       "box-wipe-br"},
242   {GES_VIDEO_STANDARD_TRANSITION_TYPE_BOX_WIPE_BL,
243         "GES_VIDEO_STANDARD_TRANSITION_TYPE_BOX_WIPE_BL",
244       "box-wipe-bl"},
245   {GES_VIDEO_STANDARD_TRANSITION_TYPE_FOUR_BOX_WIPE_CI,
246         "GES_VIDEO_STANDARD_TRANSITION_TYPE_FOUR_BOX_WIPE_CI",
247       "four-box-wipe-ci"},
248   {GES_VIDEO_STANDARD_TRANSITION_TYPE_FOUR_BOX_WIPE_CO,
249         "GES_VIDEO_STANDARD_TRANSITION_TYPE_FOUR_BOX_WIPE_CO",
250       "four-box-wipe-co"},
251   {GES_VIDEO_STANDARD_TRANSITION_TYPE_BARNDOOR_V,
252         "GES_VIDEO_STANDARD_TRANSITION_TYPE_BARNDOOR_V",
253       "barndoor-v"},
254   {GES_VIDEO_STANDARD_TRANSITION_TYPE_BARNDOOR_H,
255         "GES_VIDEO_STANDARD_TRANSITION_TYPE_BARNDOOR_H",
256       "barndoor-h"},
257   {GES_VIDEO_STANDARD_TRANSITION_TYPE_BOX_WIPE_TC,
258         "GES_VIDEO_STANDARD_TRANSITION_TYPE_BOX_WIPE_TC",
259       "box-wipe-tc"},
260   {GES_VIDEO_STANDARD_TRANSITION_TYPE_BOX_WIPE_RC,
261         "GES_VIDEO_STANDARD_TRANSITION_TYPE_BOX_WIPE_RC",
262       "box-wipe-rc"},
263   {GES_VIDEO_STANDARD_TRANSITION_TYPE_BOX_WIPE_BC,
264         "GES_VIDEO_STANDARD_TRANSITION_TYPE_BOX_WIPE_BC",
265       "box-wipe-bc"},
266   {GES_VIDEO_STANDARD_TRANSITION_TYPE_BOX_WIPE_LC,
267         "GES_VIDEO_STANDARD_TRANSITION_TYPE_BOX_WIPE_LC",
268       "box-wipe-lc"},
269   {GES_VIDEO_STANDARD_TRANSITION_TYPE_DIAGONAL_TL,
270         "GES_VIDEO_STANDARD_TRANSITION_TYPE_DIAGONAL_TL",
271       "diagonal-tl"},
272   {GES_VIDEO_STANDARD_TRANSITION_TYPE_DIAGONAL_TR,
273         "GES_VIDEO_STANDARD_TRANSITION_TYPE_DIAGONAL_TR",
274       "diagonal-tr"},
275   {GES_VIDEO_STANDARD_TRANSITION_TYPE_BOWTIE_V,
276         "GES_VIDEO_STANDARD_TRANSITION_TYPE_BOWTIE_V",
277       "bowtie-v"},
278   {GES_VIDEO_STANDARD_TRANSITION_TYPE_BOWTIE_H,
279         "GES_VIDEO_STANDARD_TRANSITION_TYPE_BOWTIE_H",
280       "bowtie-h"},
281   {GES_VIDEO_STANDARD_TRANSITION_TYPE_BARNDOOR_DBL,
282         "GES_VIDEO_STANDARD_TRANSITION_TYPE_BARNDOOR_DBL",
283       "barndoor-dbl"},
284   {GES_VIDEO_STANDARD_TRANSITION_TYPE_BARNDOOR_DTL,
285         "GES_VIDEO_STANDARD_TRANSITION_TYPE_BARNDOOR_DTL",
286       "barndoor-dtl"},
287   {GES_VIDEO_STANDARD_TRANSITION_TYPE_MISC_DIAGONAL_DBD,
288         "GES_VIDEO_STANDARD_TRANSITION_TYPE_MISC_DIAGONAL_DBD",
289       "misc-diagonal-dbd"},
290   {GES_VIDEO_STANDARD_TRANSITION_TYPE_MISC_DIAGONAL_DD,
291         "GES_VIDEO_STANDARD_TRANSITION_TYPE_MISC_DIAGONAL_DD",
292       "misc-diagonal-dd"},
293   {GES_VIDEO_STANDARD_TRANSITION_TYPE_VEE_D,
294         "GES_VIDEO_STANDARD_TRANSITION_TYPE_VEE_D",
295       "vee-d"},
296   {GES_VIDEO_STANDARD_TRANSITION_TYPE_VEE_L,
297         "GES_VIDEO_STANDARD_TRANSITION_TYPE_VEE_L",
298       "vee-l"},
299   {GES_VIDEO_STANDARD_TRANSITION_TYPE_VEE_U,
300         "GES_VIDEO_STANDARD_TRANSITION_TYPE_VEE_U",
301       "vee-u"},
302   {GES_VIDEO_STANDARD_TRANSITION_TYPE_VEE_R,
303         "GES_VIDEO_STANDARD_TRANSITION_TYPE_VEE_R",
304       "vee-r"},
305   {GES_VIDEO_STANDARD_TRANSITION_TYPE_BARNVEE_D,
306         "GES_VIDEO_STANDARD_TRANSITION_TYPE_BARNVEE_D",
307       "barnvee-d"},
308   {GES_VIDEO_STANDARD_TRANSITION_TYPE_BARNVEE_L,
309         "GES_VIDEO_STANDARD_TRANSITION_TYPE_BARNVEE_L",
310       "barnvee-l"},
311   {GES_VIDEO_STANDARD_TRANSITION_TYPE_BARNVEE_U,
312         "GES_VIDEO_STANDARD_TRANSITION_TYPE_BARNVEE_U",
313       "barnvee-u"},
314   {GES_VIDEO_STANDARD_TRANSITION_TYPE_BARNVEE_R,
315         "GES_VIDEO_STANDARD_TRANSITION_TYPE_BARNVEE_R",
316       "barnvee-r"},
317   {GES_VIDEO_STANDARD_TRANSITION_TYPE_IRIS_RECT,
318         "GES_VIDEO_STANDARD_TRANSITION_TYPE_IRIS_RECT",
319       "iris-rect"},
320   {GES_VIDEO_STANDARD_TRANSITION_TYPE_CLOCK_CW12,
321         "GES_VIDEO_STANDARD_TRANSITION_TYPE_CLOCK_CW12",
322       "clock-cw12"},
323   {GES_VIDEO_STANDARD_TRANSITION_TYPE_CLOCK_CW3,
324         "GES_VIDEO_STANDARD_TRANSITION_TYPE_CLOCK_CW3",
325       "clock-cw3"},
326   {GES_VIDEO_STANDARD_TRANSITION_TYPE_CLOCK_CW6,
327         "GES_VIDEO_STANDARD_TRANSITION_TYPE_CLOCK_CW6",
328       "clock-cw6"},
329   {GES_VIDEO_STANDARD_TRANSITION_TYPE_CLOCK_CW9,
330         "GES_VIDEO_STANDARD_TRANSITION_TYPE_CLOCK_CW9",
331       "clock-cw9"},
332   {GES_VIDEO_STANDARD_TRANSITION_TYPE_PINWHEEL_TBV,
333         "GES_VIDEO_STANDARD_TRANSITION_TYPE_PINWHEEL_TBV",
334       "pinwheel-tbv"},
335   {GES_VIDEO_STANDARD_TRANSITION_TYPE_PINWHEEL_TBH,
336         "GES_VIDEO_STANDARD_TRANSITION_TYPE_PINWHEEL_TBH",
337       "pinwheel-tbh"},
338   {GES_VIDEO_STANDARD_TRANSITION_TYPE_PINWHEEL_FB,
339         "GES_VIDEO_STANDARD_TRANSITION_TYPE_PINWHEEL_FB",
340       "pinwheel-fb"},
341   {GES_VIDEO_STANDARD_TRANSITION_TYPE_FAN_CT,
342         "GES_VIDEO_STANDARD_TRANSITION_TYPE_FAN_CT",
343       "fan-ct"},
344   {GES_VIDEO_STANDARD_TRANSITION_TYPE_FAN_CR,
345         "GES_VIDEO_STANDARD_TRANSITION_TYPE_FAN_CR",
346       "fan-cr"},
347   {GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLEFAN_FOV,
348         "GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLEFAN_FOV",
349       "doublefan-fov"},
350   {GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLEFAN_FOH,
351         "GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLEFAN_FOH",
352       "doublefan-foh"},
353   {GES_VIDEO_STANDARD_TRANSITION_TYPE_SINGLESWEEP_CWT,
354         "GES_VIDEO_STANDARD_TRANSITION_TYPE_SINGLESWEEP_CWT",
355       "singlesweep-cwt"},
356   {GES_VIDEO_STANDARD_TRANSITION_TYPE_SINGLESWEEP_CWR,
357         "GES_VIDEO_STANDARD_TRANSITION_TYPE_SINGLESWEEP_CWR",
358       "singlesweep-cwr"},
359   {GES_VIDEO_STANDARD_TRANSITION_TYPE_SINGLESWEEP_CWB,
360         "GES_VIDEO_STANDARD_TRANSITION_TYPE_SINGLESWEEP_CWB",
361       "singlesweep-cwb"},
362   {GES_VIDEO_STANDARD_TRANSITION_TYPE_SINGLESWEEP_CWL,
363         "GES_VIDEO_STANDARD_TRANSITION_TYPE_SINGLESWEEP_CWL",
364       "singlesweep-cwl"},
365   {GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLESWEEP_PV,
366         "GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLESWEEP_PV",
367       "doublesweep-pv"},
368   {GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLESWEEP_PD,
369         "GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLESWEEP_PD",
370       "doublesweep-pd"},
371   {GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLESWEEP_OV,
372         "GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLESWEEP_OV",
373       "doublesweep-ov"},
374   {GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLESWEEP_OH,
375         "GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLESWEEP_OH",
376       "doublesweep-oh"},
377   {GES_VIDEO_STANDARD_TRANSITION_TYPE_FAN_T,
378         "GES_VIDEO_STANDARD_TRANSITION_TYPE_FAN_T",
379       "fan-t"},
380   {GES_VIDEO_STANDARD_TRANSITION_TYPE_FAN_R,
381         "GES_VIDEO_STANDARD_TRANSITION_TYPE_FAN_R",
382       "fan-r"},
383   {GES_VIDEO_STANDARD_TRANSITION_TYPE_FAN_B,
384         "GES_VIDEO_STANDARD_TRANSITION_TYPE_FAN_B",
385       "fan-b"},
386   {GES_VIDEO_STANDARD_TRANSITION_TYPE_FAN_L,
387         "GES_VIDEO_STANDARD_TRANSITION_TYPE_FAN_L",
388       "fan-l"},
389   {GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLEFAN_FIV,
390         "GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLEFAN_FIV",
391       "doublefan-fiv"},
392   {GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLEFAN_FIH,
393         "GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLEFAN_FIH",
394       "doublefan-fih"},
395   {GES_VIDEO_STANDARD_TRANSITION_TYPE_SINGLESWEEP_CWTL,
396         "GES_VIDEO_STANDARD_TRANSITION_TYPE_SINGLESWEEP_CWTL",
397       "singlesweep-cwtl"},
398   {GES_VIDEO_STANDARD_TRANSITION_TYPE_SINGLESWEEP_CWBL,
399         "GES_VIDEO_STANDARD_TRANSITION_TYPE_SINGLESWEEP_CWBL",
400       "singlesweep-cwbl"},
401   {GES_VIDEO_STANDARD_TRANSITION_TYPE_SINGLESWEEP_CWBR,
402         "GES_VIDEO_STANDARD_TRANSITION_TYPE_SINGLESWEEP_CWBR",
403       "singlesweep-cwbr"},
404   {GES_VIDEO_STANDARD_TRANSITION_TYPE_SINGLESWEEP_CWTR,
405         "GES_VIDEO_STANDARD_TRANSITION_TYPE_SINGLESWEEP_CWTR",
406       "singlesweep-cwtr"},
407   {GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLESWEEP_PDTL,
408         "GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLESWEEP_PDTL",
409       "doublesweep-pdtl"},
410   {GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLESWEEP_PDBL,
411         "GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLESWEEP_PDBL",
412       "doublesweep-pdbl"},
413   {GES_VIDEO_STANDARD_TRANSITION_TYPE_SALOONDOOR_T,
414         "GES_VIDEO_STANDARD_TRANSITION_TYPE_SALOONDOOR_T",
415       "saloondoor-t"},
416   {GES_VIDEO_STANDARD_TRANSITION_TYPE_SALOONDOOR_L,
417         "GES_VIDEO_STANDARD_TRANSITION_TYPE_SALOONDOOR_L",
418       "saloondoor-l"},
419   {GES_VIDEO_STANDARD_TRANSITION_TYPE_SALOONDOOR_B,
420         "GES_VIDEO_STANDARD_TRANSITION_TYPE_SALOONDOOR_B",
421       "saloondoor-b"},
422   {GES_VIDEO_STANDARD_TRANSITION_TYPE_SALOONDOOR_R,
423         "GES_VIDEO_STANDARD_TRANSITION_TYPE_SALOONDOOR_R",
424       "saloondoor-r"},
425   {GES_VIDEO_STANDARD_TRANSITION_TYPE_WINDSHIELD_R,
426         "GES_VIDEO_STANDARD_TRANSITION_TYPE_WINDSHIELD_R",
427       "windshield-r"},
428   {GES_VIDEO_STANDARD_TRANSITION_TYPE_WINDSHIELD_U,
429         "GES_VIDEO_STANDARD_TRANSITION_TYPE_WINDSHIELD_U",
430       "windshield-u"},
431   {GES_VIDEO_STANDARD_TRANSITION_TYPE_WINDSHIELD_V,
432         "GES_VIDEO_STANDARD_TRANSITION_TYPE_WINDSHIELD_V",
433       "windshield-v"},
434   {GES_VIDEO_STANDARD_TRANSITION_TYPE_WINDSHIELD_H,
435         "GES_VIDEO_STANDARD_TRANSITION_TYPE_WINDSHIELD_H",
436       "windshield-h"},
437   {GES_VIDEO_STANDARD_TRANSITION_TYPE_CROSSFADE,
438         "GES_VIDEO_STANDARD_TRANSITION_TYPE_CROSSFADE",
439       "crossfade"},
440   {0, NULL, NULL}
441 };
442
443 void
444 _init_standard_transition_assets (void)
445 {
446   guint i;
447
448   for (i = 1; i < G_N_ELEMENTS (transition_types) - 1; i++) {
449     GESAsset *asset = ges_asset_request (GES_TYPE_TRANSITION_CLIP,
450         transition_types[i].value_nick, NULL);
451
452     ges_meta_container_register_meta_string (GES_META_CONTAINER (asset),
453         GES_META_READABLE, GES_META_DESCRIPTION,
454         transition_types[i].value_name);
455
456     gst_object_unref (asset);
457   }
458
459 }
460
461 GType
462 ges_video_standard_transition_type_get_type (void)
463 {
464   static GType the_type = 0;
465   static gsize once = 0;
466
467   if (g_once_init_enter (&once)) {
468     g_assert (!once);
469
470     the_type = g_enum_register_static ("GESVideoStandardTransitionType",
471         transition_types);
472     g_once_init_leave (&once, 1);
473   }
474
475   return the_type;
476 }
477
478 GType
479 ges_text_valign_get_type (void)
480 {
481   static GType text_overlay_valign_type = 0;
482   static gsize initialized = 0;
483   static const GEnumValue text_overlay_valign[] = {
484     {GES_TEXT_VALIGN_BASELINE, "GES_TEXT_VALIGN_BASELINE", "baseline"},
485     {GES_TEXT_VALIGN_BOTTOM, "GES_TEXT_VALIGN_BOTTOM", "bottom"},
486     {GES_TEXT_VALIGN_TOP, "GES_TEXT_VALIGN_TOP", "top"},
487     {GES_TEXT_VALIGN_POSITION, "GES_TEXT_VALIGN_POSITION", "position"},
488     {GES_TEXT_VALIGN_CENTER, "GES_TEXT_VALIGN_CENTER", "center"},
489     {GES_TEXT_VALIGN_ABSOLUTE, "GES_TEXT_VALIGN_ABSOLUTE", "absolute"},
490     {0, NULL, NULL},
491   };
492
493   if (g_once_init_enter (&initialized)) {
494     text_overlay_valign_type =
495         g_enum_register_static ("GESTextVAlign", text_overlay_valign);
496     g_once_init_leave (&initialized, 1);
497   }
498   return text_overlay_valign_type;
499 }
500
501 GType
502 ges_text_halign_get_type (void)
503 {
504   static GType text_overlay_halign_type = 0;
505   static gsize initialized = 0;
506   static const GEnumValue text_overlay_halign[] = {
507     {GES_TEXT_HALIGN_LEFT, "GES_TEXT_HALIGN_LEFT", "left"},
508     {GES_TEXT_HALIGN_CENTER, "GES_TEXT_HALIGN_CENTER", "center"},
509     {GES_TEXT_HALIGN_RIGHT, "GES_TEXT_HALIGN_RIGHT", "right"},
510     {GES_TEXT_HALIGN_POSITION, "GES_TEXT_HALIGN_POSITION", "position"},
511     {GES_TEXT_HALIGN_ABSOLUTE, "GES_TEXT_HALIGN_ABSOLUTE", "absolute"},
512     {0, NULL, NULL},
513   };
514
515   if (g_once_init_enter (&initialized)) {
516     text_overlay_halign_type =
517         g_enum_register_static ("GESTextHAlign", text_overlay_halign);
518     g_once_init_leave (&initialized, 1);
519   }
520   return text_overlay_halign_type;
521 }
522
523 /* table more-or-less copied from gstvideotestsrc.c */
524 static GEnumValue vpattern_enum_values[] = {
525   {GES_VIDEO_TEST_PATTERN_SMPTE, "GES_VIDEO_TEST_PATTERN_SMPTE", "smpte"}
526   ,
527   {GES_VIDEO_TEST_PATTERN_SNOW, "GES_VIDEO_TEST_PATTERN_SNOW", "snow"}
528   ,
529   {GES_VIDEO_TEST_PATTERN_BLACK, "GES_VIDEO_TEST_PATTERN_BLACK", "black"}
530   ,
531   {GES_VIDEO_TEST_PATTERN_WHITE, "GES_VIDEO_TEST_PATTERN_WHITE", "white"}
532   ,
533   {GES_VIDEO_TEST_PATTERN_RED, "GES_VIDEO_TEST_PATTERN_RED", "red"}
534   ,
535   {GES_VIDEO_TEST_PATTERN_GREEN, "GES_VIDEO_TEST_PATTERN_GREEN", "green"}
536   ,
537   {GES_VIDEO_TEST_PATTERN_BLUE, "GES_VIDEO_TEST_PATTERN_BLUE", "blue"}
538   ,
539   {GES_VIDEO_TEST_PATTERN_CHECKERS1,
540       "GES_VIDEO_TEST_PATTERN_CHECKERS1", "checkers-1"}
541   ,
542   {GES_VIDEO_TEST_PATTERN_CHECKERS2,
543       "GES_VIDEO_TEST_PATTERN_CHECKERS2", "checkers-2"}
544   ,
545   {GES_VIDEO_TEST_PATTERN_CHECKERS4,
546       "GES_VIDEO_TEST_PATTERN_CHECKERS4", "checkers-4"}
547   ,
548   {GES_VIDEO_TEST_PATTERN_CHECKERS8,
549       "GES_VIDEO_TEST_PATTERN_CHECKERS8", "checkers-8"}
550   ,
551   {GES_VIDEO_TEST_PATTERN_CIRCULAR,
552       "GES_VIDEO_TEST_PATTERN_CIRCULAR", "circular"}
553   ,
554   {GES_VIDEO_TEST_PATTERN_BLINK, "GES_VIDEO_TEST_PATTERN_BLINK", "blink"}
555   ,
556   {GES_VIDEO_TEST_PATTERN_SMPTE75, "GES_VIDEO_TEST_PATTERN_SMPTE75", "smpte75"}
557   ,
558   {GES_VIDEO_TEST_ZONE_PLATE, "GES_VIDEO_TEST_ZONE_PLATE", "zone-plate"}
559   ,
560   {GES_VIDEO_TEST_GAMUT, "GES_VIDEO_TEST_GAMUT", "gamut"}
561   ,
562   {GES_VIDEO_TEST_CHROMA_ZONE_PLATE, "GES_VIDEO_TEST_CHROMA_ZONE_PLATE",
563       "chroma-zone-plate"}
564   ,
565   {GES_VIDEO_TEST_PATTERN_SOLID, "GES_VIDEO_TEST_PATTERN_SOLID", "solid-color"}
566   ,
567   {0, NULL, NULL}
568 };
569
570 GType
571 ges_video_test_pattern_get_type (void)
572 {
573
574   static gsize once = 0;
575   static GType theType = 0;
576
577   if (g_once_init_enter (&once)) {
578     theType = g_enum_register_static ("GESVideoTestPattern",
579         vpattern_enum_values);
580     g_once_init_leave (&once, 1);
581   };
582
583   return theType;
584 }
585
586 static void
587 register_ges_meta_flag (GType * id)
588 {
589   static const GFlagsValue values[] = {
590     {C_ENUM (GES_META_READABLE), "GES_META_READABLE", "readable"},
591     {C_ENUM (GES_META_WRITABLE), "GES_META_WRITABLE", "writable"},
592     {C_ENUM (GES_META_READ_WRITE), "GES_META_READ_WRITE", "readwrite"},
593     {0, NULL, NULL}
594   };
595
596   *id = g_flags_register_static ("GESMetaFlag", values);
597 }
598
599 GType
600 ges_meta_flag_get_type (void)
601 {
602   static GType id;
603   static GOnce once = G_ONCE_INIT;
604
605   g_once (&once, (GThreadFunc) register_ges_meta_flag, &id);
606   return id;
607 }