gstreamer 0.90.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/ChangeLog +1157 -0
- data/README +33 -0
- data/Rakefile +15 -0
- data/ext/gstreamer/Makefile +162 -0
- data/ext/gstreamer/depend +5 -0
- data/ext/gstreamer/extconf.rb +63 -0
- data/ext/gstreamer/gst.so +0 -0
- data/ext/gstreamer/misc.c +62 -0
- data/ext/gstreamer/misc.o +0 -0
- data/ext/gstreamer/rbgst-bin.c +466 -0
- data/ext/gstreamer/rbgst-bin.o +0 -0
- data/ext/gstreamer/rbgst-buffer.c +365 -0
- data/ext/gstreamer/rbgst-buffer.o +0 -0
- data/ext/gstreamer/rbgst-bus.c +92 -0
- data/ext/gstreamer/rbgst-bus.o +0 -0
- data/ext/gstreamer/rbgst-caps.c +441 -0
- data/ext/gstreamer/rbgst-caps.o +0 -0
- data/ext/gstreamer/rbgst-child-proxy.c +33 -0
- data/ext/gstreamer/rbgst-child-proxy.o +0 -0
- data/ext/gstreamer/rbgst-clock.c +108 -0
- data/ext/gstreamer/rbgst-clock.o +0 -0
- data/ext/gstreamer/rbgst-element-factory.c +255 -0
- data/ext/gstreamer/rbgst-element-factory.o +0 -0
- data/ext/gstreamer/rbgst-element.c +1053 -0
- data/ext/gstreamer/rbgst-element.o +0 -0
- data/ext/gstreamer/rbgst-event.c +351 -0
- data/ext/gstreamer/rbgst-event.o +0 -0
- data/ext/gstreamer/rbgst-ghost-pad.c +42 -0
- data/ext/gstreamer/rbgst-ghost-pad.o +0 -0
- data/ext/gstreamer/rbgst-index-factory.c +67 -0
- data/ext/gstreamer/rbgst-index-factory.o +0 -0
- data/ext/gstreamer/rbgst-message.c +784 -0
- data/ext/gstreamer/rbgst-message.o +0 -0
- data/ext/gstreamer/rbgst-mini-object.c +220 -0
- data/ext/gstreamer/rbgst-mini-object.o +0 -0
- data/ext/gstreamer/rbgst-object.c +81 -0
- data/ext/gstreamer/rbgst-object.o +0 -0
- data/ext/gstreamer/rbgst-pad-template.c +124 -0
- data/ext/gstreamer/rbgst-pad-template.o +0 -0
- data/ext/gstreamer/rbgst-pad.c +338 -0
- data/ext/gstreamer/rbgst-pad.o +0 -0
- data/ext/gstreamer/rbgst-pipeline.c +90 -0
- data/ext/gstreamer/rbgst-pipeline.o +0 -0
- data/ext/gstreamer/rbgst-plugin-feature.c +134 -0
- data/ext/gstreamer/rbgst-plugin-feature.o +0 -0
- data/ext/gstreamer/rbgst-plugin.c +164 -0
- data/ext/gstreamer/rbgst-plugin.o +0 -0
- data/ext/gstreamer/rbgst-private.c +89 -0
- data/ext/gstreamer/rbgst-private.h +37 -0
- data/ext/gstreamer/rbgst-private.o +0 -0
- data/ext/gstreamer/rbgst-query.c +289 -0
- data/ext/gstreamer/rbgst-query.o +0 -0
- data/ext/gstreamer/rbgst-seek.c +36 -0
- data/ext/gstreamer/rbgst-seek.o +0 -0
- data/ext/gstreamer/rbgst-static-caps.c +49 -0
- data/ext/gstreamer/rbgst-static-caps.o +0 -0
- data/ext/gstreamer/rbgst-static-pad-template.c +64 -0
- data/ext/gstreamer/rbgst-static-pad-template.o +0 -0
- data/ext/gstreamer/rbgst-structure.c +300 -0
- data/ext/gstreamer/rbgst-structure.o +0 -0
- data/ext/gstreamer/rbgst-system-clock.c +45 -0
- data/ext/gstreamer/rbgst-system-clock.o +0 -0
- data/ext/gstreamer/rbgst-type-find-factory.c +124 -0
- data/ext/gstreamer/rbgst-type-find-factory.o +0 -0
- data/ext/gstreamer/rbgst-value.c +517 -0
- data/ext/gstreamer/rbgst-value.o +0 -0
- data/ext/gstreamer/rbgst-x-overlay.c +132 -0
- data/ext/gstreamer/rbgst-x-overlay.o +0 -0
- data/ext/gstreamer/rbgst.c +279 -0
- data/ext/gstreamer/rbgst.h +197 -0
- data/ext/gstreamer/rbgst.o +0 -0
- data/ext/gstreamer/rbgstclockentry.c +268 -0
- data/ext/gstreamer/rbgstclockentry.o +0 -0
- data/ext/gstreamer/rbgstformat.c +159 -0
- data/ext/gstreamer/rbgstformat.o +0 -0
- data/ext/gstreamer/rbgstindex.c +314 -0
- data/ext/gstreamer/rbgstindex.o +0 -0
- data/ext/gstreamer/rbgstindexentry.c +96 -0
- data/ext/gstreamer/rbgstindexentry.o +0 -0
- data/ext/gstreamer/rbgstparse.c +66 -0
- data/ext/gstreamer/rbgstparse.o +0 -0
- data/ext/gstreamer/rbgstquerytype.c +159 -0
- data/ext/gstreamer/rbgstquerytype.o +0 -0
- data/ext/gstreamer/rbgstregistry.c +278 -0
- data/ext/gstreamer/rbgstregistry.o +0 -0
- data/ext/gstreamer/rbgsttag.c +111 -0
- data/ext/gstreamer/rbgsttag.o +0 -0
- data/ext/gstreamer/rbgsttagsetter.c +50 -0
- data/ext/gstreamer/rbgsttagsetter.o +0 -0
- data/ext/gstreamer/rbgstxml.c +189 -0
- data/ext/gstreamer/rbgstxml.o +0 -0
- data/ext/gstreamer/ruby-gstreamer.pc +3 -0
- data/extconf.rb +49 -0
- data/lib/gst.rb +19 -0
- data/sample/audio-player.rb +54 -0
- data/sample/gst-inspect.rb +417 -0
- data/sample/media-type.rb +55 -0
- data/sample/media-type2.rb +268 -0
- data/sample/ogg-audio-player.rb +54 -0
- data/sample/type-find.rb +46 -0
- data/sample/video-player.rb +57 -0
- data/sample/xml-player.rb +60 -0
- data/test/gst-test-utils.rb +18 -0
- data/test/run-test.rb +25 -0
- data/test/test_bin.rb +167 -0
- data/test/test_buffer.rb +174 -0
- data/test/test_caps.rb +24 -0
- data/test/test_clock.rb +7 -0
- data/test/test_element.rb +87 -0
- data/test/test_element_factory.rb +28 -0
- data/test/test_event.rb +10 -0
- data/test/test_index_factory.rb +7 -0
- data/test/test_message.rb +191 -0
- data/test/test_mini_object.rb +38 -0
- data/test/test_object.rb +10 -0
- data/test/test_pad.rb +68 -0
- data/test/test_plugin.rb +6 -0
- data/test/test_plugin_feature.rb +20 -0
- data/test/test_seek.rb +17 -0
- data/test/test_static_caps.rb +18 -0
- data/test/test_static_pad_template.rb +16 -0
- data/test/test_structure.rb +159 -0
- data/test/test_thread_handling.rb +58 -0
- data/test/test_type_find_factory.rb +8 -0
- data/test/test_value.rb +69 -0
- metadata +208 -0
|
Binary file
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (C) 2003-2005 Laurent Sansonetti <lrz@gnome.org>
|
|
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
|
+
/* Module: Gst::Tag
|
|
24
|
+
* Helper module to the tagging interface.
|
|
25
|
+
*/
|
|
26
|
+
|
|
27
|
+
/*
|
|
28
|
+
* Class method: exists?(tag)
|
|
29
|
+
* tag: the name of the tag.
|
|
30
|
+
*
|
|
31
|
+
* Checks if the given tag is already registered.
|
|
32
|
+
*
|
|
33
|
+
* Returns: true if the tag is registered, false otherwise.
|
|
34
|
+
*/
|
|
35
|
+
static VALUE
|
|
36
|
+
rb_gst_tag_exists (VALUE self, VALUE tag)
|
|
37
|
+
{
|
|
38
|
+
return CBOOL2RVAL (gst_tag_exists (RVAL2CSTR (tag)));
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/*
|
|
42
|
+
* Class method: fixed?(tag)
|
|
43
|
+
* tag: the name of the tag.
|
|
44
|
+
*
|
|
45
|
+
* Checks if the given tag is fixed. A fixed tag can only contain one value.
|
|
46
|
+
* Unfixed tags can contain lists of values.
|
|
47
|
+
*
|
|
48
|
+
* Returns: true if the tag is fixed, false otherwise.
|
|
49
|
+
*/
|
|
50
|
+
static VALUE
|
|
51
|
+
rb_gst_tag_fixed (VALUE self, VALUE tag)
|
|
52
|
+
{
|
|
53
|
+
return CBOOL2RVAL (gst_tag_is_fixed (RVAL2CSTR (tag)));
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/*
|
|
57
|
+
* Class method: get_nick(tag)
|
|
58
|
+
* tag: the name of the tag.
|
|
59
|
+
*
|
|
60
|
+
* Returns: the human-readable name of this tag.
|
|
61
|
+
*/
|
|
62
|
+
static VALUE
|
|
63
|
+
rb_gst_tag_get_nick (VALUE self, VALUE tag)
|
|
64
|
+
{
|
|
65
|
+
return CSTR2RVAL (gst_tag_get_nick (RVAL2CSTR (tag)));
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/*
|
|
69
|
+
* Class method: get_description(tag)
|
|
70
|
+
* tag: the name of the tag.
|
|
71
|
+
*
|
|
72
|
+
* Returns: the human-readable description of this tag.
|
|
73
|
+
*/
|
|
74
|
+
static VALUE
|
|
75
|
+
rb_gst_tag_get_description (VALUE self, VALUE tag)
|
|
76
|
+
{
|
|
77
|
+
return CSTR2RVAL (gst_tag_get_description (RVAL2CSTR (tag)));
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/*
|
|
81
|
+
* Class method: get_flag(tag)
|
|
82
|
+
* tag: the name of the tag.
|
|
83
|
+
*
|
|
84
|
+
* Gets the flag of the given tag.
|
|
85
|
+
*
|
|
86
|
+
* Returns: the flag of this tag (see Gst::Tag::Flag).
|
|
87
|
+
*/
|
|
88
|
+
static VALUE
|
|
89
|
+
rb_gst_tag_get_flag (VALUE self, VALUE tag)
|
|
90
|
+
{
|
|
91
|
+
return GFLAGS2RVAL (gst_tag_get_flag (RVAL2CSTR (tag)),
|
|
92
|
+
GST_TYPE_TAG_FLAG);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
void
|
|
96
|
+
Init_gst_tag (void)
|
|
97
|
+
{
|
|
98
|
+
VALUE m = rb_define_module_under (mGst, "Tag");
|
|
99
|
+
|
|
100
|
+
rb_define_module_function (m, "exists?", rb_gst_tag_exists, 1);
|
|
101
|
+
rb_define_module_function (m, "get_nick", rb_gst_tag_get_nick, 1);
|
|
102
|
+
rb_define_module_function (m, "get_description",
|
|
103
|
+
rb_gst_tag_get_description, 1);
|
|
104
|
+
rb_define_module_function (m, "get_flag", rb_gst_tag_get_flag, 1);
|
|
105
|
+
rb_define_module_function (m, "fixed?", rb_gst_tag_fixed, 1);
|
|
106
|
+
|
|
107
|
+
G_DEF_CLASS (GST_TYPE_TAG_FLAG, "Flag", m);
|
|
108
|
+
G_DEF_CONSTANTS (m, GST_TYPE_TAG_FLAG, "GST_TAG_");
|
|
109
|
+
G_DEF_CLASS (GST_TYPE_TAG_MERGE_MODE, "MergeMode", m);
|
|
110
|
+
G_DEF_CONSTANTS (m, GST_TYPE_TAG_MERGE_MODE, "GST_TAG_");
|
|
111
|
+
}
|
|
Binary file
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (C) 2003-2005 Laurent Sansonetti <lrz@gnome.org>
|
|
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
|
+
/* Class: Gst::TagSetter
|
|
24
|
+
* Element interface that allows the setting and retrieval of media metadata.
|
|
25
|
+
*/
|
|
26
|
+
|
|
27
|
+
/*
|
|
28
|
+
* Method: merge(structure, merge_mode)
|
|
29
|
+
* structure: a Ruby hash representing the tag list of merge from.
|
|
30
|
+
* merge_mode: the mode to merge with (see Gst::Tag::MergeMode).
|
|
31
|
+
*
|
|
32
|
+
* Merges the given tag list in the setter's list using the given mode.
|
|
33
|
+
*
|
|
34
|
+
* Returns: self.
|
|
35
|
+
*/
|
|
36
|
+
static VALUE
|
|
37
|
+
rb_gst_tag_setter_merge (VALUE self, VALUE structure, VALUE merge_mode)
|
|
38
|
+
{
|
|
39
|
+
gst_tag_setter_merge_tags(RGST_TAG_SETTER(self),
|
|
40
|
+
RVAL2GST_STRUCT(structure),
|
|
41
|
+
RVAL2GENUM(merge_mode, GST_TYPE_TAG_MERGE_MODE));
|
|
42
|
+
return self;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
void
|
|
46
|
+
Init_gst_tag_setter (void)
|
|
47
|
+
{
|
|
48
|
+
VALUE c = G_DEF_INTERFACE (GST_TYPE_TAG_SETTER, "TagSetter", mGst);
|
|
49
|
+
rb_define_method (c, "merge", rb_gst_tag_setter_merge, 2);
|
|
50
|
+
}
|
|
Binary file
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (C) 2003, 2004 Laurent Sansonetti <lrz@gnome.org>
|
|
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
|
+
/* Class: Gst::XML
|
|
24
|
+
* Convert Gst::Element objects into an XML presentation.
|
|
25
|
+
*/
|
|
26
|
+
|
|
27
|
+
/*
|
|
28
|
+
* Class method: new
|
|
29
|
+
*
|
|
30
|
+
* Creates a new Gst::XML parser object.
|
|
31
|
+
*
|
|
32
|
+
* Returns: a newly created Gst::XML object.
|
|
33
|
+
*/
|
|
34
|
+
static VALUE
|
|
35
|
+
rb_gst_xml_new (VALUE self)
|
|
36
|
+
{
|
|
37
|
+
GstXML *xml = gst_xml_new ();
|
|
38
|
+
if (xml != NULL)
|
|
39
|
+
G_INITIALIZE (self, xml);
|
|
40
|
+
return Qnil;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/*
|
|
44
|
+
* Class method: write_file(element, filename)
|
|
45
|
+
* element: a Gst::Element.
|
|
46
|
+
* filename: a file name.
|
|
47
|
+
*
|
|
48
|
+
* Converts the given element into XML and writes the formatted XML
|
|
49
|
+
* to the specified file name.
|
|
50
|
+
*
|
|
51
|
+
* Returns: true on success, false on failure.
|
|
52
|
+
*/
|
|
53
|
+
static VALUE
|
|
54
|
+
rb_gst_xml_write_file (VALUE self, VALUE element, VALUE filename)
|
|
55
|
+
{
|
|
56
|
+
FILE *file = fopen (RVAL2CSTR (filename), "w");
|
|
57
|
+
gboolean ret = FALSE;
|
|
58
|
+
if (file != NULL) {
|
|
59
|
+
ret = gst_xml_write_file (RGST_ELEMENT (element), file) != -1;
|
|
60
|
+
fclose (file);
|
|
61
|
+
}
|
|
62
|
+
return CBOOL2RVAL (ret);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/*
|
|
66
|
+
* Method: parse_file(filename, rootname=nil)
|
|
67
|
+
* filename: a file name.
|
|
68
|
+
* rootname: a root name (optional).
|
|
69
|
+
*
|
|
70
|
+
* Fills the Gst::XML object with the corresponding elements from
|
|
71
|
+
* the XML file name. Optionally it will only build the element
|
|
72
|
+
* from the element node root (if it is not nil).
|
|
73
|
+
*
|
|
74
|
+
* This feature is useful if you only want to build a specific
|
|
75
|
+
* element from an XML file but not the pipeline it is embedded in.
|
|
76
|
+
*
|
|
77
|
+
* Pass "-" as file name to read from stdin. You can also pass a
|
|
78
|
+
* URI of any format that libxml supports, including http.
|
|
79
|
+
*
|
|
80
|
+
* Returns: true on success, false on failure.
|
|
81
|
+
*/
|
|
82
|
+
static VALUE
|
|
83
|
+
rb_gst_xml_parse_file (int argc, VALUE *argv, VALUE self)
|
|
84
|
+
{
|
|
85
|
+
VALUE fname, rootname;
|
|
86
|
+
rb_scan_args (argc, argv, "11", &fname, &rootname);
|
|
87
|
+
return CBOOL2RVAL (gst_xml_parse_file (RGST_XML (self),
|
|
88
|
+
(const guchar*) RVAL2CSTR (fname),
|
|
89
|
+
(const guchar*)(NIL_P (rootname)
|
|
90
|
+
? NULL
|
|
91
|
+
: RVAL2CSTR (rootname))));
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/*
|
|
95
|
+
* Method: parse_memory(string, rootname=nil)
|
|
96
|
+
* string: an XML description inside a string.
|
|
97
|
+
* rootname: a root name (optional).
|
|
98
|
+
*
|
|
99
|
+
* Basically the same as Gst::XML#parse_file except that this method will
|
|
100
|
+
* take the XML directly from the memory.
|
|
101
|
+
*
|
|
102
|
+
* Returns: true on success, false on failure.
|
|
103
|
+
*/
|
|
104
|
+
static VALUE
|
|
105
|
+
rb_gst_xml_parse_memory (int argc, VALUE *argv, VALUE self)
|
|
106
|
+
{
|
|
107
|
+
VALUE memory, rootname;
|
|
108
|
+
gchar *cstr;
|
|
109
|
+
|
|
110
|
+
rb_scan_args (argc, argv, "11", &memory, &rootname);
|
|
111
|
+
cstr = RVAL2CSTR (memory);
|
|
112
|
+
return CBOOL2RVAL (gst_xml_parse_memory (RGST_XML (self),
|
|
113
|
+
(guchar*)cstr,
|
|
114
|
+
strlen (cstr),
|
|
115
|
+
(const gchar*)(NIL_P (rootname)
|
|
116
|
+
? NULL
|
|
117
|
+
: RVAL2CSTR (rootname))));
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/*
|
|
121
|
+
* Method: get_element(element_name)
|
|
122
|
+
* element_name: the name of an element.
|
|
123
|
+
*
|
|
124
|
+
* This method is used to get a reference to the Gst::Element
|
|
125
|
+
* corresponding to name in the pipeline description. You would use
|
|
126
|
+
* this if you have to do anything to the element after loading.
|
|
127
|
+
*
|
|
128
|
+
* Returns: a reference to a Gst::Element object if found, otherwise
|
|
129
|
+
* returns nil.
|
|
130
|
+
*/
|
|
131
|
+
static VALUE
|
|
132
|
+
rb_gst_xml_get_element (VALUE self, VALUE element_name)
|
|
133
|
+
{
|
|
134
|
+
GstElement *element = gst_xml_get_element (RGST_XML (self),
|
|
135
|
+
(const guchar*)RVAL2CSTR (element_name));
|
|
136
|
+
return element != NULL
|
|
137
|
+
? RGST_ELEMENT_NEW (element)
|
|
138
|
+
: Qnil;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/*
|
|
142
|
+
* Method: topelements
|
|
143
|
+
*
|
|
144
|
+
* Retrieves a list of all toplevel elements.
|
|
145
|
+
*
|
|
146
|
+
* Returns: an array of Gst::Element objects.
|
|
147
|
+
*/
|
|
148
|
+
static VALUE
|
|
149
|
+
rb_gst_xml_get_topelements (VALUE self)
|
|
150
|
+
{
|
|
151
|
+
GList *list;
|
|
152
|
+
VALUE arr;
|
|
153
|
+
|
|
154
|
+
arr = rb_ary_new ();
|
|
155
|
+
for (list = gst_xml_get_topelements (RGST_XML (self));
|
|
156
|
+
list != NULL;
|
|
157
|
+
list = g_list_next (list))
|
|
158
|
+
rb_ary_push (arr, RGST_ELEMENT_NEW (list->data));
|
|
159
|
+
return arr;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/*
|
|
163
|
+
* Method: each_topelement { |element| ... }
|
|
164
|
+
*
|
|
165
|
+
* Calls the block for each topelement, passing a reference to
|
|
166
|
+
* a Gst::Element object as parameter.
|
|
167
|
+
*
|
|
168
|
+
* Returns: always nil.
|
|
169
|
+
*/
|
|
170
|
+
static VALUE
|
|
171
|
+
rb_gst_xml_each_topelement (VALUE self)
|
|
172
|
+
{
|
|
173
|
+
return rb_ary_yield (rb_gst_xml_get_topelements (self));
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
void
|
|
177
|
+
Init_gst_xml (void)
|
|
178
|
+
{
|
|
179
|
+
VALUE c = G_DEF_CLASS (GST_TYPE_XML, "XML", mGst);
|
|
180
|
+
|
|
181
|
+
rb_define_singleton_method (c, "write_file", rb_gst_xml_write_file, 2);
|
|
182
|
+
|
|
183
|
+
rb_define_method (c, "initialize", rb_gst_xml_new, 0);
|
|
184
|
+
rb_define_method (c, "parse_file", rb_gst_xml_parse_file, -1);
|
|
185
|
+
rb_define_method (c, "parse_memory", rb_gst_xml_parse_memory, -1);
|
|
186
|
+
rb_define_method (c, "get_element", rb_gst_xml_get_element, 1);
|
|
187
|
+
rb_define_method (c, "topelements", rb_gst_xml_get_topelements, 0);
|
|
188
|
+
rb_define_method (c, "each_topelement", rb_gst_xml_each_topelement, 0);
|
|
189
|
+
}
|
|
Binary file
|
data/extconf.rb
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
require 'pathname'
|
|
4
|
+
require 'mkmf'
|
|
5
|
+
require 'rbconfig'
|
|
6
|
+
require 'fileutils'
|
|
7
|
+
|
|
8
|
+
package = "gstreamer"
|
|
9
|
+
|
|
10
|
+
base_dir = Pathname(__FILE__).dirname.expand_path
|
|
11
|
+
ext_dir = base_dir + "ext" + package
|
|
12
|
+
mkmf_gnome2_dir = base_dir + 'lib'
|
|
13
|
+
|
|
14
|
+
ruby = File.join(RbConfig::CONFIG['bindir'],
|
|
15
|
+
RbConfig::CONFIG['ruby_install_name'] +
|
|
16
|
+
RbConfig::CONFIG["EXEEXT"])
|
|
17
|
+
|
|
18
|
+
build_dir = Pathname("ext") + package
|
|
19
|
+
FileUtils.mkdir_p(build_dir.to_s) unless build_dir.exist?
|
|
20
|
+
extconf_rb_path = ext_dir + "extconf.rb"
|
|
21
|
+
system(ruby, "-C", build_dir.to_s, extconf_rb_path.to_s, *ARGV) || exit(false)
|
|
22
|
+
|
|
23
|
+
create_makefile(package)
|
|
24
|
+
FileUtils.mv("Makefile", "Makefile.lib")
|
|
25
|
+
|
|
26
|
+
File.open("Makefile", "w") do |makefile|
|
|
27
|
+
makefile.puts(<<-EOM)
|
|
28
|
+
all:
|
|
29
|
+
(cd ext/#{package} && $(MAKE))
|
|
30
|
+
$(MAKE) -f Makefile.lib
|
|
31
|
+
|
|
32
|
+
install:
|
|
33
|
+
(cd ext/#{package} && $(MAKE) install)
|
|
34
|
+
$(MAKE) -f Makefile.lib install
|
|
35
|
+
|
|
36
|
+
site-install:
|
|
37
|
+
(cd ext/#{package} && $(MAKE) site-install)
|
|
38
|
+
$(MAKE) -f Makefile.lib site-install
|
|
39
|
+
|
|
40
|
+
clean:
|
|
41
|
+
(cd ext/#{package} && $(MAKE) clean)
|
|
42
|
+
$(MAKE) -f Makefile.lib clean
|
|
43
|
+
|
|
44
|
+
distclean:
|
|
45
|
+
(cd ext/#{package} && $(MAKE) distclean)
|
|
46
|
+
$(MAKE) -f Makefile.lib distclean
|
|
47
|
+
@rm -f Makefile.lib
|
|
48
|
+
EOM
|
|
49
|
+
end
|
data/lib/gst.rb
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
require 'rational'
|
|
2
|
+
require 'glib2'
|
|
3
|
+
require 'gst.so'
|
|
4
|
+
|
|
5
|
+
Gst.init
|
|
6
|
+
|
|
7
|
+
module Gst
|
|
8
|
+
class Plugin
|
|
9
|
+
def each_feature(&block)
|
|
10
|
+
Registry.default.each_feature(name, &block)
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
class Structure
|
|
15
|
+
def inspect
|
|
16
|
+
super.gsub(/>\z/, ": #{to_s}>")
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
require 'gst'
|
|
4
|
+
|
|
5
|
+
if ARGV.size != 1
|
|
6
|
+
puts "Usage: #{$0} audio-file"
|
|
7
|
+
exit
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
file = ARGV.first
|
|
11
|
+
|
|
12
|
+
pipeline = Gst::Pipeline.new
|
|
13
|
+
|
|
14
|
+
file_src = Gst::ElementFactory.make("filesrc")
|
|
15
|
+
file_src.location = file
|
|
16
|
+
|
|
17
|
+
decoder = Gst::ElementFactory.make("decodebin")
|
|
18
|
+
|
|
19
|
+
audio_convert = Gst::ElementFactory.make("audioconvert")
|
|
20
|
+
|
|
21
|
+
audio_resample = Gst::ElementFactory.make("audioresample")
|
|
22
|
+
|
|
23
|
+
audio_sink = Gst::ElementFactory.make("autoaudiosink")
|
|
24
|
+
|
|
25
|
+
pipeline.add(file_src, decoder, audio_convert, audio_resample, audio_sink)
|
|
26
|
+
file_src >> decoder
|
|
27
|
+
audio_convert >> audio_resample >> audio_sink
|
|
28
|
+
|
|
29
|
+
decoder.signal_connect("new-decoded-pad") do |element, pad|
|
|
30
|
+
sink_pad = audio_convert["sink"]
|
|
31
|
+
pad.link(sink_pad)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
loop = GLib::MainLoop.new(nil, false)
|
|
35
|
+
|
|
36
|
+
bus = pipeline.bus
|
|
37
|
+
bus.add_watch do |bus, message|
|
|
38
|
+
case message.type
|
|
39
|
+
when Gst::Message::EOS
|
|
40
|
+
loop.quit
|
|
41
|
+
when Gst::Message::ERROR
|
|
42
|
+
p message.parse
|
|
43
|
+
loop.quit
|
|
44
|
+
end
|
|
45
|
+
true
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
pipeline.play
|
|
49
|
+
begin
|
|
50
|
+
loop.run
|
|
51
|
+
rescue Interrupt
|
|
52
|
+
ensure
|
|
53
|
+
pipeline.stop
|
|
54
|
+
end
|