gstreamer 0.90.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (126) hide show
  1. data/ChangeLog +1157 -0
  2. data/README +33 -0
  3. data/Rakefile +15 -0
  4. data/ext/gstreamer/Makefile +162 -0
  5. data/ext/gstreamer/depend +5 -0
  6. data/ext/gstreamer/extconf.rb +63 -0
  7. data/ext/gstreamer/gst.so +0 -0
  8. data/ext/gstreamer/misc.c +62 -0
  9. data/ext/gstreamer/misc.o +0 -0
  10. data/ext/gstreamer/rbgst-bin.c +466 -0
  11. data/ext/gstreamer/rbgst-bin.o +0 -0
  12. data/ext/gstreamer/rbgst-buffer.c +365 -0
  13. data/ext/gstreamer/rbgst-buffer.o +0 -0
  14. data/ext/gstreamer/rbgst-bus.c +92 -0
  15. data/ext/gstreamer/rbgst-bus.o +0 -0
  16. data/ext/gstreamer/rbgst-caps.c +441 -0
  17. data/ext/gstreamer/rbgst-caps.o +0 -0
  18. data/ext/gstreamer/rbgst-child-proxy.c +33 -0
  19. data/ext/gstreamer/rbgst-child-proxy.o +0 -0
  20. data/ext/gstreamer/rbgst-clock.c +108 -0
  21. data/ext/gstreamer/rbgst-clock.o +0 -0
  22. data/ext/gstreamer/rbgst-element-factory.c +255 -0
  23. data/ext/gstreamer/rbgst-element-factory.o +0 -0
  24. data/ext/gstreamer/rbgst-element.c +1053 -0
  25. data/ext/gstreamer/rbgst-element.o +0 -0
  26. data/ext/gstreamer/rbgst-event.c +351 -0
  27. data/ext/gstreamer/rbgst-event.o +0 -0
  28. data/ext/gstreamer/rbgst-ghost-pad.c +42 -0
  29. data/ext/gstreamer/rbgst-ghost-pad.o +0 -0
  30. data/ext/gstreamer/rbgst-index-factory.c +67 -0
  31. data/ext/gstreamer/rbgst-index-factory.o +0 -0
  32. data/ext/gstreamer/rbgst-message.c +784 -0
  33. data/ext/gstreamer/rbgst-message.o +0 -0
  34. data/ext/gstreamer/rbgst-mini-object.c +220 -0
  35. data/ext/gstreamer/rbgst-mini-object.o +0 -0
  36. data/ext/gstreamer/rbgst-object.c +81 -0
  37. data/ext/gstreamer/rbgst-object.o +0 -0
  38. data/ext/gstreamer/rbgst-pad-template.c +124 -0
  39. data/ext/gstreamer/rbgst-pad-template.o +0 -0
  40. data/ext/gstreamer/rbgst-pad.c +338 -0
  41. data/ext/gstreamer/rbgst-pad.o +0 -0
  42. data/ext/gstreamer/rbgst-pipeline.c +90 -0
  43. data/ext/gstreamer/rbgst-pipeline.o +0 -0
  44. data/ext/gstreamer/rbgst-plugin-feature.c +134 -0
  45. data/ext/gstreamer/rbgst-plugin-feature.o +0 -0
  46. data/ext/gstreamer/rbgst-plugin.c +164 -0
  47. data/ext/gstreamer/rbgst-plugin.o +0 -0
  48. data/ext/gstreamer/rbgst-private.c +89 -0
  49. data/ext/gstreamer/rbgst-private.h +37 -0
  50. data/ext/gstreamer/rbgst-private.o +0 -0
  51. data/ext/gstreamer/rbgst-query.c +289 -0
  52. data/ext/gstreamer/rbgst-query.o +0 -0
  53. data/ext/gstreamer/rbgst-seek.c +36 -0
  54. data/ext/gstreamer/rbgst-seek.o +0 -0
  55. data/ext/gstreamer/rbgst-static-caps.c +49 -0
  56. data/ext/gstreamer/rbgst-static-caps.o +0 -0
  57. data/ext/gstreamer/rbgst-static-pad-template.c +64 -0
  58. data/ext/gstreamer/rbgst-static-pad-template.o +0 -0
  59. data/ext/gstreamer/rbgst-structure.c +300 -0
  60. data/ext/gstreamer/rbgst-structure.o +0 -0
  61. data/ext/gstreamer/rbgst-system-clock.c +45 -0
  62. data/ext/gstreamer/rbgst-system-clock.o +0 -0
  63. data/ext/gstreamer/rbgst-type-find-factory.c +124 -0
  64. data/ext/gstreamer/rbgst-type-find-factory.o +0 -0
  65. data/ext/gstreamer/rbgst-value.c +517 -0
  66. data/ext/gstreamer/rbgst-value.o +0 -0
  67. data/ext/gstreamer/rbgst-x-overlay.c +132 -0
  68. data/ext/gstreamer/rbgst-x-overlay.o +0 -0
  69. data/ext/gstreamer/rbgst.c +279 -0
  70. data/ext/gstreamer/rbgst.h +197 -0
  71. data/ext/gstreamer/rbgst.o +0 -0
  72. data/ext/gstreamer/rbgstclockentry.c +268 -0
  73. data/ext/gstreamer/rbgstclockentry.o +0 -0
  74. data/ext/gstreamer/rbgstformat.c +159 -0
  75. data/ext/gstreamer/rbgstformat.o +0 -0
  76. data/ext/gstreamer/rbgstindex.c +314 -0
  77. data/ext/gstreamer/rbgstindex.o +0 -0
  78. data/ext/gstreamer/rbgstindexentry.c +96 -0
  79. data/ext/gstreamer/rbgstindexentry.o +0 -0
  80. data/ext/gstreamer/rbgstparse.c +66 -0
  81. data/ext/gstreamer/rbgstparse.o +0 -0
  82. data/ext/gstreamer/rbgstquerytype.c +159 -0
  83. data/ext/gstreamer/rbgstquerytype.o +0 -0
  84. data/ext/gstreamer/rbgstregistry.c +278 -0
  85. data/ext/gstreamer/rbgstregistry.o +0 -0
  86. data/ext/gstreamer/rbgsttag.c +111 -0
  87. data/ext/gstreamer/rbgsttag.o +0 -0
  88. data/ext/gstreamer/rbgsttagsetter.c +50 -0
  89. data/ext/gstreamer/rbgsttagsetter.o +0 -0
  90. data/ext/gstreamer/rbgstxml.c +189 -0
  91. data/ext/gstreamer/rbgstxml.o +0 -0
  92. data/ext/gstreamer/ruby-gstreamer.pc +3 -0
  93. data/extconf.rb +49 -0
  94. data/lib/gst.rb +19 -0
  95. data/sample/audio-player.rb +54 -0
  96. data/sample/gst-inspect.rb +417 -0
  97. data/sample/media-type.rb +55 -0
  98. data/sample/media-type2.rb +268 -0
  99. data/sample/ogg-audio-player.rb +54 -0
  100. data/sample/type-find.rb +46 -0
  101. data/sample/video-player.rb +57 -0
  102. data/sample/xml-player.rb +60 -0
  103. data/test/gst-test-utils.rb +18 -0
  104. data/test/run-test.rb +25 -0
  105. data/test/test_bin.rb +167 -0
  106. data/test/test_buffer.rb +174 -0
  107. data/test/test_caps.rb +24 -0
  108. data/test/test_clock.rb +7 -0
  109. data/test/test_element.rb +87 -0
  110. data/test/test_element_factory.rb +28 -0
  111. data/test/test_event.rb +10 -0
  112. data/test/test_index_factory.rb +7 -0
  113. data/test/test_message.rb +191 -0
  114. data/test/test_mini_object.rb +38 -0
  115. data/test/test_object.rb +10 -0
  116. data/test/test_pad.rb +68 -0
  117. data/test/test_plugin.rb +6 -0
  118. data/test/test_plugin_feature.rb +20 -0
  119. data/test/test_seek.rb +17 -0
  120. data/test/test_static_caps.rb +18 -0
  121. data/test/test_static_pad_template.rb +16 -0
  122. data/test/test_structure.rb +159 -0
  123. data/test/test_thread_handling.rb +58 -0
  124. data/test/test_type_find_factory.rb +8 -0
  125. data/test/test_value.rb +69 -0
  126. metadata +208 -0
@@ -0,0 +1,517 @@
1
+ /*
2
+ * Copyright (C) 2008 Ruby-GNOME2 Project Team
3
+ *
4
+ * This file is part of Ruby/GStreamer.
5
+ *
6
+ * Ruby/GStreamer is free software; you can redistribute it and/or
7
+ * modify it under the terms of the GNU Lesser General Public
8
+ * License as published by the Free Software Foundation; either
9
+ * version 2.1 of the License, or (at your option) any later version.
10
+ *
11
+ * Ruby/GStreamer is distributed in the hope that it will be useful,
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
+ * Lesser General Public License for more details.
15
+ *
16
+ * You should have received a copy of the GNU Lesser General Public
17
+ * License along with Ruby/GStreamer; if not, write to the Free Software
18
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19
+ */
20
+
21
+ #include "rbgst.h"
22
+
23
+ static VALUE cIntRange, cFourcc, cFractionRange;
24
+
25
+ static RGConvertTable value_list_table = {0};
26
+ static RGConvertTable value_array_table = {0};
27
+ static RGConvertTable int_range_table = {0};
28
+ static RGConvertTable fourcc_table = {0};
29
+ static RGConvertTable fraction_table = {0};
30
+ static RGConvertTable fraction_range_table = {0};
31
+
32
+
33
+ static void
34
+ value_list_rvalue2gvalue(VALUE value, GValue *result)
35
+ {
36
+ guint i, len;
37
+
38
+ len = RARRAY_LEN(value);
39
+ for (i = 0; i < len; i++) {
40
+ GValue val = {0};
41
+ rbgobj_initialize_gvalue(&val, RARRAY_PTR(value)[i]);
42
+ gst_value_list_append_value(result, &val);
43
+ g_value_unset(&val);
44
+ }
45
+ }
46
+
47
+ static VALUE
48
+ value_list_gvalue2rvalue(const GValue *value)
49
+ {
50
+ guint i, len;
51
+ VALUE result;
52
+
53
+ len = gst_value_list_get_size(value);
54
+ result = rb_ary_new2(len);
55
+ for (i = 0; i < len; i++) {
56
+ rb_ary_push(result, GVAL2RVAL(gst_value_list_get_value(value, i)));
57
+ }
58
+
59
+ return result;
60
+ }
61
+
62
+
63
+ static void
64
+ value_array_rvalue2gvalue(VALUE value, GValue *result)
65
+ {
66
+ guint i, len;
67
+
68
+ len = RARRAY_LEN(value);
69
+ for (i = 0; i < len; i++) {
70
+ GValue val = {0};
71
+ rbgobj_initialize_gvalue(&val, RARRAY_PTR(value)[i]);
72
+ gst_value_array_append_value(result, &val);
73
+ g_value_unset(&val);
74
+ }
75
+ }
76
+
77
+ static VALUE
78
+ value_array_gvalue2rvalue(const GValue *value)
79
+ {
80
+ guint i, len;
81
+ VALUE result;
82
+
83
+ len = gst_value_array_get_size(value);
84
+ result = rb_ary_new2(len);
85
+ for (i = 0; i < len; i++) {
86
+ rb_ary_push(result, GVAL2RVAL(gst_value_array_get_value(value, i)));
87
+ }
88
+
89
+ return result;
90
+ }
91
+
92
+
93
+ static GValue *
94
+ g_value_new(GType type)
95
+ {
96
+ GValue *value;
97
+
98
+ value = ALLOC(GValue);
99
+ MEMZERO(value, GValue, 1);
100
+ g_value_init(value, type);
101
+
102
+ return value;
103
+ }
104
+
105
+ static void
106
+ g_value_free(gpointer instance)
107
+ {
108
+ if (instance) {
109
+ g_value_unset(instance);
110
+ g_free(instance);
111
+ }
112
+ }
113
+
114
+ static VALUE
115
+ g_value_to_ruby_value(const GValue *value)
116
+ {
117
+ VALUE klass;
118
+ GType type;
119
+ GValue *copied_value;
120
+
121
+ type = G_VALUE_TYPE(value);
122
+ klass = GTYPE2CLASS(type);
123
+ copied_value = g_value_new(type);
124
+ g_value_copy(value, copied_value);
125
+ return Data_Wrap_Struct(klass, NULL, g_value_free, copied_value);
126
+ }
127
+
128
+ static VALUE
129
+ g_value_type_instance_to_ruby_object(gpointer instance)
130
+ {
131
+ return g_value_to_ruby_value(instance);
132
+ }
133
+
134
+ static void
135
+ g_value_type_unref(gpointer instance)
136
+ {
137
+ g_value_unset(instance);
138
+ }
139
+
140
+ #define DEF_G_VALUE_CONVERTERS(prefix, g_type, type) \
141
+ static gpointer \
142
+ prefix ## _robj2instance(VALUE object) \
143
+ { \
144
+ gpointer instance; \
145
+ \
146
+ if (!RVAL2CBOOL(rb_obj_is_kind_of(object, c ## type))) { \
147
+ rb_raise(rb_eTypeError, "not a Gst::" # type); \
148
+ } \
149
+ Data_Get_Struct(object, GValue, instance); \
150
+ return instance; \
151
+ } \
152
+ \
153
+ static VALUE \
154
+ prefix ## _allocate(VALUE klass) \
155
+ { \
156
+ return Data_Wrap_Struct(klass, NULL, \
157
+ g_value_free, g_value_new(g_type)); \
158
+ }
159
+
160
+ static VALUE
161
+ g_value_to_s(VALUE self)
162
+ {
163
+ return CSTR2RVAL_FREE(g_strdup_value_contents(RVAL2GOBJ(self)));
164
+ }
165
+
166
+
167
+
168
+ static VALUE
169
+ int_range_initialize(VALUE self, VALUE min, VALUE max)
170
+ {
171
+ gst_value_set_int_range(DATA_PTR(self), NUM2INT(min), NUM2INT(max));
172
+ return Qnil;
173
+ }
174
+
175
+ static VALUE
176
+ int_range_get_min(VALUE self)
177
+ {
178
+ return INT2NUM(gst_value_get_int_range_min(RVAL2GOBJ(self)));
179
+ }
180
+
181
+ static VALUE
182
+ int_range_set_min(VALUE self, VALUE min)
183
+ {
184
+ GValue *value;
185
+
186
+ value = RVAL2GOBJ(self);
187
+ gst_value_set_int_range(value,
188
+ NUM2INT(min),
189
+ gst_value_get_int_range_max(value));
190
+ return Qnil;
191
+ }
192
+
193
+ static VALUE
194
+ int_range_get_max(VALUE self)
195
+ {
196
+ return INT2NUM(gst_value_get_int_range_max(RVAL2GOBJ(self)));
197
+ }
198
+
199
+ static VALUE
200
+ int_range_set_max(VALUE self, VALUE max)
201
+ {
202
+ GValue *value;
203
+
204
+ value = RVAL2GOBJ(self);
205
+ gst_value_set_int_range(value,
206
+ gst_value_get_int_range_min(value),
207
+ NUM2INT(max));
208
+ return Qnil;
209
+ }
210
+
211
+ static VALUE
212
+ int_range_set(VALUE self, VALUE min, VALUE max)
213
+ {
214
+ gst_value_set_int_range(RVAL2GOBJ(self), NUM2INT(min), NUM2INT(max));
215
+ return Qnil;
216
+ }
217
+
218
+ static VALUE
219
+ int_range_to_a(VALUE self)
220
+ {
221
+ GValue *value;
222
+
223
+ value = RVAL2GOBJ(self);
224
+ return rb_ary_new3(2,
225
+ INT2NUM(gst_value_get_int_range_min(value)),
226
+ INT2NUM(gst_value_get_int_range_max(value)));
227
+ }
228
+
229
+ static VALUE
230
+ int_range_get_superclass(void)
231
+ {
232
+ return rb_cObject;
233
+ }
234
+
235
+ static void
236
+ int_range_rvalue2gvalue(VALUE value, GValue *result)
237
+ {
238
+ GValue *val;
239
+
240
+ val = RVAL2GOBJ(value);
241
+ gst_value_set_int_range(result,
242
+ gst_value_get_int_range_min(val),
243
+ gst_value_get_int_range_max(val));
244
+ }
245
+
246
+ DEF_G_VALUE_CONVERTERS(int_range, GST_TYPE_INT_RANGE, IntRange)
247
+
248
+
249
+ static VALUE
250
+ fourcc_get_superclass(void)
251
+ {
252
+ return rb_cObject;
253
+ }
254
+
255
+ static void
256
+ fourcc_rvalue2gvalue(VALUE value, GValue *result)
257
+ {
258
+ gst_value_set_fourcc(result,
259
+ gst_value_get_fourcc(RVAL2GOBJ(value)));
260
+ }
261
+
262
+ DEF_G_VALUE_CONVERTERS(fourcc, GST_TYPE_FOURCC, Fourcc)
263
+
264
+ static guint32
265
+ value_to_fourcc(VALUE value)
266
+ {
267
+ if (RVAL2CBOOL(rb_obj_is_kind_of(value, rb_cString))) {
268
+ return GST_STR_FOURCC(RSTRING_PTR(value));
269
+ } else {
270
+ return NUM2UINT(value);
271
+ }
272
+ }
273
+
274
+ static VALUE
275
+ fourcc_initialize(VALUE self, VALUE fourcc)
276
+ {
277
+ gst_value_set_fourcc(DATA_PTR(self), value_to_fourcc(fourcc));
278
+ return Qnil;
279
+ }
280
+
281
+ static VALUE
282
+ fourcc_replace_bang(VALUE self, VALUE fourcc)
283
+ {
284
+ gst_value_set_fourcc(DATA_PTR(self), value_to_fourcc(fourcc));
285
+ return Qnil;
286
+ }
287
+
288
+ static VALUE
289
+ fourcc_to_i(VALUE self)
290
+ {
291
+ return UINT2NUM(gst_value_get_fourcc(DATA_PTR(self)));
292
+ }
293
+
294
+
295
+ static void
296
+ fraction_rvalue2gvalue(VALUE value, GValue *result)
297
+ {
298
+ gst_value_set_fraction(result,
299
+ NUM2INT(rb_funcall(value, rb_intern("numerator"), 0)),
300
+ NUM2INT(rb_funcall(value, rb_intern("denominator"),
301
+ 0)));
302
+ }
303
+
304
+ static VALUE
305
+ fraction_gvalue2rvalue(const GValue *value)
306
+ {
307
+ return rb_funcall(Qnil, rb_intern("Rational"), 2,
308
+ INT2NUM(gst_value_get_fraction_numerator(value)),
309
+ INT2NUM(gst_value_get_fraction_denominator(value)));
310
+ }
311
+
312
+
313
+ static VALUE
314
+ fraction_range_initialize(VALUE self, VALUE min, VALUE max)
315
+ {
316
+ GValue min_value = {0}, max_value = {0};
317
+
318
+ rbgobj_initialize_gvalue(&min_value, min);
319
+ rbgobj_initialize_gvalue(&max_value, max);
320
+ gst_value_set_fraction_range(DATA_PTR(self), &min_value, &max_value);
321
+ return Qnil;
322
+ }
323
+
324
+ static VALUE
325
+ fraction_range_get_min(VALUE self)
326
+ {
327
+ return GVAL2RVAL(gst_value_get_fraction_range_min(RVAL2GOBJ(self)));
328
+ }
329
+
330
+ static VALUE
331
+ fraction_range_set_min(VALUE self, VALUE min)
332
+ {
333
+ GValue *value;
334
+ GValue min_value = {0};
335
+
336
+ value = RVAL2GOBJ(self);
337
+ rbgobj_initialize_gvalue(&min_value, min);
338
+ gst_value_set_fraction_range(value,
339
+ &min_value,
340
+ gst_value_get_fraction_range_max(value));
341
+ return Qnil;
342
+ }
343
+
344
+ static VALUE
345
+ fraction_range_get_max(VALUE self)
346
+ {
347
+ return GVAL2RVAL(gst_value_get_fraction_range_max(RVAL2GOBJ(self)));
348
+ }
349
+
350
+ static VALUE
351
+ fraction_range_set_max(VALUE self, VALUE max)
352
+ {
353
+ GValue *value;
354
+ GValue max_value = {0};
355
+
356
+ value = RVAL2GOBJ(self);
357
+ rbgobj_initialize_gvalue(&max_value, max);
358
+ gst_value_set_fraction_range(value,
359
+ gst_value_get_fraction_range_min(value),
360
+ &max_value);
361
+ return Qnil;
362
+ }
363
+
364
+ static VALUE
365
+ fraction_range_set(VALUE self, VALUE min, VALUE max)
366
+ {
367
+ GValue min_value = {0}, max_value = {0};
368
+
369
+ rbgobj_initialize_gvalue(&min_value, min);
370
+ rbgobj_initialize_gvalue(&max_value, max);
371
+ gst_value_set_fraction_range(RVAL2GOBJ(self), &min_value, &max_value);
372
+ return Qnil;
373
+ }
374
+
375
+ static VALUE
376
+ fraction_range_to_a(VALUE self)
377
+ {
378
+ GValue *value;
379
+
380
+ value = RVAL2GOBJ(self);
381
+ return rb_ary_new3(2,
382
+ GVAL2RVAL(gst_value_get_fraction_range_min(value)),
383
+ GVAL2RVAL(gst_value_get_fraction_range_max(value)));
384
+ }
385
+
386
+ static VALUE
387
+ fraction_range_get_superclass(void)
388
+ {
389
+ return rb_cObject;
390
+ }
391
+
392
+ static void
393
+ fraction_range_rvalue2gvalue(VALUE value, GValue *result)
394
+ {
395
+ GValue *val;
396
+
397
+ val = RVAL2GOBJ(value);
398
+ gst_value_set_fraction_range(result,
399
+ gst_value_get_fraction_range_min(val),
400
+ gst_value_get_fraction_range_max(val));
401
+ }
402
+
403
+ DEF_G_VALUE_CONVERTERS(fraction_range, GST_TYPE_FRACTION_RANGE, FractionRange)
404
+
405
+
406
+ void
407
+ Init_gst_value(void)
408
+ {
409
+ value_list_table.type = GST_TYPE_LIST;
410
+ value_list_table.rvalue2gvalue = value_list_rvalue2gvalue;
411
+ value_list_table.gvalue2rvalue = value_list_gvalue2rvalue;
412
+
413
+ RG_DEF_CONVERSION(&value_list_table);
414
+
415
+
416
+ value_array_table.type = GST_TYPE_ARRAY;
417
+ value_array_table.rvalue2gvalue = value_array_rvalue2gvalue;
418
+ value_array_table.gvalue2rvalue = value_array_gvalue2rvalue;
419
+
420
+ RG_DEF_CONVERSION(&value_array_table);
421
+
422
+
423
+ int_range_table.type = GST_TYPE_INT_RANGE;
424
+ int_range_table.get_superclass = int_range_get_superclass;
425
+ int_range_table.type_init_hook = NULL;
426
+ int_range_table.rvalue2gvalue = int_range_rvalue2gvalue;
427
+ int_range_table.gvalue2rvalue = g_value_to_ruby_value;
428
+ int_range_table.initialize = NULL;
429
+ int_range_table.robj2instance = int_range_robj2instance;
430
+ int_range_table.instance2robj = g_value_type_instance_to_ruby_object;
431
+ int_range_table.unref = g_value_type_unref;
432
+
433
+ RG_DEF_CONVERSION(&int_range_table);
434
+
435
+ cIntRange = G_DEF_CLASS(GST_TYPE_INT_RANGE, "IntRange", mGst);
436
+
437
+ rb_define_alloc_func(cIntRange, int_range_allocate);
438
+
439
+ rb_define_method(cIntRange, "initialize", int_range_initialize, 2);
440
+
441
+ rb_define_method(cIntRange, "min", int_range_get_min, 0);
442
+ rb_define_method(cIntRange, "set_min", int_range_set_min, 1);
443
+ rb_define_method(cIntRange, "max", int_range_get_max, 0);
444
+ rb_define_method(cIntRange, "set_max", int_range_set_max, 1);
445
+
446
+ rb_define_method(cIntRange, "set", int_range_set, 2);
447
+
448
+ rb_define_method(cIntRange, "to_a", int_range_to_a, 0);
449
+ rb_define_method(cIntRange, "to_s", g_value_to_s, 0);
450
+
451
+ G_DEF_SETTERS(cIntRange);
452
+
453
+
454
+ fourcc_table.type = GST_TYPE_FOURCC;
455
+ fourcc_table.get_superclass = fourcc_get_superclass;
456
+ fourcc_table.type_init_hook = NULL;
457
+ fourcc_table.rvalue2gvalue = fourcc_rvalue2gvalue;
458
+ fourcc_table.gvalue2rvalue = g_value_to_ruby_value;
459
+ fourcc_table.initialize = NULL;
460
+ fourcc_table.robj2instance = fourcc_robj2instance;
461
+ fourcc_table.instance2robj = g_value_type_instance_to_ruby_object;
462
+ fourcc_table.unref = g_value_type_unref;
463
+
464
+ RG_DEF_CONVERSION(&fourcc_table);
465
+
466
+ cFourcc = G_DEF_CLASS(GST_TYPE_FOURCC, "Fourcc", mGst);
467
+
468
+ rb_define_alloc_func(cFourcc, fourcc_allocate);
469
+
470
+ rb_define_method(cFourcc, "initialize", fourcc_initialize, 1);
471
+
472
+ rb_define_method(cFourcc, "replace!", fourcc_replace_bang, 1);
473
+
474
+ rb_define_method(cFourcc, "to_i", fourcc_to_i, 0);
475
+ rb_define_method(cFourcc, "to_s", g_value_to_s, 0);
476
+
477
+ G_DEF_SETTERS(cFourcc);
478
+
479
+
480
+ fraction_table.type = GST_TYPE_FRACTION;
481
+ fraction_table.klass = rb_const_get(rb_cObject, rb_intern("Rational"));
482
+ fraction_table.rvalue2gvalue = fraction_rvalue2gvalue;
483
+ fraction_table.gvalue2rvalue = fraction_gvalue2rvalue;
484
+
485
+ RG_DEF_CONVERSION(&fraction_table);
486
+
487
+
488
+ fraction_range_table.type = GST_TYPE_FRACTION_RANGE;
489
+ fraction_range_table.get_superclass = fraction_range_get_superclass;
490
+ fraction_range_table.type_init_hook = NULL;
491
+ fraction_range_table.rvalue2gvalue = fraction_range_rvalue2gvalue;
492
+ fraction_range_table.gvalue2rvalue = g_value_to_ruby_value;
493
+ fraction_range_table.initialize = NULL;
494
+ fraction_range_table.robj2instance = fraction_range_robj2instance;
495
+ fraction_range_table.instance2robj = g_value_type_instance_to_ruby_object;
496
+ fraction_range_table.unref = g_value_type_unref;
497
+
498
+ RG_DEF_CONVERSION(&fraction_range_table);
499
+
500
+ cFractionRange = G_DEF_CLASS(GST_TYPE_FRACTION_RANGE, "FractionRange", mGst);
501
+
502
+ rb_define_alloc_func(cFractionRange, fraction_range_allocate);
503
+
504
+ rb_define_method(cFractionRange, "initialize", fraction_range_initialize, 2);
505
+
506
+ rb_define_method(cFractionRange, "min", fraction_range_get_min, 0);
507
+ rb_define_method(cFractionRange, "set_min", fraction_range_set_min, 1);
508
+ rb_define_method(cFractionRange, "max", fraction_range_get_max, 0);
509
+ rb_define_method(cFractionRange, "set_max", fraction_range_set_max, 1);
510
+
511
+ rb_define_method(cFractionRange, "set", fraction_range_set, 2);
512
+
513
+ rb_define_method(cFractionRange, "to_a", fraction_range_to_a, 0);
514
+ rb_define_method(cFractionRange, "to_s", g_value_to_s, 0);
515
+
516
+ G_DEF_SETTERS(cFractionRange);
517
+ }