gstreamer 1.2.6 → 2.0.0

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.
Files changed (92) hide show
  1. data/Rakefile +78 -39
  2. data/ext/gstreamer/extconf.rb +8 -22
  3. data/ext/gstreamer/rbgst.c +82 -194
  4. data/lib/gst/base_loader.rb +20 -0
  5. data/lib/gst/bin.rb +32 -0
  6. data/lib/gst/bus.rb +24 -0
  7. data/lib/gst/element.rb +48 -0
  8. data/lib/gst.rb +87 -22
  9. data/sample/helloworld.rb +75 -0
  10. data/sample/mp3parselaunch.rb +74 -0
  11. data/sample/queue.rb +92 -0
  12. data/sample/typefind.rb +101 -0
  13. metadata +29 -84
  14. data/README +0 -33
  15. data/ext/gstreamer/misc.c +0 -63
  16. data/ext/gstreamer/rbgst-bin.c +0 -456
  17. data/ext/gstreamer/rbgst-buffer.c +0 -363
  18. data/ext/gstreamer/rbgst-bus.c +0 -92
  19. data/ext/gstreamer/rbgst-caps.c +0 -446
  20. data/ext/gstreamer/rbgst-child-proxy.c +0 -34
  21. data/ext/gstreamer/rbgst-clock.c +0 -108
  22. data/ext/gstreamer/rbgst-element-factory.c +0 -249
  23. data/ext/gstreamer/rbgst-element.c +0 -1106
  24. data/ext/gstreamer/rbgst-event.c +0 -352
  25. data/ext/gstreamer/rbgst-ghost-pad.c +0 -45
  26. data/ext/gstreamer/rbgst-index-factory.c +0 -69
  27. data/ext/gstreamer/rbgst-install-plugins-context.c +0 -87
  28. data/ext/gstreamer/rbgst-install-plugins-return.c +0 -45
  29. data/ext/gstreamer/rbgst-install-plugins.c +0 -125
  30. data/ext/gstreamer/rbgst-message.c +0 -785
  31. data/ext/gstreamer/rbgst-mini-object.c +0 -221
  32. data/ext/gstreamer/rbgst-object.c +0 -81
  33. data/ext/gstreamer/rbgst-pad-template.c +0 -125
  34. data/ext/gstreamer/rbgst-pad.c +0 -336
  35. data/ext/gstreamer/rbgst-pipeline.c +0 -91
  36. data/ext/gstreamer/rbgst-plugin-feature.c +0 -131
  37. data/ext/gstreamer/rbgst-plugin.c +0 -162
  38. data/ext/gstreamer/rbgst-private.c +0 -88
  39. data/ext/gstreamer/rbgst-private.h +0 -97
  40. data/ext/gstreamer/rbgst-query.c +0 -291
  41. data/ext/gstreamer/rbgst-seek.c +0 -39
  42. data/ext/gstreamer/rbgst-static-caps.c +0 -49
  43. data/ext/gstreamer/rbgst-static-pad-template.c +0 -65
  44. data/ext/gstreamer/rbgst-structure.c +0 -300
  45. data/ext/gstreamer/rbgst-system-clock.c +0 -48
  46. data/ext/gstreamer/rbgst-type-find-factory.c +0 -125
  47. data/ext/gstreamer/rbgst-value.c +0 -527
  48. data/ext/gstreamer/rbgst-x-overlay.c +0 -131
  49. data/ext/gstreamer/rbgst.h +0 -197
  50. data/ext/gstreamer/rbgstclockentry.c +0 -271
  51. data/ext/gstreamer/rbgstformat.c +0 -162
  52. data/ext/gstreamer/rbgstindex.c +0 -315
  53. data/ext/gstreamer/rbgstindexentry.c +0 -99
  54. data/ext/gstreamer/rbgstparse.c +0 -69
  55. data/ext/gstreamer/rbgstquerytype.c +0 -162
  56. data/ext/gstreamer/rbgstregistry.c +0 -288
  57. data/ext/gstreamer/rbgsttag.c +0 -113
  58. data/ext/gstreamer/rbgsttagsetter.c +0 -53
  59. data/ext/gstreamer/rbgstxml.c +0 -192
  60. data/sample/audio-player.rb +0 -54
  61. data/sample/gst-gi.rb +0 -55
  62. data/sample/gst-inspect.rb +0 -417
  63. data/sample/install-plugins.rb +0 -40
  64. data/sample/media-type.rb +0 -55
  65. data/sample/media-type2.rb +0 -268
  66. data/sample/ogg-audio-player.rb +0 -54
  67. data/sample/type-find.rb +0 -46
  68. data/sample/video-player.rb +0 -57
  69. data/sample/xml-player.rb +0 -60
  70. data/test/gst-test-utils.rb +0 -18
  71. data/test/run-test.rb +0 -25
  72. data/test/test_bin.rb +0 -167
  73. data/test/test_buffer.rb +0 -185
  74. data/test/test_caps.rb +0 -24
  75. data/test/test_element.rb +0 -85
  76. data/test/test_element_factory.rb +0 -28
  77. data/test/test_event.rb +0 -10
  78. data/test/test_index_factory.rb +0 -7
  79. data/test/test_install-plugins.rb +0 -18
  80. data/test/test_message.rb +0 -191
  81. data/test/test_mini_object.rb +0 -38
  82. data/test/test_object.rb +0 -10
  83. data/test/test_pad.rb +0 -68
  84. data/test/test_plugin.rb +0 -6
  85. data/test/test_plugin_feature.rb +0 -20
  86. data/test/test_seek.rb +0 -17
  87. data/test/test_static_caps.rb +0 -18
  88. data/test/test_static_pad_template.rb +0 -16
  89. data/test/test_structure.rb +0 -159
  90. data/test/test_thread_handling.rb +0 -58
  91. data/test/test_type_find_factory.rb +0 -8
  92. data/test/test_value.rb +0 -69
@@ -1,268 +0,0 @@
1
-
2
- # This is a Ruby implementation of the GStreamer media-info library,
3
- # graciously provided by Nikolai Weilbull <lone-star@home.se>.
4
- #
5
- # It works exactly like media-type.rb.
6
-
7
- require 'gst'
8
-
9
- class MediaInfoStream
10
- def initialize
11
- @length_tracks = 0
12
- @length_time = 0
13
- @bitrate = 0
14
- @seekable = false
15
- @path = nil
16
- @mime = nil
17
- @tracks = []
18
- end
19
- attr_accessor :length_time, :length_tracks, :path, :mime, :bitrate, :tracks
20
- end
21
-
22
- class MediaInfoTrack
23
- def initialize
24
- @metadata = nil
25
- @streaminfo = nil
26
- @format = nil
27
- @length_time = 0
28
- @con_streams = nil
29
- end
30
-
31
- attr_accessor :metadata, :streaminfo, :format
32
- end
33
-
34
- class MediaInfo
35
- # TODO: add signals
36
- INFO_ALL = (0..4).to_a.length - 1
37
- INFO_STREAM, INFO_MIME, INFO_METADATA, INFO_STREAMINFO, INFO_FORMAT = *(0..4).to_a
38
- def initialize(source_element)
39
- @pipeline = Gst::Pipeline.new 'media-info'
40
- @typefind = Gst::ElementFactory.make 'typefind', 'typefind'
41
- @source_element = source_element
42
- @source = Gst::ElementFactory.make @source_element, 'source'
43
- if @source != nil
44
- @pipeline.add @source
45
- else
46
- @source_element = nil
47
- @source = nil
48
- end
49
- @decoder = @type = @format = @metadata = @stream = nil
50
- @decoders = Hash.new
51
- @pipeline.signal_connect 'deep_notify' do |obj, origin, pspec|
52
- case pspec.name
53
- when 'metadata'
54
- @metadata = origin.metadata
55
- when 'caps'
56
- @format = origin.caps if origin == @decoder_pad
57
- when 'streaminfo'
58
- @streaminfo = origin.streaminfo
59
- end
60
- end
61
- end
62
-
63
- def reset
64
- @format = nil
65
- @metadata = nil
66
- @stream = nil
67
- end
68
-
69
- def seek_to_track(track)
70
- track_format = Gst::Format.find 'logical_stream'
71
- return false if track_format == nil
72
- @pipeline.play
73
- # XXX: todo, need Gst::Event
74
- event = gst_event_new_seek(format.id | Gst::EventSeek::METHOD_SET |
75
- Gst::EventSeek::FLAG_FLUSH)
76
- return false if event == nil
77
- @metadata = nil
78
- @streaminfo = nil
79
- return true
80
- end
81
-
82
- def get_decoder(mime)
83
- decoder = @decoders[mime]
84
- if decoder == nil
85
- factories = {
86
- 'application/x-ogg' => 'vorbisfile',
87
- 'audio/x-mp3' => 'mad',
88
- 'audio/x-wav' => 'wavparse'
89
- }
90
- factory = factories[mime]
91
- return nil if factory == nil
92
- decoder = Gst::ElementFactory.make factory, 'decoder'
93
- @decoders[mime] = decoder if decoder != nil
94
- end
95
- return decoder
96
- end
97
-
98
- def find_type(location)
99
- @type = nil
100
- @pipeline.add @typefind
101
- @source.location = location
102
- @source >> @typefind
103
- @typefind.signal_connect 'have-type' do |typefind, type|
104
- @type = type
105
- end
106
- @pipeline.play
107
- while @type == nil && @pipeline.iterate do end
108
- @pipeline.ready
109
- # TODO: this is different
110
- @source.unlink_pads @typefind
111
- @pipeline.remove @typefind
112
- end
113
-
114
- def get_stream(stream)
115
- @pipeline.play
116
- while @format == nil && @pipeline.iterate do end
117
- @pipeline.pause
118
- return nil if @format == nil
119
- track_format = Gst::Format.find 'logical_stream'
120
- @decoder_pad.formats.each do |format|
121
- value = @decoder_pad.query(Gst::QueryType::TOTAL, format.type_id)
122
- case format.type_id
123
- when Gst::Format::TIME
124
- stream.length_time = value ? value : 1
125
- else
126
- stream.length_tracks = value if format == track_format && value != nil
127
- end
128
- end
129
- stream.length_tracks = 1 if stream.length_tracks == 0
130
- value = @source_pad.query(Gst::QueryType::TOTAL, Gst::Format::BYTES)
131
- if value
132
- seconds = stream.length_time.to_f / Gst::SECOND
133
- bits = value * 8
134
- stream.bitrate = bits / seconds
135
- end
136
- return stream
137
- end
138
-
139
- def find_metadata
140
- @pipeline.play
141
- while @metadata == nil && @pipeline.iterate do end
142
- @pipeline.pause
143
- metadata = @metadata
144
- @metadata = nil
145
- return metadata
146
- end
147
-
148
- def find_streaminfo
149
- @pipeline.play
150
- while @streaminfo == nil && @pipeline.iterate do end
151
- @pipeline.pause
152
- streaminfo = @streaminfo
153
- @streaminfo = nil
154
-
155
- track_format = Gst::Format.find 'logical_stream'
156
- if track_format != nil
157
- start = @decoder_pad.query(Gst::QueryType::POSITION, track_format.type_id)
158
- track_num = start
159
- # XXX: need Gst::Pad#convert
160
- end
161
- return streaminfo
162
- end
163
-
164
- def find_format
165
- @pipeline.play
166
- while @format == nil && @pipeline.iterate do end
167
- @pipeline.pause
168
- format = @format
169
- @format = nil
170
- return format
171
- end
172
-
173
- def clear_decoder
174
- if @decoder != nil
175
- @pipeline.ready
176
- @source.unlink_pads @decoder
177
- @pipeline.remove @decoder
178
- @decoder = nil
179
- end
180
- end
181
-
182
- def set_decoder(decoder)
183
- @decoder = decoder
184
- @pipeline.add @decoder
185
- @source >> @decoder
186
- @decoder_pad = @decoder.get_pad 'src'
187
- @source_pad = @source.get_pad 'src'
188
- end
189
-
190
- def set_source(source)
191
- src = Gst::ElementFactory.make source, 'new-source'
192
- return false if src == nil
193
- if @source != nil
194
- @pipeline.remove @source
195
- @source_element = nil if @source_element != nil
196
- end
197
- src.name = 'source'
198
- @pipeline.add src
199
- @source = src
200
- @source_element = source
201
- return true
202
- end
203
-
204
- def read(location, flags)
205
- reset
206
- find_type location
207
- return nil if @type == nil
208
- stream = MediaInfoStream.new
209
- mime = @type.mime
210
- stream.mime = mime if flags & INFO_MIME
211
- stream.path = location
212
- decoder = get_decoder mime
213
- return nil if decoder == nil
214
- set_decoder decoder
215
- stream = get_stream stream
216
- stream.length_tracks.times do |i|
217
- track = MediaInfoTrack.new
218
- track.metadata = find_metadata if flags & INFO_METADATA
219
- track.streaminfo = find_streaminfo if flags & INFO_STREAMINFO
220
- track.format = find_format if flags & INFO_FORMAT
221
- stream.tracks << track
222
- end
223
- clear_decoder
224
- return stream
225
- end
226
- end
227
-
228
- def usage
229
- puts "Usage: #{__FILE__} FILE..."
230
- exit 1
231
- end
232
-
233
- def print_caps(caps)
234
- return if caps == nil
235
- caps.each_property do |name, value, fixed|
236
- puts " #{name}: #{value}"
237
- end
238
- end
239
-
240
- def print_info(path, stream)
241
- if stream
242
- puts "#{path}:"
243
- puts " mime type: #{stream.mime}"
244
- puts " length: #{stream.length_time / Gst::SECOND} seconds"
245
- puts " bitrate: #{stream.bitrate / 1000.0} kbps"
246
- puts " number of tracks: #{stream.length_tracks}"
247
- puts " tracks:"
248
- stream.tracks.each_with_index do |track, i|
249
- puts " - track #{i + 1}:"
250
- puts " metadata:"
251
- print_caps track.metadata
252
- puts " streaminfo:"
253
- print_caps track.streaminfo
254
- puts " format:"
255
- print_caps track.format
256
- end
257
- else
258
- puts "No media info found for file #{path}"
259
- end
260
- end
261
-
262
- usage if ARGV.empty?
263
- Gst.init
264
- mediainfo = MediaInfo.new 'filesrc'
265
- ARGV.each do |path|
266
- print_info path, mediainfo.read(path, MediaInfo::INFO_ALL)
267
- end
268
-
@@ -1,54 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- if ARGV.size != 1
4
- puts "Usage: #{$0} ogg-audio-file"
5
- exit
6
- end
7
-
8
- require 'gst'
9
-
10
- loop = GLib::MainLoop.new(nil, false)
11
-
12
- pipeline = Gst::Pipeline.new("ogg-audio-player")
13
- source = Gst::ElementFactory.make("filesrc", "file-source")
14
- parser = Gst::ElementFactory.make("oggdemux", "ogg-parser")
15
- decoder = Gst::ElementFactory.make("vorbisdec", "vorbis-decoder")
16
- converter = Gst::ElementFactory.make("audioconvert", "converter")
17
- sink = Gst::ElementFactory.make("alsasink", "alsa-output")
18
-
19
- source.location = ARGV.shift
20
-
21
- bus = pipeline.bus
22
- bus.add_watch do |bus, message|
23
- case message.type
24
- when Gst::Message::EOS
25
- loop.quit
26
- when Gst::Message::ERROR
27
- p message.parse
28
- loop.quit
29
- end
30
- true
31
- end
32
-
33
-
34
- pipeline.add(source, parser, decoder, converter, sink)
35
- source >> parser
36
- decoder >> converter >> sink
37
-
38
- parser.signal_connect("pad-added") do |element, pad|
39
- sink_pad = decoder.get_pad("sink")
40
- pad.link(sink_pad)
41
- end
42
-
43
- puts "Setting to PLAYING"
44
- pipeline.play
45
- puts "Running"
46
- begin
47
- loop.run
48
- print "Returned, "
49
- rescue Interrupt
50
- print "Interrupted, "
51
- ensure
52
- puts "stopping playback"
53
- pipeline.stop
54
- end
data/sample/type-find.rb DELETED
@@ -1,46 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'gst'
4
-
5
- def type_find(file)
6
- pipeline = Gst::Pipeline.new("pipeline")
7
-
8
- source = Gst::ElementFactory.make("filesrc", "source")
9
- type_find = Gst::ElementFactory.make("typefind", "type-find")
10
- sink = Gst::ElementFactory.make("fakesink", "sink")
11
-
12
- pipeline.add(source, type_find, sink)
13
- source >> type_find >> sink
14
-
15
- found_caps = nil
16
- type_find.signal_connect("have-type") do |element, probability, caps|
17
- found_caps = caps
18
- end
19
-
20
- loop = GLib::MainLoop.new
21
- source.location = file
22
- bus = pipeline.bus
23
- bus.add_watch do |bus, message|
24
- case message.type
25
- when Gst::Message::STATE_CHANGED, Gst::Message::EOS
26
- loop.quit
27
- when Gst::Message::ERROR
28
- p message.parse
29
- loop.quit
30
- end
31
- true
32
- end
33
- pipeline.pause
34
- loop.run
35
- pipeline.stop
36
-
37
- if found_caps
38
- puts("#{file} - #{found_caps}")
39
- else
40
- puts("#{file} - No type found")
41
- end
42
- end
43
-
44
- ARGV.each do |file|
45
- type_find(file)
46
- end
@@ -1,57 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- if ARGV.size != 1
4
- $stderr.puts "Usage: #{$0} uri"
5
- exit 1
6
- end
7
-
8
- require 'gtk2'
9
- require 'gst'
10
- require 'uri'
11
-
12
- def normalize_uri(uri)
13
- uri = URI(uri)
14
- uri.scheme ||= "file"
15
- if uri.scheme == "file"
16
- "file://#{uri.path}"
17
- else
18
- uri.to_s
19
- end
20
- end
21
-
22
- play_bin = Gst::ElementFactory.make('playbin')
23
- bus = play_bin.bus
24
- bus.add_watch do |bus, message|
25
- case message.type
26
- when Gst::Message::EOS
27
- puts "end of stream"
28
- Gtk.main_quit
29
- when Gst::Message::ERROR
30
- $stderr.puts "Error: #{message.parse}"
31
- Gtk.main_quit
32
- end
33
- true
34
- end
35
-
36
- play_bin.uri = normalize_uri(ARGV.first)
37
- video_sink = Gst::ElementFactory.make('xvimagesink')
38
- play_bin.video_sink = video_sink
39
-
40
- window = Gtk::Window.new
41
- window.signal_connect('destroy') do
42
- play_bin.stop
43
- Gtk.main_quit
44
- end
45
- window.signal_connect('expose-event') do
46
- video_sink.xwindow_id = window.window.xid
47
- end
48
- window.show_all
49
-
50
- puts "Streaming #{play_bin.uri}..."
51
- play_bin.play
52
-
53
- begin
54
- Gtk.main
55
- rescue Interrupt
56
- window.destroy
57
- end
data/sample/xml-player.rb DELETED
@@ -1,60 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- ### TODO: I want to set link in build_pipeline.
4
-
5
- unless ARGV.size == 1
6
- puts "Usage: #{$0} [file]"
7
- exit 1
8
- end
9
-
10
- require 'gst'
11
-
12
- XML_FILE = "/tmp/pipeline.xml"
13
- PIPELINE_NAME = "our-pipeline"
14
-
15
- def build_pipeline(file)
16
- source = Gst::ElementFactory.make("filesrc")
17
- decoder = Gst::ElementFactory.make("decodebin")
18
- audio_converter = Gst::ElementFactory.make("audioconvert")
19
- audio_resample = Gst::ElementFactory.make("audioresample")
20
- audio_sink = Gst::ElementFactory.make("autoaudiosink")
21
- source.location = file
22
- pipeline = Gst::Pipeline.new(PIPELINE_NAME)
23
- pipeline.add(source, decoder, audio_converter, audio_resample, audio_sink)
24
- pipeline
25
- end
26
-
27
- def write_pipeline(pipeline, file)
28
- Gst::XML.write_file(pipeline, file)
29
- end
30
-
31
- def read_pipeline(file)
32
- xml = Gst::XML.new
33
- xml.parse_file(file)
34
- pipeline = xml.get_element(PIPELINE_NAME)
35
- children = pipeline.children
36
- source, decoder, audio_converter, audio_resample, audio_sink = children
37
- source >> decoder
38
- audio_converter >> audio_resample >> audio_sink
39
- decoder.signal_connect("new-decoded-pad") do |element, pad|
40
- sink_pad = audio_converter.get_pad("sink")
41
- pad.link(sink_pad)
42
- end
43
- pipeline
44
- end
45
-
46
- def play_pipeline(pipeline)
47
- pipeline.play
48
- loop = GLib::MainLoop.new(nil, false)
49
- begin
50
- loop.run
51
- rescue Interrupt
52
- ensure
53
- pipeline.stop
54
- end
55
- end
56
-
57
- pipeline = build_pipeline(ARGV.first)
58
- write_pipeline(pipeline, XML_FILE)
59
- pipeline = read_pipeline(XML_FILE)
60
- play_pipeline(pipeline)
@@ -1,18 +0,0 @@
1
- module GstTestUtils
2
- private
3
- def only_gst_version(major, minor, micro)
4
- unless Gst.check_version?(major, minor, micro)
5
- omit("Require GStreamer >= #{major}.#{minor}.#{micro}")
6
- end
7
- end
8
-
9
- def find_element_factory(name)
10
- factory = Gst::ElementFactory.find(name)
11
- assert_not_nil(factory, "#{name}'s factory should be found.")
12
- factory
13
- end
14
-
15
- def create_element(element_name, name=nil)
16
- find_element_factory(element_name).create(name)
17
- end
18
- end
data/test/run-test.rb DELETED
@@ -1,25 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- # ENV["GST_DEBUG"] = "GST_BUFFER:5"
4
-
5
- base_dir = File.expand_path(File.join(File.dirname(__FILE__), ".."))
6
-
7
- if system("which make > /dev/null")
8
- system("cd #{base_dir.dump} && make > /dev/null") or exit(1)
9
- end
10
-
11
- glib_dir = File.expand_path(File.join(base_dir, "..", "glib2"))
12
- $LOAD_PATH.unshift(File.join(glib_dir, "test"))
13
- require 'glib-test-init'
14
-
15
- $LOAD_PATH.unshift(File.join(glib_dir, "ext", "glib2"))
16
- $LOAD_PATH.unshift(File.join(glib_dir, "lib"))
17
-
18
- $LOAD_PATH.unshift(File.join(base_dir, "ext", "gstreamer"))
19
- $LOAD_PATH.unshift(File.join(base_dir, "lib"))
20
- require "gst"
21
-
22
- $LOAD_PATH.unshift(File.join(base_dir, "test"))
23
- require 'gst-test-utils'
24
-
25
- exit Test::Unit::AutoRunner.run(true)
data/test/test_bin.rb DELETED
@@ -1,167 +0,0 @@
1
- class TestBin < Test::Unit::TestCase
2
- include GstTestUtils
3
-
4
- def test_children
5
- bin = Gst::Bin.new
6
-
7
- element = create_element("filesink")
8
- no_interface_element = create_element("fakesink")
9
- bin << element << no_interface_element
10
-
11
- assert_equal([no_interface_element, element], bin.children)
12
- assert_equal([element], bin.children(Gst::ElementURIHandler))
13
- end
14
-
15
- def test_size
16
- bin = Gst::Bin.new
17
- assert_equal(0, bin.size)
18
- bin << create_element("fakesink")
19
- assert_equal(1, bin.size)
20
- end
21
-
22
- def test_children_cookie
23
- bin = Gst::Bin.new
24
- cookie = bin.children_cookie
25
- assert_equal(cookie, bin.children_cookie)
26
- bin << create_element("fakesink")
27
- assert_not_equal(cookie, bin.children_cookie)
28
- end
29
-
30
- def test_child_bus
31
- bin = Gst::Bin.new
32
- assert_not_nil(bin.child_bus)
33
- end
34
-
35
- def test_messages
36
- bin = Gst::Bin.new
37
- assert_equal([], bin.messages)
38
- end
39
-
40
- def test_polling?
41
- bin = Gst::Bin.new
42
- assert(!bin.polling?)
43
- end
44
-
45
- def test_clock_dirty?
46
- bin = Gst::Bin.new
47
- assert(!bin.clock_dirty?)
48
- end
49
-
50
- def test_provided_clock
51
- bin = Gst::Bin.new
52
- assert_nil(bin.provided_clock)
53
- bin.provided_clock = Gst::SystemClock.new
54
- assert_not_nil(bin.provided_clock)
55
- bin.provided_clock = nil
56
- assert_nil(bin.provided_clock)
57
- end
58
-
59
- def test_clock_provider
60
- bin = Gst::Bin.new
61
- assert_nil(bin.clock_provider)
62
- end
63
-
64
- def test_add
65
- bin = Gst::Bin.new
66
- element = create_element("fakesink")
67
- bin << element
68
- assert_equal(element, bin.children[0])
69
- assert_raise(TypeError) do
70
- bin << "XXX"
71
- end
72
-
73
- element2 = create_element("fakesink")
74
- element3 = create_element("fakesink")
75
- bin.add(element2, element3)
76
- assert_equal([element3, element2], bin.children[0, 2])
77
- end
78
-
79
- def test_remove
80
- bin = Gst::Bin.new
81
- element1 = create_element("fakesink")
82
- element2 = create_element("fakesink")
83
- bin << element1 << element2
84
- assert_equal(2, bin.size)
85
- bin.remove(element1, element2)
86
- assert_equal(0, bin.size)
87
- end
88
-
89
- def test_clear
90
- bin = Gst::Bin.new
91
- element1 = create_element("fakesink")
92
- element2 = create_element("fakesink")
93
- bin << element1 << element2
94
- assert_equal(2, bin.size)
95
- bin.clear
96
- assert_equal(0, bin.size)
97
- end
98
-
99
- def test_refer_by_name
100
- bin = Gst::Bin.new
101
- sub_bin = Gst::Bin.new
102
- bin << sub_bin
103
-
104
- element = create_element("fakesink")
105
- assert_nil(bin.get_child(element.name))
106
- assert_nil(sub_bin.get_child(element.name))
107
- assert_nil(sub_bin.get_child(element.name, true))
108
-
109
- bin << element
110
- assert_equal(element, bin.get_child(element.name))
111
- assert_equal(element, bin.get_child(element.name, true))
112
- assert_nil(sub_bin.get_child(element.name))
113
- assert_equal(element, sub_bin.get_child(element.name, true))
114
- end
115
-
116
- def test_refer_by_interface
117
- bin = Gst::Bin.new
118
- element = create_element("filesink")
119
-
120
- assert_nil(bin.get_child(Gst::ElementURIHandler))
121
-
122
- bin << create_element("fakesink")
123
- assert_nil(bin.get_child(Gst::ElementURIHandler))
124
-
125
- bin << element
126
- assert_equal(element, bin.get_child(Gst::ElementURIHandler))
127
- end
128
-
129
- def test_refer_by_index
130
- bin = Gst::Bin.new
131
- element1 = create_element("filesink")
132
- element2 = create_element("fakesink")
133
-
134
- assert_nil(bin.get_child(0))
135
- assert_nil(bin.get_child(1))
136
- assert_nil(bin.get_child(2))
137
-
138
- bin << element1 << element2
139
- assert_equal(element2, bin.get_child(0))
140
- assert_equal(element1, bin.get_child(1))
141
- assert_nil(bin.get_child(2))
142
- end
143
-
144
- def test_sinks
145
- bin = Gst::Bin.new
146
- sink1 = create_element("filesink")
147
- sink2 = create_element("fakesink")
148
- src = create_element("fakesrc")
149
-
150
- assert_equal([], bin.sinks)
151
-
152
- bin << src << sink1 << sink2
153
- assert_equal([sink2, sink1], bin.sinks)
154
- end
155
-
156
- def test_sources
157
- bin = Gst::Bin.new
158
- src1 = create_element("filesrc")
159
- src2 = create_element("fakesrc")
160
- sink = create_element("fakesink")
161
-
162
- assert_equal([], bin.sources)
163
-
164
- bin << src1 << src2 << sink
165
- assert_equal([src2, src1], bin.sources)
166
- end
167
- end