| <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. This |
| is particular handy for implementing sources and sink elements with |
| multiple pads. |
| </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> |