From 7e94773d0fb5ba770a9504c408aeea764d4e7240 Mon Sep 17 00:00:00 2001 From: Thomas Vander Stichele Date: Wed, 17 Jan 2007 06:27:38 +0000 Subject: [PATCH] gst/interfaces.*: wrap mixer get_volume 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 | 9 +++++++++ examples/Makefile.am | 1 + examples/mixer.py | 20 ++++++++++++++++++++ gst/interfaces.defs | 3 +-- gst/interfaces.override | 36 ++++++++++++++++++++++++++++++++++++ 5 files changed, 67 insertions(+), 2 deletions(-) create mode 100644 examples/mixer.py diff --git a/ChangeLog b/ChangeLog index c6c1923..c303a2e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,14 @@ 2007-01-17 Thomas Vander Stichele + * 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 + * configure.ac: fix use of PKG_CHECK_MODULES check for a pygobject of at least 2.11 for a value_from_pyobject fix diff --git a/examples/Makefile.am b/examples/Makefile.am index e7decea..495e473 100644 --- a/examples/Makefile.am +++ b/examples/Makefile.am @@ -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 index 0000000..73a3d80 --- /dev/null +++ b/examples/mixer.py @@ -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') diff --git a/gst/interfaces.defs b/gst/interfaces.defs index 5b3d509..bcca757 100644 --- a/gst/interfaces.defs +++ b/gst/interfaces.defs @@ -244,10 +244,9 @@ (define-method get_volume (of-object "GstMixer") (c-name "gst_mixer_get_volume") - (return-type "none") + (return-type "tuple") (parameters '("GstMixerTrack*" "track") - '("gint*" "volumes") ) ) diff --git a/gst/interfaces.override b/gst/interfaces.override index 3a2df89..89d15e5 100644 --- a/gst/interfaces.override +++ b/gst/interfaces.override @@ -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; +} -- 2.7.4