
<!-- ############ chapter ############# -->

<chapter id="chapter-dparams">
  <title>Supporting Dynamic Parameters</title>
  <para>
    Warning, this part describes 0.10 and is outdated.
  </para>
  <para>
    Sometimes object properties are not powerful enough to control the
    parameters that affect the behaviour of your element.
    When this is the case you can mark these parameters as being Controllable.
    Aware applications can use the controller subsystem to dynamically adjust
    the property values over time.
  </para>

<sect1 id="section-dparam-start">
  <title>Getting Started</title>

  <para>
    The controller subsystem is contained within the
    <filename>gstcontroller</filename> library. You need to include the header in
    your element's source file:
  </para>
  <programlisting>
...
#include &lt;gst/gst.h&gt;
#include &lt;gst/controller/gstcontroller.h&gt;
...
  </programlisting>

  <para>
    Even though the <filename>gstcontroller</filename> library may be linked into
    the host application, you should make sure it is initialized in your
    <filename>plugin_init</filename> function:
  </para>
  <programlisting>
  static gboolean
  plugin_init (GstPlugin *plugin)
  {
    ...
    /* initialize library */
    gst_controller_init (NULL, NULL);
    ...
  }
  </programlisting>
  <para>
    It makes not sense for all GObject parameter to be real-time controlled.
    Therefore the next step is to mark controllable parameters.
    This is done by using the special flag <constant>GST_PARAM_CONTROLLABLE</constant>.
    when setting up GObject params in the <function>_class_init</function> method.    
  </para>
  <programlisting>
  g_object_class_install_property (gobject_class, PROP_FREQ,
      g_param_spec_double ("freq", "Frequency", "Frequency of test signal",
          0.0, 20000.0, 440.0,
          G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS));
  </programlisting>

</sect1>

<sect1 id="chapter-dparam-loop">
  <title>The Data Processing Loop</title>

  <para>
    In the last section we learned how to mark GObject params as controllable.
    Application developers can then queue parameter changes for these parameters.
    The approach the controller subsystem takes is to make plugins responsible 
    for pulling the changes in. This requires just one action:
  </para>
  <programlisting>
    gst_object_sync_values(element,timestamp);
  </programlisting>
  <para>
    This call makes all parameter-changes for the given timestamp active by
    adjusting the GObject properties of the element. Its up to the element to
    determine the synchronisation rate.
  </para>
  
  <sect2 id="chapter-dparam-loop-video">
    <title>The Data Processing Loop for Video Elements</title>
    <para>
      For video processing elements it is the best to synchronise for every frame.
      That means one would add the <function>gst_object_sync_values()</function>
      call described in the previous section to the data processing function of
      the element.
    </para>
  </sect2>

  <sect2 id="chapter-dparam-loop-audio">
    <title>The Data Processing Loop for Audio Elements</title>
    <para>
      For audio processing elements the case is not as easy as for video
      processing elements. The problem here is that audio has a much higher rate.
      For PAL video one will e.g. process 25 full frames per second, but for
      standard audio it will be 44100 samples.
      It is rarely useful to synchronise controllable parameters that often. 
      The easiest solution is also to have just one synchronisation call per
      buffer processing. This makes the control-rate depend on the buffer
      size.
    </para>
    <para>
      Elements that need a specific control-rate need to break their data
      processing loop to synchronise every n-samples.
    </para>
  </sect2>
</sect1>
</chapter>
