diff --git a/examples/gstreamer/.gitignore b/examples/gstreamer/.gitignore deleted file mode 100644 index f25164d724..0000000000 --- a/examples/gstreamer/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -Makefile.in -Makefile -*.pyc -*.pyo -*.swp diff --git a/examples/gstreamer/Makefile.am b/examples/gstreamer/Makefile.am deleted file mode 100644 index ffdfebbbb0..0000000000 --- a/examples/gstreamer/Makefile.am +++ /dev/null @@ -1,10 +0,0 @@ -EXTRA_DIST = \ - bps.py \ - cp.py \ - dvdplay.py \ - f2f.py \ - identity.py \ - ilat.py \ - lat.py \ - rot13.py \ - vorbisplay.py diff --git a/examples/gstreamer/bps.py b/examples/gstreamer/bps.py deleted file mode 100755 index e7e6f33f9c..0000000000 --- a/examples/gstreamer/bps.py +++ /dev/null @@ -1,136 +0,0 @@ -#!/usr/bin/env python -# -# gst-python -# Copyright (C) 2003 David I. Lehn -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Library General Public -# License as published by the Free Software Foundation; either -# version 2 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Library General Public License for more details. -# -# You should have received a copy of the GNU Library General Public -# License along with this library; if not, write to the -# Free Software Foundation, Inc., 59 Temple Place - Suite 330, -# Boston, MA 02111-1307, USA. -# -# Author: David I. Lehn -# - -import sys -import time -import gobject -import gst -import gtk - -class BPS(object): - def __init__(self): - self.buffers = 0 - self.start = 0 - - def done(self): - end = time.time() - dt = end - self.start - bps = self.buffers/dt - spb = dt/self.buffers - print '\t%d buffers / %fs\t= %f bps\t= %f spb' % (self.buffers, dt, bps, spb) - - def eos(self, sink): - self.done() - if self.method in ('gtk', 'c'): - gst.main_quit() - - def fakesrc(self, buffers): - src = gst.Element('fakesrc','src') - src.set_property('silent', 1) - src.set_property('num_buffers', buffers) - return src - - def fakesink(self): - sink = gst.Element('fakesink','sink') - sink.set_property('silent', 1) - return sink - - def build_pipeline(self, buffers): - pipeline = gst.Pipeline('pipeline') - - src = self.fakesrc(buffers) - pipeline.add(src) - sink = self.fakesink() - pipeline.add(sink) - sink.connect('eos', self.eos) - src.link(sink) - - return pipeline - - def notify(self, sender, obj, arg): - prop = obj.get_property(arg.name) - print 'notify', sender, arg.name, prop - print prop - - def idle(self, pipeline): - return pipeline.iterate() - - def test(self, method): - print '%s:' % (method,), - self.method = method - - self.pipeline.set_state(gst.STATE_PLAYING) - - if method == 'py': - self.start = time.time() - while self.pipeline.iterate(): - pass - elif method == 'c': - self.start = time.time() - self.iter_id = gst.add_iterate_bin(self.pipeline) - gst.main() - #elif method == 'gst': - # self.start = time.time() - # gtk.idle_add(self.idle, self.pipeline) - # gtk.main() - elif method == 'all': - self.start = time.time() - iterate_bin_all(self.pipeline) - - self.pipeline.set_state(gst.STATE_NULL) - - def run(self, buffers, methods): - self.buffers = buffers - - print '# Testing buffer processing rate for "fakesrc ! fakesink"' - #print '# gst = gtk idle loop function in python' - print '# c = gtk idle loop function in C' - print '# py = full iterate loop in python' - print '# all = full iterate loop in C' - print '# bps = buffers per second' - print '# spb = seconds per buffer' - - self.pipeline = self.build_pipeline(buffers) - assert self.pipeline - #self.pipeline.connect('deep-notify', self.notify) - - map(self.test, methods) - -def main(args): - "GStreamer Buffers-Per-Second tester" - - if len(args) < 2: - print 'usage: %s buffers [method method ...]' % args[0] - return 1 - - bps = BPS() - - buffers = int(args[1]) - methods = args[2:] - if not methods: - methods = ('gtk', 'c', 'py', 'all') - - bps.run(buffers, methods) - -if __name__ == '__main__': - sys.exit(main(sys.argv)) diff --git a/examples/gstreamer/cp.py b/examples/gstreamer/cp.py deleted file mode 100755 index 5b97c6df50..0000000000 --- a/examples/gstreamer/cp.py +++ /dev/null @@ -1,68 +0,0 @@ -#!/usr/bin/env python -# -# gst-python -# Copyright (C) 2002 David I. Lehn -# 2004 Johan Dahlin -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Library General Public -# License as published by the Free Software Foundation; either -# version 2 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Library General Public License for more details. -# -# You should have received a copy of the GNU Library General Public -# License along with this library; if not, write to the -# Free Software Foundation, Inc., 59 Temple Place - Suite 330, -# Boston, MA 02111-1307, USA. -# -# Author: David I. Lehn -# - -import sys - -import gst - -def filter(input, output): - "A GStreamer copy pipeline which can add arbitrary filters" - - # create a new bin to hold the elements - bin = gst.Pipeline('pipeline') - - filesrc = gst.Element('filesrc', 'source'); - filesrc.set_property('location', input) - - stats = gst.Element('statistics', 'stats'); - stats.set_property('silent', False) - stats.set_property('buffer_update_freq', True) - stats.set_property('update_on_eos', True) - - filesink = gst.Element('filesink', 'sink') - filesink.set_property('location', output) - - bin.add_many(filesrc, stats, filesink) - gst.element_link_many(filesrc, stats, filesink) - - # start playing - bin.set_state(gst.STATE_PLAYING); - - while bin.iterate(): - pass - - # stop the bin - bin.set_state(gst.STATE_NULL) - -def main(args): - "A GStreamer based cp(1) with stats" - - if len(args) != 3: - print 'usage: %s source dest' % (sys.argv[0]) - return -1 - - return filter(args[1], args[2]) - -if __name__ == '__main__': - sys.exit(main(sys.argv)) diff --git a/examples/gstreamer/dvdplay.py b/examples/gstreamer/dvdplay.py deleted file mode 100755 index b70bfe513c..0000000000 --- a/examples/gstreamer/dvdplay.py +++ /dev/null @@ -1,227 +0,0 @@ -#!/usr/bin/env python -# -# gst-python -# Copyright (C) 2002 David I. Lehn -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Library General Public -# License as published by the Free Software Foundation; either -# version 2 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Library General Public License for more details. -# -# You should have received a copy of the GNU Library General Public -# License along with this library; if not, write to the -# Free Software Foundation, Inc., 59 Temple Place - Suite 330, -# Boston, MA 02111-1307, USA. -# -# Author: David I. Lehn -# - -import sys -import gst -import gtk -gtk.threads_init() - -class DVDPlayer(object): - def idle(self, pipeline): - #gtk.threads_enter() - pipeline.iterate() - #gtk.threads_leave() - return 1 - - def eof(self, sender): - print 'EOS, quiting' - sys.exit(0) - - def mpegparse_newpad(self, parser, pad, pipeline): - #gtk.threads_enter() - print '***** a new pad %s was created' % pad.get_name() - if pad.get_name()[:6] == 'video_': - pad.link(self.v_queue.get_pad('sink')) - self.pipeline.set_state(gst.STATE_PAUSED) - self.pipeline.add(self.v_thread) - #self.v_thread.set_state(gst.STATE_PLAYING) - self.pipeline.set_state(gst.STATE_PLAYING) - elif pad.get_name() == 'private_stream_1.0': - pad.link(self.a_queue.get_pad('sink')) - self.pipeline.set_state(gst.STATE_PAUSED) - self.pipeline.add(self.a_thread) - #self.a_thread.set_state(gst.STATE_PLAYING); - self.pipeline.set_state(gst.STATE_PLAYING) - else: - print 'unknown pad: %s' % pad.get_name() - #gtk.threads_leave() - - def mpegparse_have_size(self, videosink, width, height): - gtk.threads_enter() - self.gtk_socket.set_usize(width,height) - self.appwindow.show_all() - gtk.threads_leave() - - def main(self, location, title, chapter, angle): - self.location = location - self.title = title - self.chapter = chapter - self.angle = angle - - #gst_init(&argc,&argv); - #gnome_init('MPEG2 Video player','0.0.1',argc,argv); - - ret = self.build() - if ret: - return ret - - return self.run() - - def run(self): - print 'setting to PLAYING state' - - gtk.threads_enter() - - self.pipeline.set_state(gst.STATE_PLAYING) - - gtk.idle_add(self.idle,self.pipeline) - - gtk.main() - - self.pipeline.set_state(gst.STATE_NULL) - - gtk.threads_leave() - - return 0 - - def build_video_thread(self): - # ***** pre-construct the video thread ***** - self.v_thread = gst.Thread('v_thread') - - self.v_queue = gst.Element('queue','v_queue') - - self.v_decode = gst.Element('mpeg2dec','decode_video') - - self.color = gst.Element('colorspace','color') - - self.efx = gst.Element('identity','identity') - #self.efx = gst.Element('edgeTV','EdgeTV') - #self.efx = gst.Element('agingTV','AgingTV') - #effectv: diceTV: DiceTV - #effectv: warpTV: WarpTV - #effectv: shagadelicTV: ShagadelicTV - #effectv: vertigoTV: VertigoTV - #self.efx = gst.Element('revTV','RevTV') - #self.efx = gst.Element('quarkTV','QuarkTV') - - self.color2 = gst.Element('colorspace','color2') - - self.show = gst.Element('xvideosink','show') - #self.show = Element('sdlvideosink','show') - #self.show = Element('fakesink','fakesinkv') - #self.show.set_property('silent', 0) - #self.show.set_property('sync', 1) - - #self.deinterlace = gst.Element('deinterlace','deinterlace') - self.deinterlace = gst.Element('identity','deinterlace') - - last = None - for e in (self.v_queue, self.v_decode, self.color, self.efx, self.color2, self.deinterlace, self.show): - self.v_thread.add(e) - if last: - last.link(e) - last = e - - #self.v_queue.link(self.v_decode) - #self.v_decode.link(self.color) - #self.color.link(self.efx) - #self.efx.link(self.color2) - #self.color2.link(self.show) - - def build_audio_thread(self): - # ***** pre-construct the audio thread ***** - self.a_thread = gst.Thread('a_thread') - - self.a_queue = gst.Element('queue','a_queue') - - self.a_decode = gst.Element('a52dec','decode_audio') - - self.osssink = gst.Element('osssink','osssink') - #self.osssink = Element('fakesink','fakesinka') - #self.osssink.set_property('silent', 0) - #self.osssink.set_property('sync', 0) - - for e in (self.a_queue, self.a_decode, self.osssink): - self.a_thread.add(e) - - self.a_queue.link(self.a_decode) - self.a_decode.link(self.osssink) - - def build(self): - # ***** construct the main pipeline ***** - self.pipeline = gst.Pipeline('pipeline') - - self.src = gst.Element('dvdreadsrc','src'); - - self.src.connect('deep_notify',self.dnprint) - self.src.set_property('location', self.location) - self.src.set_property('title', self.title) - self.src.set_property('chapter', self.chapter) - self.src.set_property('angle', self.angle) - - self.parse = gst.Element('mpegdemux','parse') - self.parse.set_property('sync', 0) - - self.pipeline.add(self.src) - self.pipeline.add(self.parse) - - self.src.link(self.parse) - - # pre-construct the audio/video threads - self.build_video_thread() - self.build_audio_thread() - - # ***** construct the GUI ***** - #self.appwindow = gnome_app_new('DVD Player','DVD Player') - - #self.gtk_socket = gtk_socket_new () - #gtk_socket.show() - - #gnome_app_set_contents(GNOME_APP(appwindow), - #GTK_WIDGET(gtk_socket)); - - #gtk_widget_realize (gtk_socket); - #gtk_socket_steal (GTK_SOCKET (gtk_socket), - #gst_util_get_int_arg (GTK_OBJECT(show), 'xid')); - - self.parse.connect('new_pad',self.mpegparse_newpad, self.pipeline) - self.src.connect('eos',self.eof) - #show.connect('have_size',self.mpegparse_have_size, self.pipeline) - - #self.pipeline.connect('error',self.pipeline_error) - #self.pipeline.connect('deep_notify',self.dnprint) - - return 0 - - def pipeline_error(self, sender, obj, error): - print "(%s) ERROR: %s: %s" % (self, obj.name(), error) - - def dnprint(self, sender, obj, param): - str = obj.get_property(param.name) - print '%s: %s = %s' % (sender.get_name(), param.name, str) - -def main(args): - if len(sys.argv) < 5: - print 'usage: %s dvdlocation title chapter angle' % sys.argv[0] - return -1 - - location = sys.argv[1] - title = int(sys.argv[2]) - chapter = int(sys.argv[3]) - angle = int(sys.argv[4]) - - player = DVDPlayer() - return player.main(location, title, chapter, angle) - -if __name__ == '__main__': - sys.exit(main(sys.argv)) diff --git a/examples/gstreamer/f2f.py b/examples/gstreamer/f2f.py deleted file mode 100755 index 7d162a68f9..0000000000 --- a/examples/gstreamer/f2f.py +++ /dev/null @@ -1,65 +0,0 @@ -#!/usr/bin/env python -# -# gst-python -# Copyright (C) 2002 David I. Lehn -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Library General Public -# License as published by the Free Software Foundation; either -# version 2 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Library General Public License for more details. -# -# You should have received a copy of the GNU Library General Public -# License along with this library; if not, write to the -# Free Software Foundation, Inc., 59 Temple Place - Suite 330, -# Boston, MA 02111-1307, USA. -# -# Author: David I. Lehn -# - -import sys - -import gst - -def handoff(sender, *args): - print sender.get_name(), args - -def main(args): - # create a new bin to hold the elements - #gst_debug_set_categories(-1) - bin = gst.Pipeline('pipeline') - - src = gst.Element('fakesrc', 'src') - src.connect('handoff', handoff) - src.set_property('silent', 1) - src.set_property('num_buffers', 10) - - sink = gst.Element('fakesink', 'sink') - sink.connect('handoff', handoff) - src.set_property('silent', 1) - - # add objects to the main pipeline - for e in (src, sink): - bin.add(e) - - # link the elements - res = src.link(sink) - assert res - - # start playing - res = bin.set_state(gst.STATE_PLAYING); - assert res - - while bin.iterate(): - pass - - # stop the bin - res = bin.set_state(gst.STATE_NULL) - assert res - -if __name__ == '__main__': - sys.exit(main(sys.argv)) diff --git a/examples/gstreamer/filesrc.py b/examples/gstreamer/filesrc.py deleted file mode 100644 index f6e06e597b..0000000000 --- a/examples/gstreamer/filesrc.py +++ /dev/null @@ -1,54 +0,0 @@ -import sys -import gobject -import gst - -class FileSource(gst.Element): - blocksize = 4096 - fd = None - def __init__(self, name): - self.__gobject_init__() - self.set_name(name) - self.srcpad = gst.Pad('src', gst.PAD_SRC) - self.srcpad.set_get_function(self.srcpad_get) - self.add_pad(self.srcpad) - - def set_property(self, name, value): - if name == 'location': - self.fd = open(value, 'r') - - def srcpad_get(self, pad): - data = self.fd.read(self.blocksize) - if data: - return gst.Buffer(data) - else: - self.set_eos() - return gst.Event(gst.EVENT_EOS) -gobject.type_register(FileSource) - -def main(args): - if len(args) != 3: - print 'Usage: %s input output' % (args[0]) - return -1 - - bin = gst.Pipeline('pipeline') - - filesrc = FileSource('filesource') - #filesrc = gst.Element('filesrc', 'src') - filesrc.set_property('location', args[1]) - - filesink = gst.Element('filesink', 'sink') - filesink.set_property('location', args[2]) - - bin.add_many(filesrc, filesink) - gst.element_link_many(filesrc, filesink) - - bin.set_state(gst.STATE_PLAYING); - - while bin.iterate(): - pass - - bin.set_state(gst.STATE_NULL) - -if __name__ == '__main__': - sys.exit(main(sys.argv)) - diff --git a/examples/gstreamer/identity.py b/examples/gstreamer/identity.py deleted file mode 100755 index ac84bb02c7..0000000000 --- a/examples/gstreamer/identity.py +++ /dev/null @@ -1,91 +0,0 @@ -#!/usr/bin/env python -# -# gst-python -# Copyright (C) 2002 David I. Lehn -# 2004 Johan Dahlin -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Library General Public -# License as published by the Free Software Foundation; either -# version 2 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Library General Public License for more details. -# -# You should have received a copy of the GNU Library General Public -# License along with this library; if not, write to the -# Free Software Foundation, Inc., 59 Temple Place - Suite 330, -# Boston, MA 02111-1307, USA. -# -# Author: David I. Lehn -# - -import sys -import gobject -import gst - -class Identity(gst.Element): - def __init__(self): - self.__gobject_init__() - self.sinkpad = gst.Pad('sink', gst.PAD_SINK) - self.add_pad(self.sinkpad) - self.sinkpad.set_chain_function(self.chain) - self.sinkpad.set_link_function(self.pad_link) - - self.srcpad = gst.Pad('src', gst.PAD_SRC) - self.add_pad(self.srcpad) - self.srcpad.set_link_function(self.pad_link) - - def get_bufferpool(self, pad): - print 'get_bufferpool:', self, pad - return self.srcpad.get_bufferpool() - - def pad_link(self, pad, caps): - print 'pad_link:', self, pad, caps - return gst.PAD_LINK_OK - - def chain(self, pad, buf): - self.srcpad.push(buf) - -gobject.type_register(Identity) - -def filter(element): - # create a new bin to hold the elements - bin = gst.Pipeline('pipeline') - - filesrc = gst.Element('sinesrc', 'source'); - filesink = gst.Element('fakesink', 'sink') - - stats = gst.Element('statistics', 'stats'); - stats.set_property('silent', False) - stats.set_property('buffer_update_freq', True) - stats.set_property('update_on_eos', True) - - bin.add_many(filesrc, element, stats, filesink) - gst.element_link_many(filesrc, element, stats, filesink) - - # start playing - bin.set_state(gst.STATE_PLAYING); - - while bin.iterate(): - pass - - # stop the bin - bin.set_state(gst.STATE_NULL) - -def main(args): - "A GStreamer Python subclassing example of an identity filter" - - identity = Identity() - identity.set_name('identity') - if not identity: - print 'could not create \"Identity\" element' - return -1 - - return filter(identity) - -if __name__ == '__main__': - sys.exit(main(sys.argv)) - diff --git a/examples/gstreamer/ilat.py b/examples/gstreamer/ilat.py deleted file mode 100755 index 015724ebb4..0000000000 --- a/examples/gstreamer/ilat.py +++ /dev/null @@ -1,98 +0,0 @@ -#!/usr/bin/env python -# -# gst-python -# Copyright (C) 2002 David I. Lehn -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Library General Public -# License as published by the Free Software Foundation; either -# version 2 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Library General Public License for more details. -# -# You should have received a copy of the GNU Library General Public -# License along with this library; if not, write to the -# Free Software Foundation, Inc., 59 Temple Place - Suite 330, -# Boston, MA 02111-1307, USA. -# -# Author: David I. Lehn -# - -import sys -import gst -import time -from identity import Identity - -def update(sender, *args): - print sender.get_name(), args - -def build(filters, b): - # create a new bin to hold the elements - bin = gst.Pipeline('pipeline') - - src = gst.Element('fakesrc', 'source'); - src.set_property('silent', 1) - src.set_property('num_buffers', b) - - sink = gst.Element('fakesink', 'sink') - sink.set_property('silent', 1) - - elements = [src] + filters + [sink] - bin.add_many(*elements) - gst.element_link_many(*elements) - return bin - -def filter(bin): - bin.set_state(gst.STATE_PLAYING); - while bin.iterate(): - pass - bin.set_state(gst.STATE_NULL) - -ccnt = 0 -def c(): - global ccnt - id = gst.Element('identity', 'c identity %d' % ccnt); - id.set_property('silent', 1) - id.set_property('loop_based', 0) - ccnt += 1 - return id - -pcnt = 0 -def py(): - id = Identity() - assert id - global pcnt - id.set_name('py identity %d' % pcnt) - pcnt += 1 - return id - -def check(f, n, b): - fs = [] - for i in range(n): - fs.append(f()) - - pipe = build(fs, b) - - start = time.time() - ret = filter(pipe) - end = time.time() - print '%s b:%d i:%d t:%f' % (f, b, n, end - start) - return ret - -def main(args): - "Identity timer and latency check" - - if len(args) < 3: - print 'usage: %s identites buffers' % args[0] - return -1 - n = int(args[1]) - b = int(args[2]) - - for f in (c, py): - check(f, n, b) - -if __name__ == '__main__': - sys.exit(main(sys.argv)) diff --git a/examples/gstreamer/lat.py b/examples/gstreamer/lat.py deleted file mode 100755 index 6e57306920..0000000000 --- a/examples/gstreamer/lat.py +++ /dev/null @@ -1,178 +0,0 @@ -#!/usr/bin/env python -# -# gst-python -# Copyright (C) 2002 David I. Lehn -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Library General Public -# License as published by the Free Software Foundation; either -# version 2 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Library General Public License for more details. -# -# You should have received a copy of the GNU Library General Public -# License along with this library; if not, write to the -# Free Software Foundation, Inc., 59 Temple Place - Suite 330, -# Boston, MA 02111-1307, USA. -# -# Author: David I. Lehn -# - -import sys -import time -import gst - -def update(sender, *args): - print sender.get_name(), args - -max = 0 -min = -1 -total = 0 -count = 0 -print_del = 1 -interations = 0 - -def handoff_src(src, buf): - #buf.set_timestamp(time.time()) - pass - -def handoff_sink(sink, buf): - global max, min, total, count - - end = time.time() - #d = end - buf.get_timestamp() - d = end - 0 - if d > max: - max = d - if d < min: - min = d - total += d - count += 1 - avg = total/count - - if (count % print_del) == 0: - print '%07d:%08d min:%08d max:%08d avg:%f\n' %\ - (count, d, min, max, avg), - -def identity_add(pipeline, first, count): - last = first - - for i in range(count): - name = 'identity_%03d' % i - ident = gst.Element('identity', name) - ident.set_property('silent', 1) - pipeline.add(ident) - last.get_pad('src').link(ident.get_pad('sink')) - last = ident - - return last - -def fakesrc(): - src = gst.Element('fakesrc','src') - src.set_property('silent', 1) - src.set_property('num_buffers', iterations) - src.connect('handoff', handoff_src) - return src - -def fakesink(): - sink = gst.Element('fakesink','fakesink') - sink.set_property('silent', 1) - sink.connect('handoff', handoff_sink) - return sink - -def simple(argv): - if len(argv) < 1: - print 'simple: bad params' - return None - idents = int(argv[0]) - - pipeline = gst.Pipeline('pipeline') - - src = fakesrc() - pipeline.add(src) - last = identity_add(pipeline, src, idents) - sink = fakesink() - pipeline.add(sink) - last.get_pad('src').link(sink.get_pad('sink')) - - return pipeline - -def queue(argv): - if len(argv) < 1: - print 'queue: bad params' - return None - idents = int(argv[0]) - - pipeline = gst.Pipeline('pipeline') - - src_thr = gst.Thread('src_thread') - - src = fakesrc() - src_thr.add(src) - - src_q = gst.Element('queue','src_q') - src_thr.add(src_q) - src.get_pad('src').link(src_q.get_pad('sink')) - - pipeline.add(src_thr) - - last = identity_add(pipeline, src_q, idents) - - sink_q = gst.Element('queue','sink_q') - pipeline.add(sink_q) - last.get_pad('src').link(sink_q.get_pad('sink')) - - sink_thr = gst.Thread('sink_thread') - - sink = fakesink() - - sink_thr.add(sink) - - pipeline.add(sink_thr) - - sink_q.get_pad('src').link(sink.get_pad('sink')) - - return pipeline - -tests = { - 'simple' : ('ident_count [scheduler_name]', simple), - 'queue' : ('ident_count [scheduler_name]', queue), -} - -def main(): - "A GStreamer latency tester" - global iterations, print_del - - if len(sys.argv) < 3: - print 'usage: %s iterations print_del test_name [test_params...]' % sys.argv[0] - for name in tests.keys(): - doc, func = tests[name] - print ' %s %s' % (name, doc) - return -1 - else: - iterations = int(sys.argv[1]) - print_del = int(sys.argv[2]) - name = sys.argv[3] - - pipeline = tests[name][1](sys.argv[4:]) - assert pipeline - - #xmlSaveFile('lat.gst', gst_xml_write(pipeline)) - - pipeline.set_state(gst.STATE_PLAYING) - - while count < iterations: - pipeline.iterate() - - pipeline.set_state(gst.STATE_NULL) - - print - - return 0; - -if __name__ == '__main__': - ret = main() - sys.exit (ret) diff --git a/examples/gstreamer/player.py b/examples/gstreamer/player.py deleted file mode 100644 index ebd3db0cc8..0000000000 --- a/examples/gstreamer/player.py +++ /dev/null @@ -1,41 +0,0 @@ -import os -import sys - -import gst - -def found_tags(element, source, tags): - print 'Artist:', tags.get('artist') - print 'Title: ', tags.get('title') - print 'Album: ', tags.get('album') - -def playfile(filename): - bin = gst.Pipeline('player') - - source = gst.Element('filesrc', 'src') - source.set_property('location', filename) - - spider = gst.Element('spider', 'spider') - spider.connect('found-tag', found_tags) - - sink = gst.Element('osssink', 'sink') - - bin.add_many(source, spider, sink) - gst.element_link_many(source, spider, sink) - - print 'Playing:', os.path.basename(filename) - bin.set_state(gst.STATE_PLAYING) - - try: - while bin.iterate(): - pass - except KeyboardInterrupt: - pass - - bin.set_state(gst.STATE_NULL) - -def main(args): - map(playfile, args[1:]) - -if __name__ == '__main__': - sys.exit(main(sys.argv)) - diff --git a/examples/gstreamer/rot13.py b/examples/gstreamer/rot13.py deleted file mode 100755 index 064fae06d2..0000000000 --- a/examples/gstreamer/rot13.py +++ /dev/null @@ -1,61 +0,0 @@ -#!/usr/bin/env python -# -# gst-python -# Copyright (C) 2002 David I. Lehn -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Library General Public -# License as published by the Free Software Foundation; either -# version 2 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Library General Public License for more details. -# -# You should have received a copy of the GNU Library General Public -# License along with this library; if not, write to the -# Free Software Foundation, Inc., 59 Temple Place - Suite 330, -# Boston, MA 02111-1307, USA. -# -# Author: David I. Lehn -# - -import sys -import gst -from identity import Identity -from cp import filter - -class Rot13(Identity): - def chain(self, pad, buf): - # override Identity's chain - data = buf.get_data() - data2 = '' - # waste cycles - for c in data: - if c.isalpha(): - if c.islower(): - a = 'a' - else: - a = 'A' - c = chr((((ord(c) - ord(a)) + 13) % 26) + ord(a)) - data2 = data2 + c - newbuf = gst.Buffer() - newbuf.set_data(data2) - self.srcpad.push(newbuf) - -gobject.type_register(Rot13) - -def main(args): - "A GStreamer Python subclassing example of a rot13 filter" - - rot13 = Rot13() - rot13.set_name('rot13') - if not rot13: - print 'could not create \"Rot13\" element' - return -1 - - return filter([rot13]) - -if __name__ == '__main__': - sys.exit(main(sys.argv)) diff --git a/examples/gstreamer/vorbisplay.py b/examples/gstreamer/vorbisplay.py deleted file mode 100755 index acb9dd0e30..0000000000 --- a/examples/gstreamer/vorbisplay.py +++ /dev/null @@ -1,144 +0,0 @@ -#!/usr/bin/env python -# -# gst-python -# Copyright (C) 2003 David I. Lehn -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Library General Public -# License as published by the Free Software Foundation; either -# version 2 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Library General Public License for more details. -# -# You should have received a copy of the GNU Library General Public -# License along with this library; if not, write to the -# Free Software Foundation, Inc., 59 Temple Place - Suite 330, -# Boston, MA 02111-1307, USA. -# -# Author: David I. Lehn -# - -import sys -from gstreamer import * - -def gst_props_debug_entry(entry, level=0): - name = entry.get_name() - type = entry.get_props_type() - indent = ' '*level - - if type == PROPS_INT_TYPE: - ret, val = entry.get_int() - assert ret - print '%s%s: int %d' % (indent, name, val) - elif type == PROPS_FLOAT_TYPE: - ret, val = entry.get_float() - assert ret - print '%s%s: float %f' % (indent, name, val) - elif type == PROPS_FOURCC_TYPE: - ret, val = entry.get_fourcc() - assert ret - print '%s%s: fourcc %c%c%c%c' % (indent, name, - (val>>0)&0xff, - (val>>8)&0xff, - (val>>16)&0xff, - (val>>24)&0xff) - elif type == PROPS_BOOLEAN_TYPE: - ret, val = entry.get_bool() - assert ret - print '%s%s: bool %d' % (indent, name, val) - elif type == PROPS_STRING_TYPE: - ret, val = entry.get_string() - assert ret - print '%s%s: string "%s"' % (indent, name, val) - elif type == PROPS_INT_RANGE_TYPE: - ret, min, max = entry.get_int_range() - assert ret - print '%s%s: int range %d-%d' % (indent, name, min, max) - elif type == PROPS_FLOAT_RANGE_TYPE: - ret, min, max = entry.get_float_range() - assert ret - print '%s%s: float range %f-%f' % (indent, name, min, max) - elif type == PROPS_LIST_TYPE: - ret, val = entry.get_list() - assert ret - print '[list] (' - for e in val: - gst_props_debug_entry(e, level+1) - print ')' - else: - print '%sWARNING: %s: unknown property type %d' % (indent, name, type) - -def debug_caps(caps): - props = caps.get_props() - ret, plist = props.get_list() - for e in plist: - gst_props_debug_entry(e, level=1) - -def streaminfo(sender, pspec): - assert pspec.name == 'streaminfo' - caps = sender.get_property(pspec.name) - print 'streaminfo:' - debug_caps(caps) - -def metadata(sender, pspec): - assert pspec.name == 'metadata' - caps = sender.get_property(pspec.name) - print 'metadata:' - debug_caps(caps) - -def decoder_notified(sender, pspec): - if pspec.name == 'streaminfo': - streaminfo(sender, pspec) - elif pspec.name == 'metadata': - metadata(sender, pspec) - else: - print 'notify:', sender, pspec - -def main(): - "Basic example to play an Ogg Vorbis stream through OSS" - - if len(sys.argv) != 2: - print 'usage: %s ' % (sys.argv[0]) - return -1 - - # create a new bin to hold the elements - bin = Pipeline('pipeline') - - # create a disk reader - filesrc = Element ('filesrc', 'disk_source') - filesrc.set_property('location', sys.argv[1]) - - # now get the decoder - decoder = Element ('vorbisfile', 'parse') - decoder.connect('notify', decoder_notified) - - # and an audio sink - osssink = Element ('osssink', 'play_audio') - - # add objects to the main pipeline - for e in (filesrc, decoder, osssink): - bin.add(e) - - # link the elements - previous = None - for e in (filesrc, decoder, osssink): - if previous: - previous.link(e) - previous = e - - # start playing - bin.set_state(STATE_PLAYING); - - while bin.iterate(): pass - - # stop the bin - bin.set_state(STATE_NULL) - - return 0 - -if __name__ == '__main__': - ret = main() - sys.exit(ret)