gstreamer 2.0.2 → 2.0.3
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.
- checksums.yaml +7 -0
- data/Rakefile +81 -25
- data/ext/gstreamer/rbgst-element-factory.c +61 -0
- data/ext/gstreamer/rbgst.c +50 -5
- data/ext/gstreamer/rbgst.h +26 -0
- data/lib/gst.rb +51 -5
- data/lib/gst/{base_loader.rb → base-loader.rb} +0 -0
- data/lib/gst/caps.rb +25 -0
- data/lib/gst/{controller_loader.rb → controller-loader.rb} +0 -0
- data/lib/gst/element-factory.rb +35 -0
- data/lib/gst/element.rb +5 -0
- data/lib/gst/plugin-feature.rb +24 -0
- data/lib/gst/registry.rb +30 -0
- data/lib/gst/structure.rb +28 -0
- data/sample/gst-inspect.rb +478 -0
- metadata +22 -20
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: e5dae1b600eb1d4da52276edffbab5f5d966e1ed
|
|
4
|
+
data.tar.gz: 469806a880b450c82d5e264998a19539e7f934e1
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 79720374491dd9b9d8cb060bef7fe151bdb35ed26aa1e5ad3b7d83496d73b1a4a8dfe56975570085359738c233e23f105688de9e37e767234ad2ce5ace44f248
|
|
7
|
+
data.tar.gz: ac541135ebc128862565a6ee50ca106f4150c66526bbee3b490f194908cebf6fe931c27fa638a2d41fd6c7a470a9e544c27e7e5cc68716e00b942f0ea19f303f
|
data/Rakefile
CHANGED
|
@@ -7,8 +7,8 @@ package = GNOME2Package.new do |_package|
|
|
|
7
7
|
_package.summary = "Ruby/GStreamer is a Ruby binding for GStreamer."
|
|
8
8
|
_package.description = "Ruby/GStreamer is a Ruby binding for GStreamer."
|
|
9
9
|
_package.dependency.gem.runtime = ["glib2", "gobject-introspection"]
|
|
10
|
-
_package.win32.packages = [
|
|
11
|
-
_package.win32.dependencies = [
|
|
10
|
+
_package.win32.packages = []
|
|
11
|
+
_package.win32.dependencies = []
|
|
12
12
|
_package.win32.build_dependencies = [
|
|
13
13
|
"glib2", "atk", "pango", "gdk_pixbuf2", "gtk2", "gobject-introspection",
|
|
14
14
|
]
|
|
@@ -17,22 +17,61 @@ package = GNOME2Package.new do |_package|
|
|
|
17
17
|
sf_net_download_url_base = "http://downloads.sourceforge.net/project"
|
|
18
18
|
libmad_version = "0.15.1b"
|
|
19
19
|
_package.external_packages = [
|
|
20
|
+
{
|
|
21
|
+
:name => "libjpeg",
|
|
22
|
+
:base_name => "jpeg-9",
|
|
23
|
+
:archive_base_name => "jpegsrc.v9.tar.gz",
|
|
24
|
+
:download_base_url => "http://www.ijg.org/files",
|
|
25
|
+
:label => "libjpeg",
|
|
26
|
+
:windows => {
|
|
27
|
+
:configure_args => [],
|
|
28
|
+
:built_file => "bin/libjpeg-9.dll",
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
:name => "sqlite-autoconf",
|
|
33
|
+
:download_base_url => "http://www.sqlite.org/2013",
|
|
34
|
+
:label => "SQLite",
|
|
35
|
+
:version => "3080200",
|
|
36
|
+
:compression_method => "gz",
|
|
37
|
+
:windows => {
|
|
38
|
+
:configure_args => [],
|
|
39
|
+
:built_file => "bin/libsqlite3-0.dll",
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
:name => "libsoup",
|
|
44
|
+
:download_site => :gnome,
|
|
45
|
+
:label => "libsoup",
|
|
46
|
+
:version => "2.45.3",
|
|
47
|
+
:compression_method => "xz",
|
|
48
|
+
:windows => {
|
|
49
|
+
:configure_args => [
|
|
50
|
+
"--enable-introspection",
|
|
51
|
+
"--without-apache-httpd",
|
|
52
|
+
],
|
|
53
|
+
:build_concurrently => false,
|
|
54
|
+
:built_file => "bin/libsoup-2.4-1.dll",
|
|
55
|
+
},
|
|
56
|
+
},
|
|
20
57
|
{
|
|
21
58
|
:name => "libogg",
|
|
22
59
|
:download_base_url => "#{xiph_download_url_base}/ogg",
|
|
23
60
|
:label => "Ogg",
|
|
24
|
-
:version => "1.3.
|
|
61
|
+
:version => "1.3.1",
|
|
25
62
|
:windows => {
|
|
26
63
|
:configure_args => [],
|
|
64
|
+
:built_file => "bin/libogg-0.dll",
|
|
27
65
|
},
|
|
28
66
|
},
|
|
29
67
|
{
|
|
30
68
|
:name => "libvorbis",
|
|
31
69
|
:download_base_url => "#{xiph_download_url_base}/vorbis",
|
|
32
70
|
:label => "Vorbis",
|
|
33
|
-
:version => "1.3.
|
|
71
|
+
:version => "1.3.3",
|
|
34
72
|
:windows => {
|
|
35
73
|
:configure_args => [],
|
|
74
|
+
:built_file => "bin/libvorbis-0.dll",
|
|
36
75
|
},
|
|
37
76
|
},
|
|
38
77
|
{
|
|
@@ -45,6 +84,10 @@ package = GNOME2Package.new do |_package|
|
|
|
45
84
|
"--disable-examples"
|
|
46
85
|
],
|
|
47
86
|
:build_concurrently => false,
|
|
87
|
+
:patches => [
|
|
88
|
+
"libtheora-1.1.1-use-lf-in-def.diff",
|
|
89
|
+
],
|
|
90
|
+
:built_file => "bin/libtheora-0.dll",
|
|
48
91
|
},
|
|
49
92
|
},
|
|
50
93
|
# {
|
|
@@ -62,14 +105,11 @@ package = GNOME2Package.new do |_package|
|
|
|
62
105
|
:name => "flac",
|
|
63
106
|
:download_base_url => "#{xiph_download_url_base}/flac",
|
|
64
107
|
:label => "FLAC",
|
|
65
|
-
:version => "1.
|
|
108
|
+
:version => "1.3.0",
|
|
109
|
+
:compression_method => "xz",
|
|
66
110
|
:windows => {
|
|
67
111
|
:configure_args => ["--disable-cpplibs"],
|
|
68
|
-
:
|
|
69
|
-
:patches => [
|
|
70
|
-
"flac-1.2.1-fix-mingw-build.diff",
|
|
71
|
-
# "flac-1.2.1-fix-doc-install.diff",
|
|
72
|
-
],
|
|
112
|
+
:built_file => "bin/libFLAC-8.dll",
|
|
73
113
|
},
|
|
74
114
|
},
|
|
75
115
|
{
|
|
@@ -79,13 +119,14 @@ package = GNOME2Package.new do |_package|
|
|
|
79
119
|
:version => "1.2rc1",
|
|
80
120
|
:windows => {
|
|
81
121
|
:configure_args => [],
|
|
122
|
+
:built_file => "bin/libspeex-1.dll",
|
|
82
123
|
},
|
|
83
124
|
},
|
|
84
125
|
{
|
|
85
126
|
:name => "gstreamer",
|
|
86
127
|
:download_base_url => "#{freedesktop_download_url_base}/gstreamer",
|
|
87
128
|
:label => "GStreamer",
|
|
88
|
-
:version => "1.
|
|
129
|
+
:version => "1.2.1",
|
|
89
130
|
:compression_method => "xz",
|
|
90
131
|
:windows => {
|
|
91
132
|
:configure_args => [
|
|
@@ -93,48 +134,55 @@ package = GNOME2Package.new do |_package|
|
|
|
93
134
|
"--enable-introspection",
|
|
94
135
|
],
|
|
95
136
|
:build_concurrently => false,
|
|
137
|
+
:built_file => "bin/libgstreamer-1.0-0.dll",
|
|
96
138
|
},
|
|
97
139
|
},
|
|
98
140
|
{
|
|
99
141
|
:name => "gst-plugins-base",
|
|
100
142
|
:download_base_url => "#{freedesktop_download_url_base}/gst-plugins-base",
|
|
101
143
|
:label => "GStreamer plugins (base)",
|
|
102
|
-
:version => "1.
|
|
144
|
+
:version => "1.2.1",
|
|
103
145
|
:compression_method => "xz",
|
|
104
146
|
:windows => {
|
|
105
147
|
:configure_args => [
|
|
106
148
|
"--enable-introspection",
|
|
107
149
|
],
|
|
108
150
|
:build_concurrently => false,
|
|
151
|
+
:built_file => "lib/gstreamer-1.0/libgstgio.dll",
|
|
109
152
|
},
|
|
110
153
|
},
|
|
111
154
|
{
|
|
112
155
|
:name => "gst-plugins-good",
|
|
113
156
|
:download_base_url => "#{freedesktop_download_url_base}/gst-plugins-good",
|
|
114
157
|
:label => "GStreamer plugins (good)",
|
|
115
|
-
:version => "1.
|
|
158
|
+
:version => "1.2.1",
|
|
116
159
|
:compression_method => "xz",
|
|
117
160
|
:windows => {
|
|
118
161
|
:configure_args => [
|
|
119
162
|
"--disable-shout2",
|
|
120
163
|
],
|
|
164
|
+
:built_file => "lib/gstreamer-1.0/libgstcairo.dll",
|
|
121
165
|
},
|
|
122
166
|
},
|
|
123
167
|
{
|
|
124
168
|
:name => "gst-plugins-bad",
|
|
125
169
|
:download_base_url => "#{freedesktop_download_url_base}/gst-plugins-bad",
|
|
126
170
|
:label => "GStreamer plugins (bad)",
|
|
127
|
-
:version => "1.
|
|
171
|
+
:version => "1.2.1",
|
|
128
172
|
:compression_method => "xz",
|
|
129
173
|
:windows => {
|
|
130
174
|
:configure_args => ["--disable-librfb"],
|
|
175
|
+
:cc_args => [
|
|
176
|
+
"-std=c99",
|
|
177
|
+
],
|
|
178
|
+
:built_file => "lib/gstreamer-1.0/libgstfaac.dll",
|
|
131
179
|
},
|
|
132
180
|
},
|
|
133
181
|
# {
|
|
134
182
|
# :name => "gst-plugins-ugly",
|
|
135
183
|
# :download_base_url => "#{freedesktop_download_url_base}/gst-plugins-ugly",
|
|
136
184
|
# :label => "GStreamer plugins (ugly)",
|
|
137
|
-
# :version => "1.
|
|
185
|
+
# :version => "1.2.1",
|
|
138
186
|
# :compression_method => "xz",
|
|
139
187
|
# :windows => {
|
|
140
188
|
# :configure_args => [],
|
|
@@ -144,23 +192,31 @@ package = GNOME2Package.new do |_package|
|
|
|
144
192
|
:name => "gst-libav",
|
|
145
193
|
:download_base_url => "#{freedesktop_download_url_base}/gst-libav",
|
|
146
194
|
:label => "GStreamer libav",
|
|
147
|
-
:version => "1.
|
|
195
|
+
:version => "1.2.1",
|
|
148
196
|
:compression_method => "xz",
|
|
149
197
|
:windows => {
|
|
150
|
-
:configure_args => [
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
198
|
+
:configure_args => [
|
|
199
|
+
"--with-libav-extra-configure=" +
|
|
200
|
+
"--cross-prefix=#{_package.win32.build_host}- " +
|
|
201
|
+
"--target-os=mingw32 " +
|
|
202
|
+
"--arch=i686 " +
|
|
203
|
+
"--pkg-config=pkg-config " +
|
|
204
|
+
"--disable-gpl",
|
|
205
|
+
],
|
|
206
|
+
:built_file => "lib/gstreamer-1.0/libgstlibav.dll",
|
|
156
207
|
},
|
|
157
208
|
:bundled_packages => [
|
|
158
209
|
{
|
|
159
210
|
:name => "libav",
|
|
160
211
|
:path => "gst-libs/ext/libav",
|
|
161
|
-
:license_files => [
|
|
162
|
-
|
|
163
|
-
|
|
212
|
+
:license_files => [
|
|
213
|
+
"LICENSE",
|
|
214
|
+
"CREDITS",
|
|
215
|
+
"COPYING.GPLv2",
|
|
216
|
+
"COPYING.GPLv3",
|
|
217
|
+
"COPYING.LGPLv2.1",
|
|
218
|
+
"COPYING.LGPLv3",
|
|
219
|
+
],
|
|
164
220
|
}
|
|
165
221
|
],
|
|
166
222
|
},
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
|
|
2
|
+
/*
|
|
3
|
+
* Copyright (C) 2013 Ruby-GNOME2 Project Team
|
|
4
|
+
*
|
|
5
|
+
* This library is free software; you can redistribute it and/or
|
|
6
|
+
* modify it under the terms of the GNU Lesser General Public
|
|
7
|
+
* License as published by the Free Software Foundation; either
|
|
8
|
+
* version 2.1 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
|
+
* Lesser General Public License for more details.
|
|
14
|
+
*
|
|
15
|
+
* You should have received a copy of the GNU Lesser General Public
|
|
16
|
+
* License along with this library; if not, write to the Free Software
|
|
17
|
+
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
|
18
|
+
* MA 02110-1301 USA
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
#include "rbgst.h"
|
|
22
|
+
|
|
23
|
+
#define RG_TARGET_NAMESPACE cElementFactory
|
|
24
|
+
|
|
25
|
+
#define SELF(object) (GST_ELEMENT_FACTORY(RVAL2GOBJ(object)))
|
|
26
|
+
|
|
27
|
+
static VALUE cStaticPadTemplate;
|
|
28
|
+
|
|
29
|
+
static VALUE
|
|
30
|
+
rg_static_pad_templates(VALUE self)
|
|
31
|
+
{
|
|
32
|
+
GstElementFactory *factory = SELF(self);
|
|
33
|
+
const GList *templates;
|
|
34
|
+
VALUE rb_templates;
|
|
35
|
+
|
|
36
|
+
rb_templates = rb_ary_new();
|
|
37
|
+
templates = gst_element_factory_get_static_pad_templates(factory);
|
|
38
|
+
for (; templates; templates = g_list_next(templates)) {
|
|
39
|
+
GstStaticPadTemplate *template = templates->data;
|
|
40
|
+
VALUE rb_template;
|
|
41
|
+
rb_template = rb_funcall(cStaticPadTemplate, rb_intern("new"), 0);
|
|
42
|
+
memcpy(DATA_PTR(rb_template), template, sizeof(GstStaticPadTemplate));
|
|
43
|
+
rb_ary_push(rb_templates, rb_template);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
return rb_templates;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
void
|
|
50
|
+
rb_gst_init_element_factory(void)
|
|
51
|
+
{
|
|
52
|
+
VALUE mGst;
|
|
53
|
+
VALUE RG_TARGET_NAMESPACE;
|
|
54
|
+
|
|
55
|
+
mGst = rb_const_get(rb_cObject, rb_intern("Gst"));
|
|
56
|
+
RG_TARGET_NAMESPACE = rb_const_get(mGst, rb_intern("ElementFactory"));
|
|
57
|
+
cStaticPadTemplate = rb_const_get(mGst, rb_intern("StaticPadTemplate"));
|
|
58
|
+
|
|
59
|
+
rb_remove_method(RG_TARGET_NAMESPACE, "static_pad_templates");
|
|
60
|
+
RG_DEF_METHOD(static_pad_templates, 0);
|
|
61
|
+
}
|
data/ext/gstreamer/rbgst.c
CHANGED
|
@@ -18,11 +18,7 @@
|
|
|
18
18
|
* MA 02110-1301 USA
|
|
19
19
|
*/
|
|
20
20
|
|
|
21
|
-
#include
|
|
22
|
-
|
|
23
|
-
#include <rb-gobject-introspection.h>
|
|
24
|
-
|
|
25
|
-
extern void Init_gstreamer (void);
|
|
21
|
+
#include "rbgst.h"
|
|
26
22
|
|
|
27
23
|
static gboolean
|
|
28
24
|
name_equal(GIArgInfo *info, const gchar *target_name)
|
|
@@ -130,10 +126,59 @@ rg_gst_tag_foreach_func_callback_finder(GIArgInfo *info)
|
|
|
130
126
|
return rg_gst_tag_foreach_func_callback;
|
|
131
127
|
}
|
|
132
128
|
|
|
129
|
+
static void
|
|
130
|
+
rg_gst_value_list_r2g(VALUE from, GValue *to)
|
|
131
|
+
{
|
|
132
|
+
int i, n;
|
|
133
|
+
|
|
134
|
+
if (NIL_P(from)) {
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
from = rbg_to_array(from);
|
|
139
|
+
n = RARRAY_LEN(from);
|
|
140
|
+
for (i = 0; i < n; i++) {
|
|
141
|
+
VALUE rb_element;
|
|
142
|
+
const RGObjClassInfo *class_info;
|
|
143
|
+
GValue element = G_VALUE_INIT;
|
|
144
|
+
|
|
145
|
+
rb_element = rb_ary_entry(from, i);
|
|
146
|
+
class_info = RVAL2CINFO(rb_element);
|
|
147
|
+
g_value_init(&element, class_info->gtype);
|
|
148
|
+
rbgobj_rvalue_to_gvalue(rb_element, &element);
|
|
149
|
+
gst_value_list_append_value(to, &element);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
static VALUE
|
|
154
|
+
rg_gst_value_list_g2r(const GValue *from)
|
|
155
|
+
{
|
|
156
|
+
guint i, n;
|
|
157
|
+
VALUE rb_values;
|
|
158
|
+
|
|
159
|
+
n = gst_value_list_get_size(from);
|
|
160
|
+
rb_values = rb_ary_new();
|
|
161
|
+
for (i = 0; i < n; i++) {
|
|
162
|
+
const GValue *value;
|
|
163
|
+
VALUE rb_value;
|
|
164
|
+
|
|
165
|
+
value = gst_value_list_get_value(from, i);
|
|
166
|
+
rb_value = rbgobj_gvalue_to_rvalue(value);
|
|
167
|
+
rb_ary_push(rb_values, rb_value);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
return rb_values;
|
|
171
|
+
}
|
|
172
|
+
|
|
133
173
|
void
|
|
134
174
|
Init_gstreamer (void)
|
|
135
175
|
{
|
|
136
176
|
rb_gi_callback_register_finder(rg_gst_bus_func_callback_finder);
|
|
137
177
|
rb_gi_callback_register_finder(rg_gst_bus_sync_handler_callback_finder);
|
|
138
178
|
rb_gi_callback_register_finder(rg_gst_tag_foreach_func_callback_finder);
|
|
179
|
+
|
|
180
|
+
rbgobj_register_r2g_func(GST_TYPE_LIST, rg_gst_value_list_r2g);
|
|
181
|
+
rbgobj_register_g2r_func(GST_TYPE_LIST, rg_gst_value_list_g2r);
|
|
182
|
+
|
|
183
|
+
rb_gst_init_element_factory();
|
|
139
184
|
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
|
|
2
|
+
/*
|
|
3
|
+
* Copyright (C) 2013 Ruby-GNOME2 Project Team
|
|
4
|
+
*
|
|
5
|
+
* This library is free software; you can redistribute it and/or
|
|
6
|
+
* modify it under the terms of the GNU Lesser General Public
|
|
7
|
+
* License as published by the Free Software Foundation; either
|
|
8
|
+
* version 2.1 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
|
+
* Lesser General Public License for more details.
|
|
14
|
+
*
|
|
15
|
+
* You should have received a copy of the GNU Lesser General Public
|
|
16
|
+
* License along with this library; if not, write to the Free Software
|
|
17
|
+
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
|
18
|
+
* MA 02110-1301 USA
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
#include <gst/gst.h>
|
|
22
|
+
|
|
23
|
+
#include <rb-gobject-introspection.h>
|
|
24
|
+
|
|
25
|
+
extern void Init_gstreamer (void);
|
|
26
|
+
G_GNUC_INTERNAL extern void rb_gst_init_element_factory (void);
|
data/lib/gst.rb
CHANGED
|
@@ -14,6 +14,8 @@
|
|
|
14
14
|
# License along with this library; if not, write to the Free Software
|
|
15
15
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
16
16
|
|
|
17
|
+
require "English"
|
|
18
|
+
|
|
17
19
|
require "gobject-introspection"
|
|
18
20
|
|
|
19
21
|
base_dir = Pathname.new(__FILE__).dirname.dirname.expand_path
|
|
@@ -43,29 +45,44 @@ module Gst
|
|
|
43
45
|
end
|
|
44
46
|
end
|
|
45
47
|
|
|
48
|
+
def method_missing(name, *args, &block)
|
|
49
|
+
init()
|
|
50
|
+
if respond_to?(name)
|
|
51
|
+
__send__(name, *args, &block)
|
|
52
|
+
else
|
|
53
|
+
super
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
46
57
|
def init(*argv)
|
|
47
58
|
loader = Loader.new(self, argv)
|
|
48
59
|
loader.load("Gst")
|
|
49
60
|
require "gst/bin"
|
|
50
61
|
require "gst/bus"
|
|
62
|
+
require "gst/caps"
|
|
51
63
|
require "gst/element"
|
|
64
|
+
require "gst/element-factory"
|
|
65
|
+
require "gst/plugin-feature"
|
|
66
|
+
require "gst/registry"
|
|
67
|
+
require "gst/structure"
|
|
52
68
|
init_base
|
|
53
69
|
init_controller
|
|
54
70
|
class << self
|
|
55
71
|
remove_method(:init)
|
|
56
72
|
remove_method(:const_missing)
|
|
73
|
+
remove_method(:method_missing)
|
|
57
74
|
end
|
|
58
75
|
end
|
|
59
76
|
|
|
60
77
|
private
|
|
61
78
|
def init_base
|
|
62
|
-
require "gst/
|
|
79
|
+
require "gst/base-loader"
|
|
63
80
|
base_loader = BaseLoader.new(self)
|
|
64
81
|
base_loader.load("GstBase")
|
|
65
82
|
end
|
|
66
83
|
|
|
67
84
|
def init_controller
|
|
68
|
-
require "gst/
|
|
85
|
+
require "gst/controller-loader"
|
|
69
86
|
controller_loader = ControllerLoader.new(self)
|
|
70
87
|
controller_loader.load("GstController")
|
|
71
88
|
end
|
|
@@ -79,16 +96,28 @@ module Gst
|
|
|
79
96
|
|
|
80
97
|
private
|
|
81
98
|
def pre_load(repository, namespace)
|
|
99
|
+
call_init_function(repository, namespace)
|
|
100
|
+
define_value_modules
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def call_init_function(repository, namespace)
|
|
82
104
|
init_check = repository.find(namespace, "init_check")
|
|
83
105
|
arguments = [
|
|
84
106
|
1 + @init_arguments.size,
|
|
85
107
|
[$0] + @init_arguments,
|
|
86
108
|
]
|
|
87
|
-
succeeded, argc, argv, error = init_check.invoke(arguments)
|
|
109
|
+
succeeded, argc, argv, error = init_check.invoke(:arguments => arguments)
|
|
88
110
|
@init_arguments.replace(argv[1..-1])
|
|
89
111
|
raise error unless succeeded
|
|
90
112
|
end
|
|
91
113
|
|
|
114
|
+
def define_value_modules
|
|
115
|
+
@value_functions_module = Module.new
|
|
116
|
+
@value_methods_module = Module.new
|
|
117
|
+
@base_module.const_set("ValueFunctions", @value_functions_module)
|
|
118
|
+
@base_module.const_set("ValueMethods", @value_methods_module)
|
|
119
|
+
end
|
|
120
|
+
|
|
92
121
|
def post_load(repository, namespace)
|
|
93
122
|
require_extension
|
|
94
123
|
self.class.start_callback_dispatch_thread
|
|
@@ -104,8 +133,25 @@ module Gst
|
|
|
104
133
|
end
|
|
105
134
|
|
|
106
135
|
def load_function_info(info)
|
|
107
|
-
|
|
108
|
-
|
|
136
|
+
case info.name
|
|
137
|
+
when "init"
|
|
138
|
+
# ignore
|
|
139
|
+
when /\Avalue_/
|
|
140
|
+
method_name = $POSTMATCH
|
|
141
|
+
load_value_function_info(info, method_name)
|
|
142
|
+
else
|
|
143
|
+
super
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
def load_value_function_info(info, method_name)
|
|
148
|
+
value_functions_module = @value_functions_module
|
|
149
|
+
define_module_function(value_functions_module, method_name, info)
|
|
150
|
+
@value_methods_module.module_eval do
|
|
151
|
+
define_method(method_name) do |*arguments, &block|
|
|
152
|
+
value_functions_module.send(method_name, self, *arguments, &block)
|
|
153
|
+
end
|
|
154
|
+
end
|
|
109
155
|
end
|
|
110
156
|
|
|
111
157
|
RENAME_MAP = {
|
|
File without changes
|
data/lib/gst/caps.rb
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Copyright (C) 2013 Ruby-GNOME2 Project Team
|
|
2
|
+
#
|
|
3
|
+
# This library is free software; you can redistribute it and/or
|
|
4
|
+
# modify it under the terms of the GNU Lesser General Public
|
|
5
|
+
# License as published by the Free Software Foundation; either
|
|
6
|
+
# version 2.1 of the License, or (at your option) any later version.
|
|
7
|
+
#
|
|
8
|
+
# This library is distributed in the hope that it will be useful,
|
|
9
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
10
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
11
|
+
# Lesser General Public License for more details.
|
|
12
|
+
#
|
|
13
|
+
# You should have received a copy of the GNU Lesser General Public
|
|
14
|
+
# License along with this library; if not, write to the Free Software
|
|
15
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
16
|
+
|
|
17
|
+
module Gst
|
|
18
|
+
class Caps
|
|
19
|
+
def structures
|
|
20
|
+
size.times.collect do |i|
|
|
21
|
+
get_structure(i)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
File without changes
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Copyright (C) 2013 Ruby-GNOME2 Project Team
|
|
2
|
+
#
|
|
3
|
+
# This library is free software; you can redistribute it and/or
|
|
4
|
+
# modify it under the terms of the GNU Lesser General Public
|
|
5
|
+
# License as published by the Free Software Foundation; either
|
|
6
|
+
# version 2.1 of the License, or (at your option) any later version.
|
|
7
|
+
#
|
|
8
|
+
# This library is distributed in the hope that it will be useful,
|
|
9
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
10
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
11
|
+
# Lesser General Public License for more details.
|
|
12
|
+
#
|
|
13
|
+
# You should have received a copy of the GNU Lesser General Public
|
|
14
|
+
# License along with this library; if not, write to the Free Software
|
|
15
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
16
|
+
|
|
17
|
+
module Gst
|
|
18
|
+
class ElementFactory
|
|
19
|
+
def long_name
|
|
20
|
+
get_metadata("long-name")
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def klass
|
|
24
|
+
get_metadata("klass")
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def description
|
|
28
|
+
get_metadata("description")
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def author
|
|
32
|
+
get_metadata("author")
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
data/lib/gst/element.rb
CHANGED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Copyright (C) 2013 Ruby-GNOME2 Project Team
|
|
2
|
+
#
|
|
3
|
+
# This library is free software; you can redistribute it and/or
|
|
4
|
+
# modify it under the terms of the GNU Lesser General Public
|
|
5
|
+
# License as published by the Free Software Foundation; either
|
|
6
|
+
# version 2.1 of the License, or (at your option) any later version.
|
|
7
|
+
#
|
|
8
|
+
# This library is distributed in the hope that it will be useful,
|
|
9
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
10
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
11
|
+
# Lesser General Public License for more details.
|
|
12
|
+
#
|
|
13
|
+
# You should have received a copy of the GNU Lesser General Public
|
|
14
|
+
# License along with this library; if not, write to the Free Software
|
|
15
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
16
|
+
|
|
17
|
+
module Gst
|
|
18
|
+
class PluginFeature
|
|
19
|
+
alias_method :rank_raw, :rank
|
|
20
|
+
def rank
|
|
21
|
+
Rank.new(rank_raw)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
data/lib/gst/registry.rb
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Copyright (C) 2013 Ruby-GNOME2 Project Team
|
|
2
|
+
#
|
|
3
|
+
# This library is free software; you can redistribute it and/or
|
|
4
|
+
# modify it under the terms of the GNU Lesser General Public
|
|
5
|
+
# License as published by the Free Software Foundation; either
|
|
6
|
+
# version 2.1 of the License, or (at your option) any later version.
|
|
7
|
+
#
|
|
8
|
+
# This library is distributed in the hope that it will be useful,
|
|
9
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
10
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
11
|
+
# Lesser General Public License for more details.
|
|
12
|
+
#
|
|
13
|
+
# You should have received a copy of the GNU Lesser General Public
|
|
14
|
+
# License along with this library; if not, write to the Free Software
|
|
15
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
16
|
+
|
|
17
|
+
module Gst
|
|
18
|
+
class Registry
|
|
19
|
+
alias_method :plugins, :plugin_list
|
|
20
|
+
def get_features(name_or_type)
|
|
21
|
+
if name_or_type.is_a?(GLib::Type)
|
|
22
|
+
type = name_or_type
|
|
23
|
+
get_feature_list(type)
|
|
24
|
+
else
|
|
25
|
+
name = name_or_type
|
|
26
|
+
get_feature_list_by_plugin(name)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Copyright (C) 2013 Ruby-GNOME2 Project Team
|
|
2
|
+
#
|
|
3
|
+
# This library is free software; you can redistribute it and/or
|
|
4
|
+
# modify it under the terms of the GNU Lesser General Public
|
|
5
|
+
# License as published by the Free Software Foundation; either
|
|
6
|
+
# version 2.1 of the License, or (at your option) any later version.
|
|
7
|
+
#
|
|
8
|
+
# This library is distributed in the hope that it will be useful,
|
|
9
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
10
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
11
|
+
# Lesser General Public License for more details.
|
|
12
|
+
#
|
|
13
|
+
# You should have received a copy of the GNU Lesser General Public
|
|
14
|
+
# License along with this library; if not, write to the Free Software
|
|
15
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
16
|
+
|
|
17
|
+
module Gst
|
|
18
|
+
class Structure
|
|
19
|
+
def fields
|
|
20
|
+
n_fields.times.collect do |i|
|
|
21
|
+
field_name = nth_field_name(i)
|
|
22
|
+
value = get_value(field_name)
|
|
23
|
+
value.extend(ValueMethods)
|
|
24
|
+
[field_name, value]
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,478 @@
|
|
|
1
|
+
#!/usr/bin/evn ruby
|
|
2
|
+
#
|
|
3
|
+
# This sample code is a port of gstreamer/tools/gst-inspect.c. It is
|
|
4
|
+
# licensed under the terms of the GNU Library General Public License,
|
|
5
|
+
# version 2 or (at your option) later.
|
|
6
|
+
#
|
|
7
|
+
# The followin is the original code's copyright notation:
|
|
8
|
+
# Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
|
|
9
|
+
# 2000 Wim Taymans <wtay@chello.be>
|
|
10
|
+
# 2004 Thomas Vander Stichele <thomas@apestaart.org>
|
|
11
|
+
#
|
|
12
|
+
#
|
|
13
|
+
# Copyright (C) 2013 Ruby-GNOME2 Project Team
|
|
14
|
+
#
|
|
15
|
+
# This library is free software; you can redistribute it and/or
|
|
16
|
+
# modify it under the terms of the GNU Lesser General Public
|
|
17
|
+
# License as published by the Free Software Foundation; either
|
|
18
|
+
# version 2.1 of the License, or (at your option) any later version.
|
|
19
|
+
#
|
|
20
|
+
# This library is distributed in the hope that it will be useful,
|
|
21
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
22
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
23
|
+
# Lesser General Public License for more details.
|
|
24
|
+
#
|
|
25
|
+
# You should have received a copy of the GNU Lesser General Public
|
|
26
|
+
# License along with this library; if not, write to the Free Software
|
|
27
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
28
|
+
|
|
29
|
+
require "optparse"
|
|
30
|
+
require "ostruct"
|
|
31
|
+
|
|
32
|
+
require "gst"
|
|
33
|
+
|
|
34
|
+
def parse(argv)
|
|
35
|
+
options = OpenStruct.new
|
|
36
|
+
options.print_all = false
|
|
37
|
+
options.print_auto_install_info = false
|
|
38
|
+
|
|
39
|
+
opts = OptionParser.new do |opts|
|
|
40
|
+
opts.banner += " [ELEMENT-NAME|PLUGIN-NAME]"
|
|
41
|
+
|
|
42
|
+
opts.version = Gst.version
|
|
43
|
+
|
|
44
|
+
opts.separator("")
|
|
45
|
+
opts.on("-a", "--print-all", "Print all elements") do
|
|
46
|
+
options.print_all = true
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
opts.on("--print-plugin-auto-install-info",
|
|
50
|
+
"Print a machine-parsable list of features",
|
|
51
|
+
"the specified plugin provides.",
|
|
52
|
+
"Useful in connection with external",
|
|
53
|
+
"automatic plugin installation mechanisms") do
|
|
54
|
+
options.print_auto_install_info = true
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
opts.parse!(argv)
|
|
58
|
+
|
|
59
|
+
[options, argv.first]
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
class Inspector
|
|
63
|
+
def initialize
|
|
64
|
+
@prefix = ""
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def print_list(print_all)
|
|
68
|
+
plugins = {}
|
|
69
|
+
n_features = 0
|
|
70
|
+
each_feature do |plugin, feature|
|
|
71
|
+
plugins[plugin.name] = nil
|
|
72
|
+
n_features += 1
|
|
73
|
+
if print_all
|
|
74
|
+
if feature.is_a?(Gst::ElementFactory)
|
|
75
|
+
print_element_factory(feature, true)
|
|
76
|
+
end
|
|
77
|
+
else
|
|
78
|
+
print_feature(plugin, feature)
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
puts
|
|
82
|
+
puts("Total count: #{plugins.size} plugins, #{n_features} features")
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def print_element(name)
|
|
86
|
+
factory = Gst::ElementFactory.find(name)
|
|
87
|
+
print_element_factory(factory, false)
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
private
|
|
91
|
+
def puts(*args)
|
|
92
|
+
if args.empty?
|
|
93
|
+
super(@prefix)
|
|
94
|
+
else
|
|
95
|
+
super(*(args.collect {|arg| "#{@prefix}#{arg}"}))
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def prefix(new_prefix)
|
|
100
|
+
prefix, @prefix = @prefix, new_prefix
|
|
101
|
+
yield
|
|
102
|
+
ensure
|
|
103
|
+
@prefix = prefix
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def each_feature
|
|
107
|
+
registry = Gst::Registry.get
|
|
108
|
+
registry.plugins.sort_by {|plugin| plugin.name}.each do |plugin|
|
|
109
|
+
features = registry.get_features(plugin.name)
|
|
110
|
+
features.sort_by {|feature| feature.name}.each do |feature|
|
|
111
|
+
yield(plugin, feature)
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
def print_factory_details_info(factory)
|
|
117
|
+
puts("Factory Details:",
|
|
118
|
+
" Rank:\t\t#{factory.rank.nick} (#{factory.rank.to_i})",
|
|
119
|
+
" Long name:\t#{factory.long_name}",
|
|
120
|
+
" Class:\t#{factory.klass}",
|
|
121
|
+
" Description:\t#{factory.description}",
|
|
122
|
+
" Author(s):\t#{factory.author}",
|
|
123
|
+
"")
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def print_plugin_info(name)
|
|
127
|
+
return if name.nil?
|
|
128
|
+
registry = Gst::Registry.get
|
|
129
|
+
plugin = registry.find_plugin(name)
|
|
130
|
+
return if plugin.nil?
|
|
131
|
+
|
|
132
|
+
puts("Plugin Details:",
|
|
133
|
+
" Name:\t\t\t#{plugin.name}",
|
|
134
|
+
" Description:\t\t#{plugin.description}",
|
|
135
|
+
" Filename:\t\t#{plugin.filename || '(null)'}",
|
|
136
|
+
" Version:\t\t#{plugin.version}",
|
|
137
|
+
" License:\t\t#{plugin.license}",
|
|
138
|
+
" Source module:\t#{plugin.source}")
|
|
139
|
+
release_date = plugin.release_date_string
|
|
140
|
+
if release_date
|
|
141
|
+
puts(" Source release date:\t#{release_date}")
|
|
142
|
+
end
|
|
143
|
+
puts(" Binary package:\t#{plugin.package}",
|
|
144
|
+
" Origin URL:\t\t#{plugin.origin}",
|
|
145
|
+
"")
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
def print_hierarchy(element)
|
|
149
|
+
ancestors = []
|
|
150
|
+
type = element.gtype
|
|
151
|
+
while type
|
|
152
|
+
ancestors << type
|
|
153
|
+
type = type.parent
|
|
154
|
+
end
|
|
155
|
+
ancestors.reverse.each_with_index do |klass, i|
|
|
156
|
+
if i.zero?
|
|
157
|
+
mark = ""
|
|
158
|
+
else
|
|
159
|
+
mark = " " + (" " * (i - 1)) + "+----"
|
|
160
|
+
end
|
|
161
|
+
puts("#{mark}#{klass.name}")
|
|
162
|
+
end
|
|
163
|
+
puts
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
def print_interfaces(element)
|
|
167
|
+
interfaces = element.gtype.interfaces
|
|
168
|
+
return if interfaces.empty?
|
|
169
|
+
|
|
170
|
+
puts("Implemented Interfaces:")
|
|
171
|
+
interfaces.each do |interface|
|
|
172
|
+
puts(" #{interface.name}")
|
|
173
|
+
end
|
|
174
|
+
puts
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
def print_caps(caps)
|
|
178
|
+
if caps.any?
|
|
179
|
+
puts("ANY")
|
|
180
|
+
return
|
|
181
|
+
end
|
|
182
|
+
if caps.empty?
|
|
183
|
+
puts("EMPTY")
|
|
184
|
+
return
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
caps.structures.each do |structure|
|
|
188
|
+
puts(structure.name)
|
|
189
|
+
structure.fields.each do |name, value|
|
|
190
|
+
puts(" %15s: %s" % [name, value.serialize])
|
|
191
|
+
end
|
|
192
|
+
end
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
def print_pad_template_info(template)
|
|
196
|
+
prefix("#{@prefix} ") do
|
|
197
|
+
puts("#{template.direction.nick.upcase} template: '#{template.name_template}'")
|
|
198
|
+
prefix("#{@prefix} ") do
|
|
199
|
+
if template.presence == Gst::PadPresence::REQUEST
|
|
200
|
+
puts("Availability: On request")
|
|
201
|
+
else
|
|
202
|
+
puts("Availability: #{template.presence.nick.capitalize}")
|
|
203
|
+
end
|
|
204
|
+
end
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
caps = template.caps
|
|
208
|
+
return if caps.nil?
|
|
209
|
+
prefix("#{@prefix} ") do
|
|
210
|
+
puts("Capabilities:")
|
|
211
|
+
prefix("#{@prefix} ") do
|
|
212
|
+
print_caps(caps)
|
|
213
|
+
end
|
|
214
|
+
end
|
|
215
|
+
puts
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
def print_pad_templates_info(element, factory)
|
|
219
|
+
puts("Pad Templates:")
|
|
220
|
+
templates = factory.static_pad_templates
|
|
221
|
+
|
|
222
|
+
if templates.empty?
|
|
223
|
+
puts(" none")
|
|
224
|
+
return
|
|
225
|
+
end
|
|
226
|
+
|
|
227
|
+
templates.each do |template|
|
|
228
|
+
print_pad_template_info(template)
|
|
229
|
+
end
|
|
230
|
+
end
|
|
231
|
+
|
|
232
|
+
def print_element_flag_info(element)
|
|
233
|
+
puts("Element Flags:")
|
|
234
|
+
puts(" no flags set")
|
|
235
|
+
puts
|
|
236
|
+
|
|
237
|
+
return unless element.is_a?(Gst::Bin)
|
|
238
|
+
puts("Bin Flags:")
|
|
239
|
+
puts(" no flags set")
|
|
240
|
+
puts
|
|
241
|
+
end
|
|
242
|
+
|
|
243
|
+
def print_implementation_info(element)
|
|
244
|
+
puts("Element Implementation:")
|
|
245
|
+
puts(" not supported")
|
|
246
|
+
puts
|
|
247
|
+
end
|
|
248
|
+
|
|
249
|
+
def print_clocking_info(element)
|
|
250
|
+
if !element.flags.require_clock? and
|
|
251
|
+
!element.flags.provide_clock? and
|
|
252
|
+
element.clock.nil?
|
|
253
|
+
puts("Element has no clocking capabilities.")
|
|
254
|
+
return
|
|
255
|
+
end
|
|
256
|
+
|
|
257
|
+
puts("Clocking Interaction:")
|
|
258
|
+
puts(" element requires a clock") if element.flags.require_clock?
|
|
259
|
+
if element.flags.provide_clock?
|
|
260
|
+
clock = element.clock
|
|
261
|
+
if clock.nil?
|
|
262
|
+
puts(" element is supported tot provide a clock but returned nil")
|
|
263
|
+
else
|
|
264
|
+
puts(" element provides a clock: #{clock.name}")
|
|
265
|
+
end
|
|
266
|
+
end
|
|
267
|
+
puts
|
|
268
|
+
end
|
|
269
|
+
|
|
270
|
+
def print_index_info(element)
|
|
271
|
+
if element.flags.indexable?
|
|
272
|
+
puts("Indexing capabilities:")
|
|
273
|
+
puts(" element can do indexing")
|
|
274
|
+
else
|
|
275
|
+
puts("Element has no indexing capabilities.")
|
|
276
|
+
end
|
|
277
|
+
puts
|
|
278
|
+
end
|
|
279
|
+
|
|
280
|
+
def uri_type(element)
|
|
281
|
+
case element.uri_type
|
|
282
|
+
when Gst::URIType::SRC
|
|
283
|
+
"source"
|
|
284
|
+
when Gst::URIType::SINK
|
|
285
|
+
"sink"
|
|
286
|
+
else
|
|
287
|
+
"unknown"
|
|
288
|
+
end
|
|
289
|
+
end
|
|
290
|
+
|
|
291
|
+
def print_uri_handler_info(element)
|
|
292
|
+
if element.is_a?(Gst::URIHandler)
|
|
293
|
+
puts("URI handling capabilities:")
|
|
294
|
+
puts(" Element can act as #{uri_type(element)}.")
|
|
295
|
+
protocols = element.protocols
|
|
296
|
+
if protocols.empty?
|
|
297
|
+
puts(" No supported URI protocols")
|
|
298
|
+
else
|
|
299
|
+
puts(" Supported URI protocols:")
|
|
300
|
+
protocols.each do |protocol|
|
|
301
|
+
puts(" #{protocol}")
|
|
302
|
+
end
|
|
303
|
+
end
|
|
304
|
+
else
|
|
305
|
+
puts("Element has no URI handling capabilities.")
|
|
306
|
+
end
|
|
307
|
+
puts
|
|
308
|
+
end
|
|
309
|
+
|
|
310
|
+
def print_pad_info(element)
|
|
311
|
+
puts("Pads:")
|
|
312
|
+
pads = element.pads
|
|
313
|
+
if pads.empty?
|
|
314
|
+
puts(" none")
|
|
315
|
+
return
|
|
316
|
+
end
|
|
317
|
+
|
|
318
|
+
pads.each do |pad|
|
|
319
|
+
prefix("#{@prefix} ") do
|
|
320
|
+
puts("#{pad.direction.nick.upcase}: '#{pad.name}'")
|
|
321
|
+
prefix("#{@prefix} ") do
|
|
322
|
+
template = pad.template
|
|
323
|
+
puts("Pad Template: '#{template.name}'") if template
|
|
324
|
+
|
|
325
|
+
caps = pad.caps
|
|
326
|
+
break if caps.nil?
|
|
327
|
+
puts("Capabilities:")
|
|
328
|
+
prefix("#{@prefix} ") do
|
|
329
|
+
print_caps(caps)
|
|
330
|
+
end
|
|
331
|
+
end
|
|
332
|
+
end
|
|
333
|
+
end
|
|
334
|
+
puts
|
|
335
|
+
end
|
|
336
|
+
|
|
337
|
+
def print_element_properties_info(element)
|
|
338
|
+
puts("Element Properties:")
|
|
339
|
+
properties = element.class.properties
|
|
340
|
+
if properties.empty?
|
|
341
|
+
puts(" none")
|
|
342
|
+
return
|
|
343
|
+
end
|
|
344
|
+
|
|
345
|
+
properties.each do |name|
|
|
346
|
+
param = element.class.property(name)
|
|
347
|
+
puts(" %-20s: %s" % [param.name, param.blurb])
|
|
348
|
+
|
|
349
|
+
flags = []
|
|
350
|
+
flags << "readable" if param.readable?
|
|
351
|
+
flags << "writable" if param.writable?
|
|
352
|
+
# flags << "controllable" if param.controllable?
|
|
353
|
+
|
|
354
|
+
prefix("#{@prefix}#{' ' * 23} ") do
|
|
355
|
+
puts("flags: #{flags.join(', ')}")
|
|
356
|
+
description = ""
|
|
357
|
+
type_name = param.value_type.name
|
|
358
|
+
description << "#{type_name}."
|
|
359
|
+
if param.readable?
|
|
360
|
+
case param.gtype
|
|
361
|
+
when GLib::Type["GParamObject"]
|
|
362
|
+
# do nothing
|
|
363
|
+
else
|
|
364
|
+
default_value = element.get_property(name)
|
|
365
|
+
description << " Default: #{default_value.inspect}"
|
|
366
|
+
end
|
|
367
|
+
else
|
|
368
|
+
description << " Write only"
|
|
369
|
+
end
|
|
370
|
+
puts(description)
|
|
371
|
+
end
|
|
372
|
+
end
|
|
373
|
+
puts
|
|
374
|
+
end
|
|
375
|
+
|
|
376
|
+
def print_signal_info(element, signal)
|
|
377
|
+
args = ["object(#{element.class})"]
|
|
378
|
+
signal.param_types.each_with_index do |name, i|
|
|
379
|
+
args << "arg#{i}(#{name})"
|
|
380
|
+
end
|
|
381
|
+
args = args.join(", ")
|
|
382
|
+
signature = "{|#{args}| ...} # => #{signal.return_type}"
|
|
383
|
+
puts(" #{signal.name.inspect}: #{signature}")
|
|
384
|
+
end
|
|
385
|
+
|
|
386
|
+
def print_signals_info(element)
|
|
387
|
+
signals = []
|
|
388
|
+
actions = []
|
|
389
|
+
element.class.signals.each do |name|
|
|
390
|
+
signal = element.class.signal(name)
|
|
391
|
+
next if signal.owner >= Gst::Element
|
|
392
|
+
if signal.action?
|
|
393
|
+
actions << signal
|
|
394
|
+
else
|
|
395
|
+
signals << signal
|
|
396
|
+
end
|
|
397
|
+
end
|
|
398
|
+
|
|
399
|
+
[[signals, "Signals"],
|
|
400
|
+
[actions, "Actions"]].each do |target_signals, description|
|
|
401
|
+
unless target_signals.empty?
|
|
402
|
+
puts("Element #{description}:")
|
|
403
|
+
target_signals.each do |signal|
|
|
404
|
+
print_signal_info(element, signal)
|
|
405
|
+
end
|
|
406
|
+
end
|
|
407
|
+
end
|
|
408
|
+
puts
|
|
409
|
+
end
|
|
410
|
+
|
|
411
|
+
def print_children_info(element)
|
|
412
|
+
return unless element.is_a?(Gst::Bin)
|
|
413
|
+
children = element.children
|
|
414
|
+
return if children.empty?
|
|
415
|
+
|
|
416
|
+
puts("Children:")
|
|
417
|
+
children.each do |child|
|
|
418
|
+
puts(" #{child.name}")
|
|
419
|
+
end
|
|
420
|
+
end
|
|
421
|
+
|
|
422
|
+
def print_element_factory(factory, print_names)
|
|
423
|
+
factory = factory.load
|
|
424
|
+
if factory.nil?
|
|
425
|
+
puts("element plugin (#{factory.name}) couldn't be loaded\n")
|
|
426
|
+
return
|
|
427
|
+
end
|
|
428
|
+
|
|
429
|
+
element = factory.create
|
|
430
|
+
|
|
431
|
+
prefix(print_names ? "#{factory.name}: " : "") do
|
|
432
|
+
print_factory_details_info(factory)
|
|
433
|
+
print_plugin_info(factory.plugin.name)
|
|
434
|
+
|
|
435
|
+
print_hierarchy(element)
|
|
436
|
+
print_interfaces(element)
|
|
437
|
+
|
|
438
|
+
print_pad_templates_info(element, factory)
|
|
439
|
+
puts
|
|
440
|
+
|
|
441
|
+
print_element_flag_info(element)
|
|
442
|
+
print_implementation_info(element)
|
|
443
|
+
print_clocking_info(element)
|
|
444
|
+
print_index_info(element)
|
|
445
|
+
print_uri_handler_info(element)
|
|
446
|
+
print_pad_info(element)
|
|
447
|
+
print_element_properties_info(element)
|
|
448
|
+
print_signals_info(element)
|
|
449
|
+
print_children_info(element)
|
|
450
|
+
end
|
|
451
|
+
end
|
|
452
|
+
|
|
453
|
+
def print_feature(plugin, feature)
|
|
454
|
+
prefix("#{plugin.name}: #{feature.name}") do
|
|
455
|
+
case feature
|
|
456
|
+
when Gst::ElementFactory
|
|
457
|
+
puts(": #{feature.long_name}")
|
|
458
|
+
when Gst::TypeFindFactory
|
|
459
|
+
if feature.extensions.empty?
|
|
460
|
+
message = "no extensions"
|
|
461
|
+
else
|
|
462
|
+
message = feature.extensions.join(", ")
|
|
463
|
+
end
|
|
464
|
+
puts(": #{message}")
|
|
465
|
+
else
|
|
466
|
+
puts(" (#{feature.gtype})")
|
|
467
|
+
end
|
|
468
|
+
end
|
|
469
|
+
end
|
|
470
|
+
end
|
|
471
|
+
|
|
472
|
+
options, element_name = parse(ARGV)
|
|
473
|
+
inspector = Inspector.new
|
|
474
|
+
if element_name
|
|
475
|
+
inspector.print_element(element_name)
|
|
476
|
+
else
|
|
477
|
+
inspector.print_list(options.print_all)
|
|
478
|
+
end
|
metadata
CHANGED
|
@@ -1,48 +1,43 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: gstreamer
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.0.
|
|
5
|
-
prerelease:
|
|
4
|
+
version: 2.0.3
|
|
6
5
|
platform: ruby
|
|
7
6
|
authors:
|
|
8
7
|
- The Ruby-GNOME2 Project Team
|
|
9
8
|
autorequire:
|
|
10
9
|
bindir: bin
|
|
11
10
|
cert_chain: []
|
|
12
|
-
date: 2013-
|
|
11
|
+
date: 2013-12-28 00:00:00.000000000 Z
|
|
13
12
|
dependencies:
|
|
14
13
|
- !ruby/object:Gem::Dependency
|
|
15
14
|
name: glib2
|
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
|
17
|
-
none: false
|
|
18
16
|
requirements:
|
|
19
17
|
- - '='
|
|
20
18
|
- !ruby/object:Gem::Version
|
|
21
|
-
version: 2.0.
|
|
19
|
+
version: 2.0.3
|
|
22
20
|
type: :runtime
|
|
23
21
|
prerelease: false
|
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
25
|
-
none: false
|
|
26
23
|
requirements:
|
|
27
24
|
- - '='
|
|
28
25
|
- !ruby/object:Gem::Version
|
|
29
|
-
version: 2.0.
|
|
26
|
+
version: 2.0.3
|
|
30
27
|
- !ruby/object:Gem::Dependency
|
|
31
28
|
name: gobject-introspection
|
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
|
33
|
-
none: false
|
|
34
30
|
requirements:
|
|
35
31
|
- - '='
|
|
36
32
|
- !ruby/object:Gem::Version
|
|
37
|
-
version: 2.0.
|
|
33
|
+
version: 2.0.3
|
|
38
34
|
type: :runtime
|
|
39
35
|
prerelease: false
|
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
41
|
-
none: false
|
|
42
37
|
requirements:
|
|
43
38
|
- - '='
|
|
44
39
|
- !ruby/object:Gem::Version
|
|
45
|
-
version: 2.0.
|
|
40
|
+
version: 2.0.3
|
|
46
41
|
description: Ruby/GStreamer is a Ruby binding for GStreamer.
|
|
47
42
|
email: ruby-gnome2-devel-en@lists.sourceforge.net
|
|
48
43
|
executables: []
|
|
@@ -53,16 +48,24 @@ files:
|
|
|
53
48
|
- Rakefile
|
|
54
49
|
- extconf.rb
|
|
55
50
|
- lib/gst.rb
|
|
56
|
-
- lib/gst/
|
|
51
|
+
- lib/gst/base-loader.rb
|
|
57
52
|
- lib/gst/bin.rb
|
|
58
53
|
- lib/gst/bus.rb
|
|
59
|
-
- lib/gst/
|
|
54
|
+
- lib/gst/caps.rb
|
|
55
|
+
- lib/gst/controller-loader.rb
|
|
56
|
+
- lib/gst/element-factory.rb
|
|
60
57
|
- lib/gst/element.rb
|
|
58
|
+
- lib/gst/plugin-feature.rb
|
|
59
|
+
- lib/gst/registry.rb
|
|
60
|
+
- lib/gst/structure.rb
|
|
61
61
|
- ext/gstreamer/depend
|
|
62
62
|
- ext/gstreamer/extconf.rb
|
|
63
|
+
- ext/gstreamer/rbgst-element-factory.c
|
|
63
64
|
- ext/gstreamer/rbgst.c
|
|
65
|
+
- ext/gstreamer/rbgst.h
|
|
64
66
|
- sample/audio-example.rb
|
|
65
67
|
- sample/framestep1.rb
|
|
68
|
+
- sample/gst-inspect.rb
|
|
66
69
|
- sample/helloworld.rb
|
|
67
70
|
- sample/mp3parselaunch.rb
|
|
68
71
|
- sample/queue.rb
|
|
@@ -71,26 +74,25 @@ files:
|
|
|
71
74
|
- sample/typefind.rb
|
|
72
75
|
homepage: http://ruby-gnome2.sourceforge.jp/
|
|
73
76
|
licenses: []
|
|
77
|
+
metadata: {}
|
|
74
78
|
post_install_message:
|
|
75
79
|
rdoc_options: []
|
|
76
80
|
require_paths:
|
|
77
81
|
- lib
|
|
78
82
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
79
|
-
none: false
|
|
80
83
|
requirements:
|
|
81
|
-
- -
|
|
84
|
+
- - '>='
|
|
82
85
|
- !ruby/object:Gem::Version
|
|
83
|
-
version: 1.
|
|
86
|
+
version: 1.9.3
|
|
84
87
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
85
|
-
none: false
|
|
86
88
|
requirements:
|
|
87
|
-
- -
|
|
89
|
+
- - '>='
|
|
88
90
|
- !ruby/object:Gem::Version
|
|
89
91
|
version: '0'
|
|
90
92
|
requirements: []
|
|
91
93
|
rubyforge_project:
|
|
92
|
-
rubygems_version:
|
|
94
|
+
rubygems_version: 2.0.14
|
|
93
95
|
signing_key:
|
|
94
|
-
specification_version:
|
|
96
|
+
specification_version: 4
|
|
95
97
|
summary: Ruby/GStreamer is a Ruby binding for GStreamer.
|
|
96
98
|
test_files: []
|