<chapter id="chapter-other-manager" xreflabel="Writing a Manager">
  <title>Writing a Manager</title>
  <para>
    Managers are elements that add a function or unify the function of
    another (series of) element(s). Managers are generally a
    <classname>GstBin</classname> with one or more ghostpads. Inside them
    is/are the actual element(s) that matters. There is several cases where
    this is useful. For example:
  </para>
  <itemizedlist>
    <listitem>
      <para>
        To add support for private events with custom event handling to
        another element.
      </para>
    </listitem>
    <listitem>
      <para>
        To add support for custom pad <function>_query ()</function>
        or <function>_convert ()</function> handling to another element.
      </para>
    </listitem>
    <listitem>
      <para>
        To add custom data handling before or after another element's data
        handler function (generally its <function>_chain ()</function>
        function).
      </para>
    </listitem>
    <listitem>
      <para>
        To embed an element, or a series of elements, into something that
        looks and works like a simple element to the outside world.
      </para>
    </listitem>
  </itemizedlist>
  <para>
    Making a manager is about as simple as it gets. You can derive from a
    <classname>GstBin</classname>, and in most cases, you can embed the
    required elements in the <function>_init ()</function> already, including
    setup of ghostpads. If you need any custom data handlers, you can connect
    signals or embed a second element which you control.
  </para>
</chapter>
