diff --git a/ChangeLog b/ChangeLog index 492fc954fa..1a611565ee 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2005-09-29 Edward Hervey + + * gst/gst.override: + * gst/gstlibs.override: + Proper wrapping of GstController + * examples/Makefile.am: + * examples/audio-controller.py: + Example to show how to use gst.Controller + 2005-09-29 Edward Hervey * examples/gstfile.py: diff --git a/examples/Makefile.am b/examples/Makefile.am index 6a221cbc86..808dc26300 100644 --- a/examples/Makefile.am +++ b/examples/Makefile.am @@ -1,5 +1,6 @@ examplesdir = $(pkgdatadir)/examples examples_DATA = \ + audio-controller.py \ bps.py \ cp.py \ debugslider.py \ diff --git a/examples/audio-controller.py b/examples/audio-controller.py new file mode 100644 index 0000000000..990b96793c --- /dev/null +++ b/examples/audio-controller.py @@ -0,0 +1,36 @@ +#!/usr/bin/env python + +# audio-controller.py +# (c) 2005 Edward Hervey +# Test case for the GstController on sinesrc -> alsasink +# Inspired from ensonic's examples/controller/audio-controller.c + +import gst +import time + +def main(): + pipeline = gst.Pipeline("audiocontroller") + src = gst.element_factory_make("sinesrc", "src") + sink = gst.element_factory_make("alsasink", "sink") + pipeline.add_many(src, sink) + src.link(sink) + + control = gst.Controller(src, "freq", "volume") + control.set_interpolation_mode("volume", gst.INTERPOLATE_LINEAR) + control.set_interpolation_mode("volume", gst.INTERPOLATE_LINEAR) + + control.set("volume", 0, 0.0) + control.set("volume", 2 * gst.SECOND, 1.0) + control.set("volume", 4 * gst.SECOND, 0.0) + control.set("volume", 6 * gst.SECOND, 1.0) + + control.set("freq", 0, 440.0) + control.set("freq", 3 * gst.SECOND, 3000.0) + control.set("freq", 6 * gst.SECOND, 880.0) + + pipeline.set_state(gst.STATE_PLAYING) + + time.sleep(7) + +if __name__ == "__main__": + main() diff --git a/gst/gst.override b/gst/gst.override index 177e451676..dc79763d6a 100644 --- a/gst/gst.override +++ b/gst/gst.override @@ -274,6 +274,7 @@ init if (!pygst_value_init()) return; pygst_miniobject_init(); + gst_controller_init(NULL, NULL); } %% modulename gst diff --git a/gst/gstlibs.override b/gst/gstlibs.override index 798ae5814a..17dccab094 100644 --- a/gst/gstlibs.override +++ b/gst/gstlibs.override @@ -1,4 +1,4 @@ -/* -*- Mode: C; ; c-file-style: "python" -*- */ +/* -*- Mode: C; ; c-basic-offset: 4 -*- */ /* gst-python * Copyright (C) 2005 Edward Hervey * @@ -66,3 +66,38 @@ _wrap_gst_controller_set (PyGObject *self, PyObject *args) Py_INCREF (Py_False); return Py_False; } +%% +override gst_controller_new_list args +static int +_wrap_gst_controller_new_list(PyGObject *self, PyObject *args) +{ + PyGObject *target; + gint len; + GList *list = NULL; + + if ((len = PyTuple_Size(args)) < 1) { + PyErr_SetString(PyExc_TypeError, "Controller requires at least a target object"); + return -1; + } + target = (PyGObject *) PyTuple_GetItem(args, 0); + if (len > 1) + while (len-- > 1) { + PyObject *temp; + gchar *str; + + temp = PyTuple_GetItem(args, len); + str = PyString_AsString(temp); + GST_INFO("prepending %s [%d]", str, len); + list = g_list_prepend(list, PyString_AsString(temp)); + } + + self->obj = (GObject *) gst_controller_new_list(target->obj, list); + + if (!self->obj) { + PyErr_SetString(PyExc_RuntimeError, "could not create GstController object"); + return -1; + } + + pygobject_register_wrapper((PyObject *) self); + return 0; +}