2004-12-15 07:30:55 +00:00
|
|
|
<chapter id="chapter-dparams">
|
2006-01-30 21:11:38 +00:00
|
|
|
<title>Dynamic Controllable Parameters</title>
|
2004-12-15 07:30:55 +00:00
|
|
|
|
|
|
|
<sect1 id="section-dparams-getting-started">
|
|
|
|
<title>Getting Started</title>
|
|
|
|
<para>
|
2006-01-30 21:11:38 +00:00
|
|
|
The controller subsystem offers a lightweight way to adjust gobject
|
|
|
|
properties over stream-time.
|
|
|
|
It works by using time-stamped value pairs that are queued for
|
|
|
|
element-properties.
|
|
|
|
At run-time the elements continously pull values changes for the
|
|
|
|
current stream-time.
|
|
|
|
</para>
|
|
|
|
<para>
|
|
|
|
This subsystem is contained within the
|
2006-01-31 16:56:28 +00:00
|
|
|
<filename>gstcontroller</filename> library.
|
2004-12-15 07:30:55 +00:00
|
|
|
You need to include the header in your application's source file:
|
|
|
|
</para>
|
|
|
|
<programlisting>
|
|
|
|
...
|
|
|
|
#include <gst/gst.h>
|
2006-01-30 21:11:38 +00:00
|
|
|
#include <gst/controller/gstcontroller.h>
|
2004-12-15 07:30:55 +00:00
|
|
|
...
|
|
|
|
</programlisting>
|
|
|
|
<para>
|
2006-01-30 21:11:38 +00:00
|
|
|
Your application should link to the shared library <filename>gstreamer-controller</filename>.
|
2004-12-15 07:30:55 +00:00
|
|
|
</para>
|
|
|
|
<para>
|
2006-01-30 21:11:38 +00:00
|
|
|
The <filename>gstreamer-controller</filename> library needs to be initialized
|
2004-12-15 07:30:55 +00:00
|
|
|
when your application is run. This can be done after the the GStreamer
|
|
|
|
library has been initialized.
|
|
|
|
</para>
|
|
|
|
<programlisting>
|
|
|
|
...
|
2006-01-31 16:56:28 +00:00
|
|
|
gst_init (&argc, &argv);
|
|
|
|
gst_controller_init (&argc, &argv);
|
2004-12-15 07:30:55 +00:00
|
|
|
...
|
|
|
|
</programlisting>
|
|
|
|
</sect1>
|
2006-01-30 21:11:38 +00:00
|
|
|
|
|
|
|
<sect1 id="section-dparams-parameters">
|
2006-01-31 16:56:28 +00:00
|
|
|
<title>Setting up parameter control</title>
|
2004-12-15 07:30:55 +00:00
|
|
|
<para>
|
2006-01-31 16:56:28 +00:00
|
|
|
The first step is to select the parameters that should be controlled.
|
|
|
|
This returns a controller object that is needed to further adjust the
|
|
|
|
behaviour.
|
2004-12-15 07:30:55 +00:00
|
|
|
</para>
|
|
|
|
<programlisting>
|
2006-12-19 15:06:42 +00:00
|
|
|
controller = gst_object_control_properties(object, "prop1", "prop2",...);
|
2004-12-15 07:30:55 +00:00
|
|
|
</programlisting>
|
|
|
|
<para>
|
2006-01-30 21:11:38 +00:00
|
|
|
Next we can select an interpolation mode. This mode controls how inbetween
|
|
|
|
values are determined.
|
|
|
|
The controller subsystem can e.g. fill gaps by smoothing parameter changes.
|
|
|
|
Each controllable GObject property can be
|
|
|
|
interpolated differently.
|
2004-12-15 07:30:55 +00:00
|
|
|
</para>
|
|
|
|
<programlisting>
|
2006-01-30 21:11:38 +00:00
|
|
|
gst_controller_set_interpolation_mode(controller,"prop1",mode);
|
2004-12-15 07:30:55 +00:00
|
|
|
</programlisting>
|
|
|
|
<para>
|
2006-01-30 21:11:38 +00:00
|
|
|
Finally one needs to set control points. These are time-stamped GValues.
|
|
|
|
The values become active when the timestamp is reached. They still stay
|
|
|
|
in the list. If e.g. the pipeline runs a loop (using a segmented seek),
|
|
|
|
the control-curve gets repeated as well.
|
2004-12-15 07:30:55 +00:00
|
|
|
</para>
|
|
|
|
<programlisting>
|
2006-01-30 21:11:38 +00:00
|
|
|
gst_controller_set (controller, "prop1" ,0 * GST_SECOND, value1);
|
|
|
|
gst_controller_set (controller, "prop1" ,1 * GST_SECOND, value2);
|
2004-12-15 07:30:55 +00:00
|
|
|
</programlisting>
|
|
|
|
<para>
|
2006-01-30 21:11:38 +00:00
|
|
|
The controller subsystem has a builtin live-mode. Even though a parameter
|
|
|
|
has timestamped control-values assigned one can change the GObject
|
|
|
|
property through <function>g_object_set()</function>.
|
|
|
|
This is highly useful when binding the GObject properties to GUI widgets.
|
|
|
|
When the user adjusts the value with the widget, one can set the GOBject
|
|
|
|
property and this remains active until the next timestamped value overrides.
|
|
|
|
This also works with smoothed parameters.
|
2004-12-15 07:30:55 +00:00
|
|
|
</para>
|
|
|
|
</sect1>
|
|
|
|
|
|
|
|
</chapter>
|