rename to vorbisplay.py print out meta/stream info
authorDavid I. Lehn <dlehn@users.sourceforge.net>
Thu, 6 Feb 2003 21:49:00 +0000 (21:49 +0000)
committerDavid I. Lehn <dlehn@users.sourceforge.net>
Thu, 6 Feb 2003 21:49:00 +0000 (21:49 +0000)
Original commit message from CVS:
rename to vorbisplay.py
print out meta/stream info

examples/gst/oggplay.py [deleted file]
examples/gst/vorbisplay.py [new file with mode: 0755]
examples/gstreamer/oggplay.py [deleted file]
examples/gstreamer/vorbisplay.py [new file with mode: 0755]

diff --git a/examples/gst/oggplay.py b/examples/gst/oggplay.py
deleted file mode 100755 (executable)
index 96a8469..0000000
+++ /dev/null
@@ -1,80 +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 <dlehn@users.sourceforge.net>
-#
-
-import sys
-from gstreamer import *
-
-def main():
-   "Basic example to play an Ogg Vorbis stream through OSS"
-   #gst_debug_set_categories(-1)
-
-   if len(sys.argv) != 2:
-      print 'usage: %s <Ogg Vorbis file>' % (sys.argv[0])
-      return -1
-
-   # create a new bin to hold the elements
-   bin = Pipeline('pipeline')
-
-   # create a disk reader
-   filesrc = gst_element_factory_make ('filesrc', 'disk_source');
-   if not filesrc:
-      print 'could not find plugin \"filesrc\"'
-      return -1
-   filesrc.set_property('location', sys.argv[1])
-
-   # now get the decoder
-   decoder = gst_element_factory_make ('vorbisfile', 'parse');
-   if not decoder:
-      print 'could not find plugin \"vorbisfile\"'
-      return -1
-
-   # and an audio sink
-   osssink = gst_element_factory_make ('osssink', 'play_audio')
-   if not osssink:
-      print 'could not find plugin \"osssink\"'
-      return -1
-
-   #  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)
diff --git a/examples/gst/vorbisplay.py b/examples/gst/vorbisplay.py
new file mode 100755 (executable)
index 0000000..3761c70
--- /dev/null
@@ -0,0 +1,154 @@
+#!/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 <dlehn@users.sourceforge.net>
+#
+
+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"
+    #gst_debug_set_categories(-1)
+
+    if len(sys.argv) != 2:
+        print 'usage: %s <Ogg Vorbis file>' % (sys.argv[0])
+        return -1
+
+    # create a new bin to hold the elements
+    bin = Pipeline('pipeline')
+
+    # create a disk reader
+    filesrc = gst_element_factory_make ('filesrc', 'disk_source');
+    if not filesrc:
+        print 'could not find plugin \"filesrc\"'
+        return -1
+    filesrc.set_property('location', sys.argv[1])
+
+    # now get the decoder
+    decoder = gst_element_factory_make ('vorbisfile', 'parse');
+    if not decoder:
+        print 'could not find plugin \"vorbisfile\"'
+        return -1
+    decoder.connect('notify', decoder_notified)
+
+    # and an audio sink
+    osssink = gst_element_factory_make ('osssink', 'play_audio')
+    if not osssink:
+        print 'could not find plugin \"osssink\"'
+        return -1
+
+    #  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)
diff --git a/examples/gstreamer/oggplay.py b/examples/gstreamer/oggplay.py
deleted file mode 100755 (executable)
index 96a8469..0000000
+++ /dev/null
@@ -1,80 +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 <dlehn@users.sourceforge.net>
-#
-
-import sys
-from gstreamer import *
-
-def main():
-   "Basic example to play an Ogg Vorbis stream through OSS"
-   #gst_debug_set_categories(-1)
-
-   if len(sys.argv) != 2:
-      print 'usage: %s <Ogg Vorbis file>' % (sys.argv[0])
-      return -1
-
-   # create a new bin to hold the elements
-   bin = Pipeline('pipeline')
-
-   # create a disk reader
-   filesrc = gst_element_factory_make ('filesrc', 'disk_source');
-   if not filesrc:
-      print 'could not find plugin \"filesrc\"'
-      return -1
-   filesrc.set_property('location', sys.argv[1])
-
-   # now get the decoder
-   decoder = gst_element_factory_make ('vorbisfile', 'parse');
-   if not decoder:
-      print 'could not find plugin \"vorbisfile\"'
-      return -1
-
-   # and an audio sink
-   osssink = gst_element_factory_make ('osssink', 'play_audio')
-   if not osssink:
-      print 'could not find plugin \"osssink\"'
-      return -1
-
-   #  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)
diff --git a/examples/gstreamer/vorbisplay.py b/examples/gstreamer/vorbisplay.py
new file mode 100755 (executable)
index 0000000..3761c70
--- /dev/null
@@ -0,0 +1,154 @@
+#!/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 <dlehn@users.sourceforge.net>
+#
+
+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"
+    #gst_debug_set_categories(-1)
+
+    if len(sys.argv) != 2:
+        print 'usage: %s <Ogg Vorbis file>' % (sys.argv[0])
+        return -1
+
+    # create a new bin to hold the elements
+    bin = Pipeline('pipeline')
+
+    # create a disk reader
+    filesrc = gst_element_factory_make ('filesrc', 'disk_source');
+    if not filesrc:
+        print 'could not find plugin \"filesrc\"'
+        return -1
+    filesrc.set_property('location', sys.argv[1])
+
+    # now get the decoder
+    decoder = gst_element_factory_make ('vorbisfile', 'parse');
+    if not decoder:
+        print 'could not find plugin \"vorbisfile\"'
+        return -1
+    decoder.connect('notify', decoder_notified)
+
+    # and an audio sink
+    osssink = gst_element_factory_make ('osssink', 'play_audio')
+    if not osssink:
+        print 'could not find plugin \"osssink\"'
+        return -1
+
+    #  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)