gst/interfaces.*: wrap mixer get_volume
authorThomas Vander Stichele <thomas@apestaart.org>
Wed, 17 Jan 2007 06:27:38 +0000 (06:27 +0000)
committerThomas Vander Stichele <thomas@apestaart.org>
Wed, 17 Jan 2007 06:27:38 +0000 (06:27 +0000)
Original commit message from CVS:
* gst/interfaces.defs:
* gst/interfaces.override:
wrap mixer get_volume
* examples/Makefile.am:
* examples/mixer.py:
add an example using it

ChangeLog
examples/Makefile.am
examples/mixer.py [new file with mode: 0644]
gst/interfaces.defs
gst/interfaces.override

index c6c1923..c303a2e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,14 @@
 2007-01-17  Thomas Vander Stichele  <thomas at apestaart dot org>
 
+       * gst/interfaces.defs:
+       * gst/interfaces.override:
+         wrap mixer get_volume
+       * examples/Makefile.am:
+       * examples/mixer.py:
+         add an example using it
+
+2007-01-17  Thomas Vander Stichele  <thomas at apestaart dot org>
+
        * configure.ac:
          fix use of PKG_CHECK_MODULES
          check for a pygobject of at least 2.11 for a value_from_pyobject fix
index e7decea..495e473 100644 (file)
@@ -10,6 +10,7 @@ examples_DATA =       \
        fvumeter.py     \
        gst-discover    \
        gstfile.py      \
+       mixer.py        \
        play.py         \
        pipeline-tester \
        remuxer.py      \
diff --git a/examples/mixer.py b/examples/mixer.py
new file mode 100644 (file)
index 0000000..73a3d80
--- /dev/null
@@ -0,0 +1,20 @@
+# -*- Mode: Python -*-
+# vi:si:et:sw=4:sts=4:ts=4
+
+import sys
+
+import gst
+import gst.interfaces
+
+a = gst.element_factory_make('alsasrc')
+print a.set_state(gst.STATE_PLAYING)
+
+print "Inputs:"
+for t in a.list_tracks():
+    if t.flags & gst.interfaces.MIXER_TRACK_INPUT:
+        sys.stdout.write(t.label)
+    sys.stdout.write(': %d - %d' % (t.min_volume, t.max_volume))
+    sys.stdout.write(': %r' % (a.get_volume(t), ))
+    if t.flags & gst.interfaces.MIXER_TRACK_RECORD:
+        sys.stdout.write(' (selected)')
+    sys.stdout.write('\n')
index 5b3d509..bcca757 100644 (file)
 (define-method get_volume
   (of-object "GstMixer")
   (c-name "gst_mixer_get_volume")
-  (return-type "none")
+  (return-type "tuple")
   (parameters
     '("GstMixerTrack*" "track")
-    '("gint*" "volumes")
   )
 )
 
index 3a2df89..89d15e5 100644 (file)
@@ -161,3 +161,39 @@ _wrap_gst_mixer_options_get_values (PyGObject *self)
 
     return py_list;
 }
+
+%%
+override gst_mixer_get_volume kwargs
+static PyObject *
+_wrap_gst_mixer_get_volume (PyGObject *self, PyObject *args, PyObject *kwargs)
+{
+    static char *kwlist[] = { "track", NULL };
+    PyGObject *track;
+    PyObject *py_tuple;
+    gint *volumes = NULL;
+    gint channels;
+    int i;
+
+    if (!PyArg_ParseTupleAndKeywords (args, kwargs, "O!:GstMixer.get_volume",
+        kwlist, &PyGstMixerTrack_Type, &track))
+      return NULL;
+
+    g_object_get (GST_MIXER_TRACK (track->obj), "num-channels", &channels,
+      NULL);
+
+    volumes = g_malloc (channels * sizeof (gint));
+    /* 0 channels will cause volume to be a NULL pointer, but we still want
+     * our (empty) tuple */
+    if (channels)
+      gst_mixer_get_volume (GST_MIXER (self->obj), GST_MIXER_TRACK (track->obj),
+          volumes);
+
+    py_tuple = PyTuple_New (channels);
+
+    for (i = 0; i < channels; ++i) {
+      PyTuple_SET_ITEM (py_tuple, i, PyInt_FromLong (volumes[i]));
+    }
+    g_free (volumes);
+
+    return py_tuple;
+}